@noxlovette/material 0.5.0 → 0.6.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/bin/material-claude-skill.js +31 -0
- package/claude-skill/material-design/SKILL.md +68 -0
- package/claude-skill/material-design/references/accessibility-checklist.md +29 -0
- package/claude-skill/material-design/references/component-patterns.md +55 -0
- package/claude-skill/material-design/references/motion-guide.md +163 -0
- package/claude-skill/material-design/references/tokens-and-styles.md +68 -0
- package/dist/animation/Shapes.stories.svelte +60 -0
- package/dist/animation/Shapes.stories.svelte.d.ts +3 -0
- package/dist/animation/TransitionPatterns.stories.svelte +32 -20
- package/dist/animation/containerTransform.d.ts +11 -0
- package/dist/animation/containerTransform.js +11 -0
- package/dist/animation/enterExit.d.ts +9 -0
- package/dist/animation/enterExit.js +6 -3
- package/dist/animation/index.d.ts +1 -0
- package/dist/animation/index.js +1 -0
- package/dist/animation/shapeMorph.svelte.d.ts +52 -0
- package/dist/animation/shapeMorph.svelte.js +112 -0
- package/dist/animation/shapesAnimatableSmall.d.ts +28 -22
- package/dist/animation/shapesAnimatableSmall.js +32 -23
- package/dist/animation/sharedAxisTransition.d.ts +22 -0
- package/dist/animation/sharedAxisTransition.js +25 -1
- package/dist/animation/skeleton.d.ts +6 -1
- package/dist/animation/skeleton.js +6 -1
- package/dist/components/badge/Badge.mdx +70 -0
- package/dist/components/badge/Badge.stories.svelte +38 -20
- package/dist/components/badge/Badge.svelte +12 -5
- package/dist/components/badge/theme.d.ts +30 -7
- package/dist/components/badge/theme.js +24 -4
- package/dist/components/badge/types.d.ts +18 -4
- package/dist/components/buttons/Button.mdx +85 -0
- package/dist/components/buttons/Button.stories.svelte +62 -27
- package/dist/components/buttons/Button.svelte +29 -25
- package/dist/components/buttons/Button.svelte.d.ts +11 -9
- package/dist/components/buttons/ButtonIcon.mdx +52 -0
- package/dist/components/buttons/ButtonIcon.stories.svelte +72 -48
- package/dist/components/buttons/ButtonIcon.svelte +58 -36
- package/dist/components/buttons/ButtonIcon.svelte.d.ts +9 -7
- package/dist/components/buttons/FAB.mdx +84 -0
- package/dist/components/buttons/FAB.stories.svelte +103 -24
- package/dist/components/buttons/FAB.stories.svelte.d.ts +2 -17
- package/dist/components/buttons/FAB.svelte +353 -29
- package/dist/components/buttons/FAB.svelte.d.ts +11 -6
- package/dist/components/buttons/FABMenu.svelte +27 -8
- package/dist/components/buttons/FABMenu.svelte.d.ts +7 -3
- package/dist/components/buttons/FABMenuItem.svelte +20 -16
- package/dist/components/buttons/FABMenuItem.svelte.d.ts +3 -3
- package/dist/components/buttons/Toggle.stories.svelte +31 -23
- package/dist/components/buttons/Toggle.stories.svelte.d.ts +2 -17
- package/dist/components/buttons/Toggle.svelte +28 -25
- package/dist/components/buttons/Toggle.svelte.d.ts +5 -5
- package/dist/components/buttons/button-group/ButtonGroup.mdx +39 -0
- package/dist/components/buttons/button-group/ButtonGroup.stories.svelte +62 -43
- package/dist/components/buttons/button-group/ButtonGroup.stories.svelte.d.ts +2 -17
- package/dist/components/buttons/button-group/ButtonGroup.svelte +102 -8
- package/dist/components/buttons/button-group/ButtonGroup.svelte.d.ts +6 -7
- package/dist/components/buttons/button-group/theme.d.ts +45 -15
- package/dist/components/buttons/button-group/theme.js +13 -8
- package/dist/components/buttons/button-group/types.d.ts +13 -7
- package/dist/components/buttons/connected/ConnectedButtonGroup.mdx +43 -0
- package/dist/components/buttons/connected/ConnectedButtonGroup.stories.svelte +56 -74
- package/dist/components/buttons/connected/ConnectedButtonGroup.stories.svelte.d.ts +2 -17
- package/dist/components/buttons/connected/ConnectedButtonGroup.svelte +16 -4
- package/dist/components/buttons/connected/ConnectedButtonGroup.svelte.d.ts +4 -4
- package/dist/components/buttons/connected/ConnectedButtonGroupItem.svelte +35 -8
- package/dist/components/buttons/connected/ConnectedButtonGroupItem.svelte.d.ts +2 -3
- package/dist/components/buttons/connected/theme.d.ts +33 -18
- package/dist/components/buttons/connected/theme.js +32 -9
- package/dist/components/buttons/connected/types.d.ts +36 -9
- package/dist/components/buttons/shapeMorph.d.ts +26 -0
- package/dist/components/buttons/shapeMorph.js +142 -0
- package/dist/components/buttons/split-button/SplitButton.mdx +48 -0
- package/dist/components/buttons/split-button/SplitButton.stories.svelte +9 -14
- package/dist/components/buttons/split-button/SplitButton.svelte +65 -48
- package/dist/components/buttons/split-button/SplitButton.svelte.d.ts +6 -11
- package/dist/components/buttons/split-button/theme.d.ts +110 -17
- package/dist/components/buttons/split-button/theme.js +74 -16
- package/dist/components/buttons/split-button/types.d.ts +24 -18
- package/dist/components/buttons/theme.d.ts +422 -230
- package/dist/components/buttons/theme.js +286 -380
- package/dist/components/buttons/types.d.ts +130 -125
- package/dist/components/cards/Card.mdx +44 -0
- package/dist/components/cards/Card.stories.svelte +11 -11
- package/dist/components/cards/theme.js +5 -5
- package/dist/components/chips/Chip.mdx +68 -0
- package/dist/components/chips/Chip.stories.svelte +4 -4
- package/dist/components/chips/theme.js +3 -3
- package/dist/components/containers/action-rail/ActionRail.stories.svelte +1 -0
- package/dist/components/containers/action-rail/theme.js +1 -1
- package/dist/components/containers/bottom-sheet/BottomSheet.mdx +64 -0
- package/dist/components/containers/bottom-sheet/BottomSheet.stories.svelte +108 -12
- package/dist/components/containers/bottom-sheet/BottomSheet.svelte +179 -109
- package/dist/components/containers/bottom-sheet/BottomSheet.svelte.d.ts +10 -5
- package/dist/components/containers/bottom-sheet/index.d.ts +1 -0
- package/dist/components/containers/bottom-sheet/index.js +1 -0
- package/dist/components/containers/bottom-sheet/theme.d.ts +45 -0
- package/dist/components/containers/bottom-sheet/theme.js +42 -0
- package/dist/components/containers/bottom-sheet/types.d.ts +37 -5
- package/dist/components/containers/carousel/Carousel.mdx +80 -0
- package/dist/components/containers/carousel/Carousel.stories.svelte +131 -0
- package/dist/components/containers/carousel/Carousel.stories.svelte.d.ts +4 -0
- package/dist/components/containers/carousel/Carousel.svelte +194 -0
- package/dist/components/containers/carousel/Carousel.svelte.d.ts +25 -0
- package/dist/components/containers/carousel/index.d.ts +3 -0
- package/dist/components/containers/{stack → carousel}/index.js +1 -2
- package/dist/components/containers/carousel/keylines.d.ts +32 -0
- package/dist/components/containers/carousel/keylines.js +88 -0
- package/dist/components/containers/carousel/theme.d.ts +162 -0
- package/dist/components/containers/carousel/theme.js +67 -0
- package/dist/components/containers/carousel/types.d.ts +52 -0
- package/dist/components/containers/context-menu/ContextMenu.stories.svelte +1 -0
- package/dist/components/containers/context-menu/ContextMenu.svelte +2 -2
- package/dist/components/containers/context-menu/ContextMenu.svelte.d.ts +1 -1
- package/dist/components/containers/context-menu/theme.js +10 -10
- package/dist/components/containers/dialogue/Dialogue.mdx +65 -0
- package/dist/components/containers/dialogue/Dialogue.stories.svelte +4 -4
- package/dist/components/containers/dialogue/Dialogue.svelte +1 -1
- package/dist/components/containers/dialogue/theme.js +3 -3
- package/dist/components/containers/divider/Divider.stories.svelte +2 -1
- package/dist/components/containers/divider/Divider.svelte +2 -2
- package/dist/components/containers/divider/theme.d.ts +6 -6
- package/dist/components/containers/divider/theme.js +2 -2
- package/dist/components/containers/index.d.ts +1 -1
- package/dist/components/containers/index.js +1 -1
- package/dist/components/containers/link-preview/theme.js +2 -2
- package/dist/components/containers/list/List.svelte +18 -0
- package/dist/components/containers/list/List.svelte.d.ts +4 -0
- package/dist/components/containers/list/ListItem.mdx +100 -0
- package/dist/components/containers/list/ListItem.stories.svelte +177 -42
- package/dist/components/containers/list/ListItem.stories.svelte.d.ts +2 -17
- package/dist/components/containers/list/ListItem.svelte +92 -37
- package/dist/components/containers/list/ListItem.svelte.d.ts +1 -1
- package/dist/components/containers/list/context.d.ts +6 -0
- package/dist/components/containers/list/context.js +4 -0
- package/dist/components/containers/list/index.d.ts +1 -0
- package/dist/components/containers/list/index.js +1 -0
- package/dist/components/containers/list/theme.d.ts +487 -12
- package/dist/components/containers/list/theme.js +140 -13
- package/dist/components/containers/list/types.d.ts +39 -5
- package/dist/components/containers/menu/Menu.mdx +52 -0
- package/dist/components/containers/menu/Menu.stories.svelte +14 -14
- package/dist/components/containers/menu/Menu.svelte +1 -1
- package/dist/components/containers/menu/MenuGroup.svelte +1 -1
- package/dist/components/containers/menu/MenuGroup.svelte.d.ts +1 -1
- package/dist/components/containers/menu/menu-item/MenuItem.svelte +1 -1
- package/dist/components/containers/menu/theme.js +8 -8
- package/dist/components/containers/pane/DraggablePane.stories.svelte +4 -3
- package/dist/components/containers/pane/DraggablePane.svelte +2 -2
- package/dist/components/containers/pane/Pane.stories.svelte +11 -10
- package/dist/components/containers/pane/Pane.svelte +24 -2
- package/dist/components/containers/pane/PaneGrid.stories.svelte +19 -18
- package/dist/components/containers/pane/PaneGrid.svelte +3 -2
- package/dist/components/containers/pane/PaneGrid.svelte.d.ts +2 -1
- package/dist/components/containers/pane/PaneHandle.svelte +48 -2
- package/dist/components/containers/pane/PaneHandle.svelte.d.ts +4 -0
- package/dist/components/containers/pane/resizeStore.svelte.d.ts +10 -1
- package/dist/components/containers/pane/resizeStore.svelte.js +13 -2
- package/dist/components/containers/pane/theme.js +129 -45
- package/dist/components/containers/pane/types.d.ts +3 -2
- package/dist/components/containers/popover/Popover.mdx +45 -0
- package/dist/components/containers/popover/Popover.stories.svelte +1 -1
- package/dist/components/containers/popover/Popover.svelte +1 -1
- package/dist/components/containers/popover/theme.js +3 -3
- package/dist/components/containers/scroll-area/theme.js +2 -2
- package/dist/components/containers/side-sheet/SideSheet.mdx +71 -0
- package/dist/components/containers/side-sheet/SideSheet.stories.svelte +113 -17
- package/dist/components/containers/side-sheet/SideSheet.svelte +113 -66
- package/dist/components/containers/side-sheet/SideSheet.svelte.d.ts +8 -7
- package/dist/components/containers/side-sheet/index.d.ts +1 -0
- package/dist/components/containers/side-sheet/index.js +1 -0
- package/dist/components/containers/side-sheet/theme.d.ts +108 -0
- package/dist/components/containers/side-sheet/theme.js +72 -0
- package/dist/components/containers/side-sheet/types.d.ts +35 -7
- package/dist/components/date/DateField.stories.svelte +4 -3
- package/dist/components/date/DateField.svelte +49 -26
- package/dist/components/date/DateField.svelte.d.ts +2 -0
- package/dist/components/date/DateRangeField.stories.svelte +4 -3
- package/dist/components/date/DateRangeField.svelte +54 -31
- package/dist/components/date/DateRangeField.svelte.d.ts +2 -0
- package/dist/components/date/calendarMotion.d.ts +9 -0
- package/dist/components/date/calendarMotion.js +23 -0
- package/dist/components/date/theme.d.ts +7 -7
- package/dist/components/date/theme.js +34 -30
- package/dist/components/forms/checkbox/Checkbox.mdx +35 -0
- package/dist/components/forms/checkbox/Checkbox.stories.svelte +2 -2
- package/dist/components/forms/checkbox/Checkbox.svelte +1 -1
- package/dist/components/forms/checkbox/theme.js +3 -3
- package/dist/components/forms/command/Command.stories.svelte +1 -0
- package/dist/components/forms/command/theme.js +9 -9
- package/dist/components/forms/pin/theme.js +4 -4
- package/dist/components/forms/radio-group/RadioGroup.svelte +1 -1
- package/dist/components/forms/radio-group/theme.js +5 -5
- package/dist/components/forms/search/Search.mdx +38 -0
- package/dist/components/forms/search/Search.stories.svelte +19 -9
- package/dist/components/forms/search/Search.svelte +40 -17
- package/dist/components/forms/search/Search.svelte.d.ts +2 -2
- package/dist/components/forms/search/theme.d.ts +45 -12
- package/dist/components/forms/search/theme.js +13 -8
- package/dist/components/forms/search/types.d.ts +18 -12
- package/dist/components/forms/select/Select.mdx +53 -0
- package/dist/components/forms/select/Select.stories.svelte +4 -4
- package/dist/components/forms/select/Select.svelte +10 -2
- package/dist/components/forms/select/SelectItem.svelte +1 -1
- package/dist/components/forms/select/theme.js +12 -12
- package/dist/components/forms/slider/Slider.mdx +85 -0
- package/dist/components/forms/slider/Slider.stories.svelte +7 -7
- package/dist/components/forms/slider/Slider.svelte +46 -28
- package/dist/components/forms/slider/theme.d.ts +14 -0
- package/dist/components/forms/slider/theme.js +28 -17
- package/dist/components/forms/slider/types.d.ts +3 -2
- package/dist/components/forms/switch/Switch.mdx +38 -0
- package/dist/components/forms/switch/Switch.stories.svelte +3 -3
- package/dist/components/forms/switch/theme.js +6 -6
- package/dist/components/forms/textfield/Textfield.mdx +53 -0
- package/dist/components/forms/textfield/Textfield.stories.svelte +6 -6
- package/dist/components/forms/textfield/Textfield.svelte +1 -0
- package/dist/components/forms/textfield/theme.d.ts +3 -0
- package/dist/components/forms/textfield/theme.js +22 -19
- package/dist/components/forms/toggle-group/theme.js +2 -2
- package/dist/components/forms/tooltip/Tooltip.stories.svelte +1 -0
- package/dist/components/forms/tooltip/theme.js +3 -3
- package/dist/components/misc/Avatar.stories.svelte +5 -4
- package/dist/components/misc/ThemeSettings.svelte +9 -9
- package/dist/components/misc/ThemeSwitcher.svelte +3 -3
- package/dist/components/misc/theme.js +4 -4
- package/dist/components/nav/appbar/AppBar.mdx +71 -0
- package/dist/components/nav/appbar/AppBar.stories.svelte +93 -3
- package/dist/components/nav/appbar/AppBar.stories.svelte.d.ts +2 -17
- package/dist/components/nav/appbar/AppBar.svelte +90 -37
- package/dist/components/nav/appbar/AppBar.svelte.d.ts +9 -2
- package/dist/components/nav/appbar/theme.d.ts +85 -18
- package/dist/components/nav/appbar/theme.js +159 -23
- package/dist/components/nav/appbar/types.d.ts +46 -9
- package/dist/components/nav/breadcrumb/Breadcrumb.stories.svelte +1 -0
- package/dist/components/nav/breadcrumb/theme.js +5 -5
- package/dist/components/nav/navbar/Navbar.mdx +38 -0
- package/dist/components/nav/navbar/Navbar.svelte +1 -1
- package/dist/components/nav/navbar/NavbarItem.svelte +12 -9
- package/dist/components/nav/navbar/theme.js +6 -6
- package/dist/components/nav/rail/Rail.mdx +73 -0
- package/dist/components/nav/rail/Rail.stories.svelte +3 -7
- package/dist/components/nav/rail/Rail.svelte +1 -0
- package/dist/components/nav/rail/RailItem.svelte +12 -9
- package/dist/components/nav/rail/theme.js +13 -13
- package/dist/components/nav/rail/types.d.ts +4 -1
- package/dist/components/nav/tabs/TabHolder.svelte +29 -3
- package/dist/components/nav/tabs/TabHolder.svelte.d.ts +3 -1
- package/dist/components/nav/tabs/Tabs.mdx +62 -0
- package/dist/components/nav/tabs/Tabs.stories.svelte +1 -1
- package/dist/components/nav/tabs/theme.js +4 -4
- package/dist/components/pill/Pill.mdx +32 -0
- package/dist/components/pill/Pill.stories.svelte +1 -1
- package/dist/components/pill/theme.d.ts +1 -1
- package/dist/components/pill/theme.js +1 -1
- package/dist/components/progress/LinearProgress.svelte +1 -1
- package/dist/components/progress/Progress.mdx +50 -0
- package/dist/components/progress/Progress.stories.svelte +6 -6
- package/dist/components/snackbar/Snackbar.mdx +52 -0
- package/dist/components/snackbar/Snackbar.stories.svelte +5 -5
- package/dist/components/snackbar/Snackbar.svelte +1 -1
- package/dist/components/snackbar/theme.d.ts +3 -3
- package/dist/components/snackbar/theme.js +4 -4
- package/dist/components/table/Table.stories.svelte +1 -0
- package/dist/components/table/TableHeader.svelte +1 -1
- package/dist/components/table/theme.js +3 -3
- package/dist/components/time/TimeField.stories.svelte +3 -2
- package/dist/components/time/TimeField.svelte +14 -8
- package/dist/components/time/TimeField.svelte.d.ts +6 -0
- package/dist/components/time/TimepickerInput.svelte +9 -5
- package/dist/components/time/theme.js +5 -5
- package/dist/components/time/types.d.ts +11 -1
- package/dist/components/toolbar/Toolbar.stories.svelte +1 -0
- package/dist/components/toolbar/Toolbar.svelte +1 -1
- package/dist/components/toolbar/Toolbar.svelte.d.ts +1 -1
- package/dist/components/toolbar/theme.js +14 -14
- package/dist/components/typography/Typography.mdx +67 -0
- package/dist/components/typography/body/Body.stories.svelte +2 -1
- package/dist/components/typography/body/theme.d.ts +15 -12
- package/dist/components/typography/body/theme.js +19 -4
- package/dist/components/typography/body/types.d.ts +2 -1
- package/dist/components/typography/display/Display.stories.svelte +2 -1
- package/dist/components/typography/display/theme.d.ts +15 -12
- package/dist/components/typography/display/theme.js +19 -4
- package/dist/components/typography/display/types.d.ts +2 -1
- package/dist/components/typography/headline/Headline.stories.svelte +2 -1
- package/dist/components/typography/headline/theme.d.ts +15 -12
- package/dist/components/typography/headline/theme.js +19 -4
- package/dist/components/typography/headline/types.d.ts +2 -1
- package/dist/components/typography/kbd/Kbd.stories.svelte +2 -1
- package/dist/components/typography/kbd/theme.d.ts +4 -4
- package/dist/components/typography/kbd/theme.js +2 -2
- package/dist/components/typography/label/Label.stories.svelte +2 -1
- package/dist/components/typography/label/theme.d.ts +15 -12
- package/dist/components/typography/label/theme.js +19 -4
- package/dist/components/typography/label/types.d.ts +2 -1
- package/dist/components/typography/title/Title.stories.svelte +2 -1
- package/dist/components/typography/title/theme.d.ts +15 -12
- package/dist/components/typography/title/theme.js +19 -4
- package/dist/components/typography/title/types.d.ts +2 -1
- package/dist/index.css +1 -0
- package/dist/styles/component.css +78 -175
- package/dist/styles/elevation.css +9 -0
- package/dist/styles/spacing.css +29 -0
- package/dist/styles/typescale.css +635 -20
- package/dist/utils/Layer.svelte +1 -1
- package/dist/utils/icon/Icon.svelte +8 -6
- package/dist/utils/icon/loadingShapes.js +11 -10
- package/package.json +19 -15
- package/dist/components/containers/stack/HStack.svelte +0 -23
- package/dist/components/containers/stack/HStack.svelte.d.ts +0 -5
- package/dist/components/containers/stack/VStack.svelte +0 -23
- package/dist/components/containers/stack/VStack.svelte.d.ts +0 -5
- package/dist/components/containers/stack/index.d.ts +0 -4
- package/dist/components/containers/stack/theme.d.ts +0 -66
- package/dist/components/containers/stack/theme.js +0 -26
- package/dist/components/containers/stack/types.d.ts +0 -12
- /package/dist/components/containers/{stack → carousel}/types.js +0 -0
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { tv } from 'tailwind-variants';
|
|
2
2
|
/**
|
|
3
3
|
* M3 Expressive slider: an active and an inactive track separated from a bar handle by a 6dp gap.
|
|
4
|
+
* Per-size tokens (track / handle / outer corner / inset icon): XS 16/44/8/–, S 24/44/8/–,
|
|
5
|
+
* M 40/52/12/24, L 56/68/16/24, XL 96/108/28/32. The value indicator sits 12dp above the handle.
|
|
4
6
|
* Track/handle positions are set inline by `Slider.svelte` from one animated value; these slots
|
|
5
7
|
* only carry size, shape and color.
|
|
6
8
|
*
|
|
@@ -12,22 +14,22 @@ export const slider = tv({
|
|
|
12
14
|
track: 'pointer-events-none absolute',
|
|
13
15
|
activeTrack: 'bg-md-sys-color-primary group-data-[disabled]:bg-md-sys-color-on-surface/38',
|
|
14
16
|
inactiveTrack: 'bg-md-sys-color-secondary-container group-data-[disabled]:bg-md-sys-color-on-surface/12',
|
|
15
|
-
stop: 'pointer-events-none absolute size-
|
|
17
|
+
stop: 'pointer-events-none absolute size-spacing-50 rounded-full',
|
|
16
18
|
stopOnActive: 'bg-md-sys-color-on-primary group-data-[disabled]:bg-md-sys-color-inverse-on-surface',
|
|
17
19
|
stopOnInactive: 'bg-md-sys-color-on-secondary-container group-data-[disabled]:bg-md-sys-color-on-surface/38',
|
|
18
|
-
icon: 'pointer-events-none absolute',
|
|
20
|
+
icon: 'pointer-events-none absolute flex',
|
|
21
|
+
iconGlyph: '',
|
|
19
22
|
iconOnActive: 'text-md-sys-color-on-primary',
|
|
20
23
|
iconOnInactive: 'text-md-sys-color-on-secondary-container',
|
|
21
24
|
handle: `
|
|
22
25
|
absolute rounded-full bg-md-sys-color-primary outline-none
|
|
23
|
-
transition-[width,height] md-sys-motion-fast-spatial
|
|
24
26
|
focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-md-sys-color-secondary
|
|
25
27
|
group-data-[disabled]:bg-md-sys-color-on-surface/38
|
|
26
28
|
`,
|
|
27
29
|
value: `
|
|
28
|
-
pointer-events-none absolute z-10 flex min-w-
|
|
29
|
-
bg-md-sys-color-inverse-surface px-
|
|
30
|
-
md-sys-typescale-
|
|
30
|
+
pointer-events-none absolute z-10 flex min-w-spacing-600 items-center justify-center rounded-full
|
|
31
|
+
bg-md-sys-color-inverse-surface px-spacing-200 py-spacing-150
|
|
32
|
+
md-sys-typescale-body-medium tracking-[0.5px] text-md-sys-color-inverse-on-surface
|
|
31
33
|
opacity-0 transition-opacity md-sys-motion-effects
|
|
32
34
|
group-has-[[data-slider-thumb]:focus-visible]:opacity-100
|
|
33
35
|
`
|
|
@@ -36,30 +38,39 @@ export const slider = tv({
|
|
|
36
38
|
size: {
|
|
37
39
|
xs: { root: '[--track:1rem] [--handle:2.75rem] [--outer:var(--radius-sm)]' },
|
|
38
40
|
s: { root: '[--track:1.5rem] [--handle:2.75rem] [--outer:var(--radius-sm)]' },
|
|
39
|
-
m: {
|
|
40
|
-
|
|
41
|
-
|
|
41
|
+
m: {
|
|
42
|
+
root: '[--track:2.5rem] [--handle:3.25rem] [--outer:var(--radius-md)]',
|
|
43
|
+
iconGlyph: 'size-spacing-300 text-[24px]'
|
|
44
|
+
},
|
|
45
|
+
l: {
|
|
46
|
+
root: '[--track:3.5rem] [--handle:4.25rem] [--outer:var(--radius-lg)]',
|
|
47
|
+
iconGlyph: 'size-spacing-300 text-[24px]'
|
|
48
|
+
},
|
|
49
|
+
xl: {
|
|
50
|
+
root: '[--track:6rem] [--handle:6.75rem] [--outer:var(--radius-xl)]',
|
|
51
|
+
iconGlyph: 'size-spacing-400 text-[32px]'
|
|
52
|
+
}
|
|
42
53
|
},
|
|
43
54
|
vertical: {
|
|
44
55
|
false: {
|
|
45
56
|
root: 'h-[var(--handle)] w-full min-w-40',
|
|
46
57
|
track: 'top-1/2 h-[var(--track)] -translate-y-1/2',
|
|
47
|
-
activeTrack: 'left-0 rounded-l-[var(--outer)] rounded-r-[2px]',
|
|
48
|
-
inactiveTrack: 'right-0 rounded-l-[2px] rounded-r-[var(--outer)]',
|
|
58
|
+
activeTrack: 'left-spacing-0 rounded-l-[var(--outer)] rounded-r-[2px]',
|
|
59
|
+
inactiveTrack: 'right-spacing-0 rounded-l-[2px] rounded-r-[var(--outer)]',
|
|
49
60
|
stop: 'top-1/2 -translate-x-1/2 -translate-y-1/2',
|
|
50
61
|
icon: 'top-1/2 -translate-y-1/2',
|
|
51
|
-
handle: 'top-0 h-full
|
|
52
|
-
value: 'bottom-[calc(100%+
|
|
62
|
+
handle: 'top-spacing-0 h-full -translate-x-1/2',
|
|
63
|
+
value: 'bottom-[calc(100%+12px)] -translate-x-1/2'
|
|
53
64
|
},
|
|
54
65
|
true: {
|
|
55
66
|
root: 'h-full min-h-40 w-[var(--handle)]',
|
|
56
67
|
track: 'left-1/2 w-[var(--track)] -translate-x-1/2',
|
|
57
|
-
activeTrack: 'bottom-0 rounded-t-[2px] rounded-b-[var(--outer)]',
|
|
58
|
-
inactiveTrack: 'top-0 rounded-t-[var(--outer)] rounded-b-[2px]',
|
|
68
|
+
activeTrack: 'bottom-spacing-0 rounded-t-[2px] rounded-b-[var(--outer)]',
|
|
69
|
+
inactiveTrack: 'top-spacing-0 rounded-t-[var(--outer)] rounded-b-[2px]',
|
|
59
70
|
stop: 'left-1/2 -translate-x-1/2 translate-y-1/2',
|
|
60
71
|
icon: 'left-1/2 -translate-x-1/2',
|
|
61
|
-
handle: 'left-0
|
|
62
|
-
value: 'left-[calc(100%+
|
|
72
|
+
handle: 'left-spacing-0 w-full translate-y-1/2',
|
|
73
|
+
value: 'left-[calc(100%+12px)] translate-y-1/2'
|
|
63
74
|
}
|
|
64
75
|
},
|
|
65
76
|
active: {
|
|
@@ -30,11 +30,12 @@ export type SliderProps = Omit<SliderVariants, 'active'> & Omit<HTMLAttributes<H
|
|
|
30
30
|
*/
|
|
31
31
|
showValue?: boolean;
|
|
32
32
|
/**
|
|
33
|
-
* Props for the leading icon.
|
|
33
|
+
* Props for the leading inset icon. M3 only defines inset icons for sizes `m`, `l` and `xl`
|
|
34
|
+
* (24dp, or 32dp on XL); it is ignored on `xs` and `s`.
|
|
34
35
|
*/
|
|
35
36
|
leadingIconProps?: IconProps;
|
|
36
37
|
/**
|
|
37
|
-
* Props for the trailing icon.
|
|
38
|
+
* Props for the trailing inset icon. Only rendered on sizes `m`, `l` and `xl`.
|
|
38
39
|
*/
|
|
39
40
|
trailingIconProps?: IconProps;
|
|
40
41
|
/**
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { Meta, Title, Subtitle, Canvas, Controls } from '@storybook/addon-docs/blocks';
|
|
2
|
+
import * as SwitchStories from './Switch.stories.svelte';
|
|
3
|
+
|
|
4
|
+
<Meta of={SwitchStories} />
|
|
5
|
+
|
|
6
|
+
<Title />
|
|
7
|
+
|
|
8
|
+
<Subtitle>Switches toggle a single setting on or off.</Subtitle>
|
|
9
|
+
|
|
10
|
+
[M3 spec](https://m3.material.io/components/switch/specs) ·
|
|
11
|
+
`import { Switch } from '@noxlovette/material';`
|
|
12
|
+
|
|
13
|
+
<Canvas of={SwitchStories.Playground} />
|
|
14
|
+
|
|
15
|
+
<Controls of={SwitchStories.Playground} />
|
|
16
|
+
|
|
17
|
+
## Icons
|
|
18
|
+
|
|
19
|
+
`icons` controls the thumb icon: `checked` (the default) shows a check only when on, `both`
|
|
20
|
+
shows a check when on and a close icon when off, and `none` shows a plain thumb. Showing icons
|
|
21
|
+
gives a signal that doesn't depend on color alone.
|
|
22
|
+
|
|
23
|
+
<Canvas of={SwitchStories.IconModes} />
|
|
24
|
+
|
|
25
|
+
## Dragging
|
|
26
|
+
|
|
27
|
+
Besides click and tap, the thumb can be dragged: moving it more than 16px toward the other side
|
|
28
|
+
flips the state, like a native mobile switch.
|
|
29
|
+
|
|
30
|
+
```svelte
|
|
31
|
+
<Switch bind:checked={notifications} />
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Accessibility
|
|
35
|
+
|
|
36
|
+
- **Role.** The control is a `role="switch"` from bits-ui; Space and Enter toggle it.
|
|
37
|
+
- **Label.** The switch has no built-in label. Wrap it in a `<label>` with visible text, or give
|
|
38
|
+
it an `aria-label`.
|
|
@@ -23,14 +23,14 @@
|
|
|
23
23
|
|
|
24
24
|
<Story name="Playground">
|
|
25
25
|
{#snippet template(args)}
|
|
26
|
-
<div class="p-
|
|
26
|
+
<div class="p-spacing-300">
|
|
27
27
|
<Switch {...args} />
|
|
28
28
|
</div>
|
|
29
29
|
{/snippet}
|
|
30
30
|
</Story>
|
|
31
31
|
|
|
32
32
|
<Story name="Icon Modes" asChild>
|
|
33
|
-
<div class="flex flex-col
|
|
33
|
+
<div class="gap-spacing-200 p-spacing-300 flex flex-col">
|
|
34
34
|
<Switch checked icons="checked" />
|
|
35
35
|
<Switch checked icons="both" />
|
|
36
36
|
<Switch checked icons="none" />
|
|
@@ -38,7 +38,7 @@
|
|
|
38
38
|
</Story>
|
|
39
39
|
|
|
40
40
|
<Story name="States" asChild>
|
|
41
|
-
<div class="flex flex-col
|
|
41
|
+
<div class="gap-spacing-200 p-spacing-300 flex flex-col">
|
|
42
42
|
<Switch checked={false} />
|
|
43
43
|
<Switch checked={true} />
|
|
44
44
|
<Switch checked={false} disabled />
|
|
@@ -5,10 +5,10 @@ import { tv } from 'tailwind-variants';
|
|
|
5
5
|
// Hover — 40dp state layer ring around thumb
|
|
6
6
|
export const toggle = tv({
|
|
7
7
|
slots: {
|
|
8
|
-
root: 'group relative inline-flex h-
|
|
8
|
+
root: 'group relative inline-flex h-spacing-400 w-[3.25rem] shrink-0 [print-color-adjust:exact]',
|
|
9
9
|
// The input IS the track — styled as the pill background
|
|
10
10
|
input: [
|
|
11
|
-
'absolute inset-0 m-0 h-full w-full appearance-none rounded-full',
|
|
11
|
+
'absolute inset-spacing-0 m-spacing-0 h-full w-full appearance-none rounded-full',
|
|
12
12
|
'border-2 border-md-sys-color-outline bg-md-sys-color-surface-container-highest',
|
|
13
13
|
'group-data-[state=checked]:border-md-sys-color-primary group-data-[state=checked]:bg-md-sys-color-primary',
|
|
14
14
|
'group-data-[disabled]:cursor-not-allowed',
|
|
@@ -18,7 +18,7 @@ export const toggle = tv({
|
|
|
18
18
|
].join(' '),
|
|
19
19
|
// Thumb — absolute over track
|
|
20
20
|
handle: [
|
|
21
|
-
'pointer-events-none absolute left-
|
|
21
|
+
'pointer-events-none absolute left-spacing-100 top-1/2 flex h-spacing-200 w-spacing-200 -translate-y-1/2',
|
|
22
22
|
'items-center justify-center rounded-full relative',
|
|
23
23
|
'bg-md-sys-color-outline',
|
|
24
24
|
'transition-[left,transform,background-color] md-sys-motion-fast-spatial',
|
|
@@ -36,17 +36,17 @@ export const toggle = tv({
|
|
|
36
36
|
].join(' '),
|
|
37
37
|
// State layer ring around thumb
|
|
38
38
|
hover: [
|
|
39
|
-
'pointer-events-none absolute left-
|
|
39
|
+
'pointer-events-none absolute left-spacing-200 top-1/2 h-spacing-600 w-spacing-600',
|
|
40
40
|
'-translate-x-1/2 -translate-y-1/2 rounded-full',
|
|
41
41
|
'transition-[left,background-color] md-sys-motion-fast-spatial',
|
|
42
|
-
'group-data-[state=checked]:left-
|
|
42
|
+
'group-data-[state=checked]:left-spacing-450',
|
|
43
43
|
'group-data-[disabled]:hidden',
|
|
44
44
|
'group-hover:bg-md-sys-color-on-surface/8',
|
|
45
45
|
'group-data-[state=checked]:group-hover:bg-md-sys-color-primary/8'
|
|
46
46
|
].join(' '),
|
|
47
47
|
// Icon inside thumb - shared base (sized via size="xs" prop on Icon, not here)
|
|
48
48
|
icon: [
|
|
49
|
-
'absolute inset-0 m-auto pointer-events-none flex items-center justify-center',
|
|
49
|
+
'absolute inset-spacing-0 m-auto pointer-events-none flex items-center justify-center',
|
|
50
50
|
'opacity-0 transition-opacity md-sys-motion-fast-effects shrink-0'
|
|
51
51
|
].join(' '),
|
|
52
52
|
// Specific icon states - colour matches M3 spec for each thumb background
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { Meta, Title, Subtitle, Canvas, Controls } from '@storybook/addon-docs/blocks';
|
|
2
|
+
import * as TextfieldStories from './Textfield.stories.svelte';
|
|
3
|
+
|
|
4
|
+
<Meta of={TextfieldStories} />
|
|
5
|
+
|
|
6
|
+
<Title />
|
|
7
|
+
|
|
8
|
+
<Subtitle>Text fields let users enter and edit text.</Subtitle>
|
|
9
|
+
|
|
10
|
+
[M3 spec](https://m3.material.io/components/text-fields/specs) ·
|
|
11
|
+
`import { Textfield } from '@noxlovette/material';`
|
|
12
|
+
|
|
13
|
+
<Canvas of={TextfieldStories.Playground} />
|
|
14
|
+
|
|
15
|
+
<Controls of={TextfieldStories.Playground} />
|
|
16
|
+
|
|
17
|
+
## Outlined or filled
|
|
18
|
+
|
|
19
|
+
`variant` defaults to `outlined`: a bordered field whose floating label opens a gap in the border.
|
|
20
|
+
`filled` has a container and a bottom indicator line, and carries more emphasis. Use outlined in
|
|
21
|
+
busy surroundings (over an image, in dense forms) or next to a filled field that should stand
|
|
22
|
+
out.
|
|
23
|
+
|
|
24
|
+
<Canvas of={TextfieldStories.Outlined} />
|
|
25
|
+
|
|
26
|
+
The `label` starts inside the field and floats up on focus or once there's a value.
|
|
27
|
+
|
|
28
|
+
```svelte
|
|
29
|
+
<Textfield label="Email" bind:value={email} required>
|
|
30
|
+
{#snippet supportingText()}
|
|
31
|
+
We'll never share your email.
|
|
32
|
+
{/snippet}
|
|
33
|
+
</Textfield>
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## Icons and supporting text
|
|
37
|
+
|
|
38
|
+
`leadingIconProps` and `trailingIconProps` add icons (a trailing icon is a good place for a clear
|
|
39
|
+
button). The `supportingText` snippet renders helper or error text below the field. Other native
|
|
40
|
+
`<input>` attributes (`type`, `maxlength`, `autocomplete`…) pass through to the input.
|
|
41
|
+
|
|
42
|
+
<Canvas of={TextfieldStories.WithIcons} />
|
|
43
|
+
|
|
44
|
+
<Canvas of={TextfieldStories.CharacterLimit} />
|
|
45
|
+
|
|
46
|
+
## Accessibility
|
|
47
|
+
|
|
48
|
+
- **Label.** The floating label is a real `<label for>` tied to the input's id (generated when you
|
|
49
|
+
don't pass one), not an `aria-label`.
|
|
50
|
+
- **Errors.** `error` sets `aria-invalid`. Say what's wrong in `supportingText`, not just with
|
|
51
|
+
color.
|
|
52
|
+
- **Required.** `required` sets `required` and `aria-required`, and shows an asterisk that screen
|
|
53
|
+
readers skip.
|
|
@@ -26,14 +26,14 @@
|
|
|
26
26
|
|
|
27
27
|
<Story name="Playground">
|
|
28
28
|
{#snippet template(args)}
|
|
29
|
-
<div class="max-w-sm
|
|
29
|
+
<div class="p-spacing-300 max-w-sm">
|
|
30
30
|
<Textfield {...args} />
|
|
31
31
|
</div>
|
|
32
32
|
{/snippet}
|
|
33
33
|
</Story>
|
|
34
34
|
|
|
35
35
|
<Story name="With Supporting Text" asChild>
|
|
36
|
-
<div class="max-w-sm
|
|
36
|
+
<div class="p-spacing-300 max-w-sm">
|
|
37
37
|
<Textfield label="Email">
|
|
38
38
|
{#snippet supportingText()}
|
|
39
39
|
We'll never share your email.
|
|
@@ -43,7 +43,7 @@
|
|
|
43
43
|
</Story>
|
|
44
44
|
|
|
45
45
|
<Story name="With Icons" asChild>
|
|
46
|
-
<div class="max-w-sm
|
|
46
|
+
<div class="p-spacing-300 max-w-sm">
|
|
47
47
|
<Textfield
|
|
48
48
|
label="Search"
|
|
49
49
|
leadingIconProps={{ name: 'search' }}
|
|
@@ -53,7 +53,7 @@
|
|
|
53
53
|
</Story>
|
|
54
54
|
|
|
55
55
|
<Story name="Character Limit" asChild>
|
|
56
|
-
<div class="max-w-sm
|
|
56
|
+
<div class="p-spacing-300 max-w-sm">
|
|
57
57
|
<Textfield label="Bio" characterLimit={80} value="">
|
|
58
58
|
{#snippet supportingText()}
|
|
59
59
|
Keep it short.
|
|
@@ -63,7 +63,7 @@
|
|
|
63
63
|
</Story>
|
|
64
64
|
|
|
65
65
|
<Story name="States" asChild>
|
|
66
|
-
<div class="flex max-w-sm flex-col
|
|
66
|
+
<div class="gap-spacing-300 p-spacing-300 flex max-w-sm flex-col">
|
|
67
67
|
<Textfield label="Default" />
|
|
68
68
|
<Textfield label="Required" required />
|
|
69
69
|
<Textfield label="Error" error value="Invalid value">
|
|
@@ -76,7 +76,7 @@
|
|
|
76
76
|
</Story>
|
|
77
77
|
|
|
78
78
|
<Story name="Outlined" asChild>
|
|
79
|
-
<div class="flex max-w-sm flex-col
|
|
79
|
+
<div class="gap-spacing-300 p-spacing-300 flex max-w-sm flex-col">
|
|
80
80
|
<Textfield variant="outlined" label="Default" />
|
|
81
81
|
<Textfield variant="outlined" label="With value" value="Hello" />
|
|
82
82
|
<Textfield variant="outlined" label="Required" required />
|
|
@@ -4,6 +4,7 @@ export declare const textfield: import("tailwind-variants").TVReturnType<{
|
|
|
4
4
|
variant: {
|
|
5
5
|
filled: {
|
|
6
6
|
base: string;
|
|
7
|
+
input: string;
|
|
7
8
|
label: string;
|
|
8
9
|
};
|
|
9
10
|
outlined: {
|
|
@@ -45,6 +46,7 @@ export declare const textfield: import("tailwind-variants").TVReturnType<{
|
|
|
45
46
|
variant: {
|
|
46
47
|
filled: {
|
|
47
48
|
base: string;
|
|
49
|
+
input: string;
|
|
48
50
|
label: string;
|
|
49
51
|
};
|
|
50
52
|
outlined: {
|
|
@@ -86,6 +88,7 @@ export declare const textfield: import("tailwind-variants").TVReturnType<{
|
|
|
86
88
|
variant: {
|
|
87
89
|
filled: {
|
|
88
90
|
base: string;
|
|
91
|
+
input: string;
|
|
89
92
|
label: string;
|
|
90
93
|
};
|
|
91
94
|
outlined: {
|
|
@@ -2,20 +2,20 @@ import { tv } from 'tailwind-variants';
|
|
|
2
2
|
export const textfield = tv({
|
|
3
3
|
slots: {
|
|
4
4
|
base: `
|
|
5
|
-
group relative w-full h-
|
|
5
|
+
group relative w-full h-spacing-700 flex items-center
|
|
6
6
|
`,
|
|
7
7
|
/* Stretches to the full field height so the label floats relative to the field's top edge,
|
|
8
8
|
not the input's. */
|
|
9
9
|
inputWrapper: `
|
|
10
|
-
relative flex-1 self-stretch flex items-center px-
|
|
10
|
+
relative flex-1 self-stretch flex items-center px-spacing-200
|
|
11
11
|
`,
|
|
12
12
|
input: `
|
|
13
|
-
peer w-full
|
|
13
|
+
peer w-full bg-transparent outline-none
|
|
14
14
|
md-sys-typescale-body-large text-md-sys-color-on-surface
|
|
15
15
|
disabled:text-md-sys-color-on-surface/38
|
|
16
16
|
`,
|
|
17
17
|
label: `
|
|
18
|
-
absolute left-
|
|
18
|
+
absolute left-spacing-200 top-1/2 -translate-y-1/2
|
|
19
19
|
md-sys-typescale-body-large
|
|
20
20
|
text-md-sys-color-on-surface-variant
|
|
21
21
|
pointer-events-none
|
|
@@ -24,28 +24,28 @@ export const textfield = tv({
|
|
|
24
24
|
peer-focus:text-md-sys-color-primary
|
|
25
25
|
`,
|
|
26
26
|
requiredAsterisk: `
|
|
27
|
-
ml-
|
|
27
|
+
ml-spacing-25
|
|
28
28
|
text-md-sys-color-error
|
|
29
29
|
group-focus-within:text-md-sys-color-primary
|
|
30
30
|
transition-colors md-sys-motion-effects
|
|
31
31
|
`,
|
|
32
32
|
leadingIcon: `
|
|
33
|
-
text-md-sys-color-on-surface-variant size-
|
|
33
|
+
text-md-sys-color-on-surface-variant size-spacing-300
|
|
34
34
|
group-focus-within:text-md-sys-color-primary
|
|
35
|
-
ml-
|
|
35
|
+
ml-spacing-150 text-[24px]
|
|
36
36
|
`,
|
|
37
37
|
trailingIcon: `
|
|
38
|
-
mr-
|
|
38
|
+
mr-spacing-150 text-md-sys-color-on-surface-variant size-spacing-300
|
|
39
39
|
group-focus-within:text-md-sys-color-primary
|
|
40
40
|
z-20 text-[24px]
|
|
41
41
|
`,
|
|
42
42
|
supportingText: `
|
|
43
|
-
px-
|
|
43
|
+
px-spacing-200 pt-spacing-50 flex justify-between
|
|
44
44
|
md-sys-typescale-body-small
|
|
45
45
|
text-md-sys-color-on-surface-variant
|
|
46
46
|
`,
|
|
47
47
|
fieldset: `
|
|
48
|
-
absolute -top-
|
|
48
|
+
absolute -top-spacing-100 left-spacing-0 right-spacing-0 bottom-spacing-0 m-spacing-0 px-spacing-150
|
|
49
49
|
pointer-events-none rounded-xs border border-md-sys-color-outline
|
|
50
50
|
transition-colors md-sys-motion-fast-effects
|
|
51
51
|
|
|
@@ -61,16 +61,16 @@ export const textfield = tv({
|
|
|
61
61
|
group-has-[input:not(:placeholder-shown)]:max-w-full
|
|
62
62
|
`,
|
|
63
63
|
legendLabel: `
|
|
64
|
-
px-
|
|
64
|
+
px-spacing-50
|
|
65
65
|
`
|
|
66
66
|
},
|
|
67
67
|
variants: {
|
|
68
68
|
variant: {
|
|
69
69
|
filled: {
|
|
70
70
|
base: `
|
|
71
|
-
px-0 bg-md-sys-color-surface-container-highest
|
|
71
|
+
px-spacing-0 bg-md-sys-color-surface-container-highest
|
|
72
72
|
rounded-t-xs state-layer before:rounded-xs hover:before:bg-md-sys-color-on-surface/8
|
|
73
|
-
after:absolute after:bottom-0 after:left-0 after:right-0 after:h-px after:bg-md-sys-color-on-surface-variant
|
|
73
|
+
after:absolute after:bottom-spacing-0 after:left-spacing-0 after:right-spacing-0 after:h-px after:bg-md-sys-color-on-surface-variant
|
|
74
74
|
after:transition-[height,background-color] after:md-sys-motion-fast-spatial
|
|
75
75
|
hover:after:bg-md-sys-color-on-surface
|
|
76
76
|
focus-within:after:bg-md-sys-color-primary
|
|
@@ -78,15 +78,18 @@ export const textfield = tv({
|
|
|
78
78
|
disabled:bg-md-sys-color-on-surface/4
|
|
79
79
|
disabled:after:bg-md-sys-color-on-surface/12
|
|
80
80
|
`,
|
|
81
|
+
/* Room for the label floated inside the container. Outlined labels float into the border
|
|
82
|
+
notch instead, so their input stays vertically centered. */
|
|
83
|
+
input: 'pt-spacing-200',
|
|
81
84
|
label: `
|
|
82
|
-
peer-focus:top-
|
|
83
|
-
peer-not-placeholder-shown:top-
|
|
85
|
+
peer-focus:top-spacing-100 peer-focus:md-sys-typescale-body-small peer-focus:translate-y-spacing-0
|
|
86
|
+
peer-not-placeholder-shown:top-spacing-100 peer-not-placeholder-shown:md-sys-typescale-body-small peer-not-placeholder-shown:translate-y-spacing-0
|
|
84
87
|
`
|
|
85
88
|
},
|
|
86
89
|
outlined: {
|
|
87
90
|
label: `
|
|
88
|
-
peer-focus:top-0 peer-focus:md-sys-typescale-body-small peer-focus:-translate-y-1/2
|
|
89
|
-
peer-not-placeholder-shown:top-0 peer-not-placeholder-shown:md-sys-typescale-body-small peer-not-placeholder-shown:-translate-y-1/2
|
|
91
|
+
peer-focus:top-spacing-0 peer-focus:md-sys-typescale-body-small peer-focus:-translate-y-1/2
|
|
92
|
+
peer-not-placeholder-shown:top-spacing-0 peer-not-placeholder-shown:md-sys-typescale-body-small peer-not-placeholder-shown:-translate-y-1/2
|
|
90
93
|
`
|
|
91
94
|
}
|
|
92
95
|
},
|
|
@@ -117,12 +120,12 @@ export const textfield = tv({
|
|
|
117
120
|
compoundVariants: [
|
|
118
121
|
{
|
|
119
122
|
/* M3: an outlined label floats back to the field's start edge, over the leading icon, into
|
|
120
|
-
the notch. The wrapper starts after the icon (ml-
|
|
123
|
+
the notch. The wrapper starts after the icon (ml-spacing-150 + size-spacing-300 = 36px), so -20px puts the
|
|
121
124
|
label at 16px from the field's edge. */
|
|
122
125
|
variant: 'outlined',
|
|
123
126
|
leadingIcon: true,
|
|
124
127
|
class: {
|
|
125
|
-
label: 'peer-focus:-left-
|
|
128
|
+
label: 'peer-focus:-left-spacing-250 peer-not-placeholder-shown:-left-spacing-250'
|
|
126
129
|
}
|
|
127
130
|
}
|
|
128
131
|
],
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { tv } from 'tailwind-variants';
|
|
2
2
|
export const toggleGroup = tv({
|
|
3
3
|
slots: {
|
|
4
|
-
root: 'inline-flex h-
|
|
4
|
+
root: 'inline-flex h-spacing-500 overflow-hidden rounded-full border border-md-sys-color-outline'
|
|
5
5
|
},
|
|
6
6
|
variants: {
|
|
7
7
|
orientation: {
|
|
@@ -13,7 +13,7 @@ export const toggleGroup = tv({
|
|
|
13
13
|
});
|
|
14
14
|
export const toggleGroupItem = tv({
|
|
15
15
|
slots: {
|
|
16
|
-
base: 'layer-container state-layer relative inline-flex min-w-
|
|
16
|
+
base: 'layer-container state-layer relative inline-flex min-w-spacing-600 flex-1 items-center justify-center gap-spacing-100 px-spacing-200 md-sys-typescale-label-large text-md-sys-color-on-surface outline-none transition-colors md-sys-motion-fast-effects disabled:cursor-not-allowed disabled:opacity-38 [&:not(:last-child)]:border-r [&:not(:last-child)]:border-md-sys-color-outline data-[state=on]:bg-md-sys-color-secondary-container data-[state=on]:text-md-sys-color-on-secondary-container',
|
|
17
17
|
checkIcon: 'size-[18px] text-[18px]',
|
|
18
18
|
icon: 'size-[18px] text-[18px]'
|
|
19
19
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { tv } from 'tailwind-variants';
|
|
2
2
|
export const tooltip = tv({
|
|
3
3
|
slots: {
|
|
4
|
-
base: 'min-w-60 py-
|
|
4
|
+
base: 'min-w-60 py-spacing-150 px-spacing-200 shadow-elevation-2 rounded-md relative z-[100] pointer-events-auto',
|
|
5
5
|
subhead: '',
|
|
6
6
|
supportingText: '',
|
|
7
7
|
textContainer: '',
|
|
@@ -10,10 +10,10 @@ export const tooltip = tv({
|
|
|
10
10
|
variants: {
|
|
11
11
|
variant: {
|
|
12
12
|
rich: {
|
|
13
|
-
base: 'flex flex-col gap-
|
|
13
|
+
base: 'flex flex-col gap-spacing-150'
|
|
14
14
|
},
|
|
15
15
|
snack: {
|
|
16
|
-
base: 'inline-flex min-w-0 max-w-50 bg-md-sys-color-inverse-surface text-md-sys-color-inverse-on-surface md-sys-typescale-body-small px-
|
|
16
|
+
base: 'inline-flex min-w-spacing-0 max-w-50 bg-md-sys-color-inverse-surface text-md-sys-color-inverse-on-surface md-sys-typescale-body-small px-spacing-150 py-spacing-100 shadow-elevation-3 before:rounded-md',
|
|
17
17
|
supportingText: 'text-md-sys-color-inverse-on-surface md-sys-typescale-body-small',
|
|
18
18
|
textContainer: ''
|
|
19
19
|
}
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
const { Story } = defineMeta({
|
|
6
6
|
title: 'Misc/Avatar',
|
|
7
|
+
tags: ['autodocs'],
|
|
7
8
|
component: Avatar,
|
|
8
9
|
argTypes: {
|
|
9
10
|
size: { control: 'select', options: ['sm', 'md', 'lg'] },
|
|
@@ -24,7 +25,7 @@
|
|
|
24
25
|
</Story>
|
|
25
26
|
|
|
26
27
|
<Story name="Sizes" asChild>
|
|
27
|
-
<div class="flex items-end
|
|
28
|
+
<div class="gap-spacing-200 flex items-end">
|
|
28
29
|
<Avatar size="sm" seed="small" />
|
|
29
30
|
<Avatar size="md" seed="medium" />
|
|
30
31
|
<Avatar size="lg" seed="large" />
|
|
@@ -32,7 +33,7 @@
|
|
|
32
33
|
</Story>
|
|
33
34
|
|
|
34
35
|
<Story name="Generated Fallback" asChild>
|
|
35
|
-
<div class="flex items-end
|
|
36
|
+
<div class="gap-spacing-200 flex items-end">
|
|
36
37
|
<Avatar seed="alice" />
|
|
37
38
|
<Avatar seed="bob" />
|
|
38
39
|
<Avatar seed="carol" />
|
|
@@ -40,7 +41,7 @@
|
|
|
40
41
|
</Story>
|
|
41
42
|
|
|
42
43
|
<Story name="With Image" asChild>
|
|
43
|
-
<div class="flex items-end
|
|
44
|
+
<div class="gap-spacing-200 flex items-end">
|
|
44
45
|
<Avatar src="https://picsum.photos/seed/ogonek-1/200" alt="Sample user" />
|
|
45
46
|
<Avatar
|
|
46
47
|
src="https://this-url-does-not-resolve.example/broken.jpg"
|
|
@@ -55,7 +56,7 @@
|
|
|
55
56
|
</Story>
|
|
56
57
|
|
|
57
58
|
<Story name="Animated" asChild>
|
|
58
|
-
<div class="flex items-end
|
|
59
|
+
<div class="gap-spacing-200 flex items-end">
|
|
59
60
|
<Avatar seed="alice" dicebearStyle="gaze" tags={['animation']} />
|
|
60
61
|
<Avatar seed="bob" dicebearStyle="shapes" tags={['animation']} />
|
|
61
62
|
<Avatar seed="carol" dicebearStyle="blobs" tags={['animation']} />
|
|
@@ -37,37 +37,37 @@
|
|
|
37
37
|
}
|
|
38
38
|
</script>
|
|
39
39
|
|
|
40
|
-
<div class="flex w-full flex-col
|
|
40
|
+
<div class="gap-spacing-300 flex w-full flex-col">
|
|
41
41
|
<!-- Source Color -->
|
|
42
|
-
<div class="flex flex-col
|
|
42
|
+
<div class="gap-spacing-100 flex flex-col">
|
|
43
43
|
<Title size="medium">Source Color</Title>
|
|
44
|
-
<div class="flex items-center
|
|
44
|
+
<div class="gap-spacing-200 flex items-center">
|
|
45
45
|
<input
|
|
46
46
|
type="color"
|
|
47
47
|
bind:value={themeState.sourceColor}
|
|
48
|
-
class="size-
|
|
48
|
+
class="size-spacing-500 cursor-pointer bg-transparent"
|
|
49
49
|
/>
|
|
50
50
|
<Body size="medium">{themeState.sourceColor}</Body>
|
|
51
51
|
</div>
|
|
52
|
-
<div class="mt-
|
|
52
|
+
<div class="mt-spacing-100 gap-spacing-50 flex flex-col">
|
|
53
53
|
<Body size="medium">Or extract from image:</Body>
|
|
54
54
|
<input
|
|
55
55
|
type="file"
|
|
56
56
|
accept="image/*"
|
|
57
57
|
onchange={handleImageUpload}
|
|
58
|
-
class="file:bg-md-sys-color-primary-container file:text-md-sys-color-on-primary-container hover:file:bg-md-sys-color-primary-container/80 md-sys-typescale-body-medium file:md-sys-typescale-label-large file:mr-
|
|
58
|
+
class="file:bg-md-sys-color-primary-container file:text-md-sys-color-on-primary-container hover:file:bg-md-sys-color-primary-container/80 md-sys-typescale-body-medium file:md-sys-typescale-label-large file:mr-spacing-200 file:px-spacing-200 file:py-spacing-100 file:rounded-full file:border-0"
|
|
59
59
|
/>
|
|
60
60
|
</div>
|
|
61
61
|
</div>
|
|
62
62
|
|
|
63
63
|
<!-- Scheme -->
|
|
64
|
-
<div class="flex flex-col
|
|
64
|
+
<div class="gap-spacing-100 flex flex-col">
|
|
65
65
|
<Title size="medium">Scheme</Title>
|
|
66
66
|
<RadioGroup items={schemeItems} bind:value={themeState.scheme as any} orientation="vertical" />
|
|
67
67
|
</div>
|
|
68
68
|
|
|
69
69
|
<!-- Contrast -->
|
|
70
|
-
<div class="flex flex-col
|
|
70
|
+
<div class="gap-spacing-100 flex flex-col">
|
|
71
71
|
<Title size="medium">Contrast</Title>
|
|
72
72
|
<RadioGroup
|
|
73
73
|
items={contrastItems}
|
|
@@ -77,7 +77,7 @@
|
|
|
77
77
|
</div>
|
|
78
78
|
|
|
79
79
|
<!-- Variant -->
|
|
80
|
-
<div class="flex flex-col
|
|
80
|
+
<div class="gap-spacing-100 flex flex-col">
|
|
81
81
|
<Title size="medium">Variant</Title>
|
|
82
82
|
<RadioGroup
|
|
83
83
|
items={variantItems}
|
|
@@ -6,14 +6,14 @@
|
|
|
6
6
|
let open = $state(false);
|
|
7
7
|
</script>
|
|
8
8
|
|
|
9
|
-
<div class="
|
|
9
|
+
<div class="right-spacing-200 bottom-spacing-200 fixed z-50 hidden md:block">
|
|
10
10
|
<Popover bind:open title="Theme Settings" side="top" align="end" sideOffset={16}>
|
|
11
11
|
{#snippet trigger(triggerProps)}
|
|
12
|
-
<FAB iconProps={{ name: 'palette' }}
|
|
12
|
+
<FAB iconProps={{ name: 'palette' }} {...triggerProps} />
|
|
13
13
|
{/snippet}
|
|
14
14
|
|
|
15
15
|
<div
|
|
16
|
-
class="scrollbar-thumb-md-sys-color-outline-variant hover:scrollbar-thumb-md-sys-color-outline flex max-h-[80vh] w-72 scrollbar-thin flex-col overflow-y-auto
|
|
16
|
+
class="scrollbar-thumb-md-sys-color-outline-variant hover:scrollbar-thumb-md-sys-color-outline p-spacing-200 flex max-h-[80vh] w-72 scrollbar-thin flex-col overflow-y-auto"
|
|
17
17
|
>
|
|
18
18
|
<ThemeSettings />
|
|
19
19
|
</div>
|