@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,244 +0,0 @@
|
|
|
1
|
-
# Component Composition
|
|
2
|
-
|
|
3
|
-
## Contents
|
|
4
|
-
|
|
5
|
-
- Items always inside their Group component
|
|
6
|
-
- Callouts use Alert
|
|
7
|
-
- Empty states use Empty component
|
|
8
|
-
- Toast notifications use svelte-sonner
|
|
9
|
-
- Choosing between overlay components
|
|
10
|
-
- Dialog, Sheet, and Drawer always need a Title
|
|
11
|
-
- Card structure
|
|
12
|
-
- Button has no isPending or isLoading prop
|
|
13
|
-
- Tabs.Trigger must be inside Tabs.List
|
|
14
|
-
- Avatar always needs Avatar.Fallback
|
|
15
|
-
- Use Separator instead of raw hr or border divs
|
|
16
|
-
- Use Skeleton for loading placeholders
|
|
17
|
-
- Use Badge instead of custom styled spans
|
|
18
|
-
|
|
19
|
-
---
|
|
20
|
-
|
|
21
|
-
## Items always inside their Group component
|
|
22
|
-
|
|
23
|
-
Never render items directly inside the content container.
|
|
24
|
-
|
|
25
|
-
**Incorrect:**
|
|
26
|
-
|
|
27
|
-
```svelte
|
|
28
|
-
<script lang="ts">
|
|
29
|
-
import * as Select from "$lib/components/ui/select";
|
|
30
|
-
</script>
|
|
31
|
-
|
|
32
|
-
<Select.Content>
|
|
33
|
-
<Select.Item value="apple">Apple</Select.Item>
|
|
34
|
-
<Select.Item value="banana">Banana</Select.Item>
|
|
35
|
-
</Select.Content>
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
**Correct:**
|
|
39
|
-
|
|
40
|
-
```svelte
|
|
41
|
-
<script lang="ts">
|
|
42
|
-
import * as Select from "$lib/components/ui/select";
|
|
43
|
-
</script>
|
|
44
|
-
|
|
45
|
-
<Select.Content>
|
|
46
|
-
<Select.Group>
|
|
47
|
-
<Select.Item value="apple">Apple</Select.Item>
|
|
48
|
-
<Select.Item value="banana">Banana</Select.Item>
|
|
49
|
-
</Select.Group>
|
|
50
|
-
</Select.Content>
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
This applies to all group-based components:
|
|
54
|
-
|
|
55
|
-
| Item | Group |
|
|
56
|
-
| ------------------------------------------------------------- | -------------------- |
|
|
57
|
-
| `Select.Item`, `Select.Label` | `Select.Group` |
|
|
58
|
-
| `DropdownMenu.Item`, `DropdownMenu.Label`, `DropdownMenu.Sub` | `DropdownMenu.Group` |
|
|
59
|
-
| `Menubar.Item` | `Menubar.Group` |
|
|
60
|
-
| `ContextMenu.Item` | `ContextMenu.Group` |
|
|
61
|
-
| `Command.Item` | `Command.Group` |
|
|
62
|
-
|
|
63
|
-
---
|
|
64
|
-
|
|
65
|
-
## Callouts use Alert
|
|
66
|
-
|
|
67
|
-
```svelte
|
|
68
|
-
<script lang="ts">
|
|
69
|
-
import * as Alert from "$lib/components/ui/alert";
|
|
70
|
-
</script>
|
|
71
|
-
|
|
72
|
-
<Alert.Root>
|
|
73
|
-
<Alert.Title>Warning</Alert.Title>
|
|
74
|
-
<Alert.Description>Something needs attention.</Alert.Description>
|
|
75
|
-
</Alert.Root>
|
|
76
|
-
```
|
|
77
|
-
|
|
78
|
-
---
|
|
79
|
-
|
|
80
|
-
## Empty states use Empty component
|
|
81
|
-
|
|
82
|
-
```svelte
|
|
83
|
-
<script lang="ts">
|
|
84
|
-
import * as Empty from "$lib/components/ui/empty";
|
|
85
|
-
import { Button } from "$lib/components/ui/button";
|
|
86
|
-
import FolderIcon from "@lucide/svelte/icons/folder";
|
|
87
|
-
</script>
|
|
88
|
-
|
|
89
|
-
<Empty.Root>
|
|
90
|
-
<Empty.Header>
|
|
91
|
-
<Empty.Media variant="icon"><FolderIcon /></Empty.Media>
|
|
92
|
-
<Empty.Title>No projects yet</Empty.Title>
|
|
93
|
-
<Empty.Description
|
|
94
|
-
>Get started by creating a new project.</Empty.Description
|
|
95
|
-
>
|
|
96
|
-
</Empty.Header>
|
|
97
|
-
<Empty.Content>
|
|
98
|
-
<Button>Create Project</Button>
|
|
99
|
-
</Empty.Content>
|
|
100
|
-
</Empty.Root>
|
|
101
|
-
```
|
|
102
|
-
|
|
103
|
-
---
|
|
104
|
-
|
|
105
|
-
## Toast notifications use svelte-sonner
|
|
106
|
-
|
|
107
|
-
```svelte
|
|
108
|
-
<script lang="ts">
|
|
109
|
-
import { toast } from "svelte-sonner";
|
|
110
|
-
</script>
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
```ts
|
|
114
|
-
toast.success("Changes saved.");
|
|
115
|
-
toast.error("Something went wrong.");
|
|
116
|
-
toast("File deleted.", {
|
|
117
|
-
action: { label: "Undo", onClick: () => undoDelete() },
|
|
118
|
-
});
|
|
119
|
-
```
|
|
120
|
-
|
|
121
|
-
Mount the `Toaster` from your UI folder once in the app layout (see [Sonner](https://shadcn-svelte.com/docs/components/sonner)).
|
|
122
|
-
|
|
123
|
-
---
|
|
124
|
-
|
|
125
|
-
## Choosing between overlay components
|
|
126
|
-
|
|
127
|
-
| Use case | Component |
|
|
128
|
-
| ---------------------------------- | ------------- |
|
|
129
|
-
| Focused task that requires input | `Dialog` |
|
|
130
|
-
| Destructive action confirmation | `AlertDialog` |
|
|
131
|
-
| Side panel with details or filters | `Sheet` |
|
|
132
|
-
| Mobile-first bottom panel | `Drawer` |
|
|
133
|
-
| Quick info on hover | `HoverCard` |
|
|
134
|
-
| Small contextual content on click | `Popover` |
|
|
135
|
-
|
|
136
|
-
---
|
|
137
|
-
|
|
138
|
-
## Dialog, Sheet, and Drawer always need a Title
|
|
139
|
-
|
|
140
|
-
`Dialog.Title`, `Sheet.Title`, `Drawer.Title` are required for accessibility. Use `class="sr-only"` if visually hidden.
|
|
141
|
-
|
|
142
|
-
```svelte
|
|
143
|
-
<script lang="ts">
|
|
144
|
-
import * as Dialog from "$lib/components/ui/dialog";
|
|
145
|
-
</script>
|
|
146
|
-
|
|
147
|
-
<Dialog.Content>
|
|
148
|
-
<Dialog.Header>
|
|
149
|
-
<Dialog.Title>Edit Profile</Dialog.Title>
|
|
150
|
-
<Dialog.Description>Update your profile.</Dialog.Description>
|
|
151
|
-
</Dialog.Header>
|
|
152
|
-
...
|
|
153
|
-
</Dialog.Content>
|
|
154
|
-
```
|
|
155
|
-
|
|
156
|
-
---
|
|
157
|
-
|
|
158
|
-
## Card structure
|
|
159
|
-
|
|
160
|
-
Use full composition — don't dump everything into `Card.Content`:
|
|
161
|
-
|
|
162
|
-
```svelte
|
|
163
|
-
<script lang="ts">
|
|
164
|
-
import * as Card from "$lib/components/ui/card";
|
|
165
|
-
import { Button } from "$lib/components/ui/button";
|
|
166
|
-
</script>
|
|
167
|
-
|
|
168
|
-
<Card.Root>
|
|
169
|
-
<Card.Header>
|
|
170
|
-
<Card.Title>Team Members</Card.Title>
|
|
171
|
-
<Card.Description>Manage your team.</Card.Description>
|
|
172
|
-
</Card.Header>
|
|
173
|
-
<Card.Content>...</Card.Content>
|
|
174
|
-
<Card.Footer>
|
|
175
|
-
<Button>Invite</Button>
|
|
176
|
-
</Card.Footer>
|
|
177
|
-
</Card.Root>
|
|
178
|
-
```
|
|
179
|
-
|
|
180
|
-
---
|
|
181
|
-
|
|
182
|
-
## Button has no isPending or isLoading prop
|
|
183
|
-
|
|
184
|
-
Compose with `Spinner` inside `Button` + `disabled`:
|
|
185
|
-
|
|
186
|
-
```svelte
|
|
187
|
-
<script lang="ts">
|
|
188
|
-
import { Button } from "$lib/components/ui/button";
|
|
189
|
-
import { Spinner } from "$lib/components/ui/spinner";
|
|
190
|
-
</script>
|
|
191
|
-
|
|
192
|
-
<Button disabled>
|
|
193
|
-
<Spinner data-icon="inline-start" />
|
|
194
|
-
Saving...
|
|
195
|
-
</Button>
|
|
196
|
-
```
|
|
197
|
-
|
|
198
|
-
---
|
|
199
|
-
|
|
200
|
-
## Tabs.Trigger must be inside Tabs.List
|
|
201
|
-
|
|
202
|
-
Never render `Tabs.Trigger` directly inside `Tabs.Root` — always wrap in `Tabs.List`:
|
|
203
|
-
|
|
204
|
-
```svelte
|
|
205
|
-
<script lang="ts">
|
|
206
|
-
import * as Tabs from "$lib/components/ui/tabs";
|
|
207
|
-
let tab = $state("account");
|
|
208
|
-
</script>
|
|
209
|
-
|
|
210
|
-
<Tabs.Root bind:value={tab}>
|
|
211
|
-
<Tabs.List>
|
|
212
|
-
<Tabs.Trigger value="account">Account</Tabs.Trigger>
|
|
213
|
-
<Tabs.Trigger value="password">Password</Tabs.Trigger>
|
|
214
|
-
</Tabs.List>
|
|
215
|
-
<Tabs.Content value="account">...</Tabs.Content>
|
|
216
|
-
</Tabs.Root>
|
|
217
|
-
```
|
|
218
|
-
|
|
219
|
-
---
|
|
220
|
-
|
|
221
|
-
## Avatar always needs Avatar.Fallback
|
|
222
|
-
|
|
223
|
-
Always include `Avatar.Fallback` for when the image fails to load:
|
|
224
|
-
|
|
225
|
-
```svelte
|
|
226
|
-
<script lang="ts">
|
|
227
|
-
import * as Avatar from "$lib/components/ui/avatar";
|
|
228
|
-
</script>
|
|
229
|
-
|
|
230
|
-
<Avatar.Root>
|
|
231
|
-
<Avatar.Image src="/avatar.png" alt="User" />
|
|
232
|
-
<Avatar.Fallback>JD</Avatar.Fallback>
|
|
233
|
-
</Avatar.Root>
|
|
234
|
-
```
|
|
235
|
-
|
|
236
|
-
---
|
|
237
|
-
|
|
238
|
-
## Use existing components instead of custom markup
|
|
239
|
-
|
|
240
|
-
| Instead of | Use |
|
|
241
|
-
| ---------------------------------------------- | ------------------------------------------------------------------------------------------- |
|
|
242
|
-
| `<hr>` or `<div class="border-t">` | `<Separator />` (`import { Separator } from "$lib/components/ui/separator"`) |
|
|
243
|
-
| `<div class="animate-pulse">` with styled divs | `<Skeleton class="h-4 w-3/4" />` (`import { Skeleton } from "$lib/components/ui/skeleton"`) |
|
|
244
|
-
| `<span class="rounded-full bg-green-100 ...">` | `<Badge variant="secondary">` (`import { Badge } from "$lib/components/ui/badge"`) |
|
|
@@ -1,234 +0,0 @@
|
|
|
1
|
-
# Forms & Inputs
|
|
2
|
-
|
|
3
|
-
## Contents
|
|
4
|
-
|
|
5
|
-
- Forms use Field.FieldGroup + Field.Field
|
|
6
|
-
- InputGroup requires InputGroup.Input/InputGroup.Textarea
|
|
7
|
-
- Buttons inside inputs use InputGroup.Root + InputGroup.Addon
|
|
8
|
-
- Option sets (2–7 choices) use ToggleGroup.Root + ToggleGroup.Item
|
|
9
|
-
- Field.FieldSet + Field.FieldLegend for grouping related fields
|
|
10
|
-
- Field validation and disabled states
|
|
11
|
-
|
|
12
|
-
---
|
|
13
|
-
|
|
14
|
-
## Forms use Field.FieldGroup + Field.Field
|
|
15
|
-
|
|
16
|
-
Always use `Field.FieldGroup` + `Field.Field` — never raw `div` with `space-y-*`:
|
|
17
|
-
|
|
18
|
-
```svelte
|
|
19
|
-
<script lang="ts">
|
|
20
|
-
import * as Field from "$lib/components/ui/field";
|
|
21
|
-
import { Input } from "$lib/components/ui/input";
|
|
22
|
-
</script>
|
|
23
|
-
|
|
24
|
-
<Field.FieldGroup>
|
|
25
|
-
<Field.Field>
|
|
26
|
-
<Field.FieldLabel for="email">Email</Field.FieldLabel>
|
|
27
|
-
<Input id="email" type="email" />
|
|
28
|
-
</Field.Field>
|
|
29
|
-
<Field.Field>
|
|
30
|
-
<Field.FieldLabel for="password">Password</Field.FieldLabel>
|
|
31
|
-
<Input id="password" type="password" />
|
|
32
|
-
</Field.Field>
|
|
33
|
-
</Field.FieldGroup>
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
Use `Field` with `orientation="horizontal"` for settings pages. Use `Field.FieldLabel` with `class="sr-only"` for visually hidden labels.
|
|
37
|
-
|
|
38
|
-
**Choosing form controls:**
|
|
39
|
-
|
|
40
|
-
- Simple text input → `Input`
|
|
41
|
-
- Dropdown with predefined options → `Select`
|
|
42
|
-
- Searchable dropdown → `Combobox`
|
|
43
|
-
- Native HTML select (no JS) → `native-select`
|
|
44
|
-
- Boolean toggle → `Switch` (for settings) or `Checkbox` (for forms)
|
|
45
|
-
- Single choice from few options → `RadioGroup`
|
|
46
|
-
- Toggle between 2–5 options → `ToggleGroup.Root` + `ToggleGroup.Item`
|
|
47
|
-
- OTP/verification code → `InputOTP`
|
|
48
|
-
- Multi-line text → `Textarea`
|
|
49
|
-
|
|
50
|
-
---
|
|
51
|
-
|
|
52
|
-
## InputGroup requires InputGroup.Input/InputGroup.Textarea
|
|
53
|
-
|
|
54
|
-
Never use raw `Input` or `Textarea` inside an `InputGroup.Root`.
|
|
55
|
-
|
|
56
|
-
**Incorrect:**
|
|
57
|
-
|
|
58
|
-
```svelte
|
|
59
|
-
<script lang="ts">
|
|
60
|
-
import * as InputGroup from "$lib/components/ui/input-group";
|
|
61
|
-
import { Input } from "$lib/components/ui/input";
|
|
62
|
-
</script>
|
|
63
|
-
|
|
64
|
-
<InputGroup.Root>
|
|
65
|
-
<Input placeholder="Search..." />
|
|
66
|
-
</InputGroup.Root>
|
|
67
|
-
```
|
|
68
|
-
|
|
69
|
-
**Correct:**
|
|
70
|
-
|
|
71
|
-
```svelte
|
|
72
|
-
<script lang="ts">
|
|
73
|
-
import * as InputGroup from "$lib/components/ui/input-group";
|
|
74
|
-
</script>
|
|
75
|
-
|
|
76
|
-
<InputGroup.Root>
|
|
77
|
-
<InputGroup.Input placeholder="Search..." />
|
|
78
|
-
</InputGroup.Root>
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
---
|
|
82
|
-
|
|
83
|
-
## Buttons inside inputs use InputGroup.Root + InputGroup.Addon
|
|
84
|
-
|
|
85
|
-
Never place a `Button` directly inside or adjacent to an `Input` with custom positioning.
|
|
86
|
-
|
|
87
|
-
**Incorrect:**
|
|
88
|
-
|
|
89
|
-
```svelte
|
|
90
|
-
<script lang="ts">
|
|
91
|
-
import { Input } from "$lib/components/ui/input";
|
|
92
|
-
import { Button } from "$lib/components/ui/button";
|
|
93
|
-
import SearchIcon from "@lucide/svelte/icons/search";
|
|
94
|
-
</script>
|
|
95
|
-
|
|
96
|
-
<div class="relative">
|
|
97
|
-
<Input placeholder="Search..." class="pr-10" />
|
|
98
|
-
<Button class="absolute top-0 right-0" size="icon">
|
|
99
|
-
<SearchIcon />
|
|
100
|
-
</Button>
|
|
101
|
-
</div>
|
|
102
|
-
```
|
|
103
|
-
|
|
104
|
-
**Correct:**
|
|
105
|
-
|
|
106
|
-
```svelte
|
|
107
|
-
<script lang="ts">
|
|
108
|
-
import * as InputGroup from "$lib/components/ui/input-group";
|
|
109
|
-
import { Button } from "$lib/components/ui/button";
|
|
110
|
-
import SearchIcon from "@lucide/svelte/icons/search";
|
|
111
|
-
</script>
|
|
112
|
-
|
|
113
|
-
<InputGroup.Root>
|
|
114
|
-
<InputGroup.Input placeholder="Search..." />
|
|
115
|
-
<InputGroup.Addon>
|
|
116
|
-
<Button size="icon">
|
|
117
|
-
<SearchIcon data-icon="inline-start" />
|
|
118
|
-
</Button>
|
|
119
|
-
</InputGroup.Addon>
|
|
120
|
-
</InputGroup.Root>
|
|
121
|
-
```
|
|
122
|
-
|
|
123
|
-
---
|
|
124
|
-
|
|
125
|
-
## Option sets (2–7 choices) use ToggleGroup.Root + ToggleGroup.Item
|
|
126
|
-
|
|
127
|
-
Don't manually loop `Button` components with active state.
|
|
128
|
-
|
|
129
|
-
**Incorrect:**
|
|
130
|
-
|
|
131
|
-
```svelte
|
|
132
|
-
<script lang="ts">
|
|
133
|
-
import { Button } from "$lib/components/ui/button";
|
|
134
|
-
let selected = $state("daily");
|
|
135
|
-
</script>
|
|
136
|
-
|
|
137
|
-
<div class="flex gap-2">
|
|
138
|
-
{#each ["daily", "weekly", "monthly"] as option (option)}
|
|
139
|
-
<Button
|
|
140
|
-
variant={selected === option ? "default" : "outline"}
|
|
141
|
-
onclick={() => (selected = option)}
|
|
142
|
-
>
|
|
143
|
-
{option}
|
|
144
|
-
</Button>
|
|
145
|
-
{/each}
|
|
146
|
-
</div>
|
|
147
|
-
```
|
|
148
|
-
|
|
149
|
-
**Correct:**
|
|
150
|
-
|
|
151
|
-
```svelte
|
|
152
|
-
<script lang="ts">
|
|
153
|
-
import * as ToggleGroup from "$lib/components/ui/toggle-group";
|
|
154
|
-
let selected = $state("daily");
|
|
155
|
-
</script>
|
|
156
|
-
|
|
157
|
-
<ToggleGroup.Root bind:value={selected} spacing={2}>
|
|
158
|
-
<ToggleGroup.Item value="daily">Daily</ToggleGroup.Item>
|
|
159
|
-
<ToggleGroup.Item value="weekly">Weekly</ToggleGroup.Item>
|
|
160
|
-
<ToggleGroup.Item value="monthly">Monthly</ToggleGroup.Item>
|
|
161
|
-
</ToggleGroup.Root>
|
|
162
|
-
```
|
|
163
|
-
|
|
164
|
-
Combine with `Field` for labelled toggle groups:
|
|
165
|
-
|
|
166
|
-
```svelte
|
|
167
|
-
<script lang="ts">
|
|
168
|
-
import * as Field from "$lib/components/ui/field";
|
|
169
|
-
import * as ToggleGroup from "$lib/components/ui/toggle-group";
|
|
170
|
-
</script>
|
|
171
|
-
|
|
172
|
-
<Field.Field orientation="horizontal">
|
|
173
|
-
<Field.FieldTitle id="theme-label">Theme</Field.FieldTitle>
|
|
174
|
-
<ToggleGroup.Root aria-labelledby="theme-label" spacing={2}>
|
|
175
|
-
<ToggleGroup.Item value="light">Light</ToggleGroup.Item>
|
|
176
|
-
<ToggleGroup.Item value="dark">Dark</ToggleGroup.Item>
|
|
177
|
-
<ToggleGroup.Item value="system">System</ToggleGroup.Item>
|
|
178
|
-
</ToggleGroup.Root>
|
|
179
|
-
</Field.Field>
|
|
180
|
-
```
|
|
181
|
-
|
|
182
|
-
---
|
|
183
|
-
|
|
184
|
-
## Field.FieldSet + Field.FieldLegend for grouping related fields
|
|
185
|
-
|
|
186
|
-
Use `Field.FieldSet` + `Field.FieldLegend` for related checkboxes, radios, or switches — not `div` with a heading:
|
|
187
|
-
|
|
188
|
-
```svelte
|
|
189
|
-
<script lang="ts">
|
|
190
|
-
import * as Field from "$lib/components/ui/field";
|
|
191
|
-
import { Checkbox } from "$lib/components/ui/checkbox";
|
|
192
|
-
</script>
|
|
193
|
-
|
|
194
|
-
<Field.FieldSet>
|
|
195
|
-
<Field.FieldLegend variant="label">Preferences</Field.FieldLegend>
|
|
196
|
-
<Field.FieldDescription>Select all that apply.</Field.FieldDescription>
|
|
197
|
-
<Field.FieldGroup class="gap-3">
|
|
198
|
-
<Field.Field orientation="horizontal">
|
|
199
|
-
<Checkbox id="dark" />
|
|
200
|
-
<Field.FieldLabel for="dark" class="font-normal"
|
|
201
|
-
>Dark mode</Field.FieldLabel
|
|
202
|
-
>
|
|
203
|
-
</Field.Field>
|
|
204
|
-
</Field.FieldGroup>
|
|
205
|
-
</Field.FieldSet>
|
|
206
|
-
```
|
|
207
|
-
|
|
208
|
-
---
|
|
209
|
-
|
|
210
|
-
## Field validation and disabled states
|
|
211
|
-
|
|
212
|
-
Both attributes are needed — `data-invalid`/`data-disabled` styles the field (label, description), while `aria-invalid`/`disabled` styles the control.
|
|
213
|
-
|
|
214
|
-
```svelte
|
|
215
|
-
<script lang="ts">
|
|
216
|
-
import * as Field from "$lib/components/ui/field";
|
|
217
|
-
import { Input } from "$lib/components/ui/input";
|
|
218
|
-
</script>
|
|
219
|
-
|
|
220
|
-
<!-- Invalid. -->
|
|
221
|
-
<Field.Field data-invalid>
|
|
222
|
-
<Field.FieldLabel for="email">Email</Field.FieldLabel>
|
|
223
|
-
<Input id="email" aria-invalid />
|
|
224
|
-
<Field.FieldDescription>Invalid email address.</Field.FieldDescription>
|
|
225
|
-
</Field.Field>
|
|
226
|
-
|
|
227
|
-
<!-- Disabled. -->
|
|
228
|
-
<Field.Field data-disabled>
|
|
229
|
-
<Field.FieldLabel for="email">Email</Field.FieldLabel>
|
|
230
|
-
<Input id="email" disabled />
|
|
231
|
-
</Field.Field>
|
|
232
|
-
```
|
|
233
|
-
|
|
234
|
-
Works for all controls: `Input`, `Textarea`, `Select`, `Checkbox`, `RadioGroupItem`, `Switch`, `Slider`, `NativeSelect`, `InputOTP`.
|
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
# Icons
|
|
2
|
-
|
|
3
|
-
**Always use the project's configured `iconLibrary` for imports.** Check the `iconLibrary` field in `components.json`: `lucide` → `@lucide/svelte`, `tabler` → `@tabler/icons-svelte`, etc. Never assume `@lucide/svelte`.
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Icons in Button use data-icon attribute
|
|
8
|
-
|
|
9
|
-
Add `data-icon="inline-start"` (prefix) or `data-icon="inline-end"` (suffix) to the icon. No sizing classes on the icon.
|
|
10
|
-
|
|
11
|
-
**Incorrect:**
|
|
12
|
-
|
|
13
|
-
```svelte
|
|
14
|
-
<script lang="ts">
|
|
15
|
-
import { Button } from "$lib/components/ui/button";
|
|
16
|
-
import SearchIcon from "@lucide/svelte/icons/search";
|
|
17
|
-
</script>
|
|
18
|
-
|
|
19
|
-
<Button>
|
|
20
|
-
<SearchIcon class="mr-2 size-4" />
|
|
21
|
-
Search
|
|
22
|
-
</Button>
|
|
23
|
-
```
|
|
24
|
-
|
|
25
|
-
**Correct:**
|
|
26
|
-
|
|
27
|
-
```svelte
|
|
28
|
-
<script lang="ts">
|
|
29
|
-
import { Button } from "$lib/components/ui/button";
|
|
30
|
-
import SearchIcon from "@lucide/svelte/icons/search";
|
|
31
|
-
import ArrowRightIcon from "@lucide/svelte/icons/arrow-right";
|
|
32
|
-
</script>
|
|
33
|
-
|
|
34
|
-
<Button>
|
|
35
|
-
<SearchIcon data-icon="inline-start" />
|
|
36
|
-
Search
|
|
37
|
-
</Button>
|
|
38
|
-
|
|
39
|
-
<Button>
|
|
40
|
-
Next
|
|
41
|
-
<ArrowRightIcon data-icon="inline-end" />
|
|
42
|
-
</Button>
|
|
43
|
-
```
|
|
44
|
-
|
|
45
|
-
---
|
|
46
|
-
|
|
47
|
-
## No sizing classes on icons inside components
|
|
48
|
-
|
|
49
|
-
Components handle icon sizing via CSS. Don't add `size-4`, `w-4 h-4`, or other sizing classes to icons inside `<Button>`, `DropdownMenu.Item`, `Alert.Root`, `Sidebar.*`, or other shadcn-svelte components — unless the user explicitly asks for custom icon sizes.
|
|
50
|
-
|
|
51
|
-
**Incorrect:**
|
|
52
|
-
|
|
53
|
-
```svelte
|
|
54
|
-
<script lang="ts">
|
|
55
|
-
import { Button } from "$lib/components/ui/button";
|
|
56
|
-
import SearchIcon from "@lucide/svelte/icons/search";
|
|
57
|
-
</script>
|
|
58
|
-
|
|
59
|
-
<Button>
|
|
60
|
-
<SearchIcon class="size-4" data-icon="inline-start" />
|
|
61
|
-
Search
|
|
62
|
-
</Button>
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
**Correct:**
|
|
66
|
-
|
|
67
|
-
```svelte
|
|
68
|
-
<script lang="ts">
|
|
69
|
-
import { Button } from "$lib/components/ui/button";
|
|
70
|
-
import SearchIcon from "@lucide/svelte/icons/search";
|
|
71
|
-
</script>
|
|
72
|
-
|
|
73
|
-
<Button>
|
|
74
|
-
<SearchIcon data-icon="inline-start" />
|
|
75
|
-
Search
|
|
76
|
-
</Button>
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
The same applies to icons inside `DropdownMenu.Item`, sidebar items, and other menu rows — no extra sizing classes on the icon component.
|
|
80
|
-
|
|
81
|
-
---
|
|
82
|
-
|
|
83
|
-
## Pass icons as components, not string keys
|
|
84
|
-
|
|
85
|
-
Use a component reference, not a string key to a lookup map.
|
|
86
|
-
|
|
87
|
-
**Incorrect:**
|
|
88
|
-
|
|
89
|
-
```svelte
|
|
90
|
-
<!-- String key lookup — avoid -->
|
|
91
|
-
<DynamicIcon name="check" />
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
**Correct:**
|
|
95
|
-
|
|
96
|
-
```svelte
|
|
97
|
-
<script lang="ts">
|
|
98
|
-
import type { Component } from "svelte";
|
|
99
|
-
import CheckIcon from "@lucide/svelte/icons/check";
|
|
100
|
-
|
|
101
|
-
let { Icon }: { Icon: Component } = $props();
|
|
102
|
-
</script>
|
|
103
|
-
|
|
104
|
-
<Icon />
|
|
105
|
-
|
|
106
|
-
<!-- <StatusBadge Icon={CheckIcon} /> -->
|
|
107
|
-
```
|