@owlmeans/web-panel 0.1.18-rc.3 → 0.1.18-rc.30
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.
- package/README.md +86 -3
- package/agent-meta/manifest.json +2 -2
- package/agent-meta/skills/web-panel/SKILL.md +196 -7
- package/build/@/components/ui/button.d.ts +2 -2
- package/build/@/components/ui/navigation-menu.d.ts +15 -0
- package/build/@/components/ui/navigation-menu.d.ts.map +1 -0
- package/build/@/components/ui/navigation-menu.js +32 -0
- package/build/@/components/ui/navigation-menu.js.map +1 -0
- package/build/auth/context.d.ts.map +1 -1
- package/build/auth/context.js +0 -1
- package/build/auth/context.js.map +1 -1
- package/build/auth/entrypoints.d.ts +2 -0
- package/build/auth/entrypoints.d.ts.map +1 -0
- package/build/auth/entrypoints.js +4 -0
- package/build/auth/entrypoints.js.map +1 -0
- package/build/auth/exports.d.ts +2 -2
- package/build/auth/exports.d.ts.map +1 -1
- package/build/auth/exports.js +2 -2
- package/build/auth/exports.js.map +1 -1
- package/build/auth/plugins/basic-ed25519.js +3 -3
- package/build/auth/plugins/basic-ed25519.js.map +1 -1
- package/build/auth/plugins/re-captcha.js +2 -2
- package/build/auth/plugins/re-captcha.js.map +1 -1
- package/build/components/footer/component.d.ts +12 -0
- package/build/components/footer/component.d.ts.map +1 -0
- package/build/components/footer/component.js +24 -0
- package/build/components/footer/component.js.map +1 -0
- package/build/components/footer/index.d.ts +3 -0
- package/build/components/footer/index.d.ts.map +1 -0
- package/build/components/footer/index.js +2 -0
- package/build/components/footer/index.js.map +1 -0
- package/build/components/footer/types.d.ts +11 -0
- package/build/components/footer/types.d.ts.map +1 -0
- package/build/components/footer/types.js +2 -0
- package/build/components/footer/types.js.map +1 -0
- package/build/components/form/button/component.js.map +1 -1
- package/build/components/form/component.js.map +1 -1
- package/build/components/helper.d.ts.map +1 -1
- package/build/components/index.d.ts +4 -0
- package/build/components/index.d.ts.map +1 -1
- package/build/components/index.js +4 -0
- package/build/components/index.js.map +1 -1
- package/build/components/link.js +2 -2
- package/build/components/link.js.map +1 -1
- package/build/components/login/append.d.ts +22 -0
- package/build/components/login/append.d.ts.map +1 -0
- package/build/components/login/append.js +21 -0
- package/build/components/login/append.js.map +1 -0
- package/build/components/login/credit.d.ts +17 -0
- package/build/components/login/credit.d.ts.map +1 -0
- package/build/components/login/credit.js +17 -0
- package/build/components/login/credit.js.map +1 -0
- package/build/components/login/icons.d.ts +14 -0
- package/build/components/login/icons.d.ts.map +1 -0
- package/build/components/login/icons.js +29 -0
- package/build/components/login/icons.js.map +1 -0
- package/build/components/login/index.d.ts +6 -0
- package/build/components/login/index.d.ts.map +1 -0
- package/build/components/login/index.js +6 -0
- package/build/components/login/index.js.map +1 -0
- package/build/components/login/screen.d.ts +23 -0
- package/build/components/login/screen.d.ts.map +1 -0
- package/build/components/login/screen.js +74 -0
- package/build/components/login/screen.js.map +1 -0
- package/build/components/login/terms.d.ts +9 -0
- package/build/components/login/terms.d.ts.map +1 -0
- package/build/components/login/terms.js +33 -0
- package/build/components/login/terms.js.map +1 -0
- package/build/components/nav/index.d.ts +5 -0
- package/build/components/nav/index.d.ts.map +1 -0
- package/build/components/nav/index.js +4 -0
- package/build/components/nav/index.js.map +1 -0
- package/build/components/nav/layout.d.ts +12 -0
- package/build/components/nav/layout.d.ts.map +1 -0
- package/build/components/nav/layout.js +40 -0
- package/build/components/nav/layout.js.map +1 -0
- package/build/components/nav/side.d.ts +11 -0
- package/build/components/nav/side.d.ts.map +1 -0
- package/build/components/nav/side.js +25 -0
- package/build/components/nav/side.js.map +1 -0
- package/build/components/nav/top.d.ts +10 -0
- package/build/components/nav/top.d.ts.map +1 -0
- package/build/components/nav/top.js +44 -0
- package/build/components/nav/top.js.map +1 -0
- package/build/components/nav/types.d.ts +55 -0
- package/build/components/nav/types.d.ts.map +1 -0
- package/build/components/nav/types.js +2 -0
- package/build/components/nav/types.js.map +1 -0
- package/build/components/toaster.d.ts +16 -0
- package/build/components/toaster.d.ts.map +1 -0
- package/build/components/toaster.js +52 -0
- package/build/components/toaster.js.map +1 -0
- package/build/consent/component.d.ts +11 -0
- package/build/consent/component.d.ts.map +1 -0
- package/build/consent/component.js +53 -0
- package/build/consent/component.js.map +1 -0
- package/build/consent/index.d.ts +4 -0
- package/build/consent/index.d.ts.map +1 -0
- package/build/consent/index.js +3 -0
- package/build/consent/index.js.map +1 -0
- package/build/context.d.ts.map +1 -1
- package/build/context.js +4 -0
- package/build/context.js.map +1 -1
- package/build/entrypoints.d.ts +2 -0
- package/build/entrypoints.d.ts.map +1 -0
- package/build/entrypoints.js +4 -0
- package/build/entrypoints.js.map +1 -0
- package/build/exports.d.ts +2 -2
- package/build/exports.d.ts.map +1 -1
- package/build/exports.js +2 -2
- package/build/exports.js.map +1 -1
- package/build/index.d.ts +1 -1
- package/build/index.d.ts.map +1 -1
- package/build/index.js +1 -1
- package/build/index.js.map +1 -1
- package/build/main.d.ts.map +1 -1
- package/package.json +44 -33
- package/src/@/components/ui/navigation-menu.tsx +169 -0
- package/src/auth/context.ts +0 -2
- package/src/auth/entrypoints.ts +5 -0
- package/src/auth/exports.ts +2 -2
- package/src/auth/plugins/basic-ed25519.tsx +3 -3
- package/src/auth/plugins/re-captcha.tsx +2 -2
- package/src/components/footer/component.tsx +37 -0
- package/src/components/footer/index.ts +3 -0
- package/src/components/footer/types.ts +11 -0
- package/src/components/index.ts +4 -0
- package/src/components/link.tsx +2 -2
- package/src/components/login/append.ts +34 -0
- package/src/components/login/credit.tsx +34 -0
- package/src/components/login/icons.tsx +39 -0
- package/src/components/login/index.ts +5 -0
- package/src/components/login/screen.tsx +141 -0
- package/src/components/login/terms.tsx +74 -0
- package/src/components/nav/index.ts +5 -0
- package/src/components/nav/layout.tsx +85 -0
- package/src/components/nav/side.tsx +52 -0
- package/src/components/nav/top.tsx +62 -0
- package/src/components/nav/types.ts +56 -0
- package/src/components/toaster.tsx +68 -0
- package/src/consent/component.tsx +62 -0
- package/src/consent/index.ts +11 -0
- package/src/context.ts +5 -0
- package/src/entrypoints.ts +5 -0
- package/src/exports.ts +2 -2
- package/src/index.ts +1 -1
- package/tests/context.ts +43 -0
- package/tests/harness/index.html +11 -0
- package/tests/harness/mount.tsx +189 -0
- package/tests/login.spec.ts +188 -0
- package/tests/nav.spec.ts +252 -0
- package/tests/smoke.spec.ts +5 -1
- package/tests/toaster.spec.ts +59 -0
- package/build/.gitkeep +0 -0
- package/build/auth/modules.d.ts +0 -2
- package/build/auth/modules.d.ts.map +0 -1
- package/build/auth/modules.js +0 -4
- package/build/auth/modules.js.map +0 -1
- package/build/modules.d.ts +0 -2
- package/build/modules.d.ts.map +0 -1
- package/build/modules.js +0 -4
- package/build/modules.js.map +0 -1
- package/src/auth/modules.ts +0 -5
- package/src/modules.ts +0 -5
package/README.md
CHANGED
|
@@ -36,9 +36,12 @@ Generate the matching primitives in your app once. You can either copy them
|
|
|
36
36
|
from this package's `src/@/components/ui/` or use the shadcn CLI:
|
|
37
37
|
|
|
38
38
|
```sh
|
|
39
|
-
npx shadcn add button card input label progress alert separator
|
|
39
|
+
npx shadcn add button card input label progress alert separator navigation-menu
|
|
40
40
|
```
|
|
41
41
|
|
|
42
|
+
`navigation-menu` also needs `@radix-ui/react-navigation-menu` in your app's
|
|
43
|
+
dependencies — the `TopNav` section menu is built on it.
|
|
44
|
+
|
|
42
45
|
This package was authored against the shadcn `new-york` style with
|
|
43
46
|
`baseColor: neutral`. See `components.json` for the exact config.
|
|
44
47
|
|
|
@@ -69,6 +72,85 @@ A working set is shipped at `src/@/globals.css` (for dev/test only).
|
|
|
69
72
|
resolve: { alias: { '@': fileURLToPath(new URL('./src/@', import.meta.url)) } }
|
|
70
73
|
```
|
|
71
74
|
|
|
75
|
+
### 4. Tailwind `@source` for this package
|
|
76
|
+
|
|
77
|
+
Tailwind's scanner reads your CSS root plus its `@source` directives, and it
|
|
78
|
+
excludes `node_modules`. Classes that exist only inside this package's
|
|
79
|
+
components — the whole navigation shell and footer — therefore never reach your
|
|
80
|
+
stylesheet unless you point Tailwind at the built package:
|
|
81
|
+
|
|
82
|
+
```css
|
|
83
|
+
@import "tailwindcss";
|
|
84
|
+
|
|
85
|
+
@source "../../../node_modules/@owlmeans/web-panel/build";
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
Adjust the relative depth to your own layout; the target is this package's
|
|
89
|
+
installed `build` directory.
|
|
90
|
+
|
|
91
|
+
## Navigation shell
|
|
92
|
+
|
|
93
|
+
`NavLayout` is the standard application shell — header, section menu, the active
|
|
94
|
+
section's screen menu, content, footer. A layout entrypoint elevates a component
|
|
95
|
+
that renders it and nothing else; the matched screen arrives as `children`.
|
|
96
|
+
|
|
97
|
+
```tsx
|
|
98
|
+
import { NavLayout, HOME } from '@owlmeans/web-panel'
|
|
99
|
+
import type { PanelNavConfig, PanelNavLink } from '@owlmeans/web-panel'
|
|
100
|
+
|
|
101
|
+
const navConfig: PanelNavConfig = {
|
|
102
|
+
sections: [
|
|
103
|
+
{ name: 'home', label: 'Home', items: [{ alias: HOME, label: 'Overview' }] },
|
|
104
|
+
{
|
|
105
|
+
name: 'demo', label: 'Demo', items: [
|
|
106
|
+
{ alias: web.session, label: 'Session' },
|
|
107
|
+
{ alias: web.about, label: 'About' },
|
|
108
|
+
]
|
|
109
|
+
},
|
|
110
|
+
],
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
const footerLinks: PanelNavLink[] = [
|
|
114
|
+
{ alias: HOME, label: 'My App' },
|
|
115
|
+
{ href: 'https://owlmeans.com', label: 'OwlMeans', open: true },
|
|
116
|
+
]
|
|
117
|
+
|
|
118
|
+
export const MainLayout: FC<PropsWithChildren> = ({ children }) => (
|
|
119
|
+
<NavLayout nav={navConfig} title="My App" footer={footerLinks}>
|
|
120
|
+
{children}
|
|
121
|
+
</NavLayout>
|
|
122
|
+
)
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
Navigation is **two-layer**: the top menu lists sections, the side menu lists the
|
|
126
|
+
active section's screens. A section holding a single screen renders **no side
|
|
127
|
+
menu at all**. `NavLayout` mounts `SideNav` twice — a `hidden md:block` column
|
|
128
|
+
beside the content and a `md:hidden` strip under the header — so the same items
|
|
129
|
+
serve wide and narrow viewports.
|
|
130
|
+
|
|
131
|
+
| Component | Props |
|
|
132
|
+
|---|---|
|
|
133
|
+
| `NavLayout` | `nav`, `translate?`, `title?`, `home?` (brand target; defaults to the first section's first item), `actions?`, `footer?` (`PanelNavLink[]` renders the standard footer, a node replaces it), `contentClassName?`, `className?`, `style?` |
|
|
134
|
+
| `TopNav` | `config`, `translate?`, `ariaLabel?`, `className?`, `style?` |
|
|
135
|
+
| `SideNav` | the same, plus `variant?: 'side' \| 'bar'` |
|
|
136
|
+
| `Footer` | `links?`, `translate?`, `children?`, `className?`, `style?` |
|
|
137
|
+
|
|
138
|
+
The navigation model itself (`usePanelNav`, `PanelNavConfig`, `PanelNavItem`,
|
|
139
|
+
`PanelNavSection`, `PanelNavLink`, `NavTranslate`) is headless and lives in
|
|
140
|
+
[`@owlmeans/client-panel`](../client-panel); these components are its shadcn
|
|
141
|
+
rendering.
|
|
142
|
+
|
|
143
|
+
Two things to know when wiring it:
|
|
144
|
+
|
|
145
|
+
- **Labels do not use i18n unless you pass a resolver.** `translate` is a prop
|
|
146
|
+
(`NavTranslate`), defaulting to one that returns the fallback, because an app
|
|
147
|
+
rendered without an i18n provider throws if a menu reads the panel i18n
|
|
148
|
+
context. Labels resolve as literal `label` → `translate(key, humanized)` →
|
|
149
|
+
humanized alias, with default keys `nav.<section>` and `modules.<alias>`.
|
|
150
|
+
- **A parent route needs a `default: true` child.** A frontend entrypoint with
|
|
151
|
+
children but no default child renders blank at its own path — give a grouping
|
|
152
|
+
screen an index child at `'/'`.
|
|
153
|
+
|
|
72
154
|
## Breaking changes vs `@owlmeans/mui-panel`
|
|
73
155
|
|
|
74
156
|
This package keeps the same public name and re-export surface as the
|
|
@@ -103,14 +185,15 @@ Consumers that need the previous MUI behaviour should swap to
|
|
|
103
185
|
|
|
104
186
|
```ts
|
|
105
187
|
import {
|
|
106
|
-
PanelApp, Layout,
|
|
188
|
+
PanelApp, Layout, NavLayout, TopNav, SideNav, Footer,
|
|
189
|
+
Form, TextInput, SubmitButton, Button, ButtonSelector,
|
|
107
190
|
Block, Text, Link, Status, ImageUploader,
|
|
108
191
|
scalingToStyles, useBreakPoint, useMapBreakpoint,
|
|
109
192
|
render,
|
|
110
193
|
} from '@owlmeans/web-panel'
|
|
111
194
|
|
|
112
195
|
import { setupExternalAuthentication } from '@owlmeans/web-panel/auth'
|
|
113
|
-
import {
|
|
196
|
+
import { entrypoints } from '@owlmeans/web-panel/auth/entrypoints'
|
|
114
197
|
```
|
|
115
198
|
|
|
116
199
|
## Related packages
|
package/agent-meta/manifest.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 2,
|
|
3
3
|
"package": "@owlmeans/web-panel",
|
|
4
|
-
"version": "0.1.18-rc.
|
|
5
|
-
"generatedAt": "2026-
|
|
4
|
+
"version": "0.1.18-rc.30",
|
|
5
|
+
"generatedAt": "2026-09-01T16:49:00.430Z",
|
|
6
6
|
"canonicalRepo": "https://github.com/owlmeans/common",
|
|
7
7
|
"entries": [
|
|
8
8
|
{
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: web-panel
|
|
3
|
-
description: How to use @owlmeans/web-panel — base browser context factory (makeContext) with shadcn/Radix + Tailwind and the default OwlMeans router wired in, plus form/panel components. Auto-invoked when building a web app's makeContext or importing web panel components.
|
|
3
|
+
description: How to use @owlmeans/web-panel — base browser context factory (makeContext) with shadcn/Radix + Tailwind and the default OwlMeans router wired in, plus the two-layer navigation shell (NavLayout/TopNav/SideNav/Footer) and form/panel components. Auto-invoked when building a web app's makeContext, wiring its navigation or layout, or importing web panel components.
|
|
4
4
|
user-invocable: false
|
|
5
5
|
---
|
|
6
6
|
<!-- AUTO-GENERATED — do not edit. Regenerate via sync-agent-meta. -->
|
|
@@ -8,21 +8,27 @@ user-invocable: false
|
|
|
8
8
|
# @owlmeans/web-panel
|
|
9
9
|
|
|
10
10
|
**Layer:** Web (React)
|
|
11
|
-
**Install:** `"@owlmeans/web-panel": "^0.1.18-rc.
|
|
11
|
+
**Install:** `"@owlmeans/web-panel": "^0.1.18-rc.30"` in `dependencies`
|
|
12
12
|
|
|
13
13
|
## Key Exports
|
|
14
14
|
|
|
15
15
|
| Export | Description |
|
|
16
16
|
|--------|-------------|
|
|
17
17
|
| `makeContext<C, T>(cfg)` | Base web context factory (shadcn/Radix + default OwlMeans router) |
|
|
18
|
+
| `NavLayout` | The application shell — header, section menu, screen menu, content, footer |
|
|
19
|
+
| `TopNav` / `SideNav` / `Footer` | The shell's pieces, mountable on their own |
|
|
20
|
+
| `Toaster` | The application's toast surface — mounted once, in the layout |
|
|
21
|
+
| `Link` | An `<a>` addressing an entrypoint alias (or a literal `src`), with the label taken from i18n |
|
|
22
|
+
| `LoginScreen` / `LocalizedLoginScreen` / `appendLoginScreen` | The identity-provider choice screen — see `login-methods` |
|
|
18
23
|
| `components` submodule | shadcn/Radix panel/form components |
|
|
19
|
-
| Re-exports from `@owlmeans/client-panel` | Cross-platform panel primitives |
|
|
20
|
-
| `
|
|
24
|
+
| Re-exports from `@owlmeans/client-panel` | Cross-platform panel primitives, incl. `usePanelNav` and the `PanelNav*` types |
|
|
25
|
+
| Re-exports from `@owlmeans/client` / `@owlmeans/client-entrypoint` | `entrypoint`, `elevate`, `handler`, `route`, `frontend`, `guard`, `useNavigate`, `useEntrypoint`, `useValue` |
|
|
26
|
+
| `main`, `exports`, `context`, `entrypoints`, `types` | Wiring helpers |
|
|
21
27
|
|
|
22
28
|
## Subpath Exports
|
|
23
29
|
|
|
24
30
|
- `./auth` — auth panel components for web
|
|
25
|
-
- `./auth/
|
|
31
|
+
- `./auth/entrypoints` — auth panel entrypoint declarations
|
|
26
32
|
|
|
27
33
|
## Usage
|
|
28
34
|
|
|
@@ -36,14 +42,197 @@ export const makeContext = <C extends Config, T extends Context<C>>(cfg: C): T =
|
|
|
36
42
|
const context = makeBasicContext<C, T>(cfg)
|
|
37
43
|
appendOidcGuard<C, T>(context)
|
|
38
44
|
appendStateResource<C, T>(context, VIB_PROJECT_STATE)
|
|
39
|
-
context.makeContext = makeContext as typeof context.makeContext
|
|
40
45
|
return context
|
|
41
46
|
}
|
|
42
47
|
```
|
|
43
48
|
|
|
49
|
+
**A context is created once per process, by one factory.** An app factory calls the factory of the
|
|
50
|
+
layer below it, applies idempotent `append*(context)` mixins, and returns that same context — the
|
|
51
|
+
whole shape of the file above. Nothing is stored for re-creation, and every service, resource and
|
|
52
|
+
entrypoint binds to exactly the one context it was appended to.
|
|
53
|
+
|
|
54
|
+
### Navigation — `NavLayout`
|
|
55
|
+
|
|
56
|
+
`NavLayout` is the application shell. A layout entrypoint elevates a component that renders it and
|
|
57
|
+
nothing else; the matched screen arrives as `children`. Keep the navigation as data in its own
|
|
58
|
+
module (`src/nav.ts`) so screens, entrypoints and the shell all read the same aliases.
|
|
59
|
+
|
|
60
|
+
```tsx
|
|
61
|
+
import { NavLayout, HOME } from '@owlmeans/web-panel'
|
|
62
|
+
import type { PanelNavConfig, PanelNavLink } from '@owlmeans/web-panel'
|
|
63
|
+
|
|
64
|
+
export const navConfig: PanelNavConfig = {
|
|
65
|
+
sections: [
|
|
66
|
+
{ name: 'home', label: 'Home', items: [{ alias: HOME, label: 'Overview' }] },
|
|
67
|
+
{
|
|
68
|
+
name: 'demo', label: 'Demo', items: [
|
|
69
|
+
{ alias: web.session, label: 'Session' },
|
|
70
|
+
{ alias: web.about, label: 'About' },
|
|
71
|
+
]
|
|
72
|
+
},
|
|
73
|
+
],
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export const footerLinks: PanelNavLink[] = [
|
|
77
|
+
{ alias: HOME, label: 'My App' },
|
|
78
|
+
{ href: 'https://owlmeans.com', label: 'OwlMeans', open: true },
|
|
79
|
+
]
|
|
80
|
+
|
|
81
|
+
export const MainLayout: FC<PropsWithChildren> = ({ children }) =>
|
|
82
|
+
<NavLayout nav={navConfig} title="My App" footer={footerLinks}>{children}</NavLayout>
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
**Navigation is two-layer.** The top menu lists **sections** — the first level; the side menu lists
|
|
86
|
+
the **active section's screens** — the second. A section holding a single screen renders **no side
|
|
87
|
+
menu at all**: the model owns that rule (`showSide`), so a section that later grows a second screen
|
|
88
|
+
gains its menu with no layout change. `NavLayout` mounts `SideNav` twice — `variant="side"` as the
|
|
89
|
+
`hidden md:block` column beside the content, `variant="bar"` as the `md:hidden` strip under the
|
|
90
|
+
header. Both render the same items; only one is visible at a time.
|
|
91
|
+
|
|
92
|
+
| Component | Props |
|
|
93
|
+
|---|---|
|
|
94
|
+
| `NavLayout` | `nav: PanelNavConfig`, `translate?`, `title?: ReactNode`, `home?: string` (brand target — defaults to the first section's first item), `actions?: ReactNode`, `footer?: PanelNavLink[] \| ReactNode`, `headerClassName?`, `contentClassName?`, `containerClassName?`, `className?`, `style?` |
|
|
95
|
+
| `TopNav` | `config: PanelNavConfig`, `translate?`, `ariaLabel?`, `className?`, `style?` |
|
|
96
|
+
| `SideNav` | the same, plus `variant?: 'side' \| 'bar'` |
|
|
97
|
+
| `Footer` | `links?: PanelNavLink[]`, `translate?`, `children?`, `className?`, `style?` |
|
|
98
|
+
|
|
99
|
+
**The style slots are REGIONS, and each region is its own SURFACE.** `className` is the root —
|
|
100
|
+
the full-height page *behind* the header, side menu and footer. `headerClassName` is the sticky
|
|
101
|
+
top bar. `contentClassName` is the content area. `containerClassName` is width and padding for
|
|
102
|
+
all three at once, never colour.
|
|
103
|
+
|
|
104
|
+
The header paints an opaque background of its own, because it is sticky and content scrolls
|
|
105
|
+
beneath it. That makes it a **different surface from the root**, so it states `text-foreground`
|
|
106
|
+
alongside its `bg-background` — not as decoration, and not redundantly. A root carrying a
|
|
107
|
+
contrasting pair (`className="bg-primary text-primary-foreground"`, an ordinary dark shell)
|
|
108
|
+
otherwise inherits its near-white foreground into a near-white bar, and every header child that
|
|
109
|
+
states no colour of its own — the brand, a ghost-variant action button — is painted in the
|
|
110
|
+
foreground of a surface it is not on. It type-checks, it builds, it renders, and the menu is
|
|
111
|
+
invisible. Pinned by `tests/nav.spec.ts` → "the header is its own surface", which measures
|
|
112
|
+
rendered lightness rather than class names; the harness root carries a dark shell permanently so
|
|
113
|
+
every navigation test runs against that case.
|
|
114
|
+
|
|
115
|
+
**Every style slot is MERGED over its default — none of them substitutes.** `className`,
|
|
116
|
+
`headerClassName`, `contentClassName` and `containerClassName` all go through `cn`, so a caller
|
|
117
|
+
names only the utility it wants to move and tailwind-merge drops just the one it conflicts with.
|
|
118
|
+
This matters most for `containerClassName`, whose default is a four-part rhythm
|
|
119
|
+
(`mx-auto w-full max-w-6xl px-4`): a design asking for a wider page writes `max-w-[1280px]` and
|
|
120
|
+
means *wider*, not *unpadded and uncentred*. Substituting there took `px-4` and `mx-auto` down
|
|
121
|
+
with the width and left the header, content and footer all flush to the window edge. Pinned by
|
|
122
|
+
`nav.spec.ts` → "a width-only rhythm override keeps the side padding"; the harness passes a
|
|
123
|
+
width-only override permanently.
|
|
124
|
+
|
|
125
|
+
**A dark top bar is asked for with `headerClassName`**, giving it both halves
|
|
126
|
+
(`bg-secondary text-secondary-foreground`) — never by colouring the root and expecting the bar
|
|
127
|
+
to follow.
|
|
128
|
+
|
|
129
|
+
**The shell reads exactly five theme variables**: `--background` (page and top bar),
|
|
130
|
+
`--foreground` (active section link), `--muted-foreground` (resting section links) and
|
|
131
|
+
`--accent`/`--accent-foreground` (active side-menu item). It reads **no `--sidebar*` variable at
|
|
132
|
+
all**. So `--muted-foreground` is not merely the text colour of the `--muted` surface — it is
|
|
133
|
+
secondary text sitting directly on `--background`, and a theme that lightens it to suit a dark
|
|
134
|
+
muted panel loses its top menu.
|
|
135
|
+
|
|
136
|
+
Rules that make the shell behave:
|
|
137
|
+
|
|
138
|
+
- **Labels never reach for i18n implicitly.** `translate` is a **prop** (`NavTranslate`), defaulting
|
|
139
|
+
to `defaultNavTranslate`, which returns the fallback. An app mounted with `renderApp` from
|
|
140
|
+
`@owlmeans/web-client` has no i18n provider, and the panel i18n hook dereferences `i18n.options`
|
|
141
|
+
on the empty object `react-i18next` returns without an instance — a throw inside render that
|
|
142
|
+
blanks the whole app. An app that does have i18n passes its own
|
|
143
|
+
`(key, defaultValue) => string` resolver. Order: literal `label` → `translate(key, humanized)` →
|
|
144
|
+
humanized alias. Default keys are
|
|
145
|
+
`nav.<section>` for sections and `modules.<alias>` for items and footer links — the same family
|
|
146
|
+
`Link` uses.
|
|
147
|
+
- **Menu entries are real links.** `TopNav` puts the resolved path on `href` and calls
|
|
148
|
+
`preventDefault()` in `onClick`, navigating in-app through `nav.press`. Never drop the `href`: an
|
|
149
|
+
`<a>` without one is not focusable, does not answer the keyboard, cannot be opened in a new tab,
|
|
150
|
+
and does not even carry the `link` role.
|
|
151
|
+
- **A parent route needs a `default: true` child.** A frontend entrypoint that has children but no
|
|
152
|
+
child declared `default: true` renders blank at its own path — give a grouping screen an index
|
|
153
|
+
child at `'/'`.
|
|
154
|
+
- **Vendor `navigation-menu`.** `SideNav` builds on the existing `Button`; `TopNav` uses the shadcn
|
|
155
|
+
`navigation-menu` primitive — see the `@` contract below.
|
|
156
|
+
|
|
157
|
+
### Toasts — `Toaster`
|
|
158
|
+
|
|
159
|
+
An action that succeeded or failed says so in a toast. The surface is `Toaster`; the messages are
|
|
160
|
+
`toast.success(...)` / `toast.error(...)` imported from **`sonner`** by whatever raised them.
|
|
161
|
+
|
|
162
|
+
```tsx
|
|
163
|
+
import { NavLayout, Toaster } from '@owlmeans/web-panel'
|
|
164
|
+
|
|
165
|
+
export const MainLayout: FC<PropsWithChildren> = ({ children }) => <>
|
|
166
|
+
<NavLayout nav={navConfig} title="My App">{children}</NavLayout>
|
|
167
|
+
<Toaster />
|
|
168
|
+
</>
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
- **Mount it exactly once, in the layout.** `toast()` writes to a module-global store, so two
|
|
172
|
+
mounted `Toaster`s render every message twice and none renders any of them — both failures are
|
|
173
|
+
silent, which is why `tests/toaster.spec.ts` asserts the count rather than the presence.
|
|
174
|
+
- **Colours come from the app's own tokens** — `--popover`, `--popover-foreground`, `--border` —
|
|
175
|
+
so a toast matches every other floating surface. A caller's `style` merges over them.
|
|
176
|
+
- **The theme follows the `.dark` class on the document element**, not a theme provider: the
|
|
177
|
+
package reads the class an app's `next-themes`, the owl theme provider, or a hand-written
|
|
178
|
+
toggle all set, and depends on none of them. Pass `theme` explicitly to override.
|
|
179
|
+
- Defaults are `richColors`, `closeButton`, `duration={5000}`, `position="top-right"`; every one
|
|
180
|
+
of them, and every other `ToasterProps` field, is overridable per app.
|
|
181
|
+
- `sonner` is a dependency of this package, so nothing is required of the consumer — but an app
|
|
182
|
+
raising its own toasts should declare `sonner` too, at a range that resolves to the same copy.
|
|
183
|
+
|
|
184
|
+
### Links — `Link`
|
|
185
|
+
|
|
186
|
+
`Link` renders an `<a>` whose `href` is the entrypoint's own answer: it asks
|
|
187
|
+
`entrypoint.url()` and puts the result on the anchor, so a link into another service comes out
|
|
188
|
+
absolute and a link inside this one comes out as a path. Address a screen by **alias** (or hand it
|
|
189
|
+
the entrypoint you already hold); `src` is the escape hatch for a literal URL.
|
|
190
|
+
|
|
191
|
+
```tsx
|
|
192
|
+
import { Link } from '@owlmeans/web-panel'
|
|
193
|
+
|
|
194
|
+
<Link module={web.about} /> // label from `modules.<alias>`
|
|
195
|
+
<Link module={web.session} name="nav.session">Session</Link> // explicit i18n key
|
|
196
|
+
<Link src="https://owlmeans.com" open>OwlMeans</Link> // literal target, new tab
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
Resolution is asynchronous — `href` is absent for the first paint and settles once the URL is
|
|
200
|
+
known — so never key a test or a layout on the anchor having an `href` synchronously. The label
|
|
201
|
+
falls back to `modules.<alias>` when neither `name` nor `children` is given, `open` adds
|
|
202
|
+
`target="_blank"` with `rel="noopener noreferrer"`, and `center` centres the text.
|
|
203
|
+
|
|
204
|
+
## Subpath: `./consent`
|
|
205
|
+
|
|
206
|
+
`PanelCookieConsent` and `PanelCookiePolicy` — `@owlmeans/web-consent`'s components bound to this
|
|
207
|
+
app's language and translations, falling through to the package's own seven-language bundle for
|
|
208
|
+
every key the app has not overridden. See the `consent` skill.
|
|
209
|
+
|
|
210
|
+
A re-export does not move Tailwind class strings, so a consumer still adds an `@source` for
|
|
211
|
+
`@owlmeans/web-consent/build` as well as for this package's.
|
|
212
|
+
|
|
213
|
+
## Consumer setup — the `@` contract and Tailwind
|
|
214
|
+
|
|
215
|
+
`web-panel` emits `@/components/ui/*` and `@/lib/utils` verbatim; the app's bundler resolves `@` to
|
|
216
|
+
its own shadcn copy. Vendor every primitive the package imports: `alert`, `button`, `card`, `input`,
|
|
217
|
+
`label`, `navigation-menu`, `progress` (plus `separator` if you use it), and add
|
|
218
|
+
`@radix-ui/react-navigation-menu` alongside the other Radix peers.
|
|
219
|
+
|
|
220
|
+
Then point Tailwind at the built package. Its oxide scanner reads the CSS root plus `@source`
|
|
221
|
+
directives only, and excludes `node_modules` — so classes that exist **only** inside `web-panel`
|
|
222
|
+
components (the whole navigation shell and footer) never reach the stylesheet, and the app renders
|
|
223
|
+
an unstyled menu. In the app's Tailwind entry:
|
|
224
|
+
|
|
225
|
+
```css
|
|
226
|
+
@import "tailwindcss";
|
|
227
|
+
|
|
228
|
+
@source "../../../node_modules/@owlmeans/web-panel/build";
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
Adjust the relative depth to your own layout; the target is the installed package's `build`.
|
|
232
|
+
|
|
44
233
|
## Depends On
|
|
45
234
|
|
|
46
235
|
- `@owlmeans/web-client`, `@owlmeans/client-panel`, `@owlmeans/client-i18n`, `@owlmeans/web-router`
|
|
47
236
|
- Peers (app-provided): `react`, `react-dom`, `react-hook-form`, `tailwindcss`, `tailwind-merge`,
|
|
48
237
|
`clsx`, `class-variance-authority`, `lucide-react`, `ajv`, and the `@radix-ui/react-*` primitives
|
|
49
|
-
(`label`, `progress`, `separator`, `slot`). No MUI, no react-router.
|
|
238
|
+
(`label`, `navigation-menu`, `progress`, `separator`, `slot`). No MUI, no react-router.
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
2
|
import { type VariantProps } from 'class-variance-authority';
|
|
3
3
|
declare const buttonVariants: (props?: ({
|
|
4
|
-
variant?: "default" | "destructive" | "
|
|
5
|
-
size?: "default" | "
|
|
4
|
+
variant?: "default" | "destructive" | "outline" | "secondary" | "ghost" | "link" | null | undefined;
|
|
5
|
+
size?: "default" | "sm" | "lg" | "icon" | null | undefined;
|
|
6
6
|
} & import("class-variance-authority/types").ClassProp) | undefined) => string;
|
|
7
7
|
declare function Button({ className, variant, size, asChild, ...props }: React.ComponentProps<"button"> & VariantProps<typeof buttonVariants> & {
|
|
8
8
|
asChild?: boolean;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import * as React from "react";
|
|
2
|
+
import * as NavigationMenuPrimitive from "@radix-ui/react-navigation-menu";
|
|
3
|
+
declare function NavigationMenu({ className, children, viewport, ...props }: React.ComponentProps<typeof NavigationMenuPrimitive.Root> & {
|
|
4
|
+
viewport?: boolean;
|
|
5
|
+
}): React.JSX.Element;
|
|
6
|
+
declare function NavigationMenuList({ className, ...props }: React.ComponentProps<typeof NavigationMenuPrimitive.List>): React.JSX.Element;
|
|
7
|
+
declare function NavigationMenuItem({ className, ...props }: React.ComponentProps<typeof NavigationMenuPrimitive.Item>): React.JSX.Element;
|
|
8
|
+
declare const navigationMenuTriggerStyle: (props?: import("class-variance-authority/types").ClassProp | undefined) => string;
|
|
9
|
+
declare function NavigationMenuTrigger({ className, children, ...props }: React.ComponentProps<typeof NavigationMenuPrimitive.Trigger>): React.JSX.Element;
|
|
10
|
+
declare function NavigationMenuContent({ className, ...props }: React.ComponentProps<typeof NavigationMenuPrimitive.Content>): React.JSX.Element;
|
|
11
|
+
declare function NavigationMenuViewport({ className, ...props }: React.ComponentProps<typeof NavigationMenuPrimitive.Viewport>): React.JSX.Element;
|
|
12
|
+
declare function NavigationMenuLink({ className, ...props }: React.ComponentProps<typeof NavigationMenuPrimitive.Link>): React.JSX.Element;
|
|
13
|
+
declare function NavigationMenuIndicator({ className, ...props }: React.ComponentProps<typeof NavigationMenuPrimitive.Indicator>): React.JSX.Element;
|
|
14
|
+
export { NavigationMenu, NavigationMenuList, NavigationMenuItem, NavigationMenuContent, NavigationMenuTrigger, NavigationMenuLink, NavigationMenuIndicator, NavigationMenuViewport, navigationMenuTriggerStyle, };
|
|
15
|
+
//# sourceMappingURL=navigation-menu.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"navigation-menu.d.ts","sourceRoot":"","sources":["../../../../src/@/components/ui/navigation-menu.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,KAAK,uBAAuB,MAAM,iCAAiC,CAAA;AAM1E,iBAAS,cAAc,CAAC,EACtB,SAAS,EACT,QAAQ,EACR,QAAe,EACf,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,uBAAuB,CAAC,IAAI,CAAC,GAAG;IAC7D,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,qBAeA;AAED,iBAAS,kBAAkB,CAAC,EAC1B,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,uBAAuB,CAAC,IAAI,CAAC,qBAW3D;AAED,iBAAS,kBAAkB,CAAC,EAC1B,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,uBAAuB,CAAC,IAAI,CAAC,qBAQ3D;AAED,QAAA,MAAM,0BAA0B,oFAE/B,CAAA;AAED,iBAAS,qBAAqB,CAAC,EAC7B,SAAS,EACT,QAAQ,EACR,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,uBAAuB,CAAC,OAAO,CAAC,qBAc9D;AAED,iBAAS,qBAAqB,CAAC,EAC7B,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,uBAAuB,CAAC,OAAO,CAAC,qBAY9D;AAED,iBAAS,sBAAsB,CAAC,EAC9B,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,uBAAuB,CAAC,QAAQ,CAAC,qBAiB/D;AAED,iBAAS,kBAAkB,CAAC,EAC1B,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,uBAAuB,CAAC,IAAI,CAAC,qBAW3D;AAED,iBAAS,uBAAuB,CAAC,EAC/B,SAAS,EACT,GAAG,KAAK,EACT,EAAE,KAAK,CAAC,cAAc,CAAC,OAAO,uBAAuB,CAAC,SAAS,CAAC,qBAahE;AAED,OAAO,EACL,cAAc,EACd,kBAAkB,EAClB,kBAAkB,EAClB,qBAAqB,EACrB,qBAAqB,EACrB,kBAAkB,EAClB,uBAAuB,EACvB,sBAAsB,EACtB,0BAA0B,GAC3B,CAAA"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
+
import * as NavigationMenuPrimitive from "@radix-ui/react-navigation-menu";
|
|
3
|
+
import { cva } from "class-variance-authority";
|
|
4
|
+
import { ChevronDownIcon } from "lucide-react";
|
|
5
|
+
import { cn } from "@/lib/utils";
|
|
6
|
+
function NavigationMenu({ className, children, viewport = true, ...props }) {
|
|
7
|
+
return (_jsxs(NavigationMenuPrimitive.Root, { "data-slot": "navigation-menu", "data-viewport": viewport, className: cn("group/navigation-menu relative flex max-w-max flex-1 items-center justify-center", className), ...props, children: [children, viewport && _jsx(NavigationMenuViewport, {})] }));
|
|
8
|
+
}
|
|
9
|
+
function NavigationMenuList({ className, ...props }) {
|
|
10
|
+
return (_jsx(NavigationMenuPrimitive.List, { "data-slot": "navigation-menu-list", className: cn("group flex flex-1 list-none items-center justify-center gap-1", className), ...props }));
|
|
11
|
+
}
|
|
12
|
+
function NavigationMenuItem({ className, ...props }) {
|
|
13
|
+
return (_jsx(NavigationMenuPrimitive.Item, { "data-slot": "navigation-menu-item", className: cn("relative", className), ...props }));
|
|
14
|
+
}
|
|
15
|
+
const navigationMenuTriggerStyle = cva("group inline-flex h-9 w-max items-center justify-center rounded-md bg-background px-4 py-2 text-sm font-medium hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground disabled:pointer-events-none disabled:opacity-50 data-[state=open]:hover:bg-accent data-[state=open]:text-accent-foreground data-[state=open]:focus:bg-accent data-[state=open]:bg-accent/50 focus-visible:ring-ring/50 outline-none transition-[color,box-shadow] focus-visible:ring-[3px] focus-visible:outline-1");
|
|
16
|
+
function NavigationMenuTrigger({ className, children, ...props }) {
|
|
17
|
+
return (_jsxs(NavigationMenuPrimitive.Trigger, { "data-slot": "navigation-menu-trigger", className: cn(navigationMenuTriggerStyle(), "group", className), ...props, children: [children, " ", _jsx(ChevronDownIcon, { className: "relative top-[1px] ml-1 size-3 transition duration-300 group-data-[state=open]:rotate-180", "aria-hidden": "true" })] }));
|
|
18
|
+
}
|
|
19
|
+
function NavigationMenuContent({ className, ...props }) {
|
|
20
|
+
return (_jsx(NavigationMenuPrimitive.Content, { "data-slot": "navigation-menu-content", className: cn("data-[motion^=from-]:animate-in data-[motion^=to-]:animate-out data-[motion^=from-]:fade-in data-[motion^=to-]:fade-out data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52 data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52 top-0 left-0 w-full p-2 pr-2.5 md:absolute md:w-auto", "group-data-[viewport=false]/navigation-menu:bg-popover group-data-[viewport=false]/navigation-menu:text-popover-foreground group-data-[viewport=false]/navigation-menu:data-[state=open]:animate-in group-data-[viewport=false]/navigation-menu:data-[state=closed]:animate-out group-data-[viewport=false]/navigation-menu:data-[state=closed]:zoom-out-95 group-data-[viewport=false]/navigation-menu:data-[state=open]:zoom-in-95 group-data-[viewport=false]/navigation-menu:data-[state=open]:fade-in-0 group-data-[viewport=false]/navigation-menu:data-[state=closed]:fade-out-0 group-data-[viewport=false]/navigation-menu:top-full group-data-[viewport=false]/navigation-menu:mt-1.5 group-data-[viewport=false]/navigation-menu:overflow-hidden group-data-[viewport=false]/navigation-menu:rounded-md group-data-[viewport=false]/navigation-menu:border group-data-[viewport=false]/navigation-menu:shadow group-data-[viewport=false]/navigation-menu:duration-200 **:data-[slot=navigation-menu-link]:focus:ring-0 **:data-[slot=navigation-menu-link]:focus:outline-none", className), ...props }));
|
|
21
|
+
}
|
|
22
|
+
function NavigationMenuViewport({ className, ...props }) {
|
|
23
|
+
return (_jsx("div", { className: cn("absolute top-full left-0 isolate z-50 flex justify-center"), children: _jsx(NavigationMenuPrimitive.Viewport, { "data-slot": "navigation-menu-viewport", className: cn("origin-top-center bg-popover text-popover-foreground data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-90 relative mt-1.5 h-[var(--radix-navigation-menu-viewport-height)] w-full overflow-hidden rounded-md border shadow md:w-[var(--radix-navigation-menu-viewport-width)]", className), ...props }) }));
|
|
24
|
+
}
|
|
25
|
+
function NavigationMenuLink({ className, ...props }) {
|
|
26
|
+
return (_jsx(NavigationMenuPrimitive.Link, { "data-slot": "navigation-menu-link", className: cn("data-[active=true]:focus:bg-accent data-[active=true]:hover:bg-accent data-[active=true]:bg-accent/50 data-[active=true]:text-accent-foreground hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus-visible:ring-ring/50 [&_svg:not([class*='text-'])]:text-muted-foreground flex flex-col gap-1 rounded-sm p-2 text-sm transition-all outline-none focus-visible:ring-[3px] focus-visible:outline-1 [&_svg:not([class*='size-'])]:size-4", className), ...props }));
|
|
27
|
+
}
|
|
28
|
+
function NavigationMenuIndicator({ className, ...props }) {
|
|
29
|
+
return (_jsx(NavigationMenuPrimitive.Indicator, { "data-slot": "navigation-menu-indicator", className: cn("data-[state=visible]:animate-in data-[state=hidden]:animate-out data-[state=hidden]:fade-out data-[state=visible]:fade-in top-full z-[1] flex h-1.5 items-end justify-center overflow-hidden", className), ...props, children: _jsx("div", { className: "bg-border relative top-[60%] h-2 w-2 rotate-45 rounded-tl-sm shadow-md" }) }));
|
|
30
|
+
}
|
|
31
|
+
export { NavigationMenu, NavigationMenuList, NavigationMenuItem, NavigationMenuContent, NavigationMenuTrigger, NavigationMenuLink, NavigationMenuIndicator, NavigationMenuViewport, navigationMenuTriggerStyle, };
|
|
32
|
+
//# sourceMappingURL=navigation-menu.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"navigation-menu.js","sourceRoot":"","sources":["../../../../src/@/components/ui/navigation-menu.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/auth/context.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,IAAI,MAAM,EAAE,UAAU,IAAI,OAAO,EAAE,MAAM,sBAAsB,CAAA;AACtF,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAIlD,eAAO,MAAM,WAAW,GAAI,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,OAAO,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/auth/context.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,IAAI,MAAM,EAAE,UAAU,IAAI,OAAO,EAAE,MAAM,sBAAsB,CAAA;AACtF,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAIlD,eAAO,MAAM,WAAW,GAAI,CAAC,SAAS,MAAM,EAAE,CAAC,SAAS,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,KAAG,CAY5E,CAAA;AAED,eAAO,MAAM,UAAU,GAAI,CAAC,SAAS,SAAS,GAAG,SAAS,EAAE,CAAC,SAAS,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,OAAK,CAC9E,CAAA"}
|
package/build/auth/context.js
CHANGED
|
@@ -12,7 +12,6 @@ export const makeContext = (cfg) => {
|
|
|
12
12
|
context.registerMiddleware(apiConfigMiddleware);
|
|
13
13
|
appendFlowService(context);
|
|
14
14
|
context.flow = () => context.service('flow');
|
|
15
|
-
context.makeContext = makeContext;
|
|
16
15
|
return context;
|
|
17
16
|
};
|
|
18
17
|
export const useContext = () => useCtx();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/auth/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AACjE,OAAO,EAAE,kBAAkB,EAAE,UAAU,IAAI,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAG/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAEtD,MAAM,CAAC,MAAM,WAAW,GAAG,CAAyC,GAAM,EAAK,EAAE;IAC/E,MAAM,OAAO,GAAG,iBAAiB,CAAC,GAAG,CAAM,CAAA;IAC3C,kBAAkB,CAAO,OAAO,CAAC,CAAA;IAEjC,kBAAkB,CAAO,OAAO,CAAC,CAAA;IACjC,eAAe,CAAO,OAAO,CAAC,CAAA;IAC9B,OAAO,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,CAAA;IAE/C,iBAAiB,CAAO,OAAO,CAAC,CAAC;IAChC,OAA4C,CAAC,IAAI,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;IAElF,OAAO,
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/auth/context.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAA;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAA;AACrD,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAA;AACjE,OAAO,EAAE,kBAAkB,EAAE,UAAU,IAAI,MAAM,EAAE,MAAM,sBAAsB,CAAA;AAG/E,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAEtD,MAAM,CAAC,MAAM,WAAW,GAAG,CAAyC,GAAM,EAAK,EAAE;IAC/E,MAAM,OAAO,GAAG,iBAAiB,CAAC,GAAG,CAAM,CAAA;IAC3C,kBAAkB,CAAO,OAAO,CAAC,CAAA;IAEjC,kBAAkB,CAAO,OAAO,CAAC,CAAA;IACjC,eAAe,CAAO,OAAO,CAAC,CAAA;IAC9B,OAAO,CAAC,kBAAkB,CAAC,mBAAmB,CAAC,CAAA;IAE/C,iBAAiB,CAAO,OAAO,CAAC,CAAC;IAChC,OAA4C,CAAC,IAAI,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;IAElF,OAAO,OAAO,CAAA;AAChB,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,UAAU,GAAG,GAAgF,EAAE,CAC1G,MAAM,EAAkB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entrypoints.d.ts","sourceRoot":"","sources":["../../src/auth/entrypoints.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,WAAW,OAAuB,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entrypoints.js","sourceRoot":"","sources":["../../src/auth/entrypoints.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,IAAI,IAAI,EAAE,MAAM,2CAA2C,CAAA;AAC/E,OAAO,EAAE,WAAW,IAAI,MAAM,EAAE,MAAM,6BAA6B,CAAA;AAEnE,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC,CAAA"}
|
package/build/auth/exports.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
export { handler,
|
|
1
|
+
export { handler, useEntrypoint, useValue, useNavigate } from '@owlmeans/client';
|
|
2
2
|
export type { Navigator } from '@owlmeans/client';
|
|
3
3
|
export { config } from '@owlmeans/client-context';
|
|
4
4
|
export { service } from '@owlmeans/config';
|
|
5
|
-
export { guard,
|
|
5
|
+
export { guard, EntrypointOutcome } from '@owlmeans/entrypoint';
|
|
6
6
|
export type { AbstractRequest } from '@owlmeans/entrypoint';
|
|
7
7
|
export { addWebService } from '@owlmeans/client-config';
|
|
8
8
|
export { entrypoint, elevate, provideRequest, stab } from '@owlmeans/client-entrypoint';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exports.d.ts","sourceRoot":"","sources":["../../src/auth/exports.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"exports.d.ts","sourceRoot":"","sources":["../../src/auth/exports.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAChF,YAAY,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAA;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAC1C,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAC/D,YAAY,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAC3D,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AACvD,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAA;AACvF,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"}
|
package/build/auth/exports.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export { handler,
|
|
1
|
+
export { handler, useEntrypoint, useValue, useNavigate } from '@owlmeans/client';
|
|
2
2
|
export { config } from '@owlmeans/client-context';
|
|
3
3
|
export { service } from '@owlmeans/config';
|
|
4
|
-
export { guard,
|
|
4
|
+
export { guard, EntrypointOutcome } from '@owlmeans/entrypoint';
|
|
5
5
|
export { addWebService } from '@owlmeans/client-config';
|
|
6
6
|
export { entrypoint, elevate, provideRequest, stab } from '@owlmeans/client-entrypoint';
|
|
7
7
|
export { route as croute } from '@owlmeans/client-route';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"exports.js","sourceRoot":"","sources":["../../src/auth/exports.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"exports.js","sourceRoot":"","sources":["../../src/auth/exports.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAEhF,OAAO,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAA;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAC1C,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAA;AAE/D,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AACvD,OAAO,EAAE,UAAU,EAAE,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,6BAA6B,CAAA;AAEvF,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"}
|
|
@@ -22,15 +22,15 @@ export const Ed22519BasicAuthUIPlugin = ({ type, stage, control }) => {
|
|
|
22
22
|
};
|
|
23
23
|
const createSubmit = (context, control) => async (data) => {
|
|
24
24
|
const token = await control.authenticate({
|
|
25
|
-
|
|
25
|
+
entitySlug: data.entityId,
|
|
26
26
|
userId: data.address,
|
|
27
27
|
credential: data.privateKey
|
|
28
28
|
});
|
|
29
29
|
if (token.token === '') {
|
|
30
30
|
return;
|
|
31
31
|
}
|
|
32
|
-
const
|
|
33
|
-
.
|
|
32
|
+
const url = await context.entrypoint(DISPATCHER)
|
|
33
|
+
.url({ query: token });
|
|
34
34
|
control.setStage?.(control.stage = AuthenticationStage.Authenticated);
|
|
35
35
|
// Give some time - that is really not cenessary - actually we need
|
|
36
36
|
// to do it on the layout finished its stuff.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"basic-ed25519.js","sourceRoot":"","sources":["../../../src/auth/plugins/basic-ed25519.tsx"],"names":[],"mappings":";AAMA,OAAO,EAAE,kCAAkC,IAAI,MAAM,EAAE,MAAM,qCAAqC,CAAA;AAClG,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,gCAAgC,CAAA;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAA;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAA;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAEjD,MAAM,CAAC,MAAM,wBAAwB,GAA2B,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE;IAC3F,MAAM,OAAO,GAAG,UAAU,EAAE,CAAA;IAC5B,MAAM,MAAM,GAAG,WAAW,CAAC,YAAY,CAAC,OAAgC,EAAE,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;IAE3F,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE;QAC/B,QAAQ,KAAK,EAAE,CAAC;YACd,KAAK,mBAAmB,CAAC,YAAY;gBACnC,OAAO,CAAC,UAAU,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC,GAAG,CAC9C,IAAI,CAAC,EAAE,CAAC,KAAC,SAAS,IAAY,IAAI,EAAE,IAAI,EAAE,KAAK,UAAvB,IAAI,CAAsB,CACnD,CAAA;YACH;gBACE,OAAO,KAAC,QAAQ,KAAG,CAAA;QACvB,CAAC;IACH,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAA;IAEX,OAAO,KAAC,IAAI,IAAC,QAAQ,QAAC,IAAI,EAAC,eAAe,EAAC,UAAU,EAAE,YAAY,CAAC,IAAI,EACtE,IAAI,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,mBAAmB,EAAE,EAClD,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,YACpC,KAAC,OAAO,KAAG,GACN,CAAA;AACT,CAAC,CAAA;AAED,MAAM,YAAY,GAAG,CAAC,OAAmB,EAAE,OAA8B,EAAE,EAAE,CAAC,KAAK,EAAE,IAAc,EAAE,EAAE;IACrG,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC;QACvC,
|
|
1
|
+
{"version":3,"file":"basic-ed25519.js","sourceRoot":"","sources":["../../../src/auth/plugins/basic-ed25519.tsx"],"names":[],"mappings":";AAMA,OAAO,EAAE,kCAAkC,IAAI,MAAM,EAAE,MAAM,qCAAqC,CAAA;AAClG,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAA;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,gCAAgC,CAAA;AACrD,OAAO,EAAE,SAAS,EAAE,MAAM,qCAAqC,CAAA;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAA;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAEjD,MAAM,CAAC,MAAM,wBAAwB,GAA2B,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE;IAC3F,MAAM,OAAO,GAAG,UAAU,EAAE,CAAA;IAC5B,MAAM,MAAM,GAAG,WAAW,CAAC,YAAY,CAAC,OAAgC,EAAE,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,CAAA;IAE3F,MAAM,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE;QAC/B,QAAQ,KAAK,EAAE,CAAC;YACd,KAAK,mBAAmB,CAAC,YAAY;gBACnC,OAAO,CAAC,UAAU,EAAE,SAAS,EAAE,YAAY,CAAC,CAAC,GAAG,CAC9C,IAAI,CAAC,EAAE,CAAC,KAAC,SAAS,IAAY,IAAI,EAAE,IAAI,EAAE,KAAK,UAAvB,IAAI,CAAsB,CACnD,CAAA;YACH;gBACE,OAAO,KAAC,QAAQ,KAAG,CAAA;QACvB,CAAC;IACH,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,CAAA;IAEX,OAAO,KAAC,IAAI,IAAC,QAAQ,QAAC,IAAI,EAAC,eAAe,EAAC,UAAU,EAAE,YAAY,CAAC,IAAI,EACtE,IAAI,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,mBAAmB,EAAE,EAClD,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,YACpC,KAAC,OAAO,KAAG,GACN,CAAA;AACT,CAAC,CAAA;AAED,MAAM,YAAY,GAAG,CAAC,OAAmB,EAAE,OAA8B,EAAE,EAAE,CAAC,KAAK,EAAE,IAAc,EAAE,EAAE;IACrG,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC;QACvC,UAAU,EAAE,IAAI,CAAC,QAAQ;QACzB,MAAM,EAAE,IAAI,CAAC,OAAO;QACpB,UAAU,EAAE,IAAI,CAAC,UAAU;KAC5B,CAAC,CAAA;IAEF,IAAI,KAAK,CAAC,KAAK,KAAK,EAAE,EAAE,CAAC;QACvB,OAAM;IACR,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,UAAU,CAAwC,UAAU,CAAC;SACpF,GAAG,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;IAExB,OAAO,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,GAAG,mBAAmB,CAAC,aAAa,CAAC,CAAA;IACrE,oEAAoE;IACpE,6CAA6C;IAC7C,+FAA+F;IAC/F,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,GAAG,EAAE,GAAG,CAAC,CAAA;AACnD,CAAC,CAAA"}
|
|
@@ -32,8 +32,8 @@ const createFinish = (context, control) => async (token) => {
|
|
|
32
32
|
console.timeLog('empty token');
|
|
33
33
|
return;
|
|
34
34
|
}
|
|
35
|
-
const
|
|
36
|
-
.
|
|
35
|
+
const url = await context.entrypoint(DISPATCHER)
|
|
36
|
+
.url({ query: authToken });
|
|
37
37
|
control.setStage?.(control.stage = AuthenticationStage.Authenticated);
|
|
38
38
|
// Give some time - that is really not cenessary - actually we need
|
|
39
39
|
// to do it on the layout finished its stuff.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"re-captcha.js","sourceRoot":"","sources":["../../../src/auth/plugins/re-captcha.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,cAAc,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAC9G,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,OAAO,EAAE,MAAM,0BAA0B,CAAA;AAClD,OAAO,SAAS,MAAM,wBAAwB,CAAA;AAC9C,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAA;AAC7C,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAA;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,0BAA0B,CAAA;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAA;AAEnD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAGjD,MAAM,CAAC,MAAM,qBAAqB,GAA2B,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE;IAClF,MAAM,OAAO,GAAG,UAAU,EAAE,CAAA;IAC5B,MAAM,CAAC,OAAO,EAAE,UAAU,CAAC,GAAG,QAAQ,CAAC,IAAI,CAAC,CAAA;IAC5C,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,EAAE,CAAC,CAAA;IACzF,MAAM,MAAM,GAAG,WAAW,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,EAAE,CAAC,CAAA;IAE9D,MAAM,OAAO,GAAG,GAAG,EAAE;QACnB,QAAQ,MAAM,EAAE,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC7C,KAAK,mBAAmB,CAAC,YAAY;gBACnC,OAAO,CACL,eAAK,SAAS,EAAC,qEAAqE,aAClF,KAAC,IAAI,IAAC,IAAI,EAAC,WAAW,EAAC,MAAM,SAAG,EAChC,cAAK,SAAS,EAAC,MAAM,YACnB,KAAC,SAAS,IAAC,OAAO,EAAE,MAAM,EAAE,KAAe,IAAI,EAAE,EAAE,QAAQ,EAAE,MAAM,EACjE,iBAAiB,EAAE,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,GAAI,GAC5C,IACF,CACP,CAAA;YACH;gBACE,OAAO,KAAC,QAAQ,IAAC,SAAS,EAAC,iBAAiB,GAAG,CAAA;QACnD,CAAC;IACH,CAAC,CAAA;IAED,OAAO,KAAC,YAAY,IAAC,EAAE,EAAC,KAAK,EAAC,MAAM,EAAC,YAAY,EAAC,QAAQ,EAAC,mBAAmB,YAC5E,eAAK,SAAS,EAAC,2CAA2C,aACvD,OAAO,EAAE,EACT,OAAO,IAAI,KAAC,QAAQ,IAAC,SAAS,EAAC,iBAAiB,GAAG,IAChD,GACO,CAAA;AACjB,CAAC,CAAA;AAED,MAAM,YAAY,GAAG,CAAC,OAAmB,EAAE,OAA8B,EAAE,EAAE,CAAC,KAAK,EAAE,KAAoB,EAAE,EAAE;IAC3G,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;QAClB,MAAM,IAAI,kBAAkB,CAAC,kBAAkB,CAAC,CAAA;IAClD,CAAC;IACD,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,YAAY,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,CAAA;IAErF,IAAI,SAAS,CAAC,KAAK,KAAK,EAAE,EAAE,CAAC;QAC3B,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAA;QAC9B,OAAM;IACR,CAAC;IACD,MAAM,
|
|
1
|
+
{"version":3,"file":"re-captcha.js","sourceRoot":"","sources":["../../../src/auth/plugins/re-captcha.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { FC } from 'react';
|
|
2
|
+
import type { FooterProps } from './types.js';
|
|
3
|
+
/**
|
|
4
|
+
* The standard footer — a row of links plus whatever the app adds as children.
|
|
5
|
+
*
|
|
6
|
+
* Labels are resolved HERE and handed to `Link` as children: `Link`'s own default label
|
|
7
|
+
* looks up `modules.<alias>` with no fallback, so an app without i18n would print the raw
|
|
8
|
+
* key. Resolving first means a literal label, a translation, or a humanized alias — never
|
|
9
|
+
* a key.
|
|
10
|
+
*/
|
|
11
|
+
export declare const Footer: FC<FooterProps>;
|
|
12
|
+
//# sourceMappingURL=component.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"component.d.ts","sourceRoot":"","sources":["../../../src/components/footer/component.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,OAAO,CAAA;AAK/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,YAAY,CAAA;AAE7C;;;;;;;GAOG;AACH,eAAO,MAAM,MAAM,EAAE,EAAE,CAAC,WAAW,CAqBlC,CAAA"}
|