@noxlovette/material 0.5.1 → 0.6.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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 +25 -5
- 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 +46 -16
- package/dist/components/buttons/button-group/theme.js +14 -9
- 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 +34 -19
- package/dist/components/buttons/connected/theme.js +33 -10
- 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 +66 -49
- package/dist/components/buttons/split-button/SplitButton.svelte.d.ts +6 -11
- package/dist/components/buttons/split-button/theme.d.ts +111 -18
- package/dist/components/buttons/split-button/theme.js +75 -17
- package/dist/components/buttons/split-button/types.d.ts +24 -18
- package/dist/components/buttons/theme.d.ts +423 -231
- package/dist/components/buttons/theme.js +287 -381
- 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 +6 -6
- package/dist/components/chips/Chip.mdx +68 -0
- package/dist/components/chips/Chip.stories.svelte +4 -4
- package/dist/components/chips/theme.d.ts +1 -1
- package/dist/components/chips/theme.js +4 -4
- package/dist/components/containers/action-rail/ActionRail.stories.svelte +1 -0
- package/dist/components/containers/action-rail/theme.d.ts +1 -1
- package/dist/components/containers/action-rail/theme.js +2 -2
- package/dist/components/containers/app/theme.d.ts +1 -1
- package/dist/components/containers/app/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.d.ts +1 -1
- package/dist/components/containers/context-menu/theme.js +11 -11
- 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 +2 -2
- package/dist/components/containers/dialogue/theme.d.ts +1 -1
- package/dist/components/containers/dialogue/theme.js +4 -4
- package/dist/components/containers/dialogue/types.d.ts +1 -1
- 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 +7 -7
- package/dist/components/containers/divider/theme.js +3 -3
- package/dist/components/containers/index.d.ts +1 -1
- package/dist/components/containers/index.js +1 -1
- package/dist/components/containers/link-preview/theme.d.ts +1 -1
- package/dist/components/containers/link-preview/theme.js +3 -3
- 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 +141 -14
- 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 +2 -2
- 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/MenuSub.svelte +1 -1
- package/dist/components/containers/menu/menu-item/MenuItem.svelte +1 -1
- package/dist/components/containers/menu/theme.d.ts +1 -1
- package/dist/components/containers/menu/theme.js +9 -9
- 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.d.ts +1 -1
- package/dist/components/containers/pane/theme.js +131 -47
- 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.d.ts +1 -1
- package/dist/components/containers/popover/theme.js +4 -4
- package/dist/components/containers/scroll-area/theme.js +3 -3
- 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 +8 -8
- package/dist/components/date/theme.js +32 -32
- 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.d.ts +1 -1
- package/dist/components/forms/checkbox/theme.js +4 -4
- package/dist/components/forms/command/Command.stories.svelte +1 -0
- package/dist/components/forms/command/theme.d.ts +1 -1
- package/dist/components/forms/command/theme.js +10 -10
- package/dist/components/forms/pin/theme.d.ts +1 -1
- package/dist/components/forms/pin/theme.js +5 -5
- package/dist/components/forms/radio-group/RadioGroup.svelte +1 -1
- package/dist/components/forms/radio-group/theme.d.ts +1 -1
- package/dist/components/forms/radio-group/theme.js +6 -6
- 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 +46 -13
- package/dist/components/forms/search/theme.js +14 -9
- 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 +12 -4
- package/dist/components/forms/select/SelectItem.svelte +1 -1
- package/dist/components/forms/select/theme.d.ts +1 -1
- package/dist/components/forms/select/theme.js +14 -14
- 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 +15 -1
- package/dist/components/forms/slider/theme.js +29 -18
- 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.d.ts +1 -1
- package/dist/components/forms/switch/theme.js +7 -7
- 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 +1 -1
- package/dist/components/forms/textfield/theme.js +20 -20
- package/dist/components/forms/toggle-group/theme.d.ts +1 -1
- package/dist/components/forms/toggle-group/theme.js +3 -3
- package/dist/components/forms/tooltip/Tooltip.stories.svelte +1 -0
- package/dist/components/forms/tooltip/theme.d.ts +1 -1
- package/dist/components/forms/tooltip/theme.js +4 -4
- 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 +5 -5
- 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 +86 -19
- package/dist/components/nav/appbar/theme.js +160 -24
- 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.d.ts +1 -1
- package/dist/components/nav/breadcrumb/theme.js +6 -6
- 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.d.ts +3 -3
- package/dist/components/nav/navbar/theme.js +7 -7
- 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 +5 -2
- package/dist/components/nav/rail/RailItem.svelte +12 -9
- package/dist/components/nav/rail/theme.d.ts +1 -1
- package/dist/components/nav/rail/theme.js +14 -14
- package/dist/components/nav/rail/types.d.ts +8 -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.d.ts +1 -1
- package/dist/components/nav/tabs/theme.js +5 -5
- package/dist/components/pill/Pill.mdx +32 -0
- package/dist/components/pill/Pill.stories.svelte +1 -1
- package/dist/components/pill/theme.d.ts +2 -2
- package/dist/components/pill/theme.js +2 -2
- package/dist/components/progress/LinearProgress.svelte +2 -2
- 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 +4 -4
- package/dist/components/snackbar/theme.js +5 -5
- package/dist/components/table/Table.stories.svelte +1 -0
- package/dist/components/table/TableHeader.svelte +1 -1
- package/dist/components/table/theme.d.ts +1 -1
- package/dist/components/table/theme.js +4 -4
- package/dist/components/time/TimeField.stories.svelte +3 -2
- package/dist/components/time/TimeField.svelte +2 -2
- package/dist/components/time/TimepickerInput.svelte +1 -1
- package/dist/components/time/theme.d.ts +1 -1
- package/dist/components/time/theme.js +6 -6
- 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.d.ts +1 -1
- package/dist/components/toolbar/theme.js +15 -15
- 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 +16 -13
- package/dist/components/typography/body/theme.js +20 -5
- 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 +16 -13
- package/dist/components/typography/display/theme.js +20 -5
- 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 +16 -13
- package/dist/components/typography/headline/theme.js +20 -5
- 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 +5 -5
- package/dist/components/typography/kbd/theme.js +3 -3
- 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 +20 -5
- 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 +16 -13
- package/dist/components/typography/title/theme.js +20 -5
- package/dist/components/typography/title/types.d.ts +2 -1
- package/dist/index.css +2 -0
- package/dist/styles/component.css +78 -175
- package/dist/styles/elevation.css +9 -0
- package/dist/styles/layers.css +33 -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/theme.d.ts +1 -1
- package/dist/utils/icon/theme.js +1 -1
- package/dist/utils/tv.d.ts +6 -0
- package/dist/utils/tv.js +12 -0
- 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
|
@@ -13,23 +13,31 @@
|
|
|
13
13
|
argTypes: {
|
|
14
14
|
title: { control: 'text' },
|
|
15
15
|
subtitle: { control: 'text' },
|
|
16
|
+
size: { control: 'inline-radio', options: ['small', 'medium', 'large'] },
|
|
17
|
+
align: { control: 'inline-radio', options: ['start', 'center'] },
|
|
16
18
|
showBack: { control: 'boolean' },
|
|
17
19
|
ghost: { control: 'boolean' }
|
|
18
20
|
},
|
|
19
21
|
args: {
|
|
20
22
|
title: 'Inbox',
|
|
23
|
+
size: 'small',
|
|
24
|
+
align: 'start',
|
|
21
25
|
showBack: false,
|
|
22
26
|
ghost: true
|
|
23
27
|
}
|
|
24
28
|
});
|
|
25
29
|
</script>
|
|
26
30
|
|
|
31
|
+
<script lang="ts">
|
|
32
|
+
let scroller = $state<HTMLElement | null>(null);
|
|
33
|
+
</script>
|
|
34
|
+
|
|
27
35
|
<Story name="Playground">
|
|
28
36
|
{#snippet template(args)}
|
|
29
37
|
<AppBar {...args}>
|
|
30
38
|
{#snippet trailing()}
|
|
31
|
-
<ButtonIcon variant="
|
|
32
|
-
<ButtonIcon variant="
|
|
39
|
+
<ButtonIcon variant="standard" iconProps={{ name: 'search' }} />
|
|
40
|
+
<ButtonIcon variant="standard" iconProps={{ name: 'more_vert' }} />
|
|
33
41
|
{/snippet}
|
|
34
42
|
</AppBar>
|
|
35
43
|
{/snippet}
|
|
@@ -38,12 +46,94 @@
|
|
|
38
46
|
<Story
|
|
39
47
|
name="With Back and Subtitle"
|
|
40
48
|
args={{ title: 'Draft', subtitle: '3 recipients', showBack: true }}
|
|
49
|
+
>
|
|
50
|
+
{#snippet template(args)}
|
|
51
|
+
<AppBar {...args} />
|
|
52
|
+
{/snippet}
|
|
53
|
+
</Story>
|
|
54
|
+
|
|
55
|
+
<Story name="Medium flexible" args={{ title: 'Travel plans', size: 'medium', showBack: true }}>
|
|
56
|
+
{#snippet template(args)}
|
|
57
|
+
<AppBar {...args}>
|
|
58
|
+
{#snippet trailing()}
|
|
59
|
+
<ButtonIcon variant="standard" iconProps={{ name: 'search' }} />
|
|
60
|
+
<ButtonIcon variant="standard" iconProps={{ name: 'more_vert' }} />
|
|
61
|
+
{/snippet}
|
|
62
|
+
</AppBar>
|
|
63
|
+
{/snippet}
|
|
64
|
+
</Story>
|
|
65
|
+
|
|
66
|
+
<Story
|
|
67
|
+
name="Large flexible"
|
|
68
|
+
args={{ title: 'Travel plans', subtitle: '3 upcoming trips', size: 'large', showBack: true }}
|
|
41
69
|
>
|
|
70
|
+
{#snippet template(args)}
|
|
71
|
+
<AppBar {...args}>
|
|
72
|
+
{#snippet trailing()}
|
|
73
|
+
<ButtonIcon variant="standard" iconProps={{ name: 'more_vert' }} />
|
|
74
|
+
{/snippet}
|
|
75
|
+
</AppBar>
|
|
76
|
+
{/snippet}
|
|
77
|
+
</Story>
|
|
78
|
+
|
|
79
|
+
<Story name="Centered" args={{ title: 'Product', align: 'center' }}>
|
|
42
80
|
{#snippet template(args)}
|
|
43
81
|
<AppBar {...args}>
|
|
44
82
|
{#snippet leading()}
|
|
45
|
-
<ButtonIcon variant="
|
|
83
|
+
<ButtonIcon variant="standard" iconProps={{ name: 'menu' }} aria-label="Menu" />
|
|
84
|
+
{/snippet}
|
|
85
|
+
{#snippet trailing()}
|
|
86
|
+
<ButtonIcon
|
|
87
|
+
variant="standard"
|
|
88
|
+
iconProps={{ name: 'account_circle' }}
|
|
89
|
+
aria-label="Account"
|
|
90
|
+
/>
|
|
46
91
|
{/snippet}
|
|
47
92
|
</AppBar>
|
|
48
93
|
{/snippet}
|
|
49
94
|
</Story>
|
|
95
|
+
|
|
96
|
+
<Story
|
|
97
|
+
name="Responsive size"
|
|
98
|
+
args={{
|
|
99
|
+
title: 'Travel plans',
|
|
100
|
+
subtitle: 'Resize the viewport',
|
|
101
|
+
size: { small: 'small', medium: 'medium', large: 'large' }
|
|
102
|
+
}}
|
|
103
|
+
parameters={{ viewport: { defaultViewport: 'responsive' } }}
|
|
104
|
+
>
|
|
105
|
+
{#snippet template(args)}
|
|
106
|
+
<AppBar {...args} showBack>
|
|
107
|
+
{#snippet trailing()}
|
|
108
|
+
<ButtonIcon variant="standard" iconProps={{ name: 'more_vert' }} aria-label="More" />
|
|
109
|
+
{/snippet}
|
|
110
|
+
</AppBar>
|
|
111
|
+
{/snippet}
|
|
112
|
+
</Story>
|
|
113
|
+
|
|
114
|
+
<Story name="Search" asChild>
|
|
115
|
+
<AppBar search="Search products" title="Products">
|
|
116
|
+
{#snippet leading()}
|
|
117
|
+
<ButtonIcon variant="standard" iconProps={{ name: 'menu' }} aria-label="Menu" />
|
|
118
|
+
{/snippet}
|
|
119
|
+
{#snippet searchTrailing()}
|
|
120
|
+
<ButtonIcon variant="standard" iconProps={{ name: 'mic' }} aria-label="Voice search" />
|
|
121
|
+
{/snippet}
|
|
122
|
+
{#snippet trailing()}
|
|
123
|
+
<ButtonIcon variant="standard" iconProps={{ name: 'account_circle' }} aria-label="Account" />
|
|
124
|
+
{/snippet}
|
|
125
|
+
</AppBar>
|
|
126
|
+
</Story>
|
|
127
|
+
|
|
128
|
+
<Story name="Scroll container" asChild>
|
|
129
|
+
<div bind:this={scroller} class="h-[480px] overflow-y-auto">
|
|
130
|
+
<AppBar title="Scroll this box" scrollContainer={scroller} ghost />
|
|
131
|
+
{#each { length: 40 } as _, i (i)}
|
|
132
|
+
<p
|
|
133
|
+
class="md-sys-typescale-body-large text-md-sys-color-on-surface px-spacing-200 py-spacing-100"
|
|
134
|
+
>
|
|
135
|
+
Row {i + 1}
|
|
136
|
+
</p>
|
|
137
|
+
{/each}
|
|
138
|
+
</div>
|
|
139
|
+
</Story>
|
|
@@ -1,19 +1,4 @@
|
|
|
1
1
|
import AppBar from './AppBar.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 AppBar: $$__sveltets_2_IsomorphicComponent<Record<string, never>, {
|
|
16
|
-
[evt: string]: CustomEvent<any>;
|
|
17
|
-
}, {}, {}, string>;
|
|
18
|
-
type AppBar = InstanceType<typeof AppBar>;
|
|
2
|
+
declare const AppBar: import("svelte").Component<Record<string, never>, {}, "">;
|
|
3
|
+
type AppBar = ReturnType<typeof AppBar>;
|
|
19
4
|
export default AppBar;
|
|
@@ -5,17 +5,25 @@ Material 3 App Bar.
|
|
|
5
5
|
Top app bars provide content and actions related to the current screen.
|
|
6
6
|
They’re used for branding, screen titles, navigation, and actions.
|
|
7
7
|
|
|
8
|
+
Sizes: `small` (64dp, one line) and the Expressive `medium`/`large` flexible bars, whose
|
|
9
|
+
headline block wraps and grows. `size` also takes one value per breakpoint
|
|
10
|
+
(`{ small: 'small', large: 'large' }`), switched in CSS so server rendering needs no JS.
|
|
11
|
+
`align="center"` centres the title. Setting `search` makes it a search app bar.
|
|
12
|
+
|
|
13
|
+
The bar takes its on-scroll color once `scrollContainer` (default: the page) scrolls.
|
|
14
|
+
|
|
8
15
|
Publishes its measured height as `--appbar-height` on the document root, so any
|
|
9
16
|
`Pane`/`PaneGrid` on the page (`full`, the default) shrinks its `min-height` by
|
|
10
17
|
that amount with no props or wiring on either side — see Pane.svelte's doc
|
|
11
18
|
comment.
|
|
12
19
|
|
|
13
|
-
@see https://m3.material.io/components/
|
|
20
|
+
@see https://m3.material.io/components/app-bars/specs
|
|
14
21
|
-->
|
|
15
22
|
<script lang="ts">
|
|
16
|
-
import { appbar } from './theme.js';
|
|
23
|
+
import { appbar, appbarSize } from './theme.js';
|
|
17
24
|
import type { AppBarProps } from './types.js';
|
|
18
25
|
import clsx from 'clsx';
|
|
26
|
+
import ButtonIcon from '../../buttons/ButtonIcon.svelte';
|
|
19
27
|
|
|
20
28
|
let {
|
|
21
29
|
children,
|
|
@@ -27,31 +35,46 @@ comment.
|
|
|
27
35
|
leading,
|
|
28
36
|
class: className,
|
|
29
37
|
rowClass,
|
|
30
|
-
showBack,
|
|
38
|
+
showBack = false,
|
|
39
|
+
onback = () => history.back(),
|
|
40
|
+
size = 'small',
|
|
41
|
+
align = 'start',
|
|
42
|
+
search,
|
|
43
|
+
query = $bindable(''),
|
|
44
|
+
searchProps,
|
|
45
|
+
searchTrailing,
|
|
46
|
+
scrollContainer,
|
|
31
47
|
ghost = false,
|
|
32
48
|
...rest
|
|
33
49
|
}: AppBarProps = $props();
|
|
34
50
|
|
|
35
|
-
let
|
|
36
|
-
let scrolled = $derived(scrollY > 10);
|
|
51
|
+
let scrolled = $state(false);
|
|
37
52
|
let barHeight = $state(64);
|
|
38
53
|
|
|
39
|
-
|
|
40
|
-
|
|
54
|
+
$effect(() => {
|
|
55
|
+
const target = scrollContainer ?? window;
|
|
56
|
+
const read = () =>
|
|
57
|
+
(scrolled = (scrollContainer ? scrollContainer.scrollTop : window.scrollY) > 10);
|
|
58
|
+
read();
|
|
59
|
+
target.addEventListener('scroll', read, { passive: true });
|
|
60
|
+
return () => target.removeEventListener('scroll', read);
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
const isSearch = $derived(search !== undefined);
|
|
64
|
+
const noLeading = $derived(!leading && !showBack);
|
|
41
65
|
|
|
42
|
-
const
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
const
|
|
54
|
-
const rowFull = $derived(row({ class: clsx(rowClass) }));
|
|
66
|
+
const s = $derived(
|
|
67
|
+
appbar({
|
|
68
|
+
align: isSearch ? 'start' : align,
|
|
69
|
+
scrolled,
|
|
70
|
+
searchContainer: isSearch,
|
|
71
|
+
hasSearchTrailing: !!searchTrailing,
|
|
72
|
+
noLeading,
|
|
73
|
+
noTrailing: !trailing
|
|
74
|
+
})
|
|
75
|
+
);
|
|
76
|
+
// Search app bars are always the small, 64dp bar.
|
|
77
|
+
const sized = $derived(appbarSize(isSearch ? 'small' : size, !!subtitle));
|
|
55
78
|
|
|
56
79
|
function trackHeight(node: HTMLElement) {
|
|
57
80
|
const observer = new ResizeObserver((entries) => {
|
|
@@ -68,33 +91,63 @@ comment.
|
|
|
68
91
|
});
|
|
69
92
|
</script>
|
|
70
93
|
|
|
71
|
-
<
|
|
72
|
-
|
|
73
|
-
<
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
{
|
|
94
|
+
<nav {...rest} class={s.base({ class: clsx(className) })} {@attach trackHeight}>
|
|
95
|
+
<div class={s.row({ class: clsx(sized.row, rowClass) })}>
|
|
96
|
+
<div class={s.leading()}>
|
|
97
|
+
{#if leading}
|
|
98
|
+
{@render leading()}
|
|
99
|
+
{:else if showBack}
|
|
100
|
+
<ButtonIcon
|
|
101
|
+
variant="standard"
|
|
102
|
+
iconProps={{ name: 'arrow_back' }}
|
|
103
|
+
aria-label="Back"
|
|
104
|
+
onclick={onback}
|
|
105
|
+
/>
|
|
106
|
+
{/if}
|
|
77
107
|
</div>
|
|
78
|
-
<div class={textContainer()}>
|
|
79
|
-
|
|
80
|
-
{title}
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
<
|
|
84
|
-
|
|
85
|
-
|
|
108
|
+
<div class={s.textContainer({ class: sized.textContainer })}>
|
|
109
|
+
{#if isSearch}
|
|
110
|
+
{#if title}
|
|
111
|
+
<h1 {...titleProps} class={clsx('sr-only', titleProps?.class)}>{title}</h1>
|
|
112
|
+
{/if}
|
|
113
|
+
<label class={s.search()}>
|
|
114
|
+
<input
|
|
115
|
+
type="search"
|
|
116
|
+
{...searchProps}
|
|
117
|
+
placeholder={search}
|
|
118
|
+
aria-label={searchProps?.['aria-label'] ?? search}
|
|
119
|
+
bind:value={query}
|
|
120
|
+
class={s.searchInput({ class: clsx(searchProps?.class) })}
|
|
121
|
+
/>
|
|
122
|
+
{#if searchTrailing}
|
|
123
|
+
<span class={s.searchTrailing()}>{@render searchTrailing()}</span>
|
|
124
|
+
{/if}
|
|
125
|
+
</label>
|
|
126
|
+
{:else}
|
|
127
|
+
<h1 {...titleProps} class={s.title({ class: clsx(sized.title, titleProps?.class) })}>
|
|
128
|
+
{title}
|
|
129
|
+
</h1>
|
|
130
|
+
{#if subtitle}
|
|
131
|
+
<p
|
|
132
|
+
{...subtitleProps}
|
|
133
|
+
class={s.subtitle({ class: clsx(sized.subtitle, subtitleProps?.class) })}
|
|
134
|
+
>
|
|
135
|
+
{subtitle}
|
|
136
|
+
</p>
|
|
137
|
+
{/if}
|
|
86
138
|
{/if}
|
|
87
139
|
</div>
|
|
88
|
-
<div class={
|
|
140
|
+
<div class={s.trailing()}>
|
|
89
141
|
{@render trailing?.()}
|
|
90
142
|
</div>
|
|
91
143
|
</div>
|
|
92
144
|
{#if children}
|
|
93
|
-
<div class={childrenRow()}>
|
|
145
|
+
<div class={s.childrenRow()}>
|
|
94
146
|
{@render children()}
|
|
95
147
|
</div>
|
|
96
148
|
{/if}
|
|
97
149
|
</nav>
|
|
150
|
+
|
|
98
151
|
{#if ghost}
|
|
99
|
-
<div class={
|
|
152
|
+
<div class={s.ghost()} style="height: {barHeight}px" aria-hidden="true"></div>
|
|
100
153
|
{/if}
|
|
@@ -5,13 +5,20 @@ import type { AppBarProps } from './types.js';
|
|
|
5
5
|
* Top app bars provide content and actions related to the current screen.
|
|
6
6
|
* They’re used for branding, screen titles, navigation, and actions.
|
|
7
7
|
*
|
|
8
|
+
* Sizes: `small` (64dp, one line) and the Expressive `medium`/`large` flexible bars, whose
|
|
9
|
+
* headline block wraps and grows. `size` also takes one value per breakpoint
|
|
10
|
+
* (`{ small: 'small', large: 'large' }`), switched in CSS so server rendering needs no JS.
|
|
11
|
+
* `align="center"` centres the title. Setting `search` makes it a search app bar.
|
|
12
|
+
*
|
|
13
|
+
* The bar takes its on-scroll color once `scrollContainer` (default: the page) scrolls.
|
|
14
|
+
*
|
|
8
15
|
* Publishes its measured height as `--appbar-height` on the document root, so any
|
|
9
16
|
* `Pane`/`PaneGrid` on the page (`full`, the default) shrinks its `min-height` by
|
|
10
17
|
* that amount with no props or wiring on either side — see Pane.svelte's doc
|
|
11
18
|
* comment.
|
|
12
19
|
*
|
|
13
|
-
* @see https://m3.material.io/components/
|
|
20
|
+
* @see https://m3.material.io/components/app-bars/specs
|
|
14
21
|
*/
|
|
15
|
-
declare const AppBar: import("svelte").Component<AppBarProps, {}, "">;
|
|
22
|
+
declare const AppBar: import("svelte").Component<AppBarProps, {}, "query">;
|
|
16
23
|
type AppBar = ReturnType<typeof AppBar>;
|
|
17
24
|
export default AppBar;
|
|
@@ -1,30 +1,54 @@
|
|
|
1
|
-
import { type VariantProps } from '
|
|
1
|
+
import { type VariantProps } from '../../../utils/tv.js';
|
|
2
|
+
import type { Breakpoint } from '../../containers/pane/theme.js';
|
|
2
3
|
export type AppbarVariants = VariantProps<typeof appbar>;
|
|
4
|
+
export type AppBarSize = 'small' | 'medium' | 'large';
|
|
5
|
+
/**
|
|
6
|
+
* Resolves `size` (one value, or one per breakpoint like `PaneGrid`'s props) into per-slot
|
|
7
|
+
* classes. Sizes cascade upward from the smallest breakpoint given, like Tailwind prefixes.
|
|
8
|
+
*/
|
|
9
|
+
export declare function appbarSize(size: AppBarSize | Partial<Record<Breakpoint, AppBarSize>>, hasSubtitle: boolean): Record<'row' | 'textContainer' | 'title' | 'subtitle', string>;
|
|
3
10
|
export declare const appbar: import("tailwind-variants").TVReturnType<{
|
|
11
|
+
align: {
|
|
12
|
+
start: {
|
|
13
|
+
row: string;
|
|
14
|
+
textContainer: string;
|
|
15
|
+
};
|
|
16
|
+
center: {
|
|
17
|
+
row: string;
|
|
18
|
+
textContainer: string;
|
|
19
|
+
};
|
|
20
|
+
};
|
|
4
21
|
scrolled: {
|
|
5
22
|
true: {
|
|
6
23
|
base: string;
|
|
24
|
+
search: string;
|
|
7
25
|
};
|
|
8
26
|
false: {
|
|
9
27
|
base: string;
|
|
28
|
+
search: string;
|
|
10
29
|
};
|
|
11
30
|
};
|
|
12
31
|
searchContainer: {
|
|
13
|
-
true: "";
|
|
14
|
-
false: "";
|
|
15
|
-
};
|
|
16
|
-
noTrailing: {
|
|
17
32
|
true: {
|
|
33
|
+
row: string;
|
|
18
34
|
textContainer: string;
|
|
19
35
|
};
|
|
20
36
|
false: "";
|
|
21
37
|
};
|
|
22
|
-
|
|
38
|
+
hasSearchTrailing: {
|
|
23
39
|
true: {
|
|
24
|
-
|
|
40
|
+
search: string;
|
|
25
41
|
};
|
|
26
42
|
false: "";
|
|
27
43
|
};
|
|
44
|
+
noTrailing: {
|
|
45
|
+
true: "";
|
|
46
|
+
false: "";
|
|
47
|
+
};
|
|
48
|
+
noLeading: {
|
|
49
|
+
true: "";
|
|
50
|
+
false: "";
|
|
51
|
+
};
|
|
28
52
|
}, {
|
|
29
53
|
base: string;
|
|
30
54
|
row: string;
|
|
@@ -35,31 +59,51 @@ export declare const appbar: import("tailwind-variants").TVReturnType<{
|
|
|
35
59
|
subtitle: string;
|
|
36
60
|
leading: string;
|
|
37
61
|
trailing: string;
|
|
62
|
+
search: string;
|
|
63
|
+
searchInput: string;
|
|
64
|
+
searchTrailing: string;
|
|
38
65
|
}, undefined, {
|
|
66
|
+
align: {
|
|
67
|
+
start: {
|
|
68
|
+
row: string;
|
|
69
|
+
textContainer: string;
|
|
70
|
+
};
|
|
71
|
+
center: {
|
|
72
|
+
row: string;
|
|
73
|
+
textContainer: string;
|
|
74
|
+
};
|
|
75
|
+
};
|
|
39
76
|
scrolled: {
|
|
40
77
|
true: {
|
|
41
78
|
base: string;
|
|
79
|
+
search: string;
|
|
42
80
|
};
|
|
43
81
|
false: {
|
|
44
82
|
base: string;
|
|
83
|
+
search: string;
|
|
45
84
|
};
|
|
46
85
|
};
|
|
47
86
|
searchContainer: {
|
|
48
|
-
true: "";
|
|
49
|
-
false: "";
|
|
50
|
-
};
|
|
51
|
-
noTrailing: {
|
|
52
87
|
true: {
|
|
88
|
+
row: string;
|
|
53
89
|
textContainer: string;
|
|
54
90
|
};
|
|
55
91
|
false: "";
|
|
56
92
|
};
|
|
57
|
-
|
|
93
|
+
hasSearchTrailing: {
|
|
58
94
|
true: {
|
|
59
|
-
|
|
95
|
+
search: string;
|
|
60
96
|
};
|
|
61
97
|
false: "";
|
|
62
98
|
};
|
|
99
|
+
noTrailing: {
|
|
100
|
+
true: "";
|
|
101
|
+
false: "";
|
|
102
|
+
};
|
|
103
|
+
noLeading: {
|
|
104
|
+
true: "";
|
|
105
|
+
false: "";
|
|
106
|
+
};
|
|
63
107
|
}, {
|
|
64
108
|
base: string;
|
|
65
109
|
row: string;
|
|
@@ -70,31 +114,51 @@ export declare const appbar: import("tailwind-variants").TVReturnType<{
|
|
|
70
114
|
subtitle: string;
|
|
71
115
|
leading: string;
|
|
72
116
|
trailing: string;
|
|
117
|
+
search: string;
|
|
118
|
+
searchInput: string;
|
|
119
|
+
searchTrailing: string;
|
|
73
120
|
}, import("tailwind-variants").TVReturnTypeLike<{
|
|
121
|
+
align: {
|
|
122
|
+
start: {
|
|
123
|
+
row: string;
|
|
124
|
+
textContainer: string;
|
|
125
|
+
};
|
|
126
|
+
center: {
|
|
127
|
+
row: string;
|
|
128
|
+
textContainer: string;
|
|
129
|
+
};
|
|
130
|
+
};
|
|
74
131
|
scrolled: {
|
|
75
132
|
true: {
|
|
76
133
|
base: string;
|
|
134
|
+
search: string;
|
|
77
135
|
};
|
|
78
136
|
false: {
|
|
79
137
|
base: string;
|
|
138
|
+
search: string;
|
|
80
139
|
};
|
|
81
140
|
};
|
|
82
141
|
searchContainer: {
|
|
83
|
-
true: "";
|
|
84
|
-
false: "";
|
|
85
|
-
};
|
|
86
|
-
noTrailing: {
|
|
87
142
|
true: {
|
|
143
|
+
row: string;
|
|
88
144
|
textContainer: string;
|
|
89
145
|
};
|
|
90
146
|
false: "";
|
|
91
147
|
};
|
|
92
|
-
|
|
148
|
+
hasSearchTrailing: {
|
|
93
149
|
true: {
|
|
94
|
-
|
|
150
|
+
search: string;
|
|
95
151
|
};
|
|
96
152
|
false: "";
|
|
97
153
|
};
|
|
154
|
+
noTrailing: {
|
|
155
|
+
true: "";
|
|
156
|
+
false: "";
|
|
157
|
+
};
|
|
158
|
+
noLeading: {
|
|
159
|
+
true: "";
|
|
160
|
+
false: "";
|
|
161
|
+
};
|
|
98
162
|
}, {
|
|
99
163
|
base: string;
|
|
100
164
|
row: string;
|
|
@@ -105,4 +169,7 @@ export declare const appbar: import("tailwind-variants").TVReturnType<{
|
|
|
105
169
|
subtitle: string;
|
|
106
170
|
leading: string;
|
|
107
171
|
trailing: string;
|
|
172
|
+
search: string;
|
|
173
|
+
searchInput: string;
|
|
174
|
+
searchTrailing: string;
|
|
108
175
|
}>>;
|