@noxlovette/material 0.5.1 → 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 +10 -6
- package/dist/animation/TransitionPatterns.stories.svelte +30 -20
- package/dist/animation/containerTransform.d.ts +4 -2
- package/dist/animation/containerTransform.js +4 -2
- package/dist/animation/enterExit.js +5 -2
- package/dist/animation/skeleton.d.ts +1 -1
- package/dist/animation/skeleton.js +1 -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 +11 -2
- package/dist/components/date/DateRangeField.stories.svelte +4 -3
- package/dist/components/date/DateRangeField.svelte +12 -3
- package/dist/components/date/theme.d.ts +7 -7
- package/dist/components/date/theme.js +31 -31
- 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.js +19 -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/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 +1 -1
- package/dist/components/time/TimepickerInput.svelte +1 -1
- package/dist/components/time/theme.js +5 -5
- 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/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
|
@@ -2,45 +2,53 @@
|
|
|
2
2
|
import { defineMeta } from '@storybook/addon-svelte-csf';
|
|
3
3
|
import Toggle from './Toggle.svelte';
|
|
4
4
|
|
|
5
|
+
const variants = ['elevated', 'filled', 'tonal', 'outlined'] as const;
|
|
6
|
+
|
|
5
7
|
const { Story } = defineMeta({
|
|
6
8
|
title: 'Buttons/Toggle',
|
|
7
9
|
component: Toggle,
|
|
10
|
+
tags: ['autodocs'],
|
|
8
11
|
argTypes: {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
},
|
|
13
|
-
shape: {
|
|
14
|
-
control: 'select',
|
|
15
|
-
options: ['round', 'square']
|
|
16
|
-
},
|
|
12
|
+
variant: { control: 'select', options: variants },
|
|
13
|
+
size: { control: 'select', options: ['xs', 'sm', 'md', 'lg', 'xl'] },
|
|
14
|
+
shape: { control: 'inline-radio', options: ['round', 'square'] },
|
|
17
15
|
pressed: { control: 'boolean' },
|
|
18
|
-
disabled: { control: 'boolean' }
|
|
19
|
-
loading: { control: 'boolean' }
|
|
16
|
+
disabled: { control: 'boolean' }
|
|
20
17
|
},
|
|
21
18
|
args: {
|
|
22
|
-
|
|
19
|
+
variant: 'filled',
|
|
20
|
+
size: 'sm',
|
|
23
21
|
shape: 'round',
|
|
24
22
|
pressed: false,
|
|
25
|
-
disabled: false
|
|
26
|
-
loading: false
|
|
23
|
+
disabled: false
|
|
27
24
|
}
|
|
28
25
|
});
|
|
29
26
|
</script>
|
|
30
27
|
|
|
31
|
-
<
|
|
28
|
+
<script lang="ts">
|
|
29
|
+
let selected = $state<Record<string, boolean>>({ tonal: true, outlined: true });
|
|
30
|
+
</script>
|
|
31
|
+
|
|
32
|
+
<Story name="Playground">
|
|
33
|
+
{#snippet template(args)}
|
|
34
|
+
<Toggle {...args} iconProps={{ name: 'bookmark' }}>Save</Toggle>
|
|
35
|
+
{/snippet}
|
|
36
|
+
</Story>
|
|
32
37
|
|
|
33
|
-
<Story name="
|
|
34
|
-
<div class="
|
|
35
|
-
|
|
36
|
-
|
|
38
|
+
<Story name="Colour styles" asChild>
|
|
39
|
+
<div class="gap-spacing-200 p-spacing-300 grid grid-cols-[auto_auto] items-center justify-start">
|
|
40
|
+
{#each variants as variant (variant)}
|
|
41
|
+
<Toggle {variant} iconProps={{ name: 'favorite' }}>{variant}</Toggle>
|
|
42
|
+
<Toggle {variant} pressed iconProps={{ name: 'favorite' }}>{variant}</Toggle>
|
|
43
|
+
{/each}
|
|
37
44
|
</div>
|
|
38
45
|
</Story>
|
|
39
46
|
|
|
40
|
-
<Story name="
|
|
41
|
-
<div class="flex flex-wrap items-center
|
|
42
|
-
<Toggle>
|
|
43
|
-
<Toggle pressed>
|
|
44
|
-
|
|
47
|
+
<Story name="Shape swap" asChild>
|
|
48
|
+
<div class="gap-spacing-200 p-spacing-300 flex flex-wrap items-center">
|
|
49
|
+
<Toggle size="md" bind:pressed={selected.tonal} variant="tonal">Round → square</Toggle>
|
|
50
|
+
<Toggle size="md" bind:pressed={selected.outlined} variant="outlined" shape="square">
|
|
51
|
+
Square → round
|
|
52
|
+
</Toggle>
|
|
45
53
|
</div>
|
|
46
54
|
</Story>
|
|
@@ -1,19 +1,4 @@
|
|
|
1
1
|
import Toggle from './Toggle.svelte';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
$$bindings?: Bindings;
|
|
5
|
-
} & Exports;
|
|
6
|
-
(internal: unknown, props: {
|
|
7
|
-
$$events?: Events;
|
|
8
|
-
$$slots?: Slots;
|
|
9
|
-
}): Exports & {
|
|
10
|
-
$set?: any;
|
|
11
|
-
$on?: any;
|
|
12
|
-
};
|
|
13
|
-
z_$$bindings?: Bindings;
|
|
14
|
-
}
|
|
15
|
-
declare const Toggle: $$__sveltets_2_IsomorphicComponent<Record<string, never>, {
|
|
16
|
-
[evt: string]: CustomEvent<any>;
|
|
17
|
-
}, {}, {}, string>;
|
|
18
|
-
type Toggle = InstanceType<typeof Toggle>;
|
|
2
|
+
declare const Toggle: import("svelte").Component<Record<string, never>, {}, "">;
|
|
3
|
+
type Toggle = ReturnType<typeof Toggle>;
|
|
19
4
|
export default Toggle;
|
|
@@ -1,21 +1,23 @@
|
|
|
1
1
|
<!--
|
|
2
2
|
@component
|
|
3
|
-
A toggle button
|
|
4
|
-
|
|
3
|
+
A toggle button: a button with a selected state, exposed as `aria-pressed`. Selecting changes its
|
|
4
|
+
colours and swaps its resting shape (round ↔ square).
|
|
5
5
|
|
|
6
|
-
@see https://m3.material.io/components/
|
|
6
|
+
@see https://m3.material.io/components/buttons/specs
|
|
7
7
|
-->
|
|
8
8
|
<script lang="ts">
|
|
9
|
-
import type {
|
|
9
|
+
import type { ToggleProps } from './types.js';
|
|
10
10
|
import { Icon, LoadingIndicator, Layer } from '../../utils/index.js';
|
|
11
|
-
import { button } from './theme.js';
|
|
11
|
+
import { button, buttonColor } from './theme.js';
|
|
12
12
|
import clsx from 'clsx';
|
|
13
|
+
import { buttonCorners, shapeMorph } from './shapeMorph.js';
|
|
13
14
|
import { Toggle, type ToggleRootProps } from 'bits-ui';
|
|
14
15
|
|
|
15
16
|
let {
|
|
16
17
|
children,
|
|
17
18
|
iconProps,
|
|
18
|
-
|
|
19
|
+
variant = 'filled',
|
|
20
|
+
size = 'sm',
|
|
19
21
|
shape = 'round',
|
|
20
22
|
disabled,
|
|
21
23
|
loading,
|
|
@@ -23,38 +25,39 @@ Uses Material 3 selection button styling.
|
|
|
23
25
|
onPressedChange,
|
|
24
26
|
class: className,
|
|
25
27
|
...restProps
|
|
26
|
-
}:
|
|
28
|
+
}: ToggleProps = $props();
|
|
27
29
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
30
|
+
let ref = $state<HTMLElement | null>(null);
|
|
31
|
+
$effect(() => (ref ? shapeMorph(ref, buttonCorners) : undefined));
|
|
32
|
+
|
|
33
|
+
const cls = $derived(button({ variant, size, shape, selected: pressed }));
|
|
34
|
+
const btnCls = $derived(
|
|
35
|
+
cls.base({
|
|
36
|
+
class: clsx(buttonColor({ variant, state: pressed ? 'selected' : 'unselected' }), className)
|
|
34
37
|
})
|
|
35
38
|
);
|
|
36
|
-
|
|
37
|
-
const btnCls = $derived(base({ class: clsx(className) }));
|
|
38
39
|
</script>
|
|
39
40
|
|
|
40
41
|
<Toggle.Root
|
|
42
|
+
bind:ref
|
|
41
43
|
bind:pressed
|
|
42
44
|
{onPressedChange}
|
|
43
45
|
{disabled}
|
|
44
46
|
class={btnCls}
|
|
47
|
+
aria-busy={loading || undefined}
|
|
45
48
|
data-cy="m3-toggle"
|
|
46
49
|
{...restProps as ToggleRootProps}
|
|
47
50
|
>
|
|
48
|
-
{#if
|
|
49
|
-
{
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
{
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
{
|
|
51
|
+
{#if loading}
|
|
52
|
+
<LoadingIndicator center={false} class={cls.icon({ class: 'text-current' })} />
|
|
53
|
+
{:else if iconProps}
|
|
54
|
+
<Icon
|
|
55
|
+
fill={pressed ? 1 : 0}
|
|
56
|
+
{...iconProps}
|
|
57
|
+
class={cls.icon({ class: clsx(iconProps.class) })}
|
|
58
|
+
/>
|
|
59
|
+
{/if}
|
|
60
|
+
{#if !loading || iconProps}
|
|
58
61
|
{@render children?.()}
|
|
59
62
|
{/if}
|
|
60
63
|
<Layer />
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ToggleProps } from './types.js';
|
|
2
2
|
import { Toggle } from 'bits-ui';
|
|
3
3
|
/**
|
|
4
|
-
* A toggle button
|
|
5
|
-
*
|
|
4
|
+
* A toggle button: a button with a selected state, exposed as `aria-pressed`. Selecting changes its
|
|
5
|
+
* colours and swaps its resting shape (round ↔ square).
|
|
6
6
|
*
|
|
7
|
-
* @see https://m3.material.io/components/
|
|
7
|
+
* @see https://m3.material.io/components/buttons/specs
|
|
8
8
|
*/
|
|
9
|
-
declare const Toggle: import("svelte").Component<
|
|
9
|
+
declare const Toggle: import("svelte").Component<ToggleProps, {}, "pressed">;
|
|
10
10
|
type Toggle = ReturnType<typeof Toggle>;
|
|
11
11
|
export default Toggle;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { Meta, Title, Subtitle, Canvas, Controls } from '@storybook/addon-docs/blocks';
|
|
2
|
+
import * as GroupStories from './ButtonGroup.stories.svelte';
|
|
3
|
+
|
|
4
|
+
<Meta of={GroupStories} />
|
|
5
|
+
|
|
6
|
+
<Title />
|
|
7
|
+
|
|
8
|
+
<Subtitle>Standard button groups space buttons and make them react to each other.</Subtitle>
|
|
9
|
+
|
|
10
|
+
[M3 spec](https://m3.material.io/components/button-groups/specs) ·
|
|
11
|
+
`import { ButtonGroup } from '@noxlovette/material';`
|
|
12
|
+
|
|
13
|
+
<Canvas of={GroupStories.Playground} />
|
|
14
|
+
|
|
15
|
+
<Controls of={GroupStories.Playground} />
|
|
16
|
+
|
|
17
|
+
## Standard or connected
|
|
18
|
+
|
|
19
|
+
- **`ButtonGroup`** (standard) holds separate actions, such as Back, Play, Next. Pressing a
|
|
20
|
+
button widens it by 15% while the buttons beside it narrow to make room, then all settle back.
|
|
21
|
+
- **`ConnectedButtonGroup`** holds related options, one or several selected, such as Walk, Bike,
|
|
22
|
+
Drive. It replaces the segmented button.
|
|
23
|
+
|
|
24
|
+
## Contents
|
|
25
|
+
|
|
26
|
+
Mix `Button`, `Toggle` and `ButtonIcon` freely, in the filled, tonal, outlined or elevated
|
|
27
|
+
styles. Avoid text buttons and standard icon buttons, which have no container to change. A
|
|
28
|
+
toggle inside swaps its shape as it's selected.
|
|
29
|
+
|
|
30
|
+
<Canvas of={GroupStories.MixedButtons} />
|
|
31
|
+
|
|
32
|
+
## Size
|
|
33
|
+
|
|
34
|
+
Set `size` to the buttons' size. It sets the space between them so each keeps a 48dp target:
|
|
35
|
+
18dp at XS, 12dp at S, 8dp from M up. The group takes its buttons' height.
|
|
36
|
+
|
|
37
|
+
<Canvas of={GroupStories.Sizes} />
|
|
38
|
+
|
|
39
|
+
The press interaction is horizontal only, and off under reduced motion.
|
|
@@ -2,20 +2,17 @@
|
|
|
2
2
|
import { defineMeta } from '@storybook/addon-svelte-csf';
|
|
3
3
|
import Button from '../Button.svelte';
|
|
4
4
|
import ButtonIcon from '../ButtonIcon.svelte';
|
|
5
|
+
import Toggle from '../Toggle.svelte';
|
|
5
6
|
import ButtonGroup from './ButtonGroup.svelte';
|
|
6
7
|
|
|
8
|
+
const sizes = ['xs', 'sm', 'md', 'lg', 'xl'] as const;
|
|
9
|
+
|
|
7
10
|
const { Story } = defineMeta({
|
|
8
11
|
title: 'Buttons/Button Group',
|
|
9
12
|
component: ButtonGroup,
|
|
10
13
|
argTypes: {
|
|
11
|
-
orientation: {
|
|
12
|
-
|
|
13
|
-
options: ['horizontal', 'vertical']
|
|
14
|
-
},
|
|
15
|
-
size: {
|
|
16
|
-
control: 'select',
|
|
17
|
-
options: ['xs', 'sm', 'md', 'lg', 'xl']
|
|
18
|
-
}
|
|
14
|
+
orientation: { control: 'inline-radio', options: ['horizontal', 'vertical'] },
|
|
15
|
+
size: { control: 'select', options: sizes }
|
|
19
16
|
},
|
|
20
17
|
args: {
|
|
21
18
|
orientation: 'horizontal',
|
|
@@ -24,57 +21,79 @@
|
|
|
24
21
|
});
|
|
25
22
|
</script>
|
|
26
23
|
|
|
24
|
+
<script lang="ts">
|
|
25
|
+
let playing = $state(false);
|
|
26
|
+
</script>
|
|
27
|
+
|
|
27
28
|
<Story name="Playground">
|
|
28
29
|
{#snippet template(args)}
|
|
29
|
-
<ButtonGroup orientation={args.orientation} size={args.size}>
|
|
30
|
-
<Button variant="tonal">
|
|
31
|
-
<Button
|
|
32
|
-
<Button variant="tonal">
|
|
30
|
+
<ButtonGroup orientation={args.orientation} size={args.size} aria-label="Playback">
|
|
31
|
+
<Button size={args.size} variant="tonal">Back</Button>
|
|
32
|
+
<Button size={args.size}>Play</Button>
|
|
33
|
+
<Button size={args.size} variant="tonal">Next</Button>
|
|
33
34
|
</ButtonGroup>
|
|
34
35
|
{/snippet}
|
|
35
36
|
</Story>
|
|
36
37
|
|
|
37
|
-
<Story name="Mixed
|
|
38
|
-
<div class="p-
|
|
39
|
-
<ButtonGroup size="
|
|
40
|
-
<
|
|
41
|
-
|
|
42
|
-
|
|
38
|
+
<Story name="Mixed buttons" asChild>
|
|
39
|
+
<div class="gap-spacing-400 p-spacing-300 flex flex-col items-start">
|
|
40
|
+
<ButtonGroup size="md" aria-label="Player">
|
|
41
|
+
<ButtonIcon
|
|
42
|
+
size="md"
|
|
43
|
+
variant="tonal"
|
|
44
|
+
width="wide"
|
|
45
|
+
aria-label="Previous"
|
|
46
|
+
iconProps={{ name: 'skip_previous' }}
|
|
47
|
+
/>
|
|
48
|
+
<Toggle
|
|
49
|
+
size="md"
|
|
50
|
+
bind:pressed={playing}
|
|
51
|
+
iconProps={{ name: playing ? 'pause' : 'play_arrow' }}
|
|
52
|
+
>
|
|
53
|
+
{playing ? 'Pause' : 'Play'}
|
|
54
|
+
</Toggle>
|
|
55
|
+
<ButtonIcon
|
|
56
|
+
size="md"
|
|
57
|
+
variant="tonal"
|
|
58
|
+
width="wide"
|
|
59
|
+
aria-label="Next"
|
|
60
|
+
iconProps={{ name: 'skip_next' }}
|
|
61
|
+
/>
|
|
43
62
|
</ButtonGroup>
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
<ButtonIcon
|
|
52
|
-
|
|
53
|
-
|
|
63
|
+
<ButtonGroup size="sm" aria-label="Call">
|
|
64
|
+
<ButtonIcon
|
|
65
|
+
variant="tonal"
|
|
66
|
+
variation="toggle"
|
|
67
|
+
aria-label="Mute"
|
|
68
|
+
iconProps={{ name: 'mic' }}
|
|
69
|
+
/>
|
|
70
|
+
<ButtonIcon
|
|
71
|
+
variant="tonal"
|
|
72
|
+
variation="toggle"
|
|
73
|
+
aria-label="Camera"
|
|
74
|
+
iconProps={{ name: 'videocam' }}
|
|
75
|
+
/>
|
|
76
|
+
<ButtonIcon variant="outlined" aria-label="More" iconProps={{ name: 'more_vert' }} />
|
|
77
|
+
<ButtonIcon width="wide" aria-label="End call" iconProps={{ name: 'call_end' }} />
|
|
54
78
|
</ButtonGroup>
|
|
55
79
|
</div>
|
|
56
80
|
</Story>
|
|
57
81
|
|
|
58
82
|
<Story name="Sizes" asChild>
|
|
59
|
-
<div class="flex flex-
|
|
60
|
-
|
|
61
|
-
<
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
</ButtonGroup>
|
|
68
|
-
<ButtonGroup size="xl">
|
|
69
|
-
<Button size="xl" variant="tonal">XL</Button>
|
|
70
|
-
<Button size="xl" variant="tonal">XL</Button>
|
|
71
|
-
</ButtonGroup>
|
|
83
|
+
<div class="gap-spacing-300 p-spacing-300 flex flex-col items-start">
|
|
84
|
+
{#each sizes as size (size)}
|
|
85
|
+
<ButtonGroup {size}>
|
|
86
|
+
<Button {size} variant="tonal">One</Button>
|
|
87
|
+
<Button {size}>Two</Button>
|
|
88
|
+
<Button {size} variant="tonal">Three</Button>
|
|
89
|
+
</ButtonGroup>
|
|
90
|
+
{/each}
|
|
72
91
|
</div>
|
|
73
92
|
</Story>
|
|
74
93
|
|
|
75
94
|
<Story name="Vertical" asChild>
|
|
76
|
-
<div class="p-
|
|
77
|
-
<ButtonGroup orientation="vertical"
|
|
95
|
+
<div class="p-spacing-300">
|
|
96
|
+
<ButtonGroup orientation="vertical">
|
|
78
97
|
<Button variant="tonal">Top</Button>
|
|
79
98
|
<Button variant="tonal">Middle</Button>
|
|
80
99
|
<Button variant="tonal">Bottom</Button>
|
|
@@ -1,19 +1,4 @@
|
|
|
1
1
|
import ButtonGroup from './ButtonGroup.svelte';
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
$$bindings?: Bindings;
|
|
5
|
-
} & Exports;
|
|
6
|
-
(internal: unknown, props: {
|
|
7
|
-
$$events?: Events;
|
|
8
|
-
$$slots?: Slots;
|
|
9
|
-
}): Exports & {
|
|
10
|
-
$set?: any;
|
|
11
|
-
$on?: any;
|
|
12
|
-
};
|
|
13
|
-
z_$$bindings?: Bindings;
|
|
14
|
-
}
|
|
15
|
-
declare const ButtonGroup: $$__sveltets_2_IsomorphicComponent<Record<string, never>, {
|
|
16
|
-
[evt: string]: CustomEvent<any>;
|
|
17
|
-
}, {}, {}, string>;
|
|
18
|
-
type ButtonGroup = InstanceType<typeof ButtonGroup>;
|
|
2
|
+
declare const ButtonGroup: import("svelte").Component<Record<string, never>, {}, "">;
|
|
3
|
+
type ButtonGroup = ReturnType<typeof ButtonGroup>;
|
|
19
4
|
export default ButtonGroup;
|
|
@@ -1,17 +1,19 @@
|
|
|
1
1
|
<!--
|
|
2
2
|
@component
|
|
3
|
-
A standard button group
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
A standard button group: an invisible container that spaces buttons and adds an interaction
|
|
4
|
+
between neighbours. Pressing a button widens it by 15% while the buttons beside it narrow to
|
|
5
|
+
make room, on the fast spatial spring; a toggle inside also swaps its shape as it's selected.
|
|
6
|
+
Children keep their own style, so filled, tonal and outlined buttons and icon buttons mix freely.
|
|
6
7
|
|
|
7
|
-
|
|
8
|
-
`Button` / `ButtonIcon` / `Toggle` children, not a selection primitive. For a
|
|
9
|
-
single/multi-select segmented control, use `ConnectedButtonGroup` instead.
|
|
8
|
+
For a set of related options where one or more is selected, use `ConnectedButtonGroup`.
|
|
10
9
|
|
|
11
|
-
@see https://m3.material.io/components/button-groups/
|
|
10
|
+
@see https://m3.material.io/components/button-groups/specs
|
|
12
11
|
-->
|
|
13
12
|
<script lang="ts">
|
|
14
13
|
import clsx from 'clsx';
|
|
14
|
+
import { animate } from 'motion';
|
|
15
|
+
import type { Attachment } from 'svelte/attachments';
|
|
16
|
+
import { springTokens, springTransition } from '../../../animation/spring.js';
|
|
15
17
|
import { buttonGroup } from './theme.js';
|
|
16
18
|
import type { ButtonGroupProps } from './types.js';
|
|
17
19
|
|
|
@@ -19,12 +21,104 @@ single/multi-select segmented control, use `ConnectedButtonGroup` instead.
|
|
|
19
21
|
orientation = 'horizontal',
|
|
20
22
|
size = 'sm',
|
|
21
23
|
children,
|
|
24
|
+
'aria-label': ariaLabel,
|
|
22
25
|
class: className
|
|
23
26
|
}: ButtonGroupProps = $props();
|
|
24
27
|
|
|
25
28
|
const cls = $derived(buttonGroup({ orientation, size }));
|
|
29
|
+
|
|
30
|
+
const GROW = 0.15;
|
|
31
|
+
const spring = springTransition(springTokens.fastSpatial);
|
|
32
|
+
const reducedMotion = () =>
|
|
33
|
+
typeof matchMedia === 'function' && matchMedia('(prefers-reduced-motion: reduce)').matches;
|
|
34
|
+
|
|
35
|
+
// The pressed button and its neighbours, with their widths before the press.
|
|
36
|
+
type Press = { items: { el: HTMLElement; width: number; to: number }[] };
|
|
37
|
+
|
|
38
|
+
const squeeze: Attachment<HTMLElement> = (group) => {
|
|
39
|
+
let press: Press | null = null;
|
|
40
|
+
// Widths at rest, kept while a release is still settling so a quick re-press starts from them.
|
|
41
|
+
const rest = new WeakMap<HTMLElement, number>();
|
|
42
|
+
|
|
43
|
+
const isEnabled = (el: Element | null): el is HTMLElement =>
|
|
44
|
+
el instanceof HTMLElement &&
|
|
45
|
+
!el.matches(':disabled, [aria-disabled="true"], [data-disabled]');
|
|
46
|
+
|
|
47
|
+
const itemOf = (target: EventTarget | null) => {
|
|
48
|
+
if (!(target instanceof Node)) return null;
|
|
49
|
+
let el = target instanceof Element ? target : target.parentElement;
|
|
50
|
+
while (el && el.parentElement !== group) el = el.parentElement;
|
|
51
|
+
return el && isEnabled(el) ? el : null;
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
const widthOf = (el: HTMLElement) => {
|
|
55
|
+
if (!rest.has(el)) rest.set(el, el.getBoundingClientRect().width);
|
|
56
|
+
return rest.get(el)!;
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
const start = (el: HTMLElement) => {
|
|
60
|
+
if (orientation !== 'horizontal' || press || reducedMotion()) return;
|
|
61
|
+
const width = widthOf(el);
|
|
62
|
+
const neighbours = [el.previousElementSibling, el.nextElementSibling].filter(isEnabled);
|
|
63
|
+
const share = (width * GROW) / Math.max(neighbours.length, 1);
|
|
64
|
+
press = {
|
|
65
|
+
items: [
|
|
66
|
+
{ el, width, to: width * (1 + GROW) },
|
|
67
|
+
...neighbours.map((n) => {
|
|
68
|
+
const w = widthOf(n);
|
|
69
|
+
return { el: n, width: w, to: Math.max(w - share, 0) };
|
|
70
|
+
})
|
|
71
|
+
]
|
|
72
|
+
};
|
|
73
|
+
for (const { el: item, to } of press.items) animate(item, { width: `${to}px` }, spring);
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
const end = () => {
|
|
77
|
+
if (!press) return;
|
|
78
|
+
const { items } = press;
|
|
79
|
+
press = null;
|
|
80
|
+
for (const { el, width } of items) {
|
|
81
|
+
animate(el, { width: `${width}px` }, spring).then(() => {
|
|
82
|
+
// Hand the width back to the layout, unless a new press picked this button up.
|
|
83
|
+
if (press?.items.some((i) => i.el === el)) return;
|
|
84
|
+
el.style.width = '';
|
|
85
|
+
rest.delete(el);
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
const onPointerDown = (e: PointerEvent) => {
|
|
91
|
+
if (e.button !== 0) return;
|
|
92
|
+
const el = itemOf(e.target);
|
|
93
|
+
if (el) start(el);
|
|
94
|
+
};
|
|
95
|
+
const onKeyDown = (e: KeyboardEvent) => {
|
|
96
|
+
if (e.repeat || (e.key !== ' ' && e.key !== 'Enter')) return;
|
|
97
|
+
const el = itemOf(e.target);
|
|
98
|
+
if (el) start(el);
|
|
99
|
+
};
|
|
100
|
+
|
|
101
|
+
group.addEventListener('pointerdown', onPointerDown);
|
|
102
|
+
group.addEventListener('keydown', onKeyDown);
|
|
103
|
+
group.addEventListener('keyup', end);
|
|
104
|
+
window.addEventListener('pointerup', end);
|
|
105
|
+
window.addEventListener('pointercancel', end);
|
|
106
|
+
return () => {
|
|
107
|
+
group.removeEventListener('pointerdown', onPointerDown);
|
|
108
|
+
group.removeEventListener('keydown', onKeyDown);
|
|
109
|
+
group.removeEventListener('keyup', end);
|
|
110
|
+
window.removeEventListener('pointerup', end);
|
|
111
|
+
window.removeEventListener('pointercancel', end);
|
|
112
|
+
};
|
|
113
|
+
};
|
|
26
114
|
</script>
|
|
27
115
|
|
|
28
|
-
<div
|
|
116
|
+
<div
|
|
117
|
+
role="group"
|
|
118
|
+
aria-label={ariaLabel}
|
|
119
|
+
data-orientation={orientation}
|
|
120
|
+
class={cls.root({ class: clsx(className) })}
|
|
121
|
+
{@attach squeeze}
|
|
122
|
+
>
|
|
29
123
|
{@render children()}
|
|
30
124
|
</div>
|
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
import type { ButtonGroupProps } from './types.js';
|
|
2
2
|
/**
|
|
3
|
-
* A standard button group
|
|
4
|
-
*
|
|
5
|
-
*
|
|
3
|
+
* A standard button group: an invisible container that spaces buttons and adds an interaction
|
|
4
|
+
* between neighbours. Pressing a button widens it by 15% while the buttons beside it narrow to
|
|
5
|
+
* make room, on the fast spatial spring; a toggle inside also swaps its shape as it's selected.
|
|
6
|
+
* Children keep their own style, so filled, tonal and outlined buttons and icon buttons mix freely.
|
|
6
7
|
*
|
|
7
|
-
*
|
|
8
|
-
* `Button` / `ButtonIcon` / `Toggle` children, not a selection primitive. For a
|
|
9
|
-
* single/multi-select segmented control, use `ConnectedButtonGroup` instead.
|
|
8
|
+
* For a set of related options where one or more is selected, use `ConnectedButtonGroup`.
|
|
10
9
|
*
|
|
11
|
-
* @see https://m3.material.io/components/button-groups/
|
|
10
|
+
* @see https://m3.material.io/components/button-groups/specs
|
|
12
11
|
*/
|
|
13
12
|
declare const ButtonGroup: import("svelte").Component<ButtonGroupProps, {}, "">;
|
|
14
13
|
type ButtonGroup = ReturnType<typeof ButtonGroup>;
|
|
@@ -10,11 +10,21 @@ export declare const buttonGroup: import("tailwind-variants").TVReturnType<{
|
|
|
10
10
|
};
|
|
11
11
|
};
|
|
12
12
|
size: {
|
|
13
|
-
xs: {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
13
|
+
xs: {
|
|
14
|
+
root: string;
|
|
15
|
+
};
|
|
16
|
+
sm: {
|
|
17
|
+
root: string;
|
|
18
|
+
};
|
|
19
|
+
md: {
|
|
20
|
+
root: string;
|
|
21
|
+
};
|
|
22
|
+
lg: {
|
|
23
|
+
root: string;
|
|
24
|
+
};
|
|
25
|
+
xl: {
|
|
26
|
+
root: string;
|
|
27
|
+
};
|
|
18
28
|
};
|
|
19
29
|
}, {
|
|
20
30
|
root: string;
|
|
@@ -28,11 +38,21 @@ export declare const buttonGroup: import("tailwind-variants").TVReturnType<{
|
|
|
28
38
|
};
|
|
29
39
|
};
|
|
30
40
|
size: {
|
|
31
|
-
xs: {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
41
|
+
xs: {
|
|
42
|
+
root: string;
|
|
43
|
+
};
|
|
44
|
+
sm: {
|
|
45
|
+
root: string;
|
|
46
|
+
};
|
|
47
|
+
md: {
|
|
48
|
+
root: string;
|
|
49
|
+
};
|
|
50
|
+
lg: {
|
|
51
|
+
root: string;
|
|
52
|
+
};
|
|
53
|
+
xl: {
|
|
54
|
+
root: string;
|
|
55
|
+
};
|
|
36
56
|
};
|
|
37
57
|
}, {
|
|
38
58
|
root: string;
|
|
@@ -46,11 +66,21 @@ export declare const buttonGroup: import("tailwind-variants").TVReturnType<{
|
|
|
46
66
|
};
|
|
47
67
|
};
|
|
48
68
|
size: {
|
|
49
|
-
xs: {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
69
|
+
xs: {
|
|
70
|
+
root: string;
|
|
71
|
+
};
|
|
72
|
+
sm: {
|
|
73
|
+
root: string;
|
|
74
|
+
};
|
|
75
|
+
md: {
|
|
76
|
+
root: string;
|
|
77
|
+
};
|
|
78
|
+
lg: {
|
|
79
|
+
root: string;
|
|
80
|
+
};
|
|
81
|
+
xl: {
|
|
82
|
+
root: string;
|
|
83
|
+
};
|
|
54
84
|
};
|
|
55
85
|
}, {
|
|
56
86
|
root: string;
|