Commit Graph

763 Commits

Author SHA1 Message Date
DuckieTM ed1649b59c Merge pull request #196 from medievalshell/Dev
feat(catalog): live-merge imported furni on catalog open + feat(mentions) improved
2026-06-04 08:51:43 +02:00
medievalshell 0df810c556 feat(mentions): @ autocomplete, blue @nick, avatar notification toast
- Chat input @ autocomplete: typing @ shows online users (room users +
  online friends + room aliases) with avatars; arrows/Tab/Enter to pick.
- Any valid @nick token is highlighted blue in chat bubbles (like @all),
  giving visual feedback that it is a recognised mention.
- Side notification toast on a received mention: sender avatar (from the
  new senderFigure wire field) + message + dismiss; dismiss marks it read
  so the toolbar unread badge updates. Auto-hides after 8s.
- IMentionEntry/parsers carry senderFigure end to end.
2026-06-04 01:18:26 +02:00
medievalshell f8e943d262 feat(catalog): live-merge imported furni on catalog open
On catalog open, re-fetch the custom furnidata chunk (custom/imported.json5) via
SessionDataManager.mergeFurnitureDataFromUrl() and feed the new entries to
RoomContentLoader.processFurnitureData(), so furniture imported from the admin
panel appears without a full client reload.
2026-06-03 23:28:33 +02:00
DuckieTM 7625520c4d Merge pull request #192 from medievalshell/Dev
Fix navigator tabs locking after entering room creator
2026-06-03 16:34:51 +02:00
medievalshell 8c12d8f7b0 Remove repo-specific git author/workflow rules from CLAUDE.md
The house rules pinned a fixed commit author identity and personal git/CI workflow notes, which is arbitrary and incorrect for anyone else using Claude Code on this repo. Keep only the code-quality conventions (layout, tests, lint).
2026-06-03 13:13:39 +02:00
Medievalshell 62062cec9e Merge branch 'duckietm:Dev' into Dev 2026-06-03 13:06:25 +02:00
medievalshell 8b44aee0df Fix navigator tabs locking after entering room creator
setTab updated currentTabCode/currentFilter but never reset isCreatorOpen, so after opening the room creator, clicking another navigator tab changed the active tab code while the creator view stayed rendered (NavigatorView renders the search and creator views mutually exclusively based on isCreatorOpen). This left users stuck in the creator unable to switch tabs. Reset isCreatorOpen to false in setTab so selecting any tab also closes the creator.
2026-06-03 13:04:07 +02:00
DuckieTM 0cf45197d8 Merge pull request #187 from simoleo89/pr/mentions-system
feat(mentions): complete @-mentions system (inbox, in-bubble highlight, notifications)
2026-06-03 11:03:39 +02:00
duckietm 4c70fc90c0 🆙 Updated Prefixes 2026-06-03 09:39:25 +02:00
duckietm 0c694820f7 🆙 Visual updates Group Forums 2026-06-03 07:46:28 +02:00
duckietm 03066abf54 🆙 Updated Group buy 2026-06-02 18:01:45 +02:00
duckietm 9900bc8aaa 🆙 Small fix for the room link 2026-06-02 15:33:48 +02:00
duckietm c9ac6806dd 🆙 Updated infostand & userpofile now mobile friendly and cards as background 2026-06-02 15:12:51 +02:00
simoleo89 c576c6185a feat(mentions): use dedicated mention chime sample 2026-06-02 15:04:12 +02:00
simoleo89 2d126a7b9a feat(mentions): wire Remove action to server-side delete packet 2026-06-02 15:04:12 +02:00
simoleo89 49d3bde50a feat(mentions): richer inbox — filters, date groups, type badge, relative time, per-row actions, highlighted preview 2026-06-02 15:04:12 +02:00
simoleo89 22e28a31ab feat(mentions): highlight own mentions inside room chat bubbles 2026-06-02 15:04:12 +02:00
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 76ec66932b 🆙 Small fix User Settings 2026-06-02 12:56:48 +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 827c17dc8b 🆙 Small fix toolbar 2026-06-01 14:44:33 +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
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