@noxlovette/material 0.3.3 → 0.4.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -0
- package/dist/actions/index.d.ts +1 -0
- package/dist/actions/index.js +1 -0
- package/dist/actions/rovingFocusGroup.d.ts +20 -0
- package/dist/actions/rovingFocusGroup.js +82 -0
- package/dist/components/badge/theme.d.ts +8 -8
- package/dist/components/buttons/button-group/ButtonGroup.stories.svelte +83 -0
- package/dist/components/buttons/button-group/ButtonGroup.stories.svelte.d.ts +19 -0
- package/dist/components/buttons/button-group/ButtonGroup.svelte +10 -29
- package/dist/components/buttons/button-group/ButtonGroup.svelte.d.ts +7 -3
- package/dist/components/buttons/button-group/index.d.ts +0 -1
- package/dist/components/buttons/button-group/index.js +3 -1
- package/dist/components/buttons/button-group/theme.d.ts +17 -103
- package/dist/components/buttons/button-group/theme.js +7 -35
- package/dist/components/buttons/button-group/types.d.ts +9 -20
- package/dist/components/buttons/connected/ConnectedButtonGroup.stories.svelte +118 -0
- package/dist/components/buttons/connected/ConnectedButtonGroup.stories.svelte.d.ts +19 -0
- package/dist/components/buttons/connected/ConnectedButtonGroup.svelte +52 -0
- package/dist/components/buttons/connected/ConnectedButtonGroup.svelte.d.ts +12 -0
- package/dist/components/buttons/connected/ConnectedButtonGroupItem.svelte +37 -0
- package/dist/components/buttons/connected/ConnectedButtonGroupItem.svelte.d.ts +9 -0
- package/dist/components/buttons/connected/index.d.ts +3 -1
- package/dist/components/buttons/connected/index.js +3 -1
- package/dist/components/buttons/connected/theme.d.ts +125 -0
- package/dist/components/buttons/connected/theme.js +38 -0
- package/dist/components/buttons/connected/types.d.ts +32 -13
- package/dist/components/buttons/index.d.ts +1 -0
- package/dist/components/buttons/index.js +1 -0
- package/dist/components/buttons/split-button/SplitButton.stories.svelte +103 -0
- package/dist/components/buttons/split-button/SplitButton.stories.svelte.d.ts +19 -0
- package/dist/components/buttons/split-button/SplitButton.svelte +104 -0
- package/dist/components/buttons/split-button/SplitButton.svelte.d.ts +19 -0
- package/dist/components/buttons/split-button/index.d.ts +3 -0
- package/dist/components/{containers/panes → buttons/split-button}/index.js +1 -3
- package/dist/components/buttons/split-button/theme.d.ts +35 -0
- package/dist/components/buttons/split-button/theme.js +26 -0
- package/dist/components/buttons/split-button/types.d.ts +33 -0
- package/dist/components/buttons/theme.d.ts +142 -142
- package/dist/components/buttons/theme.js +2 -2
- package/dist/components/cards/Card.stories.svelte +58 -0
- package/dist/components/cards/Card.stories.svelte.d.ts +2 -17
- package/dist/components/cards/Card.svelte +76 -8
- package/dist/components/cards/theme.d.ts +26 -14
- package/dist/components/cards/theme.js +5 -1
- package/dist/components/cards/types.d.ts +39 -1
- package/dist/components/chips/Chip.stories.svelte +64 -0
- package/dist/components/chips/Chip.stories.svelte.d.ts +19 -0
- package/dist/components/chips/Chip.svelte +115 -0
- package/dist/components/chips/Chip.svelte.d.ts +14 -0
- package/dist/components/chips/index.d.ts +3 -0
- package/dist/components/{containers/merger → chips}/index.js +2 -1
- package/dist/components/chips/theme.d.ts +78 -0
- package/dist/components/chips/theme.js +72 -0
- package/dist/components/chips/types.d.ts +43 -0
- package/dist/components/containers/action-rail/ActionRail.stories.svelte +36 -0
- package/dist/components/containers/{panes/SinglePane.stories.svelte.d.ts → action-rail/ActionRail.stories.svelte.d.ts} +4 -4
- package/dist/components/containers/action-rail/ActionRail.svelte +35 -0
- package/dist/components/containers/action-rail/ActionRail.svelte.d.ts +17 -0
- package/dist/components/containers/action-rail/index.d.ts +3 -0
- package/dist/components/containers/action-rail/index.js +6 -0
- package/dist/components/containers/action-rail/theme.d.ts +45 -0
- package/dist/components/containers/action-rail/theme.js +26 -0
- package/dist/components/containers/action-rail/types.d.ts +20 -0
- package/dist/components/containers/action-rail/types.js +1 -0
- package/dist/components/containers/app/App.svelte +6 -6
- package/dist/components/containers/app/App.svelte.d.ts +4 -2
- package/dist/components/containers/app/theme.d.ts +1 -1
- package/dist/components/containers/app/types.d.ts +9 -4
- package/dist/components/containers/bottom-sheet/BottomSheet.stories.svelte +1 -1
- package/dist/components/containers/bottom-sheet/BottomSheet.svelte +1 -1
- package/dist/components/containers/context-menu/ContextMenu.stories.svelte +44 -0
- package/dist/components/containers/context-menu/ContextMenu.svelte +21 -5
- package/dist/components/containers/context-menu/ContextMenu.svelte.d.ts +11 -0
- package/dist/components/containers/context-menu/theme.d.ts +20 -2
- package/dist/components/containers/context-menu/theme.js +31 -8
- package/dist/components/containers/context-menu/types.d.ts +14 -2
- package/dist/components/containers/dialogue/theme.d.ts +20 -20
- package/dist/components/containers/divider/theme.d.ts +17 -17
- package/dist/components/containers/index.d.ts +2 -3
- package/dist/components/containers/index.js +2 -3
- package/dist/components/containers/link-preview/theme.d.ts +11 -11
- package/dist/components/containers/list/theme.d.ts +14 -14
- package/dist/components/containers/list/theme.js +1 -1
- package/dist/components/containers/menu/Menu.stories.svelte +105 -3
- package/dist/components/containers/menu/Menu.stories.svelte.d.ts +2 -17
- package/dist/components/containers/menu/Menu.svelte +9 -7
- package/dist/components/containers/menu/MenuCheckboxItem.svelte +55 -0
- package/dist/components/containers/menu/MenuCheckboxItem.svelte.d.ts +25 -0
- package/dist/components/containers/menu/MenuGroup.svelte +43 -0
- package/dist/components/containers/menu/MenuGroup.svelte.d.ts +28 -0
- package/dist/components/containers/menu/MenuRadioGroup.svelte +39 -0
- package/dist/components/containers/menu/MenuRadioGroup.svelte.d.ts +27 -0
- package/dist/components/containers/menu/MenuRadioItem.svelte +49 -0
- package/dist/components/containers/menu/MenuRadioItem.svelte.d.ts +17 -0
- package/dist/components/containers/menu/MenuSub.svelte +91 -0
- package/dist/components/containers/menu/MenuSub.svelte.d.ts +29 -0
- package/dist/components/containers/menu/index.d.ts +7 -0
- package/dist/components/containers/menu/index.js +8 -0
- package/dist/components/containers/menu/menu-item/MenuItem.svelte +71 -0
- package/dist/components/containers/{menu-item → menu/menu-item}/MenuItem.svelte.d.ts +2 -1
- package/dist/components/containers/{menu-item → menu/menu-item}/types.d.ts +5 -1
- package/dist/components/containers/menu/menu-item/types.js +1 -0
- package/dist/components/containers/menu/theme.d.ts +68 -0
- package/dist/components/containers/menu/theme.js +36 -0
- package/dist/components/containers/menu/types.d.ts +113 -2
- package/dist/components/containers/pane/DraggablePane.stories.svelte +199 -0
- package/dist/components/containers/pane/DraggablePane.stories.svelte.d.ts +4 -0
- package/dist/components/containers/pane/DraggablePane.svelte +533 -0
- package/dist/components/containers/pane/DraggablePane.svelte.d.ts +29 -0
- package/dist/components/containers/pane/Pane.stories.svelte +104 -0
- package/dist/components/containers/pane/Pane.stories.svelte.d.ts +19 -0
- package/dist/components/containers/pane/Pane.svelte +78 -0
- package/dist/components/containers/pane/Pane.svelte.d.ts +18 -0
- package/dist/components/containers/pane/PaneGrid.stories.svelte +134 -0
- package/dist/components/containers/pane/PaneGrid.stories.svelte.d.ts +19 -0
- package/dist/components/containers/pane/PaneGrid.svelte +43 -0
- package/dist/components/containers/pane/PaneGrid.svelte.d.ts +13 -0
- package/dist/components/containers/pane/PaneHandle.svelte +90 -0
- package/dist/components/containers/pane/PaneHandle.svelte.d.ts +12 -0
- package/dist/components/containers/pane/dragStore.svelte.d.ts +16 -0
- package/dist/components/containers/pane/dragStore.svelte.js +38 -0
- package/dist/components/containers/pane/index.d.ts +8 -0
- package/dist/components/containers/pane/index.js +11 -0
- package/dist/components/containers/pane/resizeStore.svelte.d.ts +10 -0
- package/dist/components/containers/pane/resizeStore.svelte.js +30 -0
- package/dist/components/containers/pane/theme.d.ts +571 -0
- package/dist/components/containers/pane/theme.js +211 -0
- package/dist/components/containers/pane/types.d.ts +249 -0
- package/dist/components/containers/pane/types.js +1 -0
- package/dist/components/containers/popover/Popover.stories.svelte +4 -4
- package/dist/components/containers/popover/Popover.svelte +3 -1
- package/dist/components/containers/popover/theme.d.ts +20 -20
- package/dist/components/containers/popover/types.d.ts +6 -2
- package/dist/components/containers/scroll-area/theme.d.ts +2 -2
- package/dist/components/containers/side-sheet/SideSheet.stories.svelte +16 -24
- package/dist/components/containers/side-sheet/SideSheet.svelte +73 -7
- package/dist/components/containers/side-sheet/SideSheet.svelte.d.ts +5 -0
- package/dist/components/containers/stack/theme.d.ts +44 -44
- package/dist/components/date/DateField.stories.svelte +57 -0
- package/dist/components/{containers/panes/SplitPane.stories.svelte.d.ts → date/DateField.stories.svelte.d.ts} +4 -4
- package/dist/components/date/DateField.svelte +11 -2
- package/dist/components/date/DateRangeField.stories.svelte +53 -0
- package/dist/components/{containers/panes/SupportingPane.stories.svelte.d.ts → date/DateRangeField.stories.svelte.d.ts} +4 -4
- package/dist/components/date/DateRangeField.svelte +2 -1
- package/dist/components/date/theme.d.ts +73 -4
- package/dist/components/date/theme.js +95 -26
- package/dist/components/date/types.d.ts +5 -0
- package/dist/components/forms/checkbox/Checkbox.svelte +7 -9
- package/dist/components/forms/checkbox/theme.d.ts +8 -8
- package/dist/components/forms/checkbox/theme.js +31 -9
- package/dist/components/forms/command/theme.d.ts +35 -35
- package/dist/components/forms/pin/theme.d.ts +2 -2
- package/dist/components/forms/radio-group/theme.d.ts +2 -2
- package/dist/components/forms/search/theme.d.ts +8 -8
- package/dist/components/forms/select/Select.svelte +3 -2
- package/dist/components/forms/select/theme.d.ts +26 -2
- package/dist/components/forms/select/theme.js +56 -22
- package/dist/components/forms/slider/theme.d.ts +20 -20
- package/dist/components/forms/switch/theme.d.ts +2 -2
- package/dist/components/forms/textfield/Textfield.stories.svelte +22 -0
- package/dist/components/forms/textfield/Textfield.svelte +10 -1
- package/dist/components/forms/textfield/theme.d.ts +44 -2
- package/dist/components/forms/textfield/theme.js +56 -16
- package/dist/components/forms/toggle-group/ToggleGroup.svelte +2 -2
- package/dist/components/forms/toggle-group/ToggleGroup.svelte.d.ts +2 -2
- package/dist/components/forms/toggle-group/ToggleGroupItem.svelte +1 -1
- package/dist/components/forms/toggle-group/ToggleGroupItem.svelte.d.ts +1 -1
- package/dist/components/forms/toggle-group/theme.d.ts +16 -16
- package/dist/components/forms/toggle-group/types.d.ts +2 -2
- package/dist/components/forms/tooltip/Tooltip.svelte +1 -1
- package/dist/components/forms/tooltip/theme.d.ts +2 -2
- package/dist/components/index.d.ts +1 -0
- package/dist/components/index.js +1 -0
- package/dist/components/misc/Avatar.stories.svelte +8 -0
- package/dist/components/misc/Avatar.svelte +35 -10
- package/dist/components/misc/DicebearAvatarBuilder.d.ts +59 -0
- package/dist/components/misc/DicebearAvatarBuilder.js +115 -0
- package/dist/components/misc/ThemeSettings.svelte +1 -1
- package/dist/components/misc/ThemeSwitcher.svelte +2 -2
- package/dist/components/misc/dicebearStyles.d.ts +21 -0
- package/dist/components/misc/dicebearStyles.js +169 -0
- package/dist/components/misc/index.d.ts +3 -0
- package/dist/components/misc/index.js +3 -0
- package/dist/components/misc/materialAvatarPalette.d.ts +6 -0
- package/dist/components/misc/materialAvatarPalette.js +44 -0
- package/dist/components/misc/theme.d.ts +20 -2
- package/dist/components/misc/theme.js +7 -1
- package/dist/components/misc/types.d.ts +20 -2
- package/dist/components/nav/appbar/AppBar.stories.svelte +1 -1
- package/dist/components/nav/appbar/AppBar.svelte +46 -15
- package/dist/components/nav/appbar/AppBar.svelte.d.ts +5 -0
- package/dist/components/nav/appbar/theme.d.ts +20 -14
- package/dist/components/nav/appbar/theme.js +11 -7
- package/dist/components/nav/appbar/types.d.ts +3 -1
- package/dist/components/nav/breadcrumb/Breadcrumb.stories.svelte +50 -0
- package/dist/components/nav/breadcrumb/Breadcrumb.stories.svelte.d.ts +19 -0
- package/dist/components/nav/breadcrumb/Breadcrumb.svelte +46 -0
- package/dist/components/nav/breadcrumb/Breadcrumb.svelte.d.ts +13 -0
- package/dist/components/nav/breadcrumb/index.d.ts +3 -0
- package/dist/components/nav/breadcrumb/index.js +6 -0
- package/dist/components/nav/breadcrumb/theme.d.ts +84 -0
- package/dist/components/nav/breadcrumb/theme.js +35 -0
- package/dist/components/nav/breadcrumb/types.d.ts +14 -0
- package/dist/components/nav/breadcrumb/types.js +1 -0
- package/dist/components/nav/index.d.ts +1 -0
- package/dist/components/nav/index.js +1 -0
- package/dist/components/nav/navbar/theme.d.ts +19 -19
- package/dist/components/nav/rail/Rail.stories.svelte +1 -5
- package/dist/components/nav/rail/Rail.svelte +3 -25
- package/dist/components/nav/rail/theme.d.ts +4 -4
- package/dist/components/nav/rail/types.d.ts +0 -5
- package/dist/components/nav/tabs/TabHolder.svelte +2 -1
- package/dist/components/nav/tabs/theme.d.ts +21 -21
- package/dist/components/nav/tabs/theme.js +6 -0
- package/dist/components/nav/tabs/types.d.ts +2 -2
- package/dist/components/pill/theme.d.ts +35 -35
- package/dist/components/snackbar/theme.d.ts +8 -8
- package/dist/components/table/Table.stories.svelte +267 -0
- package/dist/components/table/Table.stories.svelte.d.ts +19 -0
- package/dist/components/table/Table.svelte +1 -1
- package/dist/components/table/TableBody.svelte +16 -3
- package/dist/components/table/TableBody.svelte.d.ts +5 -1
- package/dist/components/table/TableRow.svelte +1 -1
- package/dist/components/table/theme.d.ts +2 -2
- package/dist/components/table/theme.js +2 -2
- package/dist/components/table/types.d.ts +7 -0
- package/dist/components/time/theme.d.ts +29 -29
- package/dist/components/toolbar/Toolbar.stories.svelte +71 -0
- package/dist/components/toolbar/Toolbar.stories.svelte.d.ts +19 -0
- package/dist/components/toolbar/Toolbar.svelte +19 -3
- package/dist/components/toolbar/Toolbar.svelte.d.ts +8 -2
- package/dist/components/toolbar/ToolbarButton.svelte +28 -4
- package/dist/components/toolbar/ToolbarDivider.svelte +4 -3
- package/dist/components/toolbar/ToolbarGroup.svelte +7 -2
- package/dist/components/toolbar/ToolbarGroupItem.svelte +29 -4
- package/dist/components/toolbar/ToolbarSection.svelte +35 -0
- package/dist/components/toolbar/ToolbarSection.svelte.d.ts +9 -0
- package/dist/components/toolbar/ToolbarSpacer.svelte +18 -0
- package/dist/components/toolbar/ToolbarSpacer.svelte.d.ts +9 -0
- package/dist/components/toolbar/index.d.ts +2 -0
- package/dist/components/toolbar/index.js +2 -0
- package/dist/components/toolbar/theme.d.ts +36 -21
- package/dist/components/toolbar/theme.js +27 -11
- package/dist/components/toolbar/types.d.ts +37 -4
- package/dist/components/typography/body/theme.d.ts +14 -14
- package/dist/components/typography/display/theme.d.ts +14 -14
- package/dist/components/typography/headline/theme.d.ts +14 -14
- package/dist/components/typography/kbd/Kbd.stories.svelte +1 -1
- package/dist/components/typography/kbd/theme.d.ts +8 -8
- package/dist/components/typography/label/theme.d.ts +14 -14
- package/dist/components/typography/title/theme.d.ts +14 -14
- package/dist/styles/component.css +126 -4
- package/dist/styles/motion.css +6 -3
- package/dist/utils/Layer.svelte +7 -3
- package/dist/utils/Theme.svelte +20 -20
- package/dist/utils/ThemeScript.svelte +1 -1
- package/dist/utils/icon/theme.d.ts +14 -14
- package/dist/utils/theme.svelte.js +1 -1
- package/package.json +39 -38
- package/bin/install-skill.js +0 -29
- package/dist/components/buttons/button-group/ButtonGroupItem.svelte +0 -41
- package/dist/components/buttons/button-group/ButtonGroupItem.svelte.d.ts +0 -8
- package/dist/components/buttons/connected/ConnectedButtons.svelte +0 -14
- package/dist/components/buttons/connected/ConnectedButtons.svelte.d.ts +0 -8
- package/dist/components/containers/menu-item/MenuItem.svelte +0 -74
- package/dist/components/containers/merger/InputMerger.svelte +0 -24
- package/dist/components/containers/merger/InputMerger.svelte.d.ts +0 -14
- package/dist/components/containers/merger/index.d.ts +0 -2
- package/dist/components/containers/merger/theme.d.ts +0 -1
- package/dist/components/containers/merger/theme.js +0 -4
- package/dist/components/containers/panes/SinglePane.stories.svelte +0 -67
- package/dist/components/containers/panes/SinglePane.svelte +0 -32
- package/dist/components/containers/panes/SinglePane.svelte.d.ts +0 -5
- package/dist/components/containers/panes/SplitPane.stories.svelte +0 -124
- package/dist/components/containers/panes/SplitPane.svelte +0 -144
- package/dist/components/containers/panes/SplitPane.svelte.d.ts +0 -8
- package/dist/components/containers/panes/SupportingPane.stories.svelte +0 -113
- package/dist/components/containers/panes/SupportingPane.svelte +0 -175
- package/dist/components/containers/panes/SupportingPane.svelte.d.ts +0 -9
- package/dist/components/containers/panes/index.d.ts +0 -5
- package/dist/components/containers/panes/theme.d.ts +0 -490
- package/dist/components/containers/panes/theme.js +0 -185
- package/dist/components/containers/panes/types.d.ts +0 -108
- package/dist/components/nav/rail/RailNavContext.svelte +0 -14
- package/dist/components/nav/rail/RailNavContext.svelte.d.ts +0 -8
- /package/dist/components/{containers/menu-item → buttons/split-button}/types.js +0 -0
- /package/dist/components/{containers/panes → chips}/types.js +0 -0
- /package/dist/components/containers/{menu-item → menu/menu-item}/index.d.ts +0 -0
- /package/dist/components/containers/{menu-item → menu/menu-item}/index.js +0 -0
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
<!--
|
|
2
|
+
@component
|
|
3
|
+
A leading action button fused to a trailing chevron trigger that opens a menu
|
|
4
|
+
of related actions — e.g. "Reply" with a dropdown for "Reply all" / "Forward".
|
|
5
|
+
|
|
6
|
+
The two segments render as one connected shape: pill on the outer edges,
|
|
7
|
+
squared on the corners where they touch (see `SPLIT_BUTTON_INNER_RADIUS`).
|
|
8
|
+
Compose the dropdown from `MenuItem` (and `Divider`, headings, etc.), the
|
|
9
|
+
same way you would with `Menu`.
|
|
10
|
+
|
|
11
|
+
Contrast with `Menu` (a single trigger that only ever opens a menu — no
|
|
12
|
+
separate primary action) and `ConnectedButtonGroup` (multiple equal,
|
|
13
|
+
selectable items, no menu).
|
|
14
|
+
|
|
15
|
+
@see https://m3.material.io/components/buttons/guidelines#834f5f31-e363-4d0f-bc4d-abac128f5f0e
|
|
16
|
+
-->
|
|
17
|
+
<script lang="ts">
|
|
18
|
+
import { DropdownMenu } from 'bits-ui';
|
|
19
|
+
import clsx from 'clsx';
|
|
20
|
+
import { easeEmphasizedDecel } from '../../../animation/easing.js';
|
|
21
|
+
import { enterExit } from '../../../animation/enterExit.js';
|
|
22
|
+
import Button from '../Button.svelte';
|
|
23
|
+
import ButtonIcon from '../ButtonIcon.svelte';
|
|
24
|
+
import { buttonIcon } from '../theme.js';
|
|
25
|
+
import { SPLIT_BUTTON_INNER_RADIUS, splitButton } from './theme.js';
|
|
26
|
+
import type { SplitButtonProps } from './types.js';
|
|
27
|
+
|
|
28
|
+
let {
|
|
29
|
+
children,
|
|
30
|
+
menuChildren,
|
|
31
|
+
onclick,
|
|
32
|
+
iconProps,
|
|
33
|
+
variant = 'filled',
|
|
34
|
+
color = 'default',
|
|
35
|
+
size = 'md',
|
|
36
|
+
disabled = false,
|
|
37
|
+
open = $bindable(false),
|
|
38
|
+
align = 'end',
|
|
39
|
+
menuLabel = 'More options',
|
|
40
|
+
class: className
|
|
41
|
+
}: SplitButtonProps = $props();
|
|
42
|
+
|
|
43
|
+
const cls = $derived(splitButton({ open }));
|
|
44
|
+
// Reuse ButtonIcon's own icon-size classes so the chevron matches exactly
|
|
45
|
+
// what ButtonIcon would render — `iconProps.class` fully replaces its
|
|
46
|
+
// internal size classes (see ButtonIcon.svelte), so we recompute them here.
|
|
47
|
+
const chevronCls = $derived(
|
|
48
|
+
clsx(buttonIcon({ variant, color, size, width: 'narrow' }).icon(), cls.icon())
|
|
49
|
+
);
|
|
50
|
+
|
|
51
|
+
const innerRadius = $derived(SPLIT_BUTTON_INNER_RADIUS[size ?? 'md']);
|
|
52
|
+
const leadingStyle = $derived(
|
|
53
|
+
`border-start-end-radius:${innerRadius};border-end-end-radius:${innerRadius}`
|
|
54
|
+
);
|
|
55
|
+
const trailingStyle = $derived(
|
|
56
|
+
`border-start-start-radius:${innerRadius};border-end-start-radius:${innerRadius}`
|
|
57
|
+
);
|
|
58
|
+
</script>
|
|
59
|
+
|
|
60
|
+
<div class={cls.root({ class: clsx(className) })}>
|
|
61
|
+
<Button {variant} {color} {size} {disabled} {iconProps} {onclick} style={leadingStyle}>
|
|
62
|
+
{@render children()}
|
|
63
|
+
</Button>
|
|
64
|
+
|
|
65
|
+
<DropdownMenu.Root bind:open>
|
|
66
|
+
<DropdownMenu.Trigger {disabled}>
|
|
67
|
+
{#snippet child({ props })}
|
|
68
|
+
<ButtonIcon
|
|
69
|
+
{variant}
|
|
70
|
+
{color}
|
|
71
|
+
{size}
|
|
72
|
+
{disabled}
|
|
73
|
+
width="narrow"
|
|
74
|
+
style={trailingStyle}
|
|
75
|
+
tooltipContent={menuLabel}
|
|
76
|
+
iconProps={{ name: 'arrow_drop_down', class: chevronCls }}
|
|
77
|
+
{...props}
|
|
78
|
+
/>
|
|
79
|
+
{/snippet}
|
|
80
|
+
</DropdownMenu.Trigger>
|
|
81
|
+
|
|
82
|
+
<DropdownMenu.Portal>
|
|
83
|
+
<DropdownMenu.Content forceMount {align} sideOffset={4} class="z-100">
|
|
84
|
+
{#snippet child({ wrapperProps, props, open: isOpen })}
|
|
85
|
+
{#if isOpen}
|
|
86
|
+
<div {...wrapperProps} class={wrapperProps.class as any}>
|
|
87
|
+
<div
|
|
88
|
+
{...props}
|
|
89
|
+
class="bg-md-sys-color-surface-container-high shadow-elevation-3 ring-md-sys-color-outline/10 max-w-sm min-w-48 gap-1 overflow-y-auto rounded-lg px-2 py-1"
|
|
90
|
+
transition:enterExit={{
|
|
91
|
+
duration: 200,
|
|
92
|
+
easing: easeEmphasizedDecel,
|
|
93
|
+
mode: 'scale'
|
|
94
|
+
}}
|
|
95
|
+
>
|
|
96
|
+
{@render menuChildren()}
|
|
97
|
+
</div>
|
|
98
|
+
</div>
|
|
99
|
+
{/if}
|
|
100
|
+
{/snippet}
|
|
101
|
+
</DropdownMenu.Content>
|
|
102
|
+
</DropdownMenu.Portal>
|
|
103
|
+
</DropdownMenu.Root>
|
|
104
|
+
</div>
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { SplitButtonProps } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* A leading action button fused to a trailing chevron trigger that opens a menu
|
|
4
|
+
* of related actions — e.g. "Reply" with a dropdown for "Reply all" / "Forward".
|
|
5
|
+
*
|
|
6
|
+
* The two segments render as one connected shape: pill on the outer edges,
|
|
7
|
+
* squared on the corners where they touch (see `SPLIT_BUTTON_INNER_RADIUS`).
|
|
8
|
+
* Compose the dropdown from `MenuItem` (and `Divider`, headings, etc.), the
|
|
9
|
+
* same way you would with `Menu`.
|
|
10
|
+
*
|
|
11
|
+
* Contrast with `Menu` (a single trigger that only ever opens a menu — no
|
|
12
|
+
* separate primary action) and `ConnectedButtonGroup` (multiple equal,
|
|
13
|
+
* selectable items, no menu).
|
|
14
|
+
*
|
|
15
|
+
* @see https://m3.material.io/components/buttons/guidelines#834f5f31-e363-4d0f-bc4d-abac128f5f0e
|
|
16
|
+
*/
|
|
17
|
+
declare const SplitButton: import("svelte").Component<SplitButtonProps, {}, "open">;
|
|
18
|
+
type SplitButton = ReturnType<typeof SplitButton>;
|
|
19
|
+
export default SplitButton;
|
|
@@ -3,6 +3,4 @@
|
|
|
3
3
|
export * from './theme.js';
|
|
4
4
|
export * from './types.js';
|
|
5
5
|
// default exports for components in this folder
|
|
6
|
-
export { default as
|
|
7
|
-
export { default as SplitPane } from './SplitPane.svelte';
|
|
8
|
-
export { default as SupportingPane } from './SupportingPane.svelte';
|
|
6
|
+
export { default as SplitButton } from './SplitButton.svelte';
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { type VariantProps } from 'tailwind-variants';
|
|
2
|
+
import type { ButtonMDVariants } from '../theme.js';
|
|
3
|
+
export type SplitButtonVariants = VariantProps<typeof splitButton>;
|
|
4
|
+
export declare const SPLIT_BUTTON_INNER_RADIUS: Record<NonNullable<ButtonMDVariants['size']>, string>;
|
|
5
|
+
export declare const splitButton: import("tailwind-variants").TVReturnType<{
|
|
6
|
+
open: {
|
|
7
|
+
true: {
|
|
8
|
+
icon: string;
|
|
9
|
+
};
|
|
10
|
+
false: {};
|
|
11
|
+
};
|
|
12
|
+
}, {
|
|
13
|
+
root: string;
|
|
14
|
+
icon: string;
|
|
15
|
+
}, undefined, {
|
|
16
|
+
open: {
|
|
17
|
+
true: {
|
|
18
|
+
icon: string;
|
|
19
|
+
};
|
|
20
|
+
false: {};
|
|
21
|
+
};
|
|
22
|
+
}, {
|
|
23
|
+
root: string;
|
|
24
|
+
icon: string;
|
|
25
|
+
}, import("tailwind-variants").TVReturnTypeLike<{
|
|
26
|
+
open: {
|
|
27
|
+
true: {
|
|
28
|
+
icon: string;
|
|
29
|
+
};
|
|
30
|
+
false: {};
|
|
31
|
+
};
|
|
32
|
+
}, {
|
|
33
|
+
root: string;
|
|
34
|
+
icon: string;
|
|
35
|
+
}>>;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { tv } from 'tailwind-variants';
|
|
2
|
+
// Inner (touching) corner radius per size — matches the ConnectedButtonGroup
|
|
3
|
+
// scale (see buttons/connected/theme.ts's `--cbg-inner`), since a split button
|
|
4
|
+
// is conceptually a 2-item connected group with a menu instead of a selection.
|
|
5
|
+
export const SPLIT_BUTTON_INNER_RADIUS = {
|
|
6
|
+
xs: '0.25rem',
|
|
7
|
+
sm: '0.5rem',
|
|
8
|
+
md: '0.5rem',
|
|
9
|
+
lg: '1rem',
|
|
10
|
+
xl: '1.25rem'
|
|
11
|
+
};
|
|
12
|
+
export const splitButton = tv({
|
|
13
|
+
slots: {
|
|
14
|
+
root: 'inline-flex items-center gap-0.5',
|
|
15
|
+
icon: 'transition-transform duration-200'
|
|
16
|
+
},
|
|
17
|
+
variants: {
|
|
18
|
+
open: {
|
|
19
|
+
true: { icon: 'rotate-180' },
|
|
20
|
+
false: {}
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
defaultVariants: {
|
|
24
|
+
open: false
|
|
25
|
+
}
|
|
26
|
+
});
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import type { IconProps } from '../../../utils/index.js';
|
|
2
|
+
import type { Snippet } from 'svelte';
|
|
3
|
+
import type { ButtonMDVariants } from '../theme.js';
|
|
4
|
+
export type SplitButtonProps = {
|
|
5
|
+
/** Label/content for the leading action button. */
|
|
6
|
+
children: Snippet;
|
|
7
|
+
/** `MenuItem` (or similar) rows rendered inside the trailing dropdown panel. */
|
|
8
|
+
menuChildren: Snippet;
|
|
9
|
+
/** Called when the leading button itself is pressed (the primary action). */
|
|
10
|
+
onclick?: (e: MouseEvent) => void;
|
|
11
|
+
/** Optional leading icon for the primary action button. */
|
|
12
|
+
iconProps?: IconProps;
|
|
13
|
+
/** The visual style shared by both segments. */
|
|
14
|
+
variant?: ButtonMDVariants['variant'];
|
|
15
|
+
/** The color scheme shared by both segments. */
|
|
16
|
+
color?: ButtonMDVariants['color'];
|
|
17
|
+
/** The size shared by both segments. Drives height, padding, and typescale. */
|
|
18
|
+
size?: ButtonMDVariants['size'];
|
|
19
|
+
/** Disables both the primary action and the menu trigger. */
|
|
20
|
+
disabled?: boolean;
|
|
21
|
+
/** Controlled open state of the trailing dropdown. @bindable */
|
|
22
|
+
open?: boolean;
|
|
23
|
+
/** Alignment of the dropdown panel relative to the trailing trigger. @default 'end' */
|
|
24
|
+
align?: 'start' | 'center' | 'end';
|
|
25
|
+
/**
|
|
26
|
+
* Accessible label for the trailing menu trigger (it has no visible text,
|
|
27
|
+
* only a chevron), and the tooltip shown on hover.
|
|
28
|
+
* @default 'More options'
|
|
29
|
+
*/
|
|
30
|
+
menuLabel?: string;
|
|
31
|
+
/** Additional CSS classes applied to the outer wrapper. */
|
|
32
|
+
class?: string;
|
|
33
|
+
};
|