logaritmisk
3c59f47f81
feat(web): soft-redirect to login on 401 via a navigate bridge ( #48 )
2026-06-08 14:58:25 +02:00
logaritmisk
76f65a95dd
docs(plans): session-expiry soft redirect — 3-task plan ( #48 )
2026-06-08 14:56:44 +02:00
logaritmisk
a0aab6571f
docs(specs): session-expiry soft redirect + auth feedback ( #48 )
2026-06-08 14:52:16 +02:00
logaritmisk
6e72f24f0a
merge: group object-form flexible fields by definition group ( #45 follow-up)
CI / web (push) Has been cancelled
2026-06-08 14:21:00 +02:00
logaritmisk and Claude Sonnet 4.6
d447e2d8a8
feat(web): group object-form flexible fields by definition group ( #45 )
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-08 14:03:33 +02:00
logaritmisk and Claude Sonnet 4.6
a9a0c4d477
refactor(web): extract groupDefinitions helper; object-detail uses it ( #45 )
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-08 13:58:12 +02:00
logaritmisk
c0c86a5859
docs(plans): object-form field grouping — 2-task plan ( #45 )
2026-06-08 13:56:07 +02:00
logaritmisk
faca2670a4
docs(specs): object-form flexible-field grouping via shared helper ( #45 follow-up)
2026-06-08 13:54:53 +02:00
logaritmisk
c68bbb9460
merge: search-row recording_date + softened estimated count ( #61 )
CI / web (push) Has been cancelled
2026-06-08 13:49:31 +02:00
logaritmisk
30da072d96
feat(web): show recording_date on search rows; flag estimated count as approximate ( #61 )
2026-06-08 13:45:35 +02:00
logaritmisk and Claude Opus 4.8
1cdfa21259
feat(search): index + return recording_date on search hits ( #61 )
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-08 13:41:17 +02:00
logaritmisk
d37ac821f0
docs(plans): search-row recording_date + count copy — 2-task plan ( #61 )
2026-06-08 13:38:13 +02:00
logaritmisk
150ca63fc0
docs(specs): search-row recording_date + softened estimated count ( #61 )
2026-06-08 10:03:15 +02:00
logaritmisk
d082836529
merge: a11y — focus rings, route focus, skip link, honest semantics, html lang ( #52 )
CI / web (push) Has been cancelled
2026-06-08 09:54:17 +02:00
logaritmisk
69d3d2be15
feat(web): skip link + route focus management + html lang sync ( #52 )
2026-06-08 09:46:17 +02:00
logaritmisk
57504c941d
feat(web): focus-visible rings on custom controls; honest authority links + lang group ( #52 )
2026-06-08 09:42:33 +02:00
logaritmisk
4530004d87
docs(plans): a11y focus/route/skip/semantics — 2-task plan ( #52 )
2026-06-08 09:39:28 +02:00
logaritmisk
1948d09d16
docs(specs): a11y — focus rings, route focus, skip link, honest semantics, html lang ( #52 )
2026-06-08 09:36:44 +02:00
logaritmisk
4c24f0387c
merge: enforce en/sv i18n key parity test ( #60 )
CI / web (push) Has been cancelled
2026-06-08 09:31:14 +02:00
logaritmisk and Claude Opus 4.8
0209638552
docs: consolidate frontend guardrails + test-harness gotchas
...
CI / web (push) Has been cancelled
Adds web/GUARDRAILS.md capturing the recurring CI-guardrail and
test-harness lessons in one place: the check:size (250 KB-gz largest
chunk) and check:colors (design-token) guards, the jsdom/storybook
vitest split, MSW onUnhandledRequest:"error" overrides, RTL
accessible-name collisions, Storybook nested-router/portal handling,
and the components/ui code-style split. Wires a pointer from CLAUDE.md.
All claims verified against the live scripts, ci.yaml, and src/test/.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-08 09:21:16 +02:00
logaritmisk
2b6ea1b4a4
test(web): enforce en/sv i18n key parity + non-empty values ( #60 )
2026-06-08 09:15:35 +02:00
logaritmisk
3575282dc2
merge: reference-data scannability + parity — sort/filter/external_uri/counts ( #50 )
CI / web (push) Has been cancelled
2026-06-08 09:10:33 +02:00
logaritmisk
882d0c828f
feat(web): field-list filter, within-group label sort, group order, count badges ( #50 )
2026-06-08 09:06:17 +02:00
logaritmisk and Claude Opus 4.8
75e7cf9047
feat(web): authorities sort+filter, create external_uri, external_uri in rows, url input ( #50 )
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-08 09:02:13 +02:00
logaritmisk and Claude Opus 4.8
76b2cbde1d
feat(web): vocab list/terms sort+filter, external_uri in rows, rename guard, url input ( #50 )
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-08 08:57:52 +02:00
logaritmisk
6c2fa63cac
feat(web): collator sort helpers + ExternalUriLink + filter/uri i18n ( #50 )
2026-06-08 08:54:04 +02:00
logaritmisk
a4fb05a175
docs(plans): reference-data scannability + parity — 4-task plan ( #50 )
2026-06-08 08:18:58 +02:00
logaritmisk
0678cefd13
docs(specs): reference-data scannability + parity (sort/filter/uri/counts) ( #50 )
2026-06-08 07:37:40 +02:00
logaritmisk
53c98102d2
merge: standardize loading states on shared Skeleton recipes ( #53 )
CI / web (push) Has been cancelled
2026-06-08 06:58:28 +02:00
logaritmisk
0d4026a968
feat(web): standardize loading on shared skeleton recipes; retire '…' + empty status divs ( #53 )
2026-06-08 06:50:57 +02:00
logaritmisk
d0da77a004
feat(web): shared loading skeleton recipes (List/Form/AppShell) + common.loading ( #53 )
2026-06-08 06:46:24 +02:00
logaritmisk
6bce1e6782
docs(plans): loading skeletons — 2-task plan ( #53 )
2026-06-08 06:27:38 +02:00
logaritmisk
506bfd63dd
docs(specs): standardize loading states on Skeleton recipes ( #53 )
2026-06-08 06:22:25 +02:00
logaritmisk
f45f1d8807
merge: token-styled ui/Select replacing raw selects ( #51 )
CI / web (push) Has been cancelled
2026-06-08 06:09:23 +02:00
logaritmisk and Claude Opus 4.8
ede32551be
feat(web): field-form selects use ui/Select; rewrite select tests ( #51 )
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-08 06:03:54 +02:00
logaritmisk and Claude Sonnet 4.6
71d899cbdc
feat(web): object-form visibility uses ui/Select ( #51 )
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-08 06:00:21 +02:00
logaritmisk
09e9b3f4d4
feat(web): ui/select Base UI Select wrapper matching Input + story ( #51 )
2026-06-08 05:54:46 +02:00
logaritmisk
e54ea89b1e
docs(plans): token-styled select — 3-task plan ( #51 )
2026-06-08 05:50:00 +02:00
logaritmisk
3782120b49
docs(specs): token-styled ui/Select replacing raw selects ( #51 )
2026-06-08 05:47:08 +02:00
logaritmisk
28e444c6c5
merge: object form robustness — data router, dirty guard, validation, batch entry ( #46 )
CI / web (push) Has been cancelled
2026-06-07 23:41:23 +02:00
logaritmisk and Claude Opus 4.8
d3ee4365e0
feat(web): unify create/edit partial-failure recovery with 'created' banner ( #46 )
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-07 23:31:15 +02:00
logaritmisk and Claude Opus 4.8
e18cad9c6a
feat(web): unsaved-changes guard (useBlocker + beforeunload) on the object form ( #46 )
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-07 23:26:15 +02:00
logaritmisk and Claude Opus 4.8
537b847acb
feat(web): code-aware field errors + min count validation ( #46 )
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-07 23:20:30 +02:00
logaritmisk and Claude Opus 4.8
3900bc362c
feat(web): disable submit while saving + Save & create another + Cmd/Ctrl+Enter ( #46 )
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-07 23:15:21 +02:00
logaritmisk and Claude Opus 4.8
ed0c13907c
refactor(web): migrate to data router (createBrowserRouter) to enable useBlocker ( #46 )
...
Convert app.tsx route tree verbatim to a module-level data router via
createRoutesFromElements + RouterProvider, and the test harness to
createMemoryRouter + RouterProvider. The search NavLink-click test now mounts
its routes as real data-router routes so RouterProvider intercepts the link
(descendant <Routes> under a catch-all let it fall through to a jsdom navigation).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-07 23:07:03 +02:00
logaritmisk and Claude Opus 4.8
f3881e8c7c
build(web): upgrade Vitest 3→4 (browser-playwright provider) ( #46 )
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-07 23:03:21 +02:00
logaritmisk
6ed137f49e
docs(plans): object form robustness — 5-task plan ( #46 )
2026-06-07 21:18:53 +02:00
logaritmisk
e005e76f5b
docs(specs): object form robustness — data router, dirty guard, partial-failure, validation ( #46 )
2026-06-07 21:14:01 +02:00
logaritmisk
b7242caf51
merge: app header wayfinding — breadcrumb, user menu, search, app_name brand ( #54 )
CI / web (push) Has been cancelled
2026-06-07 19:45:23 +02:00
logaritmisk and Claude Opus 4.8
6efe09d40c
feat(web): assemble header — breadcrumb, search, user menu; remove standalone sign out ( #54 )
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-07 19:27:43 +02:00
logaritmisk
5c8fe3cd81
feat(web): UserMenu (email/role + sign out) + HeaderSearch components ( #54 )
2026-06-07 19:23:43 +02:00
logaritmisk
4b55218c69
feat(web): set breadcrumb trails on all AppShell routes ( #54 )
2026-06-07 19:18:43 +02:00
logaritmisk
af6004f731
refactor(web): remove eslint-disable from useBreadcrumb via ref ( #54 )
2026-06-07 19:15:03 +02:00
logaritmisk and Claude Opus 4.8
18cb35beff
feat(web): page-driven breadcrumb context + header render + objects wiring ( #54 )
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-07 19:11:31 +02:00
logaritmisk
dbaf22500e
feat(web): ui/menu Base UI dropdown wrapper + story ( #54 )
2026-06-07 19:05:25 +02:00
logaritmisk and Claude Sonnet 4.6
4fad3c43f0
feat(web): render configured app_name for brand + login; drop hardcoded app.name ( #54 )
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-07 19:01:15 +02:00
logaritmisk
e4badbdefc
docs(plans): app header wayfinding — 6-task plan ( #54 )
2026-06-07 18:58:04 +02:00
logaritmisk
285d35601b
docs(specs): app header wayfinding — breadcrumb, user menu, search, app_name ( #54 )
2026-06-07 18:18:03 +02:00
logaritmisk
9b3a587eab
merge: typography hierarchy + page <h1> + per-route document.title ( #57 )
CI / web (push) Has been cancelled
2026-06-07 17:44:53 +02:00
logaritmisk and Claude Opus 4.8
8511aebb53
feat(web): object-detail tab title, caption element fix, login title ( #57 )
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-07 17:22:18 +02:00
logaritmisk and Claude Opus 4.8
6e1f5ea50f
feat(web): page <h1> + document.title on list/form routes ( #57 )
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-07 17:17:01 +02:00
logaritmisk
70025e1e71
feat(web): useDocumentTitle hook (restores prior title on unmount) ( #57 )
2026-06-07 17:12:41 +02:00
logaritmisk
40384d91dd
style(web): match ui/ no-semicolon convention in PageTitle ( #57 )
2026-06-07 17:11:29 +02:00
logaritmisk
d3e88be70f
feat(web): PageTitle h1 component + story ( #57 )
2026-06-07 17:09:30 +02:00
logaritmisk
03f6e1d7ed
docs(plans): typography page titles — 4-task plan ( #57 )
2026-06-07 17:07:43 +02:00
logaritmisk
aab1bb37dc
docs(specs): typography hierarchy + page <h1> + per-route document.title ( #57 )
2026-06-07 16:59:37 +02:00
logaritmisk
9323c608ee
merge: dark-mode theme toggle — tri-state Light/Dark/System, FOUC-safe ( #59 )
CI / web (push) Has been cancelled
2026-06-07 16:45:55 +02:00
logaritmisk
eead013ccd
fix(web): raise dark --primary contrast to AA for button labels ( #59 )
2026-06-07 16:40:47 +02:00
logaritmisk
4f3db60ed2
feat(web): mount ThemeSwitch in header + pre-paint theme init ( #59 )
2026-06-07 16:37:04 +02:00
logaritmisk
6d17e5f84d
feat(web): ThemeSwitch icon segmented control + theme.* i18n ( #59 )
2026-06-07 16:33:16 +02:00
logaritmisk
d452dd9b35
feat(web): useTheme hook with live system tracking ( #59 )
2026-06-07 16:29:59 +02:00
logaritmisk and Claude Sonnet 4.6
e5c03383fe
feat(web): theme core — resolve/read/apply tri-state theme ( #59 )
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-06-07 16:28:21 +02:00
logaritmisk
5e7a80e377
docs(plans): dark-mode theme toggle — 5-task plan ( #59 )
2026-06-07 15:25:42 +02:00
logaritmisk
5d63f06863
docs(specs): dark-mode theme toggle — tri-state, icon segmented, FOUC-safe ( #59 )
2026-06-07 15:19:29 +02:00
logaritmisk
d0e3772c34
merge: LabelEditor preserves other-language labels on edit ( #55 )
CI / web (push) Has been cancelled
2026-06-07 14:41:22 +02:00
logaritmisk and Claude Opus 4.8
a9e6788b0b
fix(web): LabelEditor preserves other-language labels on edit ( #55 )
...
Editing a term/authority/field that already had labels in other languages
silently replaced the whole multilingual set with one default-language entry.
onChange now keeps non-default-language entries; the editor shows only the
default-language label (no longer falling back to an other-language one, which
made the clear/edit path write the wrong language) and surfaces a hint when
other-language labels exist on the record.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-07 14:37:25 +02:00
logaritmisk
48edb0391e
merge: design-token adoption — indigo brand accent, status tokens, check:colors guard ( #49 )
CI / web (push) Has been cancelled
2026-06-07 14:27:49 +02:00
logaritmisk and Claude Opus 4.8
93234aae29
chore(web): add check:colors guard banning raw color utilities outside ui/ ( #49 )
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-07 14:22:15 +02:00
logaritmisk and Claude Opus 4.8
cde7be9f2a
refactor(web): migrate feature screens to design tokens + radius token ( #49 )
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-07 14:15:54 +02:00
logaritmisk and Claude Opus 4.8
04ed0c50e2
feat(web): indigo brand token + status tokens + Badge success/warning variants ( #49 )
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-07 14:08:08 +02:00
logaritmisk and Claude Opus 4.8
67e486df46
docs(plans): design-token adoption across feature screens ( #49 )
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-07 14:04:15 +02:00
logaritmisk and Claude Opus 4.8
d408464e91
docs(specs): design-token adoption across feature screens ( #49 )
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-07 14:00:42 +02:00
logaritmisk and Claude Opus 4.8
1bfa44a0ed
merge: toast notifications + consistent mutation feedback ( #47 )
...
CI / web (push) Has been cancelled
Base UI toast region bridged to the QueryClient via an out-of-React manager; global
MutationCache gives every mutation feedback (opt-in success + catch-all type-aware
error toast, suppressible where errors show inline). Inline 422/409 UX preserved.
Closes #47 .
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-07 13:47:05 +02:00
logaritmisk and Claude Opus 4.8
303c986d40
chore(web): raise bundle budget 180→250 KB gz ( #47 )
...
Generous ceiling so the budget stops blocking per-feature work (this is the third
raise in three frontend milestones) while still catching gross regressions. A
vendor-split / bundle audit can revisit always-loaded weight later.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-07 13:35:35 +02:00
logaritmisk and Claude Opus 4.8
fcad638549
feat(web): per-mutation success/error toast metadata ( #47 )
...
Declare meta on all 18 mutation hooks: meta.successMessage (toast.* key)
on every discrete user action, meta.suppressErrorToast where the consuming
component already renders the error inline. Corrected useUpdateFieldDefinition
to suppress (FieldForm renders update.isError as form.rejected inline).
Add an RTL+MSW integration test wiring the real MutationCache via
makeQueryClient() + ToastRegion: success toast, catch-all error toast, and
suppressed-no-toast. Tidy the toast Close aria-label to t("common.close")
with en/sv parity.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-07 12:55:54 +02:00
logaritmisk and Claude Opus 4.8
604d4f6005
feat(web): Base UI toast region + global mutation feedback wiring ( #47 )
...
Add a module-scope Base UI toast manager bridged to the QueryClient so
every mutation can give consistent feedback. A MutationCache (extracted
into a makeQueryClient() factory for test reuse) emits a catch-all,
type-aware error toast (unless meta.suppressErrorToast) and an opt-in
success toast (meta.successMessage), reading mutation.meta + i18n.t
outside React. meta is type-checked via a react-query Register
augmentation. ToastRegion is mounted app-wide in main.tsx. Adds a toast
i18n namespace (en/sv parity) and a validated story.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-07 12:46:26 +02:00
logaritmisk and Claude Opus 4.8
63bfff417b
docs(plans): toast notifications + mutation feedback ( #47 )
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-07 12:30:30 +02:00
logaritmisk and Claude Opus 4.8
8eb527957b
docs(specs): toast notifications + consistent mutation feedback ( #47 )
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-07 12:09:09 +02:00
logaritmisk and Claude Opus 4.8
e2ae093ed8
merge: object detail readability — resolve labels, group fields ( #45 )
...
Object detail resolves term/authority ids to labels, localized_text to the active
language, dates locale-formatted; flexible fields grouped by definition; core fields
always shown with placeholders; Edit/Delete actions toolbar. Closes #45 .
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-07 11:54:53 +02:00
logaritmisk and Claude Opus 4.8
03d5b59b48
feat(web): readable, grouped object detail (labels, placeholders, actions toolbar) ( #45 )
...
Refactor object-detail.tsx to resolve term/authority ids to labels via
FlexibleFieldValue, group flexible fields by def.group in definition order
(ungrouped → trailing "Other"), always show core fields with "—" placeholders,
and move Edit (button-styled Link) + Delete into a right-aligned toolbar.
Move formatDate into lib/format-date.ts so the component module no longer
co-exports a non-component (clears the react-refresh/only-export-components
warning); both flexible-field-value.tsx and object-detail.tsx import it.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-07 11:44:35 +02:00
logaritmisk and Claude Opus 4.8
2e38af565a
feat(web): FlexibleFieldValue — resolve term/authority/localized field values ( #45 )
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-07 11:32:17 +02:00
logaritmisk and Claude Opus 4.8
7258b3fd03
docs(plans): object detail readability ( #45 )
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-07 11:24:58 +02:00
logaritmisk and Claude Opus 4.8
6ec31b6c51
docs(specs): object detail readability — resolve labels, group fields ( #45 )
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-07 10:54:41 +02:00
logaritmisk and Claude Opus 4.8
0a88a86bb3
merge: objects data-overview table + responsive shell ( #44 , #58 shell)
...
CI / web (push) Has been cancelled
Full-width sortable/filterable objects table (server-side sort/filter/quick-search,
exposed timestamps, URL-synced state); collapsible icon sidebar; responsive object
detail (pane wide / Base UI drawer narrow) at canonical /objects/:id. Closes #44 .
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-07 09:48:50 +02:00
logaritmisk and Claude Opus 4.8
6a62cf64bf
chore(web): drop dead objects.selectPrompt i18n key ( #44 )
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-07 00:13:32 +02:00
logaritmisk and Claude Opus 4.8
c052ddc5af
test(web): widen findBy timeout for the lazy/portaled narrow-drawer detail test ( #44 )
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-07 00:03:46 +02:00
logaritmisk and Claude Opus 4.8
e7b0f65686
chore(web): raise bundle budget 165→180 KB gz ( #44 )
...
The collapsed-sidebar tooltips use Base UI's Tooltip, which pulls floating-ui
into the always-loaded shell chunk. Kept the richer tooltip over native title;
the index is a feature-rich admin SPA bundle.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-06 23:58:03 +02:00
logaritmisk and Claude Opus 4.8
b8f70212a1
feat(web): responsive object detail (pane/drawer) at canonical /objects/:id ( #44 , #58 )
...
Wide (>=1024px): right-hand pane beside the table with a close control.
Narrow: Base UI Drawer sliding from the right (lazy-loaded so its code splits
out of the main chunk). Both preserve the table's query string on close.
Remove the index SelectPrompt route (the table is the landing view) and delete
the now-unused SelectPrompt. Make table rows keyboard-activatable
(role=link, tabIndex, Enter).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-06 23:53:10 +02:00
logaritmisk and Claude Opus 4.8
184e4ea2a5
feat(web): collapsible icon sidebar (persisted, auto-collapse on narrow) ( #44 , #58 )
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-06 23:44:40 +02:00
logaritmisk and Claude Opus 4.8
04c33cb1aa
feat(web): useMediaQuery hook + Base UI tooltip wrapper ( #44 )
...
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-06 23:40:19 +02:00