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

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 (135) 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 +38 -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/i18n/be.json +10 -0
  13. package/build/components/login/i18n/de.json +10 -0
  14. package/build/components/login/i18n/en.json +10 -0
  15. package/build/components/login/i18n/es.json +10 -0
  16. package/build/components/login/i18n/fr.json +10 -0
  17. package/build/components/login/i18n/pl.json +10 -0
  18. package/build/components/login/i18n/ru.json +10 -0
  19. package/build/components/login/i18n/uk.json +10 -0
  20. package/build/components/login/i18n.d.ts +2 -0
  21. package/build/components/login/i18n.d.ts.map +1 -0
  22. package/build/components/login/i18n.js +28 -0
  23. package/build/components/login/i18n.js.map +1 -0
  24. package/build/components/login/index.d.ts +2 -0
  25. package/build/components/login/index.d.ts.map +1 -1
  26. package/build/components/login/index.js +2 -0
  27. package/build/components/login/index.js.map +1 -1
  28. package/build/components/login/notify.js +4 -4
  29. package/build/components/login/notify.js.map +1 -1
  30. package/build/components/login/provider.d.ts +20 -0
  31. package/build/components/login/provider.d.ts.map +1 -0
  32. package/build/components/login/provider.js +31 -0
  33. package/build/components/login/provider.js.map +1 -0
  34. package/build/components/login/screen.d.ts +1 -0
  35. package/build/components/login/screen.d.ts.map +1 -1
  36. package/build/components/login/screen.js +36 -16
  37. package/build/components/login/screen.js.map +1 -1
  38. package/build/components/login/terms.d.ts.map +1 -1
  39. package/build/components/login/terms.js +5 -5
  40. package/build/components/login/terms.js.map +1 -1
  41. package/build/components/login/types.d.ts +6 -1
  42. package/build/components/login/types.d.ts.map +1 -1
  43. package/build/components/nav/consts.local.d.ts +23 -0
  44. package/build/components/nav/consts.local.d.ts.map +1 -1
  45. package/build/components/nav/consts.local.js +42 -0
  46. package/build/components/nav/consts.local.js.map +1 -1
  47. package/build/components/nav/layout.d.ts.map +1 -1
  48. package/build/components/nav/layout.js +3 -16
  49. package/build/components/nav/layout.js.map +1 -1
  50. package/build/components/nav/mobile.d.ts.map +1 -1
  51. package/build/components/nav/mobile.js +5 -14
  52. package/build/components/nav/mobile.js.map +1 -1
  53. package/build/components/nav/side.js +3 -3
  54. package/build/components/nav/side.js.map +1 -1
  55. package/build/components/nav/top.d.ts.map +1 -1
  56. package/build/components/nav/top.js +4 -23
  57. package/build/components/nav/top.js.map +1 -1
  58. package/build/components/scheme/consts.local.d.ts +6 -0
  59. package/build/components/scheme/consts.local.d.ts.map +1 -1
  60. package/build/components/scheme/consts.local.js +11 -0
  61. package/build/components/scheme/consts.local.js.map +1 -1
  62. package/build/components/scheme/hook.js +8 -8
  63. package/build/components/scheme/hook.js.map +1 -1
  64. package/build/components/scheme/toggle.d.ts.map +1 -1
  65. package/build/components/scheme/toggle.js +1 -11
  66. package/build/components/scheme/toggle.js.map +1 -1
  67. package/build/components/socket/i18n.js +9 -9
  68. package/build/components/socket/i18n.js.map +1 -1
  69. package/build/consent/translate.js +2 -2
  70. package/build/consent/translate.js.map +1 -1
  71. package/build/entrypoints.d.ts +7 -1
  72. package/build/entrypoints.d.ts.map +1 -1
  73. package/build/exports.d.ts +2 -2
  74. package/build/exports.d.ts.map +1 -1
  75. package/build/exports.js +2 -2
  76. package/build/exports.js.map +1 -1
  77. package/build/permission/i18n.js +2 -2
  78. package/build/permission/i18n.js.map +1 -1
  79. package/build/permission/index.js +3 -3
  80. package/build/permission/index.js.map +1 -1
  81. package/build/scheme/index.d.ts +2 -2
  82. package/build/scheme/index.d.ts.map +1 -1
  83. package/build/scheme/index.js +1 -1
  84. package/build/scheme/index.js.map +1 -1
  85. package/build/scheme/scheme.d.ts +4 -24
  86. package/build/scheme/scheme.d.ts.map +1 -1
  87. package/build/scheme/scheme.js +43 -57
  88. package/build/scheme/scheme.js.map +1 -1
  89. package/build/scheme/types.d.ts +27 -0
  90. package/build/scheme/types.d.ts.map +1 -1
  91. package/package.json +31 -31
  92. package/src/auth/exports.ts +1 -1
  93. package/src/components/footer/component.tsx +3 -3
  94. package/src/components/login/i18n/be.json +10 -0
  95. package/src/components/login/i18n/de.json +10 -0
  96. package/src/components/login/i18n/en.json +10 -0
  97. package/src/components/login/i18n/es.json +10 -0
  98. package/src/components/login/i18n/fr.json +10 -0
  99. package/src/components/login/i18n/pl.json +10 -0
  100. package/src/components/login/i18n/ru.json +10 -0
  101. package/src/components/login/i18n/uk.json +10 -0
  102. package/src/components/login/i18n.ts +29 -0
  103. package/src/components/login/index.ts +3 -0
  104. package/src/components/login/notify.ts +4 -4
  105. package/src/components/login/provider.tsx +57 -0
  106. package/src/components/login/screen.tsx +109 -70
  107. package/src/components/login/terms.tsx +6 -15
  108. package/src/components/login/types.ts +7 -1
  109. package/src/components/nav/consts.local.ts +45 -0
  110. package/src/components/nav/layout.tsx +3 -17
  111. package/src/components/nav/mobile.tsx +5 -15
  112. package/src/components/nav/side.tsx +3 -3
  113. package/src/components/nav/top.tsx +4 -24
  114. package/src/components/scheme/consts.local.ts +12 -0
  115. package/src/components/scheme/hook.ts +8 -8
  116. package/src/components/scheme/toggle.tsx +1 -12
  117. package/src/components/socket/i18n.ts +9 -9
  118. package/src/consent/translate.ts +2 -2
  119. package/src/exports.ts +2 -2
  120. package/src/permission/i18n.ts +2 -2
  121. package/src/permission/index.ts +3 -3
  122. package/src/scheme/index.ts +2 -2
  123. package/src/scheme/scheme.ts +43 -54
  124. package/src/scheme/types.ts +28 -0
  125. package/tests/consent-language.spec.ts +2 -2
  126. package/tests/consent.spec.ts +2 -2
  127. package/tests/harness/mount.tsx +12 -0
  128. package/tests/lazy.spec.ts +2 -2
  129. package/tests/login-provider.spec.ts +114 -0
  130. package/tests/login.spec.ts +117 -2
  131. package/tests/nav.spec.ts +2 -2
  132. package/tests/scheme.spec.ts +4 -4
  133. package/tests/smoke.spec.ts +2 -2
  134. package/tests/socket-dialog.spec.ts +2 -2
  135. 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.72
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.51
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.72",
5
+ "generatedAt": "2026-10-06T11:45:57.685Z",
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.72"` in `dependencies`
12
12
 
13
13
  ## Key Exports
14
14
 
@@ -21,6 +21,7 @@ user-invocable: false
21
21
  | `ThemeToggle` / `useColorScheme` | The light/dark switcher (`ThemeToggleProps`, `ThemeToggleLabels`) and the hook behind it (`ColorSchemeModel`) — see *Light and dark* below |
22
22
  | `SocketReloadDialog` | The global "connection lost — try again / reload" prompt (opt in via `cfg.socket.reloadDialog`) `PanelApp` mounts automatically — see below. The hooks it reads, `useSocketStatus` and `useSocketRetry`, are imported from `@owlmeans/client-socket`, not from this package |
23
23
  | `Link` | An `<a>` addressing an entrypoint alias (or a literal `src`), with the label taken from i18n |
24
+ | `LoginProviderNote` | The provider disclosure (`LoginProviderNoteProps`) — see *The provider disclosure* below |
24
25
  | `LoginScreen` / `LocalizedLoginScreen` / `appendLoginScreen` | The identity-provider choice screen — see `login-methods`. `LoginScreen` is pure w.r.t. `locale` too, exactly like `translate`: it is a prop, defaulting to nothing, never an implicit `useLanguage()` read, because a component that reaches for i18n context directly crashes an app mounted without one. `LocalizedLoginScreen` supplies `useLanguage()`'s value when the caller does not pass its own |
25
26
  | `render(context, opts?)` | Mounts the tree inside `PanelApp`, with the browser language detector installed on the i18n instance. `opts` is `RenderOptions` plus `rootClassName` |
26
27
  | `PanelApp` | That wrapper on its own — the themed root `div` plus the i18n provider — for a host that mounts the tree itself |
@@ -33,8 +34,8 @@ user-invocable: false
33
34
  | `useBreakPoint()` | The current Tailwind breakpoint name, tracked on `resize` (`lg` when there is no `window`) |
34
35
  | `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
36
  | 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` |
37
+ | 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` |
38
+ | 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
39
 
39
40
  ## Subpath Exports
40
41
 
@@ -44,7 +45,7 @@ user-invocable: false
44
45
  widget and a presence service so a host's own collapsed menu can take over the floating button's
45
46
  job
46
47
  - `./scheme` — the React-free colour-scheme half: `COLOR_SCHEME_KEY`, `COLOR_SCHEME_EVENT`,
47
- `ColorSchemeChoice`, `readColorScheme`, `applyColorScheme`, `colorSchemeBootstrapScript` — safe
48
+ `ColorSchemeChoice`, `colorSchemeHelper` (`readColorScheme`, `applyColorScheme`, `colorSchemeBootstrapScript`) — safe
48
49
  to import from a Node build script
49
50
 
50
51
  ## Usage
@@ -277,7 +278,7 @@ that paints dark under `prefers-color-scheme: dark`. So a consumer's CSS must re
277
278
  A theme with dark tokens under `.dark` alone never follows the OS; one with them under the media
278
279
  query alone ignores an explicit light choice.
279
280
 
280
- **The head bootstrap goes before any stylesheet paints.** `colorSchemeBootstrapScript()` returns a
281
+ **The head bootstrap goes before any stylesheet paints.** `colorSchemeHelper.colorSchemeBootstrapScript()` returns a
281
282
  self-contained inline script that puts the stored choice's class on `<html>` before first paint —
282
283
  the only moment it can; a component doing it after mount shows a visitor who chose dark one frame
283
284
  of the light page. A build step inlines it into `index.html` (import it from
@@ -292,7 +293,7 @@ Rules the pieces own:
292
293
  is in (sun while light, moon while dark), chosen in script, not by a `dark:` variant.
293
294
  - **The accessible name says what pressing does** — `labels.toLight` / `labels.toDark`, English
294
295
  defaults; `NavLayout` resolves them through `translate` (`shell.toLight`, `shell.toDark`).
295
- - **One choice per document.** `applyColorScheme(choice | null)` sets the class, stores or clears
296
+ - **One choice per document.** `colorSchemeHelper.applyColorScheme(choice | null)` sets the class, stores or clears
296
297
  the key and dispatches `COLOR_SCHEME_EVENT`, so every mounted `useColorScheme` agrees at once;
297
298
  another tab's change arrives through `storage`, and an OS switch through `matchMedia` while
298
299
  nothing is stored. `setChoice(null)` hands the page back to the OS.
@@ -346,7 +347,7 @@ on every navigation. Neither does anything unless an app opts in:
346
347
  cfg.socket = { reloadDialog: true }
347
348
  ```
348
349
 
349
- Once any `ws()`/`useWs()` connection in the app has exhausted its own retry budget
350
+ Once any `socketClientHelper.ws()`/`useWs()` connection in the app has exhausted its own retry budget
350
351
  (`useSocketStatus() === 'lost'`), a global, blocking `AlertDialog` covers the screen — no Escape,
351
352
  no outside click, two actions:
352
353
 
@@ -429,7 +430,7 @@ import { Form, TextInput, SubmitButton, Button } from '@owlmeans/web-panel'
429
430
  ### The terms confirmation — `LoginTerms`, `LoginPrivacyNotice`
430
431
 
431
432
  `components/login/terms.tsx` renders `LoginTermsModel` (`@owlmeans/client-panel/auth`) via
432
- `termsSentence` + `termsLabelResolver` (`@owlmeans/client-auth/login`) rather than re-deriving
433
+ `loginTermsHelper.termsSentence` + `.termsLabelResolver` (`@owlmeans/client-auth/login`) rather than re-deriving
433
434
  link/label pairs itself. **`[data-login-terms]` marks exactly one checkbox — or NONE, once
434
435
  `model.terms.deferred` is true** (`LoginScreen` renders `LoginTerms` when not deferred,
435
436
  `LoginPrivacyNotice` when it is): an e2e suite elsewhere in the platform treats the checkbox as a
@@ -449,6 +450,34 @@ prop, never read from context directly — for `Intl.ListFormat` and a custom do
449
450
  ordinary one, with no special case. Pinned by `tests/login.spec.ts` → the "with billing, product and
450
451
  custom documents configured" and "the Terms confirmation deferred to a step" blocks.
451
452
 
453
+ ### The provider disclosure — `LoginProviderNote`
454
+
455
+ `LoginScreen` renders `useLoginMethods().provider` (`@owlmeans/client-panel/auth`, resolution rules
456
+ there) through `components/login/provider.tsx`:
457
+ `<div role="note" data-login-provider data-placement="top|inline">` — a `ShieldCheck` icon, the
458
+ sentence, and, when `info` resolved, `<a data-login-provider-info target="_blank"
459
+ rel="noopener noreferrer">More information</a>`. Never a `header`/`nav`: it is a disclosure, not a
460
+ landmark.
461
+
462
+ - **No provider → the DOM is exactly the pre-provider screen** (no note, no stage, title
463
+ `login.title`).
464
+ - **`top`** (the platform's own hosts) — the strip is the FIRST child of `[data-login-screen]`,
465
+ full width, at the screen's top edge; the card sits in `<div data-login-stage>`, which takes the
466
+ remaining height and centres it. The screen's column layout, its zero padding, the stage's flex
467
+ centring/padding and the strip's width are INLINE styles (same reason as the screen height —
468
+ `login-methods` → Layout); classes there are cosmetic only.
469
+ - **`inline`** (an owner's own domain) — the note is one line inside `CardContent`, directly under
470
+ the methods and above the terms; the screen keeps its ordinary shape.
471
+ - The card title becomes `login.provider.title` ("Sign in to {{product}}") whenever a provider
472
+ resolves; `props.title` still wins.
473
+ - Copy: `login.provider.{title,top,inline,more}` in all eight languages
474
+ (`components/login/i18n/*.json`), registered by `components/login/i18n.ts` into the SAME `auth`
475
+ library resource as `client-auth`'s login copy (deep-merged; this package owns only the
476
+ `login.provider` subtree). Names are filled after translation by `loginProviderHelper.fill`.
477
+ - Still exactly one `[data-login-terms]` in either placement. Pinned by `tests/login.spec.ts` →
478
+ "the provider disclosure" (`?provider=top|inline` in the harness) and
479
+ `tests/login-provider.spec.ts` (resolver, `fill`, eight-language key/placeholder parity).
480
+
452
481
  ## Subpath: `./consent`
453
482
 
454
483
  `PanelCookieConsent` and `PanelCookiePolicy` — `@owlmeans/web-consent`'s components bound to this
@@ -504,7 +533,7 @@ menu has already mounted) and because React 18 StrictMode double-invokes mount/c
504
533
  | Job | Import from `@owlmeans/web-panel/consent` | Where it goes |
505
534
  |---|---|---|
506
535
  | 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 |
536
+ | 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
537
  | 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
538
  | Registering the presence service | `appendConsentWidgetService(context)` | The app's `context.ts` |
510
539
 
@@ -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
+ }, undefined>>)[];
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;;;;;;;;iBAAuC,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"}
@@ -0,0 +1,10 @@
1
+ {
2
+ "login": {
3
+ "provider": {
4
+ "title": "Уваход у {{product}}",
5
+ "top": "Гэтую праграму размяшчае {{operator}} ад імя {{product}}. Для ўваходу выкарыстоўваецца {{provider}}.",
6
+ "inline": "Уваход забяспечвае {{provider}} ад імя {{product}}.",
7
+ "more": "Падрабязней"
8
+ }
9
+ }
10
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "login": {
3
+ "provider": {
4
+ "title": "Bei {{product}} anmelden",
5
+ "top": "Diese App wird von {{operator}} im Auftrag von {{product}} gehostet. Sie melden sich mit {{provider}} an.",
6
+ "inline": "Die Anmeldung stellt {{provider}} im Auftrag von {{product}} bereit.",
7
+ "more": "Weitere Informationen"
8
+ }
9
+ }
10
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "login": {
3
+ "provider": {
4
+ "title": "Sign in to {{product}}",
5
+ "top": "This app is hosted by {{operator}} on behalf of {{product}}. You sign in with {{provider}}.",
6
+ "inline": "Sign-in is provided by {{provider}} on behalf of {{product}}.",
7
+ "more": "More information"
8
+ }
9
+ }
10
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "login": {
3
+ "provider": {
4
+ "title": "Iniciar sesión en {{product}}",
5
+ "top": "Esta aplicación está alojada por {{operator}} en nombre de {{product}}. Inicias sesión con {{provider}}.",
6
+ "inline": "El inicio de sesión lo proporciona {{provider}} en nombre de {{product}}.",
7
+ "more": "Más información"
8
+ }
9
+ }
10
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "login": {
3
+ "provider": {
4
+ "title": "Connexion à {{product}}",
5
+ "top": "Cette application est hébergée par {{operator}} pour le compte de {{product}}. Vous vous connectez avec {{provider}}.",
6
+ "inline": "La connexion est assurée par {{provider}} pour le compte de {{product}}.",
7
+ "more": "En savoir plus"
8
+ }
9
+ }
10
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "login": {
3
+ "provider": {
4
+ "title": "Zaloguj się do {{product}}",
5
+ "top": "Ta aplikacja jest hostowana przez {{operator}} w imieniu {{product}}. Logujesz się przez {{provider}}.",
6
+ "inline": "Logowanie zapewnia {{provider}} w imieniu {{product}}.",
7
+ "more": "Więcej informacji"
8
+ }
9
+ }
10
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "login": {
3
+ "provider": {
4
+ "title": "Вход в {{product}}",
5
+ "top": "Это приложение размещает {{operator}} от имени {{product}}. Для входа используется {{provider}}.",
6
+ "inline": "Вход обеспечивает {{provider}} от имени {{product}}.",
7
+ "more": "Подробнее"
8
+ }
9
+ }
10
+ }
@@ -0,0 +1,10 @@
1
+ {
2
+ "login": {
3
+ "provider": {
4
+ "title": "Вхід до {{product}}",
5
+ "top": "Цей застосунок розміщує {{operator}} від імені {{product}}. Для входу використовується {{provider}}.",
6
+ "inline": "Вхід забезпечує {{provider}} від імені {{product}}.",
7
+ "more": "Докладніше"
8
+ }
9
+ }
10
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=i18n.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n.d.ts","sourceRoot":"","sources":["../../../src/components/login/i18n.ts"],"names":[],"mappings":""}
@@ -0,0 +1,28 @@
1
+ import { i18nHelper } from '@owlmeans/i18n';
2
+ import en from './i18n/en.json' with { type: 'json' };
3
+ import pl from './i18n/pl.json' with { type: 'json' };
4
+ import ru from './i18n/ru.json' with { type: 'json' };
5
+ import be from './i18n/be.json' with { type: 'json' };
6
+ import uk from './i18n/uk.json' with { type: 'json' };
7
+ import es from './i18n/es.json' with { type: 'json' };
8
+ import de from './i18n/de.json' with { type: 'json' };
9
+ import fr from './i18n/fr.json' with { type: 'json' };
10
+ import { AUTH_RESOURCE } from './consts.local.js';
11
+ /**
12
+ * The provider disclosure's copy (`login.provider.*`), registered into the SAME `auth` library
13
+ * resource `@owlmeans/client-auth/login` fills with the rest of the sign-in screen.
14
+ *
15
+ * `_addI18n` pushes and the bundles are merged deeply by tier and priority, so this chunk lands
16
+ * beside `login.title`/`login.terms.*` rather than replacing the `login` subtree. It lives here, not
17
+ * in `client-auth`, because only this package renders the disclosure — and `client-auth` is pinned
18
+ * exactly by applications that must not be pulled into a release for it.
19
+ */
20
+ i18nHelper.addI18nLib('en', AUTH_RESOURCE, en);
21
+ i18nHelper.addI18nLib('pl', AUTH_RESOURCE, pl);
22
+ i18nHelper.addI18nLib('ru', AUTH_RESOURCE, ru);
23
+ i18nHelper.addI18nLib('be', AUTH_RESOURCE, be);
24
+ i18nHelper.addI18nLib('uk', AUTH_RESOURCE, uk);
25
+ i18nHelper.addI18nLib('es', AUTH_RESOURCE, es);
26
+ i18nHelper.addI18nLib('de', AUTH_RESOURCE, de);
27
+ i18nHelper.addI18nLib('fr', AUTH_RESOURCE, fr);
28
+ //# sourceMappingURL=i18n.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"i18n.js","sourceRoot":"","sources":["../../../src/components/login/i18n.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAE3C,OAAO,EAAE,MAAM,gBAAgB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAA;AACrD,OAAO,EAAE,MAAM,gBAAgB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAA;AACrD,OAAO,EAAE,MAAM,gBAAgB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAA;AACrD,OAAO,EAAE,MAAM,gBAAgB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAA;AACrD,OAAO,EAAE,MAAM,gBAAgB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAA;AACrD,OAAO,EAAE,MAAM,gBAAgB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAA;AACrD,OAAO,EAAE,MAAM,gBAAgB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAA;AACrD,OAAO,EAAE,MAAM,gBAAgB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAA;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAEjD;;;;;;;;GAQG;AACH,UAAU,CAAC,UAAU,CAAC,IAAI,EAAE,aAAa,EAAE,EAAE,CAAC,CAAA;AAC9C,UAAU,CAAC,UAAU,CAAC,IAAI,EAAE,aAAa,EAAE,EAAE,CAAC,CAAA;AAC9C,UAAU,CAAC,UAAU,CAAC,IAAI,EAAE,aAAa,EAAE,EAAE,CAAC,CAAA;AAC9C,UAAU,CAAC,UAAU,CAAC,IAAI,EAAE,aAAa,EAAE,EAAE,CAAC,CAAA;AAC9C,UAAU,CAAC,UAAU,CAAC,IAAI,EAAE,aAAa,EAAE,EAAE,CAAC,CAAA;AAC9C,UAAU,CAAC,UAAU,CAAC,IAAI,EAAE,aAAa,EAAE,EAAE,CAAC,CAAA;AAC9C,UAAU,CAAC,UAAU,CAAC,IAAI,EAAE,aAAa,EAAE,EAAE,CAAC,CAAA;AAC9C,UAAU,CAAC,UAAU,CAAC,IAAI,EAAE,aAAa,EAAE,EAAE,CAAC,CAAA"}
@@ -1,7 +1,9 @@
1
+ import './i18n.js';
1
2
  export * from './screen.js';
2
3
  export * from './terms.js';
3
4
  export type * from './types.js';
4
5
  export * from './credit.js';
6
+ export * from './provider.js';
5
7
  export * from './consts.js';
6
8
  export * from './icons.js';
7
9
  export * from './append.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/login/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,mBAAmB,YAAY,CAAA;AAC/B,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/login/index.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,CAAA;AAElB,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,mBAAmB,YAAY,CAAA;AAC/B,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA"}
@@ -1,6 +1,8 @@
1
+ import './i18n.js';
1
2
  export * from './screen.js';
2
3
  export * from './terms.js';
3
4
  export * from './credit.js';
5
+ export * from './provider.js';
4
6
  export * from './consts.js';
5
7
  export * from './icons.js';
6
8
  export * from './append.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/login/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAE1B,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/login/index.ts"],"names":[],"mappings":"AAAA,OAAO,WAAW,CAAA;AAElB,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAE1B,cAAc,aAAa,CAAA;AAC3B,cAAc,eAAe,CAAA;AAC7B,cAAc,aAAa,CAAA;AAC3B,cAAc,YAAY,CAAA;AAC1B,cAAc,aAAa,CAAA;AAC3B,cAAc,aAAa,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"}
@@ -0,0 +1,20 @@
1
+ import type { FC } from 'react';
2
+ import type { LoginProviderNoteProps } from './types.js';
3
+ /**
4
+ * Who signs the person in, and on whose behalf.
5
+ *
6
+ * A sign-in page that a third party runs for an application has to say so wherever the
7
+ * application's own name appears: the relationship in a sentence, and a "More information" link.
8
+ * Without it the page is a stranger's form wearing someone else's name — which is precisely what a
9
+ * browser's impersonation heuristics look for.
10
+ *
11
+ * `top` is a full-width strip the screen renders as its FIRST child, above the card (the platform's
12
+ * own hosts); `inline` is one line inside the card, under the methods (an owner's own domain).
13
+ * A `role="note"` block, never `header`/`nav`: it is a disclosure, not page chrome, and a screen
14
+ * that grew a landmark here would be read as a second banner.
15
+ *
16
+ * The names are put in after translation (`loginProviderHelper.fill`), so word order stays the
17
+ * translator's and nothing but plain text ever reaches the markup.
18
+ */
19
+ export declare const LoginProviderNote: FC<LoginProviderNoteProps>;
20
+ //# sourceMappingURL=provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../src/components/login/provider.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAA;AAI/B,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAA;AAExD;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,iBAAiB,EAAE,EAAE,CAAC,sBAAsB,CAkCxD,CAAA"}
@@ -0,0 +1,31 @@
1
+ import { Fragment as _Fragment, jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { ShieldCheck } from 'lucide-react';
3
+ import { cn } from '../../@/lib/utils.js';
4
+ import { loginProviderHelper } from '@owlmeans/client-panel/auth';
5
+ /**
6
+ * Who signs the person in, and on whose behalf.
7
+ *
8
+ * A sign-in page that a third party runs for an application has to say so wherever the
9
+ * application's own name appears: the relationship in a sentence, and a "More information" link.
10
+ * Without it the page is a stranger's form wearing someone else's name — which is precisely what a
11
+ * browser's impersonation heuristics look for.
12
+ *
13
+ * `top` is a full-width strip the screen renders as its FIRST child, above the card (the platform's
14
+ * own hosts); `inline` is one line inside the card, under the methods (an owner's own domain).
15
+ * A `role="note"` block, never `header`/`nav`: it is a disclosure, not page chrome, and a screen
16
+ * that grew a landmark here would be read as a second banner.
17
+ *
18
+ * The names are put in after translation (`loginProviderHelper.fill`), so word order stays the
19
+ * translator's and nothing but plain text ever reaches the markup.
20
+ */
21
+ export const LoginProviderNote = ({ model, translate, className }) => {
22
+ const top = model.placement === 'top';
23
+ const sentence = top
24
+ ? translate('login.provider.top', 'This app is hosted by {{operator}} on behalf of {{product}}. You sign in with {{provider}}.')
25
+ : translate('login.provider.inline', 'Sign-in is provided by {{provider}} on behalf of {{product}}.');
26
+ return _jsxs("div", { role: "note", "data-login-provider": true, "data-placement": model.placement,
27
+ // The strip's full width is inline for the same reason the screen's height is: it is the part
28
+ // of the layout a stale `@source` scan must never be able to drop.
29
+ style: top ? { width: '100%', boxSizing: 'border-box' } : undefined, className: cn('flex items-start justify-center gap-2 text-center text-xs text-muted-foreground', top && 'border-b bg-muted px-4 py-2', className), children: [_jsx(ShieldCheck, { "aria-hidden": "true", className: "size-4 shrink-0" }), _jsxs("span", { children: [loginProviderHelper.fill(sentence, model), model.info != null && _jsxs(_Fragment, { children: [' ', _jsx("a", { "data-login-provider-info": true, href: model.info, target: "_blank", rel: "noopener noreferrer", className: "underline underline-offset-2 hover:text-foreground", children: translate('login.provider.more', 'More information') })] })] })] });
30
+ };
31
+ //# sourceMappingURL=provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.js","sourceRoot":"","sources":["../../../src/components/login/provider.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;AAC1C,OAAO,EAAE,EAAE,EAAE,MAAM,sBAAsB,CAAA;AACzC,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AAGjE;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAA+B,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE;IAC/F,MAAM,GAAG,GAAG,KAAK,CAAC,SAAS,KAAK,KAAK,CAAA;IACrC,MAAM,QAAQ,GAAG,GAAG;QAClB,CAAC,CAAC,SAAS,CAAC,oBAAoB,EAAE,6FAA6F,CAAC;QAChI,CAAC,CAAC,SAAS,CAAC,uBAAuB,EAAE,+DAA+D,CAAC,CAAA;IAEvG,OAAO,eACL,IAAI,EAAC,MAAM,iDAEK,KAAK,CAAC,SAAS;QAC/B,8FAA8F;QAC9F,mEAAmE;QACnE,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAAC,CAAC,SAAS,EACnE,SAAS,EAAE,EAAE,CACX,iFAAiF,EACjF,GAAG,IAAI,6BAA6B,EACpC,SAAS,CACV,aAED,KAAC,WAAW,mBAAa,MAAM,EAAC,SAAS,EAAC,iBAAiB,GAAG,EAC9D,2BACG,mBAAmB,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,EACzC,KAAK,CAAC,IAAI,IAAI,IAAI,IAAI,8BACpB,GAAG,EACJ,8CAEE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,MAAM,EAAC,QAAQ,EAAC,GAAG,EAAC,qBAAqB,EAC3D,SAAS,EAAC,oDAAoD,YAE7D,SAAS,CAAC,qBAAqB,EAAE,kBAAkB,CAAC,GACnD,IACH,IACE,IACH,CAAA;AACR,CAAC,CAAA"}
@@ -1,5 +1,6 @@
1
1
  import { type FC } from 'react';
2
2
  import { type LoginScreenProps } from '@owlmeans/client-auth/login';
3
+ import './i18n.js';
3
4
  /**
4
5
  * The sign-in screen: which identity provider, confirmed against which documents.
5
6
  *
@@ -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,OAAO,WAAW,CAAA;AAElB;;;;;;;;;;GAUG;AACH,eAAO,MAAM,WAAW,EAAE,EAAE,CAAC,gBAAgB,CAqI5C,CAAA;AAED;;;;;;GAMG;AACH,eAAO,MAAM,oBAAoB,EAAE,EAAE,CAAC,gBAAgB,CASrD,CAAA"}