@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
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { Meta, Title, Subtitle, Canvas, Controls } from '@storybook/addon-docs/blocks';
|
|
2
|
+
import * as SnackbarStories from './Snackbar.stories.svelte';
|
|
3
|
+
|
|
4
|
+
<Meta of={SnackbarStories} />
|
|
5
|
+
|
|
6
|
+
<Title />
|
|
7
|
+
|
|
8
|
+
<Subtitle>
|
|
9
|
+
Snackbars show a brief message about an app process at the bottom of the screen.
|
|
10
|
+
</Subtitle>
|
|
11
|
+
|
|
12
|
+
[M3 spec](https://m3.material.io/components/snackbar/specs) ·
|
|
13
|
+
`import { Snackbar } from '@noxlovette/material';`
|
|
14
|
+
|
|
15
|
+
<Canvas of={SnackbarStories.Playground} />
|
|
16
|
+
|
|
17
|
+
<Controls of={SnackbarStories.Playground} />
|
|
18
|
+
|
|
19
|
+
## Showing a snackbar
|
|
20
|
+
|
|
21
|
+
There's no `toast()` function or queue. Mount one `Snackbar`, bind its `message`, and assign to
|
|
22
|
+
that state to show it:
|
|
23
|
+
|
|
24
|
+
```svelte
|
|
25
|
+
<script lang="ts">
|
|
26
|
+
import { Snackbar } from '@noxlovette/material';
|
|
27
|
+
|
|
28
|
+
let snackbarMessage = $state('');
|
|
29
|
+
</script>
|
|
30
|
+
|
|
31
|
+
<button onclick={() => (snackbarMessage = 'Changes saved.')}>Save</button>
|
|
32
|
+
|
|
33
|
+
<Snackbar bind:message={snackbarMessage} label="Undo" callback={undoSave} />
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
When `message` becomes non-empty (a string or a snippet), the snackbar slides in. After 4
|
|
37
|
+
seconds it hides and resets a string `message` to `''`, so the same text can be shown again. With
|
|
38
|
+
`static`, it stays until the user closes it.
|
|
39
|
+
|
|
40
|
+
`label` and `callback` add an action button.
|
|
41
|
+
|
|
42
|
+
<Canvas of={SnackbarStories.Triggered} />
|
|
43
|
+
|
|
44
|
+
<Canvas of={SnackbarStories.WithAction} />
|
|
45
|
+
|
|
46
|
+
## Accessibility
|
|
47
|
+
|
|
48
|
+
- **Timing.** A non-static snackbar disappears on its own, so never make it the only place
|
|
49
|
+
critical information appears.
|
|
50
|
+
- **Dismiss.** `showClose` (on by default) renders a close button labelled "Dismiss snackbar".
|
|
51
|
+
- **One at a time.** Mount one snackbar per region and drive it through one binding; stacking
|
|
52
|
+
instances isn't supported.
|
|
@@ -9,10 +9,6 @@
|
|
|
9
9
|
<script module lang="ts">
|
|
10
10
|
import { defineMeta } from '@storybook/addon-svelte-csf';
|
|
11
11
|
import Snackbar from './Snackbar.svelte';
|
|
12
|
-
</script>
|
|
13
|
-
|
|
14
|
-
<script lang="ts">
|
|
15
|
-
import Button from '../buttons/Button.svelte';
|
|
16
12
|
|
|
17
13
|
const { Story } = defineMeta({
|
|
18
14
|
title: 'Feedback/Snackbar',
|
|
@@ -28,6 +24,10 @@
|
|
|
28
24
|
static: false
|
|
29
25
|
}
|
|
30
26
|
});
|
|
27
|
+
</script>
|
|
28
|
+
|
|
29
|
+
<script lang="ts">
|
|
30
|
+
import Button from '../buttons/Button.svelte';
|
|
31
31
|
|
|
32
32
|
let playgroundMessage = $state('This is a snackbar message.');
|
|
33
33
|
let triggeredMessage = $state('');
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
</Story>
|
|
51
51
|
|
|
52
52
|
<Story name="Triggered" asChild>
|
|
53
|
-
<div class="relative flex min-h-32 flex-col items-center justify-center
|
|
53
|
+
<div class="gap-spacing-200 relative flex min-h-32 flex-col items-center justify-center">
|
|
54
54
|
<Button
|
|
55
55
|
variant="tonal"
|
|
56
56
|
onclick={() => {
|
|
@@ -88,7 +88,7 @@ Snackbars provide brief messages about app processes at the bottom of the screen
|
|
|
88
88
|
|
|
89
89
|
{#if showClose}
|
|
90
90
|
<button
|
|
91
|
-
class="relative rounded-full
|
|
91
|
+
class="p-spacing-50 relative rounded-full"
|
|
92
92
|
onclick={() => {
|
|
93
93
|
dismissed = true;
|
|
94
94
|
if (typeof message === 'string') {
|
|
@@ -2,7 +2,7 @@ import { type VariantProps } from 'tailwind-variants';
|
|
|
2
2
|
export type SnackBarVariants = VariantProps<typeof snackbar>;
|
|
3
3
|
export declare const snackbar: import("tailwind-variants").TVReturnType<{
|
|
4
4
|
fixed: {
|
|
5
|
-
true: "fixed bottom-20 md:bottom-
|
|
5
|
+
true: "fixed bottom-20 md:bottom-spacing-300 left-1/2 -translate-x-1/2";
|
|
6
6
|
false: "";
|
|
7
7
|
};
|
|
8
8
|
}, {
|
|
@@ -13,7 +13,7 @@ export declare const snackbar: import("tailwind-variants").TVReturnType<{
|
|
|
13
13
|
icon: string;
|
|
14
14
|
}, undefined, {
|
|
15
15
|
fixed: {
|
|
16
|
-
true: "fixed bottom-20 md:bottom-
|
|
16
|
+
true: "fixed bottom-20 md:bottom-spacing-300 left-1/2 -translate-x-1/2";
|
|
17
17
|
false: "";
|
|
18
18
|
};
|
|
19
19
|
}, {
|
|
@@ -24,7 +24,7 @@ export declare const snackbar: import("tailwind-variants").TVReturnType<{
|
|
|
24
24
|
icon: string;
|
|
25
25
|
}, import("tailwind-variants").TVReturnTypeLike<{
|
|
26
26
|
fixed: {
|
|
27
|
-
true: "fixed bottom-20 md:bottom-
|
|
27
|
+
true: "fixed bottom-20 md:bottom-spacing-300 left-1/2 -translate-x-1/2";
|
|
28
28
|
false: "";
|
|
29
29
|
};
|
|
30
30
|
}, {
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
import { tv } from 'tailwind-variants';
|
|
2
2
|
export const snackbar = tv({
|
|
3
3
|
slots: {
|
|
4
|
-
base: 'rounded-xs relative min-h-
|
|
5
|
-
label: 'text-md-sys-color-inverse-primary md-sys-typescale-label-large px-
|
|
4
|
+
base: 'rounded-xs relative min-h-spacing-600 md:max-h-17 flex z-[100] items-center bg-md-sys-color-inverse-surface shadow-elevation-3 pr-spacing-100 pl-spacing-200 justify-between h-max py-spacing-150',
|
|
5
|
+
label: 'text-md-sys-color-inverse-primary md-sys-typescale-label-large px-spacing-150 cursor-pointer ',
|
|
6
6
|
actionWrapper: 'flex items-center z-40',
|
|
7
7
|
supportingText: 'text-md-sys-color-inverse-on-surface md-sys-typescale-body-medium max-w-[60ch] ',
|
|
8
|
-
icon: 'size-
|
|
8
|
+
icon: 'size-spacing-300 text-[24px] text-md-sys-color-inverse-on-surface mr-spacing-50 ml-spacing-150'
|
|
9
9
|
},
|
|
10
10
|
variants: {
|
|
11
11
|
fixed: {
|
|
12
|
-
true: 'fixed bottom-20 md:bottom-
|
|
12
|
+
true: 'fixed bottom-20 md:bottom-spacing-300 left-1/2 -translate-x-1/2',
|
|
13
13
|
false: ''
|
|
14
14
|
}
|
|
15
15
|
}
|
|
@@ -25,7 +25,7 @@ and `sortDirection` props. Defaults to `scope="col"`.
|
|
|
25
25
|
</script>
|
|
26
26
|
|
|
27
27
|
<th {scope} class={header({ class: clsx(className) })} {...restProps}>
|
|
28
|
-
<span class="inline-flex items-center
|
|
28
|
+
<span class="gap-spacing-50 inline-flex items-center">
|
|
29
29
|
{@render children?.()}
|
|
30
30
|
{#if sortable}
|
|
31
31
|
<span
|
|
@@ -6,8 +6,8 @@ export const table = tv({
|
|
|
6
6
|
body: '[&_tr:last-child]:border-b-0',
|
|
7
7
|
foot: 'border-t border-md-sys-color-outline-variant',
|
|
8
8
|
row: 'border-b border-md-sys-color-outline-variant transition-colors md-sys-motion-fast-effects focus-visible:outline focus-visible:-outline-offset-2 focus-visible:outline-md-sys-color-primary',
|
|
9
|
-
cell: 'px-
|
|
10
|
-
header: 'px-
|
|
9
|
+
cell: 'px-spacing-200 py-spacing-150 align-middle',
|
|
10
|
+
header: 'px-spacing-200 py-spacing-200 align-middle md-sys-typescale-label-large text-md-sys-color-on-surface whitespace-nowrap'
|
|
11
11
|
},
|
|
12
12
|
variants: {
|
|
13
13
|
hoverable: {
|
|
@@ -43,7 +43,7 @@ export const table = tv({
|
|
|
43
43
|
},
|
|
44
44
|
sticky: {
|
|
45
45
|
true: {
|
|
46
|
-
head: 'sticky top-0 z-10 bg-md-sys-color-surface-container-high shadow-[0_1px_0_0_var(--md-sys-color-outline-variant)]'
|
|
46
|
+
head: 'sticky top-spacing-0 z-10 bg-md-sys-color-surface-container-high shadow-[0_1px_0_0_var(--md-sys-color-outline-variant)]'
|
|
47
47
|
}
|
|
48
48
|
}
|
|
49
49
|
}
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
|
|
10
10
|
const { Story } = defineMeta({
|
|
11
11
|
title: 'Time/TimeField',
|
|
12
|
+
tags: ['autodocs'],
|
|
12
13
|
component: TimeField,
|
|
13
14
|
argTypes: {
|
|
14
15
|
label: { control: 'text' },
|
|
@@ -28,14 +29,14 @@
|
|
|
28
29
|
|
|
29
30
|
<Story name="Playground">
|
|
30
31
|
{#snippet template(args)}
|
|
31
|
-
<div class="max-w-xs
|
|
32
|
+
<div class="p-spacing-400 max-w-xs">
|
|
32
33
|
<TimeField {...args} />
|
|
33
34
|
</div>
|
|
34
35
|
{/snippet}
|
|
35
36
|
</Story>
|
|
36
37
|
|
|
37
38
|
<Story name="Near Bottom Edge" asChild>
|
|
38
|
-
<div class="flex min-h-dvh max-w-xs flex-col justify-end
|
|
39
|
+
<div class="p-spacing-400 flex min-h-dvh max-w-xs flex-col justify-end">
|
|
39
40
|
<TimeField label="Time" value="18:45" />
|
|
40
41
|
</div>
|
|
41
42
|
</Story>
|
|
@@ -77,7 +77,7 @@ It combines a Material 3 Textfield with a TimepickerInput for intuitive time sel
|
|
|
77
77
|
<button
|
|
78
78
|
{...props}
|
|
79
79
|
title="time-overlay"
|
|
80
|
-
class="
|
|
80
|
+
class="inset-spacing-0 absolute cursor-pointer disabled:cursor-not-allowed"
|
|
81
81
|
type="button"
|
|
82
82
|
data-cy="calendar-time-toggle"
|
|
83
83
|
></button>
|
|
@@ -63,7 +63,7 @@ It follows the Material 3 design for time input pickers.
|
|
|
63
63
|
</TimeField.Root>
|
|
64
64
|
|
|
65
65
|
<div class={cls.buttonDiv()}>
|
|
66
|
-
<ButtonIcon type="button" iconProps={{ name: 'schedule' }} />
|
|
66
|
+
<ButtonIcon variant="standard" type="button" iconProps={{ name: 'schedule' }} />
|
|
67
67
|
<div>
|
|
68
68
|
<Button variant="text" type="button" onclick={() => close()}>{cancelText}</Button>
|
|
69
69
|
<Button
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { tv } from 'tailwind-variants';
|
|
2
2
|
export const timepicker = tv({
|
|
3
3
|
slots: {
|
|
4
|
-
base: 'bg-md-sys-color-surface-container-high shadow-elevation-3 rounded-xl max-w-fit p-
|
|
5
|
-
clockDiv: 'flex gap-
|
|
6
|
-
buttonDiv: 'items-center flex justify-between -mb-
|
|
4
|
+
base: 'bg-md-sys-color-surface-container-high shadow-elevation-3 rounded-xl max-w-fit p-spacing-300 group relative',
|
|
5
|
+
clockDiv: 'flex gap-spacing-100 mb-spacing-300 mt-spacing-250',
|
|
6
|
+
buttonDiv: 'items-center flex justify-between -mb-spacing-200 -mx-spacing-250',
|
|
7
7
|
headline: 'text-md-sys-color-on-surface-variant md-sys-typescale-label-medium',
|
|
8
|
-
inputWrapper: 'space-y-
|
|
8
|
+
inputWrapper: 'space-y-spacing-100',
|
|
9
9
|
fieldSeparator: 'text-md-sys-color-on-surface md-sys-typescale-display-large ',
|
|
10
|
-
timeInput: 'bg-md-sys-color-surface-container-highest rounded-sm outline outline-md-sys-color-outline w-24 h-
|
|
10
|
+
timeInput: 'bg-md-sys-color-surface-container-highest rounded-sm outline outline-md-sys-color-outline w-24 h-spacing-900 md-sys-typescale-display-medium text-md-sys-color-on-surface hover:text-md-sys-color-on-surface state-layer before:bg-md-sys-color-on-surface/8 md-sys-state-focus-indicator inline-flex items-center justify-center cursor-text focus:text-md-sys-color-on-primary-container focus:outline-md-sys-color-primary focus:bg-md-sys-color-primary-container relative',
|
|
11
11
|
timeInputSupportingText: 'text-md-sys-color-on-surface-variant md-sys-typescale-body-small'
|
|
12
12
|
}
|
|
13
13
|
});
|
|
@@ -4,7 +4,7 @@ Toolbar provides a horizontal (or vertical) container for grouped actions.
|
|
|
4
4
|
|
|
5
5
|
- variant="floating" — elevated, rounded, inline (default)
|
|
6
6
|
- variant="docked" — full-width, flat, anchored to top/bottom
|
|
7
|
-
- ghost — renders a h-
|
|
7
|
+
- ghost — renders a h-spacing-800 spacer after the toolbar to prevent content scroll-under
|
|
8
8
|
- color="standard" — surface-container background
|
|
9
9
|
- color="vibrant" — secondary-container background with inverted toggle selection
|
|
10
10
|
- fab snippet — renders a FAB at the trailing edge (canonical for docked bottom bars)
|
|
@@ -5,7 +5,7 @@ import type { ToolbarProps } from './types.js';
|
|
|
5
5
|
*
|
|
6
6
|
* - variant="floating" — elevated, rounded, inline (default)
|
|
7
7
|
* - variant="docked" — full-width, flat, anchored to top/bottom
|
|
8
|
-
* - ghost — renders a h-
|
|
8
|
+
* - ghost — renders a h-spacing-800 spacer after the toolbar to prevent content scroll-under
|
|
9
9
|
* - color="standard" — surface-container background
|
|
10
10
|
* - color="vibrant" — secondary-container background with inverted toggle selection
|
|
11
11
|
* - fab snippet — renders a FAB at the trailing edge (canonical for docked bottom bars)
|
|
@@ -3,18 +3,18 @@ export const toolbar = tv({
|
|
|
3
3
|
slots: {
|
|
4
4
|
// Layout/position only — no paint. Holds one implicit `segment` by default, or,
|
|
5
5
|
// with `sections`, whatever ToolbarSection/ToolbarSpacer children the consumer supplies.
|
|
6
|
-
root: 'flex items-center gap-
|
|
6
|
+
root: 'flex items-center gap-spacing-100',
|
|
7
7
|
// The pill/bar surface itself — bg, shape, elevation, chrome padding. Toolbar renders
|
|
8
8
|
// exactly one of these around `children` by default; ToolbarSection renders one per
|
|
9
9
|
// cluster when `sections` splits the toolbar into independently painted groups.
|
|
10
|
-
segment: 'inline-flex items-center gap-
|
|
11
|
-
group: 'inline-flex items-center gap-
|
|
10
|
+
segment: 'inline-flex items-center gap-spacing-50 p-spacing-100 justify-between',
|
|
11
|
+
group: 'inline-flex items-center gap-spacing-50',
|
|
12
12
|
divider: 'shrink-0 bg-md-sys-color-outline-variant',
|
|
13
13
|
// A marker gap between ToolbarSections under `sections` — same size as `root`'s own
|
|
14
|
-
// `gap-
|
|
14
|
+
// `gap-spacing-100`, it does not grow, so it doesn't push sections apart to opposite edges.
|
|
15
15
|
spacer: '',
|
|
16
|
-
fabSlot: 'ml-auto flex items-center ps-
|
|
17
|
-
ghost: 'h-
|
|
16
|
+
fabSlot: 'ml-auto flex items-center ps-spacing-100',
|
|
17
|
+
ghost: 'h-spacing-800 w-full shrink-0 pointer-events-none'
|
|
18
18
|
},
|
|
19
19
|
variants: {
|
|
20
20
|
orientation: {
|
|
@@ -22,18 +22,18 @@ export const toolbar = tv({
|
|
|
22
22
|
root: 'flex-row',
|
|
23
23
|
segment: 'flex-row h-13',
|
|
24
24
|
group: 'flex-row',
|
|
25
|
-
divider: 'mx-
|
|
25
|
+
divider: 'mx-spacing-50 h-spacing-300 w-px'
|
|
26
26
|
},
|
|
27
27
|
vertical: {
|
|
28
28
|
root: 'flex-col h-max',
|
|
29
|
-
segment: 'flex-col w-
|
|
29
|
+
segment: 'flex-col w-spacing-700',
|
|
30
30
|
group: 'flex-col',
|
|
31
|
-
divider: 'my-
|
|
31
|
+
divider: 'my-spacing-50 h-px w-spacing-300'
|
|
32
32
|
}
|
|
33
33
|
},
|
|
34
34
|
variant: {
|
|
35
35
|
floating: { root: 'inline-flex', segment: 'rounded-full shadow-elevation-1' },
|
|
36
|
-
docked: { root: 'fixed left-0 z-10 w-full', segment: 'w-full rounded-none' }
|
|
36
|
+
docked: { root: 'fixed left-spacing-0 z-10 w-full', segment: 'w-full rounded-none' }
|
|
37
37
|
},
|
|
38
38
|
color: {
|
|
39
39
|
standard: { segment: 'bg-md-sys-color-surface-container' },
|
|
@@ -48,8 +48,8 @@ export const toolbar = tv({
|
|
|
48
48
|
});
|
|
49
49
|
export const toolbarButton = tv({
|
|
50
50
|
slots: {
|
|
51
|
-
base: 'layer-container state-layer before:rounded-full relative inline-flex size-
|
|
52
|
-
icon: 'size-
|
|
51
|
+
base: 'layer-container state-layer before:rounded-full relative inline-flex size-spacing-500 items-center justify-center rounded-full outline-none transition-colors md-sys-motion-fast-effects disabled:cursor-not-allowed disabled:opacity-38',
|
|
52
|
+
icon: 'size-spacing-250 text-[20px]'
|
|
53
53
|
},
|
|
54
54
|
variants: {
|
|
55
55
|
color: {
|
|
@@ -61,8 +61,8 @@ export const toolbarButton = tv({
|
|
|
61
61
|
});
|
|
62
62
|
export const toolbarGroupItem = tv({
|
|
63
63
|
slots: {
|
|
64
|
-
base: 'layer-container state-layer before:rounded-full relative inline-flex size-
|
|
65
|
-
icon: 'size-
|
|
64
|
+
base: 'layer-container state-layer before:rounded-full relative inline-flex size-spacing-500 items-center justify-center rounded-full outline-none transition-colors md-sys-motion-fast-effects disabled:cursor-not-allowed disabled:opacity-38',
|
|
65
|
+
icon: 'size-spacing-250 text-[20px]'
|
|
66
66
|
},
|
|
67
67
|
variants: {
|
|
68
68
|
color: {
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { Meta, Canvas } from '@storybook/addon-docs/blocks';
|
|
2
|
+
import * as DisplayStories from './display/Display.stories.svelte';
|
|
3
|
+
import * as HeadlineStories from './headline/Headline.stories.svelte';
|
|
4
|
+
import * as TitleStories from './title/Title.stories.svelte';
|
|
5
|
+
import * as BodyStories from './body/Body.stories.svelte';
|
|
6
|
+
import * as LabelStories from './label/Label.stories.svelte';
|
|
7
|
+
|
|
8
|
+
<Meta title="Typography/Overview" />
|
|
9
|
+
|
|
10
|
+
# Typography
|
|
11
|
+
|
|
12
|
+
[M3 type scale](https://m3.material.io/styles/typography/type-scale-tokens) ·
|
|
13
|
+
`import { Display, Headline, Title, Body, Label } from '@noxlovette/material';`
|
|
14
|
+
|
|
15
|
+
Five components implement the M3 type scale. They share one prop shape, `size` (`small`,
|
|
16
|
+
`medium` by default, or `large`) and `emphasized`, and differ in role and element:
|
|
17
|
+
|
|
18
|
+
| Component | Element | Use for |
|
|
19
|
+
| ---------- | ------- | -------------------------------------------------------------------------------------------------- |
|
|
20
|
+
| `Display` | `<h1>` | Short, high-impact text or numerals: a hero, a splash screen, a big stat. Once per screen at most |
|
|
21
|
+
| `Headline` | `<h2>` | Page and section titles that need more weight than `Title` |
|
|
22
|
+
| `Title` | `<h3>` | Medium-emphasis text: section headers, card titles, list-item leads |
|
|
23
|
+
| `Body` | `<p>` | Running text. `medium` for most copy, `small` for dense UI text, `large` for lead paragraphs |
|
|
24
|
+
| `Label` | `<p>` | Standalone captions and custom controls. Buttons, tabs and chips already set their own label style |
|
|
25
|
+
|
|
26
|
+
Their element is fixed by role, not size. If the heading level doesn't fit the page outline,
|
|
27
|
+
pick the component that matches the level and adjust `size`; keep levels sequential.
|
|
28
|
+
|
|
29
|
+
## Emphasized
|
|
30
|
+
|
|
31
|
+
`emphasized` switches to the M3 emphasized style of the same size: the same size, line height and
|
|
32
|
+
tracking, with a heavier weight (400 → 500, or 500 → 700 for title-medium/small and labels). Use
|
|
33
|
+
it for selected, active or unread states, and for editorial emphasis. Don't add `font-bold` to a
|
|
34
|
+
baseline style instead.
|
|
35
|
+
|
|
36
|
+
<Canvas of={TitleStories.Sizes} />
|
|
37
|
+
|
|
38
|
+
## Utility classes
|
|
39
|
+
|
|
40
|
+
Outside these components, apply the styles as classes: `md-sys-typescale-<role>-<size>`, and
|
|
41
|
+
`md-sys-typescale-emphasized-<role>-<size>`. Each class sets font, weight, size, line height and
|
|
42
|
+
tracking together; don't combine it with `text-*`, `leading-*`, `tracking-*` or `font-*`.
|
|
43
|
+
|
|
44
|
+
The typefaces come from `--md-ref-typeface-brand` (display, headline, title-large) and
|
|
45
|
+
`--md-ref-typeface-plain` (everything else). Both default to `--font-sans`.
|
|
46
|
+
|
|
47
|
+
## Language height
|
|
48
|
+
|
|
49
|
+
Line heights follow the language of each element: medium by default, small for Latin, Cyrillic,
|
|
50
|
+
Greek and Hebrew languages, and taller for Burmese, Telugu and Urdu. Set `lang` on your `<html>`
|
|
51
|
+
(SvelteKit's template does) and on any passage in another language. To force a category, set
|
|
52
|
+
`data-md-language-height="small|medium|large|extra-large"` on an element.
|
|
53
|
+
|
|
54
|
+
## Accessibility
|
|
55
|
+
|
|
56
|
+
- **Headings.** `Display`, `Headline` and `Title` are headings; `Body` and `Label` never are. Use
|
|
57
|
+
a heading component for anything that titles a section.
|
|
58
|
+
- **Color.** None of them sets a color. Pair them with an `on-*` color role for the surface
|
|
59
|
+
they're on, especially at label sizes, where contrast matters most.
|
|
60
|
+
|
|
61
|
+
<Canvas of={DisplayStories.Sizes} />
|
|
62
|
+
|
|
63
|
+
<Canvas of={HeadlineStories.Sizes} />
|
|
64
|
+
|
|
65
|
+
<Canvas of={BodyStories.Sizes} />
|
|
66
|
+
|
|
67
|
+
<Canvas of={LabelStories.Sizes} />
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
const { Story } = defineMeta({
|
|
6
6
|
title: 'Typography/Body',
|
|
7
|
+
tags: ['autodocs'],
|
|
7
8
|
component: Body,
|
|
8
9
|
argTypes: {
|
|
9
10
|
size: {
|
|
@@ -22,7 +23,7 @@
|
|
|
22
23
|
<Story name="Playground">Body text used for longer passages of content.</Story>
|
|
23
24
|
|
|
24
25
|
<Story name="Sizes" asChild>
|
|
25
|
-
<div class="flex flex-col
|
|
26
|
+
<div class="gap-spacing-200 p-spacing-300 flex flex-col">
|
|
26
27
|
<Body size="small">Body small</Body>
|
|
27
28
|
<Body size="medium">Body medium</Body>
|
|
28
29
|
<Body size="large">Body large</Body>
|
|
@@ -2,29 +2,32 @@ import { type VariantProps } from 'tailwind-variants';
|
|
|
2
2
|
export type BodyVariants = VariantProps<typeof body>;
|
|
3
3
|
export declare const body: import("tailwind-variants").TVReturnType<{
|
|
4
4
|
emphasized: {
|
|
5
|
-
true: "
|
|
5
|
+
true: "";
|
|
6
|
+
false: "";
|
|
6
7
|
};
|
|
7
8
|
size: {
|
|
8
|
-
small: "
|
|
9
|
-
medium: "
|
|
10
|
-
large: "
|
|
9
|
+
small: "";
|
|
10
|
+
medium: "";
|
|
11
|
+
large: "";
|
|
11
12
|
};
|
|
12
13
|
}, undefined, "", {
|
|
13
14
|
emphasized: {
|
|
14
|
-
true: "
|
|
15
|
+
true: "";
|
|
16
|
+
false: "";
|
|
15
17
|
};
|
|
16
18
|
size: {
|
|
17
|
-
small: "
|
|
18
|
-
medium: "
|
|
19
|
-
large: "
|
|
19
|
+
small: "";
|
|
20
|
+
medium: "";
|
|
21
|
+
large: "";
|
|
20
22
|
};
|
|
21
23
|
}, undefined, import("tailwind-variants").TVReturnTypeLike<{
|
|
22
24
|
emphasized: {
|
|
23
|
-
true: "
|
|
25
|
+
true: "";
|
|
26
|
+
false: "";
|
|
24
27
|
};
|
|
25
28
|
size: {
|
|
26
|
-
small: "
|
|
27
|
-
medium: "
|
|
28
|
-
large: "
|
|
29
|
+
small: "";
|
|
30
|
+
medium: "";
|
|
31
|
+
large: "";
|
|
29
32
|
};
|
|
30
33
|
}, undefined>>;
|
|
@@ -2,13 +2,28 @@ import { tv } from 'tailwind-variants';
|
|
|
2
2
|
export const body = tv({
|
|
3
3
|
base: '',
|
|
4
4
|
variants: {
|
|
5
|
+
// `emphasized` swaps in the M3 emphasized style of the same size (heavier weight, same
|
|
6
|
+
// metrics). The class is picked in compoundVariants so only one typescale class is ever set.
|
|
5
7
|
emphasized: {
|
|
6
|
-
true: '
|
|
8
|
+
true: '',
|
|
9
|
+
false: ''
|
|
7
10
|
},
|
|
8
11
|
size: {
|
|
9
|
-
small: '
|
|
10
|
-
medium: '
|
|
11
|
-
large: '
|
|
12
|
+
small: '',
|
|
13
|
+
medium: '',
|
|
14
|
+
large: ''
|
|
12
15
|
}
|
|
16
|
+
},
|
|
17
|
+
compoundVariants: [
|
|
18
|
+
{ size: 'small', emphasized: false, class: 'md-sys-typescale-body-small' },
|
|
19
|
+
{ size: 'small', emphasized: true, class: 'md-sys-typescale-emphasized-body-small' },
|
|
20
|
+
{ size: 'medium', emphasized: false, class: 'md-sys-typescale-body-medium' },
|
|
21
|
+
{ size: 'medium', emphasized: true, class: 'md-sys-typescale-emphasized-body-medium' },
|
|
22
|
+
{ size: 'large', emphasized: false, class: 'md-sys-typescale-body-large' },
|
|
23
|
+
{ size: 'large', emphasized: true, class: 'md-sys-typescale-emphasized-body-large' }
|
|
24
|
+
],
|
|
25
|
+
defaultVariants: {
|
|
26
|
+
emphasized: false,
|
|
27
|
+
size: 'medium'
|
|
13
28
|
}
|
|
14
29
|
});
|
|
@@ -10,7 +10,8 @@ export interface BodyProps extends BodyVariants, HTMLAttributes<HTMLParagraphEle
|
|
|
10
10
|
*/
|
|
11
11
|
children: Snippet;
|
|
12
12
|
/**
|
|
13
|
-
*
|
|
13
|
+
* Use the M3 emphasized style (`md-sys-typescale-emphasized-body-*`): same size, heavier weight.
|
|
14
|
+
* Use it for selected, active, or unread states, or for editorial emphasis.
|
|
14
15
|
*/
|
|
15
16
|
emphasized?: boolean;
|
|
16
17
|
/**
|
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
const { Story } = defineMeta({
|
|
6
6
|
title: 'Typography/Display',
|
|
7
|
+
tags: ['autodocs'],
|
|
7
8
|
component: Display,
|
|
8
9
|
argTypes: {
|
|
9
10
|
size: {
|
|
@@ -22,7 +23,7 @@
|
|
|
22
23
|
<Story name="Playground">Display text</Story>
|
|
23
24
|
|
|
24
25
|
<Story name="Sizes" asChild>
|
|
25
|
-
<div class="flex flex-col
|
|
26
|
+
<div class="gap-spacing-200 p-spacing-300 flex flex-col">
|
|
26
27
|
<Display size="small">Display small</Display>
|
|
27
28
|
<Display size="medium">Display medium</Display>
|
|
28
29
|
<Display size="large">Display large</Display>
|
|
@@ -2,29 +2,32 @@ import { type VariantProps } from 'tailwind-variants';
|
|
|
2
2
|
export type DisplayVariants = VariantProps<typeof display>;
|
|
3
3
|
export declare const display: import("tailwind-variants").TVReturnType<{
|
|
4
4
|
emphasized: {
|
|
5
|
-
true: "
|
|
5
|
+
true: "";
|
|
6
|
+
false: "";
|
|
6
7
|
};
|
|
7
8
|
size: {
|
|
8
|
-
small: "
|
|
9
|
-
medium: "
|
|
10
|
-
large: "
|
|
9
|
+
small: "";
|
|
10
|
+
medium: "";
|
|
11
|
+
large: "";
|
|
11
12
|
};
|
|
12
13
|
}, undefined, "", {
|
|
13
14
|
emphasized: {
|
|
14
|
-
true: "
|
|
15
|
+
true: "";
|
|
16
|
+
false: "";
|
|
15
17
|
};
|
|
16
18
|
size: {
|
|
17
|
-
small: "
|
|
18
|
-
medium: "
|
|
19
|
-
large: "
|
|
19
|
+
small: "";
|
|
20
|
+
medium: "";
|
|
21
|
+
large: "";
|
|
20
22
|
};
|
|
21
23
|
}, undefined, import("tailwind-variants").TVReturnTypeLike<{
|
|
22
24
|
emphasized: {
|
|
23
|
-
true: "
|
|
25
|
+
true: "";
|
|
26
|
+
false: "";
|
|
24
27
|
};
|
|
25
28
|
size: {
|
|
26
|
-
small: "
|
|
27
|
-
medium: "
|
|
28
|
-
large: "
|
|
29
|
+
small: "";
|
|
30
|
+
medium: "";
|
|
31
|
+
large: "";
|
|
29
32
|
};
|
|
30
33
|
}, undefined>>;
|
|
@@ -2,13 +2,28 @@ import { tv } from 'tailwind-variants';
|
|
|
2
2
|
export const display = tv({
|
|
3
3
|
base: '',
|
|
4
4
|
variants: {
|
|
5
|
+
// `emphasized` swaps in the M3 emphasized style of the same size (heavier weight, same
|
|
6
|
+
// metrics). The class is picked in compoundVariants so only one typescale class is ever set.
|
|
5
7
|
emphasized: {
|
|
6
|
-
true: '
|
|
8
|
+
true: '',
|
|
9
|
+
false: ''
|
|
7
10
|
},
|
|
8
11
|
size: {
|
|
9
|
-
small: '
|
|
10
|
-
medium: '
|
|
11
|
-
large: '
|
|
12
|
+
small: '',
|
|
13
|
+
medium: '',
|
|
14
|
+
large: ''
|
|
12
15
|
}
|
|
16
|
+
},
|
|
17
|
+
compoundVariants: [
|
|
18
|
+
{ size: 'small', emphasized: false, class: 'md-sys-typescale-display-small' },
|
|
19
|
+
{ size: 'small', emphasized: true, class: 'md-sys-typescale-emphasized-display-small' },
|
|
20
|
+
{ size: 'medium', emphasized: false, class: 'md-sys-typescale-display-medium' },
|
|
21
|
+
{ size: 'medium', emphasized: true, class: 'md-sys-typescale-emphasized-display-medium' },
|
|
22
|
+
{ size: 'large', emphasized: false, class: 'md-sys-typescale-display-large' },
|
|
23
|
+
{ size: 'large', emphasized: true, class: 'md-sys-typescale-emphasized-display-large' }
|
|
24
|
+
],
|
|
25
|
+
defaultVariants: {
|
|
26
|
+
emphasized: false,
|
|
27
|
+
size: 'medium'
|
|
13
28
|
}
|
|
14
29
|
});
|
|
@@ -10,7 +10,8 @@ export type DisplayProps = DisplayVariants & HTMLAttributes<HTMLElement> & {
|
|
|
10
10
|
*/
|
|
11
11
|
children: Snippet;
|
|
12
12
|
/**
|
|
13
|
-
*
|
|
13
|
+
* Use the M3 emphasized style (`md-sys-typescale-emphasized-display-*`): same size, heavier weight.
|
|
14
|
+
* Use it for selected, active, or unread states, or for editorial emphasis.
|
|
14
15
|
*/
|
|
15
16
|
emphasized?: boolean;
|
|
16
17
|
/**
|