@toa.io/extensions.configuration 1.0.0-alpha.274 → 1.0.0-alpha.276
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 +29 -0
- package/components/configuration.values/operations/create.d.ts +16 -0
- package/components/configuration.values/operations/create.js +58 -0
- package/components/configuration.values/operations/create.js.map +1 -0
- package/components/configuration.values/operations/fetch.d.ts +11 -0
- package/components/configuration.values/operations/fetch.js +17 -0
- package/components/configuration.values/operations/fetch.js.map +1 -0
- package/components/configuration.values/operations/get.d.ts +17 -0
- package/components/configuration.values/operations/get.js +23 -0
- package/components/configuration.values/operations/get.js.map +1 -0
- package/components/configuration.values/operations/lib/map.d.ts +11 -0
- package/components/configuration.values/operations/lib/map.js +26 -0
- package/components/configuration.values/operations/lib/map.js.map +1 -0
- package/components/configuration.values/operations/lib/map.test.d.ts +1 -0
- package/components/configuration.values/operations/lib/map.test.js +26 -0
- package/components/configuration.values/operations/lib/map.test.js.map +1 -0
- package/components/configuration.values/operations/lib/resolve.d.ts +27 -0
- package/components/configuration.values/operations/lib/resolve.js +28 -0
- package/components/configuration.values/operations/lib/resolve.js.map +1 -0
- package/components/configuration.values/operations/list.d.ts +10 -0
- package/components/configuration.values/operations/list.js +15 -0
- package/components/configuration.values/operations/list.js.map +1 -0
- package/components/configuration.values/operations/tsconfig.tsbuildinfo +1 -0
- package/features/site/favicon.ico +0 -0
- package/features/ui.feature +8 -0
- package/package.json +2 -2
- package/source/Aspect.ts +7 -2
- package/source/UI.ts +16 -1
- package/source/deployment.ts +1 -1
- package/transpiled/Aspect.js +3 -2
- package/transpiled/Aspect.js.map +1 -1
- package/transpiled/UI.js +14 -1
- package/transpiled/UI.js.map +1 -1
- package/transpiled/deployment.d.ts +1 -1
- package/transpiled/tsconfig.tsbuildinfo +1 -1
- package/ui/dist/_app/env.js +1 -0
- package/ui/dist/_app/immutable/assets/0.CNS8Cqhc.css +2 -0
- package/ui/dist/_app/immutable/assets/inter-cyrillic-ext-wght-normal.BOeWTOD4.woff2 +0 -0
- package/ui/dist/_app/immutable/assets/inter-cyrillic-wght-normal.DqGufNeO.woff2 +0 -0
- package/ui/dist/_app/immutable/assets/inter-greek-ext-wght-normal.DlzME5K_.woff2 +0 -0
- package/ui/dist/_app/immutable/assets/inter-greek-wght-normal.CkhJZR-_.woff2 +0 -0
- package/ui/dist/_app/immutable/assets/inter-latin-ext-wght-normal.DO1Apj_S.woff2 +0 -0
- package/ui/dist/_app/immutable/assets/inter-latin-wght-normal.Dx4kXJAl.woff2 +0 -0
- package/ui/dist/_app/immutable/assets/inter-vietnamese-wght-normal.CBcvBZtf.woff2 +0 -0
- package/ui/dist/_app/immutable/assets/ui.BghF56l_.css +1 -0
- package/ui/dist/_app/immutable/chunks/Bjy-W4x2.js +81 -0
- package/ui/dist/_app/immutable/chunks/CDKtbN4n.js +6 -0
- package/ui/dist/_app/immutable/chunks/CcD_ISxM.js +3 -0
- package/ui/dist/_app/immutable/chunks/Chb3af1a.js +1 -0
- package/ui/dist/_app/immutable/chunks/Cov6-56A.js +50 -0
- package/ui/dist/_app/immutable/chunks/E7oj41Za.js +1 -0
- package/ui/dist/_app/immutable/chunks/MOpxGoVO.js +8 -0
- package/ui/dist/_app/immutable/chunks/xihTtKlq.js +1 -0
- package/ui/dist/_app/immutable/entry/app.B9v2AwU_.js +2 -0
- package/ui/dist/_app/immutable/entry/start.B97KALv1.js +1 -0
- package/ui/dist/_app/immutable/nodes/0.DKSa6mGa.js +1 -0
- package/ui/dist/_app/immutable/nodes/1.Cnu_jAWf.js +1 -0
- package/ui/dist/_app/immutable/nodes/2.Dg1zeC2b.js +1 -0
- package/ui/dist/_app/immutable/nodes/3.QCbZIibO.js +1 -0
- package/ui/dist/_app/immutable/nodes/4.1bG6DC_9.js +1 -0
- package/ui/dist/_app/version.json +1 -0
- package/ui/dist/apple-touch-icon.png +0 -0
- package/ui/dist/favicon-96x96.png +0 -0
- package/ui/dist/favicon.ico +0 -0
- package/ui/dist/index.html +52 -0
- package/ui/.agents/skills/antcn/SKILL.md +0 -91
- package/ui/.agents/skills/antcn/references/analytics.md +0 -78
- package/ui/.agents/skills/antcn/references/bridge.md +0 -41
- package/ui/.agents/skills/antcn/references/clipboard.md +0 -23
- package/ui/.agents/skills/antcn/references/dismissable.md +0 -75
- package/ui/.agents/skills/antcn/references/dropdown.md +0 -153
- package/ui/.agents/skills/antcn/references/fragments.md +0 -29
- package/ui/.agents/skills/antcn/references/fullscreen.md +0 -157
- package/ui/.agents/skills/antcn/references/geo.md +0 -27
- package/ui/.agents/skills/antcn/references/globals.md +0 -31
- package/ui/.agents/skills/antcn/references/grammatical-form.md +0 -69
- package/ui/.agents/skills/antcn/references/hints.md +0 -44
- package/ui/.agents/skills/antcn/references/hold.md +0 -34
- package/ui/.agents/skills/antcn/references/iam.md +0 -117
- package/ui/.agents/skills/antcn/references/input-form.md +0 -34
- package/ui/.agents/skills/antcn/references/locale.md +0 -66
- package/ui/.agents/skills/antcn/references/net.md +0 -33
- package/ui/.agents/skills/antcn/references/panel.md +0 -44
- package/ui/.agents/skills/antcn/references/passkeys.md +0 -27
- package/ui/.agents/skills/antcn/references/payments.md +0 -99
- package/ui/.agents/skills/antcn/references/realtime.md +0 -69
- package/ui/.agents/skills/antcn/references/scrollable.md +0 -39
- package/ui/.agents/skills/antcn/references/selector.md +0 -71
- package/ui/.agents/skills/antcn/references/shake.md +0 -36
- package/ui/.agents/skills/antcn/references/share.md +0 -28
- package/ui/.agents/skills/antcn/references/shell.md +0 -139
- package/ui/.agents/skills/antcn/references/stack.md +0 -53
- package/ui/.agents/skills/antcn/references/system.md +0 -149
- package/ui/.agents/skills/antcn/references/taptap.md +0 -28
- package/ui/.agents/skills/antcn/references/tools.md +0 -68
- package/ui/.agents/skills/antcn/references/transmission.md +0 -96
- package/ui/.agents/skills/shadcn-svelte/SKILL.md +0 -227
- package/ui/.agents/skills/shadcn-svelte/agents/openai.yml +0 -5
- 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 +0 -166
- package/ui/.agents/skills/shadcn-svelte/customization.md +0 -213
- package/ui/.agents/skills/shadcn-svelte/evals/evals.json +0 -47
- package/ui/.agents/skills/shadcn-svelte/rules/composition.md +0 -244
- package/ui/.agents/skills/shadcn-svelte/rules/forms.md +0 -234
- package/ui/.agents/skills/shadcn-svelte/rules/icons.md +0 -107
- package/ui/.agents/skills/shadcn-svelte/rules/styling.md +0 -195
- package/ui/.agents/skills/svas/SKILL.md +0 -169
- package/ui/.agents/skills/svas/references/patterns.md +0 -95
- package/ui/.agents/skills/svintl/SKILL.md +0 -176
- package/ui/.claude/settings.json +0 -15
- package/ui/.codex/hooks.json +0 -15
- package/ui/.cursor/hooks.json +0 -11
- package/ui/.env.example +0 -1
- package/ui/.prettierrc +0 -9
- package/ui/.vscode/extensions.json +0 -7
- package/ui/.vscode/settings.json +0 -27
- package/ui/AGENTS.md +0 -51
- package/ui/architecture.md +0 -390
- package/ui/components.json +0 -20
- package/ui/eslint.config.js +0 -152
- package/ui/features/base.ts +0 -2
- package/ui/features/boot.feature +0 -5
- package/ui/features/steps/authentication.ts +0 -34
- package/ui/features/steps/navigaton.ts +0 -37
- package/ui/features/steps/typing.ts +0 -24
- package/ui/package-lock.json +0 -8173
- package/ui/package.json +0 -76
- package/ui/playwright.config.ts +0 -13
- package/ui/skills-lock.json +0 -30
- package/ui/src/@/configuration/index.ts +0 -1
- package/ui/src/@/configuration/svc/create.ts +0 -29
- package/ui/src/@/configuration/svc/index.ts +0 -3
- package/ui/src/@/configuration/svc/net/Configuration.ts +0 -18
- package/ui/src/@/configuration/svc/net/index.ts +0 -2
- package/ui/src/@/configuration/svc/net/interface.ts +0 -35
- package/ui/src/@/configuration/svc/store.ts +0 -14
- package/ui/src/@/configuration/ui/Configurations.svelte +0 -85
- package/ui/src/@/configuration/ui/Configurations.ts +0 -5
- package/ui/src/@/configuration/ui/Create.svelte +0 -64
- package/ui/src/@/configuration/ui/Create.ts +0 -7
- package/ui/src/@/configuration/ui/Form.svelte +0 -75
- package/ui/src/@/configuration/ui/Form.ts +0 -79
- package/ui/src/@/configuration/ui/Row.svelte +0 -44
- package/ui/src/@/configuration/ui/Row.ts +0 -9
- package/ui/src/@/configuration/ui/Value.svelte +0 -33
- package/ui/src/@/configuration/ui/Value.ts +0 -6
- package/ui/src/@/configuration/ui/index.ts +0 -9
- package/ui/src/@/configuration/ui/intl/built.js +0 -38
- package/ui/src/@/configuration/ui/intl/context.yaml +0 -51
- package/ui/src/@/configuration/ui/intl/en-US.yaml +0 -21
- package/ui/src/@/configuration/ui/intl/index.ts +0 -9
- package/ui/src/@/configuration/ui/intl/types.ts +0 -31
- package/ui/src/@/configuration/ui/read.test.ts +0 -75
- package/ui/src/@/configuration/ui/read.ts +0 -102
- package/ui/src/@/configuration/ui/ui.test.ts +0 -69
- package/ui/src/@/configuration/ui/ui.ts +0 -115
- package/ui/src/@/iam/index.ts +0 -1
- package/ui/src/@/iam/rc.ts +0 -22
- package/ui/src/@/iam/svc/authenticated.ts +0 -17
- package/ui/src/@/iam/svc/basic.ts +0 -23
- package/ui/src/@/iam/svc/index.ts +0 -10
- package/ui/src/@/iam/svc/logout.ts +0 -5
- package/ui/src/@/iam/svc/named.ts +0 -16
- package/ui/src/@/iam/svc/net/Echo.ts +0 -9
- package/ui/src/@/iam/svc/net/basic/index.ts +0 -1
- package/ui/src/@/iam/svc/net/basic/interface.ts +0 -15
- package/ui/src/@/iam/svc/net/federation/index.ts +0 -1
- package/ui/src/@/iam/svc/net/federation/interface.ts +0 -12
- package/ui/src/@/iam/svc/net/index.ts +0 -6
- package/ui/src/@/iam/svc/net/interface.ts +0 -17
- package/ui/src/@/iam/svc/net/otp/index.ts +0 -1
- package/ui/src/@/iam/svc/net/otp/interface.ts +0 -14
- package/ui/src/@/iam/svc/net/passkeys/index.ts +0 -1
- package/ui/src/@/iam/svc/net/passkeys/interface.ts +0 -12
- package/ui/src/@/iam/svc/oidc/apple.ts +0 -47
- package/ui/src/@/iam/svc/oidc/authenticate.ts +0 -62
- package/ui/src/@/iam/svc/oidc/google.ts +0 -45
- package/ui/src/@/iam/svc/oidc/hello.ts +0 -82
- package/ui/src/@/iam/svc/oidc/index.ts +0 -3
- package/ui/src/@/iam/svc/oidc/nonce.ts +0 -5
- package/ui/src/@/iam/svc/oidc/providers.ts +0 -28
- package/ui/src/@/iam/svc/oidc/standard.ts +0 -28
- package/ui/src/@/iam/svc/otp.ts +0 -18
- package/ui/src/@/iam/svc/passkeys/create.ts +0 -20
- package/ui/src/@/iam/svc/passkeys/index.ts +0 -2
- package/ui/src/@/iam/svc/passkeys/login.ts +0 -21
- package/ui/src/@/iam/svc/store.ts +0 -36
- package/ui/src/@/iam/svc/sync.ts +0 -18
- package/ui/src/@/iam/svc/transfer.ts +0 -11
- package/ui/src/@/iam/svc/update.ts +0 -8
- package/ui/src/@/iam/ui/AccountLike.ts +0 -4
- package/ui/src/@/iam/ui/Authenticated.svelte +0 -37
- package/ui/src/@/iam/ui/Authenticated.ts +0 -10
- package/ui/src/@/iam/ui/Authentication.svelte +0 -50
- package/ui/src/@/iam/ui/Authentication.ts +0 -9
- package/ui/src/@/iam/ui/Authorized.svelte +0 -32
- package/ui/src/@/iam/ui/Authorized.ts +0 -65
- package/ui/src/@/iam/ui/Card.svelte +0 -14
- package/ui/src/@/iam/ui/Card.ts +0 -7
- package/ui/src/@/iam/ui/Refresh.svelte +0 -39
- package/ui/src/@/iam/ui/credentials/Credentials.svelte +0 -26
- package/ui/src/@/iam/ui/credentials/Credentials.ts +0 -5
- package/ui/src/@/iam/ui/credentials/Provider.svelte +0 -24
- package/ui/src/@/iam/ui/credentials/Provider.ts +0 -5
- package/ui/src/@/iam/ui/credentials/index.ts +0 -1
- package/ui/src/@/iam/ui/credentials/passkeys/Key.svelte +0 -42
- package/ui/src/@/iam/ui/credentials/passkeys/Key.ts +0 -29
- package/ui/src/@/iam/ui/credentials/passkeys/Manager.svelte +0 -83
- package/ui/src/@/iam/ui/credentials/passkeys/Manager.ts +0 -5
- package/ui/src/@/iam/ui/credentials/passkeys/Passkeys.svelte +0 -39
- package/ui/src/@/iam/ui/credentials/passkeys/Summary.svelte +0 -27
- package/ui/src/@/iam/ui/credentials/passkeys/Summary.ts +0 -5
- package/ui/src/@/iam/ui/credentials/passkeys/index.ts +0 -1
- package/ui/src/@/iam/ui/credentials/providers.ts +0 -15
- package/ui/src/@/iam/ui/credentials/transfer/Qr.svelte +0 -24
- package/ui/src/@/iam/ui/credentials/transfer/Qr.ts +0 -3
- package/ui/src/@/iam/ui/credentials/transfer/Transfer.svelte +0 -48
- package/ui/src/@/iam/ui/credentials/transfer/Transfer.ts +0 -5
- package/ui/src/@/iam/ui/credentials/transfer/index.ts +0 -1
- package/ui/src/@/iam/ui/index.ts +0 -3
- package/ui/src/@/iam/ui/intl/built.js +0 -79
- package/ui/src/@/iam/ui/intl/context.yaml +0 -91
- package/ui/src/@/iam/ui/intl/en-US.yaml +0 -64
- package/ui/src/@/iam/ui/intl/index.ts +0 -10
- package/ui/src/@/iam/ui/intl/types.ts +0 -70
- package/ui/src/@/iam/ui/oidc/Authentication.svelte +0 -16
- package/ui/src/@/iam/ui/oidc/Authentication.ts +0 -5
- package/ui/src/@/iam/ui/oidc/Button.svelte +0 -36
- package/ui/src/@/iam/ui/oidc/Button.ts +0 -11
- package/ui/src/@/iam/ui/oidc/Refresh.svelte +0 -16
- package/ui/src/@/iam/ui/oidc/icons/Apple.svelte +0 -19
- package/ui/src/@/iam/ui/oidc/icons/Google.svelte +0 -31
- package/ui/src/@/iam/ui/oidc/icons/index.ts +0 -11
- package/ui/src/@/iam/ui/oidc/index.ts +0 -2
- package/ui/src/@/iam/ui/passkey/Authentication.svelte +0 -64
- package/ui/src/@/iam/ui/passkey/Authentication.ts +0 -8
- package/ui/src/@/iam/ui/passkey/Create.svelte +0 -53
- package/ui/src/@/iam/ui/passkey/Create.ts +0 -7
- package/ui/src/@/iam/ui/passkey/Login.svelte +0 -29
- package/ui/src/@/iam/ui/passkey/Refresh.svelte +0 -29
- package/ui/src/@/iam/ui/passkey/index.ts +0 -2
- package/ui/src/@/iam/ui/password/Authentication.svelte +0 -19
- package/ui/src/@/iam/ui/password/Authentication.ts +0 -8
- package/ui/src/@/iam/ui/password/Form.svelte +0 -151
- package/ui/src/@/iam/ui/password/Form.ts +0 -6
- package/ui/src/@/iam/ui/password/Password.svelte +0 -39
- package/ui/src/@/iam/ui/password/Password.ts +0 -6
- package/ui/src/@/iam/ui/password/Refresh.svelte +0 -5
- package/ui/src/@/iam/ui/password/index.ts +0 -2
- package/ui/src/@/net/index.ts +0 -1
- package/ui/src/@/net/svc/index.ts +0 -3
- package/ui/src/@/net/svc/origin.ts +0 -8
- package/ui/src/@/net/svc/query.test.ts +0 -45
- package/ui/src/@/net/svc/query.ts +0 -25
- package/ui/src/@/passkeys/index.ts +0 -1
- package/ui/src/@/passkeys/svc/add.ts +0 -15
- package/ui/src/@/passkeys/svc/create.ts +0 -58
- package/ui/src/@/passkeys/svc/credentials/convert.ts +0 -32
- package/ui/src/@/passkeys/svc/credentials/create.ts +0 -34
- package/ui/src/@/passkeys/svc/credentials/get.ts +0 -14
- package/ui/src/@/passkeys/svc/credentials/index.ts +0 -3
- package/ui/src/@/passkeys/svc/credentials/key.ts +0 -10
- package/ui/src/@/passkeys/svc/get.ts +0 -10
- package/ui/src/@/passkeys/svc/index.ts +0 -6
- package/ui/src/@/passkeys/svc/net/CreationResponse.ts +0 -15
- package/ui/src/@/passkeys/svc/net/Passkey.ts +0 -8
- package/ui/src/@/passkeys/svc/net/RequestResponse.ts +0 -12
- package/ui/src/@/passkeys/svc/net/challenges/Options.ts +0 -21
- package/ui/src/@/passkeys/svc/net/challenges/index.ts +0 -2
- package/ui/src/@/passkeys/svc/net/challenges/interface.ts +0 -16
- package/ui/src/@/passkeys/svc/net/index.ts +0 -4
- package/ui/src/@/passkeys/svc/net/interface.ts +0 -29
- package/ui/src/@/passkeys/svc/remove.ts +0 -13
- package/ui/src/@/passkeys/svc/request.ts +0 -50
- package/ui/src/@/passkeys/svc/store.ts +0 -13
- package/ui/src/@/passkeys/svc/supported.ts +0 -1
- package/ui/src/@/passkeys/ui/aaguid.json +0 -150
- package/ui/src/@/realtime/events.ts +0 -1
- package/ui/src/@/realtime/index.ts +0 -1
- package/ui/src/@/realtime/rc.ts +0 -13
- package/ui/src/@/realtime/svc/connect.ts +0 -67
- package/ui/src/@/realtime/svc/events.ts +0 -17
- package/ui/src/@/realtime/svc/index.ts +0 -5
- package/ui/src/@/realtime/svc/net/Message.ts +0 -6
- package/ui/src/@/realtime/svc/net/index.ts +0 -2
- package/ui/src/@/realtime/svc/net/interface.ts +0 -13
- package/ui/src/@/realtime/svc/reset.ts +0 -5
- package/ui/src/@/realtime/svc/status.ts +0 -12
- package/ui/src/@/realtime/svc/store.ts +0 -30
- package/ui/src/@/realtime/svc/time.ts +0 -15
- package/ui/src/app.d.ts +0 -20
- package/ui/src/app.html +0 -13
- package/ui/src/config/index.ts +0 -70
- package/ui/src/lib/assets/favicon.svg +0 -1
- package/ui/src/lib/components/clipboard/Clipboard.svelte +0 -63
- package/ui/src/lib/components/clipboard/Clipboard.ts +0 -12
- package/ui/src/lib/components/clipboard/index.ts +0 -1
- package/ui/src/lib/components/dismissable/Dismissable.svelte +0 -81
- package/ui/src/lib/components/dismissable/Dismissable.ts +0 -7
- package/ui/src/lib/components/dismissable/index.ts +0 -1
- package/ui/src/lib/components/dropdown/Back.svelte +0 -14
- package/ui/src/lib/components/dropdown/Back.ts +0 -3
- package/ui/src/lib/components/dropdown/Content.svelte +0 -76
- package/ui/src/lib/components/dropdown/Content.ts +0 -13
- package/ui/src/lib/components/dropdown/Context.ts +0 -18
- package/ui/src/lib/components/dropdown/Group.svelte +0 -24
- package/ui/src/lib/components/dropdown/Group.ts +0 -8
- package/ui/src/lib/components/dropdown/GroupContext.ts +0 -15
- package/ui/src/lib/components/dropdown/Item.svelte +0 -31
- package/ui/src/lib/components/dropdown/Item.ts +0 -5
- package/ui/src/lib/components/dropdown/Layer.svelte +0 -11
- package/ui/src/lib/components/dropdown/Layer.ts +0 -7
- package/ui/src/lib/components/dropdown/Root.svelte +0 -88
- package/ui/src/lib/components/dropdown/Root.ts +0 -6
- package/ui/src/lib/components/dropdown/Separator.svelte +0 -13
- package/ui/src/lib/components/dropdown/Separator.ts +0 -5
- package/ui/src/lib/components/dropdown/Trigger.svelte +0 -33
- package/ui/src/lib/components/dropdown/Trigger.ts +0 -5
- package/ui/src/lib/components/dropdown/index.ts +0 -8
- package/ui/src/lib/components/fullscreen/Fullscreen.svelte +0 -97
- package/ui/src/lib/components/fullscreen/Fullscreen.ts +0 -18
- package/ui/src/lib/components/fullscreen/Overlay.svelte +0 -15
- package/ui/src/lib/components/fullscreen/Overlay.ts +0 -7
- package/ui/src/lib/components/fullscreen/index.ts +0 -2
- package/ui/src/lib/components/hold/Hold.svelte +0 -133
- package/ui/src/lib/components/hold/Hold.ts +0 -23
- package/ui/src/lib/components/hold/index.ts +0 -1
- package/ui/src/lib/components/scrollable/Scrollable.svelte +0 -49
- package/ui/src/lib/components/scrollable/Scrollable.ts +0 -117
- package/ui/src/lib/components/scrollable/index.ts +0 -2
- package/ui/src/lib/components/shake/Shake.svelte +0 -62
- package/ui/src/lib/components/shake/Shake.ts +0 -7
- package/ui/src/lib/components/shake/index.ts +0 -1
- package/ui/src/lib/components/share/Share.svelte +0 -58
- package/ui/src/lib/components/share/Share.ts +0 -9
- package/ui/src/lib/components/share/index.ts +0 -1
- package/ui/src/lib/components/shell/Attention.svelte +0 -11
- package/ui/src/lib/components/shell/Attention.ts +0 -6
- package/ui/src/lib/components/shell/Header.svelte +0 -18
- package/ui/src/lib/components/shell/Header.ts +0 -7
- package/ui/src/lib/components/shell/Screen.svelte +0 -28
- package/ui/src/lib/components/shell/Screen.ts +0 -11
- package/ui/src/lib/components/shell/Sticky.svelte +0 -23
- package/ui/src/lib/components/shell/Sticky.ts +0 -8
- package/ui/src/lib/components/shell/Underlay.svelte +0 -21
- package/ui/src/lib/components/shell/Underlay.ts +0 -6
- package/ui/src/lib/components/shell/index.ts +0 -6
- package/ui/src/lib/components/shell/nav/Actions.svelte +0 -31
- package/ui/src/lib/components/shell/nav/Actions.ts +0 -16
- package/ui/src/lib/components/shell/nav/Back.svelte +0 -20
- package/ui/src/lib/components/shell/nav/Back.ts +0 -9
- package/ui/src/lib/components/shell/nav/Bar.svelte +0 -24
- package/ui/src/lib/components/shell/nav/Bar.ts +0 -3
- package/ui/src/lib/components/shell/nav/Button.svelte +0 -64
- package/ui/src/lib/components/shell/nav/Button.ts +0 -7
- package/ui/src/lib/components/shell/nav/Nav.svelte +0 -62
- package/ui/src/lib/components/shell/nav/Nav.ts +0 -35
- package/ui/src/lib/components/shell/nav/Return.svelte +0 -29
- package/ui/src/lib/components/shell/nav/Return.ts +0 -15
- package/ui/src/lib/components/shell/nav/Sections.svelte +0 -58
- package/ui/src/lib/components/shell/nav/Sections.ts +0 -6
- package/ui/src/lib/components/shell/nav/Toolbar.svelte +0 -73
- package/ui/src/lib/components/shell/nav/Toolbar.ts +0 -3
- package/ui/src/lib/components/shell/nav/history.ts +0 -36
- package/ui/src/lib/components/shell/nav/index.ts +0 -5
- package/ui/src/lib/components/shell/nav/store.ts +0 -24
- package/ui/src/lib/components/ui/alert/alert-action.svelte +0 -20
- package/ui/src/lib/components/ui/alert/alert-description.svelte +0 -23
- package/ui/src/lib/components/ui/alert/alert-title.svelte +0 -23
- package/ui/src/lib/components/ui/alert/alert.svelte +0 -43
- package/ui/src/lib/components/ui/alert/index.ts +0 -17
- package/ui/src/lib/components/ui/alert-dialog/alert-dialog-action.svelte +0 -27
- package/ui/src/lib/components/ui/alert-dialog/alert-dialog-cancel.svelte +0 -27
- package/ui/src/lib/components/ui/alert-dialog/alert-dialog-content.svelte +0 -32
- package/ui/src/lib/components/ui/alert-dialog/alert-dialog-description.svelte +0 -17
- package/ui/src/lib/components/ui/alert-dialog/alert-dialog-footer.svelte +0 -23
- package/ui/src/lib/components/ui/alert-dialog/alert-dialog-header.svelte +0 -20
- package/ui/src/lib/components/ui/alert-dialog/alert-dialog-media.svelte +0 -20
- package/ui/src/lib/components/ui/alert-dialog/alert-dialog-overlay.svelte +0 -17
- package/ui/src/lib/components/ui/alert-dialog/alert-dialog-portal.svelte +0 -7
- package/ui/src/lib/components/ui/alert-dialog/alert-dialog-title.svelte +0 -17
- package/ui/src/lib/components/ui/alert-dialog/alert-dialog-trigger.svelte +0 -7
- package/ui/src/lib/components/ui/alert-dialog/alert-dialog.svelte +0 -7
- package/ui/src/lib/components/ui/alert-dialog/index.ts +0 -40
- package/ui/src/lib/components/ui/badge/badge.svelte +0 -49
- package/ui/src/lib/components/ui/badge/index.ts +0 -2
- package/ui/src/lib/components/ui/button/button.svelte +0 -82
- package/ui/src/lib/components/ui/button/index.ts +0 -17
- package/ui/src/lib/components/ui/button-group/button-group-separator.svelte +0 -23
- package/ui/src/lib/components/ui/button-group/button-group-text.svelte +0 -28
- package/ui/src/lib/components/ui/button-group/button-group.svelte +0 -46
- package/ui/src/lib/components/ui/button-group/index.ts +0 -15
- package/ui/src/lib/components/ui/card/card-action.svelte +0 -23
- package/ui/src/lib/components/ui/card/card-content.svelte +0 -20
- package/ui/src/lib/components/ui/card/card-description.svelte +0 -20
- package/ui/src/lib/components/ui/card/card-footer.svelte +0 -20
- package/ui/src/lib/components/ui/card/card-header.svelte +0 -23
- package/ui/src/lib/components/ui/card/card-title.svelte +0 -20
- package/ui/src/lib/components/ui/card/card.svelte +0 -22
- package/ui/src/lib/components/ui/card/index.ts +0 -25
- package/ui/src/lib/components/ui/checkbox/checkbox.svelte +0 -39
- package/ui/src/lib/components/ui/checkbox/index.ts +0 -6
- package/ui/src/lib/components/ui/collapsible/collapsible-content.svelte +0 -7
- package/ui/src/lib/components/ui/collapsible/collapsible-trigger.svelte +0 -7
- package/ui/src/lib/components/ui/collapsible/collapsible.svelte +0 -20
- package/ui/src/lib/components/ui/collapsible/index.ts +0 -13
- package/ui/src/lib/components/ui/input/index.ts +0 -7
- package/ui/src/lib/components/ui/input/input.svelte +0 -48
- package/ui/src/lib/components/ui/input-otp/index.ts +0 -15
- package/ui/src/lib/components/ui/input-otp/input-otp-group.svelte +0 -20
- package/ui/src/lib/components/ui/input-otp/input-otp-separator.svelte +0 -27
- package/ui/src/lib/components/ui/input-otp/input-otp-slot.svelte +0 -31
- package/ui/src/lib/components/ui/input-otp/input-otp.svelte +0 -23
- package/ui/src/lib/components/ui/item/index.ts +0 -34
- package/ui/src/lib/components/ui/item/item-actions.svelte +0 -20
- package/ui/src/lib/components/ui/item/item-content.svelte +0 -23
- package/ui/src/lib/components/ui/item/item-description.svelte +0 -23
- package/ui/src/lib/components/ui/item/item-footer.svelte +0 -20
- package/ui/src/lib/components/ui/item/item-group.svelte +0 -21
- package/ui/src/lib/components/ui/item/item-header.svelte +0 -20
- package/ui/src/lib/components/ui/item/item-media.svelte +0 -42
- package/ui/src/lib/components/ui/item/item-separator.svelte +0 -19
- package/ui/src/lib/components/ui/item/item-title.svelte +0 -20
- package/ui/src/lib/components/ui/item/item.svelte +0 -61
- package/ui/src/lib/components/ui/kbd/index.ts +0 -10
- package/ui/src/lib/components/ui/kbd/kbd-group.svelte +0 -20
- package/ui/src/lib/components/ui/kbd/kbd.svelte +0 -23
- package/ui/src/lib/components/ui/label/index.ts +0 -7
- package/ui/src/lib/components/ui/label/label.svelte +0 -20
- package/ui/src/lib/components/ui/progress/index.ts +0 -7
- package/ui/src/lib/components/ui/progress/progress.svelte +0 -27
- package/ui/src/lib/components/ui/select/index.ts +0 -37
- package/ui/src/lib/components/ui/select/select-content.svelte +0 -45
- package/ui/src/lib/components/ui/select/select-group-heading.svelte +0 -21
- package/ui/src/lib/components/ui/select/select-group.svelte +0 -17
- package/ui/src/lib/components/ui/select/select-item.svelte +0 -40
- package/ui/src/lib/components/ui/select/select-label.svelte +0 -20
- package/ui/src/lib/components/ui/select/select-portal.svelte +0 -7
- package/ui/src/lib/components/ui/select/select-scroll-down-button.svelte +0 -20
- package/ui/src/lib/components/ui/select/select-scroll-up-button.svelte +0 -20
- package/ui/src/lib/components/ui/select/select-separator.svelte +0 -18
- package/ui/src/lib/components/ui/select/select-trigger.svelte +0 -29
- package/ui/src/lib/components/ui/select/select.svelte +0 -11
- package/ui/src/lib/components/ui/separator/index.ts +0 -7
- package/ui/src/lib/components/ui/separator/separator.svelte +0 -23
- package/ui/src/lib/components/ui/spinner/index.ts +0 -1
- package/ui/src/lib/components/ui/spinner/spinner.svelte +0 -18
- package/ui/src/lib/components/ui/tabs/index.ts +0 -18
- package/ui/src/lib/components/ui/tabs/tabs-content.svelte +0 -17
- package/ui/src/lib/components/ui/tabs/tabs-list.svelte +0 -40
- package/ui/src/lib/components/ui/tabs/tabs-trigger.svelte +0 -23
- package/ui/src/lib/components/ui/tabs/tabs.svelte +0 -19
- package/ui/src/lib/components/ui/textarea/index.ts +0 -7
- package/ui/src/lib/components/ui/textarea/textarea.svelte +0 -22
- package/ui/src/lib/intl/bcp.ts +0 -25
- package/ui/src/lib/intl/built.js +0 -18
- package/ui/src/lib/intl/context.yaml +0 -18
- package/ui/src/lib/intl/en-US.yaml +0 -6
- package/ui/src/lib/intl/index.ts +0 -65
- package/ui/src/lib/intl/types.ts +0 -19
- package/ui/src/lib/tools/ago.ts +0 -10
- package/ui/src/lib/tools/assert.ts +0 -3
- package/ui/src/lib/tools/cap.ts +0 -5
- package/ui/src/lib/tools/clicks.ts +0 -25
- package/ui/src/lib/tools/contextmenu.ts +0 -19
- package/ui/src/lib/tools/convert.ts +0 -32
- package/ui/src/lib/tools/currency.test.ts +0 -10
- package/ui/src/lib/tools/currency.ts +0 -55
- package/ui/src/lib/tools/date.test.ts +0 -21
- package/ui/src/lib/tools/date.ts +0 -35
- package/ui/src/lib/tools/delay.ts +0 -7
- package/ui/src/lib/tools/image.ts +0 -39
- package/ui/src/lib/tools/index.ts +0 -20
- package/ui/src/lib/tools/location.ts +0 -41
- package/ui/src/lib/tools/metronome.ts +0 -11
- package/ui/src/lib/tools/mq.ts +0 -84
- package/ui/src/lib/tools/onsubmit.ts +0 -21
- package/ui/src/lib/tools/random.ts +0 -15
- package/ui/src/lib/tools/search.ts +0 -25
- package/ui/src/lib/tools/timeout.ts +0 -26
- package/ui/src/lib/tools/transition.ts +0 -207
- package/ui/src/lib/tools/types.ts +0 -3
- package/ui/src/lib/tools/uuid.test.ts +0 -28
- package/ui/src/lib/tools/uuid.ts +0 -9
- package/ui/src/lib/typeset.css +0 -502
- package/ui/src/lib/utils.ts +0 -12
- package/ui/src/routes/(private)/+layout.svelte +0 -112
- package/ui/src/routes/(private)/+page.svelte +0 -7
- package/ui/src/routes/(private)/[component]/+page.svelte +0 -77
- package/ui/src/routes/+layout.svelte +0 -25
- package/ui/src/routes/+layout.ts +0 -14
- package/ui/src/routes/layout.css +0 -232
- package/ui/svelte.config.js +0 -36
- package/ui/tools/feat.js +0 -43
- package/ui/tools/hooks/README.md +0 -13
- package/ui/tools/hooks/guard-intl.sh +0 -40
- package/ui/tools/shad.js +0 -7
- package/ui/tsconfig.json +0 -20
- package/ui/vite.config.ts +0 -8
- /package/ui/{static → dist}/robots.txt +0 -0
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
// Auto-generated by i18n CLI - do not edit manually
|
|
2
|
-
|
|
3
|
-
/** @type {Record<import('$lib/intl').Locale, import('./types').Dictionary>} */
|
|
4
|
-
export const dictionaries = {
|
|
5
|
-
"en-US": {
|
|
6
|
-
"values": {
|
|
7
|
-
"empty": "No component declares configuration.",
|
|
8
|
-
"nomatch": "No results match the filter."
|
|
9
|
-
},
|
|
10
|
-
"value": {
|
|
11
|
-
"none": "This component has no configuration.",
|
|
12
|
-
"secret": "Secret",
|
|
13
|
-
"count": (count) => {
|
|
14
|
-
const forms = {"one":"{n} value","other":"{n} values"};
|
|
15
|
-
const locale = "en-US"; // This will be replaced by the build system
|
|
16
|
-
const pluralRules = new Intl.PluralRules(locale);
|
|
17
|
-
const rule = pluralRules.select(count);
|
|
18
|
-
const table = /** @type {Record<string, string>} */ (forms);
|
|
19
|
-
|
|
20
|
-
return (table[rule] ?? table.other).replace(/{n}/g, new Intl.NumberFormat(locale).format(count));
|
|
21
|
-
},
|
|
22
|
-
"title": "Configuration"
|
|
23
|
-
},
|
|
24
|
-
"create": {
|
|
25
|
-
"action": "Edit",
|
|
26
|
-
"title": "Edit configuration",
|
|
27
|
-
"editor": "Configuration",
|
|
28
|
-
"submit": "Update",
|
|
29
|
-
"cancel": "Cancel",
|
|
30
|
-
"malformed": "This is not valid YAML.",
|
|
31
|
-
"failed": "The configuration could not be created."
|
|
32
|
-
},
|
|
33
|
-
"space": {
|
|
34
|
-
"user": "Userspace",
|
|
35
|
-
"system": "System"
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
};
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
context: Mount 'configuration' context
|
|
2
|
-
inputs:
|
|
3
|
-
values:
|
|
4
|
-
empty:
|
|
5
|
-
input: No component declares configuration.
|
|
6
|
-
context: shown when the application has no configured components at all
|
|
7
|
-
nomatch:
|
|
8
|
-
input: No results match the filter.
|
|
9
|
-
context: shown when the filter leaves the list empty
|
|
10
|
-
value:
|
|
11
|
-
none:
|
|
12
|
-
input: This component has no configuration.
|
|
13
|
-
context: shown on a component's screen when the service holds no configuration for it
|
|
14
|
-
secret:
|
|
15
|
-
input: Secret
|
|
16
|
-
context: "stands in place of a value that is a secret and is never shown; a noun, capitalized as a label"
|
|
17
|
-
count:
|
|
18
|
-
input: value
|
|
19
|
-
context: how many top-level values a component's configuration holds, shown on its row in the list
|
|
20
|
-
title:
|
|
21
|
-
input: Configuration
|
|
22
|
-
context: heading over the component's current configuration
|
|
23
|
-
create:
|
|
24
|
-
action:
|
|
25
|
-
input: Edit
|
|
26
|
-
context: "button that opens the dialog for changing a component's configuration. A change is stored as a new immutable object, but the reader edits what is there, so the word is the reader's, not the service's"
|
|
27
|
-
title:
|
|
28
|
-
input: Edit configuration
|
|
29
|
-
context: title of that dialog
|
|
30
|
-
editor:
|
|
31
|
-
input: Configuration
|
|
32
|
-
context: accessible name of the text area holding the configuration as YAML
|
|
33
|
-
submit:
|
|
34
|
-
input: Update
|
|
35
|
-
context: button that sends the edited configuration
|
|
36
|
-
cancel:
|
|
37
|
-
input: Cancel
|
|
38
|
-
context: button that closes the dialog without creating anything
|
|
39
|
-
malformed:
|
|
40
|
-
input: This is not valid YAML.
|
|
41
|
-
context: shown under the editor when the text cannot be parsed
|
|
42
|
-
failed:
|
|
43
|
-
input: The configuration could not be created.
|
|
44
|
-
context: shown when the service refused the request
|
|
45
|
-
space:
|
|
46
|
-
user:
|
|
47
|
-
input: Userspace
|
|
48
|
-
context: heading over the components the application itself declares
|
|
49
|
-
system:
|
|
50
|
-
input: System
|
|
51
|
-
context: heading over the components the runtime provides, such as identity
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
values:
|
|
2
|
-
empty: No component declares configuration.
|
|
3
|
-
nomatch: No results match the filter.
|
|
4
|
-
value:
|
|
5
|
-
none: This component has no configuration.
|
|
6
|
-
secret: Secret
|
|
7
|
-
count:
|
|
8
|
-
- one: "{n} value"
|
|
9
|
-
other: "{n} values"
|
|
10
|
-
title: Configuration
|
|
11
|
-
create:
|
|
12
|
-
action: Edit
|
|
13
|
-
title: Edit configuration
|
|
14
|
-
editor: Configuration
|
|
15
|
-
submit: Update
|
|
16
|
-
cancel: Cancel
|
|
17
|
-
malformed: This is not valid YAML.
|
|
18
|
-
failed: The configuration could not be created.
|
|
19
|
-
space:
|
|
20
|
-
user: Userspace
|
|
21
|
-
system: System
|
|
@@ -1,9 +0,0 @@
|
|
|
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
|
-
|
|
6
|
-
const dict = derived(locale, ($locale) => dictionaries[$locale])
|
|
7
|
-
|
|
8
|
-
export { dict, dictionaries }
|
|
9
|
-
export type { Dictionary }
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Auto-generated TypeScript definitions for i18n dictionaries
|
|
3
|
-
*
|
|
4
|
-
* @author copilot
|
|
5
|
-
*/
|
|
6
|
-
|
|
7
|
-
export type Dictionary = {
|
|
8
|
-
values: {
|
|
9
|
-
empty: string
|
|
10
|
-
nomatch: string
|
|
11
|
-
}
|
|
12
|
-
value: {
|
|
13
|
-
none: string
|
|
14
|
-
secret: string
|
|
15
|
-
count: (value: number) => string
|
|
16
|
-
title: string
|
|
17
|
-
}
|
|
18
|
-
create: {
|
|
19
|
-
action: string
|
|
20
|
-
title: string
|
|
21
|
-
editor: string
|
|
22
|
-
submit: string
|
|
23
|
-
cancel: string
|
|
24
|
-
malformed: string
|
|
25
|
-
failed: string
|
|
26
|
-
}
|
|
27
|
-
space: {
|
|
28
|
-
user: string
|
|
29
|
-
system: string
|
|
30
|
-
}
|
|
31
|
-
}
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
import { it, expect } from 'vitest'
|
|
2
|
-
import { holds, read } from './read'
|
|
3
|
-
|
|
4
|
-
it('should read scalars', () => {
|
|
5
|
-
expect(read({ foo: 'hello', num: 0, on: true, none: null })).toEqual([
|
|
6
|
-
{ depth: 0, key: 'foo', value: 'hello', secret: false },
|
|
7
|
-
{ depth: 0, key: 'num', value: '0', secret: false },
|
|
8
|
-
{ depth: 0, key: 'on', value: 'true', secret: false },
|
|
9
|
-
{ depth: 0, key: 'none', value: 'null', secret: false },
|
|
10
|
-
])
|
|
11
|
-
})
|
|
12
|
-
|
|
13
|
-
it('should open an object onto its properties', () => {
|
|
14
|
-
expect(read({ nested: { foo: 'bar' } })).toEqual([
|
|
15
|
-
{ depth: 0, key: 'nested', value: null, secret: false },
|
|
16
|
-
{ depth: 1, key: 'foo', value: 'bar', secret: false },
|
|
17
|
-
])
|
|
18
|
-
})
|
|
19
|
-
|
|
20
|
-
it('should mark a list item', () => {
|
|
21
|
-
expect(read({ list: ['one', 'two'] })).toEqual([
|
|
22
|
-
{ depth: 0, key: 'list', value: null, secret: false },
|
|
23
|
-
{ depth: 1, key: '-', value: 'one', secret: false },
|
|
24
|
-
{ depth: 1, key: '-', value: 'two', secret: false },
|
|
25
|
-
])
|
|
26
|
-
})
|
|
27
|
-
|
|
28
|
-
it('should open a list of objects', () => {
|
|
29
|
-
expect(read({ greetings: [{ text: 'hello', times: 2 }] })).toEqual([
|
|
30
|
-
{ depth: 0, key: 'greetings', value: null, secret: false },
|
|
31
|
-
{ depth: 1, key: '-', value: null, secret: false },
|
|
32
|
-
{ depth: 2, key: 'text', value: 'hello', secret: false },
|
|
33
|
-
{ depth: 2, key: 'times', value: '2', secret: false },
|
|
34
|
-
])
|
|
35
|
-
})
|
|
36
|
-
|
|
37
|
-
it('should write an empty object or list rather than open it', () => {
|
|
38
|
-
expect(read({ nothing: {}, none: [] })).toEqual([
|
|
39
|
-
{ depth: 0, key: 'nothing', value: '{}', secret: false },
|
|
40
|
-
{ depth: 0, key: 'none', value: '[]', secret: false },
|
|
41
|
-
])
|
|
42
|
-
})
|
|
43
|
-
|
|
44
|
-
it('should never show a secret', () => {
|
|
45
|
-
expect(read({ apiKey: '$STRIPE_API_KEY' })).toEqual([
|
|
46
|
-
{ depth: 0, key: 'apiKey', value: null, secret: true },
|
|
47
|
-
])
|
|
48
|
-
})
|
|
49
|
-
|
|
50
|
-
it('should read a secret nested in a list', () => {
|
|
51
|
-
expect(read({ keys: [{ key: '$KEY0' }] })).toEqual([
|
|
52
|
-
{ depth: 0, key: 'keys', value: null, secret: false },
|
|
53
|
-
{ depth: 1, key: '-', value: null, secret: false },
|
|
54
|
-
{ depth: 2, key: 'key', value: null, secret: true },
|
|
55
|
-
])
|
|
56
|
-
})
|
|
57
|
-
|
|
58
|
-
it('should take a reference of digits, as the runtime does', () => {
|
|
59
|
-
expect(read({ price: '$100' })).toEqual([{ depth: 0, key: 'price', value: null, secret: true }])
|
|
60
|
-
})
|
|
61
|
-
|
|
62
|
-
it('should not take a lowercase or unprefixed name for a secret', () => {
|
|
63
|
-
expect(read({ word: '$lower', plain: 'NAME' })).toEqual([
|
|
64
|
-
{ depth: 0, key: 'word', value: '$lower', secret: false },
|
|
65
|
-
{ depth: 0, key: 'plain', value: 'NAME', secret: false },
|
|
66
|
-
])
|
|
67
|
-
})
|
|
68
|
-
|
|
69
|
-
it('should say whether a configuration holds a secret', () => {
|
|
70
|
-
expect(holds({ foo: 'plain' })).toBe(false)
|
|
71
|
-
expect(holds({ apiKey: '$STRIPE_API_KEY' })).toBe(true)
|
|
72
|
-
expect(holds({ nested: { deep: { key: '$KEY0' } } })).toBe(true)
|
|
73
|
-
expect(holds({ keys: [{ key: '$KEY0' }] })).toBe(true)
|
|
74
|
-
expect(holds({})).toBe(false)
|
|
75
|
-
})
|
|
@@ -1,102 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* A configuration read as lines: what each value is, and what the things it hold are.
|
|
3
|
-
* The sibling of introspection's `shape.ts` — that one reads a schema, this one reads
|
|
4
|
-
* the value the schema describes.
|
|
5
|
-
*
|
|
6
|
-
* A secret never reaches the page: what is stored in its place is a reference to the
|
|
7
|
-
* variable the component substitutes, and a reference is all there is to show.
|
|
8
|
-
*/
|
|
9
|
-
|
|
10
|
-
/** One line of the value, indented by its depth. */
|
|
11
|
-
export interface Line {
|
|
12
|
-
depth: number
|
|
13
|
-
/** The property this line is about; `-` marks an item of a list. */
|
|
14
|
-
key: string
|
|
15
|
-
/** What is written after the key, or null where the line opens onto the lines beneath. */
|
|
16
|
-
value: string | null
|
|
17
|
-
/** Stored as a reference, and shown as one. */
|
|
18
|
-
secret: boolean
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* A secret is an uppercase name prefixed with `$`. Mirrors `SECRET_RX` in
|
|
23
|
-
* `extensions/configuration/source/const.ts`; the two must say the same thing.
|
|
24
|
-
*/
|
|
25
|
-
const SECRET = /^\$([A-Z0-9_]{1,32})$/
|
|
26
|
-
|
|
27
|
-
/** The marker a list item is written with, in place of a key. */
|
|
28
|
-
export const ITEM = '-'
|
|
29
|
-
|
|
30
|
-
export function read(value: unknown): Line[] {
|
|
31
|
-
const lines: Line[] = []
|
|
32
|
-
|
|
33
|
-
add(null, value, 0, lines)
|
|
34
|
-
|
|
35
|
-
return lines
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
function add(key: string | null, value: unknown, depth: number, into: Line[]): void {
|
|
39
|
-
const held = open(value)
|
|
40
|
-
|
|
41
|
-
// the whole of what is shown needs no line of its own; its children are the shape
|
|
42
|
-
if (key === null) {
|
|
43
|
-
if (held === null) into.push(line(ITEM, value, depth))
|
|
44
|
-
else for (const [name, child] of held) add(name, child, depth, into)
|
|
45
|
-
|
|
46
|
-
return
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
if (held === null) {
|
|
50
|
-
into.push(line(key, value, depth))
|
|
51
|
-
|
|
52
|
-
return
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
into.push({ depth, key, value: null, secret: false })
|
|
56
|
-
|
|
57
|
-
for (const [name, child] of held) add(name, child, depth + 1, into)
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
/**
|
|
61
|
-
* The pairs a line opens onto, or `null` when the value is written on the line itself.
|
|
62
|
-
* An empty object or list opens onto nothing, so it is written rather than opened.
|
|
63
|
-
*/
|
|
64
|
-
function open(value: unknown): Array<[string, unknown]> | null {
|
|
65
|
-
if (Array.isArray(value))
|
|
66
|
-
return value.length === 0 ? null : value.map((item) => [ITEM, item])
|
|
67
|
-
|
|
68
|
-
if (typeof value === 'object' && value !== null) {
|
|
69
|
-
const entries = Object.entries(value)
|
|
70
|
-
|
|
71
|
-
return entries.length === 0 ? null : entries
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
return null
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
function line(key: string, value: unknown, depth: number): Line {
|
|
78
|
-
const secret = typeof value === 'string' && SECRET.test(value)
|
|
79
|
-
|
|
80
|
-
return { depth, key, value: secret ? null : write(value), secret }
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
/** How a value is written: a string as it reads, everything else as JSON says. */
|
|
84
|
-
function write(value: unknown): string {
|
|
85
|
-
if (typeof value === 'string') return value
|
|
86
|
-
|
|
87
|
-
if (Array.isArray(value)) return '[]'
|
|
88
|
-
|
|
89
|
-
if (typeof value === 'object' && value !== null) return '{}'
|
|
90
|
-
|
|
91
|
-
return JSON.stringify(value) ?? 'null'
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
/** Whether a value is a secret reference, for anything that asks outside a line. */
|
|
95
|
-
export function secret(value: unknown): boolean {
|
|
96
|
-
return typeof value === 'string' && SECRET.test(value)
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
/** Whether a configuration holds a secret anywhere in it, however deep. */
|
|
100
|
-
export function holds(value: unknown): boolean {
|
|
101
|
-
return read(value).some((line) => line.secret)
|
|
102
|
-
}
|
|
@@ -1,69 +0,0 @@
|
|
|
1
|
-
import { it, expect } from 'vitest'
|
|
2
|
-
import { matches, rank, split } from './ui'
|
|
3
|
-
|
|
4
|
-
it('should split a namespaced name', () => {
|
|
5
|
-
expect(split('identity.tokens')).toEqual({ namespace: 'identity', component: 'tokens' })
|
|
6
|
-
})
|
|
7
|
-
|
|
8
|
-
it('should read an unqualified name as the default namespace', () => {
|
|
9
|
-
expect(split('dummy')).toEqual({ namespace: 'default', component: 'dummy' })
|
|
10
|
-
})
|
|
11
|
-
|
|
12
|
-
it('should split on the first dot only', () => {
|
|
13
|
-
expect(split('a.b.c')).toEqual({ namespace: 'a', component: 'b.c' })
|
|
14
|
-
})
|
|
15
|
-
|
|
16
|
-
it('should match a subsequence', () => {
|
|
17
|
-
expect(matches('identity.tokens', 'idtok')).toBe(true)
|
|
18
|
-
expect(matches('identity.tokens', 'identity tokens')).toBe(true)
|
|
19
|
-
expect(matches('identity.tokens', '')).toBe(true)
|
|
20
|
-
expect(matches('identity.tokens', 'zzz')).toBe(false)
|
|
21
|
-
})
|
|
22
|
-
|
|
23
|
-
const dummy = {
|
|
24
|
-
component: 'dummies.dummy',
|
|
25
|
-
configuration: {
|
|
26
|
-
foo: 'deployed',
|
|
27
|
-
num: 7,
|
|
28
|
-
nested: { deep: { flag: true } },
|
|
29
|
-
greetings: [{ text: 'hello' }],
|
|
30
|
-
apiKey: '$STRIPE_API_KEY',
|
|
31
|
-
},
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
it('should rank a name above what a configuration holds', () => {
|
|
35
|
-
expect(rank(dummy, 'dummy')).toBeGreaterThan(rank(dummy, 'deployed'))
|
|
36
|
-
})
|
|
37
|
-
|
|
38
|
-
it('should match a top-level key and value', () => {
|
|
39
|
-
expect(rank(dummy, 'foo')).toBe(1)
|
|
40
|
-
expect(rank(dummy, 'deployed')).toBe(1)
|
|
41
|
-
})
|
|
42
|
-
|
|
43
|
-
it('should match a nested key and value', () => {
|
|
44
|
-
expect(rank(dummy, 'deep')).toBe(1)
|
|
45
|
-
expect(rank(dummy, 'flag')).toBe(1)
|
|
46
|
-
})
|
|
47
|
-
|
|
48
|
-
it('should match inside a list of objects', () => {
|
|
49
|
-
expect(rank(dummy, 'hello')).toBe(1)
|
|
50
|
-
expect(rank(dummy, 'text')).toBe(1)
|
|
51
|
-
})
|
|
52
|
-
|
|
53
|
-
it('should match a number or a boolean', () => {
|
|
54
|
-
expect(rank(dummy, '7')).toBe(1)
|
|
55
|
-
expect(rank(dummy, 'true')).toBe(1)
|
|
56
|
-
})
|
|
57
|
-
|
|
58
|
-
it('should match the key of a secret but never its reference', () => {
|
|
59
|
-
expect(rank(dummy, 'apiKey')).toBe(1)
|
|
60
|
-
expect(rank(dummy, 'STRIPE')).toBe(0)
|
|
61
|
-
})
|
|
62
|
-
|
|
63
|
-
it('should not match across two unrelated values', () => {
|
|
64
|
-
expect(rank(dummy, 'deployedhello')).toBe(0)
|
|
65
|
-
})
|
|
66
|
-
|
|
67
|
-
it('should keep every component on an empty query', () => {
|
|
68
|
-
expect(rank(dummy, '')).toBe(2)
|
|
69
|
-
})
|
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
import { writable } from 'svelte/store'
|
|
2
|
-
|
|
3
|
-
/** What the header's filter holds. Transient: not persisted, not in the URL. */
|
|
4
|
-
export const query = writable('')
|
|
5
|
-
|
|
6
|
-
/**
|
|
7
|
-
* What Enter in the filter does, set by whichever screen is showing. A filter narrowed to
|
|
8
|
-
* one thing leaves nothing to choose, so the key does what pressing that thing does; with
|
|
9
|
-
* none or many left there is nothing to mean by it.
|
|
10
|
-
*/
|
|
11
|
-
export const only = writable<(() => void) | null>(null)
|
|
12
|
-
|
|
13
|
-
/** The namespace an application does not name; it is noise on every row. */
|
|
14
|
-
export const DEFAULT = 'default'
|
|
15
|
-
|
|
16
|
-
/** The namespace of a component, and the name under it. */
|
|
17
|
-
export function split(id: string): { namespace: string; component: string } {
|
|
18
|
-
const at = id.indexOf('.')
|
|
19
|
-
|
|
20
|
-
if (at === -1) return { namespace: DEFAULT, component: id }
|
|
21
|
-
|
|
22
|
-
return { namespace: id.slice(0, at), component: id.slice(at + 1) }
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
/**
|
|
26
|
-
* The namespaces the runtime provides components in. Configuration has no notion of a
|
|
27
|
-
* system component — what the service is told is a name and a schema — so this is a
|
|
28
|
-
* list, and it grows when the runtime ships another one. It must keep saying what
|
|
29
|
-
* `SYSTEM` says in the introspection UI.
|
|
30
|
-
*/
|
|
31
|
-
const SYSTEM = new Set(['identity', 'exposition', 'realtime', 'introspection', 'configuration'])
|
|
32
|
-
|
|
33
|
-
/** Whether a component came with the runtime rather than with the application. */
|
|
34
|
-
export function system(component: string): boolean {
|
|
35
|
-
return SYSTEM.has(split(component).namespace)
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
/** A name match outranks a match on something the configuration merely holds. */
|
|
39
|
-
const NAME = 2
|
|
40
|
-
const MEMBER = 1
|
|
41
|
-
|
|
42
|
-
type Searchable = { component: string; configuration: object }
|
|
43
|
-
|
|
44
|
-
/**
|
|
45
|
-
* How well a component answers the filter, or `0` when it does not. Someone typing
|
|
46
|
-
* `apps` means the component of that name before a value that happens to read the
|
|
47
|
-
* same, so the list leads with names.
|
|
48
|
-
*
|
|
49
|
-
* An empty query matches every name, which leaves the order alone.
|
|
50
|
-
*/
|
|
51
|
-
export function rank(item: Searchable, query: string): number {
|
|
52
|
-
if (matches(item.component, query)) return NAME
|
|
53
|
-
|
|
54
|
-
return terms(item.configuration).some((term) => matches(term, query)) ? MEMBER : 0
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
/**
|
|
58
|
-
* Every key and every value in a configuration, at any depth, each as its own term —
|
|
59
|
-
* never a concatenation of them, or a query would creep across two unrelated values
|
|
60
|
-
* and call it a hit.
|
|
61
|
-
*
|
|
62
|
-
* A secret is left out. What stands in its place is a reference rather than the secret,
|
|
63
|
-
* but the page refuses to show it, and a filter that answered for it would show it.
|
|
64
|
-
*/
|
|
65
|
-
function terms(value: unknown, into: string[] = []): string[] {
|
|
66
|
-
if (Array.isArray(value)) {
|
|
67
|
-
for (const item of value) terms(item, into)
|
|
68
|
-
|
|
69
|
-
return into
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
if (typeof value === 'object' && value !== null) {
|
|
73
|
-
for (const [key, held] of Object.entries(value)) {
|
|
74
|
-
into.push(key)
|
|
75
|
-
terms(held, into)
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
return into
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
if (typeof value === 'string') {
|
|
82
|
-
if (!SECRET.test(value)) into.push(value)
|
|
83
|
-
|
|
84
|
-
return into
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
if (typeof value === 'number' || typeof value === 'boolean') into.push(String(value))
|
|
88
|
-
|
|
89
|
-
return into
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
/** Mirrors `SECRET_RX` in `extensions/configuration/source/const.ts`. */
|
|
93
|
-
const SECRET = /^\$([A-Z0-9_]{1,32})$/
|
|
94
|
-
|
|
95
|
-
/**
|
|
96
|
-
* A subsequence match, so `idtok` finds `identity.tokens`. Spaces in the query are
|
|
97
|
-
* dropped, which lets `identity tokens` find it too. An empty query matches everything.
|
|
98
|
-
*/
|
|
99
|
-
export function matches(text: string, query: string): boolean {
|
|
100
|
-
const needle = query.toLowerCase().replace(/\s+/g, '')
|
|
101
|
-
|
|
102
|
-
if (needle === '') return true
|
|
103
|
-
|
|
104
|
-
const haystack = text.toLowerCase()
|
|
105
|
-
|
|
106
|
-
let at = 0
|
|
107
|
-
|
|
108
|
-
for (const character of needle) {
|
|
109
|
-
at = haystack.indexOf(character, at) + 1
|
|
110
|
-
|
|
111
|
-
if (at === 0) return false
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
return true
|
|
115
|
-
}
|
package/ui/src/@/iam/index.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './svc'
|
package/ui/src/@/iam/rc.ts
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
import { origin } from '@/net'
|
|
2
|
-
import { consume } from './svc/transfer'
|
|
3
|
-
import { sync } from './svc/sync'
|
|
4
|
-
import { challenge } from './svc/store'
|
|
5
|
-
|
|
6
|
-
function rc() {
|
|
7
|
-
origin.events.on('challenge', (value) => challenge.set(value))
|
|
8
|
-
|
|
9
|
-
origin.events.on('error', (error) => {
|
|
10
|
-
if (error.code === 401) challenge.set(null)
|
|
11
|
-
})
|
|
12
|
-
|
|
13
|
-
challenge.subscribe((challenge) => origin.authenticate(challenge))
|
|
14
|
-
|
|
15
|
-
const transferred = consume()
|
|
16
|
-
|
|
17
|
-
if (transferred !== null) challenge.set(transferred)
|
|
18
|
-
|
|
19
|
-
void sync()
|
|
20
|
-
}
|
|
21
|
-
|
|
22
|
-
export { rc }
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { iam, method, type Method } from './store'
|
|
2
|
-
import type { Echo } from './net'
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Set current account and authentication method.
|
|
6
|
-
*
|
|
7
|
-
* @param echo - The authenticated account echo (`201` on first registration, else `200`).
|
|
8
|
-
* @param channel - The auth channel the user authenticated through.
|
|
9
|
-
*/
|
|
10
|
-
export function authenticated(echo: Echo | Error, channel: Method): Echo | Error {
|
|
11
|
-
if (echo instanceof Error) return echo
|
|
12
|
-
|
|
13
|
-
iam(echo)
|
|
14
|
-
method.set(channel)
|
|
15
|
-
|
|
16
|
-
return echo
|
|
17
|
-
}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import { sync } from './sync'
|
|
2
|
-
import * as net from './net'
|
|
3
|
-
import { authenticated } from './authenticated'
|
|
4
|
-
import type { Echo } from './net'
|
|
5
|
-
|
|
6
|
-
export async function verify(username: string, password: string): Promise<Echo | Error> {
|
|
7
|
-
const credentials = btoa(`${username}:${password}`)
|
|
8
|
-
const echo = await net.get('Basic ' + credentials)
|
|
9
|
-
|
|
10
|
-
return authenticated(echo, 'password')
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
export async function create(identity: string, body: net.basic.Basic): Promise<void | Error> {
|
|
14
|
-
return await net.basic.post(identity, body)
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
export async function capture(identity: string, body: net.basic.Basic): Promise<void | Error> {
|
|
18
|
-
const created = await create(identity, body)
|
|
19
|
-
|
|
20
|
-
if (created instanceof Error) return created
|
|
21
|
-
|
|
22
|
-
void sync()
|
|
23
|
-
}
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
export * as oidc from './oidc'
|
|
2
|
-
export { apple } from './oidc/apple'
|
|
3
|
-
export { google } from './oidc/google'
|
|
4
|
-
export { logout } from './logout'
|
|
5
|
-
export { update } from './update'
|
|
6
|
-
export { named } from './named'
|
|
7
|
-
export * from './store'
|
|
8
|
-
export * as basic from './basic'
|
|
9
|
-
export * as otp from './otp'
|
|
10
|
-
export * as passkeys from './passkeys'
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { account } from './store'
|
|
2
|
-
|
|
3
|
-
export async function named(): Promise<string> {
|
|
4
|
-
const current = account.extract()
|
|
5
|
-
|
|
6
|
-
if (current?.name !== undefined) return current.name
|
|
7
|
-
|
|
8
|
-
return new Promise<string>((resolve) => {
|
|
9
|
-
const unsubscribe = account.subscribe((acc) => {
|
|
10
|
-
if (acc?.name !== undefined) {
|
|
11
|
-
unsubscribe()
|
|
12
|
-
resolve(acc.name)
|
|
13
|
-
}
|
|
14
|
-
})
|
|
15
|
-
})
|
|
16
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './interface'
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { origin } from '@/net'
|
|
2
|
-
|
|
3
|
-
const basic = origin.resource('/identity/basic/', { credentials: 'include' })
|
|
4
|
-
|
|
5
|
-
export interface Basic {
|
|
6
|
-
username: string
|
|
7
|
-
password: string
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
export async function post(id: string, body: Basic): Promise<void | Error> {
|
|
11
|
-
return await basic.json(id, {
|
|
12
|
-
method: 'POST',
|
|
13
|
-
body,
|
|
14
|
-
})
|
|
15
|
-
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export * from './interface'
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { origin } from '@/net'
|
|
2
|
-
|
|
3
|
-
const federation = origin.resource('/identity/federation/', { credentials: 'include' })
|
|
4
|
-
|
|
5
|
-
interface Post {
|
|
6
|
-
scheme: 'bearer' | 'code'
|
|
7
|
-
credentials: string
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
export async function post(identity: string, body: Post): Promise<void | Error> {
|
|
11
|
-
return await federation.json(identity, { method: 'POST', body })
|
|
12
|
-
}
|