@noxlovette/material 0.3.3 → 0.4.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/README.md +1 -0
- package/dist/actions/index.d.ts +1 -0
- package/dist/actions/index.js +1 -0
- package/dist/actions/rovingFocusGroup.d.ts +20 -0
- package/dist/actions/rovingFocusGroup.js +82 -0
- package/dist/components/badge/theme.d.ts +8 -8
- package/dist/components/buttons/button-group/ButtonGroup.stories.svelte +83 -0
- package/dist/components/buttons/button-group/ButtonGroup.stories.svelte.d.ts +19 -0
- package/dist/components/buttons/button-group/ButtonGroup.svelte +10 -29
- package/dist/components/buttons/button-group/ButtonGroup.svelte.d.ts +7 -3
- package/dist/components/buttons/button-group/index.d.ts +0 -1
- package/dist/components/buttons/button-group/index.js +3 -1
- package/dist/components/buttons/button-group/theme.d.ts +17 -103
- package/dist/components/buttons/button-group/theme.js +7 -35
- package/dist/components/buttons/button-group/types.d.ts +9 -20
- package/dist/components/buttons/connected/ConnectedButtonGroup.stories.svelte +118 -0
- package/dist/components/buttons/connected/ConnectedButtonGroup.stories.svelte.d.ts +19 -0
- package/dist/components/buttons/connected/ConnectedButtonGroup.svelte +52 -0
- package/dist/components/buttons/connected/ConnectedButtonGroup.svelte.d.ts +12 -0
- package/dist/components/buttons/connected/ConnectedButtonGroupItem.svelte +37 -0
- package/dist/components/buttons/connected/ConnectedButtonGroupItem.svelte.d.ts +9 -0
- package/dist/components/buttons/connected/index.d.ts +3 -1
- package/dist/components/buttons/connected/index.js +3 -1
- package/dist/components/buttons/connected/theme.d.ts +125 -0
- package/dist/components/buttons/connected/theme.js +38 -0
- package/dist/components/buttons/connected/types.d.ts +32 -13
- package/dist/components/buttons/index.d.ts +1 -0
- package/dist/components/buttons/index.js +1 -0
- package/dist/components/buttons/split-button/SplitButton.stories.svelte +103 -0
- package/dist/components/buttons/split-button/SplitButton.stories.svelte.d.ts +19 -0
- package/dist/components/buttons/split-button/SplitButton.svelte +104 -0
- package/dist/components/buttons/split-button/SplitButton.svelte.d.ts +19 -0
- package/dist/components/buttons/split-button/index.d.ts +3 -0
- package/dist/components/{containers/panes → buttons/split-button}/index.js +1 -3
- package/dist/components/buttons/split-button/theme.d.ts +35 -0
- package/dist/components/buttons/split-button/theme.js +26 -0
- package/dist/components/buttons/split-button/types.d.ts +33 -0
- package/dist/components/buttons/theme.d.ts +142 -142
- package/dist/components/buttons/theme.js +2 -2
- package/dist/components/cards/Card.stories.svelte +58 -0
- package/dist/components/cards/Card.stories.svelte.d.ts +2 -17
- package/dist/components/cards/Card.svelte +76 -8
- package/dist/components/cards/theme.d.ts +26 -14
- package/dist/components/cards/theme.js +5 -1
- package/dist/components/cards/types.d.ts +39 -1
- package/dist/components/chips/Chip.stories.svelte +64 -0
- package/dist/components/chips/Chip.stories.svelte.d.ts +19 -0
- package/dist/components/chips/Chip.svelte +115 -0
- package/dist/components/chips/Chip.svelte.d.ts +14 -0
- package/dist/components/chips/index.d.ts +3 -0
- package/dist/components/{containers/merger → chips}/index.js +2 -1
- package/dist/components/chips/theme.d.ts +78 -0
- package/dist/components/chips/theme.js +72 -0
- package/dist/components/chips/types.d.ts +43 -0
- package/dist/components/containers/action-rail/ActionRail.stories.svelte +36 -0
- package/dist/components/containers/{panes/SinglePane.stories.svelte.d.ts → action-rail/ActionRail.stories.svelte.d.ts} +4 -4
- package/dist/components/containers/action-rail/ActionRail.svelte +35 -0
- package/dist/components/containers/action-rail/ActionRail.svelte.d.ts +17 -0
- package/dist/components/containers/action-rail/index.d.ts +3 -0
- package/dist/components/containers/action-rail/index.js +6 -0
- package/dist/components/containers/action-rail/theme.d.ts +45 -0
- package/dist/components/containers/action-rail/theme.js +26 -0
- package/dist/components/containers/action-rail/types.d.ts +20 -0
- package/dist/components/containers/action-rail/types.js +1 -0
- package/dist/components/containers/app/App.svelte +6 -6
- package/dist/components/containers/app/App.svelte.d.ts +4 -2
- package/dist/components/containers/app/theme.d.ts +1 -1
- package/dist/components/containers/app/types.d.ts +9 -4
- package/dist/components/containers/bottom-sheet/BottomSheet.stories.svelte +1 -1
- package/dist/components/containers/bottom-sheet/BottomSheet.svelte +1 -1
- package/dist/components/containers/context-menu/ContextMenu.stories.svelte +44 -0
- package/dist/components/containers/context-menu/ContextMenu.svelte +21 -5
- package/dist/components/containers/context-menu/ContextMenu.svelte.d.ts +11 -0
- package/dist/components/containers/context-menu/theme.d.ts +20 -2
- package/dist/components/containers/context-menu/theme.js +31 -8
- package/dist/components/containers/context-menu/types.d.ts +14 -2
- package/dist/components/containers/dialogue/theme.d.ts +20 -20
- package/dist/components/containers/divider/theme.d.ts +17 -17
- package/dist/components/containers/index.d.ts +2 -3
- package/dist/components/containers/index.js +2 -3
- package/dist/components/containers/link-preview/theme.d.ts +11 -11
- package/dist/components/containers/list/theme.d.ts +14 -14
- package/dist/components/containers/list/theme.js +1 -1
- package/dist/components/containers/menu/Menu.stories.svelte +105 -3
- package/dist/components/containers/menu/Menu.stories.svelte.d.ts +2 -17
- package/dist/components/containers/menu/Menu.svelte +9 -7
- package/dist/components/containers/menu/MenuCheckboxItem.svelte +55 -0
- package/dist/components/containers/menu/MenuCheckboxItem.svelte.d.ts +25 -0
- package/dist/components/containers/menu/MenuGroup.svelte +43 -0
- package/dist/components/containers/menu/MenuGroup.svelte.d.ts +28 -0
- package/dist/components/containers/menu/MenuRadioGroup.svelte +39 -0
- package/dist/components/containers/menu/MenuRadioGroup.svelte.d.ts +27 -0
- package/dist/components/containers/menu/MenuRadioItem.svelte +49 -0
- package/dist/components/containers/menu/MenuRadioItem.svelte.d.ts +17 -0
- package/dist/components/containers/menu/MenuSub.svelte +91 -0
- package/dist/components/containers/menu/MenuSub.svelte.d.ts +29 -0
- package/dist/components/containers/menu/index.d.ts +7 -0
- package/dist/components/containers/menu/index.js +8 -0
- package/dist/components/containers/menu/menu-item/MenuItem.svelte +71 -0
- package/dist/components/containers/{menu-item → menu/menu-item}/MenuItem.svelte.d.ts +2 -1
- package/dist/components/containers/{menu-item → menu/menu-item}/types.d.ts +5 -1
- package/dist/components/containers/menu/menu-item/types.js +1 -0
- package/dist/components/containers/menu/theme.d.ts +68 -0
- package/dist/components/containers/menu/theme.js +36 -0
- package/dist/components/containers/menu/types.d.ts +113 -2
- package/dist/components/containers/pane/DraggablePane.stories.svelte +199 -0
- package/dist/components/containers/pane/DraggablePane.stories.svelte.d.ts +4 -0
- package/dist/components/containers/pane/DraggablePane.svelte +533 -0
- package/dist/components/containers/pane/DraggablePane.svelte.d.ts +29 -0
- package/dist/components/containers/pane/Pane.stories.svelte +104 -0
- package/dist/components/containers/pane/Pane.stories.svelte.d.ts +19 -0
- package/dist/components/containers/pane/Pane.svelte +78 -0
- package/dist/components/containers/pane/Pane.svelte.d.ts +18 -0
- package/dist/components/containers/pane/PaneGrid.stories.svelte +134 -0
- package/dist/components/containers/pane/PaneGrid.stories.svelte.d.ts +19 -0
- package/dist/components/containers/pane/PaneGrid.svelte +43 -0
- package/dist/components/containers/pane/PaneGrid.svelte.d.ts +13 -0
- package/dist/components/containers/pane/PaneHandle.svelte +90 -0
- package/dist/components/containers/pane/PaneHandle.svelte.d.ts +12 -0
- package/dist/components/containers/pane/dragStore.svelte.d.ts +16 -0
- package/dist/components/containers/pane/dragStore.svelte.js +38 -0
- package/dist/components/containers/pane/index.d.ts +8 -0
- package/dist/components/containers/pane/index.js +11 -0
- package/dist/components/containers/pane/resizeStore.svelte.d.ts +10 -0
- package/dist/components/containers/pane/resizeStore.svelte.js +30 -0
- package/dist/components/containers/pane/theme.d.ts +571 -0
- package/dist/components/containers/pane/theme.js +211 -0
- package/dist/components/containers/pane/types.d.ts +249 -0
- package/dist/components/containers/pane/types.js +1 -0
- package/dist/components/containers/popover/Popover.stories.svelte +4 -4
- package/dist/components/containers/popover/Popover.svelte +3 -1
- package/dist/components/containers/popover/theme.d.ts +20 -20
- package/dist/components/containers/popover/types.d.ts +6 -2
- package/dist/components/containers/scroll-area/theme.d.ts +2 -2
- package/dist/components/containers/side-sheet/SideSheet.stories.svelte +16 -24
- package/dist/components/containers/side-sheet/SideSheet.svelte +73 -7
- package/dist/components/containers/side-sheet/SideSheet.svelte.d.ts +5 -0
- package/dist/components/containers/stack/theme.d.ts +44 -44
- package/dist/components/date/DateField.stories.svelte +57 -0
- package/dist/components/{containers/panes/SplitPane.stories.svelte.d.ts → date/DateField.stories.svelte.d.ts} +4 -4
- package/dist/components/date/DateField.svelte +11 -2
- package/dist/components/date/DateRangeField.stories.svelte +53 -0
- package/dist/components/{containers/panes/SupportingPane.stories.svelte.d.ts → date/DateRangeField.stories.svelte.d.ts} +4 -4
- package/dist/components/date/DateRangeField.svelte +2 -1
- package/dist/components/date/theme.d.ts +73 -4
- package/dist/components/date/theme.js +95 -26
- package/dist/components/date/types.d.ts +5 -0
- package/dist/components/forms/checkbox/Checkbox.svelte +7 -9
- package/dist/components/forms/checkbox/theme.d.ts +8 -8
- package/dist/components/forms/checkbox/theme.js +31 -9
- package/dist/components/forms/command/theme.d.ts +35 -35
- package/dist/components/forms/pin/theme.d.ts +2 -2
- package/dist/components/forms/radio-group/theme.d.ts +2 -2
- package/dist/components/forms/search/theme.d.ts +8 -8
- package/dist/components/forms/select/Select.svelte +3 -2
- package/dist/components/forms/select/theme.d.ts +26 -2
- package/dist/components/forms/select/theme.js +56 -22
- package/dist/components/forms/slider/theme.d.ts +20 -20
- package/dist/components/forms/switch/theme.d.ts +2 -2
- package/dist/components/forms/textfield/Textfield.stories.svelte +22 -0
- package/dist/components/forms/textfield/Textfield.svelte +10 -1
- package/dist/components/forms/textfield/theme.d.ts +44 -2
- package/dist/components/forms/textfield/theme.js +56 -16
- package/dist/components/forms/toggle-group/ToggleGroup.svelte +2 -2
- package/dist/components/forms/toggle-group/ToggleGroup.svelte.d.ts +2 -2
- package/dist/components/forms/toggle-group/ToggleGroupItem.svelte +1 -1
- package/dist/components/forms/toggle-group/ToggleGroupItem.svelte.d.ts +1 -1
- package/dist/components/forms/toggle-group/theme.d.ts +16 -16
- package/dist/components/forms/toggle-group/types.d.ts +2 -2
- package/dist/components/forms/tooltip/Tooltip.svelte +1 -1
- package/dist/components/forms/tooltip/theme.d.ts +2 -2
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.js +1 -0
- package/dist/components/misc/Avatar.stories.svelte +8 -0
- package/dist/components/misc/Avatar.svelte +35 -10
- package/dist/components/misc/DicebearAvatarBuilder.d.ts +59 -0
- package/dist/components/misc/DicebearAvatarBuilder.js +115 -0
- package/dist/components/misc/ThemeSettings.svelte +1 -1
- package/dist/components/misc/ThemeSwitcher.svelte +2 -2
- package/dist/components/misc/dicebearStyles.d.ts +21 -0
- package/dist/components/misc/dicebearStyles.js +169 -0
- package/dist/components/misc/index.d.ts +3 -0
- package/dist/components/misc/index.js +3 -0
- package/dist/components/misc/materialAvatarPalette.d.ts +6 -0
- package/dist/components/misc/materialAvatarPalette.js +44 -0
- package/dist/components/misc/theme.d.ts +20 -2
- package/dist/components/misc/theme.js +7 -1
- package/dist/components/misc/types.d.ts +20 -2
- package/dist/components/nav/appbar/AppBar.stories.svelte +1 -1
- package/dist/components/nav/appbar/AppBar.svelte +46 -15
- package/dist/components/nav/appbar/AppBar.svelte.d.ts +5 -0
- package/dist/components/nav/appbar/theme.d.ts +20 -14
- package/dist/components/nav/appbar/theme.js +11 -7
- package/dist/components/nav/appbar/types.d.ts +3 -1
- package/dist/components/nav/breadcrumb/Breadcrumb.stories.svelte +50 -0
- package/dist/components/nav/breadcrumb/Breadcrumb.stories.svelte.d.ts +19 -0
- package/dist/components/nav/breadcrumb/Breadcrumb.svelte +46 -0
- package/dist/components/nav/breadcrumb/Breadcrumb.svelte.d.ts +13 -0
- package/dist/components/nav/breadcrumb/index.d.ts +3 -0
- package/dist/components/nav/breadcrumb/index.js +6 -0
- package/dist/components/nav/breadcrumb/theme.d.ts +84 -0
- package/dist/components/nav/breadcrumb/theme.js +35 -0
- package/dist/components/nav/breadcrumb/types.d.ts +14 -0
- package/dist/components/nav/breadcrumb/types.js +1 -0
- package/dist/components/nav/index.d.ts +1 -0
- package/dist/components/nav/index.js +1 -0
- package/dist/components/nav/navbar/theme.d.ts +19 -19
- package/dist/components/nav/rail/Rail.stories.svelte +1 -5
- package/dist/components/nav/rail/Rail.svelte +3 -25
- package/dist/components/nav/rail/theme.d.ts +4 -4
- package/dist/components/nav/rail/types.d.ts +0 -5
- package/dist/components/nav/tabs/TabHolder.svelte +2 -1
- package/dist/components/nav/tabs/theme.d.ts +21 -21
- package/dist/components/nav/tabs/theme.js +6 -0
- package/dist/components/nav/tabs/types.d.ts +2 -2
- package/dist/components/pill/theme.d.ts +35 -35
- package/dist/components/snackbar/theme.d.ts +8 -8
- package/dist/components/table/Table.stories.svelte +267 -0
- package/dist/components/table/Table.stories.svelte.d.ts +19 -0
- package/dist/components/table/Table.svelte +1 -1
- package/dist/components/table/TableBody.svelte +16 -3
- package/dist/components/table/TableBody.svelte.d.ts +5 -1
- package/dist/components/table/TableRow.svelte +1 -1
- package/dist/components/table/theme.d.ts +2 -2
- package/dist/components/table/theme.js +2 -2
- package/dist/components/table/types.d.ts +7 -0
- package/dist/components/time/theme.d.ts +29 -29
- package/dist/components/toolbar/Toolbar.stories.svelte +71 -0
- package/dist/components/toolbar/Toolbar.stories.svelte.d.ts +19 -0
- package/dist/components/toolbar/Toolbar.svelte +19 -3
- package/dist/components/toolbar/Toolbar.svelte.d.ts +8 -2
- package/dist/components/toolbar/ToolbarButton.svelte +28 -4
- package/dist/components/toolbar/ToolbarDivider.svelte +4 -3
- package/dist/components/toolbar/ToolbarGroup.svelte +7 -2
- package/dist/components/toolbar/ToolbarGroupItem.svelte +29 -4
- package/dist/components/toolbar/ToolbarSection.svelte +35 -0
- package/dist/components/toolbar/ToolbarSection.svelte.d.ts +9 -0
- package/dist/components/toolbar/ToolbarSpacer.svelte +18 -0
- package/dist/components/toolbar/ToolbarSpacer.svelte.d.ts +9 -0
- package/dist/components/toolbar/index.d.ts +2 -0
- package/dist/components/toolbar/index.js +2 -0
- package/dist/components/toolbar/theme.d.ts +36 -21
- package/dist/components/toolbar/theme.js +27 -11
- package/dist/components/toolbar/types.d.ts +37 -4
- package/dist/components/typography/body/theme.d.ts +14 -14
- package/dist/components/typography/display/theme.d.ts +14 -14
- package/dist/components/typography/headline/theme.d.ts +14 -14
- package/dist/components/typography/kbd/Kbd.stories.svelte +1 -1
- package/dist/components/typography/kbd/theme.d.ts +8 -8
- package/dist/components/typography/label/theme.d.ts +14 -14
- package/dist/components/typography/title/theme.d.ts +14 -14
- package/dist/styles/component.css +126 -4
- package/dist/styles/motion.css +6 -3
- package/dist/utils/Layer.svelte +7 -3
- package/dist/utils/Theme.svelte +20 -20
- package/dist/utils/ThemeScript.svelte +1 -1
- package/dist/utils/icon/theme.d.ts +14 -14
- package/package.json +38 -37
- package/bin/install-skill.js +0 -29
- package/dist/components/buttons/button-group/ButtonGroupItem.svelte +0 -41
- package/dist/components/buttons/button-group/ButtonGroupItem.svelte.d.ts +0 -8
- package/dist/components/buttons/connected/ConnectedButtons.svelte +0 -14
- package/dist/components/buttons/connected/ConnectedButtons.svelte.d.ts +0 -8
- package/dist/components/containers/menu-item/MenuItem.svelte +0 -74
- package/dist/components/containers/merger/InputMerger.svelte +0 -24
- package/dist/components/containers/merger/InputMerger.svelte.d.ts +0 -14
- package/dist/components/containers/merger/index.d.ts +0 -2
- package/dist/components/containers/merger/theme.d.ts +0 -1
- package/dist/components/containers/merger/theme.js +0 -4
- package/dist/components/containers/panes/SinglePane.stories.svelte +0 -67
- package/dist/components/containers/panes/SinglePane.svelte +0 -32
- package/dist/components/containers/panes/SinglePane.svelte.d.ts +0 -5
- package/dist/components/containers/panes/SplitPane.stories.svelte +0 -124
- package/dist/components/containers/panes/SplitPane.svelte +0 -144
- package/dist/components/containers/panes/SplitPane.svelte.d.ts +0 -8
- package/dist/components/containers/panes/SupportingPane.stories.svelte +0 -113
- package/dist/components/containers/panes/SupportingPane.svelte +0 -175
- package/dist/components/containers/panes/SupportingPane.svelte.d.ts +0 -9
- package/dist/components/containers/panes/index.d.ts +0 -5
- package/dist/components/containers/panes/theme.d.ts +0 -490
- package/dist/components/containers/panes/theme.js +0 -185
- package/dist/components/containers/panes/types.d.ts +0 -108
- package/dist/components/nav/rail/RailNavContext.svelte +0 -14
- package/dist/components/nav/rail/RailNavContext.svelte.d.ts +0 -8
- /package/dist/components/{containers/menu-item → buttons/split-button}/types.js +0 -0
- /package/dist/components/{containers/panes → chips}/types.js +0 -0
- /package/dist/components/containers/{menu-item → menu/menu-item}/index.d.ts +0 -0
- /package/dist/components/containers/{menu-item → menu/menu-item}/index.js +0 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
export declare const card: import("tailwind-variants").TVReturnType<{
|
|
2
2
|
type: {
|
|
3
|
-
elevated:
|
|
4
|
-
filled:
|
|
5
|
-
outlined:
|
|
3
|
+
elevated: "shadow-elevation-1 bg-md-sys-color-surface-container-low";
|
|
4
|
+
filled: "bg-md-sys-color-surface-container-high";
|
|
5
|
+
outlined: "bg-md-sys-color-surface outline-1 outline-md-sys-color-outline-variant";
|
|
6
6
|
};
|
|
7
7
|
padding: {
|
|
8
8
|
none: {
|
|
@@ -19,16 +19,20 @@ export declare const card: import("tailwind-variants").TVReturnType<{
|
|
|
19
19
|
};
|
|
20
20
|
};
|
|
21
21
|
hoverable: {
|
|
22
|
-
true:
|
|
22
|
+
true: "";
|
|
23
|
+
};
|
|
24
|
+
selected: {
|
|
25
|
+
true: "outline-3 outline-md-sys-color-primary";
|
|
26
|
+
false: "focus:outline-3 focus:outline-md-sys-color-secondary";
|
|
23
27
|
};
|
|
24
28
|
}, {
|
|
25
29
|
base: string;
|
|
26
30
|
icon: string;
|
|
27
31
|
}, undefined, {
|
|
28
32
|
type: {
|
|
29
|
-
elevated:
|
|
30
|
-
filled:
|
|
31
|
-
outlined:
|
|
33
|
+
elevated: "shadow-elevation-1 bg-md-sys-color-surface-container-low";
|
|
34
|
+
filled: "bg-md-sys-color-surface-container-high";
|
|
35
|
+
outlined: "bg-md-sys-color-surface outline-1 outline-md-sys-color-outline-variant";
|
|
32
36
|
};
|
|
33
37
|
padding: {
|
|
34
38
|
none: {
|
|
@@ -45,16 +49,20 @@ export declare const card: import("tailwind-variants").TVReturnType<{
|
|
|
45
49
|
};
|
|
46
50
|
};
|
|
47
51
|
hoverable: {
|
|
48
|
-
true:
|
|
52
|
+
true: "";
|
|
53
|
+
};
|
|
54
|
+
selected: {
|
|
55
|
+
true: "outline-3 outline-md-sys-color-primary";
|
|
56
|
+
false: "focus:outline-3 focus:outline-md-sys-color-secondary";
|
|
49
57
|
};
|
|
50
58
|
}, {
|
|
51
59
|
base: string;
|
|
52
60
|
icon: string;
|
|
53
|
-
}, import("tailwind-variants").
|
|
61
|
+
}, import("tailwind-variants").TVReturnTypeLike<{
|
|
54
62
|
type: {
|
|
55
|
-
elevated:
|
|
56
|
-
filled:
|
|
57
|
-
outlined:
|
|
63
|
+
elevated: "shadow-elevation-1 bg-md-sys-color-surface-container-low";
|
|
64
|
+
filled: "bg-md-sys-color-surface-container-high";
|
|
65
|
+
outlined: "bg-md-sys-color-surface outline-1 outline-md-sys-color-outline-variant";
|
|
58
66
|
};
|
|
59
67
|
padding: {
|
|
60
68
|
none: {
|
|
@@ -71,9 +79,13 @@ export declare const card: import("tailwind-variants").TVReturnType<{
|
|
|
71
79
|
};
|
|
72
80
|
};
|
|
73
81
|
hoverable: {
|
|
74
|
-
true:
|
|
82
|
+
true: "";
|
|
83
|
+
};
|
|
84
|
+
selected: {
|
|
85
|
+
true: "outline-3 outline-md-sys-color-primary";
|
|
86
|
+
false: "focus:outline-3 focus:outline-md-sys-color-secondary";
|
|
75
87
|
};
|
|
76
88
|
}, {
|
|
77
89
|
base: string;
|
|
78
90
|
icon: string;
|
|
79
|
-
}
|
|
91
|
+
}>>;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { tv } from 'tailwind-variants';
|
|
2
2
|
export const card = tv({
|
|
3
3
|
slots: {
|
|
4
|
-
base: 'relative flex flex-col rounded-lg disabled:opacity-[0.38] disabled:bg-md-sys-color-surface-variant state-layer before:rounded-lg
|
|
4
|
+
base: 'relative flex flex-col rounded-lg disabled:opacity-[0.38] disabled:bg-md-sys-color-surface-variant state-layer before:rounded-lg [transition:box-shadow_var(--md-sys-motion-duration,200ms)_var(--md-sys-motion-timing-function,cubic-bezier(0.34,0.8,0.34,1))]',
|
|
5
5
|
icon: 'size-6 text-[24px] text-md-sys-color-primary'
|
|
6
6
|
},
|
|
7
7
|
variants: {
|
|
@@ -18,6 +18,10 @@ export const card = tv({
|
|
|
18
18
|
},
|
|
19
19
|
hoverable: {
|
|
20
20
|
true: ''
|
|
21
|
+
},
|
|
22
|
+
selected: {
|
|
23
|
+
true: 'outline-3 outline-md-sys-color-primary',
|
|
24
|
+
false: 'focus:outline-3 focus:outline-md-sys-color-secondary'
|
|
21
25
|
}
|
|
22
26
|
},
|
|
23
27
|
compoundVariants: [
|
|
@@ -30,7 +30,45 @@ export type CardProps = CardVariants & HTMLAttributes<HTMLDivElement> & HTMLAnch
|
|
|
30
30
|
padding?: CardVariants['padding'];
|
|
31
31
|
/**
|
|
32
32
|
* Whether the card should show a state layer on hover.
|
|
33
|
-
* Defaults to true if `href` is provided.
|
|
33
|
+
* Defaults to true if `href`, `onselect`, or `ondelete` is provided.
|
|
34
34
|
*/
|
|
35
35
|
hoverable?: boolean;
|
|
36
|
+
/**
|
|
37
|
+
* Whether the card is in a selected state. Purely visual — shows a
|
|
38
|
+
* `primary`-colored outline unconditionally, distinct from the `secondary`
|
|
39
|
+
* outline shown on plain keyboard focus, so the two states stay visually
|
|
40
|
+
* distinguishable. Selection state itself is owned by the consumer, not
|
|
41
|
+
* the card, e.g. `selected={selectedId === item.id}`.
|
|
42
|
+
* @default false
|
|
43
|
+
*/
|
|
44
|
+
selected?: boolean;
|
|
45
|
+
/**
|
|
46
|
+
* Called when the card's surface is clicked, or when Enter/Space is pressed
|
|
47
|
+
* while the card itself (not a nested control) has focus. Providing this
|
|
48
|
+
* makes the card keyboard-focusable (`tabindex`, and — for non-link cards —
|
|
49
|
+
* `role="button"` + `aria-pressed`). Typically closes over the represented
|
|
50
|
+
* item's id: `onselect={() => (selectedId = item.id)}`.
|
|
51
|
+
*
|
|
52
|
+
* Nested interactive elements (buttons, form controls) should call
|
|
53
|
+
* `event.stopPropagation()` in their own handlers if they shouldn't also
|
|
54
|
+
* trigger selection — the whole card surface is clickable.
|
|
55
|
+
*/
|
|
56
|
+
onselect?: () => void;
|
|
57
|
+
/**
|
|
58
|
+
* Called when Delete/Backspace is pressed while the card itself (not a
|
|
59
|
+
* nested form control) has focus. Typically deletes the represented item:
|
|
60
|
+
* `ondelete={() => remove(item.id)}`.
|
|
61
|
+
*/
|
|
62
|
+
ondelete?: () => void;
|
|
63
|
+
/**
|
|
64
|
+
* Called when focus moves from somewhere inside the card to somewhere
|
|
65
|
+
* outside it entirely. Unlike the native `blur`/`focusout` (which fire
|
|
66
|
+
* on every focus change between the card's own inner elements, e.g.
|
|
67
|
+
* tabbing between two fields in the same card), this only fires once
|
|
68
|
+
* focus actually leaves the card's subtree — checked via
|
|
69
|
+
* `event.relatedTarget` containment. Useful for autosaving inline-edited
|
|
70
|
+
* content once the user is done with this card:
|
|
71
|
+
* `onleave={() => save(item)}`.
|
|
72
|
+
*/
|
|
73
|
+
onleave?: () => void;
|
|
36
74
|
};
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
<script module lang="ts">
|
|
2
|
+
import { defineMeta } from '@storybook/addon-svelte-csf';
|
|
3
|
+
import Chip from './Chip.svelte';
|
|
4
|
+
|
|
5
|
+
const { Story } = defineMeta({
|
|
6
|
+
title: 'Chips/Chip',
|
|
7
|
+
component: Chip,
|
|
8
|
+
argTypes: {
|
|
9
|
+
variant: {
|
|
10
|
+
control: 'select',
|
|
11
|
+
options: ['assist', 'filter', 'input', 'suggestion']
|
|
12
|
+
},
|
|
13
|
+
elevated: { control: 'boolean' },
|
|
14
|
+
selected: { control: 'boolean' },
|
|
15
|
+
disabled: { control: 'boolean' }
|
|
16
|
+
},
|
|
17
|
+
args: {
|
|
18
|
+
variant: 'assist',
|
|
19
|
+
elevated: false,
|
|
20
|
+
selected: false,
|
|
21
|
+
disabled: false
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
let filterSelected = $state(true);
|
|
26
|
+
</script>
|
|
27
|
+
|
|
28
|
+
<Story name="Playground">Chip</Story>
|
|
29
|
+
|
|
30
|
+
<Story name="Assist" asChild>
|
|
31
|
+
<div class="flex flex-wrap items-center gap-4 p-6">
|
|
32
|
+
<Chip variant="assist" iconProps={{ name: 'calendar_today' }}>Set reminder</Chip>
|
|
33
|
+
<Chip variant="assist" elevated iconProps={{ name: 'calendar_today' }}>Set reminder</Chip>
|
|
34
|
+
<Chip variant="assist" disabled iconProps={{ name: 'calendar_today' }}>Set reminder</Chip>
|
|
35
|
+
</div>
|
|
36
|
+
</Story>
|
|
37
|
+
|
|
38
|
+
<Story name="Filter" asChild>
|
|
39
|
+
<div class="flex flex-wrap items-center gap-4 p-6">
|
|
40
|
+
<Chip variant="filter" bind:selected={filterSelected}>Filter chip</Chip>
|
|
41
|
+
<Chip variant="filter" iconProps={{ name: 'star' }}>Starred</Chip>
|
|
42
|
+
<Chip variant="filter" elevated selected>Elevated selected</Chip>
|
|
43
|
+
<Chip variant="filter" disabled>Disabled</Chip>
|
|
44
|
+
</div>
|
|
45
|
+
</Story>
|
|
46
|
+
|
|
47
|
+
<Story name="Input" asChild>
|
|
48
|
+
<div class="flex flex-wrap items-center gap-4 p-6">
|
|
49
|
+
<Chip variant="input" iconProps={{ name: 'person' }} onRemove={() => {}}>Ada Lovelace</Chip>
|
|
50
|
+
<Chip variant="input" onRemove={() => {}}>No avatar</Chip>
|
|
51
|
+
<Chip variant="input" selected iconProps={{ name: 'person' }} onRemove={() => {}}>Selected</Chip
|
|
52
|
+
>
|
|
53
|
+
<Chip variant="input" disabled iconProps={{ name: 'person' }} onRemove={() => {}}>Disabled</Chip
|
|
54
|
+
>
|
|
55
|
+
</div>
|
|
56
|
+
</Story>
|
|
57
|
+
|
|
58
|
+
<Story name="Suggestion" asChild>
|
|
59
|
+
<div class="flex flex-wrap items-center gap-4 p-6">
|
|
60
|
+
<Chip variant="suggestion">Try this</Chip>
|
|
61
|
+
<Chip variant="suggestion" elevated>Elevated</Chip>
|
|
62
|
+
<Chip variant="suggestion" disabled>Disabled</Chip>
|
|
63
|
+
</div>
|
|
64
|
+
</Story>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import Chip from './Chip.svelte';
|
|
2
|
+
interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
|
|
3
|
+
new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
|
|
4
|
+
$$bindings?: Bindings;
|
|
5
|
+
} & Exports;
|
|
6
|
+
(internal: unknown, props: {
|
|
7
|
+
$$events?: Events;
|
|
8
|
+
$$slots?: Slots;
|
|
9
|
+
}): Exports & {
|
|
10
|
+
$set?: any;
|
|
11
|
+
$on?: any;
|
|
12
|
+
};
|
|
13
|
+
z_$$bindings?: Bindings;
|
|
14
|
+
}
|
|
15
|
+
declare const Chip: $$__sveltets_2_IsomorphicComponent<Record<string, never>, {
|
|
16
|
+
[evt: string]: CustomEvent<any>;
|
|
17
|
+
}, {}, {}, string>;
|
|
18
|
+
type Chip = InstanceType<typeof Chip>;
|
|
19
|
+
export default Chip;
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
@component
|
|
3
|
+
Chips help people enter information, make selections, filter content, or trigger actions.
|
|
4
|
+
|
|
5
|
+
- Assist: Represents a smart or automated action, such as adding an event to a calendar
|
|
6
|
+
- Filter: Uses tags or descriptive words to filter content; supports a selected state
|
|
7
|
+
- Input: Represents a discrete piece of information entered by a user, and can be removed
|
|
8
|
+
- Suggestion: Helps narrow a user's intent by presenting dynamically generated suggestions
|
|
9
|
+
|
|
10
|
+
@see https://m3.material.io/components/chips/overview
|
|
11
|
+
-->
|
|
12
|
+
<script lang="ts">
|
|
13
|
+
import type { ChipProps } from './types.js';
|
|
14
|
+
import { Icon, Layer } from '../../utils/index.js';
|
|
15
|
+
import { chip } from './theme.js';
|
|
16
|
+
import clsx from 'clsx';
|
|
17
|
+
import { Button, Toggle, type ButtonRootProps, type ToggleRootProps } from 'bits-ui';
|
|
18
|
+
import type { HTMLAttributes } from 'svelte/elements';
|
|
19
|
+
|
|
20
|
+
let {
|
|
21
|
+
children,
|
|
22
|
+
variant = 'assist',
|
|
23
|
+
elevated = false,
|
|
24
|
+
selected = $bindable(false),
|
|
25
|
+
onPressedChange,
|
|
26
|
+
disabled = false,
|
|
27
|
+
iconProps,
|
|
28
|
+
avatar,
|
|
29
|
+
onRemove,
|
|
30
|
+
formaction,
|
|
31
|
+
class: className,
|
|
32
|
+
...restProps
|
|
33
|
+
}: ChipProps = $props();
|
|
34
|
+
|
|
35
|
+
const isFilter = $derived(variant === 'filter');
|
|
36
|
+
const isElevated = $derived(variant === 'input' ? false : elevated);
|
|
37
|
+
const isSelected = $derived(variant === 'filter' || variant === 'input' ? selected : false);
|
|
38
|
+
const showCheck = $derived(isFilter && selected);
|
|
39
|
+
|
|
40
|
+
const { base, icon, label, trailing, checkIcon } = $derived(
|
|
41
|
+
chip({ variant, elevated: isElevated, selected: isSelected, disabled })
|
|
42
|
+
);
|
|
43
|
+
const chipCls = $derived(base({ class: clsx(className) }));
|
|
44
|
+
</script>
|
|
45
|
+
|
|
46
|
+
{#snippet leading()}
|
|
47
|
+
{#if showCheck}
|
|
48
|
+
<svg
|
|
49
|
+
viewBox="0 0 24 24"
|
|
50
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
51
|
+
class={checkIcon()}
|
|
52
|
+
fill="currentColor"
|
|
53
|
+
>
|
|
54
|
+
<path d="M9.55 18 3.85 12.3 5.275 10.875 9.55 15.15 18.725 5.975 20.15 7.4Z" />
|
|
55
|
+
</svg>
|
|
56
|
+
{:else if avatar}
|
|
57
|
+
{@render avatar()}
|
|
58
|
+
{:else if iconProps}
|
|
59
|
+
<Icon size="xs" class={icon()} {...iconProps} />
|
|
60
|
+
{/if}
|
|
61
|
+
{/snippet}
|
|
62
|
+
|
|
63
|
+
{#if isFilter}
|
|
64
|
+
<Toggle.Root
|
|
65
|
+
bind:pressed={selected}
|
|
66
|
+
{onPressedChange}
|
|
67
|
+
{disabled}
|
|
68
|
+
class={chipCls}
|
|
69
|
+
data-cy="m3-chip"
|
|
70
|
+
{...restProps as ToggleRootProps}
|
|
71
|
+
>
|
|
72
|
+
{@render leading()}
|
|
73
|
+
<span class={label()}>{@render children()}</span>
|
|
74
|
+
<Layer />
|
|
75
|
+
</Toggle.Root>
|
|
76
|
+
{:else if variant === 'input'}
|
|
77
|
+
<div
|
|
78
|
+
class={chipCls}
|
|
79
|
+
data-cy="m3-chip"
|
|
80
|
+
aria-disabled={disabled}
|
|
81
|
+
data-disabled={disabled ? true : undefined}
|
|
82
|
+
{...restProps as HTMLAttributes<HTMLDivElement>}
|
|
83
|
+
>
|
|
84
|
+
{@render leading()}
|
|
85
|
+
<span class={label()}>{@render children()}</span>
|
|
86
|
+
{#if onRemove}
|
|
87
|
+
<button
|
|
88
|
+
type="button"
|
|
89
|
+
class={trailing()}
|
|
90
|
+
{disabled}
|
|
91
|
+
onclick={(e) => {
|
|
92
|
+
e.stopPropagation();
|
|
93
|
+
onRemove?.();
|
|
94
|
+
}}
|
|
95
|
+
aria-label="Remove"
|
|
96
|
+
>
|
|
97
|
+
<Icon size="xs" name="close" />
|
|
98
|
+
<Layer />
|
|
99
|
+
</button>
|
|
100
|
+
{/if}
|
|
101
|
+
<Layer />
|
|
102
|
+
</div>
|
|
103
|
+
{:else}
|
|
104
|
+
<Button.Root
|
|
105
|
+
{disabled}
|
|
106
|
+
{formaction}
|
|
107
|
+
class={chipCls}
|
|
108
|
+
data-cy="m3-chip"
|
|
109
|
+
{...restProps as ButtonRootProps}
|
|
110
|
+
>
|
|
111
|
+
{@render leading()}
|
|
112
|
+
<span class={label()}>{@render children()}</span>
|
|
113
|
+
<Layer />
|
|
114
|
+
</Button.Root>
|
|
115
|
+
{/if}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { ChipProps } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Chips help people enter information, make selections, filter content, or trigger actions.
|
|
4
|
+
*
|
|
5
|
+
* - Assist: Represents a smart or automated action, such as adding an event to a calendar
|
|
6
|
+
* - Filter: Uses tags or descriptive words to filter content; supports a selected state
|
|
7
|
+
* - Input: Represents a discrete piece of information entered by a user, and can be removed
|
|
8
|
+
* - Suggestion: Helps narrow a user's intent by presenting dynamically generated suggestions
|
|
9
|
+
*
|
|
10
|
+
* @see https://m3.material.io/components/chips/overview
|
|
11
|
+
*/
|
|
12
|
+
declare const Chip: import("svelte").Component<ChipProps, {}, "selected">;
|
|
13
|
+
type Chip = ReturnType<typeof Chip>;
|
|
14
|
+
export default Chip;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
// THIS FILE IS AUTO-GENERATED BY scripts/generate-components-index.ts - DO NOT EDIT MANUALLY
|
|
2
2
|
// re-export TS/JS modules from this folder
|
|
3
3
|
export * from './theme.js';
|
|
4
|
+
export * from './types.js';
|
|
4
5
|
// default exports for components in this folder
|
|
5
|
-
export { default as
|
|
6
|
+
export { default as Chip } from './Chip.svelte';
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { type VariantProps } from 'tailwind-variants';
|
|
2
|
+
export type ChipVariants = VariantProps<typeof chip>;
|
|
3
|
+
export declare const chip: import("tailwind-variants").TVReturnType<{
|
|
4
|
+
variant: {
|
|
5
|
+
assist: "";
|
|
6
|
+
filter: "";
|
|
7
|
+
input: "";
|
|
8
|
+
suggestion: "";
|
|
9
|
+
};
|
|
10
|
+
elevated: {
|
|
11
|
+
true: "";
|
|
12
|
+
false: "";
|
|
13
|
+
};
|
|
14
|
+
selected: {
|
|
15
|
+
true: "";
|
|
16
|
+
false: "";
|
|
17
|
+
};
|
|
18
|
+
disabled: {
|
|
19
|
+
true: "";
|
|
20
|
+
false: "";
|
|
21
|
+
};
|
|
22
|
+
}, {
|
|
23
|
+
base: string;
|
|
24
|
+
icon: string;
|
|
25
|
+
label: string;
|
|
26
|
+
trailing: string;
|
|
27
|
+
checkIcon: string;
|
|
28
|
+
}, undefined, {
|
|
29
|
+
variant: {
|
|
30
|
+
assist: "";
|
|
31
|
+
filter: "";
|
|
32
|
+
input: "";
|
|
33
|
+
suggestion: "";
|
|
34
|
+
};
|
|
35
|
+
elevated: {
|
|
36
|
+
true: "";
|
|
37
|
+
false: "";
|
|
38
|
+
};
|
|
39
|
+
selected: {
|
|
40
|
+
true: "";
|
|
41
|
+
false: "";
|
|
42
|
+
};
|
|
43
|
+
disabled: {
|
|
44
|
+
true: "";
|
|
45
|
+
false: "";
|
|
46
|
+
};
|
|
47
|
+
}, {
|
|
48
|
+
base: string;
|
|
49
|
+
icon: string;
|
|
50
|
+
label: string;
|
|
51
|
+
trailing: string;
|
|
52
|
+
checkIcon: string;
|
|
53
|
+
}, import("tailwind-variants").TVReturnTypeLike<{
|
|
54
|
+
variant: {
|
|
55
|
+
assist: "";
|
|
56
|
+
filter: "";
|
|
57
|
+
input: "";
|
|
58
|
+
suggestion: "";
|
|
59
|
+
};
|
|
60
|
+
elevated: {
|
|
61
|
+
true: "";
|
|
62
|
+
false: "";
|
|
63
|
+
};
|
|
64
|
+
selected: {
|
|
65
|
+
true: "";
|
|
66
|
+
false: "";
|
|
67
|
+
};
|
|
68
|
+
disabled: {
|
|
69
|
+
true: "";
|
|
70
|
+
false: "";
|
|
71
|
+
};
|
|
72
|
+
}, {
|
|
73
|
+
base: string;
|
|
74
|
+
icon: string;
|
|
75
|
+
label: string;
|
|
76
|
+
trailing: string;
|
|
77
|
+
checkIcon: string;
|
|
78
|
+
}>>;
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { tv } from 'tailwind-variants';
|
|
2
|
+
export const chip = tv({
|
|
3
|
+
slots: {
|
|
4
|
+
base: 'md-component-button-base group inline-flex h-8 max-w-max items-center justify-center gap-2 rounded-sm before:rounded-sm px-4 md-sys-typescale-label-large font-medium',
|
|
5
|
+
icon: 'shrink-0',
|
|
6
|
+
label: '',
|
|
7
|
+
trailing: 'relative -mr-2 ml-1 inline-flex size-[18px] shrink-0 items-center justify-center rounded-full',
|
|
8
|
+
checkIcon: 'size-4 shrink-0'
|
|
9
|
+
},
|
|
10
|
+
variants: {
|
|
11
|
+
variant: {
|
|
12
|
+
assist: '',
|
|
13
|
+
filter: '',
|
|
14
|
+
input: '',
|
|
15
|
+
suggestion: ''
|
|
16
|
+
},
|
|
17
|
+
elevated: {
|
|
18
|
+
true: '',
|
|
19
|
+
false: ''
|
|
20
|
+
},
|
|
21
|
+
selected: {
|
|
22
|
+
true: '',
|
|
23
|
+
false: ''
|
|
24
|
+
},
|
|
25
|
+
disabled: {
|
|
26
|
+
true: '',
|
|
27
|
+
false: ''
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
compoundVariants: [
|
|
31
|
+
{
|
|
32
|
+
elevated: false,
|
|
33
|
+
selected: false,
|
|
34
|
+
class: {
|
|
35
|
+
base: 'bg-md-sys-color-surface text-md-sys-color-on-surface-variant outline outline-md-sys-color-outline-variant'
|
|
36
|
+
}
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
elevated: true,
|
|
40
|
+
selected: false,
|
|
41
|
+
class: {
|
|
42
|
+
base: 'bg-md-sys-color-surface-container-low text-md-sys-color-on-surface-variant shadow-elevation-1 hover:shadow-elevation-2'
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
selected: true,
|
|
47
|
+
class: {
|
|
48
|
+
base: 'bg-md-sys-color-secondary-container text-md-sys-color-on-secondary-container'
|
|
49
|
+
}
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
variant: 'assist',
|
|
53
|
+
selected: false,
|
|
54
|
+
class: { icon: 'text-md-sys-color-primary' }
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
disabled: true,
|
|
58
|
+
class: {
|
|
59
|
+
base: 'cursor-not-allowed bg-md-sys-color-on-surface/10 text-md-sys-color-on-surface/38 outline-md-sys-color-on-surface/12 hover:shadow-elevation-1',
|
|
60
|
+
icon: 'text-md-sys-color-on-surface/38',
|
|
61
|
+
trailing: 'text-md-sys-color-on-surface/38 pointer-events-none',
|
|
62
|
+
checkIcon: 'text-md-sys-color-on-surface/38'
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
],
|
|
66
|
+
defaultVariants: {
|
|
67
|
+
variant: 'assist',
|
|
68
|
+
elevated: false,
|
|
69
|
+
selected: false,
|
|
70
|
+
disabled: false
|
|
71
|
+
}
|
|
72
|
+
});
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { AnchorButtonAttributes, IconProps } from '../../utils/index.js';
|
|
2
|
+
import type { Snippet } from 'svelte';
|
|
3
|
+
import type { ChipVariants } from './theme.js';
|
|
4
|
+
export type ChipProps = ChipVariants & AnchorButtonAttributes & {
|
|
5
|
+
/**
|
|
6
|
+
* The semantic type of chip.
|
|
7
|
+
* - 'assist': Represents a smart or automated action.
|
|
8
|
+
* - 'filter': Toggles filtering of content; supports a selected state with a leading checkmark.
|
|
9
|
+
* - 'input': Represents a discrete piece of information entered by the user; supports removal.
|
|
10
|
+
* - 'suggestion': Presents a dynamically generated suggestion.
|
|
11
|
+
*/
|
|
12
|
+
variant?: ChipVariants['variant'];
|
|
13
|
+
/**
|
|
14
|
+
* Whether the chip's container is elevated (shadow) instead of flat/outlined.
|
|
15
|
+
* Not applicable to 'input' chips, which are always flat.
|
|
16
|
+
*/
|
|
17
|
+
elevated?: ChipVariants['elevated'];
|
|
18
|
+
/**
|
|
19
|
+
* Whether the chip is selected. Bindable.
|
|
20
|
+
* Meaningful for 'filter' chips (drives the toggle + checkmark) and 'input' chips (highlight only).
|
|
21
|
+
*/
|
|
22
|
+
selected?: boolean;
|
|
23
|
+
/** Callback fired when a 'filter' chip's selected state changes via interaction. */
|
|
24
|
+
onPressedChange?: (selected: boolean) => void;
|
|
25
|
+
/** Whether the chip is disabled. */
|
|
26
|
+
disabled?: boolean;
|
|
27
|
+
/** Configuration for the leading icon. */
|
|
28
|
+
iconProps?: IconProps;
|
|
29
|
+
/**
|
|
30
|
+
* Custom leading content (e.g. an avatar image) rendered instead of `iconProps`.
|
|
31
|
+
* Typically used by 'input' chips to represent a contact or entity.
|
|
32
|
+
*/
|
|
33
|
+
avatar?: Snippet;
|
|
34
|
+
/**
|
|
35
|
+
* Called when the trailing remove icon is activated.
|
|
36
|
+
* Providing this renders the trailing remove affordance on 'input' chips.
|
|
37
|
+
*/
|
|
38
|
+
onRemove?: () => void;
|
|
39
|
+
/** The label content of the chip. */
|
|
40
|
+
children: Snippet;
|
|
41
|
+
/** The `formaction` attribute for the chip when used in a form. */
|
|
42
|
+
formaction?: string;
|
|
43
|
+
};
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
<script module lang="ts">
|
|
2
|
+
import { defineMeta } from '@storybook/addon-svelte-csf';
|
|
3
|
+
import ActionRail from './ActionRail.svelte';
|
|
4
|
+
import Toolbar from '../../toolbar/Toolbar.svelte';
|
|
5
|
+
import ToolbarButton from '../../toolbar/ToolbarButton.svelte';
|
|
6
|
+
import ToolbarDivider from '../../toolbar/ToolbarDivider.svelte';
|
|
7
|
+
|
|
8
|
+
const { Story } = defineMeta({
|
|
9
|
+
title: 'Containers/Action Rail',
|
|
10
|
+
component: ActionRail,
|
|
11
|
+
argTypes: {
|
|
12
|
+
anchor: {
|
|
13
|
+
control: 'select',
|
|
14
|
+
options: ['viewport', 'parent', 'sticky']
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
args: {
|
|
18
|
+
anchor: 'parent'
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
</script>
|
|
22
|
+
|
|
23
|
+
<Story name="Playground">
|
|
24
|
+
{#snippet template(args)}
|
|
25
|
+
<div class="bg-md-sys-color-surface-variant relative h-[420px] overflow-hidden rounded-2xl">
|
|
26
|
+
<ActionRail anchor={args.anchor}>
|
|
27
|
+
<Toolbar orientation="vertical">
|
|
28
|
+
<ToolbarButton iconProps={{ name: 'edit' }} />
|
|
29
|
+
<ToolbarButton iconProps={{ name: 'share' }} />
|
|
30
|
+
<ToolbarDivider />
|
|
31
|
+
<ToolbarButton iconProps={{ name: 'delete' }} />
|
|
32
|
+
</Toolbar>
|
|
33
|
+
</ActionRail>
|
|
34
|
+
</div>
|
|
35
|
+
{/snippet}
|
|
36
|
+
</Story>
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import ActionRail from './ActionRail.svelte';
|
|
2
2
|
interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
|
|
3
3
|
new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
|
|
4
4
|
$$bindings?: Bindings;
|
|
@@ -12,8 +12,8 @@ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> =
|
|
|
12
12
|
};
|
|
13
13
|
z_$$bindings?: Bindings;
|
|
14
14
|
}
|
|
15
|
-
declare const
|
|
15
|
+
declare const ActionRail: $$__sveltets_2_IsomorphicComponent<Record<string, never>, {
|
|
16
16
|
[evt: string]: CustomEvent<any>;
|
|
17
17
|
}, {}, {}, string>;
|
|
18
|
-
type
|
|
19
|
-
export default
|
|
18
|
+
type ActionRail = InstanceType<typeof ActionRail>;
|
|
19
|
+
export default ActionRail;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
@component
|
|
3
|
+
Material 3 Action Rail.
|
|
4
|
+
|
|
5
|
+
A rightmost, sticky container for hosting a vertical `Toolbar` (or other grouped
|
|
6
|
+
actions) alongside page content. This is the M3 spec's newer "rail as a toolbar
|
|
7
|
+
host" role — distinct from `Rail` (the navigation-rail component under `nav/`).
|
|
8
|
+
Because it holds actions rather than destinations, it renders a plain container
|
|
9
|
+
and is intentionally NOT wrapped in bits-ui's `NavigationMenu` — `Toolbar.svelte`
|
|
10
|
+
(bits-ui `Toolbar.Root`) already supplies the correct `role="toolbar"` semantics
|
|
11
|
+
for whatever is placed inside.
|
|
12
|
+
|
|
13
|
+
@see https://m3.material.io/components/toolbars
|
|
14
|
+
-->
|
|
15
|
+
<script lang="ts">
|
|
16
|
+
import clsx from 'clsx';
|
|
17
|
+
import { actionRail } from './theme.js';
|
|
18
|
+
import type { ActionRailProps } from './types.js';
|
|
19
|
+
|
|
20
|
+
let {
|
|
21
|
+
children,
|
|
22
|
+
anchor = 'sticky',
|
|
23
|
+
top = 0,
|
|
24
|
+
bottom = 0,
|
|
25
|
+
class: className,
|
|
26
|
+
...rest
|
|
27
|
+
}: ActionRailProps = $props();
|
|
28
|
+
|
|
29
|
+
const { base } = $derived(actionRail({ anchor }));
|
|
30
|
+
const cssVars = $derived(`--action-rail-top: ${top}px; --action-rail-bottom: ${bottom}px;`);
|
|
31
|
+
</script>
|
|
32
|
+
|
|
33
|
+
<div class={base({ class: clsx(className) })} style={cssVars} {...rest}>
|
|
34
|
+
{@render children()}
|
|
35
|
+
</div>
|