@noxlovette/material 0.3.3 → 0.4.1
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/dist/utils/theme.svelte.js +1 -1
- package/package.json +39 -38
- 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
|
@@ -7,9 +7,13 @@
|
|
|
7
7
|
}
|
|
8
8
|
|
|
9
9
|
.md-component-button-base {
|
|
10
|
-
|
|
10
|
+
/* `relative` is applied as a literal utility token at each call site (theme.ts), not
|
|
11
|
+
* baked in here — that lets tailwind-merge dedupe it against a caller-supplied
|
|
12
|
+
* `fixed`/`absolute`/`sticky` override. Baking it into this custom class's own compiled
|
|
13
|
+
* CSS rule would set `position` outside of anything twMerge can see or override. */
|
|
14
|
+
@apply state-layer md-sys-state-focus-indicator disabled:bg-md-sys-color-on-surface/10 disabled:text-md-sys-color-on-surface/38 disabled:before:bg-md-sys-color-on-surface/38 inline-flex items-center justify-center select-none disabled:cursor-not-allowed;
|
|
11
15
|
transition: box-shadow var(--md-sys-motion-duration, 200ms)
|
|
12
|
-
var(--md-sys-motion-timing-function, cubic-bezier(0.
|
|
16
|
+
var(--md-sys-motion-timing-function, cubic-bezier(0.2, 0, 0, 1));
|
|
13
17
|
}
|
|
14
18
|
|
|
15
19
|
.md-btn-morph {
|
|
@@ -30,6 +34,124 @@
|
|
|
30
34
|
}
|
|
31
35
|
}
|
|
32
36
|
|
|
37
|
+
/*
|
|
38
|
+
* Standard button group (https://m3.material.io/components/button-groups/overview).
|
|
39
|
+
* A plain flex row/column of otherwise-untouched Button/ButtonIcon/Toggle children.
|
|
40
|
+
* `data-size` drives both the fixed gap between buttons and the padding-inline
|
|
41
|
+
* "squeeze" below — pressing one button grows its own padding and shrinks its
|
|
42
|
+
* immediate neighbors', which is the M3-specified adjacent-button interaction.
|
|
43
|
+
* `:has()` scopes the shrink to only the pressed button's direct neighbors.
|
|
44
|
+
*/
|
|
45
|
+
.md-btn-group-standard {
|
|
46
|
+
display: inline-flex;
|
|
47
|
+
align-items: center;
|
|
48
|
+
flex-wrap: nowrap;
|
|
49
|
+
width: max-content;
|
|
50
|
+
|
|
51
|
+
&[data-orientation='vertical'] {
|
|
52
|
+
flex-direction: column;
|
|
53
|
+
align-items: stretch;
|
|
54
|
+
width: auto;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
&[data-size='xs'] {
|
|
58
|
+
--btn-group-gap: 1.125rem;
|
|
59
|
+
--btn-group-base-px: 1rem;
|
|
60
|
+
--btn-group-squeeze: 0.375rem;
|
|
61
|
+
}
|
|
62
|
+
&[data-size='sm'] {
|
|
63
|
+
--btn-group-gap: 0.75rem;
|
|
64
|
+
--btn-group-base-px: 1rem;
|
|
65
|
+
--btn-group-squeeze: 0.375rem;
|
|
66
|
+
}
|
|
67
|
+
&[data-size='md'] {
|
|
68
|
+
--btn-group-gap: 0.5rem;
|
|
69
|
+
--btn-group-base-px: 1.5rem;
|
|
70
|
+
--btn-group-squeeze: 0.5rem;
|
|
71
|
+
}
|
|
72
|
+
&[data-size='lg'] {
|
|
73
|
+
--btn-group-gap: 0.5rem;
|
|
74
|
+
--btn-group-base-px: 3rem;
|
|
75
|
+
--btn-group-squeeze: 0.75rem;
|
|
76
|
+
}
|
|
77
|
+
&[data-size='xl'] {
|
|
78
|
+
--btn-group-gap: 0.5rem;
|
|
79
|
+
--btn-group-base-px: 4rem;
|
|
80
|
+
--btn-group-squeeze: 1rem;
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
gap: var(--btn-group-gap, 0.5rem);
|
|
84
|
+
|
|
85
|
+
> * {
|
|
86
|
+
padding-inline: var(--btn-group-base-px, 1rem);
|
|
87
|
+
transition:
|
|
88
|
+
padding-inline var(--md-sys-motion-duration-fast-spatial, 350ms)
|
|
89
|
+
var(--md-sys-motion-timing-function-fast-spatial, cubic-bezier(0.42, 1.67, 0.21, 0.9)),
|
|
90
|
+
border-radius 200ms var(--md-sys-motion-timing-function-emphasized-accel);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
> *:active:not(:disabled) {
|
|
94
|
+
padding-inline: calc(var(--btn-group-base-px, 1rem) + var(--btn-group-squeeze, 0.5rem));
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
> *:has(+ *:active:not(:disabled)),
|
|
98
|
+
> *:active:not(:disabled) + * {
|
|
99
|
+
padding-inline: max(
|
|
100
|
+
0px,
|
|
101
|
+
calc(var(--btn-group-base-px, 1rem) - var(--btn-group-squeeze, 0.5rem))
|
|
102
|
+
);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
/*
|
|
107
|
+
* Connected button group item — replaces the deprecated segmented button.
|
|
108
|
+
* `--cbg-inner` (per size) is the shared radius facing a neighbor; `--cbg-outer`
|
|
109
|
+
* defaults to fully round and is only overridden (to equal --cbg-inner) for the
|
|
110
|
+
* square shape, so the position rules below become no-ops in that case.
|
|
111
|
+
* Selecting/pressing an item collapses all four of its own corners to
|
|
112
|
+
* --cbg-inner ("round to square") without touching its neighbors' shape.
|
|
113
|
+
*/
|
|
114
|
+
.md-btn-connected {
|
|
115
|
+
border-radius: var(--cbg-inner, 9999px);
|
|
116
|
+
transition:
|
|
117
|
+
border-radius 250ms var(--md-sys-motion-timing-function-emphasized-accel),
|
|
118
|
+
background-color var(--md-sys-motion-duration-fast, 150ms)
|
|
119
|
+
var(--md-sys-motion-timing-function, cubic-bezier(0.2, 0, 0, 1)),
|
|
120
|
+
color var(--md-sys-motion-duration-fast, 150ms)
|
|
121
|
+
var(--md-sys-motion-timing-function, cubic-bezier(0.2, 0, 0, 1));
|
|
122
|
+
|
|
123
|
+
&:only-child {
|
|
124
|
+
border-radius: var(--cbg-outer, 9999px);
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
&[data-orientation='horizontal']:first-child:not(:only-child) {
|
|
128
|
+
border-top-left-radius: var(--cbg-outer, 9999px);
|
|
129
|
+
border-bottom-left-radius: var(--cbg-outer, 9999px);
|
|
130
|
+
}
|
|
131
|
+
&[data-orientation='horizontal']:last-child:not(:only-child) {
|
|
132
|
+
border-top-right-radius: var(--cbg-outer, 9999px);
|
|
133
|
+
border-bottom-right-radius: var(--cbg-outer, 9999px);
|
|
134
|
+
}
|
|
135
|
+
&[data-orientation='vertical']:first-child:not(:only-child) {
|
|
136
|
+
border-top-left-radius: var(--cbg-outer, 9999px);
|
|
137
|
+
border-top-right-radius: var(--cbg-outer, 9999px);
|
|
138
|
+
}
|
|
139
|
+
&[data-orientation='vertical']:last-child:not(:only-child) {
|
|
140
|
+
border-bottom-left-radius: var(--cbg-outer, 9999px);
|
|
141
|
+
border-bottom-right-radius: var(--cbg-outer, 9999px);
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
&:active:not(:disabled),
|
|
145
|
+
&[data-state='on'] {
|
|
146
|
+
border-radius: var(--cbg-inner, 4px) !important;
|
|
147
|
+
transition-timing-function: var(--md-sys-motion-timing-function-emphasized-decel);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
&:active:not(:disabled) {
|
|
151
|
+
transition-duration: 150ms;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
|
|
33
155
|
.md-component-button-filled-primary {
|
|
34
156
|
@apply bg-md-sys-color-primary text-md-sys-color-on-primary;
|
|
35
157
|
}
|
|
@@ -124,7 +246,7 @@
|
|
|
124
246
|
.text-link {
|
|
125
247
|
@apply text-md-sys-color-primary hover:text-md-sys-color-secondary underline;
|
|
126
248
|
transition: color var(--md-sys-motion-duration, 200ms)
|
|
127
|
-
var(--md-sys-motion-timing-function, cubic-bezier(0.
|
|
249
|
+
var(--md-sys-motion-timing-function, cubic-bezier(0.2, 0, 0, 1));
|
|
128
250
|
}
|
|
129
251
|
|
|
130
252
|
.text-link.md-sys-typescale-label-small {
|
|
@@ -149,6 +271,6 @@
|
|
|
149
271
|
@apply before:pointer-events-none before:absolute before:inset-0 before:content-[''];
|
|
150
272
|
&::before {
|
|
151
273
|
transition: background-color var(--md-sys-motion-duration-fast, 150ms)
|
|
152
|
-
var(--md-sys-motion-timing-function, cubic-bezier(0.
|
|
274
|
+
var(--md-sys-motion-timing-function, cubic-bezier(0.2, 0, 0, 1));
|
|
153
275
|
}
|
|
154
276
|
}
|
package/dist/styles/motion.css
CHANGED
|
@@ -15,16 +15,19 @@
|
|
|
15
15
|
--md-sys-motion-easing-slow-spatial: var(--md-sys-motion-timing-function-slow-spatial)
|
|
16
16
|
var(--md-sys-motion-duration-slow-spatial);
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
/* Standard easing — md.sys.motion.easing.standard, cubic-bezier(0.2, 0, 0, 1) per
|
|
19
|
+
m3.material.io/styles/motion/easing-and-duration/tokens-specs. Same curve across all
|
|
20
|
+
three durations; only the duration changes per tier. */
|
|
21
|
+
--md-sys-motion-timing-function-fast: cubic-bezier(0.2, 0, 0, 1);
|
|
19
22
|
--md-sys-motion-duration-fast: 150ms;
|
|
20
23
|
--md-sys-motion-easing-fast: var(--md-sys-motion-timing-function-fast)
|
|
21
24
|
var(--md-sys-motion-duration-fast);
|
|
22
25
|
|
|
23
|
-
--md-sys-motion-timing-function: cubic-bezier(0.
|
|
26
|
+
--md-sys-motion-timing-function: cubic-bezier(0.2, 0, 0, 1);
|
|
24
27
|
--md-sys-motion-duration: 200ms;
|
|
25
28
|
--md-sys-motion-easing: var(--md-sys-motion-timing-function) var(--md-sys-motion-duration);
|
|
26
29
|
|
|
27
|
-
--md-sys-motion-timing-function-slow: cubic-bezier(0.
|
|
30
|
+
--md-sys-motion-timing-function-slow: cubic-bezier(0.2, 0, 0, 1);
|
|
28
31
|
--md-sys-motion-duration-slow: 300ms;
|
|
29
32
|
--md-sys-motion-easing-slow: var(--md-sys-motion-timing-function-slow)
|
|
30
33
|
var(--md-sys-motion-duration-slow);
|
package/dist/utils/Layer.svelte
CHANGED
|
@@ -54,7 +54,9 @@
|
|
|
54
54
|
expand.setAttribute('dur', `${speed}ms`);
|
|
55
55
|
expand.setAttribute('fill', 'freeze');
|
|
56
56
|
expand.setAttribute('calcMode', 'spline');
|
|
57
|
-
|
|
57
|
+
// md.sys.motion.easing.standard: cubic-bezier(0.2, 0, 0, 1) — keep in sync with
|
|
58
|
+
// --md-sys-motion-timing-function in motion.css (SMIL keySplines can't reference CSS vars).
|
|
59
|
+
expand.setAttribute('keySplines', '0.2 0, 0 1');
|
|
58
60
|
circle.appendChild(expand);
|
|
59
61
|
|
|
60
62
|
const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
|
|
@@ -105,7 +107,9 @@
|
|
|
105
107
|
fade.setAttribute('dur', '800ms');
|
|
106
108
|
fade.setAttribute('fill', 'freeze');
|
|
107
109
|
fade.setAttribute('calcMode', 'spline');
|
|
108
|
-
|
|
110
|
+
// md.sys.motion.easing.standard: cubic-bezier(0.2, 0, 0, 1) — keep in sync with
|
|
111
|
+
// --md-sys-motion-timing-function in motion.css (SMIL keySplines can't reference CSS vars).
|
|
112
|
+
fade.setAttribute('keySplines', '0.2 0, 0 1');
|
|
109
113
|
circle.appendChild(fade);
|
|
110
114
|
fade.beginElement();
|
|
111
115
|
setTimeout(() => svg.remove(), 800);
|
|
@@ -196,7 +200,7 @@
|
|
|
196
200
|
background-color: currentColor;
|
|
197
201
|
opacity: 0;
|
|
198
202
|
transition: opacity var(--md-sys-motion-duration-fast, 150ms)
|
|
199
|
-
var(--md-sys-motion-timing-function, cubic-bezier(0.
|
|
203
|
+
var(--md-sys-motion-timing-function, cubic-bezier(0.2, 0, 0, 1));
|
|
200
204
|
|
|
201
205
|
&:not(
|
|
202
206
|
:global(input:disabled + label) > .tint,
|
package/dist/utils/Theme.svelte
CHANGED
|
@@ -1,5 +1,16 @@
|
|
|
1
1
|
<script lang="ts">
|
|
2
|
-
import {
|
|
2
|
+
import { MediaQuery } from 'svelte/reactivity';
|
|
3
|
+
import { generateThemeCSS, themeState, STORAGE_KEY } from './theme.svelte.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Whether to generate and inject the M3 dynamic-color CSS custom properties
|
|
7
|
+
* derived from `themeState.sourceColor`. When `false`, this component still
|
|
8
|
+
* restores/persists `themeState.scheme` and keeps the `dark` class on
|
|
9
|
+
* `<html>` in sync with it (including system-preference changes) — it just
|
|
10
|
+
* skips generating dynamic-color CSS, for consumers supplying their own
|
|
11
|
+
* static `@noxlovette/material/theme/*` CSS.
|
|
12
|
+
*/
|
|
13
|
+
let { generateCSS = true }: { generateCSS?: boolean } = $props();
|
|
3
14
|
|
|
4
15
|
// Restore from localStorage on mount
|
|
5
16
|
$effect(() => {
|
|
@@ -17,25 +28,12 @@
|
|
|
17
28
|
});
|
|
18
29
|
|
|
19
30
|
// Track dark mode, including system preference changes
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
finalIsDark = themeState.scheme === 'dark';
|
|
25
|
-
return;
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
const media = window.matchMedia('(prefers-color-scheme: dark)');
|
|
29
|
-
const handler = (e: MediaQueryListEvent) => {
|
|
30
|
-
finalIsDark = e.matches;
|
|
31
|
-
};
|
|
32
|
-
|
|
33
|
-
finalIsDark = media.matches;
|
|
34
|
-
media.addEventListener('change', handler);
|
|
35
|
-
return () => media.removeEventListener('change', handler);
|
|
36
|
-
});
|
|
31
|
+
const systemDark = new MediaQuery('(prefers-color-scheme: dark)');
|
|
32
|
+
const finalIsDark = $derived(
|
|
33
|
+
themeState.scheme === 'system' ? systemDark.current : themeState.scheme === 'dark'
|
|
34
|
+
);
|
|
37
35
|
|
|
38
|
-
const themeStyles = $derived(generateThemeCSS(themeState, finalIsDark));
|
|
36
|
+
const themeStyles = $derived(generateCSS ? generateThemeCSS(themeState, finalIsDark) : '');
|
|
39
37
|
|
|
40
38
|
// Persist to localStorage on any change
|
|
41
39
|
$effect(() => {
|
|
@@ -61,5 +59,7 @@
|
|
|
61
59
|
</script>
|
|
62
60
|
|
|
63
61
|
<svelte:head>
|
|
64
|
-
{
|
|
62
|
+
{#if generateCSS}
|
|
63
|
+
{@html `<` + `style id="ogonek-m3-dynamic-theme">` + themeStyles + `</` + `style>`}
|
|
64
|
+
{/if}
|
|
65
65
|
</svelte:head>
|
|
@@ -2,29 +2,29 @@ import { type VariantProps } from 'tailwind-variants';
|
|
|
2
2
|
export type LoadingIndicatorVariants = VariantProps<typeof loadingIndicator>;
|
|
3
3
|
export declare const loadingIndicator: import("tailwind-variants").TVReturnType<{
|
|
4
4
|
center: {
|
|
5
|
-
true:
|
|
6
|
-
false:
|
|
5
|
+
true: "mx-auto";
|
|
6
|
+
false: "";
|
|
7
7
|
};
|
|
8
8
|
container: {
|
|
9
|
-
true:
|
|
10
|
-
false:
|
|
9
|
+
true: "text-md-sys-color-on-primary-container bg-md-sys-color-primary-container";
|
|
10
|
+
false: "text-md-sys-color-primary";
|
|
11
11
|
};
|
|
12
12
|
}, undefined, "rounded-full", {
|
|
13
13
|
center: {
|
|
14
|
-
true:
|
|
15
|
-
false:
|
|
14
|
+
true: "mx-auto";
|
|
15
|
+
false: "";
|
|
16
16
|
};
|
|
17
17
|
container: {
|
|
18
|
-
true:
|
|
19
|
-
false:
|
|
18
|
+
true: "text-md-sys-color-on-primary-container bg-md-sys-color-primary-container";
|
|
19
|
+
false: "text-md-sys-color-primary";
|
|
20
20
|
};
|
|
21
|
-
}, undefined, import("tailwind-variants").
|
|
21
|
+
}, undefined, import("tailwind-variants").TVReturnTypeLike<{
|
|
22
22
|
center: {
|
|
23
|
-
true:
|
|
24
|
-
false:
|
|
23
|
+
true: "mx-auto";
|
|
24
|
+
false: "";
|
|
25
25
|
};
|
|
26
26
|
container: {
|
|
27
|
-
true:
|
|
28
|
-
false:
|
|
27
|
+
true: "text-md-sys-color-on-primary-container bg-md-sys-color-primary-container";
|
|
28
|
+
false: "text-md-sys-color-primary";
|
|
29
29
|
};
|
|
30
|
-
}, undefined
|
|
30
|
+
}, undefined>>;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { argbFromHex, Hct, hexFromArgb, MaterialDynamicColors, QuantizerCelebi, SchemeContent, SchemeFidelity, SchemeFruitSalad, SchemeRainbow, SchemeTonalSpot, SchemeVibrant, Score } from '@
|
|
1
|
+
import { argbFromHex, Hct, hexFromArgb, MaterialDynamicColors, QuantizerCelebi, SchemeContent, SchemeFidelity, SchemeFruitSalad, SchemeRainbow, SchemeTonalSpot, SchemeVibrant, Score } from '@material/material-color-utilities';
|
|
2
2
|
export const DEFAULT_CONFIG = {
|
|
3
3
|
sourceColor: '#6750A4',
|
|
4
4
|
scheme: 'system',
|
package/package.json
CHANGED
|
@@ -1,23 +1,22 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@noxlovette/material",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
7
|
-
"url": "git+https://
|
|
7
|
+
"url": "git+https://codeberg.org/noxlovette/material.git"
|
|
8
8
|
},
|
|
9
9
|
"scripts": {
|
|
10
|
-
"build": "svelte-package
|
|
10
|
+
"build": "svelte-package",
|
|
11
|
+
"watch": "svelte-package --watch",
|
|
11
12
|
"prepublishOnly": "bun run build",
|
|
12
13
|
"check": "svelte-kit sync && svelte-check",
|
|
13
14
|
"test": "vitest run",
|
|
14
15
|
"format": "prettier --write .",
|
|
15
16
|
"dev": "vite dev",
|
|
16
17
|
"storybook": "storybook dev -p 6006",
|
|
17
|
-
"build-storybook": "storybook build"
|
|
18
|
-
|
|
19
|
-
"bin": {
|
|
20
|
-
"material-claude-skill": "./bin/install-skill.js"
|
|
18
|
+
"build-storybook": "storybook build",
|
|
19
|
+
"index": "bun run scripts/generate-components-index.ts"
|
|
21
20
|
},
|
|
22
21
|
"files": [
|
|
23
22
|
"dist",
|
|
@@ -48,51 +47,53 @@
|
|
|
48
47
|
"devDependencies": {
|
|
49
48
|
"@eslint/compat": "^2.1.0",
|
|
50
49
|
"@eslint/js": "^10.0.1",
|
|
51
|
-
"@storybook/addon-a11y": "10.5.
|
|
52
|
-
"@storybook/addon-docs": "10.5.
|
|
50
|
+
"@storybook/addon-a11y": "10.5.10",
|
|
51
|
+
"@storybook/addon-docs": "10.5.10",
|
|
53
52
|
"@storybook/addon-svelte-csf": "5.1.2",
|
|
54
|
-
"@storybook/svelte-vite": "10.5.
|
|
53
|
+
"@storybook/svelte-vite": "10.5.10",
|
|
55
54
|
"@sveltejs/adapter-static": "^3.0.10",
|
|
56
|
-
"@sveltejs/kit": "^2.
|
|
55
|
+
"@sveltejs/kit": "^2.70.3",
|
|
57
56
|
"@sveltejs/package": "^2.5.8",
|
|
58
|
-
"@sveltejs/vite-plugin-svelte": "
|
|
59
|
-
"@tailwindcss/cli": "^4.3.
|
|
57
|
+
"@sveltejs/vite-plugin-svelte": "7.3.0",
|
|
58
|
+
"@tailwindcss/cli": "^4.3.3",
|
|
60
59
|
"@tailwindcss/typography": "^0.5.20",
|
|
61
|
-
"@tailwindcss/vite": "^4.3.
|
|
62
|
-
"@types/node": "^
|
|
63
|
-
"eslint": "^10.
|
|
60
|
+
"@tailwindcss/vite": "^4.3.3",
|
|
61
|
+
"@types/node": "^26.4.0",
|
|
62
|
+
"eslint": "^10.9.1",
|
|
64
63
|
"eslint-config-prettier": "^10.1.8",
|
|
65
|
-
"eslint-plugin-svelte": "^3.
|
|
66
|
-
"globals": "^17.
|
|
67
|
-
"lefthook": "^2.1.
|
|
68
|
-
"prettier": "^3.9.
|
|
64
|
+
"eslint-plugin-svelte": "^3.23.0",
|
|
65
|
+
"globals": "^17.11.0",
|
|
66
|
+
"lefthook": "^2.1.12",
|
|
67
|
+
"prettier": "^3.9.6",
|
|
69
68
|
"prettier-plugin-organize-imports": "^4.3.0",
|
|
70
69
|
"prettier-plugin-svelte": "^4.1.1",
|
|
71
|
-
"prettier-plugin-tailwindcss": "^0.8.
|
|
72
|
-
"publint": "^0.3.
|
|
73
|
-
"shiki": "^4.3
|
|
74
|
-
"storybook": "10.5.
|
|
75
|
-
"svelte": "^5.
|
|
76
|
-
"svelte-check": "^4.7.
|
|
70
|
+
"prettier-plugin-tailwindcss": "^0.8.1",
|
|
71
|
+
"publint": "^0.3.24",
|
|
72
|
+
"shiki": "^4.4.3",
|
|
73
|
+
"storybook": "10.5.10",
|
|
74
|
+
"svelte": "^5.57.0",
|
|
75
|
+
"svelte-check": "^4.7.6",
|
|
77
76
|
"sveltekit-superforms": "^2.30.2",
|
|
78
77
|
"tailwind-scrollbar": "^4.0.2",
|
|
79
|
-
"tailwindcss": "^4.3.
|
|
80
|
-
"typescript": "
|
|
81
|
-
"typescript-eslint": "^8.
|
|
82
|
-
"vite": "
|
|
83
|
-
"vite-plugin-devtools-json": "^1.
|
|
84
|
-
"vitest": "^4.1.
|
|
85
|
-
"zod": "^4.4
|
|
78
|
+
"tailwindcss": "^4.3.3",
|
|
79
|
+
"typescript": "6",
|
|
80
|
+
"typescript-eslint": "^8.69.0",
|
|
81
|
+
"vite": "8.2.2",
|
|
82
|
+
"vite-plugin-devtools-json": "^1.1.0",
|
|
83
|
+
"vitest": "^4.1.11",
|
|
84
|
+
"zod": "^4.5.4"
|
|
86
85
|
},
|
|
87
86
|
"dependencies": {
|
|
87
|
+
"@dicebear/core": "^10.7.0",
|
|
88
|
+
"@dicebear/styles": "^10.6.0",
|
|
88
89
|
"@floating-ui/dom": "^1.8.0",
|
|
89
|
-
"@internationalized/date": "^3.12.
|
|
90
|
-
"@
|
|
91
|
-
"bits-ui": "^2.
|
|
90
|
+
"@internationalized/date": "^3.12.3",
|
|
91
|
+
"@material/material-color-utilities": "^0.4.0",
|
|
92
|
+
"bits-ui": "^2.19.0",
|
|
92
93
|
"clsx": "^2.1.1",
|
|
93
94
|
"mode-watcher": "^1.1.0",
|
|
94
|
-
"nanoid": "^
|
|
95
|
+
"nanoid": "^6.0.1",
|
|
95
96
|
"tailwind-merge": "^3.6.0",
|
|
96
|
-
"tailwind-variants": "^3.
|
|
97
|
+
"tailwind-variants": "^3.3.1"
|
|
97
98
|
}
|
|
98
99
|
}
|
package/bin/install-skill.js
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env node
|
|
2
|
-
import { cpSync, existsSync, mkdirSync } from 'node:fs';
|
|
3
|
-
import { dirname, join } from 'node:path';
|
|
4
|
-
import { fileURLToPath } from 'node:url';
|
|
5
|
-
|
|
6
|
-
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
7
|
-
const source = join(__dirname, '..', 'claude-skill', 'material-design');
|
|
8
|
-
const destDir = join(process.cwd(), '.claude', 'skills');
|
|
9
|
-
const dest = join(destDir, 'material-design');
|
|
10
|
-
const force = process.argv.includes('--force');
|
|
11
|
-
|
|
12
|
-
if (!existsSync(source)) {
|
|
13
|
-
console.error(
|
|
14
|
-
'Could not find the bundled material-design skill. Reinstall @noxlovette/material and try again.'
|
|
15
|
-
);
|
|
16
|
-
process.exit(1);
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
if (existsSync(dest) && !force) {
|
|
20
|
-
console.error(
|
|
21
|
-
`.claude/skills/material-design already exists. Re-run with --force to overwrite it.`
|
|
22
|
-
);
|
|
23
|
-
process.exit(1);
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
mkdirSync(destDir, { recursive: true });
|
|
27
|
-
cpSync(source, dest, { recursive: true, force: true });
|
|
28
|
-
|
|
29
|
-
console.log(`Installed the material-design Claude Code skill to .claude/skills/material-design`);
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
<!--
|
|
2
|
-
@component
|
|
3
|
-
A single button within a ButtonGroup.
|
|
4
|
-
Displays a leading check icon when selected, per M3 spec.
|
|
5
|
-
-->
|
|
6
|
-
<script lang="ts">
|
|
7
|
-
import { ToggleGroup } from 'bits-ui';
|
|
8
|
-
import clsx from 'clsx';
|
|
9
|
-
import { getContext } from 'svelte';
|
|
10
|
-
import { Icon, Layer } from '../../../utils/index.js';
|
|
11
|
-
import { buttonGroupItem } from './theme.js';
|
|
12
|
-
import type { ButtonGroupItemProps } from './types.js';
|
|
13
|
-
|
|
14
|
-
let {
|
|
15
|
-
value,
|
|
16
|
-
label,
|
|
17
|
-
iconProps,
|
|
18
|
-
disabled = false,
|
|
19
|
-
class: className
|
|
20
|
-
}: ButtonGroupItemProps = $props();
|
|
21
|
-
|
|
22
|
-
const buttonGroupCtx = getContext<{ orientation: 'horizontal' | 'vertical' } | undefined>(
|
|
23
|
-
'buttonGroup'
|
|
24
|
-
);
|
|
25
|
-
const orientation = $derived(buttonGroupCtx?.orientation ?? 'horizontal');
|
|
26
|
-
const { base, checkIcon, icon } = $derived(buttonGroupItem({ orientation }));
|
|
27
|
-
</script>
|
|
28
|
-
|
|
29
|
-
<ToggleGroup.Item {value} {disabled} class={base({ class: clsx(className) })}>
|
|
30
|
-
{#snippet children({ pressed })}
|
|
31
|
-
{#if pressed}
|
|
32
|
-
<Icon name="check" class={checkIcon()} />
|
|
33
|
-
{:else if iconProps}
|
|
34
|
-
<Icon {...iconProps} class={icon()} />
|
|
35
|
-
{/if}
|
|
36
|
-
{#if label}
|
|
37
|
-
<span>{label}</span>
|
|
38
|
-
{/if}
|
|
39
|
-
<Layer />
|
|
40
|
-
{/snippet}
|
|
41
|
-
</ToggleGroup.Item>
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import type { ButtonGroupItemProps } from './types.js';
|
|
2
|
-
/**
|
|
3
|
-
* A single button within a ButtonGroup.
|
|
4
|
-
* Displays a leading check icon when selected, per M3 spec.
|
|
5
|
-
*/
|
|
6
|
-
declare const ButtonGroupItem: import("svelte").Component<ButtonGroupItemProps, {}, "">;
|
|
7
|
-
type ButtonGroupItem = ReturnType<typeof ButtonGroupItem>;
|
|
8
|
-
export default ButtonGroupItem;
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
<!--
|
|
2
|
-
@component
|
|
3
|
-
A container for grouping buttons with shared borders and rounding.
|
|
4
|
-
Typically used for segmented controls or closely related actions.
|
|
5
|
-
-->
|
|
6
|
-
<script lang="ts">
|
|
7
|
-
import type { ConnectedButtonsProps } from './types.js';
|
|
8
|
-
|
|
9
|
-
let { children, ...rest }: ConnectedButtonsProps = $props();
|
|
10
|
-
</script>
|
|
11
|
-
|
|
12
|
-
<div class="grid auto-cols-fr grid-flow-col gap-0.5 overflow-hidden rounded-full" {...rest}>
|
|
13
|
-
{@render children()}
|
|
14
|
-
</div>
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import type { ConnectedButtonsProps } from './types.js';
|
|
2
|
-
/**
|
|
3
|
-
* A container for grouping buttons with shared borders and rounding.
|
|
4
|
-
* Typically used for segmented controls or closely related actions.
|
|
5
|
-
*/
|
|
6
|
-
declare const ConnectedButtons: import("svelte").Component<ConnectedButtonsProps, {}, "">;
|
|
7
|
-
type ConnectedButtons = ReturnType<typeof ConnectedButtons>;
|
|
8
|
-
export default ConnectedButtons;
|
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
<!--
|
|
2
|
-
@component
|
|
3
|
-
A single interactive row inside a `Menu`.
|
|
4
|
-
|
|
5
|
-
`MenuItem` is the leaf node of the menu system. It wraps bits-ui's
|
|
6
|
-
`DropdownMenu.Item` so each row automatically gets keyboard navigation,
|
|
7
|
-
focus management, and the ARIA `menuitem` role.
|
|
8
|
-
|
|
9
|
-
Pass `onclick` (or `onSelect`) for the action; use `iconProps` for a
|
|
10
|
-
leading icon and `helper` for a supporting line below the label.
|
|
11
|
-
|
|
12
|
-
Contrast with `Menu`, which is just the shell (open state + floating panel),
|
|
13
|
-
and `ContextMenu`, which owns its own item list and is right-click triggered.
|
|
14
|
-
|
|
15
|
-
@see https://m3.material.io/components/menus/guidelines
|
|
16
|
-
-->
|
|
17
|
-
<script lang="ts">
|
|
18
|
-
import type { MenuItemProps } from './types.js';
|
|
19
|
-
import Icon from '../../../utils/icon/Icon.svelte';
|
|
20
|
-
import Layer from '../../../utils/Layer.svelte';
|
|
21
|
-
import { DropdownMenu } from 'bits-ui';
|
|
22
|
-
import { tv } from 'tailwind-variants';
|
|
23
|
-
|
|
24
|
-
let {
|
|
25
|
-
iconProps,
|
|
26
|
-
disabled = false,
|
|
27
|
-
onclick,
|
|
28
|
-
onSelect,
|
|
29
|
-
selected,
|
|
30
|
-
helper,
|
|
31
|
-
children,
|
|
32
|
-
...restProps
|
|
33
|
-
}: MenuItemProps & Record<string, any> = $props();
|
|
34
|
-
|
|
35
|
-
// bits-ui fires onSelect at the Item level; avoid wiring onclick to the
|
|
36
|
-
// native button as well or it would fire twice on every click.
|
|
37
|
-
const handleSelect = $derived(onSelect ?? (onclick ? () => onclick() : undefined));
|
|
38
|
-
|
|
39
|
-
const itemClass = $derived(
|
|
40
|
-
tv({
|
|
41
|
-
base: 'relative flex w-full cursor-pointer items-start gap-3 border-none bg-transparent px-4 py-3 text-left md-sys-typescale-body-large whitespace-nowrap text-md-sys-color-on-surface hover:bg-md-sys-color-on-surface/8 focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-md-sys-color-primary disabled:cursor-not-allowed disabled:opacity-38',
|
|
42
|
-
variants: {
|
|
43
|
-
selected: {
|
|
44
|
-
true: 'bg-md-sys-color-secondary-container text-md-sys-color-on-secondary-container'
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
})({ selected })
|
|
48
|
-
);
|
|
49
|
-
</script>
|
|
50
|
-
|
|
51
|
-
<DropdownMenu.Item {disabled} onSelect={handleSelect}>
|
|
52
|
-
<button {...restProps} type="button" class={itemClass} {disabled}>
|
|
53
|
-
{#if iconProps}
|
|
54
|
-
<Icon class="text-md-sys-color-on-surface-variant size-6 text-[24px]" {...iconProps} />
|
|
55
|
-
{/if}
|
|
56
|
-
|
|
57
|
-
<div class="flex flex-1 flex-col gap-1">
|
|
58
|
-
<span class="md-sys-typescale-body-large text-md-sys-color-on-surface">
|
|
59
|
-
{@render children()}
|
|
60
|
-
</span>
|
|
61
|
-
{#if helper}
|
|
62
|
-
<span class="md-sys-typescale-body-medium text-md-sys-color-on-surface-variant">
|
|
63
|
-
{helper}
|
|
64
|
-
</span>
|
|
65
|
-
{/if}
|
|
66
|
-
</div>
|
|
67
|
-
|
|
68
|
-
{#if selected}
|
|
69
|
-
<Icon aria-hidden="true" name="check" />
|
|
70
|
-
{/if}
|
|
71
|
-
|
|
72
|
-
<Layer />
|
|
73
|
-
</button>
|
|
74
|
-
</DropdownMenu.Item>
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
<!--
|
|
2
|
-
@component
|
|
3
|
-
InputMerger is a container that groups multiple input components together visually.
|
|
4
|
-
-->
|
|
5
|
-
<script lang="ts">
|
|
6
|
-
import { inputMerger } from './theme.js';
|
|
7
|
-
|
|
8
|
-
interface Props {
|
|
9
|
-
/**
|
|
10
|
-
* The input components to be merged.
|
|
11
|
-
*/
|
|
12
|
-
children: import('svelte').Snippet;
|
|
13
|
-
/**
|
|
14
|
-
* Additional CSS classes for the container.
|
|
15
|
-
*/
|
|
16
|
-
class?: string;
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
let { children, class: className = '' }: Props = $props();
|
|
20
|
-
</script>
|
|
21
|
-
|
|
22
|
-
<div class={inputMerger({ class: className })}>
|
|
23
|
-
{@render children()}
|
|
24
|
-
</div>
|