965 Commits

Author SHA1 Message Date
DuckieTM b003915b06 Merge pull request #178 from duckietm/Dev
Dev
2026-05-30 07:53:57 +02:00
DuckieTM fa71e8eb4a 🆙 Toolbar fix in rare cases the room-tools container 2026-05-30 07:18:05 +02:00
DuckieTM 5c010a428a Merge pull request #176 from simoleo89/fix/remove-orphan-fortune-wheel-rare-values-dups
fix(build): remove orphan duplicate fortune-wheel/rare-values views breaking type check
2026-05-30 07:13:03 +02:00
DuckieTM 47cbff9763 Merge pull request #173 from medievalshell/Dev
feat: branding furni image position editor (move + scale) + fix(navigator): ignore search events while disabled + invalidate on FlatCreated + Restyle Catalog with two ui
2026-05-30 07:12:12 +02:00
medievalshell f7e78674c6 fix(client): catalogo mobile, BC/navigator/profilo/amici
- Catalogo Hippiehotel responsive su mobile (finestra 96vw/72vh, rail
  tappabile, sotto-pannelli ristretti); duckie ripristinato come entita
  separata (revert modifiche scrollbar sul suo CSS)
- BC e catalogo normale seguono entrambi il toggle tema; il duckie non
  duplica piu il logo nelle pagine info_duckets
- Navigator: highlight della tab segue currentTabCode (era bloccato su
  Pubblici mentre il contenuto cambiava)
- Inventario: link inventory/show/<tab> per deep-link a una scheda
- User Profile: avatar visibile e allineato a bg/stand, finestra piu
  grande, bordi puliti, Created/Last login mostrano il valore, bottoni
  Change Looks/Rooms/Change Badges/Add friends/Achievement funzionanti
- Amici: header non piu sovradimensionati e teste avatar inquadrate
  (regole flat: quelle annidate .nitro-friends{&...} non si applicavano)
2026-05-30 05:49:04 +02:00
medievalshell d79bdd33e1 fix(catalog): scrollbar-gutter both-edges, icona nav centrata con/senza scroll 2026-05-30 03:42:58 +02:00
medievalshell 52a7dc1604 fix(catalog): scrollbar-gutter stable sulla nav, proporzioni costanti con/senza scroll 2026-05-30 03:32:40 +02:00
medievalshell 8e95ca9570 style(catalog): logo info torna a contain (immagine intera con bordi) 2026-05-30 03:22:48 +02:00
medievalshell a034517143 style(catalog): logo info edge-to-edge (object-cover) 2026-05-30 03:17:32 +02:00
medievalshell 624a310c59 style(catalog): logo info massimizzato senza crop, testo box piu piccolo 2026-05-30 03:14:36 +02:00
medievalshell 9f737c5129 style(catalog): logo info a tutta larghezza (no crop, no margini) 2026-05-30 03:08:44 +02:00
medievalshell c9997f6049 fix(catalog): immagini pagina supportano URL completi e estensioni non-gif 2026-05-30 03:03:28 +02:00
medievalshell 552cd1f538 fix(catalog): layout info BC nasconde la navigazione vuota a sinistra 2026-05-30 02:43:07 +02:00
medievalshell 6db8d3e191 feat(catalog): layout info BC (logo 70% + box testo nero) via info_duckets 2026-05-30 02:34:25 +02:00
medievalshell 91f114bb3d fix(config): pet.asset.url usa /pet/ non /pets/ (cartella bundled e 'pet') 2026-05-30 02:02:43 +02:00
medievalshell 72952318c0 fix(catalog-admin): non re-includere ' (pageId)' nella caption editata
Il form di modifica pagina precompilava la caption con la localization
che include il suffisso ' (id)' aggiunto dal server ai mod, e salvandola
l'id si accumulava (Wired (1114) (1114) ...). Ora striscia quel suffisso.
2026-05-30 00:26:59 +02:00
medievalshell 4e96355a94 perf(boot): non pre-fetchare le URL gamedata directory
preloadUrl salta le URL che finiscono con '/' (le gamedata split sono
directory): prima 404avano e sprecavano connessioni all'avvio.
2026-05-30 00:15:07 +02:00
medievalshell 4f133abe33 feat(catalog): default upstream, toggle classico = Hippiehotel
Default catalog = rebuild upstream ultima release (CatalogClassicView).
Il toggle 'stile classico' mostra il catalogo Hippiehotel (CatalogModernView).
2026-05-29 23:55:36 +02:00
medievalshell 2b8aca23b6 revert(catalog): ripristina catalogo Hippiehotel.nl (Modern+Classic)
Rimpiazza il catalogo del rebuild upstream con quello originale di
Hippiehotel.nl Nitro-V3 (CatalogModernView ripristinato, ClassicView/
sub-views/CSS pre-merge). CatalogView sceglie Modern (default) o Classic
via il toggle 'stile classico'. Rimosso l'hack CatalogClassicLegacy.css.
2026-05-29 23:49:10 +02:00
medievalshell 32dcbaf265 feat(catalog): stile classico completo via skin legacy
Ripristina il look del catalogo pre-merge come CSS scoped sotto
body.catalog-skin-legacy (CatalogClassicLegacy.css), attivato dal toggle
'stile classico'. CatalogView mette/toglie la classe sul body.
2026-05-29 23:40:37 +02:00
medievalshell dc0a8f965e feat(catalog): toggle stile catalogo classico/moderno
Aggiunge un checkbox nelle impostazioni utente per scegliere lo stile del
catalogo (classico vs moderno) + flag globale catalog.classic.style in
ui-config.json come default per tutti. Override per-utente in localStorage.
2026-05-29 23:36:06 +02:00
medievalshell 643e558aa8 Merge remote-tracking branch 'upstream/Dev' into Dev
# Conflicts:
#	src/hooks/navigator/useNavigatorSearch.ts
2026-05-29 23:06:48 +02:00
duckietm 74747b8aad 🆙 fix the header for catalogue 2026-05-29 16:18:01 +02:00
duckietm 888073acb1 🆙 Update #2 2026-05-29 15:16:14 +02:00
duckietm d0c11f047a 🆙 Complete rebuild of toolbar / catalog / inventory make it 100% mobile friendly Take #1 2026-05-29 11:30:17 +02:00
duckietm fbcda88cd3 🆙 Update Rare-Value page and fix the loading of the json 2026-05-29 08:31:18 +02:00
medievalshell b360595539 Merge upstream/Dev: fortune wheel settings popup + radio toggle
Adopt upstream wheel redo (Settings popup gated by acc_wheeladmin,
RareValues becomes view-only) and the radio enable/disable config gate.
Drop the broken orphaned duplicates under user-settings/fortune-wheel
and user-settings/rare-values (wrong relative import depth, unused,
failed typecheck). Soundboard / radio / background editor untouched.
2026-05-28 22:28:00 +02:00
Life 84a9821ad6 Merge pull request #4 from simoleo89/fix/remove-orphan-fortune-wheel-rare-values-dups
fix(build): remove orphan duplicate fortune-wheel/rare-values views u…
2026-05-28 18:21:38 +02:00
simoleo89 a89ac44c0b fix(build): remove orphan duplicate fortune-wheel/rare-values views under user-settings
The "Wheel of prizes" feature accidentally committed byte-identical copies of
the fortune-wheel and rare-values components inside src/components/user-settings/.
Nested one directory deeper, they keep the original `../../api`/`../../common`/...
imports, which now resolve to non-existent src/components/* paths and break the
type check (TS2307). The files are unreferenced — MainView imports the real
components from ./fortune-wheel and ./rare-values.
2026-05-28 18:16:55 +02:00
simoleo89 d5e64ada25 feat(navigator): search-scope filter chips replace the dropdown (P4 wave 1b)
NavigatorFilterChipsView renders the 5 SearchFilterOptions (anything /
room.name / owner / tag / group) as pill chips instead of a <select>.
Active chip uses bg-primary; the chips sit on their own row above the
search input. Drives the existing searchFilterIndex local state — the
debounce effect already rebuilds the query:value string from it, so no
behavioural change to how searches are issued.

Deferred to wave 1c: saved-search chip row (replacing the 600px sidebar).
That one needs care — a saved-search click sends NavigatorSearchComposer
directly, which P2's accept-filter (result.code must match currentTabCode)
can reject; the chip version must route through setTab/setFilter instead.
Wants browser verification.

navigator suites 28/28, lint:hooks clean, no new typecheck errors.
2026-05-28 18:06:29 +02:00
simoleo89 3bce0c0191 feat(navigator): empty-state + skeleton views, fix double search fetch (P4 wave 1a)
Visual polish, first wave:
- NavigatorEmptyStateView: replaces the bare "No rooms found" text with a
  centered icon + message + a Create-room CTA. Reuses existing i18n keys
  (navigator.search.returned.no.results / .roomsettings.moderation.none /
  .createroom.create) so no new localization entries are needed.
- NavigatorSearchSkeletonView: animate-pulse placeholder rows shown while a
  search is in flight and no result is cached yet (matches the HK dashboard
  skeleton pattern). Replaces the NitroCard.Content spinner overlay for the
  result list.

Bug fix bundled in: NavigatorSearchView called useNavigatorSearch() a second
time purely to read searchResult for its input-sync effect. Since the hook is
not a useBetween singleton, that registered a duplicate NavigatorSearchEvent
listener AND fired a duplicate NavigatorSearchComposer on every search.
NavigatorView now owns the single useNavigatorSearch() call and passes
searchResult to NavigatorSearchView via prop.

Test maintenance: useNavigatorSearch.test.tsx was written for the original
useNitroQuery implementation, which upstream reverted (05d71dd1) to
useMessageEvent + useState. Removed the dead QueryClient scaffolding, fixed
case 1 (assert no fetch starts with empty tab), dropped case 7 (the query
invalidator no longer exists). 6 cases, all green.

Full suite 471/471. Typecheck: only the environmental renderer-mismatch
errors (soundboard / rare-values / floorplan APIs absent from the linked
renderer), none in navigator files.
2026-05-28 18:02:48 +02:00
simoleo89 772b6dd632 docs: refresh CLAUDE.md after navigator modernization merge
- TL;DR: working base is now main (not the old feat/react19-modernization
  long-running branch); document the navigator hook split landing
- Add useNitroQuery fragility note: the one-shot listener pattern is
  unreliable for primary visible data (bit ModTools chatlogs + navigator
  search); reserve it for config/secondary fetches, use
  useMessageEvent + useState for primary content
- Add navigator modernization row to the "What's wired up" table
- Add navigator hook locations to "Where everything lives"
2026-05-28 17:54:20 +02:00
Life 9658e1bd40 Enhance sync-fork.yml with better error handling
Updated the sync-fork workflow to improve error handling and branch management.
2026-05-28 17:49:40 +02:00
Life bbe130e1d4 Improve renderer pairing logic in CI configuration
Refactor renderer repository and reference resolution logic in CI workflow.
2026-05-28 17:44:56 +02:00
Life 9089aacdf5 Merge branch 'duckietm:main' into main 2026-05-28 17:42:07 +02:00
DuckieTM c1ec022ded Merge pull request #174 from duckietm/Dev
Dev
2026-05-28 16:28:06 +02:00
duckietm 47e8338570 🆙 Wheel of prizes ! 2026-05-28 16:27:48 +02:00
duckietm 06b8fda1c9 🆙 Enable or disable the radio 2026-05-28 15:52:29 +02:00
medievalshell 7a0b57e267 fix(navigator): ignore search events while disabled + invalidate on FlatCreated
useNavigatorSearch had two gaps its tests cover:
- with no active tab the query is disabled, but a NavigatorSearchEvent still
  updated the data; now such events are ignored until a tab is active
- a newly created room (FlatCreatedEvent) now invalidates the
  ['navigator','search'] query and refetches the current search

Fixes the 2 failing useNavigatorSearch tests; full suite 472/472.
2026-05-28 15:39:46 +02:00
medievalshell 49836bbeef feat: branding furni image position editor (move + scale)
Adds an "Editor Posizione" button to the furni infostand action bar for
branding / MPU furni, opening a dialog to position and zoom the image:
- draggable dot moves offsetX/Y (live, local preview only)
- slider zooms the image (scale, via the renderer's per-sprite scale)
- offsetZ kept as z-index; Save persists + broadcasts via SetObjectData
- radio "Live" + all editor labels go through LocalizeText (external texts)

Pairs with the renderer branding scale/offset support and Arcturus' `scale`
default on InteractionRoomAds.
2026-05-28 15:33:05 +02:00
duckietm bade7e2623 🆙 Update texts to use JSON5 and added all text 2026-05-28 15:25:27 +02:00
duckietm e7088595df 🆙 Small update 2026-05-28 14:05:09 +02:00
DuckieTM c7ae4907ad Merge pull request #171 from medievalshell/Dev
feat: rare values panel + fortune wheel UI + prize editor + feat: soundboard (room-scoped custom audio pads) + feat: hotel radio widget (client-side, multi-station)
2026-05-28 13:49:52 +02:00
DuckieTM 475c71af2e Merge branch 'Dev' into Dev 2026-05-28 13:49:43 +02:00
duckietm 05d71dd163 🆙 Small fix for the navigator
This mirrors what the old god-hook used to do and what the rest of the codebase still uses for everything else. The TanStack one-shot listener pattern (awaitNitroResponse registers a listener, awaits one matching response, removes itself) is fragile against renderer-bundle quirks — the parser fires but the listener never matches, so the promise never resolves and query.data stays undefined forever. That's exactly the symptom you saw: server logs show the response arriving, client UI stays blank.
2026-05-28 13:46:44 +02:00
DuckieTM 566d1f655b Merge pull request #170 from simoleo89/feat/navigator-p2-query
feat(navigator): TanStack Query for search (P2)
2026-05-28 13:19:39 +02:00
DuckieTM f9914c4458 Merge pull request #172 from duckietm/Dev
Dev
2026-05-28 13:19:09 +02:00
DuckieTM 30039feb31 Merge branch 'Dev' into feat/navigator-p2-query 2026-05-28 13:06:05 +02:00
DuckieTM eef436f65c Merge pull request #169 from simoleo89/feat/navigator-p5-error-boundaries
feat(navigator): wrap sub-views in WidgetErrorBoundary
2026-05-28 13:05:12 +02:00
DuckieTM 8e46eae3d0 Merge pull request #168 from simoleo89/feat/navigator-modernization
feat(navigator): wired-tools-style hook split + Zustand UI store (P1)
2026-05-28 13:04:48 +02:00