@noxlovette/material 0.3.3 → 0.4.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.
Files changed (288) hide show
  1. package/README.md +1 -0
  2. package/dist/actions/index.d.ts +1 -0
  3. package/dist/actions/index.js +1 -0
  4. package/dist/actions/rovingFocusGroup.d.ts +20 -0
  5. package/dist/actions/rovingFocusGroup.js +82 -0
  6. package/dist/components/badge/theme.d.ts +8 -8
  7. package/dist/components/buttons/button-group/ButtonGroup.stories.svelte +83 -0
  8. package/dist/components/buttons/button-group/ButtonGroup.stories.svelte.d.ts +19 -0
  9. package/dist/components/buttons/button-group/ButtonGroup.svelte +10 -29
  10. package/dist/components/buttons/button-group/ButtonGroup.svelte.d.ts +7 -3
  11. package/dist/components/buttons/button-group/index.d.ts +0 -1
  12. package/dist/components/buttons/button-group/index.js +3 -1
  13. package/dist/components/buttons/button-group/theme.d.ts +17 -103
  14. package/dist/components/buttons/button-group/theme.js +7 -35
  15. package/dist/components/buttons/button-group/types.d.ts +9 -20
  16. package/dist/components/buttons/connected/ConnectedButtonGroup.stories.svelte +118 -0
  17. package/dist/components/buttons/connected/ConnectedButtonGroup.stories.svelte.d.ts +19 -0
  18. package/dist/components/buttons/connected/ConnectedButtonGroup.svelte +52 -0
  19. package/dist/components/buttons/connected/ConnectedButtonGroup.svelte.d.ts +12 -0
  20. package/dist/components/buttons/connected/ConnectedButtonGroupItem.svelte +37 -0
  21. package/dist/components/buttons/connected/ConnectedButtonGroupItem.svelte.d.ts +9 -0
  22. package/dist/components/buttons/connected/index.d.ts +3 -1
  23. package/dist/components/buttons/connected/index.js +3 -1
  24. package/dist/components/buttons/connected/theme.d.ts +125 -0
  25. package/dist/components/buttons/connected/theme.js +38 -0
  26. package/dist/components/buttons/connected/types.d.ts +32 -13
  27. package/dist/components/buttons/index.d.ts +1 -0
  28. package/dist/components/buttons/index.js +1 -0
  29. package/dist/components/buttons/split-button/SplitButton.stories.svelte +103 -0
  30. package/dist/components/buttons/split-button/SplitButton.stories.svelte.d.ts +19 -0
  31. package/dist/components/buttons/split-button/SplitButton.svelte +104 -0
  32. package/dist/components/buttons/split-button/SplitButton.svelte.d.ts +19 -0
  33. package/dist/components/buttons/split-button/index.d.ts +3 -0
  34. package/dist/components/{containers/panes → buttons/split-button}/index.js +1 -3
  35. package/dist/components/buttons/split-button/theme.d.ts +35 -0
  36. package/dist/components/buttons/split-button/theme.js +26 -0
  37. package/dist/components/buttons/split-button/types.d.ts +33 -0
  38. package/dist/components/buttons/theme.d.ts +142 -142
  39. package/dist/components/buttons/theme.js +2 -2
  40. package/dist/components/cards/Card.stories.svelte +58 -0
  41. package/dist/components/cards/Card.stories.svelte.d.ts +2 -17
  42. package/dist/components/cards/Card.svelte +76 -8
  43. package/dist/components/cards/theme.d.ts +26 -14
  44. package/dist/components/cards/theme.js +5 -1
  45. package/dist/components/cards/types.d.ts +39 -1
  46. package/dist/components/chips/Chip.stories.svelte +64 -0
  47. package/dist/components/chips/Chip.stories.svelte.d.ts +19 -0
  48. package/dist/components/chips/Chip.svelte +115 -0
  49. package/dist/components/chips/Chip.svelte.d.ts +14 -0
  50. package/dist/components/chips/index.d.ts +3 -0
  51. package/dist/components/{containers/merger → chips}/index.js +2 -1
  52. package/dist/components/chips/theme.d.ts +78 -0
  53. package/dist/components/chips/theme.js +72 -0
  54. package/dist/components/chips/types.d.ts +43 -0
  55. package/dist/components/containers/action-rail/ActionRail.stories.svelte +36 -0
  56. package/dist/components/containers/{panes/SinglePane.stories.svelte.d.ts → action-rail/ActionRail.stories.svelte.d.ts} +4 -4
  57. package/dist/components/containers/action-rail/ActionRail.svelte +35 -0
  58. package/dist/components/containers/action-rail/ActionRail.svelte.d.ts +17 -0
  59. package/dist/components/containers/action-rail/index.d.ts +3 -0
  60. package/dist/components/containers/action-rail/index.js +6 -0
  61. package/dist/components/containers/action-rail/theme.d.ts +45 -0
  62. package/dist/components/containers/action-rail/theme.js +26 -0
  63. package/dist/components/containers/action-rail/types.d.ts +20 -0
  64. package/dist/components/containers/action-rail/types.js +1 -0
  65. package/dist/components/containers/app/App.svelte +6 -6
  66. package/dist/components/containers/app/App.svelte.d.ts +4 -2
  67. package/dist/components/containers/app/theme.d.ts +1 -1
  68. package/dist/components/containers/app/types.d.ts +9 -4
  69. package/dist/components/containers/bottom-sheet/BottomSheet.stories.svelte +1 -1
  70. package/dist/components/containers/bottom-sheet/BottomSheet.svelte +1 -1
  71. package/dist/components/containers/context-menu/ContextMenu.stories.svelte +44 -0
  72. package/dist/components/containers/context-menu/ContextMenu.svelte +21 -5
  73. package/dist/components/containers/context-menu/ContextMenu.svelte.d.ts +11 -0
  74. package/dist/components/containers/context-menu/theme.d.ts +20 -2
  75. package/dist/components/containers/context-menu/theme.js +31 -8
  76. package/dist/components/containers/context-menu/types.d.ts +14 -2
  77. package/dist/components/containers/dialogue/theme.d.ts +20 -20
  78. package/dist/components/containers/divider/theme.d.ts +17 -17
  79. package/dist/components/containers/index.d.ts +2 -3
  80. package/dist/components/containers/index.js +2 -3
  81. package/dist/components/containers/link-preview/theme.d.ts +11 -11
  82. package/dist/components/containers/list/theme.d.ts +14 -14
  83. package/dist/components/containers/list/theme.js +1 -1
  84. package/dist/components/containers/menu/Menu.stories.svelte +105 -3
  85. package/dist/components/containers/menu/Menu.stories.svelte.d.ts +2 -17
  86. package/dist/components/containers/menu/Menu.svelte +9 -7
  87. package/dist/components/containers/menu/MenuCheckboxItem.svelte +55 -0
  88. package/dist/components/containers/menu/MenuCheckboxItem.svelte.d.ts +25 -0
  89. package/dist/components/containers/menu/MenuGroup.svelte +43 -0
  90. package/dist/components/containers/menu/MenuGroup.svelte.d.ts +28 -0
  91. package/dist/components/containers/menu/MenuRadioGroup.svelte +39 -0
  92. package/dist/components/containers/menu/MenuRadioGroup.svelte.d.ts +27 -0
  93. package/dist/components/containers/menu/MenuRadioItem.svelte +49 -0
  94. package/dist/components/containers/menu/MenuRadioItem.svelte.d.ts +17 -0
  95. package/dist/components/containers/menu/MenuSub.svelte +91 -0
  96. package/dist/components/containers/menu/MenuSub.svelte.d.ts +29 -0
  97. package/dist/components/containers/menu/index.d.ts +7 -0
  98. package/dist/components/containers/menu/index.js +8 -0
  99. package/dist/components/containers/menu/menu-item/MenuItem.svelte +71 -0
  100. package/dist/components/containers/{menu-item → menu/menu-item}/MenuItem.svelte.d.ts +2 -1
  101. package/dist/components/containers/{menu-item → menu/menu-item}/types.d.ts +5 -1
  102. package/dist/components/containers/menu/menu-item/types.js +1 -0
  103. package/dist/components/containers/menu/theme.d.ts +68 -0
  104. package/dist/components/containers/menu/theme.js +36 -0
  105. package/dist/components/containers/menu/types.d.ts +113 -2
  106. package/dist/components/containers/pane/DraggablePane.stories.svelte +199 -0
  107. package/dist/components/containers/pane/DraggablePane.stories.svelte.d.ts +4 -0
  108. package/dist/components/containers/pane/DraggablePane.svelte +533 -0
  109. package/dist/components/containers/pane/DraggablePane.svelte.d.ts +29 -0
  110. package/dist/components/containers/pane/Pane.stories.svelte +104 -0
  111. package/dist/components/containers/pane/Pane.stories.svelte.d.ts +19 -0
  112. package/dist/components/containers/pane/Pane.svelte +78 -0
  113. package/dist/components/containers/pane/Pane.svelte.d.ts +18 -0
  114. package/dist/components/containers/pane/PaneGrid.stories.svelte +134 -0
  115. package/dist/components/containers/pane/PaneGrid.stories.svelte.d.ts +19 -0
  116. package/dist/components/containers/pane/PaneGrid.svelte +43 -0
  117. package/dist/components/containers/pane/PaneGrid.svelte.d.ts +13 -0
  118. package/dist/components/containers/pane/PaneHandle.svelte +90 -0
  119. package/dist/components/containers/pane/PaneHandle.svelte.d.ts +12 -0
  120. package/dist/components/containers/pane/dragStore.svelte.d.ts +16 -0
  121. package/dist/components/containers/pane/dragStore.svelte.js +38 -0
  122. package/dist/components/containers/pane/index.d.ts +8 -0
  123. package/dist/components/containers/pane/index.js +11 -0
  124. package/dist/components/containers/pane/resizeStore.svelte.d.ts +10 -0
  125. package/dist/components/containers/pane/resizeStore.svelte.js +30 -0
  126. package/dist/components/containers/pane/theme.d.ts +571 -0
  127. package/dist/components/containers/pane/theme.js +211 -0
  128. package/dist/components/containers/pane/types.d.ts +249 -0
  129. package/dist/components/containers/pane/types.js +1 -0
  130. package/dist/components/containers/popover/Popover.stories.svelte +4 -4
  131. package/dist/components/containers/popover/Popover.svelte +3 -1
  132. package/dist/components/containers/popover/theme.d.ts +20 -20
  133. package/dist/components/containers/popover/types.d.ts +6 -2
  134. package/dist/components/containers/scroll-area/theme.d.ts +2 -2
  135. package/dist/components/containers/side-sheet/SideSheet.stories.svelte +16 -24
  136. package/dist/components/containers/side-sheet/SideSheet.svelte +73 -7
  137. package/dist/components/containers/side-sheet/SideSheet.svelte.d.ts +5 -0
  138. package/dist/components/containers/stack/theme.d.ts +44 -44
  139. package/dist/components/date/DateField.stories.svelte +57 -0
  140. package/dist/components/{containers/panes/SplitPane.stories.svelte.d.ts → date/DateField.stories.svelte.d.ts} +4 -4
  141. package/dist/components/date/DateField.svelte +11 -2
  142. package/dist/components/date/DateRangeField.stories.svelte +53 -0
  143. package/dist/components/{containers/panes/SupportingPane.stories.svelte.d.ts → date/DateRangeField.stories.svelte.d.ts} +4 -4
  144. package/dist/components/date/DateRangeField.svelte +2 -1
  145. package/dist/components/date/theme.d.ts +73 -4
  146. package/dist/components/date/theme.js +95 -26
  147. package/dist/components/date/types.d.ts +5 -0
  148. package/dist/components/forms/checkbox/Checkbox.svelte +7 -9
  149. package/dist/components/forms/checkbox/theme.d.ts +8 -8
  150. package/dist/components/forms/checkbox/theme.js +31 -9
  151. package/dist/components/forms/command/theme.d.ts +35 -35
  152. package/dist/components/forms/pin/theme.d.ts +2 -2
  153. package/dist/components/forms/radio-group/theme.d.ts +2 -2
  154. package/dist/components/forms/search/theme.d.ts +8 -8
  155. package/dist/components/forms/select/Select.svelte +3 -2
  156. package/dist/components/forms/select/theme.d.ts +26 -2
  157. package/dist/components/forms/select/theme.js +56 -22
  158. package/dist/components/forms/slider/theme.d.ts +20 -20
  159. package/dist/components/forms/switch/theme.d.ts +2 -2
  160. package/dist/components/forms/textfield/Textfield.stories.svelte +22 -0
  161. package/dist/components/forms/textfield/Textfield.svelte +10 -1
  162. package/dist/components/forms/textfield/theme.d.ts +44 -2
  163. package/dist/components/forms/textfield/theme.js +56 -16
  164. package/dist/components/forms/toggle-group/ToggleGroup.svelte +2 -2
  165. package/dist/components/forms/toggle-group/ToggleGroup.svelte.d.ts +2 -2
  166. package/dist/components/forms/toggle-group/ToggleGroupItem.svelte +1 -1
  167. package/dist/components/forms/toggle-group/ToggleGroupItem.svelte.d.ts +1 -1
  168. package/dist/components/forms/toggle-group/theme.d.ts +16 -16
  169. package/dist/components/forms/toggle-group/types.d.ts +2 -2
  170. package/dist/components/forms/tooltip/Tooltip.svelte +1 -1
  171. package/dist/components/forms/tooltip/theme.d.ts +2 -2
  172. package/dist/components/index.d.ts +1 -0
  173. package/dist/components/index.js +1 -0
  174. package/dist/components/misc/Avatar.stories.svelte +8 -0
  175. package/dist/components/misc/Avatar.svelte +35 -10
  176. package/dist/components/misc/DicebearAvatarBuilder.d.ts +59 -0
  177. package/dist/components/misc/DicebearAvatarBuilder.js +115 -0
  178. package/dist/components/misc/ThemeSettings.svelte +1 -1
  179. package/dist/components/misc/ThemeSwitcher.svelte +2 -2
  180. package/dist/components/misc/dicebearStyles.d.ts +21 -0
  181. package/dist/components/misc/dicebearStyles.js +169 -0
  182. package/dist/components/misc/index.d.ts +3 -0
  183. package/dist/components/misc/index.js +3 -0
  184. package/dist/components/misc/materialAvatarPalette.d.ts +6 -0
  185. package/dist/components/misc/materialAvatarPalette.js +44 -0
  186. package/dist/components/misc/theme.d.ts +20 -2
  187. package/dist/components/misc/theme.js +7 -1
  188. package/dist/components/misc/types.d.ts +20 -2
  189. package/dist/components/nav/appbar/AppBar.stories.svelte +1 -1
  190. package/dist/components/nav/appbar/AppBar.svelte +46 -15
  191. package/dist/components/nav/appbar/AppBar.svelte.d.ts +5 -0
  192. package/dist/components/nav/appbar/theme.d.ts +20 -14
  193. package/dist/components/nav/appbar/theme.js +11 -7
  194. package/dist/components/nav/appbar/types.d.ts +3 -1
  195. package/dist/components/nav/breadcrumb/Breadcrumb.stories.svelte +50 -0
  196. package/dist/components/nav/breadcrumb/Breadcrumb.stories.svelte.d.ts +19 -0
  197. package/dist/components/nav/breadcrumb/Breadcrumb.svelte +46 -0
  198. package/dist/components/nav/breadcrumb/Breadcrumb.svelte.d.ts +13 -0
  199. package/dist/components/nav/breadcrumb/index.d.ts +3 -0
  200. package/dist/components/nav/breadcrumb/index.js +6 -0
  201. package/dist/components/nav/breadcrumb/theme.d.ts +84 -0
  202. package/dist/components/nav/breadcrumb/theme.js +35 -0
  203. package/dist/components/nav/breadcrumb/types.d.ts +14 -0
  204. package/dist/components/nav/breadcrumb/types.js +1 -0
  205. package/dist/components/nav/index.d.ts +1 -0
  206. package/dist/components/nav/index.js +1 -0
  207. package/dist/components/nav/navbar/theme.d.ts +19 -19
  208. package/dist/components/nav/rail/Rail.stories.svelte +1 -5
  209. package/dist/components/nav/rail/Rail.svelte +3 -25
  210. package/dist/components/nav/rail/theme.d.ts +4 -4
  211. package/dist/components/nav/rail/types.d.ts +0 -5
  212. package/dist/components/nav/tabs/TabHolder.svelte +2 -1
  213. package/dist/components/nav/tabs/theme.d.ts +21 -21
  214. package/dist/components/nav/tabs/theme.js +6 -0
  215. package/dist/components/nav/tabs/types.d.ts +2 -2
  216. package/dist/components/pill/theme.d.ts +35 -35
  217. package/dist/components/snackbar/theme.d.ts +8 -8
  218. package/dist/components/table/Table.stories.svelte +267 -0
  219. package/dist/components/table/Table.stories.svelte.d.ts +19 -0
  220. package/dist/components/table/Table.svelte +1 -1
  221. package/dist/components/table/TableBody.svelte +16 -3
  222. package/dist/components/table/TableBody.svelte.d.ts +5 -1
  223. package/dist/components/table/TableRow.svelte +1 -1
  224. package/dist/components/table/theme.d.ts +2 -2
  225. package/dist/components/table/theme.js +2 -2
  226. package/dist/components/table/types.d.ts +7 -0
  227. package/dist/components/time/theme.d.ts +29 -29
  228. package/dist/components/toolbar/Toolbar.stories.svelte +71 -0
  229. package/dist/components/toolbar/Toolbar.stories.svelte.d.ts +19 -0
  230. package/dist/components/toolbar/Toolbar.svelte +19 -3
  231. package/dist/components/toolbar/Toolbar.svelte.d.ts +8 -2
  232. package/dist/components/toolbar/ToolbarButton.svelte +28 -4
  233. package/dist/components/toolbar/ToolbarDivider.svelte +4 -3
  234. package/dist/components/toolbar/ToolbarGroup.svelte +7 -2
  235. package/dist/components/toolbar/ToolbarGroupItem.svelte +29 -4
  236. package/dist/components/toolbar/ToolbarSection.svelte +35 -0
  237. package/dist/components/toolbar/ToolbarSection.svelte.d.ts +9 -0
  238. package/dist/components/toolbar/ToolbarSpacer.svelte +18 -0
  239. package/dist/components/toolbar/ToolbarSpacer.svelte.d.ts +9 -0
  240. package/dist/components/toolbar/index.d.ts +2 -0
  241. package/dist/components/toolbar/index.js +2 -0
  242. package/dist/components/toolbar/theme.d.ts +36 -21
  243. package/dist/components/toolbar/theme.js +27 -11
  244. package/dist/components/toolbar/types.d.ts +37 -4
  245. package/dist/components/typography/body/theme.d.ts +14 -14
  246. package/dist/components/typography/display/theme.d.ts +14 -14
  247. package/dist/components/typography/headline/theme.d.ts +14 -14
  248. package/dist/components/typography/kbd/Kbd.stories.svelte +1 -1
  249. package/dist/components/typography/kbd/theme.d.ts +8 -8
  250. package/dist/components/typography/label/theme.d.ts +14 -14
  251. package/dist/components/typography/title/theme.d.ts +14 -14
  252. package/dist/styles/component.css +126 -4
  253. package/dist/styles/motion.css +6 -3
  254. package/dist/utils/Layer.svelte +7 -3
  255. package/dist/utils/Theme.svelte +20 -20
  256. package/dist/utils/ThemeScript.svelte +1 -1
  257. package/dist/utils/icon/theme.d.ts +14 -14
  258. package/package.json +38 -37
  259. package/bin/install-skill.js +0 -29
  260. package/dist/components/buttons/button-group/ButtonGroupItem.svelte +0 -41
  261. package/dist/components/buttons/button-group/ButtonGroupItem.svelte.d.ts +0 -8
  262. package/dist/components/buttons/connected/ConnectedButtons.svelte +0 -14
  263. package/dist/components/buttons/connected/ConnectedButtons.svelte.d.ts +0 -8
  264. package/dist/components/containers/menu-item/MenuItem.svelte +0 -74
  265. package/dist/components/containers/merger/InputMerger.svelte +0 -24
  266. package/dist/components/containers/merger/InputMerger.svelte.d.ts +0 -14
  267. package/dist/components/containers/merger/index.d.ts +0 -2
  268. package/dist/components/containers/merger/theme.d.ts +0 -1
  269. package/dist/components/containers/merger/theme.js +0 -4
  270. package/dist/components/containers/panes/SinglePane.stories.svelte +0 -67
  271. package/dist/components/containers/panes/SinglePane.svelte +0 -32
  272. package/dist/components/containers/panes/SinglePane.svelte.d.ts +0 -5
  273. package/dist/components/containers/panes/SplitPane.stories.svelte +0 -124
  274. package/dist/components/containers/panes/SplitPane.svelte +0 -144
  275. package/dist/components/containers/panes/SplitPane.svelte.d.ts +0 -8
  276. package/dist/components/containers/panes/SupportingPane.stories.svelte +0 -113
  277. package/dist/components/containers/panes/SupportingPane.svelte +0 -175
  278. package/dist/components/containers/panes/SupportingPane.svelte.d.ts +0 -9
  279. package/dist/components/containers/panes/index.d.ts +0 -5
  280. package/dist/components/containers/panes/theme.d.ts +0 -490
  281. package/dist/components/containers/panes/theme.js +0 -185
  282. package/dist/components/containers/panes/types.d.ts +0 -108
  283. package/dist/components/nav/rail/RailNavContext.svelte +0 -14
  284. package/dist/components/nav/rail/RailNavContext.svelte.d.ts +0 -8
  285. /package/dist/components/{containers/menu-item → buttons/split-button}/types.js +0 -0
  286. /package/dist/components/{containers/panes → chips}/types.js +0 -0
  287. /package/dist/components/containers/{menu-item → menu/menu-item}/index.d.ts +0 -0
  288. /package/dist/components/containers/{menu-item → menu/menu-item}/index.js +0 -0
@@ -0,0 +1,118 @@
1
+ <script module lang="ts">
2
+ import { defineMeta } from '@storybook/addon-svelte-csf';
3
+ import ConnectedButtonGroup from './ConnectedButtonGroup.svelte';
4
+ import ConnectedButtonGroupItem from './ConnectedButtonGroupItem.svelte';
5
+
6
+ const { Story } = defineMeta({
7
+ title: 'Buttons/Connected Button Group',
8
+ component: ConnectedButtonGroup,
9
+ argTypes: {
10
+ type: {
11
+ control: 'select',
12
+ options: ['single', 'multiple']
13
+ },
14
+ orientation: {
15
+ control: 'select',
16
+ options: ['horizontal', 'vertical']
17
+ },
18
+ shape: {
19
+ control: 'select',
20
+ options: ['round', 'square']
21
+ },
22
+ size: {
23
+ control: 'select',
24
+ options: ['xs', 'sm', 'md', 'lg', 'xl']
25
+ }
26
+ },
27
+ args: {
28
+ type: 'single',
29
+ orientation: 'horizontal',
30
+ shape: 'round',
31
+ size: 'sm'
32
+ }
33
+ });
34
+ </script>
35
+
36
+ <Story name="Playground">
37
+ {#snippet template(args)}
38
+ <ConnectedButtonGroup
39
+ type={args.type}
40
+ orientation={args.orientation}
41
+ shape={args.shape}
42
+ size={args.size}
43
+ value="left"
44
+ >
45
+ <ConnectedButtonGroupItem
46
+ value="left"
47
+ label="Left"
48
+ iconProps={{ name: 'format_align_left' }}
49
+ />
50
+ <ConnectedButtonGroupItem
51
+ value="center"
52
+ label="Center"
53
+ iconProps={{ name: 'format_align_center' }}
54
+ />
55
+ <ConnectedButtonGroupItem
56
+ value="right"
57
+ label="Right"
58
+ iconProps={{ name: 'format_align_right' }}
59
+ />
60
+ </ConnectedButtonGroup>
61
+ {/snippet}
62
+ </Story>
63
+
64
+ <Story name="Multi-select" asChild>
65
+ <div class="p-6">
66
+ <ConnectedButtonGroup type="multiple" value={['bold']}>
67
+ <ConnectedButtonGroupItem value="bold" label="Bold" iconProps={{ name: 'format_bold' }} />
68
+ <ConnectedButtonGroupItem
69
+ value="italic"
70
+ label="Italic"
71
+ iconProps={{ name: 'format_italic' }}
72
+ />
73
+ <ConnectedButtonGroupItem
74
+ value="underline"
75
+ label="Underline"
76
+ iconProps={{ name: 'format_underlined' }}
77
+ />
78
+ </ConnectedButtonGroup>
79
+ </div>
80
+ </Story>
81
+
82
+ <Story name="Icon Only" asChild>
83
+ <div class="p-6">
84
+ <ConnectedButtonGroup type="single" value="list">
85
+ <ConnectedButtonGroupItem value="list" iconProps={{ name: 'view_list' }} />
86
+ <ConnectedButtonGroupItem value="grid" iconProps={{ name: 'grid_view' }} />
87
+ </ConnectedButtonGroup>
88
+ </div>
89
+ </Story>
90
+
91
+ <Story name="Square Shape" asChild>
92
+ <div class="p-6">
93
+ <ConnectedButtonGroup type="single" shape="square" value="list">
94
+ <ConnectedButtonGroupItem value="list" iconProps={{ name: 'view_list' }} />
95
+ <ConnectedButtonGroupItem value="grid" iconProps={{ name: 'grid_view' }} />
96
+ </ConnectedButtonGroup>
97
+ </div>
98
+ </Story>
99
+
100
+ <Story name="Sizes" asChild>
101
+ <div class="flex flex-col gap-6 p-6">
102
+ {#each ['xs', 'sm', 'md', 'lg', 'xl'] as const as size (size)}
103
+ <ConnectedButtonGroup type="single" {size} value="list">
104
+ <ConnectedButtonGroupItem value="list" iconProps={{ name: 'view_list' }} />
105
+ <ConnectedButtonGroupItem value="grid" iconProps={{ name: 'grid_view' }} />
106
+ </ConnectedButtonGroup>
107
+ {/each}
108
+ </div>
109
+ </Story>
110
+
111
+ <Story name="Vertical" asChild>
112
+ <div class="p-6">
113
+ <ConnectedButtonGroup type="single" orientation="vertical" value="list">
114
+ <ConnectedButtonGroupItem value="list" label="List" iconProps={{ name: 'view_list' }} />
115
+ <ConnectedButtonGroupItem value="grid" label="Grid" iconProps={{ name: 'grid_view' }} />
116
+ </ConnectedButtonGroup>
117
+ </div>
118
+ </Story>
@@ -0,0 +1,19 @@
1
+ import ConnectedButtonGroup from './ConnectedButtonGroup.svelte';
2
+ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
3
+ new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
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 ConnectedButtonGroup: $$__sveltets_2_IsomorphicComponent<Record<string, never>, {
16
+ [evt: string]: CustomEvent<any>;
17
+ }, {}, {}, string>;
18
+ type ConnectedButtonGroup = InstanceType<typeof ConnectedButtonGroup>;
19
+ export default ConnectedButtonGroup;
@@ -0,0 +1,52 @@
1
+ <!--
2
+ @component
3
+ A connected button group — the M3 replacement for the deprecated segmented
4
+ button. Items sit in a shared pill (or square) shape with a small gap between
5
+ them; selecting or pressing an item changes only that item's own shape and
6
+ color, never its neighbors'.
7
+
8
+ @see https://m3.material.io/components/button-groups/overview
9
+ -->
10
+ <script lang="ts">
11
+ import { ToggleGroup } from 'bits-ui';
12
+ import clsx from 'clsx';
13
+ import { setContext } from 'svelte';
14
+ import { connectedButtonGroup } from './theme.js';
15
+ import type { ConnectedButtonGroupCtx, ConnectedButtonGroupProps } from './types.js';
16
+
17
+ let {
18
+ type,
19
+ value = $bindable(undefined),
20
+ onValueChange,
21
+ disabled = false,
22
+ loop = true,
23
+ orientation = 'horizontal',
24
+ shape = 'round',
25
+ size = 'sm',
26
+ children,
27
+ class: className
28
+ }: ConnectedButtonGroupProps = $props();
29
+
30
+ const cls = $derived(connectedButtonGroup({ orientation }));
31
+
32
+ setContext<ConnectedButtonGroupCtx>('connectedButtonGroup', {
33
+ get size() {
34
+ return size;
35
+ },
36
+ get shape() {
37
+ return shape;
38
+ }
39
+ });
40
+ </script>
41
+
42
+ <ToggleGroup.Root
43
+ {type}
44
+ bind:value
45
+ {onValueChange}
46
+ {disabled}
47
+ {loop}
48
+ {orientation}
49
+ class={cls.root({ class: clsx(className) })}
50
+ >
51
+ {@render children?.()}
52
+ </ToggleGroup.Root>
@@ -0,0 +1,12 @@
1
+ import type { ConnectedButtonGroupProps } from './types.js';
2
+ /**
3
+ * A connected button group — the M3 replacement for the deprecated segmented
4
+ * button. Items sit in a shared pill (or square) shape with a small gap between
5
+ * them; selecting or pressing an item changes only that item's own shape and
6
+ * color, never its neighbors'.
7
+ *
8
+ * @see https://m3.material.io/components/button-groups/overview
9
+ */
10
+ declare const ConnectedButtonGroup: import("svelte").Component<ConnectedButtonGroupProps, {}, "value">;
11
+ type ConnectedButtonGroup = ReturnType<typeof ConnectedButtonGroup>;
12
+ export default ConnectedButtonGroup;
@@ -0,0 +1,37 @@
1
+ <!--
2
+ @component
3
+ A single item within a ConnectedButtonGroup. Selection is communicated through
4
+ shape (round collapsing toward square) and color, matching the M3 spec — not
5
+ through an overlaid check icon.
6
+ -->
7
+ <script lang="ts">
8
+ import { ToggleGroup } from 'bits-ui';
9
+ import clsx from 'clsx';
10
+ import { getContext } from 'svelte';
11
+ import { Icon, Layer } from '../../../utils/index.js';
12
+ import { connectedButtonGroupItem } from './theme.js';
13
+ import type { ConnectedButtonGroupCtx, ConnectedButtonGroupItemProps } from './types.js';
14
+
15
+ let {
16
+ value,
17
+ label,
18
+ iconProps,
19
+ disabled = false,
20
+ class: className
21
+ }: ConnectedButtonGroupItemProps = $props();
22
+
23
+ const ctx = getContext<ConnectedButtonGroupCtx | undefined>('connectedButtonGroup');
24
+ const size = $derived(ctx?.size ?? 'sm');
25
+ const shape = $derived(ctx?.shape ?? 'round');
26
+ const { base, icon } = $derived(connectedButtonGroupItem({ size, shape }));
27
+ </script>
28
+
29
+ <ToggleGroup.Item {value} {disabled} class={base({ class: clsx(className) })}>
30
+ {#if iconProps}
31
+ <Icon {...iconProps} class={icon()} />
32
+ {/if}
33
+ {#if label}
34
+ <span>{label}</span>
35
+ {/if}
36
+ <Layer />
37
+ </ToggleGroup.Item>
@@ -0,0 +1,9 @@
1
+ import type { ConnectedButtonGroupItemProps } from './types.js';
2
+ /**
3
+ * A single item within a ConnectedButtonGroup. Selection is communicated through
4
+ * shape (round collapsing toward square) and color, matching the M3 spec — not
5
+ * through an overlaid check icon.
6
+ */
7
+ declare const ConnectedButtonGroupItem: import("svelte").Component<ConnectedButtonGroupItemProps, {}, "">;
8
+ type ConnectedButtonGroupItem = ReturnType<typeof ConnectedButtonGroupItem>;
9
+ export default ConnectedButtonGroupItem;
@@ -1,2 +1,4 @@
1
+ export * from './theme.js';
1
2
  export * from './types.js';
2
- export { default as ConnectedButtons } from './ConnectedButtons.svelte';
3
+ export { default as ConnectedButtonGroup } from './ConnectedButtonGroup.svelte';
4
+ export { default as ConnectedButtonGroupItem } from './ConnectedButtonGroupItem.svelte';
@@ -1,5 +1,7 @@
1
1
  // THIS FILE IS AUTO-GENERATED BY scripts/generate-components-index.ts - DO NOT EDIT MANUALLY
2
2
  // re-export TS/JS modules from this folder
3
+ export * from './theme.js';
3
4
  export * from './types.js';
4
5
  // default exports for components in this folder
5
- export { default as ConnectedButtons } from './ConnectedButtons.svelte';
6
+ export { default as ConnectedButtonGroup } from './ConnectedButtonGroup.svelte';
7
+ export { default as ConnectedButtonGroupItem } from './ConnectedButtonGroupItem.svelte';
@@ -0,0 +1,125 @@
1
+ import { type VariantProps } from 'tailwind-variants';
2
+ export type ConnectedButtonGroupVariants = VariantProps<typeof connectedButtonGroup>;
3
+ export type ConnectedButtonGroupItemVariants = VariantProps<typeof connectedButtonGroupItem>;
4
+ export declare const connectedButtonGroup: import("tailwind-variants").TVReturnType<{
5
+ orientation: {
6
+ horizontal: {
7
+ root: string;
8
+ };
9
+ vertical: {
10
+ root: string;
11
+ };
12
+ };
13
+ }, {
14
+ root: string;
15
+ }, undefined, {
16
+ orientation: {
17
+ horizontal: {
18
+ root: string;
19
+ };
20
+ vertical: {
21
+ root: string;
22
+ };
23
+ };
24
+ }, {
25
+ root: string;
26
+ }, import("tailwind-variants").TVReturnTypeLike<{
27
+ orientation: {
28
+ horizontal: {
29
+ root: string;
30
+ };
31
+ vertical: {
32
+ root: string;
33
+ };
34
+ };
35
+ }, {
36
+ root: string;
37
+ }>>;
38
+ export declare const connectedButtonGroupItem: import("tailwind-variants").TVReturnType<{
39
+ size: {
40
+ xs: {
41
+ base: string;
42
+ };
43
+ sm: {
44
+ base: string;
45
+ };
46
+ md: {
47
+ base: string;
48
+ };
49
+ lg: {
50
+ base: string;
51
+ };
52
+ xl: {
53
+ base: string;
54
+ };
55
+ };
56
+ shape: {
57
+ round: {
58
+ base: string;
59
+ };
60
+ square: {
61
+ base: string;
62
+ };
63
+ };
64
+ }, {
65
+ base: string;
66
+ icon: string;
67
+ }, undefined, {
68
+ size: {
69
+ xs: {
70
+ base: string;
71
+ };
72
+ sm: {
73
+ base: string;
74
+ };
75
+ md: {
76
+ base: string;
77
+ };
78
+ lg: {
79
+ base: string;
80
+ };
81
+ xl: {
82
+ base: string;
83
+ };
84
+ };
85
+ shape: {
86
+ round: {
87
+ base: string;
88
+ };
89
+ square: {
90
+ base: string;
91
+ };
92
+ };
93
+ }, {
94
+ base: string;
95
+ icon: string;
96
+ }, import("tailwind-variants").TVReturnTypeLike<{
97
+ size: {
98
+ xs: {
99
+ base: string;
100
+ };
101
+ sm: {
102
+ base: string;
103
+ };
104
+ md: {
105
+ base: string;
106
+ };
107
+ lg: {
108
+ base: string;
109
+ };
110
+ xl: {
111
+ base: string;
112
+ };
113
+ };
114
+ shape: {
115
+ round: {
116
+ base: string;
117
+ };
118
+ square: {
119
+ base: string;
120
+ };
121
+ };
122
+ }, {
123
+ base: string;
124
+ icon: string;
125
+ }>>;
@@ -0,0 +1,38 @@
1
+ import { tv } from 'tailwind-variants';
2
+ export const connectedButtonGroup = tv({
3
+ slots: {
4
+ root: 'flex w-full items-stretch gap-0.5'
5
+ },
6
+ variants: {
7
+ orientation: {
8
+ horizontal: { root: 'flex-row' },
9
+ vertical: { root: 'h-auto flex-col' }
10
+ }
11
+ },
12
+ defaultVariants: {
13
+ orientation: 'horizontal'
14
+ }
15
+ });
16
+ export const connectedButtonGroupItem = tv({
17
+ slots: {
18
+ base: 'md-btn-connected layer-container state-layer relative inline-flex min-w-12 flex-1 items-center justify-center gap-2 bg-md-sys-color-surface-container-high px-4 md-sys-typescale-label-large text-md-sys-color-on-surface-variant outline-none disabled:cursor-not-allowed disabled:opacity-38 data-[state=on]:bg-md-sys-color-primary data-[state=on]:text-md-sys-color-on-primary',
19
+ icon: 'size-[18px] text-[18px]'
20
+ },
21
+ variants: {
22
+ size: {
23
+ xs: { base: 'h-8 [--cbg-inner:0.25rem]' },
24
+ sm: { base: 'h-10 [--cbg-inner:0.5rem]' },
25
+ md: { base: 'h-14 [--cbg-inner:0.5rem]' },
26
+ lg: { base: 'h-24 [--cbg-inner:1rem]' },
27
+ xl: { base: 'h-34 [--cbg-inner:1.25rem]' }
28
+ },
29
+ shape: {
30
+ round: { base: '[--cbg-outer:9999px]' },
31
+ square: { base: '[--cbg-outer:var(--cbg-inner)]' }
32
+ }
33
+ },
34
+ defaultVariants: {
35
+ size: 'sm',
36
+ shape: 'round'
37
+ }
38
+ });
@@ -1,14 +1,33 @@
1
+ import type { IconProps } from '../../../utils/index.js';
1
2
  import type { Snippet } from 'svelte';
2
- import type { HTMLAttributes } from 'svelte/elements';
3
- export interface ConnectedButtonsProps extends HTMLAttributes<HTMLDivElement> {
4
- /**
5
- * The buttons to be connected.
6
- * @example
7
- * <ConnectedButtons>
8
- * <Button>Left</Button>
9
- * <Button>Center</Button>
10
- * <Button>Right</Button>
11
- * </ConnectedButtons>
12
- */
13
- children: Snippet;
14
- }
3
+ import type { ConnectedButtonGroupVariants } from './theme.js';
4
+ export type ConnectedButtonGroupCtx = {
5
+ size: 'xs' | 'sm' | 'md' | 'lg' | 'xl';
6
+ shape: 'round' | 'square';
7
+ };
8
+ export type ConnectedButtonGroupProps = ConnectedButtonGroupVariants & {
9
+ /** Whether only one item can be active at a time, or multiple. */
10
+ type: 'single' | 'multiple';
11
+ /** Currently selected value(s). @bindable */
12
+ value?: any;
13
+ onValueChange?: (value: any) => void;
14
+ disabled?: boolean;
15
+ loop?: boolean;
16
+ orientation?: 'horizontal' | 'vertical';
17
+ /** Outer corner shape of the group. A selected/pressed item collapses to its inner corner size regardless. */
18
+ shape?: ConnectedButtonGroupCtx['shape'];
19
+ /** Drives the group's height and inner corner size. Match the size of the buttons this replaces. */
20
+ size?: ConnectedButtonGroupCtx['size'];
21
+ children?: Snippet;
22
+ class?: string;
23
+ };
24
+ export type ConnectedButtonGroupItemProps = {
25
+ /** The value this item represents. */
26
+ value: string;
27
+ /** Text label displayed inside the item. */
28
+ label?: string;
29
+ /** Optional icon. Stays visible when selected — selection is shown via shape and color, not an icon swap. */
30
+ iconProps?: IconProps;
31
+ disabled?: boolean;
32
+ class?: string;
33
+ };
@@ -1,5 +1,6 @@
1
1
  export * from './button-group/index.js';
2
2
  export * from './connected/index.js';
3
+ export * from './split-button/index.js';
3
4
  export * from './theme.js';
4
5
  export * from './types.js';
5
6
  export { default as Button } from './Button.svelte';
@@ -2,6 +2,7 @@
2
2
  // folder re-exports (export everything from these folders)
3
3
  export * from './button-group/index.js';
4
4
  export * from './connected/index.js';
5
+ export * from './split-button/index.js';
5
6
  // re-export TS/JS modules from this folder
6
7
  export * from './theme.js';
7
8
  export * from './types.js';
@@ -0,0 +1,103 @@
1
+ <script module lang="ts">
2
+ import { defineMeta } from '@storybook/addon-svelte-csf';
3
+ import MenuItem from '../../containers/menu/menu-item/MenuItem.svelte';
4
+ import SplitButton from './SplitButton.svelte';
5
+
6
+ const { Story } = defineMeta({
7
+ title: 'Buttons/Split Button',
8
+ component: SplitButton,
9
+ argTypes: {
10
+ variant: {
11
+ control: 'select',
12
+ options: ['elevated', 'filled', 'tonal', 'outlined', 'text']
13
+ },
14
+ color: {
15
+ control: 'select',
16
+ options: ['default', 'primary', 'secondary', 'tertiary', 'error']
17
+ },
18
+ size: {
19
+ control: 'select',
20
+ options: ['xs', 'sm', 'md', 'lg', 'xl']
21
+ }
22
+ },
23
+ args: {
24
+ variant: 'filled',
25
+ color: 'default',
26
+ size: 'md'
27
+ }
28
+ });
29
+ </script>
30
+
31
+ <Story name="Playground">
32
+ {#snippet template(args)}
33
+ <SplitButton variant={args.variant} color={args.color} size={args.size}>
34
+ {#snippet children()}
35
+ Reply
36
+ {/snippet}
37
+ {#snippet menuChildren()}
38
+ <MenuItem iconProps={{ name: 'reply_all' }}>Reply all</MenuItem>
39
+ <MenuItem iconProps={{ name: 'forward' }}>Forward</MenuItem>
40
+ {/snippet}
41
+ </SplitButton>
42
+ {/snippet}
43
+ </Story>
44
+
45
+ <Story name="WithLeadingIcon" asChild>
46
+ <div class="p-6">
47
+ <SplitButton iconProps={{ name: 'send' }}>
48
+ {#snippet children()}
49
+ Send
50
+ {/snippet}
51
+ {#snippet menuChildren()}
52
+ <MenuItem iconProps={{ name: 'schedule_send' }}>Send later</MenuItem>
53
+ <MenuItem iconProps={{ name: 'drafts' }}>Save as draft</MenuItem>
54
+ {/snippet}
55
+ </SplitButton>
56
+ </div>
57
+ </Story>
58
+
59
+ <Story name="Variants" asChild>
60
+ <div class="flex flex-wrap items-center gap-6 p-6">
61
+ {#each ['elevated', 'filled', 'tonal', 'outlined', 'text'] as const as variant (variant)}
62
+ <SplitButton {variant}>
63
+ {#snippet children()}
64
+ Reply
65
+ {/snippet}
66
+ {#snippet menuChildren()}
67
+ <MenuItem iconProps={{ name: 'reply_all' }}>Reply all</MenuItem>
68
+ <MenuItem iconProps={{ name: 'forward' }}>Forward</MenuItem>
69
+ {/snippet}
70
+ </SplitButton>
71
+ {/each}
72
+ </div>
73
+ </Story>
74
+
75
+ <Story name="Sizes" asChild>
76
+ <div class="flex flex-wrap items-center gap-6 p-6">
77
+ {#each ['xs', 'sm', 'md', 'lg', 'xl'] as const as size (size)}
78
+ <SplitButton {size}>
79
+ {#snippet children()}
80
+ Reply
81
+ {/snippet}
82
+ {#snippet menuChildren()}
83
+ <MenuItem iconProps={{ name: 'reply_all' }}>Reply all</MenuItem>
84
+ <MenuItem iconProps={{ name: 'forward' }}>Forward</MenuItem>
85
+ {/snippet}
86
+ </SplitButton>
87
+ {/each}
88
+ </div>
89
+ </Story>
90
+
91
+ <Story name="Disabled" asChild>
92
+ <div class="p-6">
93
+ <SplitButton disabled>
94
+ {#snippet children()}
95
+ Reply
96
+ {/snippet}
97
+ {#snippet menuChildren()}
98
+ <MenuItem iconProps={{ name: 'reply_all' }}>Reply all</MenuItem>
99
+ <MenuItem iconProps={{ name: 'forward' }}>Forward</MenuItem>
100
+ {/snippet}
101
+ </SplitButton>
102
+ </div>
103
+ </Story>
@@ -0,0 +1,19 @@
1
+ import SplitButton from './SplitButton.svelte';
2
+ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
3
+ new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
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 SplitButton: $$__sveltets_2_IsomorphicComponent<Record<string, never>, {
16
+ [evt: string]: CustomEvent<any>;
17
+ }, {}, {}, string>;
18
+ type SplitButton = InstanceType<typeof SplitButton>;
19
+ export default SplitButton;