@owlmeans/web-panel 0.1.18-rc.70 → 0.1.18-rc.71

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (98) hide show
  1. package/README.md +8 -8
  2. package/agent-meta/manifest.json +2 -2
  3. package/agent-meta/skills/web-panel/SKILL.md +9 -9
  4. package/build/auth/entrypoints.d.ts +9 -1
  5. package/build/auth/entrypoints.d.ts.map +1 -1
  6. package/build/auth/exports.d.ts +1 -1
  7. package/build/auth/exports.d.ts.map +1 -1
  8. package/build/auth/exports.js +1 -1
  9. package/build/auth/exports.js.map +1 -1
  10. package/build/components/footer/component.js +3 -3
  11. package/build/components/footer/component.js.map +1 -1
  12. package/build/components/login/notify.js +4 -4
  13. package/build/components/login/notify.js.map +1 -1
  14. package/build/components/login/screen.d.ts.map +1 -1
  15. package/build/components/login/screen.js +2 -2
  16. package/build/components/login/screen.js.map +1 -1
  17. package/build/components/login/terms.d.ts.map +1 -1
  18. package/build/components/login/terms.js +5 -5
  19. package/build/components/login/terms.js.map +1 -1
  20. package/build/components/nav/consts.local.d.ts +23 -0
  21. package/build/components/nav/consts.local.d.ts.map +1 -1
  22. package/build/components/nav/consts.local.js +42 -0
  23. package/build/components/nav/consts.local.js.map +1 -1
  24. package/build/components/nav/layout.d.ts.map +1 -1
  25. package/build/components/nav/layout.js +3 -16
  26. package/build/components/nav/layout.js.map +1 -1
  27. package/build/components/nav/mobile.d.ts.map +1 -1
  28. package/build/components/nav/mobile.js +5 -14
  29. package/build/components/nav/mobile.js.map +1 -1
  30. package/build/components/nav/side.js +3 -3
  31. package/build/components/nav/side.js.map +1 -1
  32. package/build/components/nav/top.d.ts.map +1 -1
  33. package/build/components/nav/top.js +4 -23
  34. package/build/components/nav/top.js.map +1 -1
  35. package/build/components/scheme/consts.local.d.ts +6 -0
  36. package/build/components/scheme/consts.local.d.ts.map +1 -1
  37. package/build/components/scheme/consts.local.js +11 -0
  38. package/build/components/scheme/consts.local.js.map +1 -1
  39. package/build/components/scheme/hook.js +8 -8
  40. package/build/components/scheme/hook.js.map +1 -1
  41. package/build/components/scheme/toggle.d.ts.map +1 -1
  42. package/build/components/scheme/toggle.js +1 -11
  43. package/build/components/scheme/toggle.js.map +1 -1
  44. package/build/components/socket/i18n.js +9 -9
  45. package/build/components/socket/i18n.js.map +1 -1
  46. package/build/consent/translate.js +2 -2
  47. package/build/consent/translate.js.map +1 -1
  48. package/build/entrypoints.d.ts +7 -1
  49. package/build/entrypoints.d.ts.map +1 -1
  50. package/build/exports.d.ts +2 -2
  51. package/build/exports.d.ts.map +1 -1
  52. package/build/exports.js +2 -2
  53. package/build/exports.js.map +1 -1
  54. package/build/permission/i18n.js +2 -2
  55. package/build/permission/i18n.js.map +1 -1
  56. package/build/permission/index.js +3 -3
  57. package/build/permission/index.js.map +1 -1
  58. package/build/scheme/index.d.ts +2 -2
  59. package/build/scheme/index.d.ts.map +1 -1
  60. package/build/scheme/index.js +1 -1
  61. package/build/scheme/index.js.map +1 -1
  62. package/build/scheme/scheme.d.ts +4 -24
  63. package/build/scheme/scheme.d.ts.map +1 -1
  64. package/build/scheme/scheme.js +43 -57
  65. package/build/scheme/scheme.js.map +1 -1
  66. package/build/scheme/types.d.ts +27 -0
  67. package/build/scheme/types.d.ts.map +1 -1
  68. package/package.json +31 -31
  69. package/src/auth/exports.ts +1 -1
  70. package/src/components/footer/component.tsx +3 -3
  71. package/src/components/login/notify.ts +4 -4
  72. package/src/components/login/screen.tsx +2 -2
  73. package/src/components/login/terms.tsx +6 -15
  74. package/src/components/nav/consts.local.ts +45 -0
  75. package/src/components/nav/layout.tsx +3 -17
  76. package/src/components/nav/mobile.tsx +5 -15
  77. package/src/components/nav/side.tsx +3 -3
  78. package/src/components/nav/top.tsx +4 -24
  79. package/src/components/scheme/consts.local.ts +12 -0
  80. package/src/components/scheme/hook.ts +8 -8
  81. package/src/components/scheme/toggle.tsx +1 -12
  82. package/src/components/socket/i18n.ts +9 -9
  83. package/src/consent/translate.ts +2 -2
  84. package/src/exports.ts +2 -2
  85. package/src/permission/i18n.ts +2 -2
  86. package/src/permission/index.ts +3 -3
  87. package/src/scheme/index.ts +2 -2
  88. package/src/scheme/scheme.ts +43 -54
  89. package/src/scheme/types.ts +28 -0
  90. package/tests/consent-language.spec.ts +2 -2
  91. package/tests/consent.spec.ts +2 -2
  92. package/tests/lazy.spec.ts +2 -2
  93. package/tests/login.spec.ts +2 -2
  94. package/tests/nav.spec.ts +2 -2
  95. package/tests/scheme.spec.ts +4 -4
  96. package/tests/smoke.spec.ts +2 -2
  97. package/tests/socket-dialog.spec.ts +2 -2
  98. package/tests/toaster.spec.ts +2 -2
package/README.md CHANGED
@@ -11,7 +11,7 @@ but never started.
11
11
  ## Installation
12
12
 
13
13
  ```sh
14
- bun add @owlmeans/web-panel@^0.1.18-rc.70
14
+ bun add @owlmeans/web-panel@^0.1.18-rc.71
15
15
  ```
16
16
 
17
17
  Peer requirements (the consuming app provides these): `react`, `react-dom`,
@@ -363,7 +363,7 @@ The dialog's strings are the lib-tier `socket` namespace (`reload.title`, `reloa
363
363
  |---|---|
364
364
  | everything (`usePanelNav`, `PanelNavConfig` / `PanelNavItem` / `PanelNavSection` / `PanelNavLink` / `NavTranslate`, `PanelContext`, `BlockScaling`, `useFormRef`, `FormContext`, ...) | `@owlmeans/client-panel` |
365
365
  | `handler`, `useNavigate`, `useValue`, `useEntrypoint` | `@owlmeans/client` |
366
- | `bind`, `bindAll`, `bindScreen`, `provideRequest`, `stab`; type `Module` | `@owlmeans/client-entrypoint` |
366
+ | `bind`, `bindAll`, `bindScreen`, `clientRequestHelper`, `provideRequest` (deprecated, use `clientRequestHelper.provideRequest`), `stab`; type `Module` | `@owlmeans/client-entrypoint` |
367
367
  | `route`, `frontend` / `croute` | `@owlmeans/route` / `@owlmeans/client-route` |
368
368
  | `config` / `service` / `addWebService` | `@owlmeans/client-context` / `@owlmeans/config` / `@owlmeans/client-config` |
369
369
  | `AppType`, `HOME`, `ROOT`, `BASE`, `GUEST` | `@owlmeans/context` |
@@ -371,7 +371,7 @@ The dialog's strings are the lib-tier `socket` namespace (`reload.title`, `reloa
371
371
  | `DAUTH_GUARD` (`DEFAULT_ALIAS`), `bindExternalAuthentication` | `@owlmeans/client-auth` |
372
372
  | `Dispatcher`, `appendWebAuthService` | `@owlmeans/web-client` |
373
373
  | `composePrefix`, `useI18n`, `useI18nApp`, `useI18nLib`, `useLanguage` | `@owlmeans/client-i18n` |
374
- | `addI18nApp`, `addI18nLib`, `SUPPORTED_LNGS` | `@owlmeans/i18n` |
374
+ | `i18nHelper`, `addI18nApp` / `addI18nLib` (deprecated, use `i18nHelper.*`), `SUPPORTED_LNGS` | `@owlmeans/i18n` |
375
375
  | `flow`, `configureFlows` / `FLOW_PARAM`, `SERVICE_PARAM`, `useFlow` | `@owlmeans/flow` / `@owlmeans/web-flow` |
376
376
 
377
377
  ### `@owlmeans/web-panel/auth`
@@ -400,14 +400,14 @@ React-free — it imports nothing, so a Node build script can load it.
400
400
  | `COLOR_SCHEME_KEY` | const | `'owlmeans:color-scheme'`, the `localStorage` key |
401
401
  | `COLOR_SCHEME_EVENT` | const | The `window` event every change dispatches |
402
402
  | `ColorSchemeChoice` | type | `'light' \| 'dark'` |
403
- | `readColorScheme()` | function | The stored choice or `null` (storage errors swallowed) |
404
- | `applyColorScheme(choice \| null)` | function | Sets the `light`/`dark` class on `<html>`, stores or clears the key, dispatches the event |
405
- | `colorSchemeBootstrapScript()` | function | The inline head script that applies a stored choice before first paint |
403
+ | `colorSchemeHelper.readColorScheme()` | helper member | The stored choice or `null` (storage errors swallowed) |
404
+ | `colorSchemeHelper.applyColorScheme(choice \| null)` | helper member | Sets the `light`/`dark` class on `<html>`, stores or clears the key, dispatches the event |
405
+ | `colorSchemeHelper.colorSchemeBootstrapScript()` | helper member | The inline head script that applies a stored choice before first paint |
406
406
 
407
407
  The class contract: `.dark` = chosen dark, `.light` = chosen light, neither = follow the OS. A
408
408
  consumer's CSS puts dark tokens under `.dark` AND under
409
409
  `@media (prefers-color-scheme: dark) { :root:not(.light) { … } }`, and inlines
410
- `colorSchemeBootstrapScript()` in the document head.
410
+ `colorSchemeHelper.colorSchemeBootstrapScript()` in the document head.
411
411
 
412
412
  ### `@owlmeans/web-panel/consent`
413
413
 
@@ -496,7 +496,7 @@ This package ships embedded agent skills under `agent-meta/`. After installing y
496
496
  your project's skill store (`.agents/skills/`):
497
497
 
498
498
  ```sh
499
- npx @owlmeans/agent-skills@^0.1.18-rc.48
499
+ npx @owlmeans/agent-skills@^0.1.18-rc.49
500
500
  ```
501
501
 
502
502
  The embedded files are version-matched to this package release. Do not edit them
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "schemaVersion": 2,
3
3
  "package": "@owlmeans/web-panel",
4
- "version": "0.1.18-rc.70",
5
- "generatedAt": "2026-10-05T08:32:19.135Z",
4
+ "version": "0.1.18-rc.71",
5
+ "generatedAt": "2026-10-05T21:03:06.415Z",
6
6
  "canonicalRepo": "https://github.com/owlmeans/common",
7
7
  "entries": [
8
8
  {
@@ -8,7 +8,7 @@ user-invocable: false
8
8
  # @owlmeans/web-panel
9
9
 
10
10
  **Layer:** Web (React)
11
- **Install:** `"@owlmeans/web-panel": "^0.1.18-rc.70"` in `dependencies`
11
+ **Install:** `"@owlmeans/web-panel": "^0.1.18-rc.71"` in `dependencies`
12
12
 
13
13
  ## Key Exports
14
14
 
@@ -33,8 +33,8 @@ user-invocable: false
33
33
  | `useBreakPoint()` | The current Tailwind breakpoint name, tracked on `resize` (`lg` when there is no `window`) |
34
34
  | `useMapBreakpoint(map, def?, breakpoint?)` | The `map` entry for the current breakpoint (or for the `breakpoint` passed), falling back to `def`. It **throws a `SyntaxError`** when neither yields a value, so give it a `def` or cover every breakpoint |
35
35
  | Re-exports from `@owlmeans/client-panel` | Cross-platform panel primitives, incl. `usePanelNav` and the `PanelNav*` types |
36
- | Re-exports from `@owlmeans/client` / `@owlmeans/client-entrypoint` / `@owlmeans/route` | `bind`, `bindAll`, `bindScreen`, `handler`, `lazyHandler` / `lazyComponent` (+ `LazyHandler` / `LazyComponent` / `LazyComponentOptions` types — see the `client` skill), `provideRequest`, `stab`, `route`, `croute`, `frontend`, `useNavigate`, `useEntrypoint`, `useValue` |
37
- | Re-exports from the surrounding layers | `config`, `service`, `addWebService`, `AppType` / `HOME` / `ROOT` / `BASE` / `GUEST`, `DISPATCHER`, `CAUTHEN_FLOW_ENTER`, `DAUTH_GUARD`, `bindExternalAuthentication`, `Dispatcher`, `appendWebAuthService`, `flow` / `configureFlows` / `useFlow` / `FLOW_PARAM` / `SERVICE_PARAM`, `useI18n*` / `useLanguage` / `composePrefix`, `addI18nApp` / `addI18nLib` / `SUPPORTED_LNGS` |
36
+ | Re-exports from `@owlmeans/client` / `@owlmeans/client-entrypoint` / `@owlmeans/route` | `bind`, `bindAll`, `bindScreen`, `handler`, `lazyHandler` / `lazyComponent` (+ `LazyHandler` / `LazyComponent` / `LazyComponentOptions` types — see the `client` skill), `clientRequestHelper` (`provideRequest`), `stab`, `route`, `croute`, `frontend`, `useNavigate`, `useEntrypoint`, `useValue` |
37
+ | Re-exports from the surrounding layers | `config`, `service`, `addWebService`, `AppType` / `HOME` / `ROOT` / `BASE` / `GUEST`, `DISPATCHER`, `CAUTHEN_FLOW_ENTER`, `DAUTH_GUARD`, `bindExternalAuthentication`, `Dispatcher`, `appendWebAuthService`, `flow` / `configureFlows` / `useFlow` / `FLOW_PARAM` / `SERVICE_PARAM`, `useI18n*` / `useLanguage` / `composePrefix`, `i18nHelper` (`addI18nApp` / `addI18nLib`) / `SUPPORTED_LNGS` |
38
38
 
39
39
  ## Subpath Exports
40
40
 
@@ -44,7 +44,7 @@ user-invocable: false
44
44
  widget and a presence service so a host's own collapsed menu can take over the floating button's
45
45
  job
46
46
  - `./scheme` — the React-free colour-scheme half: `COLOR_SCHEME_KEY`, `COLOR_SCHEME_EVENT`,
47
- `ColorSchemeChoice`, `readColorScheme`, `applyColorScheme`, `colorSchemeBootstrapScript` — safe
47
+ `ColorSchemeChoice`, `colorSchemeHelper` (`readColorScheme`, `applyColorScheme`, `colorSchemeBootstrapScript`) — safe
48
48
  to import from a Node build script
49
49
 
50
50
  ## Usage
@@ -277,7 +277,7 @@ that paints dark under `prefers-color-scheme: dark`. So a consumer's CSS must re
277
277
  A theme with dark tokens under `.dark` alone never follows the OS; one with them under the media
278
278
  query alone ignores an explicit light choice.
279
279
 
280
- **The head bootstrap goes before any stylesheet paints.** `colorSchemeBootstrapScript()` returns a
280
+ **The head bootstrap goes before any stylesheet paints.** `colorSchemeHelper.colorSchemeBootstrapScript()` returns a
281
281
  self-contained inline script that puts the stored choice's class on `<html>` before first paint —
282
282
  the only moment it can; a component doing it after mount shows a visitor who chose dark one frame
283
283
  of the light page. A build step inlines it into `index.html` (import it from
@@ -292,7 +292,7 @@ Rules the pieces own:
292
292
  is in (sun while light, moon while dark), chosen in script, not by a `dark:` variant.
293
293
  - **The accessible name says what pressing does** — `labels.toLight` / `labels.toDark`, English
294
294
  defaults; `NavLayout` resolves them through `translate` (`shell.toLight`, `shell.toDark`).
295
- - **One choice per document.** `applyColorScheme(choice | null)` sets the class, stores or clears
295
+ - **One choice per document.** `colorSchemeHelper.applyColorScheme(choice | null)` sets the class, stores or clears
296
296
  the key and dispatches `COLOR_SCHEME_EVENT`, so every mounted `useColorScheme` agrees at once;
297
297
  another tab's change arrives through `storage`, and an OS switch through `matchMedia` while
298
298
  nothing is stored. `setChoice(null)` hands the page back to the OS.
@@ -346,7 +346,7 @@ on every navigation. Neither does anything unless an app opts in:
346
346
  cfg.socket = { reloadDialog: true }
347
347
  ```
348
348
 
349
- Once any `ws()`/`useWs()` connection in the app has exhausted its own retry budget
349
+ Once any `socketClientHelper.ws()`/`useWs()` connection in the app has exhausted its own retry budget
350
350
  (`useSocketStatus() === 'lost'`), a global, blocking `AlertDialog` covers the screen — no Escape,
351
351
  no outside click, two actions:
352
352
 
@@ -429,7 +429,7 @@ import { Form, TextInput, SubmitButton, Button } from '@owlmeans/web-panel'
429
429
  ### The terms confirmation — `LoginTerms`, `LoginPrivacyNotice`
430
430
 
431
431
  `components/login/terms.tsx` renders `LoginTermsModel` (`@owlmeans/client-panel/auth`) via
432
- `termsSentence` + `termsLabelResolver` (`@owlmeans/client-auth/login`) rather than re-deriving
432
+ `loginTermsHelper.termsSentence` + `.termsLabelResolver` (`@owlmeans/client-auth/login`) rather than re-deriving
433
433
  link/label pairs itself. **`[data-login-terms]` marks exactly one checkbox — or NONE, once
434
434
  `model.terms.deferred` is true** (`LoginScreen` renders `LoginTerms` when not deferred,
435
435
  `LoginPrivacyNotice` when it is): an e2e suite elsewhere in the platform treats the checkbox as a
@@ -504,7 +504,7 @@ menu has already mounted) and because React 18 StrictMode double-invokes mount/c
504
504
  | Job | Import from `@owlmeans/web-panel/consent` | Where it goes |
505
505
  |---|---|---|
506
506
  | The consent dialog (and its floating re-open button) | `PanelCookieConsent` | Beside the router — a `PanelApp` child — once |
507
- | The "Cookie settings" control in a footer or menu | `PanelConsentMenuWidget` (`label`, `className`, `onSelect?` — defaults to `openConsent('reopen')`) | Inside the host's own footer/menu |
507
+ | The "Cookie settings" control in a footer or menu | `PanelConsentMenuWidget` (`label`, `className`, `onSelect?` — defaults to `consentStore.open('reopen')`) | Inside the host's own footer/menu |
508
508
  | Hiding the floating button while that control is reachable | `useConsentMenuPresence()` | Called by the always-mounted component that renders the control — mounted ONLY while the control can actually be reached: a component that is merely hidden by CSS (`xl:hidden`) is still mounted and still claims presence, so the floating button vanishes with nothing else to open the dialog; render it conditionally instead (viable's header mounts its hamburger menu only below the full-row breakpoint) |
509
509
  | Registering the presence service | `appendConsentWidgetService(context)` | The app's `context.ts` |
510
510
 
@@ -1,2 +1,10 @@
1
- export declare const entrypoints: (import("@owlmeans/client-entrypoint").ClientProtocolEntrypoint<any> | import("@owlmeans/client-entrypoint").ClientProtocolEntrypoint<import("@owlmeans/entrypoint").EntrypointProtocol<import("@owlmeans/entrypoint").OpenRequest, import("@owlmeans/entrypoint").OpenValue>>)[];
1
+ export declare const entrypoints: (import("@owlmeans/client-entrypoint").ClientProtocolEntrypoint<import("@owlmeans/entrypoint").EntrypointProtocol<import("@owlmeans/entrypoint").OpenRequest, import("@owlmeans/entrypoint").OpenValue>> | import("@owlmeans/client-entrypoint").ClientProtocolEntrypoint<import("@owlmeans/entrypoint").EntrypointProtocol<{
2
+ body: import("@owlmeans/auth").AllowanceRequest;
3
+ }, import("@owlmeans/auth").AllowanceResponse>> | import("@owlmeans/client-entrypoint").ClientProtocolEntrypoint<import("@owlmeans/entrypoint").EntrypointProtocol<{
4
+ body: import("@owlmeans/auth").AuthCredentials;
5
+ }, import("@owlmeans/auth").AuthToken>> | import("@owlmeans/client-entrypoint").ClientProtocolEntrypoint<import("@owlmeans/entrypoint").EntrypointProtocol<{
6
+ query: Partial<import("@owlmeans/auth").AuthToken>;
7
+ }, undefined>> | import("@owlmeans/client-entrypoint").ClientProtocolEntrypoint<import("@owlmeans/entrypoint").EntrypointProtocol<{
8
+ query: import("@owlmeans/auth").AuthToken;
9
+ }, unknown>>)[];
2
10
  //# sourceMappingURL=entrypoints.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"entrypoints.d.ts","sourceRoot":"","sources":["../../src/auth/entrypoints.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,WAAW,mRAAuC,CAAA"}
1
+ {"version":3,"file":"entrypoints.d.ts","sourceRoot":"","sources":["../../src/auth/entrypoints.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,WAAW;;;;;;;;eAAuC,CAAA"}
@@ -5,7 +5,7 @@ export { service } from '@owlmeans/config';
5
5
  export { EntrypointOutcome } from '@owlmeans/entrypoint';
6
6
  export type { AbstractRequest } from '@owlmeans/entrypoint';
7
7
  export { addWebService } from '@owlmeans/client-config';
8
- export { bind, bindAll, bindScreen, provideRequest, stab } from '@owlmeans/client-entrypoint';
8
+ export { bind, bindAll, bindScreen, clientRequestHelper, provideRequest, stab } from '@owlmeans/client-entrypoint';
9
9
  export type { ClientEntrypoint as Module, ClientRequest as Request } from '@owlmeans/client-entrypoint';
10
10
  export { route as croute } from '@owlmeans/client-route';
11
11
  export { route, frontend, RouteMethod } from '@owlmeans/route';
@@ -1 +1 @@
1
- {"version":3,"file":"exports.d.ts","sourceRoot":"","sources":["../../src/auth/exports.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC5G,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AACnG,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAA;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AACxD,YAAY,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AACvD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAA;AAC7F,YAAY,EAAE,gBAAgB,IAAI,MAAM,EAAE,aAAa,IAAI,OAAO,EAAE,MAAM,6BAA6B,CAAA;AACvG,OAAO,EAAE,KAAK,IAAI,MAAM,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC9D,YAAY,EAAE,oBAAoB,IAAI,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC3E,OAAO,EAAE,aAAa,IAAI,WAAW,EAAE,MAAM,uBAAuB,CAAA;AACpE,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAExC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAEpE,cAAc,6BAA6B,CAAA;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAA;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAEnC,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AAC/D,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE/C,OAAO,EAAE,aAAa,IAAI,UAAU,EAAE,MAAM,uBAAuB,CAAA;AACnE,YAAY,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,EAAE,WAAW,IAAI,UAAU,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAC7E,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA"}
1
+ {"version":3,"file":"exports.d.ts","sourceRoot":"","sources":["../../src/auth/exports.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC5G,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,oBAAoB,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AACnG,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAA;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AACxD,YAAY,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AACvD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAA;AAClH,YAAY,EAAE,gBAAgB,IAAI,MAAM,EAAE,aAAa,IAAI,OAAO,EAAE,MAAM,6BAA6B,CAAA;AACvG,OAAO,EAAE,KAAK,IAAI,MAAM,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAC9D,YAAY,EAAE,oBAAoB,IAAI,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAC3E,OAAO,EAAE,aAAa,IAAI,WAAW,EAAE,MAAM,uBAAuB,CAAA;AACpE,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAExC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAEpE,cAAc,6BAA6B,CAAA;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAA;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAEnC,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AAC/D,YAAY,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAA;AAE/C,OAAO,EAAE,aAAa,IAAI,UAAU,EAAE,MAAM,uBAAuB,CAAA;AACnE,YAAY,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AACrD,OAAO,EAAE,WAAW,IAAI,UAAU,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAC7E,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA"}
@@ -3,7 +3,7 @@ export { config } from '@owlmeans/client-context';
3
3
  export { service } from '@owlmeans/config';
4
4
  export { EntrypointOutcome } from '@owlmeans/entrypoint';
5
5
  export { addWebService } from '@owlmeans/client-config';
6
- export { bind, bindAll, bindScreen, provideRequest, stab } from '@owlmeans/client-entrypoint';
6
+ export { bind, bindAll, bindScreen, clientRequestHelper, provideRequest, stab } from '@owlmeans/client-entrypoint';
7
7
  export { route as croute } from '@owlmeans/client-route';
8
8
  export { route, frontend, RouteMethod } from '@owlmeans/route';
9
9
  export { DEFAULT_ALIAS as DAUTH_GUARD } from '@owlmeans/client-auth';
@@ -1 +1 @@
1
- {"version":3,"file":"exports.js","sourceRoot":"","sources":["../../src/auth/exports.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAE5G,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAA;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAExD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AACvD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAA;AAE7F,OAAO,EAAE,KAAK,IAAI,MAAM,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAE9D,OAAO,EAAE,aAAa,IAAI,WAAW,EAAE,MAAM,uBAAuB,CAAA;AACpE,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAExC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAEpE,cAAc,6BAA6B,CAAA;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAA;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAEnC,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AAG/D,OAAO,EAAE,aAAa,IAAI,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAEnE,OAAO,EAAE,WAAW,IAAI,UAAU,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAC7E,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA"}
1
+ {"version":3,"file":"exports.js","sourceRoot":"","sources":["../../src/auth/exports.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,aAAa,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAE5G,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAA;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAExD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AACvD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,EAAE,mBAAmB,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAA;AAElH,OAAO,EAAE,KAAK,IAAI,MAAM,EAAE,MAAM,wBAAwB,CAAA;AACxD,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAA;AAE9D,OAAO,EAAE,aAAa,IAAI,WAAW,EAAE,MAAM,uBAAuB,CAAA;AACpE,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAExC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAA;AAEpE,cAAc,6BAA6B,CAAA;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAA;AACjE,OAAO,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAEnC,OAAO,EAAE,UAAU,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AAG/D,OAAO,EAAE,aAAa,IAAI,UAAU,EAAE,MAAM,uBAAuB,CAAA;AAEnE,OAAO,EAAE,WAAW,IAAI,UAAU,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAC7E,OAAO,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA"}
@@ -1,5 +1,5 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { defaultNavTranslate, resolveNavLabel } from '@owlmeans/client-panel';
2
+ import { navLabelHelper } from '@owlmeans/client-panel';
3
3
  import { cn } from '../../@/lib/utils.js';
4
4
  import { Link } from '../link.js';
5
5
  import { ThemeToggle } from '../scheme/toggle.js';
@@ -30,7 +30,7 @@ import { ShellCredit, useShellCredit } from './credit.js';
30
30
  * an application offers it in the same place and the credit keeps its position whatever the
31
31
  * application's own footer layout does.
32
32
  */
33
- export const Footer = ({ links, translate = defaultNavTranslate, children, content, className, style, containerClassName, themeToggle }) => {
33
+ export const Footer = ({ links, translate = navLabelHelper.defaultNavTranslate, children, content, className, style, containerClassName, themeToggle }) => {
34
34
  const credit = useShellCredit();
35
35
  const hasLinks = (links != null && links.length > 0) || children != null;
36
36
  const toggle = themeToggle == null || themeToggle === false
@@ -40,7 +40,7 @@ export const Footer = ({ links, translate = defaultNavTranslate, children, conte
40
40
  return null;
41
41
  }
42
42
  return _jsx("footer", { className: cn('border-t py-6', className), style: style, children: _jsxs("div", { className: cn('flex flex-col items-center gap-3 text-center', containerClassName), children: [content != null && _jsx("div", { "data-footer-content": true, className: "w-full self-stretch text-start", children: content }), hasLinks && _jsxs("div", { className: "flex flex-wrap items-center justify-center gap-4 text-sm", children: [links?.map((link, idx) => {
43
- const label = resolveNavLabel(translate, link.label, `modules.${link.alias ?? link.href ?? ''}`, link.alias ?? link.href);
43
+ const label = navLabelHelper.resolveNavLabel(translate, link.label, `modules.${link.alias ?? link.href ?? ''}`, link.alias ?? link.href);
44
44
  return link.href != null
45
45
  ? _jsx(Link, { src: link.href, open: link.open, children: label }, `${link.href}:${idx}`)
46
46
  : _jsx(Link, { module: link.alias, open: link.open, children: label }, `${link.alias}:${idx}`);
@@ -1 +1 @@
1
- {"version":3,"file":"component.js","sourceRoot":"","sources":["../../../src/components/footer/component.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAA;AAC7E,OAAO,EAAE,EAAE,EAAE,MAAM,sBAAsB,CAAA;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACjD,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAIzD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,CAAC,MAAM,MAAM,GAAoB,CAAC,EACtC,KAAK,EAAE,SAAS,GAAG,mBAAmB,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,kBAAkB,EAC/F,WAAW,EACZ,EAAE,EAAE;IACH,MAAM,MAAM,GAAG,cAAc,EAAE,CAAA;IAC/B,MAAM,QAAQ,GAAG,CAAC,KAAK,IAAI,IAAI,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,QAAQ,IAAI,IAAI,CAAA;IACxE,MAAM,MAAM,GAAG,WAAW,IAAI,IAAI,IAAI,WAAW,KAAK,KAAK;QACzD,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAA;IAC3C,IAAI,OAAO,IAAI,IAAI,IAAI,CAAC,QAAQ,IAAI,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;QAC/F,OAAO,IAAI,CAAA;IACb,CAAC;IAED,OAAO,iBAAQ,SAAS,EAAE,EAAE,CAAC,eAAe,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,YACpE,eAAK,SAAS,EAAE,EAAE,CAAC,8CAA8C,EAAE,kBAAkB,CAAC,aACnF,OAAO,IAAI,IAAI,IAAI,2CAAyB,SAAS,EAAC,gCAAgC,YAAE,OAAO,GAAO,EACtG,QAAQ,IAAI,eAAK,SAAS,EAAC,0DAA0D,aACnF,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;4BACxB,MAAM,KAAK,GAAG,eAAe,CAC3B,SAAS,EAAE,IAAI,CAAC,KAAK,EAAE,WAAW,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,CAC3F,CAAA;4BAED,OAAO,IAAI,CAAC,IAAI,IAAI,IAAI;gCACtB,CAAC,CAAC,KAAC,IAAI,IAA6B,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,YAAG,KAAK,IAA9D,GAAG,IAAI,CAAC,IAAI,IAAI,GAAG,EAAE,CAAiD;gCACnF,CAAC,CAAC,KAAC,IAAI,IAA8B,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,YAAG,KAAK,IAAnE,GAAG,IAAI,CAAC,KAAK,IAAI,GAAG,EAAE,CAAqD,CAAA;wBAC5F,CAAC,CAAC,EACD,QAAQ,IACL,EAML,MAAM,IAAI,IAAI;oBACb,CAAC,CAAC,2CAAwB,SAAS,EAAC,kDAAkD,aACpF,KAAC,WAAW,KAAG,EACf,KAAC,WAAW,OAAK,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAI,IACzE;oBACN,CAAC,CAAC,KAAC,WAAW,KAAG,IACf,GACC,CAAA;AACX,CAAC,CAAA"}
1
+ {"version":3,"file":"component.js","sourceRoot":"","sources":["../../../src/components/footer/component.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AACvD,OAAO,EAAE,EAAE,EAAE,MAAM,sBAAsB,CAAA;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AACjC,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAA;AACjD,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAA;AAIzD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,MAAM,CAAC,MAAM,MAAM,GAAoB,CAAC,EACtC,KAAK,EAAE,SAAS,GAAG,cAAc,CAAC,mBAAmB,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,kBAAkB,EAC9G,WAAW,EACZ,EAAE,EAAE;IACH,MAAM,MAAM,GAAG,cAAc,EAAE,CAAA;IAC/B,MAAM,QAAQ,GAAG,CAAC,KAAK,IAAI,IAAI,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,QAAQ,IAAI,IAAI,CAAA;IACxE,MAAM,MAAM,GAAG,WAAW,IAAI,IAAI,IAAI,WAAW,KAAK,KAAK;QACzD,CAAC,CAAC,IAAI;QACN,CAAC,CAAC,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,WAAW,CAAA;IAC3C,IAAI,OAAO,IAAI,IAAI,IAAI,CAAC,QAAQ,IAAI,MAAM,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC;QAC/F,OAAO,IAAI,CAAA;IACb,CAAC;IAED,OAAO,iBAAQ,SAAS,EAAE,EAAE,CAAC,eAAe,EAAE,SAAS,CAAC,EAAE,KAAK,EAAE,KAAK,YACpE,eAAK,SAAS,EAAE,EAAE,CAAC,8CAA8C,EAAE,kBAAkB,CAAC,aACnF,OAAO,IAAI,IAAI,IAAI,2CAAyB,SAAS,EAAC,gCAAgC,YAAE,OAAO,GAAO,EACtG,QAAQ,IAAI,eAAK,SAAS,EAAC,0DAA0D,aACnF,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;4BACxB,MAAM,KAAK,GAAG,cAAc,CAAC,eAAe,CAC1C,SAAS,EAAE,IAAI,CAAC,KAAK,EAAE,WAAW,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,IAAI,CAC3F,CAAA;4BAED,OAAO,IAAI,CAAC,IAAI,IAAI,IAAI;gCACtB,CAAC,CAAC,KAAC,IAAI,IAA6B,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,YAAG,KAAK,IAA9D,GAAG,IAAI,CAAC,IAAI,IAAI,GAAG,EAAE,CAAiD;gCACnF,CAAC,CAAC,KAAC,IAAI,IAA8B,MAAM,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,YAAG,KAAK,IAAnE,GAAG,IAAI,CAAC,KAAK,IAAI,GAAG,EAAE,CAAqD,CAAA;wBAC5F,CAAC,CAAC,EACD,QAAQ,IACL,EAML,MAAM,IAAI,IAAI;oBACb,CAAC,CAAC,2CAAwB,SAAS,EAAC,kDAAkD,aACpF,KAAC,WAAW,KAAG,EACf,KAAC,WAAW,OAAK,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,GAAI,IACzE;oBACN,CAAC,CAAC,KAAC,WAAW,KAAG,IACf,GACC,CAAA;AACX,CAAC,CAAA"}
@@ -1,5 +1,5 @@
1
- import { initI18nResource, LIB_NAMESPACE } from '@owlmeans/i18n';
2
- import { getI18nInstance } from '@owlmeans/client-i18n/utils';
1
+ import { LIB_NAMESPACE, i18nHelper } from '@owlmeans/i18n';
2
+ import { i18nInstanceHelper } from '@owlmeans/client-i18n/utils';
3
3
  import { toast } from 'sonner';
4
4
  import { LoginOutcome } from '@owlmeans/client-auth/login';
5
5
  import { AUTH_RESOURCE, POPUP_BLOCKED_FALLBACK } from './consts.local.js';
@@ -13,8 +13,8 @@ import { AUTH_RESOURCE, POPUP_BLOCKED_FALLBACK } from './consts.local.js';
13
13
  * memoized), and the other later gets `null` back and no-ops with the bundle already there.
14
14
  */
15
15
  const translateAuth = (cfg, key, fallback) => {
16
- const i18n = getI18nInstance(cfg);
17
- const resources = initI18nResource(i18n.language, AUTH_RESOURCE, LIB_NAMESPACE);
16
+ const i18n = i18nInstanceHelper.getI18nInstance(cfg);
17
+ const resources = i18nHelper.initI18nResource(i18n.language, AUTH_RESOURCE, LIB_NAMESPACE);
18
18
  resources?.forEach(resource => i18n.addResourceBundle(i18n.language, LIB_NAMESPACE, { [AUTH_RESOURCE]: resource.data }, true, true));
19
19
  return i18n.t(`${AUTH_RESOURCE}.${key}`, { ns: LIB_NAMESPACE, defaultValue: fallback });
20
20
  };
@@ -1 +1 @@
1
- {"version":3,"file":"notify.js","sourceRoot":"","sources":["../../../src/components/login/notify.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAChE,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAA;AAE7D,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAC9B,OAAO,EAAE,YAAY,EAAsB,MAAM,6BAA6B,CAAA;AAC9E,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAA;AAEzE;;;;;;;;GAQG;AACH,MAAM,aAAa,GAAG,CAAC,GAAiB,EAAE,GAAW,EAAE,QAAgB,EAAU,EAAE;IACjF,MAAM,IAAI,GAAG,eAAe,CAAC,GAAG,CAAC,CAAA;IACjC,MAAM,SAAS,GAAG,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,EAAE,aAAa,CAAC,CAAA;IAC/E,SAAS,EAAE,OAAO,CAChB,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAChC,IAAI,CAAC,QAAQ,EAAE,aAAa,EAAE,EAAE,CAAC,aAAa,CAAC,EAAE,QAAQ,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAC7E,CACF,CAAA;IAED,OAAO,IAAI,CAAC,CAAC,CAAC,GAAG,aAAa,IAAI,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,aAAa,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,CAAA;AACzF,CAAC,CAAA;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,GAAiB,EAAiB,EAAE,CAAC,OAAO,CAAC,EAAE;IAChF,IAAI,OAAO,KAAK,YAAY,CAAC,OAAO,EAAE,CAAC;QACrC,OAAM;IACR,CAAC;IACD,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,EAAE,qBAAqB,EAAE,sBAAsB,CAAC,CAAC,CAAA;AAClF,CAAC,CAAA"}
1
+ {"version":3,"file":"notify.js","sourceRoot":"","sources":["../../../src/components/login/notify.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AAEhE,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAC9B,OAAO,EAAE,YAAY,EAAsB,MAAM,6BAA6B,CAAA;AAC9E,OAAO,EAAE,aAAa,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAA;AAEzE;;;;;;;;GAQG;AACH,MAAM,aAAa,GAAG,CAAC,GAAiB,EAAE,GAAW,EAAE,QAAgB,EAAU,EAAE;IACjF,MAAM,IAAI,GAAG,kBAAkB,CAAC,eAAe,CAAC,GAAG,CAAC,CAAA;IACpD,MAAM,SAAS,GAAG,UAAU,CAAC,gBAAgB,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,EAAE,aAAa,CAAC,CAAA;IAC1F,SAAS,EAAE,OAAO,CAChB,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAChC,IAAI,CAAC,QAAQ,EAAE,aAAa,EAAE,EAAE,CAAC,aAAa,CAAC,EAAE,QAAQ,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,IAAI,CAC7E,CACF,CAAA;IAED,OAAO,IAAI,CAAC,CAAC,CAAC,GAAG,aAAa,IAAI,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,aAAa,EAAE,YAAY,EAAE,QAAQ,EAAE,CAAC,CAAA;AACzF,CAAC,CAAA;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,GAAiB,EAAiB,EAAE,CAAC,OAAO,CAAC,EAAE;IAChF,IAAI,OAAO,KAAK,YAAY,CAAC,OAAO,EAAE,CAAC;QACrC,OAAM;IACR,CAAC;IACD,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,GAAG,EAAE,qBAAqB,EAAE,sBAAsB,CAAC,CAAC,CAAA;AAClF,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"screen.d.ts","sourceRoot":"","sources":["../../../src/components/login/screen.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,EAAE,EAAE,MAAM,OAAO,CAAA;AAO/C,OAAO,EAAuC,KAAK,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AAMxG;;;;;;;;;;GAUG;AACH,eAAO,MAAM,WAAW,EAAE,EAAE,CAAC,gBAAgB,CAgG5C,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,EAAE,EAAE,CAAC,gBAAgB,CASrD,CAAA"}
1
+ {"version":3,"file":"screen.d.ts","sourceRoot":"","sources":["../../../src/components/login/screen.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,EAAE,EAAE,MAAM,OAAO,CAAA;AAO/C,OAAO,EAAoB,KAAK,gBAAgB,EAAqB,MAAM,6BAA6B,CAAA;AAMxG;;;;;;;;;;GAUG;AACH,eAAO,MAAM,WAAW,EAAE,EAAE,CAAC,gBAAgB,CAgG5C,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,EAAE,EAAE,CAAC,gBAAgB,CASrD,CAAA"}
@@ -6,7 +6,7 @@ import { Card, CardContent, CardHeader, CardTitle, CardDescription } from '../..
6
6
  import { cn } from '../../@/lib/utils.js';
7
7
  import { useI18nLib, useLanguage } from '@owlmeans/client-i18n';
8
8
  import { useLoginMethods } from '@owlmeans/client-panel/auth';
9
- import { loginAttemptError } from '@owlmeans/client-auth/login';
9
+ import { loginResumeHelper } from '@owlmeans/client-auth/login';
10
10
  import { LoginMethodIcon } from './icons.js';
11
11
  import { LoginPrivacyNotice, LoginTerms } from './terms.js';
12
12
  import { LoginCredit } from './credit.js';
@@ -30,7 +30,7 @@ export const LoginScreen = props => {
30
30
  ...(props.methods != null ? { methods: props.methods } : {}),
31
31
  });
32
32
  const Logo = props.Logo;
33
- const attemptError = model.busy == null ? loginAttemptError(model.outcome) : null;
33
+ const attemptError = model.busy == null ? loginResumeHelper.loginAttemptError(model.outcome) : null;
34
34
  // The viewport height is set INLINE, and deliberately.
35
35
  //
36
36
  // A percentage minimum (`min-h-full`) resolves against a parent that has a height, and this
@@ -1 +1 @@
1
- {"version":3,"file":"screen.js","sourceRoot":"","sources":["../../../src/components/login/screen.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"screen.js","sourceRoot":"","sources":["../../../src/components/login/screen.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"terms.d.ts","sourceRoot":"","sources":["../../../src/components/login/terms.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAa,MAAM,OAAO,CAAA;AAG1C,OAAO,KAAK,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAS1E;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB,EAAE,EAAE,CAAC,uBAAuB,CAS1D,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,UAAU,EAAE,EAAE,CAAC,eAAe,CA8C1C,CAAA"}
1
+ {"version":3,"file":"terms.d.ts","sourceRoot":"","sources":["../../../src/components/login/terms.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAa,MAAM,OAAO,CAAA;AAG1C,OAAO,KAAK,EAAE,uBAAuB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAS1E;;;;;;;GAOG;AACH,eAAO,MAAM,kBAAkB,EAAE,EAAE,CAAC,uBAAuB,CAM1D,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,UAAU,EAAE,EAAE,CAAC,eAAe,CAwC1C,CAAA"}
@@ -1,6 +1,6 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { cn } from '../../@/lib/utils.js';
3
- import { termsLabelResolver, termsSentence } from '@owlmeans/client-auth/login';
3
+ import { loginTermsHelper } from '@owlmeans/client-auth/login';
4
4
  const renderParts = (parts) => parts.map((part, index) => part.href != null
5
5
  ? _jsx("a", { href: part.href, target: "_blank", rel: "noreferrer noopener", "data-login-document": part.documentKey, className: "underline underline-offset-2 hover:text-foreground", children: part.text }, index)
6
6
  : _jsx("span", { children: part.text }, index));
@@ -13,8 +13,8 @@ const renderParts = (parts) => parts.map((part, index) => part.href != null
13
13
  * own — the disclosure does not move just because the confirmation did.
14
14
  */
15
15
  export const LoginPrivacyNotice = ({ model, translate, locale, className }) => {
16
- const resolveLabel = termsLabelResolver(translate, locale);
17
- return _jsx("p", { "data-login-privacy": true, className: cn('text-xs text-muted-foreground', className), children: renderParts(termsSentence(translate('login.terms.notice', 'How we handle your personal data: {{notices}}.'), model, locale, resolveLabel)) });
16
+ const resolveLabel = loginTermsHelper.termsLabelResolver(translate, locale);
17
+ return _jsx("p", { "data-login-privacy": true, className: cn('text-xs text-muted-foreground', className), children: renderParts(loginTermsHelper.termsSentence(translate('login.terms.notice', 'How we handle your personal data: {{notices}}.'), model, locale, resolveLabel)) });
18
18
  };
19
19
  /**
20
20
  * The sign-in screen's terms confirmation: one consented checkbox for `documents` (terms, plus
@@ -23,10 +23,10 @@ export const LoginPrivacyNotice = ({ model, translate, locale, className }) => {
23
23
  * because nothing is being agreed to there.
24
24
  */
25
25
  export const LoginTerms = ({ model, translate, locale, className }) => {
26
- const resolveLabel = termsLabelResolver(translate, locale);
26
+ const resolveLabel = loginTermsHelper.termsLabelResolver(translate, locale);
27
27
  // Centred, like every other row in the card. The checkbox stays at the start of the sentence
28
28
  // rather than above it, so `justify-center` centres the pair and `text-center` centres the
29
29
  // wrapped lines within it.
30
- return _jsxs("div", { className: cn('flex flex-col items-center gap-1.5 text-center', className), children: [_jsxs("label", { className: "flex items-start justify-center gap-2 text-sm text-muted-foreground cursor-pointer", children: [_jsx("input", { type: "checkbox", "data-login-terms": true, className: "mt-0.5 size-4 shrink-0 accent-primary", checked: model.accepted, "aria-invalid": model.attempted && !model.accepted, onChange: event => model.accept(event.target.checked) }), _jsx("span", { children: renderParts(termsSentence(translate('login.terms.accept', 'I have read and agree to the {{documents}}.'), model, locale, resolveLabel)) })] }), model.revisedAt != null && _jsx("p", { "data-login-revised": true, className: "text-xs text-muted-foreground", children: translate('login.terms.revised', 'Last updated: {{date}}').split('{{date}}').join(model.revisedAt) }), _jsx(LoginPrivacyNotice, { model: model, translate: translate, locale: locale }), model.attempted && !model.accepted && _jsx("p", { role: "alert", className: "text-sm text-destructive", children: renderParts(termsSentence(translate('login.terms.required', 'Please confirm the {{documents}} to continue.'), model, locale, resolveLabel)) })] });
30
+ return _jsxs("div", { className: cn('flex flex-col items-center gap-1.5 text-center', className), children: [_jsxs("label", { className: "flex items-start justify-center gap-2 text-sm text-muted-foreground cursor-pointer", children: [_jsx("input", { type: "checkbox", "data-login-terms": true, className: "mt-0.5 size-4 shrink-0 accent-primary", checked: model.accepted, "aria-invalid": model.attempted && !model.accepted, onChange: event => model.accept(event.target.checked) }), _jsx("span", { children: renderParts(loginTermsHelper.termsSentence(translate('login.terms.accept', 'I have read and agree to the {{documents}}.'), model, locale, resolveLabel)) })] }), model.revisedAt != null && _jsx("p", { "data-login-revised": true, className: "text-xs text-muted-foreground", children: translate('login.terms.revised', 'Last updated: {{date}}').split('{{date}}').join(model.revisedAt) }), _jsx(LoginPrivacyNotice, { model: model, translate: translate, locale: locale }), model.attempted && !model.accepted && _jsx("p", { role: "alert", className: "text-sm text-destructive", children: renderParts(loginTermsHelper.termsSentence(translate('login.terms.required', 'Please confirm the {{documents}} to continue.'), model, locale, resolveLabel)) })] });
31
31
  };
32
32
  //# sourceMappingURL=terms.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"terms.js","sourceRoot":"","sources":["../../../src/components/login/terms.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,sBAAsB,CAAA;AACzC,OAAO,EAAE,kBAAkB,EAAE,aAAa,EAA0B,MAAM,6BAA6B,CAAA;AAGvG,MAAM,WAAW,GAAG,CAAC,KAA0B,EAAa,EAAE,CAC5D,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI;IAC1C,CAAC,CAAC,YAAe,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAC,QAAQ,EAAC,GAAG,EAAC,qBAAqB,yBACpD,IAAI,CAAC,WAAW,EACrC,SAAS,EAAC,oDAAoD,YAAE,IAAI,CAAC,IAAI,IAFjE,KAAK,CAEiE;IAChF,CAAC,CAAC,yBAAmB,IAAI,CAAC,IAAI,IAAjB,KAAK,CAAoB,CAAC,CAAA;AAE3C;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAgC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE;IACzG,MAAM,YAAY,GAAG,kBAAkB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;IAE1D,OAAO,wCAAsB,SAAS,EAAE,EAAE,CAAC,+BAA+B,EAAE,SAAS,CAAC,YACnF,WAAW,CAAC,aAAa,CACxB,SAAS,CAAC,oBAAoB,EAAE,gDAAgD,CAAC,EACjF,KAAK,EAAE,MAAM,EAAE,YAAY,CAC5B,CAAC,GACA,CAAA;AACN,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,UAAU,GAAwB,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE;IACzF,MAAM,YAAY,GAAG,kBAAkB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;IAE1D,6FAA6F;IAC7F,2FAA2F;IAC3F,2BAA2B;IAC3B,OAAO,eAAK,SAAS,EAAE,EAAE,CAAC,gDAAgD,EAAE,SAAS,CAAC,aAKpF,iBAAO,SAAS,EAAC,oFAAoF,aAOnG,gBACE,IAAI,EAAC,UAAU,4BACf,SAAS,EAAC,uCAAuC,EACjD,OAAO,EAAE,KAAK,CAAC,QAAQ,kBACT,KAAK,CAAC,SAAS,IAAI,CAAC,KAAK,CAAC,QAAQ,EAChD,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,GACrD,EACF,yBACG,WAAW,CAAC,aAAa,CACxB,SAAS,CAAC,oBAAoB,EAAE,6CAA6C,CAAC,EAC9E,KAAK,EAAE,MAAM,EAAE,YAAY,CAC5B,CAAC,GACG,IACD,EAEP,KAAK,CAAC,SAAS,IAAI,IAAI,IAAI,wCAAsB,SAAS,EAAC,+BAA+B,YACxF,SAAS,CAAC,qBAAqB,EAAE,wBAAwB,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GACjG,EAEJ,KAAC,kBAAkB,IAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,GAAI,EAEzE,KAAK,CAAC,SAAS,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,YAAG,IAAI,EAAC,OAAO,EAAC,SAAS,EAAC,0BAA0B,YACxF,WAAW,CAAC,aAAa,CACxB,SAAS,CAAC,sBAAsB,EAAE,+CAA+C,CAAC,EAClF,KAAK,EAAE,MAAM,EAAE,YAAY,CAC5B,CAAC,GACA,IACA,CAAA;AACR,CAAC,CAAA"}
1
+ {"version":3,"file":"terms.js","sourceRoot":"","sources":["../../../src/components/login/terms.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,EAAE,EAAE,MAAM,sBAAsB,CAAA;AACzC,OAAO,EAA0B,gBAAgB,EAAE,MAAM,6BAA6B,CAAA;AAGtF,MAAM,WAAW,GAAG,CAAC,KAA0B,EAAa,EAAE,CAC5D,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI;IAC1C,CAAC,CAAC,YAAe,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAC,QAAQ,EAAC,GAAG,EAAC,qBAAqB,yBACpD,IAAI,CAAC,WAAW,EACrC,SAAS,EAAC,oDAAoD,YAAE,IAAI,CAAC,IAAI,IAFjE,KAAK,CAEiE;IAChF,CAAC,CAAC,yBAAmB,IAAI,CAAC,IAAI,IAAjB,KAAK,CAAoB,CAAC,CAAA;AAE3C;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAgC,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE;IACzG,MAAM,YAAY,GAAG,gBAAgB,CAAC,kBAAkB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;IAE3E,OAAO,wCAAsB,SAAS,EAAE,EAAE,CAAC,+BAA+B,EAAE,SAAS,CAAC,YACnF,WAAW,CAAC,gBAAgB,CAAC,aAAa,CAAC,SAAS,CAAC,oBAAoB,EAAE,gDAAgD,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,GAC1J,CAAA;AACN,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,UAAU,GAAwB,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,EAAE;IACzF,MAAM,YAAY,GAAG,gBAAgB,CAAC,kBAAkB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;IAE3E,6FAA6F;IAC7F,2FAA2F;IAC3F,2BAA2B;IAC3B,OAAO,eAAK,SAAS,EAAE,EAAE,CAAC,gDAAgD,EAAE,SAAS,CAAC,aAKpF,iBAAO,SAAS,EAAC,oFAAoF,aAOnG,gBACE,IAAI,EAAC,UAAU,4BACf,SAAS,EAAC,uCAAuC,EACjD,OAAO,EAAE,KAAK,CAAC,QAAQ,kBACT,KAAK,CAAC,SAAS,IAAI,CAAC,KAAK,CAAC,QAAQ,EAChD,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,GACrD,EACF,yBACG,WAAW,CAAC,gBAAgB,CAAC,aAAa,CAAC,SAAS,CAAC,oBAAoB,EAAE,6CAA6C,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,GACpJ,IACD,EAEP,KAAK,CAAC,SAAS,IAAI,IAAI,IAAI,wCAAsB,SAAS,EAAC,+BAA+B,YACxF,SAAS,CAAC,qBAAqB,EAAE,wBAAwB,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,GACjG,EAEJ,KAAC,kBAAkB,IAAC,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,GAAI,EAEzE,KAAK,CAAC,SAAS,IAAI,CAAC,KAAK,CAAC,QAAQ,IAAI,YAAG,IAAI,EAAC,OAAO,EAAC,SAAS,EAAC,0BAA0B,YACxF,WAAW,CAAC,gBAAgB,CAAC,aAAa,CAAC,SAAS,CAAC,sBAAsB,EAAE,+CAA+C,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,GAC3J,IACA,CAAA;AACR,CAAC,CAAA"}
@@ -15,4 +15,27 @@ export declare const CONTAINER = "mx-auto w-full max-w-6xl px-4";
15
15
  */
16
16
  export declare const TARGET = "size-11 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background";
17
17
  export declare const ENTRY_ACTIVE = "bg-accent text-accent-foreground";
18
+ /**
19
+ * Section entries are LINKS, not buttons.
20
+ *
21
+ * The shadcn primitive styles its links as menu tiles — a filled hover/active background, a
22
+ * radius and tile padding — which reads as a row of buttons across the top of an application.
23
+ * These classes land after the primitive's, so `cn`'s tailwind-merge drops the conflicting
24
+ * ones; every neutralised utility here has a counterpart in the primitive, and removing one
25
+ * brings the tile back.
26
+ */
27
+ export declare const SECTION_LINK: string;
28
+ /**
29
+ * Invisible until it takes focus, then a pill in the top-left corner above everything — the
30
+ * inverse of the page's own surface (`bg-foreground text-background`), so it reads on any theme.
31
+ *
32
+ * The padding is focus-only: `sr-only` zeroes padding, but a plain `px-4` sorts after it and wins,
33
+ * which leaves a 32px box behind the clip instead of the 1px one assistive tech expects.
34
+ */
35
+ export declare const SKIP_LINK: string;
36
+ /**
37
+ * Sheet entries are LINKS, exactly as the section menu's are — a real `href` keeps each one
38
+ * focusable, openable in a new tab and announced as a link — and each row is a 44px touch target.
39
+ */
40
+ export declare const ENTRY: string;
18
41
  //# sourceMappingURL=consts.local.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"consts.local.d.ts","sourceRoot":"","sources":["../../../src/components/nav/consts.local.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,eAAO,MAAM,SAAS,kCAAkC,CAAA;AAExD;;;;GAIG;AACH,eAAO,MAAM,MAAM,qGAAqG,CAAA;AAExH,eAAO,MAAM,YAAY,qCAAqC,CAAA"}
1
+ {"version":3,"file":"consts.local.d.ts","sourceRoot":"","sources":["../../../src/components/nav/consts.local.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,eAAO,MAAM,SAAS,kCAAkC,CAAA;AAExD;;;;GAIG;AACH,eAAO,MAAM,MAAM,qGAAqG,CAAA;AAExH,eAAO,MAAM,YAAY,qCAAqC,CAAA;AAE9D;;;;;;;;GAQG;AACH,eAAO,MAAM,YAAY,QAUd,CAAA;AAEX;;;;;;GAMG;AACH,eAAO,MAAM,SAAS,QAKX,CAAA;AAEX;;;GAGG;AACH,eAAO,MAAM,KAAK,QAIP,CAAA"}
@@ -15,4 +15,46 @@ export const CONTAINER = 'mx-auto w-full max-w-6xl px-4';
15
15
  */
16
16
  export const TARGET = 'size-11 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background';
17
17
  export const ENTRY_ACTIVE = 'bg-accent text-accent-foreground';
18
+ /**
19
+ * Section entries are LINKS, not buttons.
20
+ *
21
+ * The shadcn primitive styles its links as menu tiles — a filled hover/active background, a
22
+ * radius and tile padding — which reads as a row of buttons across the top of an application.
23
+ * These classes land after the primitive's, so `cn`'s tailwind-merge drops the conflicting
24
+ * ones; every neutralised utility here has a counterpart in the primitive, and removing one
25
+ * brings the tile back.
26
+ */
27
+ export const SECTION_LINK = [
28
+ 'bg-transparent hover:bg-transparent focus:bg-transparent',
29
+ 'rounded-none px-0 py-1',
30
+ 'text-sm font-medium text-muted-foreground',
31
+ 'hover:text-foreground hover:underline underline-offset-4',
32
+ // Radix marks the active link with a VALUELESS `data-active`, so the state has to be matched
33
+ // on the attribute's presence. `data-[active=true]` — which the shadcn primitive itself uses —
34
+ // matches nothing here, which is why its own active styling never showed either.
35
+ 'data-[active]:text-foreground data-[active]:underline data-[active]:bg-transparent',
36
+ 'cursor-pointer',
37
+ ].join(' ');
38
+ /**
39
+ * Invisible until it takes focus, then a pill in the top-left corner above everything — the
40
+ * inverse of the page's own surface (`bg-foreground text-background`), so it reads on any theme.
41
+ *
42
+ * The padding is focus-only: `sr-only` zeroes padding, but a plain `px-4` sorts after it and wins,
43
+ * which leaves a 32px box behind the clip instead of the 1px one assistive tech expects.
44
+ */
45
+ export const SKIP_LINK = [
46
+ 'sr-only focus:not-sr-only focus:fixed focus:top-4 focus:left-4 focus:z-50 focus:px-4 focus:py-3',
47
+ 'rounded-full bg-foreground text-sm font-semibold text-background',
48
+ 'outline-none focus-visible:ring-[3px] focus-visible:ring-ring focus-visible:ring-offset-2',
49
+ 'focus-visible:ring-offset-background',
50
+ ].join(' ');
51
+ /**
52
+ * Sheet entries are LINKS, exactly as the section menu's are — a real `href` keeps each one
53
+ * focusable, openable in a new tab and announced as a link — and each row is a 44px touch target.
54
+ */
55
+ export const ENTRY = [
56
+ 'flex min-h-11 items-center gap-2 rounded-md px-3 text-sm font-medium text-foreground',
57
+ 'hover:bg-accent hover:text-accent-foreground',
58
+ 'outline-none focus-visible:ring-[3px] focus-visible:ring-ring',
59
+ ].join(' ');
18
60
  //# sourceMappingURL=consts.local.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"consts.local.js","sourceRoot":"","sources":["../../../src/components/nav/consts.local.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,+BAA+B,CAAA;AAExD;;;;GAIG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,kGAAkG,CAAA;AAExH,MAAM,CAAC,MAAM,YAAY,GAAG,kCAAkC,CAAA"}
1
+ {"version":3,"file":"consts.local.js","sourceRoot":"","sources":["../../../src/components/nav/consts.local.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG,+BAA+B,CAAA;AAExD;;;;GAIG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,kGAAkG,CAAA;AAExH,MAAM,CAAC,MAAM,YAAY,GAAG,kCAAkC,CAAA;AAE9D;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,0DAA0D;IAC1D,wBAAwB;IACxB,2CAA2C;IAC3C,0DAA0D;IAC1D,6FAA6F;IAC7F,+FAA+F;IAC/F,iFAAiF;IACjF,oFAAoF;IACpF,gBAAgB;CACjB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAEX;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,iGAAiG;IACjG,kEAAkE;IAClE,2FAA2F;IAC3F,sCAAsC;CACvC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAEX;;;GAGG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,sFAAsF;IACtF,8CAA8C;IAC9C,+DAA+D;CAChE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../../src/components/nav/layout.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,EAAE,EAAmB,MAAM,OAAO,CAAA;AASxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAiBhD;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,SAAS,EAAE,EAAE,CAAC,cAAc,CAsIxC,CAAA"}
1
+ {"version":3,"file":"layout.d.ts","sourceRoot":"","sources":["../../../src/components/nav/layout.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,EAAE,EAAmB,MAAM,OAAO,CAAA;AASxD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAGhD;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,SAAS,EAAE,EAAE,CAAC,cAAc,CAsIxC,CAAA"}
@@ -1,26 +1,13 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useRef } from 'react';
3
3
  import { useNavigate } from '@owlmeans/client';
4
- import { defaultNavTranslate } from '@owlmeans/client-panel';
4
+ import { navLabelHelper } from '@owlmeans/client-panel';
5
5
  import { cn } from '../../@/lib/utils.js';
6
6
  import { Footer } from '../footer/component.js';
7
7
  import { MobileNav } from './mobile.js';
8
8
  import { SideNav } from './side.js';
9
9
  import { TopNav } from './top.js';
10
- import { CONTAINER } from './consts.local.js';
11
- /**
12
- * Invisible until it takes focus, then a pill in the top-left corner above everything — the
13
- * inverse of the page's own surface (`bg-foreground text-background`), so it reads on any theme.
14
- *
15
- * The padding is focus-only: `sr-only` zeroes padding, but a plain `px-4` sorts after it and wins,
16
- * which leaves a 32px box behind the clip instead of the 1px one assistive tech expects.
17
- */
18
- const SKIP_LINK = [
19
- 'sr-only focus:not-sr-only focus:fixed focus:top-4 focus:left-4 focus:z-50 focus:px-4 focus:py-3',
20
- 'rounded-full bg-foreground text-sm font-semibold text-background',
21
- 'outline-none focus-visible:ring-[3px] focus-visible:ring-ring focus-visible:ring-offset-2',
22
- 'focus-visible:ring-offset-background',
23
- ].join(' ');
10
+ import { CONTAINER, SKIP_LINK } from './consts.local.js';
24
11
  /**
25
12
  * The standard two-layer application shell.
26
13
  *
@@ -36,7 +23,7 @@ const SKIP_LINK = [
36
23
  * The skip link comes FIRST in the root, ahead of the header — the first thing a keyboard reaches
37
24
  * — and moves focus to `<main id="main">`, past the brand, the menus and the actions.
38
25
  */
39
- export const NavLayout = ({ nav, translate = defaultNavTranslate, title, home, actions, footer, children, className, style, headerClassName, contentClassName, containerClassName, mobileMenu = false, skipLinkLabel, themeToggle }) => {
26
+ export const NavLayout = ({ nav, translate = navLabelHelper.defaultNavTranslate, title, home, actions, footer, children, className, style, headerClassName, contentClassName, containerClassName, mobileMenu = false, skipLinkLabel, themeToggle }) => {
40
27
  const navigator = useNavigate();
41
28
  // The switcher's names go through `translate` like every other shell string, with the caller's
42
29
  // own labels winning; `false`/absent stays absent, so the footer renders exactly as it did.
@@ -1 +1 @@
1
- {"version":3,"file":"layout.js","sourceRoot":"","sources":["../../../src/components/nav/layout.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"layout.js","sourceRoot":"","sources":["../../../src/components/nav/layout.tsx"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"mobile.d.ts","sourceRoot":"","sources":["../../../src/components/nav/mobile.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,EAAE,EAAmB,MAAM,OAAO,CAAA;AAOjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAahD;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,SAAS,EAAE,EAAE,CAAC,cAAc,CAoGxC,CAAA"}
1
+ {"version":3,"file":"mobile.d.ts","sourceRoot":"","sources":["../../../src/components/nav/mobile.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAmB,KAAK,EAAE,EAAmB,MAAM,OAAO,CAAA;AAOjE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAGhD;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,SAAS,EAAE,EAAE,CAAC,cAAc,CAoGxC,CAAA"}
@@ -1,20 +1,11 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
2
  import { useId, useState } from 'react';
3
3
  import { MenuIcon, XIcon } from 'lucide-react';
4
- import { defaultNavTranslate, resolveNavLabel, usePanelNav } from '@owlmeans/client-panel';
4
+ import { usePanelNav, navLabelHelper } from '@owlmeans/client-panel';
5
5
  import { cn } from '../../@/lib/utils.js';
6
6
  import { Button } from '../../@/components/ui/button.js';
7
7
  import { Sheet, SheetClose, SheetContent, SheetTitle, SheetTrigger } from '../../@/components/ui/sheet.js';
8
- import { ENTRY_ACTIVE, TARGET } from './consts.local.js';
9
- /**
10
- * Sheet entries are LINKS, exactly as the section menu's are — a real `href` keeps each one
11
- * focusable, openable in a new tab and announced as a link — and each row is a 44px touch target.
12
- */
13
- const ENTRY = [
14
- 'flex min-h-11 items-center gap-2 rounded-md px-3 text-sm font-medium text-foreground',
15
- 'hover:bg-accent hover:text-accent-foreground',
16
- 'outline-none focus-visible:ring-[3px] focus-visible:ring-ring',
17
- ].join(' ');
8
+ import { ENTRY_ACTIVE, TARGET, ENTRY } from './consts.local.js';
18
9
  /**
19
10
  * Both navigation levels behind one menu button — what a narrow viewport gets instead of the
20
11
  * section menu.
@@ -32,7 +23,7 @@ const ENTRY = [
32
23
  * `className` and `style` land on the TRIGGER — the only element the sheet places in the host's
33
24
  * flow; the sheet itself is portalled to the document body.
34
25
  */
35
- export const MobileNav = ({ config, translate = defaultNavTranslate, ariaLabel, className, style }) => {
26
+ export const MobileNav = ({ config, translate = navLabelHelper.defaultNavTranslate, ariaLabel, className, style }) => {
36
27
  const model = usePanelNav(config);
37
28
  const [open, setOpen] = useState(false);
38
29
  const id = useId();
@@ -49,12 +40,12 @@ export const MobileNav = ({ config, translate = defaultNavTranslate, ariaLabel,
49
40
  go();
50
41
  };
51
42
  return _jsxs(Sheet, { open: open, onOpenChange: setOpen, children: [_jsx(SheetTrigger, { asChild: true, children: _jsx(Button, { variant: "ghost", size: "icon", "aria-label": label, "data-nav-menu-trigger": true, className: cn(TARGET, className), style: style, children: _jsx(MenuIcon, { className: "size-6", "aria-hidden": "true" }) }) }), _jsxs(SheetContent, { side: "right", showCloseButton: false, "aria-describedby": undefined, "data-nav-sheet": true, className: "gap-0 p-0 text-foreground", children: [_jsxs("div", { className: "flex h-14 shrink-0 items-center justify-between border-b pl-4 pr-2", children: [_jsx(SheetTitle, { className: "text-base", children: label }), _jsx(SheetClose, { asChild: true, children: _jsx(Button, { variant: "ghost", size: "icon", "aria-label": closeLabel, className: TARGET, children: _jsx(XIcon, { className: "size-5", "aria-hidden": "true" }) }) })] }), _jsx("nav", { "aria-label": ariaLabel, className: "flex-1 overflow-y-auto p-2", children: _jsx("ul", { className: "flex flex-col gap-1", children: model.sections.map(section => {
52
- const sectionLabel = resolveNavLabel(translate, section.label, `nav.${section.name}`, section.name);
43
+ const sectionLabel = navLabelHelper.resolveNavLabel(translate, section.label, `nav.${section.name}`, section.name);
53
44
  if (section.items.length > 1) {
54
45
  const heading = `${id}-${section.name}`;
55
46
  return _jsxs("li", { className: "pt-2", children: [_jsx("p", { id: heading, className: cn('px-3 pb-1 text-xs font-semibold uppercase tracking-wide text-muted-foreground', model.isSectionActive(section) && 'text-foreground'), children: sectionLabel }), _jsx("ul", { "aria-labelledby": heading, className: "flex flex-col gap-1", children: section.items.map(item => {
56
47
  const active = model.isItemActive(item);
57
- return _jsx("li", { children: _jsxs("a", { href: model.hrefOf(item), onClick: follow(model.goItem(item)), "aria-current": active ? 'page' : undefined, className: cn(ENTRY, active && ENTRY_ACTIVE), children: [item.Icon != null ? _jsx(item.Icon, { className: "size-4" }) : null, resolveNavLabel(translate, item.label, `modules.${item.alias}`, item.alias)] }) }, item.alias);
48
+ return _jsx("li", { children: _jsxs("a", { href: model.hrefOf(item), onClick: follow(model.goItem(item)), "aria-current": active ? 'page' : undefined, className: cn(ENTRY, active && ENTRY_ACTIVE), children: [item.Icon != null ? _jsx(item.Icon, { className: "size-4" }) : null, navLabelHelper.resolveNavLabel(translate, item.label, `modules.${item.alias}`, item.alias)] }) }, item.alias);
58
49
  }) })] }, section.name);
59
50
  }
60
51
  const active = model.isSectionActive(section);