bref-ui 0.3.0 → 2.0.0
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/LICENSE +21 -0
- package/cli/commands/add/approve-overwrites.ts +17 -0
- package/cli/commands/add/display-changes.ts +11 -0
- package/cli/commands/add/index.ts +30 -0
- package/cli/commands/add/review-changes.ts +18 -0
- package/cli/commands/add/utils.ts +11 -0
- package/cli/commands/execute.ts +39 -0
- package/cli/commands/index.ts +19 -0
- package/cli/commands/init.ts +17 -0
- package/cli/commands/parse.ts +24 -0
- package/cli/commands/types.ts +2 -0
- package/cli/config/read/index.ts +15 -0
- package/cli/config/read/normalize-config.ts +21 -0
- package/cli/config/read/read-config-file.ts +13 -0
- package/cli/config/resolve/index.ts +20 -0
- package/cli/config/resolve/resolve-alias-target.ts +17 -0
- package/cli/config/resolve/resolve-alias.ts +17 -0
- package/cli/config/types.ts +5 -0
- package/cli/index.ts +4 -0
- package/cli/installation/copy/index.ts +25 -0
- package/cli/installation/copy/validate-overwrite-approvals.ts +18 -0
- package/cli/installation/copy/write-prepared-files.ts +26 -0
- package/cli/installation/exports/collect-exports.ts +19 -0
- package/cli/installation/exports/create-additions.ts +26 -0
- package/cli/installation/exports/index.ts +27 -0
- package/cli/installation/exports/merge-content.ts +12 -0
- package/cli/installation/exports/read-declared-export-names.ts +24 -0
- package/cli/installation/exports/read-exported-names.ts +21 -0
- package/cli/installation/exports/read-index.ts +14 -0
- package/cli/installation/exports/read-reexported-names.ts +24 -0
- package/cli/installation/exports/types.ts +10 -0
- package/cli/installation/exports/utils.ts +54 -0
- package/cli/installation/index.ts +35 -0
- package/cli/installation/parser/index.ts +29 -0
- package/cli/installation/parser/types.ts +12 -0
- package/cli/installation/parser/utils.ts +45 -0
- package/cli/installation/prepare/collect-source-files.ts +15 -0
- package/cli/installation/prepare/index.ts +15 -0
- package/cli/installation/prepare/read-source-files.ts +21 -0
- package/cli/installation/prepare/rewrite-imports.ts +50 -0
- package/cli/installation/prepare/rewrite-source.ts +36 -0
- package/cli/installation/prepare/types.ts +7 -0
- package/cli/installation/preview/compare-prepared-files.ts +18 -0
- package/cli/installation/preview/index.ts +18 -0
- package/cli/installation/preview/read-destination-files.ts +25 -0
- package/cli/installation/preview/types.ts +9 -0
- package/cli/installation/types.ts +15 -0
- package/cli/pack.ts +6 -0
- package/cli/registry/load/create-registry.ts +25 -0
- package/cli/registry/load/discover-manifests.ts +9 -0
- package/cli/registry/load/index.ts +21 -0
- package/cli/registry/load/load-entry.ts +22 -0
- package/cli/registry/load/utils.ts +70 -0
- package/cli/registry/load/validate-dependencies.ts +33 -0
- package/cli/registry/plan/collect-entries.ts +28 -0
- package/cli/registry/plan/index.ts +14 -0
- package/cli/registry/types.ts +17 -0
- package/dist/button/button.svelte +126 -0
- package/dist/button/button.svelte.d.ts +4 -0
- package/dist/button/registry.json +6 -0
- package/dist/button/types.d.ts +32 -0
- package/dist/checkbox/checkbox.svelte +143 -0
- package/dist/checkbox/checkbox.svelte.d.ts +4 -0
- package/dist/checkbox/registry.json +6 -0
- package/dist/checkbox/types.d.ts +6 -0
- package/dist/combobox/combobox.svelte +156 -0
- package/dist/combobox/combobox.svelte.d.ts +4 -0
- package/dist/combobox/form.svelte +61 -0
- package/dist/combobox/form.svelte.d.ts +4 -0
- package/dist/combobox/input.svelte +132 -0
- package/dist/combobox/input.svelte.d.ts +4 -0
- package/dist/combobox/list.svelte +78 -0
- package/dist/combobox/list.svelte.d.ts +4 -0
- package/dist/combobox/option.svelte +77 -0
- package/dist/combobox/option.svelte.d.ts +4 -0
- package/dist/combobox/registry.json +6 -0
- package/dist/combobox/types.d.ts +61 -0
- package/dist/dialog/dialog.svelte +182 -0
- package/dist/dialog/dialog.svelte.d.ts +4 -0
- package/dist/dialog/footer.svelte +26 -0
- package/dist/dialog/footer.svelte.d.ts +7 -0
- package/dist/dialog/header.svelte +56 -0
- package/dist/dialog/header.svelte.d.ts +4 -0
- package/dist/dialog/registry.json +6 -0
- package/dist/dialog/types.d.ts +31 -0
- package/dist/icon/icon.svelte +108 -0
- package/dist/icon/icon.svelte.d.ts +4 -0
- package/dist/icon/names.d.ts +7 -0
- package/dist/icon/registry.json +6 -0
- package/dist/icon/types.d.ts +16 -0
- package/dist/index.d.ts +20 -2
- package/dist/index.js +20 -2
- package/dist/pill/content.svelte +23 -0
- package/dist/pill/content.svelte.d.ts +4 -0
- package/dist/pill/on-delete.svelte +26 -0
- package/dist/pill/on-delete.svelte.d.ts +4 -0
- package/dist/pill/pill.svelte +200 -0
- package/dist/{base/pill → pill}/pill.svelte.d.ts +1 -1
- package/dist/pill/registry.json +6 -0
- package/dist/pill/types.d.ts +19 -0
- package/dist/pill-choice-group/pill-choice-group.svelte +131 -0
- package/dist/pill-choice-group/pill-choice-group.svelte.d.ts +4 -0
- package/dist/pill-choice-group/registry.json +6 -0
- package/dist/pill-choice-group/types.d.ts +13 -0
- package/dist/pill-group/container.svelte +40 -0
- package/dist/pill-group/container.svelte.d.ts +4 -0
- package/dist/pill-group/pill-group.svelte +27 -0
- package/dist/pill-group/pill-group.svelte.d.ts +4 -0
- package/dist/pill-group/registry.json +6 -0
- package/dist/pill-group/types.d.ts +13 -0
- package/dist/popover/popover.svelte +86 -0
- package/dist/popover/popover.svelte.d.ts +4 -0
- package/dist/popover/registry.json +6 -0
- package/dist/popover/types.d.ts +8 -0
- package/dist/progress/progress.svelte +256 -0
- package/dist/progress/progress.svelte.d.ts +4 -0
- package/dist/progress/registry.json +6 -0
- package/dist/progress/types.d.ts +11 -0
- package/dist/select/empty.svelte +25 -0
- package/dist/select/empty.svelte.d.ts +4 -0
- package/dist/select/list.svelte +27 -0
- package/dist/select/list.svelte.d.ts +4 -0
- package/dist/select/option.svelte +64 -0
- package/dist/select/option.svelte.d.ts +4 -0
- package/dist/select/registry.json +6 -0
- package/dist/select/select.svelte +70 -0
- package/dist/{base/select → select}/select.svelte.d.ts +2 -2
- package/dist/select/trigger.svelte +86 -0
- package/dist/select/trigger.svelte.d.ts +4 -0
- package/dist/select/types.d.ts +31 -0
- package/dist/select/types.js +1 -0
- package/dist/spinner/registry.json +6 -0
- package/dist/spinner/spinner.svelte +114 -0
- package/dist/spinner/spinner.svelte.d.ts +4 -0
- package/dist/spinner/types.d.ts +6 -0
- package/dist/spinner/types.js +1 -0
- package/dist/surface/registry.json +6 -0
- package/dist/surface/surface.svelte +96 -0
- package/dist/surface/surface.svelte.d.ts +4 -0
- package/dist/surface/types.d.ts +25 -0
- package/dist/surface/types.js +1 -0
- package/dist/switch/registry.json +6 -0
- package/dist/switch/switch.svelte +162 -0
- package/dist/switch/switch.svelte.d.ts +4 -0
- package/dist/switch/types.d.ts +8 -0
- package/dist/switch/types.js +1 -0
- package/dist/text-area/registry.json +8 -0
- package/dist/text-area/text-area.svelte +186 -0
- package/dist/text-area/text-area.svelte.d.ts +4 -0
- package/dist/text-area/types.d.ts +12 -0
- package/dist/text-area/types.js +1 -0
- package/dist/text-input/registry.json +8 -0
- package/dist/text-input/text-input.svelte +189 -0
- package/dist/text-input/text-input.svelte.d.ts +4 -0
- package/dist/text-input/types.d.ts +11 -0
- package/dist/text-input/types.js +1 -0
- package/dist/theme/cli-theme.svelte +16 -0
- package/dist/theme/cli-theme.svelte.d.ts +7 -0
- package/dist/theme/colors.svelte +102 -0
- package/dist/theme/colors.svelte.d.ts +4 -0
- package/dist/theme/fonts.svelte +10 -0
- package/dist/theme/fonts.svelte.d.ts +26 -0
- package/dist/theme/registry.json +13 -0
- package/dist/theme/styles.svelte +50 -0
- package/dist/theme/styles.svelte.d.ts +26 -0
- package/dist/theme/surface.d.ts +3 -0
- package/dist/theme/surface.js +10 -0
- package/dist/theme/surfaces.svelte +208 -0
- package/dist/theme/surfaces.svelte.d.ts +18 -0
- package/dist/theme/theme-mode-toggle.svelte +9 -0
- package/dist/theme/theme-mode-toggle.svelte.d.ts +4 -0
- package/dist/theme/theme.svelte +16 -0
- package/dist/theme/theme.svelte.d.ts +4 -0
- package/dist/theme/types.d.ts +17 -0
- package/dist/theme/types.js +1 -0
- package/dist/tree-view/registry.json +15 -0
- package/dist/tree-view/tree-node/chevron-button.svelte +56 -0
- package/dist/tree-view/tree-node/chevron-button.svelte.d.ts +4 -0
- package/dist/tree-view/tree-node/content.svelte +62 -0
- package/dist/tree-view/tree-node/content.svelte.d.ts +4 -0
- package/dist/tree-view/tree-node/delete-button.svelte +52 -0
- package/dist/tree-view/tree-node/delete-button.svelte.d.ts +4 -0
- package/dist/tree-view/tree-node/tree-node.svelte +111 -0
- package/dist/{base/tree-view → tree-view/tree-node}/tree-node.svelte.d.ts +2 -3
- package/dist/tree-view/tree-view-section.svelte +42 -0
- package/dist/tree-view/tree-view-section.svelte.d.ts +4 -0
- package/dist/tree-view/tree-view.svelte +65 -0
- package/dist/{base/tree-view → tree-view}/tree-view.svelte.d.ts +2 -2
- package/dist/tree-view/types.d.ts +31 -0
- package/dist/tree-view/types.js +1 -0
- package/dist/types.d.ts +25 -0
- package/dist/types.js +1 -0
- package/package.json +39 -45
- package/readme.md +157 -0
- package/src/lib/button/button.svelte +126 -0
- package/src/lib/button/registry.json +6 -0
- package/src/lib/button/types.ts +42 -0
- package/src/lib/checkbox/checkbox.svelte +143 -0
- package/src/lib/checkbox/registry.json +6 -0
- package/src/lib/checkbox/types.ts +7 -0
- package/src/lib/combobox/combobox.svelte +156 -0
- package/src/lib/combobox/form.svelte +61 -0
- package/src/lib/combobox/input.svelte +132 -0
- package/src/lib/combobox/list.svelte +78 -0
- package/src/lib/combobox/option.svelte +77 -0
- package/src/lib/combobox/registry.json +6 -0
- package/src/lib/combobox/types.ts +89 -0
- package/src/lib/dialog/dialog.svelte +182 -0
- package/src/lib/dialog/footer.svelte +26 -0
- package/src/lib/dialog/header.svelte +56 -0
- package/src/lib/dialog/registry.json +6 -0
- package/src/lib/dialog/types.ts +35 -0
- package/src/lib/icon/icon.svelte +108 -0
- package/src/lib/icon/names.ts +3794 -0
- package/src/lib/icon/registry.json +6 -0
- package/src/lib/icon/types.ts +18 -0
- package/src/lib/index.ts +20 -0
- package/src/lib/pill/content.svelte +23 -0
- package/src/lib/pill/on-delete.svelte +26 -0
- package/src/lib/pill/pill.svelte +200 -0
- package/src/lib/pill/registry.json +6 -0
- package/src/lib/pill/types.ts +22 -0
- package/src/lib/pill-choice-group/pill-choice-group.svelte +131 -0
- package/src/lib/pill-choice-group/registry.json +6 -0
- package/src/lib/pill-choice-group/types.ts +14 -0
- package/src/lib/pill-group/container.svelte +40 -0
- package/src/lib/pill-group/pill-group.svelte +27 -0
- package/src/lib/pill-group/registry.json +6 -0
- package/src/lib/pill-group/types.ts +15 -0
- package/src/lib/popover/popover.svelte +86 -0
- package/src/lib/popover/registry.json +6 -0
- package/src/lib/popover/types.ts +9 -0
- package/src/lib/progress/progress.svelte +256 -0
- package/src/lib/progress/registry.json +6 -0
- package/src/lib/progress/types.ts +15 -0
- package/src/lib/select/empty.svelte +25 -0
- package/src/lib/select/list.svelte +27 -0
- package/src/lib/select/option.svelte +64 -0
- package/src/lib/select/registry.json +6 -0
- package/src/lib/select/select.svelte +70 -0
- package/src/lib/select/trigger.svelte +86 -0
- package/src/lib/select/types.ts +41 -0
- package/src/lib/spinner/registry.json +6 -0
- package/src/lib/spinner/spinner.svelte +114 -0
- package/src/lib/spinner/types.ts +7 -0
- package/src/lib/surface/registry.json +6 -0
- package/src/lib/surface/surface.svelte +96 -0
- package/src/lib/surface/types.ts +28 -0
- package/src/lib/switch/registry.json +6 -0
- package/src/lib/switch/switch.svelte +162 -0
- package/src/lib/switch/types.ts +12 -0
- package/src/lib/text-area/registry.json +8 -0
- package/src/lib/text-area/text-area.svelte +186 -0
- package/src/lib/text-area/types.ts +13 -0
- package/src/lib/text-input/registry.json +8 -0
- package/src/lib/text-input/text-input.svelte +189 -0
- package/src/lib/text-input/types.ts +12 -0
- package/src/lib/theme/cli-theme.svelte +16 -0
- package/src/lib/theme/colors.svelte +102 -0
- package/src/lib/theme/fonts.svelte +10 -0
- package/src/lib/theme/registry.json +13 -0
- package/src/lib/theme/styles.svelte +50 -0
- package/src/lib/theme/surface.ts +18 -0
- package/src/lib/theme/surfaces.svelte +208 -0
- package/src/lib/theme/theme-mode-toggle.svelte +9 -0
- package/src/lib/theme/theme.svelte +16 -0
- package/src/lib/theme/types.ts +18 -0
- package/src/lib/tree-view/registry.json +15 -0
- package/src/lib/tree-view/tree-node/chevron-button.svelte +56 -0
- package/src/lib/tree-view/tree-node/content.svelte +62 -0
- package/src/lib/tree-view/tree-node/delete-button.svelte +52 -0
- package/src/lib/tree-view/tree-node/tree-node.svelte +111 -0
- package/src/lib/tree-view/tree-view-section.svelte +42 -0
- package/src/lib/tree-view/tree-view.svelte +65 -0
- package/src/lib/tree-view/types.ts +39 -0
- package/src/lib/types.ts +45 -0
- package/README.md +0 -110
- package/dist/base/button/button.svelte +0 -260
- package/dist/base/button/button.svelte.d.ts +0 -6
- package/dist/base/button/icon-button.svelte +0 -226
- package/dist/base/button/icon-button.svelte.d.ts +0 -6
- package/dist/base/button/index.d.ts +0 -2
- package/dist/base/button/index.js +0 -2
- package/dist/base/button/types.d.ts +0 -17
- package/dist/base/icon/icon.svelte +0 -118
- package/dist/base/icon/icon.svelte.d.ts +0 -7
- package/dist/base/icon/index.d.ts +0 -2
- package/dist/base/icon/index.js +0 -2
- package/dist/base/icon/types.d.ts +0 -10
- package/dist/base/index.d.ts +0 -12
- package/dist/base/index.js +0 -12
- package/dist/base/loading/circular-loading.svelte +0 -95
- package/dist/base/loading/circular-loading.svelte.d.ts +0 -4
- package/dist/base/loading/index.d.ts +0 -4
- package/dist/base/loading/index.js +0 -4
- package/dist/base/loading/morphing-shapes-loading.svelte +0 -241
- package/dist/base/loading/morphing-shapes-loading.svelte.d.ts +0 -4
- package/dist/base/loading/pulsing-dots-loading.svelte +0 -115
- package/dist/base/loading/pulsing-dots-loading.svelte.d.ts +0 -4
- package/dist/base/loading/textual-loading.svelte +0 -179
- package/dist/base/loading/textual-loading.svelte.d.ts +0 -4
- package/dist/base/loading/types.d.ts +0 -16
- package/dist/base/pill/index.d.ts +0 -1
- package/dist/base/pill/index.js +0 -1
- package/dist/base/pill/pill.svelte +0 -146
- package/dist/base/pill/types.d.ts +0 -9
- package/dist/base/progress-bar/index.d.ts +0 -1
- package/dist/base/progress-bar/index.js +0 -1
- package/dist/base/progress-bar/progress-bar.svelte +0 -174
- package/dist/base/progress-bar/progress-bar.svelte.d.ts +0 -4
- package/dist/base/progress-bar/types.d.ts +0 -9
- package/dist/base/select/index.d.ts +0 -2
- package/dist/base/select/index.js +0 -2
- package/dist/base/select/select.svelte +0 -145
- package/dist/base/select/types.d.ts +0 -16
- package/dist/base/slider/index.d.ts +0 -1
- package/dist/base/slider/index.js +0 -1
- package/dist/base/slider/slider.svelte +0 -192
- package/dist/base/slider/slider.svelte.d.ts +0 -6
- package/dist/base/slider/types.d.ts +0 -12
- package/dist/base/text-input/area-text-input.svelte +0 -105
- package/dist/base/text-input/area-text-input.svelte.d.ts +0 -6
- package/dist/base/text-input/index.d.ts +0 -2
- package/dist/base/text-input/index.js +0 -2
- package/dist/base/text-input/text-input.svelte +0 -213
- package/dist/base/text-input/text-input.svelte.d.ts +0 -6
- package/dist/base/text-input/types.d.ts +0 -27
- package/dist/base/theme/color-tokens.d.ts +0 -36
- package/dist/base/theme/color-tokens.js +0 -105
- package/dist/base/theme/index.d.ts +0 -3
- package/dist/base/theme/index.js +0 -3
- package/dist/base/theme/mode.d.ts +0 -3
- package/dist/base/theme/mode.js +0 -14
- package/dist/base/theme/theme.svelte +0 -87
- package/dist/base/theme/theme.svelte.d.ts +0 -3
- package/dist/base/theme/types.d.ts +0 -27
- package/dist/base/theme/types.js +0 -20
- package/dist/base/toggle/index.d.ts +0 -1
- package/dist/base/toggle/index.js +0 -1
- package/dist/base/toggle/toggle.svelte +0 -109
- package/dist/base/toggle/toggle.svelte.d.ts +0 -4
- package/dist/base/toggle/types.d.ts +0 -7
- package/dist/base/tree-view/index.d.ts +0 -3
- package/dist/base/tree-view/index.js +0 -3
- package/dist/base/tree-view/tree-node.svelte +0 -132
- package/dist/base/tree-view/tree-view.svelte +0 -56
- package/dist/base/tree-view/types.d.ts +0 -23
- package/dist/base/types.d.ts +0 -4
- /package/dist/{base/button → button}/types.js +0 -0
- /package/dist/{base/icon → checkbox}/types.js +0 -0
- /package/dist/{base/loading → combobox}/types.js +0 -0
- /package/dist/{base/pill → dialog}/types.js +0 -0
- /package/dist/{base/progress-bar/types.js → icon/names.js} +0 -0
- /package/dist/{base/select → icon}/types.js +0 -0
- /package/dist/{base/toggle → pill}/types.js +0 -0
- /package/dist/{base/slider → pill-choice-group}/types.js +0 -0
- /package/dist/{base/text-input → pill-group}/types.js +0 -0
- /package/dist/{base/tree-view → popover}/types.js +0 -0
- /package/dist/{base → progress}/types.js +0 -0
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import type { SvelteHTMLElements } from 'svelte/elements';
|
|
2
|
-
import type { TextInputProps } from './types.ts';
|
|
3
|
-
type $$ComponentProps = TextInputProps & Omit<SvelteHTMLElements['input'], 'value'>;
|
|
4
|
-
declare const TextInput: import("svelte").Component<$$ComponentProps, {}, "">;
|
|
5
|
-
type TextInput = ReturnType<typeof TextInput>;
|
|
6
|
-
export default TextInput;
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import type { IconButtonProps } from '../button/types.ts';
|
|
2
|
-
import type { IconName } from '../icon/types.ts';
|
|
3
|
-
import type { Variant } from '../types.ts';
|
|
4
|
-
interface BaseTextInputProps {
|
|
5
|
-
value: string;
|
|
6
|
-
placeholder?: string;
|
|
7
|
-
disabled?: boolean;
|
|
8
|
-
onChange: (value: string) => void;
|
|
9
|
-
wide?: boolean;
|
|
10
|
-
}
|
|
11
|
-
export interface TextInputProps extends BaseTextInputProps {
|
|
12
|
-
startIcon?: IconName;
|
|
13
|
-
ctaIconButton?: IconButtonProps & {
|
|
14
|
-
triggerOnEnter?: boolean;
|
|
15
|
-
clearOnTrigger?: boolean;
|
|
16
|
-
};
|
|
17
|
-
variant?: Extract<Variant, 'soft' | 'ghost'>;
|
|
18
|
-
validation?: {
|
|
19
|
-
regex: RegExp;
|
|
20
|
-
message: string;
|
|
21
|
-
};
|
|
22
|
-
}
|
|
23
|
-
export interface AreaTextInputProps extends BaseTextInputProps {
|
|
24
|
-
rows?: number;
|
|
25
|
-
resizable?: boolean;
|
|
26
|
-
}
|
|
27
|
-
export {};
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import type { ColorTokenProps, ThemeProps } from './types.ts';
|
|
2
|
-
/**
|
|
3
|
-
* Generates a minimal set of color tokens based on a base color.
|
|
4
|
-
* Produces soft, saturated, and contrast variants. Hover/active states are
|
|
5
|
-
* left to components using CSS color-mix() for context-aware state derivation.
|
|
6
|
-
*
|
|
7
|
-
* @param color - The base color in any valid CSS color format
|
|
8
|
-
* @returns An object containing soft, saturated, and contrast color tokens
|
|
9
|
-
*/
|
|
10
|
-
declare const generateColorTokens: (color: string) => ColorTokenProps;
|
|
11
|
-
/**
|
|
12
|
-
* Sets a CSS custom property on the document root element.
|
|
13
|
-
* Automatically prefixes the key with '--' if not already present.
|
|
14
|
-
*
|
|
15
|
-
* @param key - The CSS custom property name (with or without '--' prefix)
|
|
16
|
-
* @param value - The value to assign to the CSS custom property
|
|
17
|
-
*/
|
|
18
|
-
declare const setCSSProperty: (key: string, value: string) => void;
|
|
19
|
-
/**
|
|
20
|
-
* Generates and applies a complete set of color tokens as CSS custom properties.
|
|
21
|
-
* Each token is set as `--color-{colorKey}` and `--color-{colorKey}-{variant}` on the document root.
|
|
22
|
-
*
|
|
23
|
-
* @param colorKey - The semantic name for the color (e.g., 'primary', 'success')
|
|
24
|
-
* @param baseColor - The base color in any valid CSS color format
|
|
25
|
-
*/
|
|
26
|
-
declare const setColorTokens: (colorKey: string, baseColor: string) => void;
|
|
27
|
-
/**
|
|
28
|
-
* Applies all theme tokens as CSS custom properties.
|
|
29
|
-
* Palette colors are set without mode prefix (consistent across themes).
|
|
30
|
-
* Surface colors (background/foreground) are set with mode prefix for light/dark switching.
|
|
31
|
-
*
|
|
32
|
-
* @param theme - The theme configuration object containing palette and surface colors
|
|
33
|
-
*/
|
|
34
|
-
declare const setThemeTokens: (theme: ThemeProps) => void;
|
|
35
|
-
export { generateColorTokens, setCSSProperty, setThemeTokens };
|
|
36
|
-
export default setColorTokens;
|
|
@@ -1,105 +0,0 @@
|
|
|
1
|
-
import { colord } from 'colord';
|
|
2
|
-
/**
|
|
3
|
-
* Generates a soft background color from the base color.
|
|
4
|
-
* Produces a lighter, slightly desaturated shade suitable as a
|
|
5
|
-
* background when using the base color as foreground.
|
|
6
|
-
*
|
|
7
|
-
* @param baseColor - The base color in any valid CSS color format
|
|
8
|
-
* @returns A hex color string representing the soft background color
|
|
9
|
-
*/
|
|
10
|
-
const generateSoftColor = (baseColor) => colord(baseColor).lighten(0.25).desaturate(0.1).toHex();
|
|
11
|
-
/**
|
|
12
|
-
* Generates a saturated (darker) version of the base color.
|
|
13
|
-
* Produces a deeper, more intense shade suitable for emphasis or contrast.
|
|
14
|
-
*
|
|
15
|
-
* @param baseColor - The base color in any valid CSS color format
|
|
16
|
-
* @returns A hex color string representing the saturated color
|
|
17
|
-
*/
|
|
18
|
-
const generateSaturatedColor = (baseColor) => colord(baseColor).darken(0.15).saturate(0.1).toHex();
|
|
19
|
-
/**
|
|
20
|
-
* Generates a contrast color for text or icons placed on top of the base color.
|
|
21
|
-
* Returns either black or white depending on the base color's perceived brightness,
|
|
22
|
-
* ensuring readability and accessibility (WCAG compliance).
|
|
23
|
-
*
|
|
24
|
-
* @param baseColor - The base color in any valid CSS color format
|
|
25
|
-
* @returns '#ffffff' for dark base colors, '#000000' for light base colors
|
|
26
|
-
*/
|
|
27
|
-
const generateContrastColor = (baseColor) => colord(baseColor).isDark() ? '#ffffff' : '#000000';
|
|
28
|
-
/**
|
|
29
|
-
* Generates a minimal set of color tokens based on a base color.
|
|
30
|
-
* Produces soft, saturated, and contrast variants. Hover/active states are
|
|
31
|
-
* left to components using CSS color-mix() for context-aware state derivation.
|
|
32
|
-
*
|
|
33
|
-
* @param color - The base color in any valid CSS color format
|
|
34
|
-
* @returns An object containing soft, saturated, and contrast color tokens
|
|
35
|
-
*/
|
|
36
|
-
const generateColorTokens = (color) => ({
|
|
37
|
-
soft: generateSoftColor(color),
|
|
38
|
-
saturated: generateSaturatedColor(color),
|
|
39
|
-
contrast: generateContrastColor(color)
|
|
40
|
-
});
|
|
41
|
-
/**
|
|
42
|
-
* Sets a CSS custom property on the document root element.
|
|
43
|
-
* Automatically prefixes the key with '--' if not already present.
|
|
44
|
-
*
|
|
45
|
-
* @param key - The CSS custom property name (with or without '--' prefix)
|
|
46
|
-
* @param value - The value to assign to the CSS custom property
|
|
47
|
-
*/
|
|
48
|
-
const setCSSProperty = (key, value) => {
|
|
49
|
-
const prefixedKey = key.startsWith('--') ? key : `--${key}`;
|
|
50
|
-
document.documentElement.style.setProperty(prefixedKey, value);
|
|
51
|
-
};
|
|
52
|
-
/**
|
|
53
|
-
* Generates and applies a complete set of color tokens as CSS custom properties.
|
|
54
|
-
* Each token is set as `--color-{colorKey}` and `--color-{colorKey}-{variant}` on the document root.
|
|
55
|
-
*
|
|
56
|
-
* @param colorKey - The semantic name for the color (e.g., 'primary', 'success')
|
|
57
|
-
* @param baseColor - The base color in any valid CSS color format
|
|
58
|
-
*/
|
|
59
|
-
const setColorTokens = (colorKey, baseColor) => {
|
|
60
|
-
const tokens = generateColorTokens(baseColor);
|
|
61
|
-
setCSSProperty(`--color-${colorKey}`, baseColor);
|
|
62
|
-
Object.entries(tokens).forEach(([variant, value]) => {
|
|
63
|
-
setCSSProperty(`--color-${colorKey}-${variant}`, value);
|
|
64
|
-
});
|
|
65
|
-
};
|
|
66
|
-
/**
|
|
67
|
-
* Generates and applies surface color tokens with mode prefix for light/dark switching.
|
|
68
|
-
* Each token is set as `--color-{mode}-{surfaceKey}-{variant}` on the document root.
|
|
69
|
-
*
|
|
70
|
-
* @param surfaceKey - The semantic name for the surface (e.g., 'background', 'foreground')
|
|
71
|
-
* @param baseColor - The base color in any valid CSS color format
|
|
72
|
-
* @param mode - The theme mode ('light' or 'dark')
|
|
73
|
-
*/
|
|
74
|
-
const setSurfaceTokens = (surfaceKey, baseColor, mode) => {
|
|
75
|
-
const tokens = generateColorTokens(baseColor);
|
|
76
|
-
setCSSProperty(`--color-${mode}-${surfaceKey}`, baseColor);
|
|
77
|
-
Object.entries(tokens).forEach(([variant, value]) => {
|
|
78
|
-
setCSSProperty(`--color-${mode}-${surfaceKey}-${variant}`, value);
|
|
79
|
-
});
|
|
80
|
-
};
|
|
81
|
-
/**
|
|
82
|
-
* Applies all theme tokens as CSS custom properties.
|
|
83
|
-
* Palette colors are set without mode prefix (consistent across themes).
|
|
84
|
-
* Surface colors (background/foreground) are set with mode prefix for light/dark switching.
|
|
85
|
-
*
|
|
86
|
-
* @param theme - The theme configuration object containing palette and surface colors
|
|
87
|
-
*/
|
|
88
|
-
const setThemeTokens = (theme) => {
|
|
89
|
-
// Palette colors: same across light/dark modes
|
|
90
|
-
Object.entries(theme.paletteHex).forEach(([color, value]) => {
|
|
91
|
-
setColorTokens(color, value);
|
|
92
|
-
});
|
|
93
|
-
// Surface colors: different for light/dark modes
|
|
94
|
-
// Light mode uses colors as-is
|
|
95
|
-
Object.entries(theme.surfaceHex).forEach(([surface, value]) => {
|
|
96
|
-
setSurfaceTokens(surface, value, 'light');
|
|
97
|
-
});
|
|
98
|
-
// Dark mode flips background and foreground
|
|
99
|
-
setSurfaceTokens('background', theme.surfaceHex.foreground, 'dark');
|
|
100
|
-
setSurfaceTokens('foreground', theme.surfaceHex.background, 'dark');
|
|
101
|
-
// Border color
|
|
102
|
-
setCSSProperty('--color-border', theme.border.colorHex);
|
|
103
|
-
};
|
|
104
|
-
export { generateColorTokens, setCSSProperty, setThemeTokens };
|
|
105
|
-
export default setColorTokens;
|
package/dist/base/theme/index.js
DELETED
package/dist/base/theme/mode.js
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
export const toggleThemeMode = (mode) => {
|
|
2
|
-
if (typeof window === 'undefined')
|
|
3
|
-
return console.warn('toggleThemeMode called on server side');
|
|
4
|
-
document.documentElement.setAttribute('data-theme', mode);
|
|
5
|
-
localStorage.setItem('theme-mode', mode);
|
|
6
|
-
};
|
|
7
|
-
export const initializeThemeMode = () => {
|
|
8
|
-
if (typeof window === 'undefined')
|
|
9
|
-
return 'light';
|
|
10
|
-
const stored = localStorage.getItem('theme-mode');
|
|
11
|
-
const resolved = stored ?? (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light');
|
|
12
|
-
toggleThemeMode(resolved);
|
|
13
|
-
return resolved;
|
|
14
|
-
};
|
|
@@ -1,87 +0,0 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import { setCSSProperty, setThemeTokens } from './color-tokens.js';
|
|
3
|
-
import { initializeThemeMode } from './mode.js';
|
|
4
|
-
import { DEFAULT_THEME, type ThemeProps } from './types.js';
|
|
5
|
-
|
|
6
|
-
const userTheme: ThemeProps | undefined | Partial<ThemeProps> = $props();
|
|
7
|
-
|
|
8
|
-
const theme: ThemeProps = {
|
|
9
|
-
...DEFAULT_THEME,
|
|
10
|
-
...userTheme,
|
|
11
|
-
paletteHex: {
|
|
12
|
-
...DEFAULT_THEME.paletteHex,
|
|
13
|
-
...(userTheme?.paletteHex ?? {})
|
|
14
|
-
},
|
|
15
|
-
surfaceHex: {
|
|
16
|
-
...DEFAULT_THEME.surfaceHex,
|
|
17
|
-
...(userTheme?.surfaceHex ?? {})
|
|
18
|
-
},
|
|
19
|
-
border: {
|
|
20
|
-
...DEFAULT_THEME.border,
|
|
21
|
-
...(userTheme?.border ?? {})
|
|
22
|
-
}
|
|
23
|
-
};
|
|
24
|
-
|
|
25
|
-
$effect.pre(() => {
|
|
26
|
-
setThemeTokens(theme);
|
|
27
|
-
|
|
28
|
-
setCSSProperty(`--border-width`, `${theme.border.widthPx}px`);
|
|
29
|
-
setCSSProperty(`--border-radius`, `${theme.border.radiusRem}rem`);
|
|
30
|
-
setCSSProperty(`--spacing`, `${theme.spacingRem}rem`);
|
|
31
|
-
|
|
32
|
-
initializeThemeMode();
|
|
33
|
-
});
|
|
34
|
-
</script>
|
|
35
|
-
|
|
36
|
-
<style>
|
|
37
|
-
:global(:root),
|
|
38
|
-
:global(:root[data-theme='light']) {
|
|
39
|
-
color-scheme: light;
|
|
40
|
-
--color-background: var(--color-light-background);
|
|
41
|
-
--color-background-soft: var(--color-light-background-soft);
|
|
42
|
-
--color-background-saturated: var(--color-light-background-saturated);
|
|
43
|
-
--color-background-contrast: var(--color-light-background-contrast);
|
|
44
|
-
--color-foreground: var(--color-light-foreground);
|
|
45
|
-
--color-foreground-soft: var(--color-light-foreground-soft);
|
|
46
|
-
--color-foreground-saturated: var(--color-light-foreground-saturated);
|
|
47
|
-
--color-foreground-contrast: var(--color-light-foreground-contrast);
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
:global(*) {
|
|
51
|
-
color: var(--color-foreground);
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
:global(body) {
|
|
55
|
-
background-color: var(--color-background);
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
:global(*) {
|
|
59
|
-
gap: var(--spacing);
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
:global(:root[data-theme='dark']) {
|
|
63
|
-
color-scheme: dark;
|
|
64
|
-
--color-background: var(--color-dark-background);
|
|
65
|
-
--color-background-soft: var(--color-dark-background-soft);
|
|
66
|
-
--color-background-saturated: var(--color-dark-background-saturated);
|
|
67
|
-
--color-background-contrast: var(--color-dark-background-contrast);
|
|
68
|
-
--color-foreground: var(--color-dark-foreground);
|
|
69
|
-
--color-foreground-soft: var(--color-dark-foreground-soft);
|
|
70
|
-
--color-foreground-saturated: var(--color-dark-foreground-saturated);
|
|
71
|
-
--color-foreground-contrast: var(--color-dark-foreground-contrast);
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
@media (prefers-color-scheme: dark) {
|
|
75
|
-
:global(:root:not([data-theme='light'])) {
|
|
76
|
-
color-scheme: dark;
|
|
77
|
-
--color-background: var(--color-dark-background);
|
|
78
|
-
--color-background-soft: var(--color-dark-background-soft);
|
|
79
|
-
--color-background-saturated: var(--color-dark-background-saturated);
|
|
80
|
-
--color-background-contrast: var(--color-dark-background-contrast);
|
|
81
|
-
--color-foreground: var(--color-dark-foreground);
|
|
82
|
-
--color-foreground-soft: var(--color-dark-foreground-soft);
|
|
83
|
-
--color-foreground-saturated: var(--color-dark-foreground-saturated);
|
|
84
|
-
--color-foreground-contrast: var(--color-dark-foreground-contrast);
|
|
85
|
-
}
|
|
86
|
-
}
|
|
87
|
-
</style>
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
export type ThemeMode = 'light' | 'dark';
|
|
2
|
-
export interface ThemeProps {
|
|
3
|
-
paletteHex: {
|
|
4
|
-
primary: string;
|
|
5
|
-
secondary: string;
|
|
6
|
-
success: string;
|
|
7
|
-
warning: string;
|
|
8
|
-
danger: string;
|
|
9
|
-
info: string;
|
|
10
|
-
};
|
|
11
|
-
surfaceHex: {
|
|
12
|
-
background: string;
|
|
13
|
-
foreground: string;
|
|
14
|
-
};
|
|
15
|
-
border: {
|
|
16
|
-
widthPx: number;
|
|
17
|
-
radiusRem: number;
|
|
18
|
-
colorHex: string;
|
|
19
|
-
};
|
|
20
|
-
spacingRem: number;
|
|
21
|
-
}
|
|
22
|
-
export interface ColorTokenProps {
|
|
23
|
-
soft: string;
|
|
24
|
-
saturated: string;
|
|
25
|
-
contrast: string;
|
|
26
|
-
}
|
|
27
|
-
export declare const DEFAULT_THEME: ThemeProps;
|
package/dist/base/theme/types.js
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
export const DEFAULT_THEME = {
|
|
2
|
-
paletteHex: {
|
|
3
|
-
primary: '#736CED',
|
|
4
|
-
secondary: '#E08D79',
|
|
5
|
-
success: '#60935D',
|
|
6
|
-
warning: '#E67F0D',
|
|
7
|
-
danger: '#F03A47',
|
|
8
|
-
info: '#4D9DE0'
|
|
9
|
-
},
|
|
10
|
-
surfaceHex: {
|
|
11
|
-
background: '#eee',
|
|
12
|
-
foreground: '#222'
|
|
13
|
-
},
|
|
14
|
-
border: {
|
|
15
|
-
widthPx: 1,
|
|
16
|
-
radiusRem: 0.5,
|
|
17
|
-
colorHex: '#CCCCCC'
|
|
18
|
-
},
|
|
19
|
-
spacingRem: 1
|
|
20
|
-
};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { default as Toggle } from './toggle.svelte';
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export { default as Toggle } from './toggle.svelte';
|
|
@@ -1,109 +0,0 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import type { ToggleProps } from './types.js';
|
|
3
|
-
|
|
4
|
-
const {
|
|
5
|
-
checked = false,
|
|
6
|
-
disabled = false,
|
|
7
|
-
size = 'medium',
|
|
8
|
-
onChange
|
|
9
|
-
}: ToggleProps = $props();
|
|
10
|
-
|
|
11
|
-
const handleClick = () => {
|
|
12
|
-
if (!disabled) {
|
|
13
|
-
onChange(!checked);
|
|
14
|
-
}
|
|
15
|
-
};
|
|
16
|
-
</script>
|
|
17
|
-
|
|
18
|
-
<!-- svelte-ignore a11y_interactive_supports_focus -->
|
|
19
|
-
<!-- svelte-ignore a11y_click_events_have_key_events -->
|
|
20
|
-
<div
|
|
21
|
-
class={size}
|
|
22
|
-
class:checked
|
|
23
|
-
class:disabled
|
|
24
|
-
role="switch"
|
|
25
|
-
aria-checked={checked}
|
|
26
|
-
aria-disabled={disabled}
|
|
27
|
-
onclick={handleClick}
|
|
28
|
-
>
|
|
29
|
-
<span></span>
|
|
30
|
-
</div>
|
|
31
|
-
|
|
32
|
-
<style>
|
|
33
|
-
div {
|
|
34
|
-
--internal-track-width: 2.5rem;
|
|
35
|
-
--internal-track-height: 1.5rem;
|
|
36
|
-
--internal-thumb-size: 1.125rem;
|
|
37
|
-
--internal-thumb-offset: 0.1875rem;
|
|
38
|
-
|
|
39
|
-
position: relative;
|
|
40
|
-
width: var(--internal-track-width);
|
|
41
|
-
height: var(--internal-track-height);
|
|
42
|
-
background: var(--color-foreground-soft);
|
|
43
|
-
border-radius: calc(var(--internal-track-height) / 2);
|
|
44
|
-
cursor: pointer;
|
|
45
|
-
transition: background 0.2s ease;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
div.checked {
|
|
49
|
-
background: var(--color-primary);
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
/* Size variants */
|
|
53
|
-
div.x-small {
|
|
54
|
-
--internal-track-width: 1.5rem;
|
|
55
|
-
--internal-track-height: 0.875rem;
|
|
56
|
-
--internal-thumb-size: 0.625rem;
|
|
57
|
-
--internal-thumb-offset: 0.125rem;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
div.small {
|
|
61
|
-
--internal-track-width: 2rem;
|
|
62
|
-
--internal-track-height: 1.25rem;
|
|
63
|
-
--internal-thumb-size: 0.875rem;
|
|
64
|
-
--internal-thumb-offset: 0.1875rem;
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
div.medium {
|
|
68
|
-
--internal-track-width: 2.5rem;
|
|
69
|
-
--internal-track-height: 1.5rem;
|
|
70
|
-
--internal-thumb-size: 1.125rem;
|
|
71
|
-
--internal-thumb-offset: 0.1875rem;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
div.large {
|
|
75
|
-
--internal-track-width: 3rem;
|
|
76
|
-
--internal-track-height: 1.75rem;
|
|
77
|
-
--internal-thumb-size: 1.375rem;
|
|
78
|
-
--internal-thumb-offset: 0.1875rem;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
div.x-large {
|
|
82
|
-
--internal-track-width: 3.5rem;
|
|
83
|
-
--internal-track-height: 2rem;
|
|
84
|
-
--internal-thumb-size: 1.625rem;
|
|
85
|
-
--internal-thumb-offset: 0.1875rem;
|
|
86
|
-
}
|
|
87
|
-
|
|
88
|
-
span {
|
|
89
|
-
position: absolute;
|
|
90
|
-
top: var(--internal-thumb-offset);
|
|
91
|
-
left: var(--internal-thumb-offset);
|
|
92
|
-
width: var(--internal-thumb-size);
|
|
93
|
-
height: var(--internal-thumb-size);
|
|
94
|
-
background: var(--color-background);
|
|
95
|
-
border-radius: 50%;
|
|
96
|
-
transition: left 0.25s cubic-bezier(0.34, 1.56, 0.64, 1);
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
div.checked span {
|
|
100
|
-
left: calc(
|
|
101
|
-
var(--internal-track-width) - var(--internal-thumb-size) - var(--internal-thumb-offset)
|
|
102
|
-
);
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
div.disabled {
|
|
106
|
-
opacity: 0.4;
|
|
107
|
-
cursor: not-allowed;
|
|
108
|
-
}
|
|
109
|
-
</style>
|
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import type { TreeNodeProps } from './types.js';
|
|
3
|
-
import Icon from '../icon/icon.svelte';
|
|
4
|
-
import TreeNode from './tree-node.svelte';
|
|
5
|
-
const {
|
|
6
|
-
node,
|
|
7
|
-
level,
|
|
8
|
-
size,
|
|
9
|
-
onSelect,
|
|
10
|
-
selectedIds,
|
|
11
|
-
filledIcon,
|
|
12
|
-
wide,
|
|
13
|
-
expandOnSelect
|
|
14
|
-
}: TreeNodeProps = $props();
|
|
15
|
-
|
|
16
|
-
let expanded: boolean = $state(false);
|
|
17
|
-
let selected: boolean = $derived(selectedIds?.has(node.id) ?? false);
|
|
18
|
-
|
|
19
|
-
const hasChildren = $derived(node.children && node.children.length > 0);
|
|
20
|
-
|
|
21
|
-
const toggleExpand = (e: MouseEvent) => {
|
|
22
|
-
e.stopPropagation();
|
|
23
|
-
if (hasChildren) expanded = !expanded;
|
|
24
|
-
};
|
|
25
|
-
|
|
26
|
-
const handleSelect = () => {
|
|
27
|
-
onSelect(node.id);
|
|
28
|
-
if (expandOnSelect && hasChildren) expanded = true;
|
|
29
|
-
};
|
|
30
|
-
|
|
31
|
-
const nextLevel = $derived(level + 1);
|
|
32
|
-
</script>
|
|
33
|
-
|
|
34
|
-
<!-- svelte-ignore a11y_click_events_have_key_events -->
|
|
35
|
-
<!-- svelte-ignore a11y_no_static_element_interactions -->
|
|
36
|
-
<div
|
|
37
|
-
class={size}
|
|
38
|
-
class:selected
|
|
39
|
-
style:padding-left="calc({level} * var(--tree-indent))"
|
|
40
|
-
onclick={handleSelect}
|
|
41
|
-
class:wide
|
|
42
|
-
>
|
|
43
|
-
{#if hasChildren}
|
|
44
|
-
<button class:expanded onclick={toggleExpand}>
|
|
45
|
-
<Icon name="chevron_right" {size} color={selected ? 'primary' : undefined} />
|
|
46
|
-
</button>
|
|
47
|
-
{:else}
|
|
48
|
-
<span class="spacer"></span>
|
|
49
|
-
{/if}
|
|
50
|
-
|
|
51
|
-
{#if node.icon}
|
|
52
|
-
<Icon
|
|
53
|
-
name={node.icon}
|
|
54
|
-
filled={selected || filledIcon}
|
|
55
|
-
{size}
|
|
56
|
-
color={selected ? 'primary' : undefined}
|
|
57
|
-
/>
|
|
58
|
-
{/if}
|
|
59
|
-
|
|
60
|
-
<span>{node.label}</span>
|
|
61
|
-
</div>
|
|
62
|
-
|
|
63
|
-
{#if expanded && hasChildren}
|
|
64
|
-
{#each node.children as child (child.id)}
|
|
65
|
-
<TreeNode
|
|
66
|
-
node={child}
|
|
67
|
-
level={nextLevel}
|
|
68
|
-
{size}
|
|
69
|
-
{onSelect}
|
|
70
|
-
{selectedIds}
|
|
71
|
-
{filledIcon}
|
|
72
|
-
{wide}
|
|
73
|
-
{expandOnSelect}
|
|
74
|
-
/>
|
|
75
|
-
{/each}
|
|
76
|
-
{/if}
|
|
77
|
-
|
|
78
|
-
<style>
|
|
79
|
-
div,
|
|
80
|
-
span,
|
|
81
|
-
button {
|
|
82
|
-
transition: all 0.1s ease-in-out;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
div {
|
|
86
|
-
--tree-indent: 1em;
|
|
87
|
-
display: flex;
|
|
88
|
-
flex-shrink: 0;
|
|
89
|
-
align-items: center;
|
|
90
|
-
padding: 0.25em 0.5em;
|
|
91
|
-
gap: 0.25em;
|
|
92
|
-
border-radius: var(--border-radius);
|
|
93
|
-
cursor: pointer;
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
div:hover {
|
|
97
|
-
background-color: color-mix(in srgb, var(--color-foreground) 10%, transparent);
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
.selected {
|
|
101
|
-
background-color: var(--color-primary-soft);
|
|
102
|
-
}
|
|
103
|
-
.selected:hover {
|
|
104
|
-
background-color: color-mix(in srgb, var(--color-primary) 20%, var(--color-primary-soft));
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
.selected span {
|
|
108
|
-
color: var(--color-primary);
|
|
109
|
-
}
|
|
110
|
-
span {
|
|
111
|
-
user-select: none;
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
button {
|
|
115
|
-
all: unset;
|
|
116
|
-
display: flex;
|
|
117
|
-
padding: 0.25em;
|
|
118
|
-
cursor: pointer;
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
button.expanded {
|
|
122
|
-
transform: rotate(90deg);
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
.spacer {
|
|
126
|
-
width: 1em;
|
|
127
|
-
}
|
|
128
|
-
|
|
129
|
-
.wide {
|
|
130
|
-
width: 100%;
|
|
131
|
-
}
|
|
132
|
-
</style>
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
<script lang="ts">
|
|
2
|
-
import type { TreeViewProps } from './types.js';
|
|
3
|
-
import TreeNode from './tree-node.svelte';
|
|
4
|
-
|
|
5
|
-
let {
|
|
6
|
-
data,
|
|
7
|
-
size = 'medium',
|
|
8
|
-
onSelect,
|
|
9
|
-
selectedIds,
|
|
10
|
-
wide,
|
|
11
|
-
filledIcon,
|
|
12
|
-
expandOnSelect
|
|
13
|
-
}: TreeViewProps = $props();
|
|
14
|
-
</script>
|
|
15
|
-
|
|
16
|
-
<div role="tree" class={size} class:wide>
|
|
17
|
-
{#each data as node (node.id)}
|
|
18
|
-
<TreeNode
|
|
19
|
-
{node}
|
|
20
|
-
level={0}
|
|
21
|
-
{size}
|
|
22
|
-
{onSelect}
|
|
23
|
-
{selectedIds}
|
|
24
|
-
{wide}
|
|
25
|
-
{filledIcon}
|
|
26
|
-
{expandOnSelect}
|
|
27
|
-
/>
|
|
28
|
-
{/each}
|
|
29
|
-
</div>
|
|
30
|
-
|
|
31
|
-
<style>
|
|
32
|
-
div {
|
|
33
|
-
display: flex;
|
|
34
|
-
flex-direction: column;
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
.wide {
|
|
38
|
-
width: 100%;
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
.x-small {
|
|
42
|
-
gap: 0.125rem;
|
|
43
|
-
}
|
|
44
|
-
.small {
|
|
45
|
-
gap: 0.25rem;
|
|
46
|
-
}
|
|
47
|
-
.medium {
|
|
48
|
-
gap: 0.5rem;
|
|
49
|
-
}
|
|
50
|
-
.large {
|
|
51
|
-
gap: 0.75rem;
|
|
52
|
-
}
|
|
53
|
-
.x-large {
|
|
54
|
-
gap: 1rem;
|
|
55
|
-
}
|
|
56
|
-
</style>
|