@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,36 +0,0 @@
|
|
|
1
|
-
# Shake
|
|
2
|
-
|
|
3
|
-
## Notes
|
|
4
|
-
|
|
5
|
-
Use for obvious failures on small forms where error copy adds little value — e.g. a wrong password is already clear from context. Prefer a real error message when the user needs to know *what* went wrong.
|
|
6
|
-
|
|
7
|
-
## Usage
|
|
8
|
-
|
|
9
|
-
```svelte
|
|
10
|
-
<script lang="ts">
|
|
11
|
-
import { Shake } from '$com/shake'
|
|
12
|
-
|
|
13
|
-
let shake: { shake: () => Promise<void> } | undefined = $state()
|
|
14
|
-
</script>
|
|
15
|
-
|
|
16
|
-
<Shake bind:this={shake} class="w-full">
|
|
17
|
-
<input type="password" />
|
|
18
|
-
</Shake>
|
|
19
|
-
|
|
20
|
-
<button onclick={() => shake?.shake()}>Retry</button>
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
## Props
|
|
24
|
-
|
|
25
|
-
| Prop | Type | Default | Notes |
|
|
26
|
-
| ---------- | ------------ | ------- | ------------------------------ |
|
|
27
|
-
| `children` | `Snippet` | — | Content that shakes. |
|
|
28
|
-
| `class` | `ClassValue` | — | Classes on the wrapper `div`. |
|
|
29
|
-
|
|
30
|
-
## Instance methods
|
|
31
|
-
|
|
32
|
-
Bind with `bind:this` to trigger the animation:
|
|
33
|
-
|
|
34
|
-
| Method | Notes |
|
|
35
|
-
| ---------- | ------------------------------------------ |
|
|
36
|
-
| `shake()` | Plays the shake; resolves when it finishes. |
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
# Share
|
|
2
|
-
|
|
3
|
-
Invokes the Web Share API when `navigator.share` exists; otherwise renders `Clipboard` with the share URL so desktop users can still copy the link.
|
|
4
|
-
|
|
5
|
-
`data` may be a `ShareData` object or an async retriever (e.g. fetch an invite URL first). Returns early when the retriever resolves to `null`.
|
|
6
|
-
|
|
7
|
-
## Usage
|
|
8
|
-
|
|
9
|
-
```svelte
|
|
10
|
-
<script lang="ts">
|
|
11
|
-
import { Share } from '$com/share'
|
|
12
|
-
|
|
13
|
-
const data = { title: 'Join me', url: 'https://example.com/join/abc' }
|
|
14
|
-
</script>
|
|
15
|
-
|
|
16
|
-
<Share {data} label="Share invite" variant="outline" />
|
|
17
|
-
```
|
|
18
|
-
|
|
19
|
-
## Props
|
|
20
|
-
|
|
21
|
-
| Prop | Type | Default | Notes |
|
|
22
|
-
| --------- | ----------------------------------------- | ------- | ------------------------------------------------------------ |
|
|
23
|
-
| `data` | `ShareData \| () => Promise<ShareData \| null>` | — | Payload for `navigator.share`. Retriever may return `null`. |
|
|
24
|
-
| `label` | `string` | — | Button label when no `children` snippet. |
|
|
25
|
-
| `onshare` | `() => void` | — | Fires after share (or clipboard fallback copy). |
|
|
26
|
-
| `children`| `Snippet` | — | Custom button content; replaces icon + label. |
|
|
27
|
-
|
|
28
|
-
All other props pass through to the underlying `Button` (or `Clipboard` on unsupported browsers).
|
|
@@ -1,139 +0,0 @@
|
|
|
1
|
-
# Shell
|
|
2
|
-
|
|
3
|
-
## Notes
|
|
4
|
-
|
|
5
|
-
`Screen` and `Nav` lay out against `env(safe-area-inset-*)`, which stays zero unless the viewport opts in. Add `viewport-fit=cover` to the viewport meta in `src/app.html`:
|
|
6
|
-
|
|
7
|
-
```html
|
|
8
|
-
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover" />
|
|
9
|
-
```
|
|
10
|
-
|
|
11
|
-
Safari 26 on iOS also keeps its bottom toolbar translucent only while page content reaches the bottom edge — `Nav` holds itself 6px above it for that.
|
|
12
|
-
|
|
13
|
-
## Usage
|
|
14
|
-
|
|
15
|
-
Root layout with section nav:
|
|
16
|
-
|
|
17
|
-
```svelte
|
|
18
|
-
<script lang="ts">
|
|
19
|
-
import { Screen, Nav, type Section } from '$com/shell'
|
|
20
|
-
import { House } from '@lucide/svelte'
|
|
21
|
-
|
|
22
|
-
const sections: Section[] = [
|
|
23
|
-
{ id: 'home', href: '/', label: 'Home', Icon: House },
|
|
24
|
-
]
|
|
25
|
-
|
|
26
|
-
let { children } = $props()
|
|
27
|
-
</script>
|
|
28
|
-
|
|
29
|
-
<Screen>
|
|
30
|
-
{@render children()}
|
|
31
|
-
<Nav {sections} underlay />
|
|
32
|
-
</Screen>
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
Nested route — show back instead of tabs:
|
|
36
|
-
|
|
37
|
-
```svelte
|
|
38
|
-
<script lang="ts">
|
|
39
|
-
import { Return } from '$com/shell'
|
|
40
|
-
</script>
|
|
41
|
-
|
|
42
|
-
<Return href=".." />
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
## `back` / `jump`
|
|
46
|
-
|
|
47
|
-
History-aware navigation for nested routes and editors. Both use the [Navigation API](https://developer.mozilla.org/en-US/docs/Web/API/Navigation_API) session stack; when the stack cannot satisfy the request, they fall back to SvelteKit `goto(href)`.
|
|
48
|
-
|
|
49
|
-
**Why not plain `goto`?** A SPA that pushes a new history entry on every screen builds a long back chain. Users expect Back to undo their recent steps (and to keep scroll position / in-app transitions). `back` and `jump` prefer real history moves so the browser — and your shell — behave like a native app.
|
|
50
|
-
|
|
51
|
-
### `back(href)`
|
|
52
|
-
|
|
53
|
-
Go back one step when possible; otherwise navigate to `href`.
|
|
54
|
-
|
|
55
|
-
Use when closing a nested screen, cancelling an editor, or deleting an item — anywhere `<Return href="…" />` would go, but triggered from code:
|
|
56
|
-
|
|
57
|
-
```svelte
|
|
58
|
-
<script lang="ts">
|
|
59
|
-
import { back } from '$com/shell'
|
|
60
|
-
|
|
61
|
-
async function onDelete() {
|
|
62
|
-
await deleteItem(id)
|
|
63
|
-
await back(`/items/${parentId}/`)
|
|
64
|
-
}
|
|
65
|
-
</script>
|
|
66
|
-
```
|
|
67
|
-
|
|
68
|
-
If the user landed via deep link (nothing to pop), `back` opens `href` instead of doing nothing.
|
|
69
|
-
|
|
70
|
-
### `jump(href)`
|
|
71
|
-
|
|
72
|
-
Return to a URL already visited earlier in this session — without pushing another entry.
|
|
73
|
-
|
|
74
|
-
Walks the session history backwards, finds the nearest prior entry whose path matches `href`, and calls `history.go(-n)`. If no match (or the match is too far back), falls back to `goto(href)`.
|
|
75
|
-
|
|
76
|
-
Use after save/complete when the target list or detail page is already on the stack — e.g. editor → save → land on the list the user came from, skipping intermediate steps:
|
|
77
|
-
|
|
78
|
-
```svelte
|
|
79
|
-
<script lang="ts">
|
|
80
|
-
import { jump } from '$com/shell'
|
|
81
|
-
|
|
82
|
-
async function onSaved() {
|
|
83
|
-
await save(data)
|
|
84
|
-
await jump('/contacts/')
|
|
85
|
-
}
|
|
86
|
-
</script>
|
|
87
|
-
```
|
|
88
|
-
|
|
89
|
-
Typical split: **`back`** for “undo my last navigation” (one step, parent route); **`jump`** for “take me to that earlier screen” (possibly several steps, exact URL).
|
|
90
|
-
|
|
91
|
-
## Exports
|
|
92
|
-
|
|
93
|
-
| Export | Role |
|
|
94
|
-
| -------------- | ----------------------------------------------------------------------- |
|
|
95
|
-
| `Screen` | Page wrapper with safe-area insets and optional iOS status-bar underlay |
|
|
96
|
-
| `Header` | Sticky top bar with blur |
|
|
97
|
-
| `Nav` | Fixed bottom bar: sections, back, toolbar |
|
|
98
|
-
| `Return` | Registers a back button in `Nav` for the current route |
|
|
99
|
-
| `Actions` | Registers toolbar snippets in `Nav` |
|
|
100
|
-
| `Attention` | Small constructive dot (e.g. unseen badge on nav item) |
|
|
101
|
-
| `Underlay` | Gradient fade under fixed chrome |
|
|
102
|
-
| `Sticky` | Sticky top/bottom bar over a blurred `Underlay` (e.g. a pinned action bar) |
|
|
103
|
-
| `Section` | Type for nav tab config |
|
|
104
|
-
| `back`, `jump` | History-aware navigation — see above |
|
|
105
|
-
|
|
106
|
-
## Nav sections
|
|
107
|
-
|
|
108
|
-
Each `Section` has `id`, `href`, `label`, `Icon` (Lucide component), optional `nested` path prefixes, optional `unseen` badge.
|
|
109
|
-
|
|
110
|
-
When the current path is nested under an active section, other tabs collapse and a back chevron returns to the section root.
|
|
111
|
-
|
|
112
|
-
## Props
|
|
113
|
-
|
|
114
|
-
### `Screen`
|
|
115
|
-
|
|
116
|
-
| Prop | Type | Default | Notes |
|
|
117
|
-
| ---------- | --------- | ------- | -------------------------------- |
|
|
118
|
-
| `underlay` | `boolean` | `true` | iOS status-bar gradient underlay |
|
|
119
|
-
| `unsafe` | `boolean` | `false` | Skip safe-area padding |
|
|
120
|
-
|
|
121
|
-
### `Nav`
|
|
122
|
-
|
|
123
|
-
| Prop | Type | Default | Notes |
|
|
124
|
-
| ---------- | ------------------------------ | --------- | ----------------------------------- |
|
|
125
|
-
| `sections` | `Section[]` | `[]` | Bottom tab config |
|
|
126
|
-
| `position` | `'start' \| 'center' \| 'end'` | `'start'` | Toolbar side; also flips bar layout |
|
|
127
|
-
| `underlay` | `boolean` | `false` | Gradient fade behind the bar |
|
|
128
|
-
|
|
129
|
-
### `Return`
|
|
130
|
-
|
|
131
|
-
| Prop | Type | Default | Notes |
|
|
132
|
-
| ------ | -------- | ------- | ---------------------------------------------- |
|
|
133
|
-
| `href` | `string` | `'..'` | Passed to `back()` when history cannot go back |
|
|
134
|
-
|
|
135
|
-
### `Actions`
|
|
136
|
-
|
|
137
|
-
| Prop | Type | Default | Notes |
|
|
138
|
-
| -------- | ------------------- | ------- | -------------------------------------------- |
|
|
139
|
-
| `active` | `Writable<boolean>` | — | When true, fades nav items (e.g. modal open) |
|
|
@@ -1,53 +0,0 @@
|
|
|
1
|
-
# Stack
|
|
2
|
-
|
|
3
|
-
Collapsible card stack with view-transition morphs. Click the stack (or press Enter/Space on the root) to expand; bind `collapsed` or call `collapse()` / `expand()` / `toggle()` on a `Root` ref. Each `Item` needs a stable `id` for transition names.
|
|
4
|
-
|
|
5
|
-
## Usage
|
|
6
|
-
|
|
7
|
-
```svelte
|
|
8
|
-
<script lang="ts">
|
|
9
|
-
import * as Stack from '$com/stack'
|
|
10
|
-
import { Button } from '$ui/button'
|
|
11
|
-
|
|
12
|
-
let stack: ReturnType<typeof Stack.Root> | undefined
|
|
13
|
-
</script>
|
|
14
|
-
|
|
15
|
-
<Stack.Root bind:this={stack}>
|
|
16
|
-
{#each items as item (item.id)}
|
|
17
|
-
<Stack.Item id={item.id}>
|
|
18
|
-
<Card>{item.title}</Card>
|
|
19
|
-
</Stack.Item>
|
|
20
|
-
{/each}
|
|
21
|
-
<Stack.Toolbar>
|
|
22
|
-
<Button variant="ghost" size="sm" onclick={() => stack?.collapse()}>Collapse</Button>
|
|
23
|
-
</Stack.Toolbar>
|
|
24
|
-
</Stack.Root>
|
|
25
|
-
```
|
|
26
|
-
|
|
27
|
-
## Props
|
|
28
|
-
|
|
29
|
-
### Root
|
|
30
|
-
|
|
31
|
-
| Prop | Type | Default | Notes |
|
|
32
|
-
| ----------- | ------------- | ------- | --------------------------------------------------------------------- |
|
|
33
|
-
| `children` | `Snippet` | — | `Item` and optional `Toolbar` slots. |
|
|
34
|
-
| `collapsed` | `boolean` | `true` | Bindable. When true and item count ≥ `min`, cards stack visually. |
|
|
35
|
-
| `min` | `number` | `3` | Minimum items before the stacked collapsed layout applies. |
|
|
36
|
-
| `class` | `ClassValue` | — | Root container classes. |
|
|
37
|
-
|
|
38
|
-
**Methods** (via `bind:this`): `toggle(on?)`, `expand()`, `collapse()`.
|
|
39
|
-
|
|
40
|
-
### Item
|
|
41
|
-
|
|
42
|
-
| Prop | Type | Default | Notes |
|
|
43
|
-
| ---------- | --------- | ------- | ------------------------------------------ |
|
|
44
|
-
| `children` | `Snippet` | — | Card content. |
|
|
45
|
-
| `id` | `string` | — | Stable key for `view-transition-name`. |
|
|
46
|
-
| `class` | `ClassValue` | — | Wrapper classes. |
|
|
47
|
-
|
|
48
|
-
### Toolbar
|
|
49
|
-
|
|
50
|
-
| Prop | Type | Default | Notes |
|
|
51
|
-
| ---------- | ------------ | ------- | ------------------------------------------------------------ |
|
|
52
|
-
| `children` | `Snippet` | — | Shown only when expanded and stacked (≥ `min` items). |
|
|
53
|
-
| `class` | `ClassValue` | — | Wrapper classes. |
|
|
@@ -1,149 +0,0 @@
|
|
|
1
|
-
# system
|
|
2
|
-
|
|
3
|
-
The app's browser/OS platform layer — the counterpart to `shell`/`bridge` for system integration (service-worker lifecycle, updates, offline shell, in-app-webview escape). Its first capability is transparent, user-controlled updates: an installed PWA sees the new version download with live progress, gets a one-tap install control when ready, and restarts cleanly into it. The app version is derived from a bundled `changelog` mount — the same source that feeds the in-app release notes — so the version a user sees, the notes they read, and the build they get never drift.
|
|
4
|
-
|
|
5
|
-
## Version identity & ordering
|
|
6
|
-
|
|
7
|
-
The version is the build's **commit short-hash** (e.g. `f3a9c21`), used verbatim as the changelog key, the git release tag, and the on-screen version — so a version you see traces straight to its source with `git show <version>`. It is separate from `$service-worker.version` (the per-build hash), which the worker uses only for its cache name.
|
|
8
|
-
|
|
9
|
-
Chronological order lives in each entry's `timestamp` (Unix milliseconds): the history sort, the pre-apply update delta, and the running-build baseline all compare `timestamp`. The running build exposes both identities:
|
|
10
|
-
|
|
11
|
-
| Constant | Type | Meaning |
|
|
12
|
-
| --- | --- | --- |
|
|
13
|
-
| `version` | `string` | the running build's hash — for display / logging / the SW broadcast |
|
|
14
|
-
| `timestamp` | `number` | the running build's release time — the ordering signal |
|
|
15
|
-
|
|
16
|
-
`timestamp` is stored in svintl as a digit string and read back as a `number`. A fresh install with no releases yet shows a friendly empty state — key `0000000`, headline `Hello`, no date — which the first merged release replaces.
|
|
17
|
-
|
|
18
|
-
## Setup
|
|
19
|
-
|
|
20
|
-
Solution-level wiring that feeds the update store the UI reads.
|
|
21
|
-
|
|
22
|
-
### Runtime wiring — `rc()`
|
|
23
|
-
|
|
24
|
-
Call `rc()` once in the browser from the root `+layout.ts`. It wires reload-on-apply, the broadcast listener that feeds the `update` store, and cold detection of an already-waiting worker. It never reloads on its own — only an explicit `apply()` (the install control) triggers a restart, so an update can never interrupt a form in progress.
|
|
25
|
-
|
|
26
|
-
```ts
|
|
27
|
-
// src/routes/+layout.ts
|
|
28
|
-
import { rc } from '@/system/rc'
|
|
29
|
-
import { browser } from '$app/environment'
|
|
30
|
-
|
|
31
|
-
if (browser) void rc()
|
|
32
|
-
```
|
|
33
|
-
|
|
34
|
-
### Service worker & caches
|
|
35
|
-
|
|
36
|
-
- **The worker is self-contained.** It carries its own inlined push-payload `Notification` type and keeps the push / notification-click / offline-shell behaviour of a typical app worker, with no `@/transmission` dependency. If you already run `@/transmission`, reconcile the two workers yourself.
|
|
37
|
-
- **Two caches.** The versioned app shell + build assets live in `cache-${hash}` (evicted on every update, so the app never serves stale code); runtime images from the API — requests under `/pictures/` — live in a separate `storage` cache, cache-first. Nothing evicts `storage` automatically: it survives updates, so only an explicit `clear()` empties it.
|
|
38
|
-
|
|
39
|
-
### Localization
|
|
40
|
-
|
|
41
|
-
This Solution ships **two** svintl mounts — the UI strings (`ui/intl`) and the machine-owned release notes (`svc/changelog/intl`) — each carrying only the locales this repo builds. Reconcile **both** to your own locale set once after install:
|
|
42
|
-
|
|
43
|
-
```sh
|
|
44
|
-
npx intl import system src/@/system/ui/intl
|
|
45
|
-
npx intl import changelog src/@/system/svc/changelog/intl
|
|
46
|
-
```
|
|
47
|
-
|
|
48
|
-
Until both are imported, each `built.js` is typed against your `Locale` union and `check` fails on the locales it lacks. Never hand-edit the generated `*.yaml`/`built.js`/`types.ts`.
|
|
49
|
-
|
|
50
|
-
## In-app-webview escape — `InApp`
|
|
51
|
-
|
|
52
|
-
An in-app webview (Telegram, Instagram, Facebook, generic embedded browsers) is an insecure, degraded context where passkeys and OIDC popups misbehave. `InApp` guards the whole app against it: on mount it tries to bounce the user out into the real system browser, and if the OS swallows that redirect it overlays a full-screen "Insecure Context" card with a manual Continue control. In a normal browser it renders nothing.
|
|
53
|
-
|
|
54
|
-
Because the protection must fire on **every** route — not just an auth screen — mount it once, high in the tree, in the root `+layout.svelte`:
|
|
55
|
-
|
|
56
|
-
```svelte
|
|
57
|
-
<script lang="ts">
|
|
58
|
-
import { InApp } from '@/system/ui'
|
|
59
|
-
const { children } = $props()
|
|
60
|
-
</script>
|
|
61
|
-
|
|
62
|
-
<InApp />
|
|
63
|
-
{@render children()}
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
The webview detection and the pop-out side-effect are internal — no conditional wiring or environment checks are needed in your layout.
|
|
67
|
-
|
|
68
|
-
## `VersionControl`
|
|
69
|
-
|
|
70
|
-
The update status card: a single row that reads the `update` state and renders the running build with an up-to-date check, download progress while caching, or a one-tap install control once an update is waiting. Pass the `update` store value; drop it into a settings/about screen.
|
|
71
|
-
|
|
72
|
-
### Usage
|
|
73
|
-
|
|
74
|
-
```svelte
|
|
75
|
-
<script lang="ts">
|
|
76
|
-
import { VersionControl } from '@/system/ui'
|
|
77
|
-
import { update } from '@/system'
|
|
78
|
-
</script>
|
|
79
|
-
|
|
80
|
-
<VersionControl update={$update} href="/changelog" />
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
### Props
|
|
84
|
-
|
|
85
|
-
| Prop | Type | Notes |
|
|
86
|
-
| --- | --- | --- |
|
|
87
|
-
| `update` | `Update` | The update store value (`$update`). |
|
|
88
|
-
| `href` | `string` | Optional. When set, renders a release-notes / what's-new link. |
|
|
89
|
-
|
|
90
|
-
## `Changelog`
|
|
91
|
-
|
|
92
|
-
The full release-notes list for a settings/about or dedicated notes screen. Renders the running build's bundled history and, when an update is waiting, the incoming entries above it — the waiting version carries an inline install control, and the running version is tagged as installed. Both come in as props, so you choose the source (the bundled `changelog` mount for history, the `update` store for the incoming delta).
|
|
93
|
-
|
|
94
|
-
### Usage
|
|
95
|
-
|
|
96
|
-
```svelte
|
|
97
|
-
<script lang="ts">
|
|
98
|
-
import { Changelog } from '@/system/ui'
|
|
99
|
-
import { update, changelog } from '@/system'
|
|
100
|
-
</script>
|
|
101
|
-
|
|
102
|
-
<Changelog update={$update} {changelog} />
|
|
103
|
-
```
|
|
104
|
-
|
|
105
|
-
### Props
|
|
106
|
-
|
|
107
|
-
| Prop | Type | Notes |
|
|
108
|
-
| --- | --- | --- |
|
|
109
|
-
| `update` | `Update` | The update store value; a `ready` state contributes the incoming delta and its install control. |
|
|
110
|
-
| `changelog` | `Log` | An all-locales changelog — typically the bundled `changelog` mount. |
|
|
111
|
-
| `class` | `ClassValue` | Applied to the list. |
|
|
112
|
-
|
|
113
|
-
## On-demand check — `check()`
|
|
114
|
-
|
|
115
|
-
Force a fresh update check wherever it makes sense (settings/about screen, pull-to-refresh). `version` is the running app's commit short-hash — the same string shown, tagged, and keyed in the changelog.
|
|
116
|
-
|
|
117
|
-
```ts
|
|
118
|
-
import { check, version } from '@/system'
|
|
119
|
-
|
|
120
|
-
await check()
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
## Authoring notes
|
|
124
|
-
|
|
125
|
-
The `changelog` mount is maintained through the `npx intl` CLI — by hand, or automatically by the CI workflows below. Each entry is keyed by commit short-hash and holds translatable `headline`/`description` (Markdown) and non-translatable `timestamp` (Unix milliseconds) / `picture`. `description` renders through `marked` (trusted-content — the notes are authored in-repo, so there is no sanitizer). Never hand-edit the generated `*.yaml`/`built.js`/`types.ts`.
|
|
126
|
-
|
|
127
|
-
## Automated versioning & changelog (CI)
|
|
128
|
-
|
|
129
|
-
Two GitHub Actions workflows install to your repo (`.github/workflows/changelog.yml`, `.github/workflows/release.yml`) alongside a static agent prompt (`.github/changelog-prompt.md`). They keep the changelog, the version, and the git tag in sync with zero manual bumping — the responsibility split is deterministic-by-default: an AI agent only edits the intl mount, while committing, pushing, tagging, and releasing are done by fixed steps. **The version is never LLM-generated.**
|
|
130
|
-
|
|
131
|
-
### `changelog.yml` — on merge to `dev`
|
|
132
|
-
|
|
133
|
-
Each PR merged into `dev` folds its user-visible changes into the single unreleased "next release" entry:
|
|
134
|
-
|
|
135
|
-
1. A deterministic Node step computes three things — the version (`git rev-parse --short=7 HEAD`, the commit short-hash), the release timestamp (`Date.now()`, Unix ms), and **which entry is unreleased**: the changelog key present on `dev` but not on `production` (a pure set difference over the built dictionaries, so it needs no ordering and survives a deleted tag). It fails loudly if it ever finds more than one unreleased entry. The agent never picks a version, a time, or an entry.
|
|
136
|
-
2. The Cursor CLI is installed from the **official** `curl https://cursor.com/install` (no first-party Action exists; the third-party marketplace one is deliberately avoided — it would receive your `CURSOR_API_KEY` plus write access).
|
|
137
|
-
3. `cursor-agent` runs `.github/changelog-prompt.md` and **edits the changelog intl mount only** (it is instructed never to commit, branch, push, or reason about git/ordering): it keys the unreleased entry to the computed hash, writes the timestamp verbatim, integrates the PR diff into its Markdown description, and rebuilds the mount via `npx intl`.
|
|
138
|
-
4. `stefanzweifel/git-auto-commit-action` commits the result back to `dev` (`chore(changelog): <hash>`). A `pull_request` trigger does not re-run on this push, so there is no loop.
|
|
139
|
-
|
|
140
|
-
### `release.yml` — on merge to `production`
|
|
141
|
-
|
|
142
|
-
Fully deterministic, no AI: reads the newest changelog key (by `timestamp`), tags the released `production` commit with that key verbatim (the commit short-hash), and publishes a GitHub Release whose body is the entry's en-US `description`. The tag is a release label matching the changelog key; it points at the `production` commit, whose own hash differs from the tag name.
|
|
143
|
-
|
|
144
|
-
### Setup
|
|
145
|
-
|
|
146
|
-
- **`CURSOR_API_KEY` secret** — required by `changelog.yml`. Add it under repo → Settings → Secrets and variables → Actions.
|
|
147
|
-
- **Let the Actions bot push to `dev`.** `changelog.yml` commits back to `dev` with the default `GITHUB_TOKEN`. If `dev` is a protected branch, either add the Actions bot to the bypass list or swap in a PAT / GitHub App token with push rights; on an unprotected `dev` it works as-is.
|
|
148
|
-
- **svintl Cursor skill.** The agent drives `npx intl` through the svintl Cursor skill — install it in the repo if absent (e.g. `npx skills add temich/svintl -a --all`).
|
|
149
|
-
- **Branches.** The workflows assume a `dev` → `production` flow; rename the trigger branches if yours differ.
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
# TapTap
|
|
2
|
-
|
|
3
|
-
Fires `onclick` only after `taps` consecutive presses within `gap` ms. Use the `child` snippet to wrap an existing control; otherwise renders a native `<button>`.
|
|
4
|
-
|
|
5
|
-
## Usage
|
|
6
|
-
|
|
7
|
-
```svelte
|
|
8
|
-
<script lang="ts">
|
|
9
|
-
import { TapTap } from '$com/taptap'
|
|
10
|
-
</script>
|
|
11
|
-
|
|
12
|
-
<TapTap taps={3} gap={400} onclick={() => confirm()}>
|
|
13
|
-
Tap 3×
|
|
14
|
-
</TapTap>
|
|
15
|
-
```
|
|
16
|
-
|
|
17
|
-
## Props
|
|
18
|
-
|
|
19
|
-
| Prop | Type | Default | Notes |
|
|
20
|
-
| ---------- | ------------------------------------------------- | ---------- | --------------------------------------------------------------------- |
|
|
21
|
-
| `taps` | `number` | `2` | Consecutive presses required before `onclick` fires. |
|
|
22
|
-
| `gap` | `number` (ms) | `500` | Max interval between presses to count as consecutive. |
|
|
23
|
-
| `onclick` | `MouseEventHandler<HTMLButtonElement>` | — | Fires after the tap sequence completes. |
|
|
24
|
-
| `child` | `Snippet<[{ onclick: () => void; n: number }]>` | — | Renders instead of the default button; pass `onclick` to your control. `n` is the current position in the sequence (`0` when idle). |
|
|
25
|
-
| `children` | `Snippet` | — | Button content when `child` is omitted. |
|
|
26
|
-
| `type` | `HTMLButtonAttributes['type']` | `'button'` | Native button type when not using `child`. |
|
|
27
|
-
|
|
28
|
-
All other props pass through to the underlying `<button>` when `child` is omitted.
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
# Tools
|
|
2
|
-
|
|
3
|
-
Small Svelte/TypeScript utilities — formatters, reactive helpers, browser glue, view transitions. Installs to `$lib/tools/` with barrel `index.ts`.
|
|
4
|
-
|
|
5
|
-
```sh
|
|
6
|
-
npx shadcn-svelte add https://cn.ants.dev/r/tools.json
|
|
7
|
-
```
|
|
8
|
-
|
|
9
|
-
```ts
|
|
10
|
-
import { ago, date, navigate, ios } from '$lib/tools'
|
|
11
|
-
```
|
|
12
|
-
|
|
13
|
-
Most modules need only an import. Below: app-wide setup the CLI cannot merge.
|
|
14
|
-
|
|
15
|
-
## Transitions (`transition.ts`)
|
|
16
|
-
|
|
17
|
-
View Transition API helpers for SvelteKit navigation and in-page morphs.
|
|
18
|
-
|
|
19
|
-
| Export | Role |
|
|
20
|
-
| --- | --- |
|
|
21
|
-
| `navigate` | Pass to SvelteKit `onNavigate` — wraps route changes in `document.startViewTransition` |
|
|
22
|
-
| `transit` | Manual `startViewTransition` wrapper (async callback optional) |
|
|
23
|
-
| `takeoff` | Before navigation, pin a departing element by `id` + transition name |
|
|
24
|
-
| `transition` | Svelte action for non-navigation morphs |
|
|
25
|
-
| `styles` | Store of inline `view-transition-*` style while a non-nav transition runs |
|
|
26
|
-
|
|
27
|
-
### Route transitions — wire once in root layout
|
|
28
|
-
|
|
29
|
-
CSS alone (`view-transition-name`, antcn `globals` layers) does **not** start transitions. Hook SvelteKit navigation:
|
|
30
|
-
|
|
31
|
-
```svelte
|
|
32
|
-
<!-- src/routes/+layout.svelte -->
|
|
33
|
-
<script lang="ts">
|
|
34
|
-
import { onNavigate } from '$app/navigation'
|
|
35
|
-
import { navigate } from '$lib/tools'
|
|
36
|
-
|
|
37
|
-
let { children } = $props()
|
|
38
|
-
|
|
39
|
-
onNavigate(navigate)
|
|
40
|
-
</script>
|
|
41
|
-
|
|
42
|
-
{@render children()}
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
Required for route morphs (e.g. `shell` nav). Without this, transition CSS is inert. Unsupported browsers no-op (`transit` runs the callback immediately).
|
|
46
|
-
|
|
47
|
-
### Shared CSS
|
|
48
|
-
|
|
49
|
-
Antcn components using `transition-morph` / `standalone:` / `constructive` need `globals` (pulled in by `shell`) — see **globals** (`globals.md`).
|
|
50
|
-
|
|
51
|
-
### Named morphs across navigation
|
|
52
|
-
|
|
53
|
-
```ts
|
|
54
|
-
import { takeoff } from '$lib/tools'
|
|
55
|
-
|
|
56
|
-
takeoff('my-avatar', 'avatar', 'transition-morph')
|
|
57
|
-
await goto('/profile')
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
### In-page (no navigation)
|
|
61
|
-
|
|
62
|
-
```svelte
|
|
63
|
-
<div use:transition={{ name: 'panel', classes: 'transition-morph' }}>...</div>
|
|
64
|
-
```
|
|
65
|
-
|
|
66
|
-
```ts
|
|
67
|
-
await transit(async () => { /* DOM updates */ })
|
|
68
|
-
```
|
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
# transmission
|
|
2
|
-
|
|
3
|
-
Web-push / FCM notification permission, subscription, and per-domain preferences for the signed-in account. Boots a single push channel (FCM iOS handler if present, else Web Push), reconciles permission with the backend after sign-in, exposes a `permissions` store keyed by `ScopeKey`, and lets you toggle them via `configure(...)`.
|
|
4
|
-
|
|
5
|
-
`subscribe`/`unsubscribe` drive the platform channel and the backend record together; `request()` prompts the OS and follows through with a subscribe on grant. `ping()` round-trips a test notification. State lives under `transmission:subscribed` and `transmission:permissions` (bound to `@/iam`'s `account`); the `default.transmission.sync` realtime event refreshes permissions when other devices change them.
|
|
6
|
-
|
|
7
|
-
Ships two UI pieces (`Permission`, `Scopes`) plus its own `ui/intl/` mount. Run `await rc()` from app bootstrap (after `@/iam` and `@/realtime`) to wire auto-subscribe on sign-in and `@/realtime` sync.
|
|
8
|
-
|
|
9
|
-
## `$config`
|
|
10
|
-
|
|
11
|
-
- `VAPID_PUBLIC_KEY: string` — base64url VAPID public key for Web Push subscriptions. Empty disables the Web Push channel (`getVapidKey` returns an `Error` and `subscribe()` short-circuits). Not used by the FCM/TWA channels.
|
|
12
|
-
|
|
13
|
-
## Notes
|
|
14
|
-
|
|
15
|
-
- **Intersect `transmission`'s `Events` into your `@/realtime`.** After install, edit your own `src/@/realtime/svc/events.ts` and add `TransmissionEvents` to the `Events` intersection — typed payloads everywhere, no cast in `store.ts`:
|
|
16
|
-
|
|
17
|
-
```ts
|
|
18
|
-
// src/@/realtime/svc/events.ts
|
|
19
|
-
import type { Events as TransmissionEvents } from '@/transmission/svc/net'
|
|
20
|
-
// ...other Solutions' Events imports
|
|
21
|
-
|
|
22
|
-
export type Events = TransmissionEvents & /* & OtherEvents */
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
Until you do, `store.ts` keeps a `(data as Transmission)` cast against `@/realtime`'s default `Record<string, unknown>`.
|
|
26
|
-
|
|
27
|
-
- **`Window.webkit` global.** The FCM channel declares `Window.webkit` and `WebkitMessageHandlers` globally from its `types.d.ts`. If you ship more native bridges (e.g. Apple Pay), extend `WebkitMessageHandlers` the same way — interface merging means you don't need to redeclare `Window.webkit`.
|
|
28
|
-
|
|
29
|
-
- **TWA channel ships but isn't wired by default.** `svc/channel/active.ts` only boots `web` and `fcm`. Add `twa` to the boot order if you target Android TWAs.
|
|
30
|
-
|
|
31
|
-
## Usage
|
|
32
|
-
|
|
33
|
-
Bootstrap once, after `@/iam` and `@/realtime`:
|
|
34
|
-
|
|
35
|
-
```ts
|
|
36
|
-
// src/routes/+layout.svelte (or wherever you boot Solutions)
|
|
37
|
-
import { rc } from '@/transmission'
|
|
38
|
-
|
|
39
|
-
await rc()
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
Programmatic API (no UI):
|
|
43
|
-
|
|
44
|
-
```ts
|
|
45
|
-
import { configure, ping, request, unsubscribe, key, permissions } from '@/transmission'
|
|
46
|
-
|
|
47
|
-
await request() // OS prompt + subscribe (idempotent)
|
|
48
|
-
await configure({ [key({ domain: 'expenses' })]: false }) // mute one domain
|
|
49
|
-
await ping() // round-trip a test push (signed-in + subscribed)
|
|
50
|
-
await unsubscribe() // drop subscription on this device
|
|
51
|
-
$permissions // reactive scope→bool map
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
Send a real push from your backend by `POST`ing to the user's `transmission/<identity>` row — see `svc/net` for the wire shape.
|
|
55
|
-
|
|
56
|
-
## `Permission`
|
|
57
|
-
|
|
58
|
-
Onboarding nag card asking the user to enable push. Drop it on a high-traffic surface (dashboard, home, post-sign-in screen). Self-hides via `@/hints` once the user is no longer `unfamiliar('transmission_permission')`: **Enable** calls `request()` (OS prompt + subscribe on grant) and consumes the hint permanently; **Dismiss** marks it `later(KEY, 7d)` so the card disappears for a week. Gate it on `$promptable` yourself — the component does not check whether the browser can still prompt, so the caller decides when there's nothing left to ask for (denied, already subscribed, unsupported).
|
|
59
|
-
|
|
60
|
-
```svelte
|
|
61
|
-
<script lang="ts">
|
|
62
|
-
import { promptable } from '@/transmission'
|
|
63
|
-
import { Permission } from '@/transmission/ui'
|
|
64
|
-
</script>
|
|
65
|
-
|
|
66
|
-
{#if $promptable}
|
|
67
|
-
<Permission class="mb-4" />
|
|
68
|
-
{/if}
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
### Props
|
|
72
|
-
|
|
73
|
-
| Prop | Type | Default | Notes |
|
|
74
|
-
| ------- | ------------ | ------- | ------------------------------ |
|
|
75
|
-
| `class` | `ClassValue` | — | Forwarded to the root `Card`. |
|
|
76
|
-
|
|
77
|
-
## `Scopes`
|
|
78
|
-
|
|
79
|
-
Settings row for managing notifications on the current device. The master switch flips the whole subscription (`unsubscribe()` / `request()` under the hood); when on, per-domain switches expand below and toggle a single channel via `configure({ [key(scope)]: bool })` — muting it without dropping the subscription. Reads `$permissions`, so it reflects remote changes pushed via the `default.transmission.sync` realtime event (other devices, backend writes). The domain set is declared in `ui/Scopes.ts` (`scopes`) — edit it to add/remove rows; each row pulls its label/description from `ui/intl` keyed by `scope.domain`.
|
|
80
|
-
|
|
81
|
-
```svelte
|
|
82
|
-
<script lang="ts">
|
|
83
|
-
import { Scopes } from '@/transmission/ui'
|
|
84
|
-
import * as Item from '$ui/item'
|
|
85
|
-
</script>
|
|
86
|
-
|
|
87
|
-
<Item.Group>
|
|
88
|
-
<Scopes />
|
|
89
|
-
</Item.Group>
|
|
90
|
-
```
|
|
91
|
-
|
|
92
|
-
### Props
|
|
93
|
-
|
|
94
|
-
| Prop | Type | Default | Notes |
|
|
95
|
-
| ------- | ------------ | ------- | ---------------------------------------------------- |
|
|
96
|
-
| `class` | `ClassValue` | — | Forwarded to the top-level `Item.Root` (master row). |
|