@toa.io/extensions.configuration 1.0.0-alpha.272 → 1.0.0-alpha.274
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/CHANGELOG.md +210 -0
- package/components/configuration.values/manifest.toa.yaml +158 -0
- package/components/configuration.values/source/create.ts +56 -0
- package/components/configuration.values/source/fetch.ts +24 -0
- package/components/configuration.values/source/get.ts +33 -0
- package/components/configuration.values/source/lib/map.test.ts +34 -0
- package/components/configuration.values/source/lib/map.ts +34 -0
- package/components/configuration.values/source/lib/resolve.ts +54 -0
- package/components/configuration.values/source/list.ts +19 -0
- package/components/configuration.values/tsconfig.json +9 -0
- package/cucumber.js +8 -0
- package/features/site/_app/immutable/asset.js +1 -0
- package/features/site/index.html +6 -0
- package/features/steps/UI.ts +88 -0
- package/features/steps/tsconfig.json +9 -0
- package/features/ui.feature +85 -0
- package/package.json +14 -7
- package/readme.md +160 -47
- package/schemas/annotation.cos.yaml +29 -1
- package/schemas/manifest.cos.yaml +9 -3
- package/source/Aspect.test.ts +84 -8
- package/source/Aspect.ts +59 -5
- package/source/Client.test.ts +104 -0
- package/source/Client.ts +258 -0
- package/source/Composition.ts +57 -0
- package/source/Factory.ts +28 -5
- package/source/Secret.test.ts +29 -0
- package/source/Secret.ts +29 -0
- package/source/UI.ts +197 -0
- package/source/configuration.test.ts +92 -39
- package/source/configuration.ts +30 -11
- package/source/const.ts +17 -0
- package/source/deployment.test.ts +80 -1
- package/source/deployment.ts +73 -24
- package/source/epoch.test.ts +26 -0
- package/source/epoch.ts +21 -0
- package/source/index.ts +2 -1
- package/transpiled/Aspect.d.ts +18 -4
- package/transpiled/Aspect.js +47 -3
- package/transpiled/Aspect.js.map +1 -1
- package/transpiled/Aspect.test.js +59 -9
- package/transpiled/Aspect.test.js.map +1 -1
- package/transpiled/Client.d.ts +61 -0
- package/transpiled/Client.js +173 -0
- package/transpiled/Client.js.map +1 -0
- package/transpiled/Client.test.d.ts +1 -0
- package/transpiled/Client.test.js +77 -0
- package/transpiled/Client.test.js.map +1 -0
- package/transpiled/Composition.d.ts +14 -0
- package/transpiled/Composition.js +43 -0
- package/transpiled/Composition.js.map +1 -0
- package/transpiled/Factory.d.ts +8 -2
- package/transpiled/Factory.js +17 -2
- package/transpiled/Factory.js.map +1 -1
- package/transpiled/Secret.d.ts +13 -0
- package/transpiled/Secret.js +26 -0
- package/transpiled/Secret.js.map +1 -0
- package/transpiled/Secret.test.d.ts +1 -0
- package/transpiled/Secret.test.js +26 -0
- package/transpiled/Secret.test.js.map +1 -0
- package/transpiled/UI.d.ts +25 -0
- package/transpiled/UI.js +186 -0
- package/transpiled/UI.js.map +1 -0
- package/transpiled/configuration.d.ts +7 -2
- package/transpiled/configuration.js +31 -13
- package/transpiled/configuration.js.map +1 -1
- package/transpiled/configuration.test.js +84 -37
- package/transpiled/configuration.test.js.map +1 -1
- package/transpiled/const.d.ts +11 -0
- package/transpiled/const.js +14 -0
- package/transpiled/const.js.map +1 -0
- package/transpiled/deployment.d.ts +10 -4
- package/transpiled/deployment.js +57 -21
- package/transpiled/deployment.js.map +1 -1
- package/transpiled/deployment.test.js +60 -0
- package/transpiled/deployment.test.js.map +1 -1
- package/transpiled/epoch.d.ts +2 -0
- package/transpiled/epoch.js +21 -0
- package/transpiled/epoch.js.map +1 -0
- package/transpiled/epoch.test.d.ts +1 -0
- package/transpiled/epoch.test.js +22 -0
- package/transpiled/epoch.test.js.map +1 -0
- package/transpiled/index.d.ts +2 -1
- package/transpiled/index.js +4 -1
- package/transpiled/index.js.map +1 -1
- package/transpiled/tsconfig.tsbuildinfo +1 -1
- package/ui/.agents/skills/antcn/SKILL.md +91 -0
- package/ui/.agents/skills/antcn/references/analytics.md +78 -0
- package/ui/.agents/skills/antcn/references/bridge.md +41 -0
- package/ui/.agents/skills/antcn/references/clipboard.md +23 -0
- package/ui/.agents/skills/antcn/references/dismissable.md +75 -0
- package/ui/.agents/skills/antcn/references/dropdown.md +153 -0
- package/ui/.agents/skills/antcn/references/fragments.md +29 -0
- package/ui/.agents/skills/antcn/references/fullscreen.md +157 -0
- package/ui/.agents/skills/antcn/references/geo.md +27 -0
- package/ui/.agents/skills/antcn/references/globals.md +31 -0
- package/ui/.agents/skills/antcn/references/grammatical-form.md +69 -0
- package/ui/.agents/skills/antcn/references/hints.md +44 -0
- package/ui/.agents/skills/antcn/references/hold.md +34 -0
- package/ui/.agents/skills/antcn/references/iam.md +117 -0
- package/ui/.agents/skills/antcn/references/input-form.md +34 -0
- package/ui/.agents/skills/antcn/references/locale.md +66 -0
- package/ui/.agents/skills/antcn/references/net.md +33 -0
- package/ui/.agents/skills/antcn/references/panel.md +44 -0
- package/ui/.agents/skills/antcn/references/passkeys.md +27 -0
- package/ui/.agents/skills/antcn/references/payments.md +99 -0
- package/ui/.agents/skills/antcn/references/realtime.md +69 -0
- package/ui/.agents/skills/antcn/references/scrollable.md +39 -0
- package/ui/.agents/skills/antcn/references/selector.md +71 -0
- package/ui/.agents/skills/antcn/references/shake.md +36 -0
- package/ui/.agents/skills/antcn/references/share.md +28 -0
- package/ui/.agents/skills/antcn/references/shell.md +139 -0
- package/ui/.agents/skills/antcn/references/stack.md +53 -0
- package/ui/.agents/skills/antcn/references/system.md +149 -0
- package/ui/.agents/skills/antcn/references/taptap.md +28 -0
- package/ui/.agents/skills/antcn/references/tools.md +68 -0
- package/ui/.agents/skills/antcn/references/transmission.md +96 -0
- package/ui/.agents/skills/shadcn-svelte/SKILL.md +227 -0
- package/ui/.agents/skills/shadcn-svelte/agents/openai.yml +5 -0
- package/ui/.agents/skills/shadcn-svelte/assets/shadcn-svelte-small.png +0 -0
- package/ui/.agents/skills/shadcn-svelte/assets/shadcn-svelte.png +0 -0
- package/ui/.agents/skills/shadcn-svelte/cli.md +166 -0
- package/ui/.agents/skills/shadcn-svelte/customization.md +213 -0
- package/ui/.agents/skills/shadcn-svelte/evals/evals.json +47 -0
- package/ui/.agents/skills/shadcn-svelte/rules/composition.md +244 -0
- package/ui/.agents/skills/shadcn-svelte/rules/forms.md +234 -0
- package/ui/.agents/skills/shadcn-svelte/rules/icons.md +107 -0
- package/ui/.agents/skills/shadcn-svelte/rules/styling.md +195 -0
- package/ui/.agents/skills/svas/SKILL.md +169 -0
- package/ui/.agents/skills/svas/references/patterns.md +95 -0
- package/ui/.agents/skills/svintl/SKILL.md +176 -0
- package/ui/.claude/settings.json +15 -0
- package/ui/.codex/hooks.json +15 -0
- package/ui/.cursor/hooks.json +11 -0
- package/ui/.env.example +1 -0
- package/ui/.prettierrc +9 -0
- package/ui/.vscode/extensions.json +7 -0
- package/ui/.vscode/settings.json +27 -0
- package/ui/AGENTS.md +51 -0
- package/ui/architecture.md +390 -0
- package/ui/components.json +20 -0
- package/ui/eslint.config.js +152 -0
- package/ui/features/base.ts +2 -0
- package/ui/features/boot.feature +5 -0
- package/ui/features/steps/authentication.ts +34 -0
- package/ui/features/steps/navigaton.ts +37 -0
- package/ui/features/steps/typing.ts +24 -0
- package/ui/package-lock.json +8173 -0
- package/ui/package.json +76 -0
- package/ui/playwright.config.ts +13 -0
- package/ui/skills-lock.json +30 -0
- package/ui/src/@/configuration/index.ts +1 -0
- package/ui/src/@/configuration/svc/create.ts +29 -0
- package/ui/src/@/configuration/svc/index.ts +3 -0
- package/ui/src/@/configuration/svc/net/Configuration.ts +18 -0
- package/ui/src/@/configuration/svc/net/index.ts +2 -0
- package/ui/src/@/configuration/svc/net/interface.ts +35 -0
- package/ui/src/@/configuration/svc/store.ts +14 -0
- package/ui/src/@/configuration/ui/Configurations.svelte +85 -0
- package/ui/src/@/configuration/ui/Configurations.ts +5 -0
- package/ui/src/@/configuration/ui/Create.svelte +64 -0
- package/ui/src/@/configuration/ui/Create.ts +7 -0
- package/ui/src/@/configuration/ui/Form.svelte +75 -0
- package/ui/src/@/configuration/ui/Form.ts +79 -0
- package/ui/src/@/configuration/ui/Row.svelte +44 -0
- package/ui/src/@/configuration/ui/Row.ts +9 -0
- package/ui/src/@/configuration/ui/Value.svelte +33 -0
- package/ui/src/@/configuration/ui/Value.ts +6 -0
- package/ui/src/@/configuration/ui/index.ts +9 -0
- package/ui/src/@/configuration/ui/intl/built.js +38 -0
- package/ui/src/@/configuration/ui/intl/context.yaml +51 -0
- package/ui/src/@/configuration/ui/intl/en-US.yaml +21 -0
- package/ui/src/@/configuration/ui/intl/index.ts +9 -0
- package/ui/src/@/configuration/ui/intl/types.ts +31 -0
- package/ui/src/@/configuration/ui/read.test.ts +75 -0
- package/ui/src/@/configuration/ui/read.ts +102 -0
- package/ui/src/@/configuration/ui/ui.test.ts +69 -0
- package/ui/src/@/configuration/ui/ui.ts +115 -0
- package/ui/src/@/iam/index.ts +1 -0
- package/ui/src/@/iam/rc.ts +22 -0
- package/ui/src/@/iam/svc/authenticated.ts +17 -0
- package/ui/src/@/iam/svc/basic.ts +23 -0
- package/ui/src/@/iam/svc/index.ts +10 -0
- package/ui/src/@/iam/svc/logout.ts +5 -0
- package/ui/src/@/iam/svc/named.ts +16 -0
- package/ui/src/@/iam/svc/net/Echo.ts +9 -0
- package/ui/src/@/iam/svc/net/basic/index.ts +1 -0
- package/ui/src/@/iam/svc/net/basic/interface.ts +15 -0
- package/ui/src/@/iam/svc/net/federation/index.ts +1 -0
- package/ui/src/@/iam/svc/net/federation/interface.ts +12 -0
- package/ui/src/@/iam/svc/net/index.ts +6 -0
- package/ui/src/@/iam/svc/net/interface.ts +17 -0
- package/ui/src/@/iam/svc/net/otp/index.ts +1 -0
- package/ui/src/@/iam/svc/net/otp/interface.ts +14 -0
- package/ui/src/@/iam/svc/net/passkeys/index.ts +1 -0
- package/ui/src/@/iam/svc/net/passkeys/interface.ts +12 -0
- package/ui/src/@/iam/svc/oidc/apple.ts +47 -0
- package/ui/src/@/iam/svc/oidc/authenticate.ts +62 -0
- package/ui/src/@/iam/svc/oidc/google.ts +45 -0
- package/ui/src/@/iam/svc/oidc/hello.ts +82 -0
- package/ui/src/@/iam/svc/oidc/index.ts +3 -0
- package/ui/src/@/iam/svc/oidc/nonce.ts +5 -0
- package/ui/src/@/iam/svc/oidc/providers.ts +28 -0
- package/ui/src/@/iam/svc/oidc/standard.ts +28 -0
- package/ui/src/@/iam/svc/otp.ts +18 -0
- package/ui/src/@/iam/svc/passkeys/create.ts +20 -0
- package/ui/src/@/iam/svc/passkeys/index.ts +2 -0
- package/ui/src/@/iam/svc/passkeys/login.ts +21 -0
- package/ui/src/@/iam/svc/store.ts +36 -0
- package/ui/src/@/iam/svc/sync.ts +18 -0
- package/ui/src/@/iam/svc/transfer.ts +11 -0
- package/ui/src/@/iam/svc/update.ts +8 -0
- package/ui/src/@/iam/ui/AccountLike.ts +4 -0
- package/ui/src/@/iam/ui/Authenticated.svelte +37 -0
- package/ui/src/@/iam/ui/Authenticated.ts +10 -0
- package/ui/src/@/iam/ui/Authentication.svelte +50 -0
- package/ui/src/@/iam/ui/Authentication.ts +9 -0
- package/ui/src/@/iam/ui/Authorized.svelte +32 -0
- package/ui/src/@/iam/ui/Authorized.ts +65 -0
- package/ui/src/@/iam/ui/Card.svelte +14 -0
- package/ui/src/@/iam/ui/Card.ts +7 -0
- package/ui/src/@/iam/ui/Refresh.svelte +39 -0
- package/ui/src/@/iam/ui/credentials/Credentials.svelte +26 -0
- package/ui/src/@/iam/ui/credentials/Credentials.ts +5 -0
- package/ui/src/@/iam/ui/credentials/Provider.svelte +24 -0
- package/ui/src/@/iam/ui/credentials/Provider.ts +5 -0
- package/ui/src/@/iam/ui/credentials/index.ts +1 -0
- package/ui/src/@/iam/ui/credentials/passkeys/Key.svelte +42 -0
- package/ui/src/@/iam/ui/credentials/passkeys/Key.ts +29 -0
- package/ui/src/@/iam/ui/credentials/passkeys/Manager.svelte +83 -0
- package/ui/src/@/iam/ui/credentials/passkeys/Manager.ts +5 -0
- package/ui/src/@/iam/ui/credentials/passkeys/Passkeys.svelte +39 -0
- package/ui/src/@/iam/ui/credentials/passkeys/Summary.svelte +27 -0
- package/ui/src/@/iam/ui/credentials/passkeys/Summary.ts +5 -0
- package/ui/src/@/iam/ui/credentials/passkeys/index.ts +1 -0
- package/ui/src/@/iam/ui/credentials/providers.ts +15 -0
- package/ui/src/@/iam/ui/credentials/transfer/Qr.svelte +24 -0
- package/ui/src/@/iam/ui/credentials/transfer/Qr.ts +3 -0
- package/ui/src/@/iam/ui/credentials/transfer/Transfer.svelte +48 -0
- package/ui/src/@/iam/ui/credentials/transfer/Transfer.ts +5 -0
- package/ui/src/@/iam/ui/credentials/transfer/index.ts +1 -0
- package/ui/src/@/iam/ui/index.ts +3 -0
- package/ui/src/@/iam/ui/intl/built.js +79 -0
- package/ui/src/@/iam/ui/intl/context.yaml +91 -0
- package/ui/src/@/iam/ui/intl/en-US.yaml +64 -0
- package/ui/src/@/iam/ui/intl/index.ts +10 -0
- package/ui/src/@/iam/ui/intl/types.ts +70 -0
- package/ui/src/@/iam/ui/oidc/Authentication.svelte +16 -0
- package/ui/src/@/iam/ui/oidc/Authentication.ts +5 -0
- package/ui/src/@/iam/ui/oidc/Button.svelte +36 -0
- package/ui/src/@/iam/ui/oidc/Button.ts +11 -0
- package/ui/src/@/iam/ui/oidc/Refresh.svelte +16 -0
- package/ui/src/@/iam/ui/oidc/icons/Apple.svelte +19 -0
- package/ui/src/@/iam/ui/oidc/icons/Google.svelte +31 -0
- package/ui/src/@/iam/ui/oidc/icons/index.ts +11 -0
- package/ui/src/@/iam/ui/oidc/index.ts +2 -0
- package/ui/src/@/iam/ui/passkey/Authentication.svelte +64 -0
- package/ui/src/@/iam/ui/passkey/Authentication.ts +8 -0
- package/ui/src/@/iam/ui/passkey/Create.svelte +53 -0
- package/ui/src/@/iam/ui/passkey/Create.ts +7 -0
- package/ui/src/@/iam/ui/passkey/Login.svelte +29 -0
- package/ui/src/@/iam/ui/passkey/Refresh.svelte +29 -0
- package/ui/src/@/iam/ui/passkey/index.ts +2 -0
- package/ui/src/@/iam/ui/password/Authentication.svelte +19 -0
- package/ui/src/@/iam/ui/password/Authentication.ts +8 -0
- package/ui/src/@/iam/ui/password/Form.svelte +151 -0
- package/ui/src/@/iam/ui/password/Form.ts +6 -0
- package/ui/src/@/iam/ui/password/Password.svelte +39 -0
- package/ui/src/@/iam/ui/password/Password.ts +6 -0
- package/ui/src/@/iam/ui/password/Refresh.svelte +5 -0
- package/ui/src/@/iam/ui/password/index.ts +2 -0
- package/ui/src/@/net/index.ts +1 -0
- package/ui/src/@/net/svc/index.ts +3 -0
- package/ui/src/@/net/svc/origin.ts +8 -0
- package/ui/src/@/net/svc/query.test.ts +45 -0
- package/ui/src/@/net/svc/query.ts +25 -0
- package/ui/src/@/passkeys/index.ts +1 -0
- package/ui/src/@/passkeys/svc/add.ts +15 -0
- package/ui/src/@/passkeys/svc/create.ts +58 -0
- package/ui/src/@/passkeys/svc/credentials/convert.ts +32 -0
- package/ui/src/@/passkeys/svc/credentials/create.ts +34 -0
- package/ui/src/@/passkeys/svc/credentials/get.ts +14 -0
- package/ui/src/@/passkeys/svc/credentials/index.ts +3 -0
- package/ui/src/@/passkeys/svc/credentials/key.ts +10 -0
- package/ui/src/@/passkeys/svc/get.ts +10 -0
- package/ui/src/@/passkeys/svc/index.ts +6 -0
- package/ui/src/@/passkeys/svc/net/CreationResponse.ts +15 -0
- package/ui/src/@/passkeys/svc/net/Passkey.ts +8 -0
- package/ui/src/@/passkeys/svc/net/RequestResponse.ts +12 -0
- package/ui/src/@/passkeys/svc/net/challenges/Options.ts +21 -0
- package/ui/src/@/passkeys/svc/net/challenges/index.ts +2 -0
- package/ui/src/@/passkeys/svc/net/challenges/interface.ts +16 -0
- package/ui/src/@/passkeys/svc/net/index.ts +4 -0
- package/ui/src/@/passkeys/svc/net/interface.ts +29 -0
- package/ui/src/@/passkeys/svc/remove.ts +13 -0
- package/ui/src/@/passkeys/svc/request.ts +50 -0
- package/ui/src/@/passkeys/svc/store.ts +13 -0
- package/ui/src/@/passkeys/svc/supported.ts +1 -0
- package/ui/src/@/passkeys/ui/aaguid.json +150 -0
- package/ui/src/@/realtime/events.ts +1 -0
- package/ui/src/@/realtime/index.ts +1 -0
- package/ui/src/@/realtime/rc.ts +13 -0
- package/ui/src/@/realtime/svc/connect.ts +67 -0
- package/ui/src/@/realtime/svc/events.ts +17 -0
- package/ui/src/@/realtime/svc/index.ts +5 -0
- package/ui/src/@/realtime/svc/net/Message.ts +6 -0
- package/ui/src/@/realtime/svc/net/index.ts +2 -0
- package/ui/src/@/realtime/svc/net/interface.ts +13 -0
- package/ui/src/@/realtime/svc/reset.ts +5 -0
- package/ui/src/@/realtime/svc/status.ts +12 -0
- package/ui/src/@/realtime/svc/store.ts +30 -0
- package/ui/src/@/realtime/svc/time.ts +15 -0
- package/ui/src/app.d.ts +20 -0
- package/ui/src/app.html +13 -0
- package/ui/src/config/index.ts +70 -0
- package/ui/src/lib/assets/favicon.svg +1 -0
- package/ui/src/lib/components/clipboard/Clipboard.svelte +63 -0
- package/ui/src/lib/components/clipboard/Clipboard.ts +12 -0
- package/ui/src/lib/components/clipboard/index.ts +1 -0
- package/ui/src/lib/components/dismissable/Dismissable.svelte +81 -0
- package/ui/src/lib/components/dismissable/Dismissable.ts +7 -0
- package/ui/src/lib/components/dismissable/index.ts +1 -0
- package/ui/src/lib/components/dropdown/Back.svelte +14 -0
- package/ui/src/lib/components/dropdown/Back.ts +3 -0
- package/ui/src/lib/components/dropdown/Content.svelte +76 -0
- package/ui/src/lib/components/dropdown/Content.ts +13 -0
- package/ui/src/lib/components/dropdown/Context.ts +18 -0
- package/ui/src/lib/components/dropdown/Group.svelte +24 -0
- package/ui/src/lib/components/dropdown/Group.ts +8 -0
- package/ui/src/lib/components/dropdown/GroupContext.ts +15 -0
- package/ui/src/lib/components/dropdown/Item.svelte +31 -0
- package/ui/src/lib/components/dropdown/Item.ts +5 -0
- package/ui/src/lib/components/dropdown/Layer.svelte +11 -0
- package/ui/src/lib/components/dropdown/Layer.ts +7 -0
- package/ui/src/lib/components/dropdown/Root.svelte +88 -0
- package/ui/src/lib/components/dropdown/Root.ts +6 -0
- package/ui/src/lib/components/dropdown/Separator.svelte +13 -0
- package/ui/src/lib/components/dropdown/Separator.ts +5 -0
- package/ui/src/lib/components/dropdown/Trigger.svelte +33 -0
- package/ui/src/lib/components/dropdown/Trigger.ts +5 -0
- package/ui/src/lib/components/dropdown/index.ts +8 -0
- package/ui/src/lib/components/fullscreen/Fullscreen.svelte +97 -0
- package/ui/src/lib/components/fullscreen/Fullscreen.ts +18 -0
- package/ui/src/lib/components/fullscreen/Overlay.svelte +15 -0
- package/ui/src/lib/components/fullscreen/Overlay.ts +7 -0
- package/ui/src/lib/components/fullscreen/index.ts +2 -0
- package/ui/src/lib/components/hold/Hold.svelte +133 -0
- package/ui/src/lib/components/hold/Hold.ts +23 -0
- package/ui/src/lib/components/hold/index.ts +1 -0
- package/ui/src/lib/components/scrollable/Scrollable.svelte +49 -0
- package/ui/src/lib/components/scrollable/Scrollable.ts +117 -0
- package/ui/src/lib/components/scrollable/index.ts +2 -0
- package/ui/src/lib/components/shake/Shake.svelte +62 -0
- package/ui/src/lib/components/shake/Shake.ts +7 -0
- package/ui/src/lib/components/shake/index.ts +1 -0
- package/ui/src/lib/components/share/Share.svelte +58 -0
- package/ui/src/lib/components/share/Share.ts +9 -0
- package/ui/src/lib/components/share/index.ts +1 -0
- package/ui/src/lib/components/shell/Attention.svelte +11 -0
- package/ui/src/lib/components/shell/Attention.ts +6 -0
- package/ui/src/lib/components/shell/Header.svelte +18 -0
- package/ui/src/lib/components/shell/Header.ts +7 -0
- package/ui/src/lib/components/shell/Screen.svelte +28 -0
- package/ui/src/lib/components/shell/Screen.ts +11 -0
- package/ui/src/lib/components/shell/Sticky.svelte +23 -0
- package/ui/src/lib/components/shell/Sticky.ts +8 -0
- package/ui/src/lib/components/shell/Underlay.svelte +21 -0
- package/ui/src/lib/components/shell/Underlay.ts +6 -0
- package/ui/src/lib/components/shell/index.ts +6 -0
- package/ui/src/lib/components/shell/nav/Actions.svelte +31 -0
- package/ui/src/lib/components/shell/nav/Actions.ts +16 -0
- package/ui/src/lib/components/shell/nav/Back.svelte +20 -0
- package/ui/src/lib/components/shell/nav/Back.ts +9 -0
- package/ui/src/lib/components/shell/nav/Bar.svelte +24 -0
- package/ui/src/lib/components/shell/nav/Bar.ts +3 -0
- package/ui/src/lib/components/shell/nav/Button.svelte +64 -0
- package/ui/src/lib/components/shell/nav/Button.ts +7 -0
- package/ui/src/lib/components/shell/nav/Nav.svelte +62 -0
- package/ui/src/lib/components/shell/nav/Nav.ts +35 -0
- package/ui/src/lib/components/shell/nav/Return.svelte +29 -0
- package/ui/src/lib/components/shell/nav/Return.ts +15 -0
- package/ui/src/lib/components/shell/nav/Sections.svelte +58 -0
- package/ui/src/lib/components/shell/nav/Sections.ts +6 -0
- package/ui/src/lib/components/shell/nav/Toolbar.svelte +73 -0
- package/ui/src/lib/components/shell/nav/Toolbar.ts +3 -0
- package/ui/src/lib/components/shell/nav/history.ts +36 -0
- package/ui/src/lib/components/shell/nav/index.ts +5 -0
- package/ui/src/lib/components/shell/nav/store.ts +24 -0
- package/ui/src/lib/components/ui/alert/alert-action.svelte +20 -0
- package/ui/src/lib/components/ui/alert/alert-description.svelte +23 -0
- package/ui/src/lib/components/ui/alert/alert-title.svelte +23 -0
- package/ui/src/lib/components/ui/alert/alert.svelte +43 -0
- package/ui/src/lib/components/ui/alert/index.ts +17 -0
- package/ui/src/lib/components/ui/alert-dialog/alert-dialog-action.svelte +27 -0
- package/ui/src/lib/components/ui/alert-dialog/alert-dialog-cancel.svelte +27 -0
- package/ui/src/lib/components/ui/alert-dialog/alert-dialog-content.svelte +32 -0
- package/ui/src/lib/components/ui/alert-dialog/alert-dialog-description.svelte +17 -0
- package/ui/src/lib/components/ui/alert-dialog/alert-dialog-footer.svelte +23 -0
- package/ui/src/lib/components/ui/alert-dialog/alert-dialog-header.svelte +20 -0
- package/ui/src/lib/components/ui/alert-dialog/alert-dialog-media.svelte +20 -0
- package/ui/src/lib/components/ui/alert-dialog/alert-dialog-overlay.svelte +17 -0
- package/ui/src/lib/components/ui/alert-dialog/alert-dialog-portal.svelte +7 -0
- package/ui/src/lib/components/ui/alert-dialog/alert-dialog-title.svelte +17 -0
- package/ui/src/lib/components/ui/alert-dialog/alert-dialog-trigger.svelte +7 -0
- package/ui/src/lib/components/ui/alert-dialog/alert-dialog.svelte +7 -0
- package/ui/src/lib/components/ui/alert-dialog/index.ts +40 -0
- package/ui/src/lib/components/ui/badge/badge.svelte +49 -0
- package/ui/src/lib/components/ui/badge/index.ts +2 -0
- package/ui/src/lib/components/ui/button/button.svelte +82 -0
- package/ui/src/lib/components/ui/button/index.ts +17 -0
- package/ui/src/lib/components/ui/button-group/button-group-separator.svelte +23 -0
- package/ui/src/lib/components/ui/button-group/button-group-text.svelte +28 -0
- package/ui/src/lib/components/ui/button-group/button-group.svelte +46 -0
- package/ui/src/lib/components/ui/button-group/index.ts +15 -0
- package/ui/src/lib/components/ui/card/card-action.svelte +23 -0
- package/ui/src/lib/components/ui/card/card-content.svelte +20 -0
- package/ui/src/lib/components/ui/card/card-description.svelte +20 -0
- package/ui/src/lib/components/ui/card/card-footer.svelte +20 -0
- package/ui/src/lib/components/ui/card/card-header.svelte +23 -0
- package/ui/src/lib/components/ui/card/card-title.svelte +20 -0
- package/ui/src/lib/components/ui/card/card.svelte +22 -0
- package/ui/src/lib/components/ui/card/index.ts +25 -0
- package/ui/src/lib/components/ui/checkbox/checkbox.svelte +39 -0
- package/ui/src/lib/components/ui/checkbox/index.ts +6 -0
- package/ui/src/lib/components/ui/collapsible/collapsible-content.svelte +7 -0
- package/ui/src/lib/components/ui/collapsible/collapsible-trigger.svelte +7 -0
- package/ui/src/lib/components/ui/collapsible/collapsible.svelte +20 -0
- package/ui/src/lib/components/ui/collapsible/index.ts +13 -0
- package/ui/src/lib/components/ui/input/index.ts +7 -0
- package/ui/src/lib/components/ui/input/input.svelte +48 -0
- package/ui/src/lib/components/ui/input-otp/index.ts +15 -0
- package/ui/src/lib/components/ui/input-otp/input-otp-group.svelte +20 -0
- package/ui/src/lib/components/ui/input-otp/input-otp-separator.svelte +27 -0
- package/ui/src/lib/components/ui/input-otp/input-otp-slot.svelte +31 -0
- package/ui/src/lib/components/ui/input-otp/input-otp.svelte +23 -0
- package/ui/src/lib/components/ui/item/index.ts +34 -0
- package/ui/src/lib/components/ui/item/item-actions.svelte +20 -0
- package/ui/src/lib/components/ui/item/item-content.svelte +23 -0
- package/ui/src/lib/components/ui/item/item-description.svelte +23 -0
- package/ui/src/lib/components/ui/item/item-footer.svelte +20 -0
- package/ui/src/lib/components/ui/item/item-group.svelte +21 -0
- package/ui/src/lib/components/ui/item/item-header.svelte +20 -0
- package/ui/src/lib/components/ui/item/item-media.svelte +42 -0
- package/ui/src/lib/components/ui/item/item-separator.svelte +19 -0
- package/ui/src/lib/components/ui/item/item-title.svelte +20 -0
- package/ui/src/lib/components/ui/item/item.svelte +61 -0
- package/ui/src/lib/components/ui/kbd/index.ts +10 -0
- package/ui/src/lib/components/ui/kbd/kbd-group.svelte +20 -0
- package/ui/src/lib/components/ui/kbd/kbd.svelte +23 -0
- package/ui/src/lib/components/ui/label/index.ts +7 -0
- package/ui/src/lib/components/ui/label/label.svelte +20 -0
- package/ui/src/lib/components/ui/progress/index.ts +7 -0
- package/ui/src/lib/components/ui/progress/progress.svelte +27 -0
- package/ui/src/lib/components/ui/select/index.ts +37 -0
- package/ui/src/lib/components/ui/select/select-content.svelte +45 -0
- package/ui/src/lib/components/ui/select/select-group-heading.svelte +21 -0
- package/ui/src/lib/components/ui/select/select-group.svelte +17 -0
- package/ui/src/lib/components/ui/select/select-item.svelte +40 -0
- package/ui/src/lib/components/ui/select/select-label.svelte +20 -0
- package/ui/src/lib/components/ui/select/select-portal.svelte +7 -0
- package/ui/src/lib/components/ui/select/select-scroll-down-button.svelte +20 -0
- package/ui/src/lib/components/ui/select/select-scroll-up-button.svelte +20 -0
- package/ui/src/lib/components/ui/select/select-separator.svelte +18 -0
- package/ui/src/lib/components/ui/select/select-trigger.svelte +29 -0
- package/ui/src/lib/components/ui/select/select.svelte +11 -0
- package/ui/src/lib/components/ui/separator/index.ts +7 -0
- package/ui/src/lib/components/ui/separator/separator.svelte +23 -0
- package/ui/src/lib/components/ui/spinner/index.ts +1 -0
- package/ui/src/lib/components/ui/spinner/spinner.svelte +18 -0
- package/ui/src/lib/components/ui/tabs/index.ts +18 -0
- package/ui/src/lib/components/ui/tabs/tabs-content.svelte +17 -0
- package/ui/src/lib/components/ui/tabs/tabs-list.svelte +40 -0
- package/ui/src/lib/components/ui/tabs/tabs-trigger.svelte +23 -0
- package/ui/src/lib/components/ui/tabs/tabs.svelte +19 -0
- package/ui/src/lib/components/ui/textarea/index.ts +7 -0
- package/ui/src/lib/components/ui/textarea/textarea.svelte +22 -0
- package/ui/src/lib/intl/bcp.ts +25 -0
- package/ui/src/lib/intl/built.js +18 -0
- package/ui/src/lib/intl/context.yaml +18 -0
- package/ui/src/lib/intl/en-US.yaml +6 -0
- package/ui/src/lib/intl/index.ts +65 -0
- package/ui/src/lib/intl/types.ts +19 -0
- package/ui/src/lib/tools/ago.ts +10 -0
- package/ui/src/lib/tools/assert.ts +3 -0
- package/ui/src/lib/tools/cap.ts +5 -0
- package/ui/src/lib/tools/clicks.ts +25 -0
- package/ui/src/lib/tools/contextmenu.ts +19 -0
- package/ui/src/lib/tools/convert.ts +32 -0
- package/ui/src/lib/tools/currency.test.ts +10 -0
- package/ui/src/lib/tools/currency.ts +55 -0
- package/ui/src/lib/tools/date.test.ts +21 -0
- package/ui/src/lib/tools/date.ts +35 -0
- package/ui/src/lib/tools/delay.ts +7 -0
- package/ui/src/lib/tools/image.ts +39 -0
- package/ui/src/lib/tools/index.ts +20 -0
- package/ui/src/lib/tools/location.ts +41 -0
- package/ui/src/lib/tools/metronome.ts +11 -0
- package/ui/src/lib/tools/mq.ts +84 -0
- package/ui/src/lib/tools/onsubmit.ts +21 -0
- package/ui/src/lib/tools/random.ts +15 -0
- package/ui/src/lib/tools/search.ts +25 -0
- package/ui/src/lib/tools/timeout.ts +26 -0
- package/ui/src/lib/tools/transition.ts +207 -0
- package/ui/src/lib/tools/types.ts +3 -0
- package/ui/src/lib/tools/uuid.test.ts +28 -0
- package/ui/src/lib/tools/uuid.ts +9 -0
- package/ui/src/lib/typeset.css +502 -0
- package/ui/src/lib/utils.ts +12 -0
- package/ui/src/routes/(private)/+layout.svelte +112 -0
- package/ui/src/routes/(private)/+page.svelte +7 -0
- package/ui/src/routes/(private)/[component]/+page.svelte +77 -0
- package/ui/src/routes/+layout.svelte +25 -0
- package/ui/src/routes/+layout.ts +14 -0
- package/ui/src/routes/layout.css +232 -0
- package/ui/static/robots.txt +3 -0
- package/ui/svelte.config.js +36 -0
- package/ui/tools/feat.js +43 -0
- package/ui/tools/hooks/README.md +13 -0
- package/ui/tools/hooks/guard-intl.sh +40 -0
- package/ui/tools/shad.js +7 -0
- package/ui/tsconfig.json +20 -0
- package/ui/vite.config.ts +8 -0
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
context: Mount 'iam' context
|
|
2
|
+
inputs:
|
|
3
|
+
auth:
|
|
4
|
+
refresh:
|
|
5
|
+
description:
|
|
6
|
+
input: |-
|
|
7
|
+
!js
|
|
8
|
+
(name) => `${name ? name + ", for" : "For"} security reasons, your credentials have expired. Please log in again to continue.`
|
|
9
|
+
context: Preserve html tags where appropriate
|
|
10
|
+
title:
|
|
11
|
+
input: Welcome back
|
|
12
|
+
continue:
|
|
13
|
+
input: Continue
|
|
14
|
+
signout:
|
|
15
|
+
input: Sign out
|
|
16
|
+
login:
|
|
17
|
+
input: Login
|
|
18
|
+
signin:
|
|
19
|
+
input: Sign In
|
|
20
|
+
copyId:
|
|
21
|
+
input: Copy the account id
|
|
22
|
+
context: accessible name of the button that copies the id; the button itself shows only its first characters
|
|
23
|
+
credentials:
|
|
24
|
+
connect:
|
|
25
|
+
input: Connect
|
|
26
|
+
context: Inert CTA button on a provider row
|
|
27
|
+
email:
|
|
28
|
+
title:
|
|
29
|
+
input: Email
|
|
30
|
+
context: Provider name
|
|
31
|
+
description:
|
|
32
|
+
input: Connect your email address
|
|
33
|
+
google:
|
|
34
|
+
title:
|
|
35
|
+
input: Google
|
|
36
|
+
description:
|
|
37
|
+
input: Connect your Google account
|
|
38
|
+
context: Google provider row description
|
|
39
|
+
apple:
|
|
40
|
+
title:
|
|
41
|
+
input: Apple
|
|
42
|
+
description:
|
|
43
|
+
input: Connect your Apple ID
|
|
44
|
+
context: Apple provider row description
|
|
45
|
+
passkeys:
|
|
46
|
+
title:
|
|
47
|
+
input: Passkeys
|
|
48
|
+
context: card title for the passkey manager
|
|
49
|
+
tagline:
|
|
50
|
+
input: Sign in faster with a passkey
|
|
51
|
+
context: shown when the user has no passkeys yet
|
|
52
|
+
create:
|
|
53
|
+
input: Create
|
|
54
|
+
manage:
|
|
55
|
+
input: Manage
|
|
56
|
+
context: CTA to expand the passkey list
|
|
57
|
+
collapse:
|
|
58
|
+
input: Collapse
|
|
59
|
+
context: CTA to close the expanded passkey card
|
|
60
|
+
add:
|
|
61
|
+
input: Enter passkey name
|
|
62
|
+
context: input placeholder for naming a new passkey
|
|
63
|
+
delete:
|
|
64
|
+
input: Hold to delete
|
|
65
|
+
context: press-and-hold label to remove a passkey
|
|
66
|
+
unknown:
|
|
67
|
+
input: Unknown
|
|
68
|
+
context: fallback name for an unrecognized authenticator
|
|
69
|
+
count:
|
|
70
|
+
input: "{n} passkey"
|
|
71
|
+
meta:
|
|
72
|
+
input: "!js (added, used) => `Added ${added} · Used ${used}`"
|
|
73
|
+
duplicate:
|
|
74
|
+
input: This device already has a passkey for your account
|
|
75
|
+
context: error shown under the passkey name field when registration is refused as a duplicate
|
|
76
|
+
failed:
|
|
77
|
+
input: Could not create the passkey. Please try again.
|
|
78
|
+
context: generic error shown under the passkey name field when registration fails
|
|
79
|
+
transfer:
|
|
80
|
+
action:
|
|
81
|
+
input: Sign in on another device
|
|
82
|
+
context: ghost button label that opens a QR dialog to transfer the session to a second device
|
|
83
|
+
title:
|
|
84
|
+
input: Scan to sign in
|
|
85
|
+
context: title of the QR login dialog
|
|
86
|
+
description:
|
|
87
|
+
input: Use your other device to scan this code and sign in.
|
|
88
|
+
context: description under the QR code in the login dialog
|
|
89
|
+
done:
|
|
90
|
+
input: Done
|
|
91
|
+
context: button that closes the QR login dialog
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
auth:
|
|
2
|
+
signupTitle: One-tap sign-up
|
|
3
|
+
passwordTitle: Hop in with password
|
|
4
|
+
passwordDescription: Create an account or sign in
|
|
5
|
+
passkey: Passkeys
|
|
6
|
+
email: Email
|
|
7
|
+
alreadyHaveAccount: Already have an account?
|
|
8
|
+
betterSecurity: Better security
|
|
9
|
+
passkeysNotSupported: Passkeys not supported
|
|
10
|
+
passkeysWarning: Your browser does not respect your privacy and security.
|
|
11
|
+
learnMore: Learn more
|
|
12
|
+
passwordBlank: Leave password blank <nobr>to receive</nobr> <nobr>a one-time</nobr> passcode.
|
|
13
|
+
otpInstructions: Enter the code sent to your email. It expires in 5 minutes.
|
|
14
|
+
continueWith: |
|
|
15
|
+
!js
|
|
16
|
+
(provider) => {
|
|
17
|
+
return `Continue with ${provider}`
|
|
18
|
+
}
|
|
19
|
+
passkeysDescription: Passkeys are safer than passwords, easier to use, and can’t be stolen.
|
|
20
|
+
yourName: Your name
|
|
21
|
+
password: Password
|
|
22
|
+
refresh:
|
|
23
|
+
description: |-
|
|
24
|
+
!js
|
|
25
|
+
(name) => `${name ? name + ", for" : "For"} security reasons, your credentials have expired. Please log in again to continue.`
|
|
26
|
+
title: Welcome back
|
|
27
|
+
continue: Continue
|
|
28
|
+
signout: Sign out
|
|
29
|
+
login: Log In
|
|
30
|
+
signin: Sign In
|
|
31
|
+
copyId: Copy account ID
|
|
32
|
+
credentials:
|
|
33
|
+
connect: Connect
|
|
34
|
+
email:
|
|
35
|
+
title: Email
|
|
36
|
+
description: Connect your email address
|
|
37
|
+
google:
|
|
38
|
+
title: Google
|
|
39
|
+
description: Connect your Google account
|
|
40
|
+
apple:
|
|
41
|
+
title: Apple
|
|
42
|
+
description: Connect your Apple ID
|
|
43
|
+
passkeys:
|
|
44
|
+
title: Passkeys
|
|
45
|
+
tagline: Sign in faster with a passkey
|
|
46
|
+
create: Create
|
|
47
|
+
manage: Manage
|
|
48
|
+
collapse: Collapse
|
|
49
|
+
add: Enter passkey name
|
|
50
|
+
delete: Hold to delete
|
|
51
|
+
unknown: Unknown
|
|
52
|
+
count:
|
|
53
|
+
- one: "{n} passkey"
|
|
54
|
+
other: "{n} passkeys"
|
|
55
|
+
meta: |-
|
|
56
|
+
!js
|
|
57
|
+
(added, used) => `Added ${added} · Used ${used}`
|
|
58
|
+
duplicate: This device already has a passkey for your account
|
|
59
|
+
failed: Could not create the passkey. Please try again.
|
|
60
|
+
transfer:
|
|
61
|
+
action: Sign in on another device
|
|
62
|
+
title: Scan to sign in
|
|
63
|
+
description: Use your other device to scan this code and sign in.
|
|
64
|
+
done: Done
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { derived } from 'svelte/store'
|
|
2
|
+
import { locale } from '$lib/intl'
|
|
3
|
+
import { dictionaries } from './built.js'
|
|
4
|
+
import type { Dictionary } from './types'
|
|
5
|
+
import type { Locale } from '$lib/intl'
|
|
6
|
+
|
|
7
|
+
const dict = derived(locale, ($locale) => dictionaries[$locale])
|
|
8
|
+
|
|
9
|
+
export { dict, dictionaries, locale }
|
|
10
|
+
export type { Locale, Dictionary }
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auto-generated TypeScript definitions for i18n dictionaries
|
|
3
|
+
*
|
|
4
|
+
* @author copilot
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
export type Dictionary = {
|
|
8
|
+
auth: {
|
|
9
|
+
signupTitle: string
|
|
10
|
+
passwordTitle: string
|
|
11
|
+
passwordDescription: string
|
|
12
|
+
passkey: string
|
|
13
|
+
email: string
|
|
14
|
+
alreadyHaveAccount: string
|
|
15
|
+
betterSecurity: string
|
|
16
|
+
passkeysNotSupported: string
|
|
17
|
+
passkeysWarning: string
|
|
18
|
+
learnMore: string
|
|
19
|
+
passwordBlank: string
|
|
20
|
+
otpInstructions: string
|
|
21
|
+
continueWith: (value: any) => string
|
|
22
|
+
passkeysDescription: string
|
|
23
|
+
yourName: string
|
|
24
|
+
password: string
|
|
25
|
+
refresh: {
|
|
26
|
+
description: (value: any) => string
|
|
27
|
+
title: string
|
|
28
|
+
continue: string
|
|
29
|
+
}
|
|
30
|
+
signout: string
|
|
31
|
+
login: string
|
|
32
|
+
signin: string
|
|
33
|
+
copyId: string
|
|
34
|
+
}
|
|
35
|
+
credentials: {
|
|
36
|
+
connect: string
|
|
37
|
+
email: {
|
|
38
|
+
title: string
|
|
39
|
+
description: string
|
|
40
|
+
}
|
|
41
|
+
google: {
|
|
42
|
+
title: string
|
|
43
|
+
description: string
|
|
44
|
+
}
|
|
45
|
+
apple: {
|
|
46
|
+
title: string
|
|
47
|
+
description: string
|
|
48
|
+
}
|
|
49
|
+
passkeys: {
|
|
50
|
+
title: string
|
|
51
|
+
tagline: string
|
|
52
|
+
create: string
|
|
53
|
+
manage: string
|
|
54
|
+
collapse: string
|
|
55
|
+
add: string
|
|
56
|
+
delete: string
|
|
57
|
+
unknown: string
|
|
58
|
+
count: (value: number) => string
|
|
59
|
+
meta: (...args: [any, any]) => string
|
|
60
|
+
duplicate: string
|
|
61
|
+
failed: string
|
|
62
|
+
}
|
|
63
|
+
transfer: {
|
|
64
|
+
action: string
|
|
65
|
+
title: string
|
|
66
|
+
description: string
|
|
67
|
+
done: string
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { oidc } from '@/iam'
|
|
3
|
+
import Button from './Button.svelte'
|
|
4
|
+
import type { Props } from './Authentication'
|
|
5
|
+
|
|
6
|
+
const { account }: Props = $props()
|
|
7
|
+
</script>
|
|
8
|
+
|
|
9
|
+
<div class="flex gap-2">
|
|
10
|
+
{#if oidc.providers.google.client}
|
|
11
|
+
<Button idp="google" {account} />
|
|
12
|
+
{/if}
|
|
13
|
+
{#if oidc.providers.apple.client}
|
|
14
|
+
<Button idp="apple" {account} />
|
|
15
|
+
{/if}
|
|
16
|
+
</div>
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { oidc } from '@/iam'
|
|
3
|
+
import { Spinner } from '$ui/spinner'
|
|
4
|
+
import { Button } from '$ui/button'
|
|
5
|
+
import { cn } from '$lib/utils'
|
|
6
|
+
import { icons } from './icons'
|
|
7
|
+
import type { Props } from './Button'
|
|
8
|
+
|
|
9
|
+
const { idp, children, account, class: classes }: Props = $props()
|
|
10
|
+
|
|
11
|
+
const Icon = $derived(icons[idp])
|
|
12
|
+
|
|
13
|
+
async function onclick(event: MouseEvent) {
|
|
14
|
+
const button = event.currentTarget as HTMLButtonElement
|
|
15
|
+
|
|
16
|
+
button.disabled = true
|
|
17
|
+
|
|
18
|
+
await oidc.authenticate(idp, account?.id)
|
|
19
|
+
|
|
20
|
+
button.disabled = false
|
|
21
|
+
}
|
|
22
|
+
</script>
|
|
23
|
+
|
|
24
|
+
<Button
|
|
25
|
+
variant="outline"
|
|
26
|
+
size={children ? 'default' : 'icon'}
|
|
27
|
+
{onclick}
|
|
28
|
+
class={cn(
|
|
29
|
+
'disabled:[&_.x-icon]:hidden [&_.x-spinner]:hidden disabled:[&_.x-spinner]:block',
|
|
30
|
+
classes,
|
|
31
|
+
)}
|
|
32
|
+
>
|
|
33
|
+
<Icon class="x-icon" />
|
|
34
|
+
<Spinner class="x-spinner" />
|
|
35
|
+
{@render children?.()}
|
|
36
|
+
</Button>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ClassValue } from 'svelte/elements'
|
|
2
|
+
import type { Snippet } from 'svelte'
|
|
3
|
+
import type { oidc } from '@/iam'
|
|
4
|
+
import type { AccountLike } from '../AccountLike'
|
|
5
|
+
|
|
6
|
+
export interface Props {
|
|
7
|
+
idp: oidc.IDP
|
|
8
|
+
children?: Snippet
|
|
9
|
+
account?: AccountLike
|
|
10
|
+
class?: ClassValue
|
|
11
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { dict } from '@/iam/ui/intl'
|
|
3
|
+
import Button from './Button.svelte'
|
|
4
|
+
import type { oidc } from '@/iam'
|
|
5
|
+
|
|
6
|
+
const { idp }: { idp: oidc.IDP } = $props()
|
|
7
|
+
|
|
8
|
+
const names: Record<oidc.IDP, string> = {
|
|
9
|
+
google: 'Google',
|
|
10
|
+
apple: 'Apple',
|
|
11
|
+
}
|
|
12
|
+
</script>
|
|
13
|
+
|
|
14
|
+
<Button {idp} class="w-full">
|
|
15
|
+
{$dict.auth.continueWith(names[idp])}
|
|
16
|
+
</Button>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { cn } from '$lib/utils'
|
|
3
|
+
import type { ClassValue } from 'svelte/elements'
|
|
4
|
+
|
|
5
|
+
const { fill, class: classes }: { fill?: string; class?: ClassValue } = $props()
|
|
6
|
+
</script>
|
|
7
|
+
|
|
8
|
+
<svg
|
|
9
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
10
|
+
xml:space="preserve"
|
|
11
|
+
fill="currentColor"
|
|
12
|
+
viewBox="0 0 814 1000"
|
|
13
|
+
class={cn('size-5 -mt-[3px]', classes)}
|
|
14
|
+
>
|
|
15
|
+
<path
|
|
16
|
+
{fill}
|
|
17
|
+
d="M788.1 340.9c-5.8 4.5-108.2 62.2-108.2 190.5 0 148.4 130.3 200.9 134.2 202.2-.6 3.2-20.7 71.9-68.7 141.9-42.8 61.6-87.5 123.1-155.5 123.1s-85.5-39.5-164-39.5c-76.5 0-103.7 40.8-165.9 40.8s-105.6-57-155.5-127C46.7 790.7 0 663 0 541.8c0-194.4 126.4-297.5 250.8-297.5 66.1 0 121.2 43.4 162.7 43.4 39.5 0 101.1-46 176.3-46 28.5 0 130.9 2.6 198.3 99.2zm-234-181.5c31.1-36.9 53.1-88.1 53.1-139.3 0-7.1-.6-14.3-1.9-20.1-50.6 1.9-110.8 33.7-147.1 75.8-28.5 32.4-55.1 83.6-55.1 135.5 0 7.8 1.3 15.6 1.9 18.1 3.2.6 8.4 1.3 13.6 1.3 45.4 0 102.5-30.4 135.5-71.3z"
|
|
18
|
+
/>
|
|
19
|
+
</svg>
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import type { ClassValue } from 'svelte/elements'
|
|
3
|
+
|
|
4
|
+
const { class: classes }: { class?: ClassValue } = $props()
|
|
5
|
+
</script>
|
|
6
|
+
|
|
7
|
+
<svg
|
|
8
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
9
|
+
width="20"
|
|
10
|
+
height="20"
|
|
11
|
+
viewBox="0 0 20 20"
|
|
12
|
+
fill="none"
|
|
13
|
+
class={classes}
|
|
14
|
+
>
|
|
15
|
+
<path
|
|
16
|
+
d="M19.84 10.2273C19.84 9.5182 19.7764 8.8364 19.6582 8.1818H10.24V12.05H15.6218C15.39 13.3 14.6855 14.3591 13.6264 15.0682V17.5773H16.8582C18.7491 15.8364 19.84 13.2727 19.84 10.2273Z"
|
|
17
|
+
fill="#4285F4"
|
|
18
|
+
/>
|
|
19
|
+
<path
|
|
20
|
+
d="M10.24 20C12.94 20 15.2036 19.1045 16.8581 17.5773L13.6263 15.0682C12.7309 15.6682 11.5854 16.0227 10.24 16.0227C7.6354 16.0227 5.4309 14.2636 4.6445 11.9H1.3036V14.4909C2.9491 17.7591 6.3309 20 10.24 20Z"
|
|
21
|
+
fill="#34A853"
|
|
22
|
+
/>
|
|
23
|
+
<path
|
|
24
|
+
d="M4.6445 11.9C4.4445 11.3 4.3309 10.6591 4.3309 10C4.3309 9.3409 4.4445 8.7 4.6445 8.1V5.5091H1.3036C0.6264 6.8591 0.24 8.3864 0.24 10C0.24 11.6136 0.6264 13.1409 1.3036 14.4909L4.6445 11.9Z"
|
|
25
|
+
fill="#FBBC04"
|
|
26
|
+
/>
|
|
27
|
+
<path
|
|
28
|
+
d="M10.24 3.9773C11.7081 3.9773 13.0263 4.4818 14.0627 5.4727L16.9309 2.6045C15.1991 0.9909 12.9354 0 10.24 0C6.3309 0 2.9491 2.2409 1.3036 5.5091L4.6445 8.1C5.4309 5.7364 7.6354 3.9773 10.24 3.9773Z"
|
|
29
|
+
fill="#E94235"
|
|
30
|
+
/>
|
|
31
|
+
</svg>
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import Google from './Google.svelte'
|
|
2
|
+
import Apple from './Apple.svelte'
|
|
3
|
+
import type { Component } from 'svelte'
|
|
4
|
+
import type { oidc } from '@/iam'
|
|
5
|
+
|
|
6
|
+
const icons: Record<oidc.IDP, Component> = {
|
|
7
|
+
google: Google,
|
|
8
|
+
apple: Apple,
|
|
9
|
+
} as const
|
|
10
|
+
|
|
11
|
+
export { icons }
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { ShieldCheck, ShieldOff } from '@lucide/svelte'
|
|
3
|
+
import { supported } from '@/passkeys'
|
|
4
|
+
import { dict } from '@/iam/ui/intl'
|
|
5
|
+
import * as Card from '$ui/card'
|
|
6
|
+
import * as Alert from '$ui/alert'
|
|
7
|
+
import { cn } from '$lib/utils'
|
|
8
|
+
import { apple } from '$lib/tools'
|
|
9
|
+
import Login from './Login.svelte'
|
|
10
|
+
import Create from './Create.svelte'
|
|
11
|
+
import type { Props } from './Authentication'
|
|
12
|
+
|
|
13
|
+
const { class: classes, account, oncreate }: Props = $props()
|
|
14
|
+
|
|
15
|
+
const href = apple
|
|
16
|
+
? 'https://support.apple.com/en-us/102195'
|
|
17
|
+
: 'https://support.google.com/accounts/answer/13548313'
|
|
18
|
+
</script>
|
|
19
|
+
|
|
20
|
+
{#snippet description()}
|
|
21
|
+
<p>
|
|
22
|
+
{$dict.auth.passkeysDescription}
|
|
23
|
+
<a {href} target="_blank" class="text-nowrap">
|
|
24
|
+
{$dict.auth.learnMore}
|
|
25
|
+
</a>
|
|
26
|
+
</p>
|
|
27
|
+
{/snippet}
|
|
28
|
+
|
|
29
|
+
<div class="space-y-4">
|
|
30
|
+
<Card.Root class={cn('gap-4 bg-background/75', supported && 'pt-4', classes)}>
|
|
31
|
+
{#if supported}
|
|
32
|
+
<Card.Header class="gap-0">
|
|
33
|
+
<Card.Title><h2>{$dict.auth.signupTitle}</h2></Card.Title>
|
|
34
|
+
</Card.Header>
|
|
35
|
+
<Card.Content>
|
|
36
|
+
<Create {account} {oncreate} />
|
|
37
|
+
</Card.Content>
|
|
38
|
+
{/if}
|
|
39
|
+
<Card.Footer>
|
|
40
|
+
{#if supported}
|
|
41
|
+
<Alert.Root>
|
|
42
|
+
<ShieldCheck color="green" />
|
|
43
|
+
<Alert.Title>{$dict.auth.betterSecurity}</Alert.Title>
|
|
44
|
+
<Alert.Description>
|
|
45
|
+
{@render description()}
|
|
46
|
+
</Alert.Description>
|
|
47
|
+
</Alert.Root>
|
|
48
|
+
{:else}
|
|
49
|
+
<Alert.Root>
|
|
50
|
+
<ShieldOff color="red" class="animate-pulse" />
|
|
51
|
+
<Alert.Title>{$dict.auth.passkeysNotSupported}</Alert.Title>
|
|
52
|
+
<Alert.Description>
|
|
53
|
+
<p>{$dict.auth.passkeysWarning}</p>
|
|
54
|
+
{@render description()}
|
|
55
|
+
</Alert.Description>
|
|
56
|
+
</Alert.Root>
|
|
57
|
+
{/if}
|
|
58
|
+
</Card.Footer>
|
|
59
|
+
</Card.Root>
|
|
60
|
+
|
|
61
|
+
{#if supported && !account}
|
|
62
|
+
<Login />
|
|
63
|
+
{/if}
|
|
64
|
+
</div>
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { ArrowRight } from '@lucide/svelte'
|
|
3
|
+
import { dict } from '@/iam/ui/intl'
|
|
4
|
+
import { passkeys } from '@/iam'
|
|
5
|
+
import { Spinner } from '$ui/spinner'
|
|
6
|
+
import { Input } from '$ui/input'
|
|
7
|
+
import { Button } from '$ui/button'
|
|
8
|
+
import { autofocus, onsubmit } from '$lib/tools'
|
|
9
|
+
import type { Props } from './Create'
|
|
10
|
+
|
|
11
|
+
const { account, disabled, oncreate }: Props = $props()
|
|
12
|
+
|
|
13
|
+
let value = $derived(account?.name ?? '')
|
|
14
|
+
let busy = $state(false)
|
|
15
|
+
|
|
16
|
+
async function submit() {
|
|
17
|
+
const name = value.trim()
|
|
18
|
+
|
|
19
|
+
if (name.length === 0) return
|
|
20
|
+
|
|
21
|
+
busy = true
|
|
22
|
+
|
|
23
|
+
const echo = await passkeys.create(name, account?.id)
|
|
24
|
+
|
|
25
|
+
busy = false
|
|
26
|
+
|
|
27
|
+
if (echo instanceof Error) return
|
|
28
|
+
|
|
29
|
+
oncreate?.(echo)
|
|
30
|
+
}
|
|
31
|
+
</script>
|
|
32
|
+
|
|
33
|
+
<form onsubmit={onsubmit(submit)}>
|
|
34
|
+
<fieldset class="space-y-1" {disabled}>
|
|
35
|
+
<div class="flex items-center gap-2">
|
|
36
|
+
<Input
|
|
37
|
+
bind:value
|
|
38
|
+
id="name"
|
|
39
|
+
type="text"
|
|
40
|
+
placeholder={$dict.auth.yourName}
|
|
41
|
+
autocomplete="given-name"
|
|
42
|
+
required
|
|
43
|
+
{autofocus} />
|
|
44
|
+
<Button id="iam-passkey-create-button" size="icon-lg" type="submit">
|
|
45
|
+
{#if busy}
|
|
46
|
+
<Spinner />
|
|
47
|
+
{:else}
|
|
48
|
+
<ArrowRight />
|
|
49
|
+
{/if}
|
|
50
|
+
</Button>
|
|
51
|
+
</div>
|
|
52
|
+
</fieldset>
|
|
53
|
+
</form>
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { Fingerprint } from '@lucide/svelte'
|
|
3
|
+
import { dict } from '@/iam/ui/intl'
|
|
4
|
+
import { passkeys } from '@/iam'
|
|
5
|
+
import { Spinner } from '$ui/spinner'
|
|
6
|
+
import { Button } from '$ui/button'
|
|
7
|
+
|
|
8
|
+
let busy = $state(false)
|
|
9
|
+
|
|
10
|
+
async function login() {
|
|
11
|
+
busy = true
|
|
12
|
+
|
|
13
|
+
await passkeys.login()
|
|
14
|
+
|
|
15
|
+
busy = false
|
|
16
|
+
}
|
|
17
|
+
</script>
|
|
18
|
+
|
|
19
|
+
<div class="flex flex-col items-center justify-center gap-2">
|
|
20
|
+
<p>{$dict.auth.alreadyHaveAccount}</p>
|
|
21
|
+
<Button id="iam-passkey-login-button" variant="secondary" onclick={login}>
|
|
22
|
+
{#if busy}
|
|
23
|
+
<Spinner />
|
|
24
|
+
{:else}
|
|
25
|
+
<Fingerprint />
|
|
26
|
+
{/if}
|
|
27
|
+
{$dict.auth.signin}
|
|
28
|
+
</Button>
|
|
29
|
+
</div>
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { Fingerprint } from '@lucide/svelte'
|
|
3
|
+
import { dict } from '@/iam/ui/intl'
|
|
4
|
+
import { passkeys } from '@/iam'
|
|
5
|
+
import { Spinner } from '$ui/spinner'
|
|
6
|
+
import { Button } from '$ui/button'
|
|
7
|
+
import type { AccountLike } from '../AccountLike'
|
|
8
|
+
|
|
9
|
+
const { account }: { account: AccountLike } = $props()
|
|
10
|
+
|
|
11
|
+
async function onclick(e: MouseEvent) {
|
|
12
|
+
const button = e.currentTarget as HTMLButtonElement
|
|
13
|
+
|
|
14
|
+
button.disabled = true
|
|
15
|
+
|
|
16
|
+
await passkeys.login(account.id)
|
|
17
|
+
|
|
18
|
+
button.disabled = false
|
|
19
|
+
}
|
|
20
|
+
</script>
|
|
21
|
+
|
|
22
|
+
<Button
|
|
23
|
+
class="w-full disabled:[&>.x-icon]:hidden [&>.x-spinner]:hidden disabled:[&>.x-spinner]:block"
|
|
24
|
+
{onclick}
|
|
25
|
+
>
|
|
26
|
+
<Fingerprint class="size-5 x-icon" />
|
|
27
|
+
<Spinner class="x-spinner" />
|
|
28
|
+
{$dict.auth.refresh.continue}
|
|
29
|
+
</Button>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
<script lang="ts">
|
|
2
|
+
import { dict } from '@/iam/ui/intl'
|
|
3
|
+
import * as Card from '$ui/card'
|
|
4
|
+
import { cn } from '$lib/utils'
|
|
5
|
+
import Form from './Form.svelte'
|
|
6
|
+
import type { Props } from './Authentication'
|
|
7
|
+
|
|
8
|
+
const { class: classes, account, oncreate }: Props = $props()
|
|
9
|
+
</script>
|
|
10
|
+
|
|
11
|
+
<Card.Root class={cn('pt-4 gap-4 bg-background/75', classes)}>
|
|
12
|
+
<Card.Header class="gap-0">
|
|
13
|
+
<Card.Title><h2>{$dict.auth.passwordTitle}</h2></Card.Title>
|
|
14
|
+
<Card.Description>{$dict.auth.passwordDescription}</Card.Description>
|
|
15
|
+
</Card.Header>
|
|
16
|
+
<Card.Content>
|
|
17
|
+
<Form {account} {oncreate} />
|
|
18
|
+
</Card.Content>
|
|
19
|
+
</Card.Root>
|