@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,195 +0,0 @@
|
|
|
1
|
-
# Styling & Customization
|
|
2
|
-
|
|
3
|
-
See [customization.md](../customization.md) for theming, CSS variables, and adding custom colors.
|
|
4
|
-
|
|
5
|
-
## Contents
|
|
6
|
-
|
|
7
|
-
- Semantic colors
|
|
8
|
-
- Built-in variants first
|
|
9
|
-
- class for layout only
|
|
10
|
-
- No space-x-_ / space-y-_
|
|
11
|
-
- Prefer size-_ over w-_ h-\* when equal
|
|
12
|
-
- Prefer truncate shorthand
|
|
13
|
-
- No manual dark: color overrides
|
|
14
|
-
- Use cn() for conditional classes
|
|
15
|
-
- No manual z-index on overlay components
|
|
16
|
-
|
|
17
|
-
---
|
|
18
|
-
|
|
19
|
-
## Semantic colors
|
|
20
|
-
|
|
21
|
-
**Incorrect:**
|
|
22
|
-
|
|
23
|
-
```svelte
|
|
24
|
-
<div class="bg-blue-500 text-white">
|
|
25
|
-
<p class="text-gray-600">Secondary text</p>
|
|
26
|
-
</div>
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
**Correct:**
|
|
30
|
-
|
|
31
|
-
```svelte
|
|
32
|
-
<div class="bg-primary text-primary-foreground">
|
|
33
|
-
<p class="text-muted-foreground">Secondary text</p>
|
|
34
|
-
</div>
|
|
35
|
-
```
|
|
36
|
-
|
|
37
|
-
---
|
|
38
|
-
|
|
39
|
-
## No raw color values for status/state indicators
|
|
40
|
-
|
|
41
|
-
For positive, negative, or status indicators, use Badge variants, semantic tokens like `text-destructive`, or define custom CSS variables — don't reach for raw Tailwind colors.
|
|
42
|
-
|
|
43
|
-
**Incorrect:**
|
|
44
|
-
|
|
45
|
-
```svelte
|
|
46
|
-
<span class="text-emerald-600">+20.1%</span>
|
|
47
|
-
<span class="text-green-500">Active</span>
|
|
48
|
-
<span class="text-red-600">-3.2%</span>
|
|
49
|
-
```
|
|
50
|
-
|
|
51
|
-
**Correct:**
|
|
52
|
-
|
|
53
|
-
```svelte
|
|
54
|
-
<script lang="ts">
|
|
55
|
-
import { Badge } from "$lib/components/ui/badge";
|
|
56
|
-
</script>
|
|
57
|
-
|
|
58
|
-
<Badge variant="secondary">+20.1%</Badge>
|
|
59
|
-
<Badge>Active</Badge>
|
|
60
|
-
<span class="text-destructive">-3.2%</span>
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
If you need a success/positive color that doesn't exist as a semantic token, use a Badge variant or ask the user about adding a custom CSS variable to the theme (see [customization.md](../customization.md)).
|
|
64
|
-
|
|
65
|
-
---
|
|
66
|
-
|
|
67
|
-
## Built-in variants first
|
|
68
|
-
|
|
69
|
-
**Incorrect:**
|
|
70
|
-
|
|
71
|
-
```svelte
|
|
72
|
-
<script lang="ts">
|
|
73
|
-
import { Button } from "$lib/components/ui/button";
|
|
74
|
-
</script>
|
|
75
|
-
|
|
76
|
-
<Button class="border-input hover:bg-accent border bg-transparent"
|
|
77
|
-
>Click me</Button
|
|
78
|
-
>
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
**Correct:**
|
|
82
|
-
|
|
83
|
-
```svelte
|
|
84
|
-
<script lang="ts">
|
|
85
|
-
import { Button } from "$lib/components/ui/button";
|
|
86
|
-
</script>
|
|
87
|
-
|
|
88
|
-
<Button variant="outline">Click me</Button>
|
|
89
|
-
```
|
|
90
|
-
|
|
91
|
-
---
|
|
92
|
-
|
|
93
|
-
## class for layout only
|
|
94
|
-
|
|
95
|
-
Use `class` for layout (e.g. `max-w-md`, `mx-auto`, `mt-4`), **not** for overriding component colors or typography. To change colors, use semantic tokens, built-in variants, or CSS variables.
|
|
96
|
-
|
|
97
|
-
**Incorrect:**
|
|
98
|
-
|
|
99
|
-
```svelte
|
|
100
|
-
<script lang="ts">
|
|
101
|
-
import * as Card from "$lib/components/ui/card";
|
|
102
|
-
</script>
|
|
103
|
-
|
|
104
|
-
<Card.Root class="bg-blue-100 font-bold text-blue-900">
|
|
105
|
-
<Card.Content>Dashboard</Card.Content>
|
|
106
|
-
</Card.Root>
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
**Correct:**
|
|
110
|
-
|
|
111
|
-
```svelte
|
|
112
|
-
<script lang="ts">
|
|
113
|
-
import * as Card from "$lib/components/ui/card";
|
|
114
|
-
</script>
|
|
115
|
-
|
|
116
|
-
<Card.Root class="mx-auto max-w-md">
|
|
117
|
-
<Card.Content>Dashboard</Card.Content>
|
|
118
|
-
</Card.Root>
|
|
119
|
-
```
|
|
120
|
-
|
|
121
|
-
To customize a component's appearance, prefer these approaches in order:
|
|
122
|
-
|
|
123
|
-
1. **Built-in variants** — `variant="outline"`, `variant="destructive"`, etc.
|
|
124
|
-
2. **Semantic color tokens** — `bg-primary`, `text-muted-foreground`.
|
|
125
|
-
3. **CSS variables** — define custom colors in the global CSS file (see [customization.md](../customization.md)).
|
|
126
|
-
|
|
127
|
-
---
|
|
128
|
-
|
|
129
|
-
## No space-x-_ / space-y-_
|
|
130
|
-
|
|
131
|
-
Use `gap-*` instead. `space-y-4` → `flex flex-col gap-4`. `space-x-2` → `flex gap-2`.
|
|
132
|
-
|
|
133
|
-
```svelte
|
|
134
|
-
<script lang="ts">
|
|
135
|
-
import { Input } from "$lib/components/ui/input";
|
|
136
|
-
import { Button } from "$lib/components/ui/button";
|
|
137
|
-
</script>
|
|
138
|
-
|
|
139
|
-
<div class="flex flex-col gap-4">
|
|
140
|
-
<Input />
|
|
141
|
-
<Input />
|
|
142
|
-
<Button>Submit</Button>
|
|
143
|
-
</div>
|
|
144
|
-
```
|
|
145
|
-
|
|
146
|
-
---
|
|
147
|
-
|
|
148
|
-
## Prefer size-_ over w-_ h-\* when equal
|
|
149
|
-
|
|
150
|
-
`size-10` not `w-10 h-10`. Applies to icons, avatars, skeletons, etc.
|
|
151
|
-
|
|
152
|
-
---
|
|
153
|
-
|
|
154
|
-
## Prefer truncate shorthand
|
|
155
|
-
|
|
156
|
-
`truncate` not `overflow-hidden text-ellipsis whitespace-nowrap`.
|
|
157
|
-
|
|
158
|
-
---
|
|
159
|
-
|
|
160
|
-
## No manual dark: color overrides
|
|
161
|
-
|
|
162
|
-
Use semantic tokens — they handle light/dark via CSS variables. `bg-background text-foreground` not `bg-white dark:bg-gray-950`.
|
|
163
|
-
|
|
164
|
-
---
|
|
165
|
-
|
|
166
|
-
## Use cn() for conditional classes
|
|
167
|
-
|
|
168
|
-
Use the `cn()` utility from the project for conditional or merged class names. Don't write manual ternaries in `class` strings.
|
|
169
|
-
|
|
170
|
-
**Incorrect:**
|
|
171
|
-
|
|
172
|
-
```svelte
|
|
173
|
-
<script lang="ts">
|
|
174
|
-
let isActive = $state(false);
|
|
175
|
-
</script>
|
|
176
|
-
|
|
177
|
-
<div class={`flex items-center ${isActive ? "bg-primary text-primary-foreground" : "bg-muted"}`}>
|
|
178
|
-
```
|
|
179
|
-
|
|
180
|
-
**Correct:**
|
|
181
|
-
|
|
182
|
-
```svelte
|
|
183
|
-
<script lang="ts">
|
|
184
|
-
import { cn } from "$lib/utils";
|
|
185
|
-
let isActive = $state(false);
|
|
186
|
-
</script>
|
|
187
|
-
|
|
188
|
-
<div class={cn("flex items-center", isActive ? "bg-primary text-primary-foreground" : "bg-muted")}>
|
|
189
|
-
```
|
|
190
|
-
|
|
191
|
-
---
|
|
192
|
-
|
|
193
|
-
## No manual z-index on overlay components
|
|
194
|
-
|
|
195
|
-
`Dialog`, `Sheet`, `Drawer`, `AlertDialog`, `DropdownMenu`, `Popover`, `Tooltip`, `HoverCard` handle their own stacking. Never add `z-50` or `z-[999]`.
|
|
@@ -1,169 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: svas
|
|
3
|
-
description: >
|
|
4
|
-
Async Svelte stores (svas): fetching, caching, revalidation, persistence.
|
|
5
|
-
Use when UI presents data from the API.
|
|
6
|
-
---
|
|
7
|
-
|
|
8
|
-
# svas — Svelte Async Stores
|
|
9
|
-
|
|
10
|
-
Stores that fetch lazily, cache, revalidate, and persist. Every store emits one of three types:
|
|
11
|
-
|
|
12
|
-
```ts
|
|
13
|
-
type Maybe<T, E extends Error = Error> = null | T | E
|
|
14
|
-
// null → no data yet (loading / cleared / not fetched)
|
|
15
|
-
// T → resolved value
|
|
16
|
-
// E → fetch error (errors are values, never thrown)
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
```ts
|
|
20
|
-
import {
|
|
21
|
-
value, values, collection, // stores
|
|
22
|
-
ok, ensure, having, awaited, once, // guards & awaiting
|
|
23
|
-
combined, sync, Async, // compose & render
|
|
24
|
-
type Maybe
|
|
25
|
-
} from 'svas'
|
|
26
|
-
```
|
|
27
|
-
|
|
28
|
-
## Shared lifecycle
|
|
29
|
-
|
|
30
|
-
Every store fetches on **first subscribe**, then auto-revalidates. Common options:
|
|
31
|
-
|
|
32
|
-
| Option | Meaning |
|
|
33
|
-
|--------|---------|
|
|
34
|
-
| `get` | fetcher returning `Promise<T \| Error>` |
|
|
35
|
-
| `revalidate` | ms before re-fetch (default `300_000`; `Infinity` disables) |
|
|
36
|
-
| `persist` | mirror into local storage under this key |
|
|
37
|
-
| `session` | use `sessionStorage` instead of `localStorage` |
|
|
38
|
-
| `stale` | keep previous value visible while revalidating (default `false`) |
|
|
39
|
-
| `bind` | `Readable<unknown \| null>` — reset/clear store when bound store is `null` (tie data to a user) |
|
|
40
|
-
| `default` | initial value when nothing is persisted |
|
|
41
|
-
|
|
42
|
-
## Stores
|
|
43
|
-
|
|
44
|
-
All stores implements Readable interface from svelte/store.
|
|
45
|
-
|
|
46
|
-
Use `persist` whenever it makes sense to persist the data, it will vastly speed up the initial load.
|
|
47
|
-
If store contains user-bound data, use `bind` to reset the store when the user is logged out.
|
|
48
|
-
|
|
49
|
-
### `value<T>` — one async value
|
|
50
|
-
|
|
51
|
-
`Writable<T | null>`. For single fetched values, auth tokens, transient UI flags.
|
|
52
|
-
|
|
53
|
-
```ts
|
|
54
|
-
const me = value<User>({ get: () => api.me(), persist: 'user' })
|
|
55
|
-
const seen = value<number>({ persist: 'seen', default: 0 }) // transient/local-only
|
|
56
|
-
```
|
|
57
|
-
|
|
58
|
-
Methods: `set(v)`, `update(fn)`, `extract(): T | null` (sync read), `sync()` (revalidate if stale).
|
|
59
|
-
|
|
60
|
-
### `values<T>` — keyed cache
|
|
61
|
-
|
|
62
|
-
A map of independent `Readable<Maybe<T>>` lifecycles, one per key.
|
|
63
|
-
|
|
64
|
-
```ts
|
|
65
|
-
const products = values<Product>({ get: (id) => api.product(id), stale: true, persist: 'products' })
|
|
66
|
-
|
|
67
|
-
const one = products.get('42') // Readable<Maybe<Product>>, fetches if missing
|
|
68
|
-
products.set('42', next) // write by key
|
|
69
|
-
products.extract('42') // Product | null, sync
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
Methods: `get(key, { fetch? })` · `set(key, v, { stash? })` · `reset(key)` (restore stashed value) · `extract(key)` · `delete(key)` · `clear()`.
|
|
73
|
-
|
|
74
|
-
Extra options: `permanent` (don't revalidate persisted entries on startup). `stash: true` on `set` remembers the prior persisted value so `reset(key)` can roll back — use for optimistic updates.
|
|
75
|
-
|
|
76
|
-
### `collection<T>` — list of `Identifiable` items
|
|
77
|
-
|
|
78
|
-
`Readable<Maybe<T[]>>`. Items must have `{ id: string }`. Pass a `values` store to also observe items individually via `get(id)`.
|
|
79
|
-
|
|
80
|
-
```ts
|
|
81
|
-
const todos = collection<Todo>({
|
|
82
|
-
get: () => api.todos(),
|
|
83
|
-
values: values<Todo>(), // enables todos.get(id) / extract(id)
|
|
84
|
-
stale: true,
|
|
85
|
-
persist: 'todos',
|
|
86
|
-
bind: session
|
|
87
|
-
})
|
|
88
|
-
```
|
|
89
|
-
|
|
90
|
-
Methods: `subscribe` · `add(item)` · `set(item, { add? })` (replace by id; `add` inserts if absent) · `update(id, fn, opts?)` · `delete(id)` · `replace(items)` · `get(id)`/`extract(id)` (require `values`) · `sync(): this` · `fetch(): Promise<this>`.
|
|
91
|
-
|
|
92
|
-
Mutations mirror into the `values` store, so components subscribed via `get(id)` update without re-fetching.
|
|
93
|
-
|
|
94
|
-
## Guards & extraction
|
|
95
|
-
|
|
96
|
-
Never use `?.` on a `Maybe<T>` — an `Error` has no domain properties. Narrow first.
|
|
97
|
-
|
|
98
|
-
```ts
|
|
99
|
-
ok($store) // boolean type guard: narrows Maybe<T> → T (excludes null | Error)
|
|
100
|
-
ensure(store) // sync read, THROWS if null/Error — use when value must exist now (e.g. unsafe net requests in response to user action)
|
|
101
|
-
store.extract(key?) // sync read, T | null (ignores errors) — never throws
|
|
102
|
-
```
|
|
103
|
-
|
|
104
|
-
```ts
|
|
105
|
-
if (ok($todos)) $todos.length // typed as T
|
|
106
|
-
items.filter((i) => ok(i.account) && !i.account.deleted) // ✅ guard before access
|
|
107
|
-
```
|
|
108
|
-
|
|
109
|
-
## Awaiting
|
|
110
|
-
|
|
111
|
-
```ts
|
|
112
|
-
await having(store) // first non-null value; REJECTS on Error — services needing auth
|
|
113
|
-
await awaited(store) // first non-null value; returns Error as a value (never rejects)
|
|
114
|
-
await once(store, (v) => v === 'ready') // first value satisfying a condition
|
|
115
|
-
```
|
|
116
|
-
|
|
117
|
-
## Compose & render
|
|
118
|
-
|
|
119
|
-
### `<Async>` — render a `Maybe`
|
|
120
|
-
|
|
121
|
-
```svelte
|
|
122
|
-
<Async store={todos}>
|
|
123
|
-
{#snippet awaited(todos)}
|
|
124
|
-
<!-- here todos are T[] -->
|
|
125
|
-
{#each todos as t}<Row {t} />{/each}
|
|
126
|
-
{/snippet}
|
|
127
|
-
{#snippet waiting()}<Spinner />{/snippet} <!-- optional; default loader otherwise -->
|
|
128
|
-
{#snippet error(e)}<Err {e} />{/snippet} <!-- optional; default error UI otherwise -->
|
|
129
|
-
</Async>
|
|
130
|
-
```
|
|
131
|
-
|
|
132
|
-
Props: `store` (required), `awaited` snippet (required), optional `waiting` / `error` snippets, `silent` (suppress default loader/error chrome). Combine with `combined` to await several at once.
|
|
133
|
-
|
|
134
|
-
### `combined(...stores)`
|
|
135
|
-
|
|
136
|
-
One `Maybe` from many: tuple when **all** resolve, first `Error`, else `null`. Spreadable.
|
|
137
|
-
|
|
138
|
-
```svelte
|
|
139
|
-
<Async store={combined(account, todos)}>
|
|
140
|
-
{#snippet awaited([account, todos])}
|
|
141
|
-
<!-- here account is U and todos is T[] -->
|
|
142
|
-
<Profile {account} />
|
|
143
|
-
{#each todos as t}<Row {t} />{/each}
|
|
144
|
-
{/snippet}
|
|
145
|
-
</Async>
|
|
146
|
-
```
|
|
147
|
-
|
|
148
|
-
### `sync(store, item, { delete? })`
|
|
149
|
-
|
|
150
|
-
Conflict-free update.
|
|
151
|
-
|
|
152
|
-
T must implement interface Comparable { id: string; _version: number;_deleted?: number | null }
|
|
153
|
-
|
|
154
|
-
Merge a versioned item into a `collection` or `value`, respecting `_version`; removes on `_deleted` (unless `delete: false`). For applying server/realtime events.
|
|
155
|
-
|
|
156
|
-
```ts
|
|
157
|
-
events.on('todos.sync', (todo) => sync(todos, todo))
|
|
158
|
-
```
|
|
159
|
-
|
|
160
|
-
## Rules
|
|
161
|
-
|
|
162
|
-
- **Errors are values** — fetchers and services return `T | Error`; check `instanceof Error`, never `try/catch` for expected failures.
|
|
163
|
-
- **Guard before access** — `ok()`/`ensure()`/`extract()`, never `?.` on `Maybe<T>`.
|
|
164
|
-
- **One store per source** — derive everything else; don't duplicate fetched data into local state.
|
|
165
|
-
- **Lazy by design** — a store does nothing until subscribed; `$store`, `<Async>`, `get`, `having`, or `.subscribe` triggers it.
|
|
166
|
-
|
|
167
|
-
## Advanced
|
|
168
|
-
|
|
169
|
-
For derived `Maybe` stores with live subscriptions/cleanup, realtime event wiring, linked/enriched entities, and optimistic update patterns, see [references/patterns.md](references/patterns.md).
|
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
# svas — advanced patterns
|
|
2
|
-
|
|
3
|
-
Idioms for non-trivial usage. All build on `Maybe<T> = null | T | Error` and the `ok()` guard.
|
|
4
|
-
|
|
5
|
-
## Derived `Maybe` stores
|
|
6
|
-
|
|
7
|
-
Compute one async store from others with `svelte/store`'s `derived`. Forward `null`/`Error` early, and return a cleanup function when you subscribe to linked entities.
|
|
8
|
-
|
|
9
|
-
```ts
|
|
10
|
-
const internal = collection<Item>({ get: () => api.get(), persist: 'items' })
|
|
11
|
-
|
|
12
|
-
export const items = derived<[typeof internal, typeof me], Maybe<Item[]>>(
|
|
13
|
-
[list, me],
|
|
14
|
-
([$list, $me], set, update) => {
|
|
15
|
-
if (!ok($list)) return set($list) // forward loading/error verbatim
|
|
16
|
-
if (!ok($me)) return set($me)
|
|
17
|
-
|
|
18
|
-
const items = $list.map((i) => map(i, $me.id))
|
|
19
|
-
set(items)
|
|
20
|
-
|
|
21
|
-
// live updates: re-emit when a linked entity changes
|
|
22
|
-
const unsubs = items.map((item) =>
|
|
23
|
-
accounts.get(item.owner).subscribe((account) =>
|
|
24
|
-
update((items) => {
|
|
25
|
-
if (!ok(items) || !ok(account)) return items
|
|
26
|
-
const i = items.findIndex((v) => v.owner === account.id)
|
|
27
|
-
if (i < 0) return items
|
|
28
|
-
items[i] = { ...items[i], account }
|
|
29
|
-
return items
|
|
30
|
-
})
|
|
31
|
-
)
|
|
32
|
-
)
|
|
33
|
-
|
|
34
|
-
return () => unsubs.forEach((u) => u()) // cleanup on unsubscribe
|
|
35
|
-
}
|
|
36
|
-
)
|
|
37
|
-
```
|
|
38
|
-
|
|
39
|
-
Key moves: `if (!ok(x)) return set(x)` to forward non-resolved states, `update()` for incremental edits, return a teardown for any subscriptions you open.
|
|
40
|
-
|
|
41
|
-
## Realtime event wiring
|
|
42
|
-
|
|
43
|
-
> Usually used with antcn/@realtime
|
|
44
|
-
|
|
45
|
-
Apply server events into stores with `sync` (collections/values-backed) or `.set` (standalone `values`). Mutating functions sync their own result so the optimistic and authoritative paths converge.
|
|
46
|
-
|
|
47
|
-
```ts
|
|
48
|
-
// collection backed by a values side store
|
|
49
|
-
events.on('todos.sync', (todo) => sync(todos, todo))
|
|
50
|
-
|
|
51
|
-
// standalone values map
|
|
52
|
-
events.on('accounts.sync', (a) => accounts.set(a.id, a))
|
|
53
|
-
|
|
54
|
-
export async function add(input: Input): Promise<Todo | Error> {
|
|
55
|
-
const me = await having(account) // wait for auth
|
|
56
|
-
const res = await net.add(me.id, input)
|
|
57
|
-
if (res instanceof Error) return res // error as value
|
|
58
|
-
sync(todos, res) // merge authoritative result
|
|
59
|
-
return res
|
|
60
|
-
}
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
## Linked / enriched entities
|
|
64
|
-
|
|
65
|
-
Join a network type with domain data. Use `.extract()` for a sync snapshot at map time; subscribe via `.get()` inside derived stores for live enrichment.
|
|
66
|
-
|
|
67
|
-
```ts
|
|
68
|
-
export interface Contact extends net.Contact {
|
|
69
|
-
account: Maybe<Account>
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
export function map(entry: net.Contact): Contact {
|
|
73
|
-
return { ...entry, account: accounts.extract(entry.owner) } // sync snapshot
|
|
74
|
-
}
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
Hold a `Maybe<T>` per link; never reach through it with `?.` — guard with `ok()` before use. For many links, `Record<string, Maybe<T>>` keyed by id.
|
|
78
|
-
|
|
79
|
-
## Optimistic updates with rollback
|
|
80
|
-
|
|
81
|
-
`values.set(key, v, { stash: true })` remembers the prior persisted value; `reset(key)` restores it if the request fails.
|
|
82
|
-
|
|
83
|
-
```ts
|
|
84
|
-
products.update(id, (product) => ({ ...product, ...properties }))
|
|
85
|
-
|
|
86
|
-
const res = await net.patch(id, properties)
|
|
87
|
-
|
|
88
|
-
if (res instanceof Error) return res
|
|
89
|
-
else sync(products, res)
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
## `ensure` vs `having`
|
|
93
|
-
|
|
94
|
-
- `ensure(store)` — **sync**, throws if `null`/`Error`. Use when the value must already exist (auth checks inside service functions called in response to user action).
|
|
95
|
-
- `await having(store)` — **async**, waits for a resolved value, rejects on `Error`. Use at init time when the value may still be loading (initial data fetching when app is starting).
|
|
@@ -1,176 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: svintl
|
|
3
|
-
description: >
|
|
4
|
-
svintl CLI for i18n — translations, locales, pluralization, mounts, building typed dictionaries. Triggers on `npx intl`, YAML locale files, intl directories, or any translation/i18n work in Svelte projects.
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
# svintl — i18n for Svelte
|
|
8
|
-
|
|
9
|
-
CLI tool for managing internationalization dictionaries with automatic translation via OpenAI.
|
|
10
|
-
|
|
11
|
-
## Core Rule
|
|
12
|
-
|
|
13
|
-
The `*.yaml`, `built.js`, and `types.ts` files in intl directories are generated — they're edited through the `npx intl` CLI, not by hand.
|
|
14
|
-
|
|
15
|
-
## CLI Commands
|
|
16
|
-
|
|
17
|
-
```bash
|
|
18
|
-
npx intl hola # init dictionaries (default: src/lib/intl/)
|
|
19
|
-
npx intl hola -p ./custom/path # init at custom path
|
|
20
|
-
npx intl add key.path "Value" "context" # add a new key — fails if it already exists; context optional
|
|
21
|
-
npx intl set key.path "Updated value" # update a key that already exists — fails if missing
|
|
22
|
-
npx intl set "mount/key.path" "Value" # target a mount with the mount/ prefix
|
|
23
|
-
npx intl add key.path "Value" --debug # --debug (add or set): print the OpenAI request first
|
|
24
|
-
npx intl const key.path "Same everywhere" # same value across all locales (no translation)
|
|
25
|
-
npx intl unit items.count "item" # pluralized entry (auto-generates plural forms)
|
|
26
|
-
npx intl move old.key new.key # rename key/branch
|
|
27
|
-
npx intl del key.path # delete key/branch
|
|
28
|
-
npx intl create es # add a locale (BCP 47 tag) — auto-translates the whole dictionary into it
|
|
29
|
-
npx intl destroy es # delete locale
|
|
30
|
-
npx intl mount foo ./any/path # create empty mount
|
|
31
|
-
npx intl import foo ./any/path # adopt existing dict dir as mount, reconcile locales
|
|
32
|
-
npx intl unmount foo # remove mount (keeps files)
|
|
33
|
-
npx intl context "Project description" # set project-wide translation guidance
|
|
34
|
-
npx intl context --clear # clear project context
|
|
35
|
-
npx intl genders he she none # enable gender-aware translations (list the gender values)
|
|
36
|
-
npx intl genders # print current gender values
|
|
37
|
-
npx intl sync en key.path # reconcile: re-translate one key into all locales from source en
|
|
38
|
-
npx intl sync en # reconcile: re-translate the whole dictionary from source en
|
|
39
|
-
npx intl build # rebuild JS/TS from YAML
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
## Dictionary Format
|
|
43
|
-
|
|
44
|
-
YAML with arbitrary nesting, strings at leaves:
|
|
45
|
-
|
|
46
|
-
```yaml
|
|
47
|
-
native: English
|
|
48
|
-
example:
|
|
49
|
-
hello: "Hello world"
|
|
50
|
-
```
|
|
51
|
-
|
|
52
|
-
Usage: `{$dict.example.hello}`
|
|
53
|
-
|
|
54
|
-
### Dynamic Values — Placeholders
|
|
55
|
-
|
|
56
|
-
For simple cases the CLI auto-generates `!js` functions from placeholder syntax — no need to write them manually:
|
|
57
|
-
|
|
58
|
-
```bash
|
|
59
|
-
npx intl set greeting "Hello, {name}!" # {name} → function param
|
|
60
|
-
npx intl set joined "[names] joined {groupName}" # [names] → Intl.ListFormat
|
|
61
|
-
```
|
|
62
|
-
|
|
63
|
-
For complex logic, pass `!js` functions via `intl set`:
|
|
64
|
-
|
|
65
|
-
```bash
|
|
66
|
-
npx intl set greeting '!js (count) => `${count || "No"} item${count === 1 ? "" : "s"}`'
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
Usage in components: `{$dict.greeting(user.name)}`
|
|
70
|
-
|
|
71
|
-
**Keep the whole phrase in the dictionary.** Never split a sentence around a dynamic value in the template:
|
|
72
|
-
|
|
73
|
-
```svelte
|
|
74
|
-
<!-- ❌ Wrong: breaks the phrase for translators -->
|
|
75
|
-
<strong>{brand}</strong>{$dict.form.destroyDescription}
|
|
76
|
-
|
|
77
|
-
<!-- ✅ Right: one entry, function accepts the value -->
|
|
78
|
-
{@html $dict.form.destroyDescription(brand)}
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
```bash
|
|
82
|
-
npx intl set "apps/form.destroyDescription" \
|
|
83
|
-
'!js (brand) => `<strong>${brand}</strong> and all accumulated data will be permanently deleted.`'
|
|
84
|
-
```
|
|
85
|
-
|
|
86
|
-
When a name needs markup and is always at the start of the phrase across languages, put the tags inside the `!js` function and render with `{@html}` — escape user-controlled values before passing them in.
|
|
87
|
-
|
|
88
|
-
### Pluralization
|
|
89
|
-
|
|
90
|
-
Use `npx intl unit` — generates `Intl.PluralRules`-based functions:
|
|
91
|
-
|
|
92
|
-
```bash
|
|
93
|
-
npx intl unit items.count "item"
|
|
94
|
-
```
|
|
95
|
-
|
|
96
|
-
Produces:
|
|
97
|
-
```yaml
|
|
98
|
-
items:
|
|
99
|
-
count:
|
|
100
|
-
- one: item
|
|
101
|
-
other: items
|
|
102
|
-
```
|
|
103
|
-
|
|
104
|
-
Usage: `{$dict.items.count(count)}`
|
|
105
|
-
|
|
106
|
-
Complex locales (Russian, Arabic) auto-get `few`, `many`, etc.
|
|
107
|
-
|
|
108
|
-
### Genders
|
|
109
|
-
|
|
110
|
-
When enabled (`npx intl genders he she none`), gender-dependent phrases become functions whose **last** argument is the gender (`'he' | 'she' | 'none'`) — the phrase's own arguments come first, e.g. `(name, gender) => …`. The listed values become the generated `Grammar` union.
|
|
111
|
-
|
|
112
|
-
## Mounts
|
|
113
|
-
|
|
114
|
-
Organize translations into separate directories:
|
|
115
|
-
|
|
116
|
-
```bash
|
|
117
|
-
npx intl mount admin ./src/features/admin/intl
|
|
118
|
-
npx intl set "admin/dashboard.title" "Admin Dashboard"
|
|
119
|
-
```
|
|
120
|
-
|
|
121
|
-
Mount keys use `{mount}/` prefix in CLI commands.
|
|
122
|
-
|
|
123
|
-
`mount` scaffolds an empty mount; `import` adopts a populated dir (with its own `context.yaml`) and reconciles its locales to the root — drops languages the root lacks, generates ones it lacks (translating the imported `inputs`), leaves shared locales untouched.
|
|
124
|
-
|
|
125
|
-
## Import Pattern
|
|
126
|
-
|
|
127
|
-
**Root dictionary:**
|
|
128
|
-
```svelte
|
|
129
|
-
<script lang="ts">
|
|
130
|
-
import { dict, locale } from '$lib/intl'
|
|
131
|
-
</script>
|
|
132
|
-
<h1>{$dict.example.hello}</h1>
|
|
133
|
-
```
|
|
134
|
-
|
|
135
|
-
**Mount dictionary:**
|
|
136
|
-
```svelte
|
|
137
|
-
<script lang="ts">
|
|
138
|
-
import { dict } from './intl'
|
|
139
|
-
</script>
|
|
140
|
-
<h1>{$dict.dashboard.title}</h1>
|
|
141
|
-
```
|
|
142
|
-
|
|
143
|
-
**Mount's `intl/index.ts`:**
|
|
144
|
-
```typescript
|
|
145
|
-
import { derived } from 'svelte/store'
|
|
146
|
-
import { locale } from '$lib/intl'
|
|
147
|
-
import { dictionaries } from './built.js'
|
|
148
|
-
import type { Locale, Dictionary } from './types'
|
|
149
|
-
|
|
150
|
-
const dict = derived(locale, ($locale) => dictionaries[$locale])
|
|
151
|
-
export { dict, dictionaries, locale }
|
|
152
|
-
export type { Locale, Dictionary }
|
|
153
|
-
```
|
|
154
|
-
|
|
155
|
-
## Context for Translation Accuracy
|
|
156
|
-
|
|
157
|
-
```bash
|
|
158
|
-
npx intl set app.welcome "Welcome" "greeting shown on homepage"
|
|
159
|
-
npx intl context "B2B SaaS for enterprise users"
|
|
160
|
-
```
|
|
161
|
-
|
|
162
|
-
Context is stored in `context.yaml` and used by OpenAI when creating new locales.
|
|
163
|
-
|
|
164
|
-
## Workflow
|
|
165
|
-
|
|
166
|
-
1. Use `npx intl add/set/unit/const` to add/update translations
|
|
167
|
-
2. Run `npx intl build` to generate JS/TS (often auto-runs)
|
|
168
|
-
3. Import `dict` store in components
|
|
169
|
-
4. Use `$dict.key.path` in templates
|
|
170
|
-
|
|
171
|
-
## Avoid
|
|
172
|
-
|
|
173
|
-
- **Editing YAML by hand** — go through the CLI
|
|
174
|
-
- **`npx intl sync` for routine edits** — it's only for reconciling after a manual source edit; use `add`/`set` instead
|
|
175
|
-
- **Non-BCP47 locale codes** — use valid tags like `en-US`, `es`, `pt-BR`
|
|
176
|
-
- **Splitting phrases in the template** — don't concatenate a dynamic value with a dictionary suffix/prefix; use one `{placeholder}` / `!js` entry for the full sentence
|
package/ui/.claude/settings.json
DELETED
package/ui/.codex/hooks.json
DELETED
package/ui/.cursor/hooks.json
DELETED
package/ui/.env.example
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
OPENAI_API_KEY=<put your openai api key here>
|