Commit Graph

957 Commits

Author SHA1 Message Date
simoleo89 cdabdedfbf feat(mentions): dedicated toolbar icon sprite 2026-06-02 15:04:11 +02:00
simoleo89 c1085aa4b1 fix(mentions): add en/nl translations for mention strings 2026-06-02 15:04:11 +02:00
simoleo89 c67c90d4c1 feat(mentions): inbox window, toolbar badge, chat-history tab, ui-config + i18n 2026-06-02 15:04:11 +02:00
simoleo89 afb8100300 feat(mentions): client api types, store, snapshot + message hooks 2026-06-02 15:04:11 +02:00
DuckieTM dcdc5cac39 Merge pull request #186 from duckietm/Dev
🆙 Small fix User Settings
2026-06-02 13:02:07 +02:00
duckietm 76ec66932b 🆙 Small fix User Settings 2026-06-02 12:56:48 +02:00
DuckieTM 3125f4fc26 Merge pull request #185 from duckietm/Dev
Dev
2026-06-02 12:05:00 +02:00
duckietm d73f51f61a 🆙 Update Texts 2026-06-02 12:04:39 +02:00
duckietm f98f8ff0bc Merge branch 'Dev' of https://github.com/duckietm/Nitro-V3 into Dev 2026-06-02 10:25:35 +02:00
duckietm ef23526bf7 🆙 Fix avatar in friends and profile 2026-06-02 10:25:33 +02:00
DuckieTM 42c0a75611 Merge pull request #182 from medievalshell/Dev
feat(fortune-wheel): added wheel to theme infrastructure
2026-06-02 10:22:26 +02:00
medievalshell 1b3744a891 Merge remote-tracking branch 'upstream/Dev' into Dev 2026-06-01 19:33:49 +02:00
DuckieTM 75b7f6b7a2 Merge pull request #184 from duckietm/Dev
🆙 Small fix toolbar
2026-06-01 14:44:51 +02:00
duckietm 827c17dc8b 🆙 Small fix toolbar 2026-06-01 14:44:33 +02:00
DuckieTM e8685859c1 Merge pull request #183 from duckietm/Dev
Dev
2026-06-01 08:26:41 +02:00
duckietm f45e2c3ada 🆙 More mobile optimizeing for catalog 2026-06-01 08:20:26 +02:00
medievalshell 5a437b7eda feat(fortune-wheel): add wheel-card and wheel-slice-icon class hooks
Lets a runtime theme scope the wheel card background and scale the slice
prize icons without touching defaults (the hooks add no styles on their own).
2026-05-31 17:28:46 +02:00
medievalshell dc5b1e694d feat(fortune-wheel): expose wheel colors as CSS custom properties
The slice/rim/divider/hub colors are now read from --wheel-* CSS variables
with the current values as fallbacks, so the stock look is unchanged while a
runtime theme can recolor the wheel without rebuilding.
2026-05-31 17:16:23 +02:00
DuckieTM 67d53fde3a Merge pull request #181 from simoleo89/feat/fortune-wheel-improvements
feat(fortune-wheel): celebration reveal, spin animation & prize editor add/remove
2026-05-31 15:44:42 +02:00
DuckieTM c6a1ab9c9a Merge pull request #180 from simoleo89/feat/radio-ui-config-toggle
feat(radio): make the radio widget toggleable from ui-config
2026-05-31 15:44:22 +02:00
DuckieTM a66b04d165 Merge pull request #179 from medievalshell/Dev
feat(chat): 39 new chat bubbles (253-291) + soundboard paginator + feat(custom theme): created infrastucture for custom themes css and icons
2026-05-31 15:44:02 +02:00
DuckieTM 7e0d70a7e6 Merge branch 'Dev' into Dev 2026-05-31 15:43:52 +02:00
DuckieTM b735be4360 Merge pull request #175 from simoleo89/feat/navigator-p4-visual-wave1
feat(navigator): empty-state + skeleton + double-fetch fix (P4 wave 1a)
2026-05-31 15:43:24 +02:00
medievalshell 8097344561 feat(theme): runtime custom theme ecosystem (graphics-only)
Runtime-loaded visual re-skin system (no client rebuild, real themes never
hit git). A theme = a folder on the server (theme.base.url) with a manifest +
CSS "pieces"; each piece is toggled from Settings > Themes (checkboxes). A
broken/404 piece auto-falls back to the default (per piece). Hotel-wide default
via ui-config theme.default (+ theme.default.pieces), per-user override in
localStorage (same pattern as the catalog style toggle).

- api/theme/ThemeManager: fetch index/manifest + inject/remove <link> + fallback
- hooks/theme/useThemes: state + persist + default-from-config + live apply
- components/theme/ThemeApplier: applies on boot (mounted in MainView)
- UserSettings: General/Themes tabs with theme selector + per-piece checkboxes
- custom-themes/: reference template (demo theme "Neon Viola" + README)
- .gitignore: public/custom-themes/ (real themes are never committed)
2026-05-31 14:39:59 +02:00
Life f25b103101 Always render RadioView in MainView component 2026-05-31 11:26:11 +02:00
simoleo89 ccebcad8a8 feat(fortune-wheel): celebration reveal, spin animation, prize editor add/remove
Player experience:
- Tiered win celebration overlay (WheelWinReveal): quiet message for the
  "nothing" slice, lighter reveal for common prizes, full confetti +
  jackpot glow for rare ones. Rarity classified client-side by type +
  amount (wheelPrizeTier), shared icon rendering (wheelPrizeIcon).
- Three-phase spin motion (wind-back -> overshoot -> settle) with a
  reduced-motion fast path; responsive wheel scaling via ResizeObserver.

Reveal-timing fix:
- The server pushes the refreshed winners list (which already contains the
  just-won prize) the instant it answers the spin, ~5s before the wheel
  stops. useFortuneWheel now buffers that update mid-spin and flushes it in
  finishSpin so the prize is no longer spoiled in the winners panel.
- handleTransitionEnd only reacts to the wheel's own transform transition,
  so a child icon's bubbling transitionend can't advance the spin phase
  machine early.

Prize editor (admin):
- Add/Remove prize buttons in FortuneWheelSettingsView. New rows carry a
  negative temp id collapsed to 0 on the wire (server inserts); removed rows
  are simply omitted (server soft-disables). Requires the matching emulator
  change to WheelManager.savePrize / WheelAdminSavePrizesEvent.

i18n: wheel.win.* and rarevalues.editor.add/remove in en/it/nl.
2026-05-31 10:47:51 +02:00
simoleo89 a33bbb3448 feat(radio): make the radio widget toggleable from ui-config
Move the radio on/off switch out of renderer-config (where it sat next
to asset/data URLs) into ui-config, alongside the other UI feature
toggles (game.center.enabled, guides.enabled, …) — the natural home for
a widget switch — and rename it to the dotted convention `radio_ui.enabled`.

The MainView gate now defaults to `false`, so the radio is opt-in: an
absent key keeps it hidden; set `"radio_ui.enabled": true` in ui-config
to show it. The radio.url data source stays in renderer-config.
2026-05-31 09:34:25 +02:00
simoleo89 c9df2d8765 style(navigator): unify room-settings tabs with section cards
Introduce a reusable NavigatorRoomSettingsSectionView card (rounded
bg-gray-100 panel with a bold-small title) and apply it across the
Access, VIP/Chat, Moderation and Rights tabs so every room-settings
screen matches the Base and Misc tab styling. Pure visual restyle —
handleChange wiring, events, composers and validations are unchanged.
2026-05-31 09:20:35 +02:00
simoleo89 5bc3c4ef34 fix(navigator): render delete-room link as a real flex row
The previous fix put 'flex' on the Text component, but Text forces
display:inline as its base class, so the flex never applied and the X
icon dropped onto its own line. Use a Flex container with the icon and
a Text child instead, so icon + label sit on one centered row.
2026-05-31 09:09:00 +02:00
simoleo89 3b8bccfee9 fix(navigator): keep room delete link on a single line
Add whitespace-nowrap to the 'delete room' link and shrink-0 to its X
icon so the label no longer wraps in the narrow room-settings panel.
2026-05-31 09:00:52 +02:00
simoleo89 e8373ea610 feat(navigator): stacked-label layout for room-settings Base tab
Replace the cramped horizontal label/control rows with a vertical
stacked-label layout (bold label above each full-width control),
matching the sibling Access tab. Fixes multi-word labels wrapping in
the narrow panel. Tags share one label with the two inputs side-by-side.
Drops the now-unused Base spacer elements. Layout-only: no change to
handleChange, validation thresholds, save-on-blur, or field order.
2026-05-31 08:48:58 +02:00
simoleo89 a82af03615 docs(navigator): spec for Base tab stacked-label layout
Design doc for upgrading the room-settings Base tab from the cramped
horizontal two-column rows to a stacked-label layout matching the
sibling Access tab. Also gitignore the .superpowers/ brainstorm dir.
2026-05-31 08:46:58 +02:00
medievalshell cbd63220bd fix(chat): slice border-image per-bubble (253-291) per stretch pulito
Le bubble custom ereditavano la slice base (centro largo) -> con repeat si
duplicavano, con stretch si allungavano troppo/storte. Ora ogni bubble ha
border-image-slice/width calcolata dalla sua immagine: il taglio cade nella
zona centrale del corpo, sulla colonna piu uniforme (colore pieno), con un
filo stirabile di ~2px e border-image-repeat: stretch. Cosi il corpo si stira
pulito e i cap restano intatti. (Le bubble con decoro su tutto il corpo, senza
una fascia piena, restano un compromesso: limite intrinseco del 9-slice.)
2026-05-31 06:07:30 +02:00
medievalshell bd24002b93 fix(chat): stretch (non repeat) sulle bubble custom 253-291
Ereditavano border-image-repeat: repeat dalla regola base, quindi il centro
delle nuove bubble (con grafica) si duplicava invece di allungarsi. Override
border-image-repeat: stretch per le 253-291 cosi il corpo si stira come le
originali (che avevano il centro a tinta unita).
2026-05-31 05:23:40 +02:00
medievalshell 7745c5f66b feat(chat): 39 nuove chat bubble (253-291) + paginator soundboard
- 39 bubble custom con relativo pointer colorato (colore campionato dal
  fondo di ogni bubble) + regole CSS in Chats.css (resa in-stanza border-image
  + anteprima nel selettore)
- selezionabili via chat.styles dell'ui-config (lato server)
- soundboard: paginazione 9/pagina (griglia 3x3) con frecce + indicatore,
  cosi la card non cresce a dismisura
2026-05-31 04:01:04 +02:00
simoleo89 ee5e864842 fix(navigator): replace dead Bootstrap classes in room-settings tabs
The Base tab labels used col-3 and the delete row used
d-flex/justify-content-center — Bootstrap utilities that don't exist
in this Tailwind 4 build, so labels collapsed and wrapped. Swap to
w-1/4 shrink-0 and flex/justify-center/items-center, and drop the
dead col-4 on the Access-tab password inputs. Also fix a missing
break in the tag save-error switch (invalid-tag always showed the
non-choosable message) and a && / || precedence bug in saveTags
that checked the wrong tag field.
2026-05-31 01:28:14 +02:00
simoleo89 d447f9941d feat(navigator): convert search input to a React 19 form action
Replace the onKeyDown Enter handler + onClick button with a
<form action={submitSearch}>. Enter submits natively; the search
button (a styled div, not a real <button>) triggers form submission
via formRef.requestSubmit(), so both paths run the single
FormData-driven handler. The 300ms debounced filter push is kept.
2026-05-31 01:18:10 +02:00
simoleo89 7f9e31eec3 fix(navigator): drop vestigial TanStack invalidateQueries from useNavigatorSearch
The hook is the useState/useMessageEvent variant; the leftover
useQueryClient().invalidateQueries call required a QueryClientProvider
the unit test didn't supply (6 failures). The FlatCreatedEvent handler
already re-sends the search composer, so the invalidate was dead code.
2026-05-31 01:06:44 +02:00
simoleo89 e610cfeef4 feat(navigator): reactive favourites via fine-grained store (P3)
Move favourite room ids out of the useBetween navigator store into a
dedicated Zustand store. useNavigatorFavourite(roomId) subscribes only
to s.ids.has(roomId) (a boolean), so a FavouriteChangedEvent for one
room no longer re-renders every favourite-aware view. apply() returns
the same state reference when membership is unchanged.
2026-05-31 01:03:31 +02:00
simoleo89 641593c3ef feat(navigator): responsive layout + saved-search refinement (P4 wave 1c)
- Stack sidebar above results below sm; cap card width to viewport
- Fix tab-bar wrap overlapping content on narrow screens (max-height/height/flex reset)
- Saved-search rows: whole row opens search, hover-reveal delete (no layout shift), bolt icon, empty state
- Hover affordance on navigator grid items and saved-search rows
2026-05-31 00:55:45 +02:00
github-actions[bot] 6b7795847b Merge remote-tracking branch 'upstream/main' 2026-05-30 08:00:12 +00:00
Life b17cd891b3 Merge branch 'duckietm:main' into feat/navigator-p4-visual-wave1 2026-05-30 09:38:44 +02:00
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