@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.
Files changed (329) hide show
  1. package/bin/material-claude-skill.js +31 -0
  2. package/claude-skill/material-design/SKILL.md +68 -0
  3. package/claude-skill/material-design/references/accessibility-checklist.md +29 -0
  4. package/claude-skill/material-design/references/component-patterns.md +55 -0
  5. package/claude-skill/material-design/references/motion-guide.md +163 -0
  6. package/claude-skill/material-design/references/tokens-and-styles.md +68 -0
  7. package/dist/animation/Shapes.stories.svelte +10 -6
  8. package/dist/animation/TransitionPatterns.stories.svelte +30 -20
  9. package/dist/animation/containerTransform.d.ts +4 -2
  10. package/dist/animation/containerTransform.js +4 -2
  11. package/dist/animation/enterExit.js +5 -2
  12. package/dist/animation/skeleton.d.ts +1 -1
  13. package/dist/animation/skeleton.js +1 -1
  14. package/dist/components/badge/Badge.mdx +70 -0
  15. package/dist/components/badge/Badge.stories.svelte +38 -20
  16. package/dist/components/badge/Badge.svelte +12 -5
  17. package/dist/components/badge/theme.d.ts +30 -7
  18. package/dist/components/badge/theme.js +25 -5
  19. package/dist/components/badge/types.d.ts +18 -4
  20. package/dist/components/buttons/Button.mdx +85 -0
  21. package/dist/components/buttons/Button.stories.svelte +62 -27
  22. package/dist/components/buttons/Button.svelte +29 -25
  23. package/dist/components/buttons/Button.svelte.d.ts +11 -9
  24. package/dist/components/buttons/ButtonIcon.mdx +52 -0
  25. package/dist/components/buttons/ButtonIcon.stories.svelte +72 -48
  26. package/dist/components/buttons/ButtonIcon.svelte +58 -36
  27. package/dist/components/buttons/ButtonIcon.svelte.d.ts +9 -7
  28. package/dist/components/buttons/FAB.mdx +84 -0
  29. package/dist/components/buttons/FAB.stories.svelte +103 -24
  30. package/dist/components/buttons/FAB.stories.svelte.d.ts +2 -17
  31. package/dist/components/buttons/FAB.svelte +353 -29
  32. package/dist/components/buttons/FAB.svelte.d.ts +11 -6
  33. package/dist/components/buttons/FABMenu.svelte +27 -8
  34. package/dist/components/buttons/FABMenu.svelte.d.ts +7 -3
  35. package/dist/components/buttons/FABMenuItem.svelte +20 -16
  36. package/dist/components/buttons/FABMenuItem.svelte.d.ts +3 -3
  37. package/dist/components/buttons/Toggle.stories.svelte +31 -23
  38. package/dist/components/buttons/Toggle.stories.svelte.d.ts +2 -17
  39. package/dist/components/buttons/Toggle.svelte +28 -25
  40. package/dist/components/buttons/Toggle.svelte.d.ts +5 -5
  41. package/dist/components/buttons/button-group/ButtonGroup.mdx +39 -0
  42. package/dist/components/buttons/button-group/ButtonGroup.stories.svelte +62 -43
  43. package/dist/components/buttons/button-group/ButtonGroup.stories.svelte.d.ts +2 -17
  44. package/dist/components/buttons/button-group/ButtonGroup.svelte +102 -8
  45. package/dist/components/buttons/button-group/ButtonGroup.svelte.d.ts +6 -7
  46. package/dist/components/buttons/button-group/theme.d.ts +46 -16
  47. package/dist/components/buttons/button-group/theme.js +14 -9
  48. package/dist/components/buttons/button-group/types.d.ts +13 -7
  49. package/dist/components/buttons/connected/ConnectedButtonGroup.mdx +43 -0
  50. package/dist/components/buttons/connected/ConnectedButtonGroup.stories.svelte +56 -74
  51. package/dist/components/buttons/connected/ConnectedButtonGroup.stories.svelte.d.ts +2 -17
  52. package/dist/components/buttons/connected/ConnectedButtonGroup.svelte +16 -4
  53. package/dist/components/buttons/connected/ConnectedButtonGroup.svelte.d.ts +4 -4
  54. package/dist/components/buttons/connected/ConnectedButtonGroupItem.svelte +35 -8
  55. package/dist/components/buttons/connected/ConnectedButtonGroupItem.svelte.d.ts +2 -3
  56. package/dist/components/buttons/connected/theme.d.ts +34 -19
  57. package/dist/components/buttons/connected/theme.js +33 -10
  58. package/dist/components/buttons/connected/types.d.ts +36 -9
  59. package/dist/components/buttons/shapeMorph.d.ts +26 -0
  60. package/dist/components/buttons/shapeMorph.js +142 -0
  61. package/dist/components/buttons/split-button/SplitButton.mdx +48 -0
  62. package/dist/components/buttons/split-button/SplitButton.stories.svelte +9 -14
  63. package/dist/components/buttons/split-button/SplitButton.svelte +66 -49
  64. package/dist/components/buttons/split-button/SplitButton.svelte.d.ts +6 -11
  65. package/dist/components/buttons/split-button/theme.d.ts +111 -18
  66. package/dist/components/buttons/split-button/theme.js +75 -17
  67. package/dist/components/buttons/split-button/types.d.ts +24 -18
  68. package/dist/components/buttons/theme.d.ts +423 -231
  69. package/dist/components/buttons/theme.js +287 -381
  70. package/dist/components/buttons/types.d.ts +130 -125
  71. package/dist/components/cards/Card.mdx +44 -0
  72. package/dist/components/cards/Card.stories.svelte +11 -11
  73. package/dist/components/cards/theme.js +6 -6
  74. package/dist/components/chips/Chip.mdx +68 -0
  75. package/dist/components/chips/Chip.stories.svelte +4 -4
  76. package/dist/components/chips/theme.d.ts +1 -1
  77. package/dist/components/chips/theme.js +4 -4
  78. package/dist/components/containers/action-rail/ActionRail.stories.svelte +1 -0
  79. package/dist/components/containers/action-rail/theme.d.ts +1 -1
  80. package/dist/components/containers/action-rail/theme.js +2 -2
  81. package/dist/components/containers/app/theme.d.ts +1 -1
  82. package/dist/components/containers/app/theme.js +1 -1
  83. package/dist/components/containers/bottom-sheet/BottomSheet.mdx +64 -0
  84. package/dist/components/containers/bottom-sheet/BottomSheet.stories.svelte +108 -12
  85. package/dist/components/containers/bottom-sheet/BottomSheet.svelte +179 -109
  86. package/dist/components/containers/bottom-sheet/BottomSheet.svelte.d.ts +10 -5
  87. package/dist/components/containers/bottom-sheet/index.d.ts +1 -0
  88. package/dist/components/containers/bottom-sheet/index.js +1 -0
  89. package/dist/components/containers/bottom-sheet/theme.d.ts +45 -0
  90. package/dist/components/containers/bottom-sheet/theme.js +42 -0
  91. package/dist/components/containers/bottom-sheet/types.d.ts +37 -5
  92. package/dist/components/containers/carousel/Carousel.mdx +80 -0
  93. package/dist/components/containers/carousel/Carousel.stories.svelte +131 -0
  94. package/dist/components/containers/carousel/Carousel.stories.svelte.d.ts +4 -0
  95. package/dist/components/containers/carousel/Carousel.svelte +194 -0
  96. package/dist/components/containers/carousel/Carousel.svelte.d.ts +25 -0
  97. package/dist/components/containers/carousel/index.d.ts +3 -0
  98. package/dist/components/containers/{stack → carousel}/index.js +1 -2
  99. package/dist/components/containers/carousel/keylines.d.ts +32 -0
  100. package/dist/components/containers/carousel/keylines.js +88 -0
  101. package/dist/components/containers/carousel/theme.d.ts +162 -0
  102. package/dist/components/containers/carousel/theme.js +67 -0
  103. package/dist/components/containers/carousel/types.d.ts +52 -0
  104. package/dist/components/containers/context-menu/ContextMenu.stories.svelte +1 -0
  105. package/dist/components/containers/context-menu/ContextMenu.svelte +2 -2
  106. package/dist/components/containers/context-menu/ContextMenu.svelte.d.ts +1 -1
  107. package/dist/components/containers/context-menu/theme.d.ts +1 -1
  108. package/dist/components/containers/context-menu/theme.js +11 -11
  109. package/dist/components/containers/dialogue/Dialogue.mdx +65 -0
  110. package/dist/components/containers/dialogue/Dialogue.stories.svelte +4 -4
  111. package/dist/components/containers/dialogue/Dialogue.svelte +2 -2
  112. package/dist/components/containers/dialogue/theme.d.ts +1 -1
  113. package/dist/components/containers/dialogue/theme.js +4 -4
  114. package/dist/components/containers/dialogue/types.d.ts +1 -1
  115. package/dist/components/containers/divider/Divider.stories.svelte +2 -1
  116. package/dist/components/containers/divider/Divider.svelte +2 -2
  117. package/dist/components/containers/divider/theme.d.ts +7 -7
  118. package/dist/components/containers/divider/theme.js +3 -3
  119. package/dist/components/containers/index.d.ts +1 -1
  120. package/dist/components/containers/index.js +1 -1
  121. package/dist/components/containers/link-preview/theme.d.ts +1 -1
  122. package/dist/components/containers/link-preview/theme.js +3 -3
  123. package/dist/components/containers/list/List.svelte +18 -0
  124. package/dist/components/containers/list/List.svelte.d.ts +4 -0
  125. package/dist/components/containers/list/ListItem.mdx +100 -0
  126. package/dist/components/containers/list/ListItem.stories.svelte +177 -42
  127. package/dist/components/containers/list/ListItem.stories.svelte.d.ts +2 -17
  128. package/dist/components/containers/list/ListItem.svelte +92 -37
  129. package/dist/components/containers/list/ListItem.svelte.d.ts +1 -1
  130. package/dist/components/containers/list/context.d.ts +6 -0
  131. package/dist/components/containers/list/context.js +4 -0
  132. package/dist/components/containers/list/index.d.ts +1 -0
  133. package/dist/components/containers/list/index.js +1 -0
  134. package/dist/components/containers/list/theme.d.ts +487 -12
  135. package/dist/components/containers/list/theme.js +141 -14
  136. package/dist/components/containers/list/types.d.ts +39 -5
  137. package/dist/components/containers/menu/Menu.mdx +52 -0
  138. package/dist/components/containers/menu/Menu.stories.svelte +14 -14
  139. package/dist/components/containers/menu/Menu.svelte +2 -2
  140. package/dist/components/containers/menu/MenuGroup.svelte +1 -1
  141. package/dist/components/containers/menu/MenuGroup.svelte.d.ts +1 -1
  142. package/dist/components/containers/menu/MenuSub.svelte +1 -1
  143. package/dist/components/containers/menu/menu-item/MenuItem.svelte +1 -1
  144. package/dist/components/containers/menu/theme.d.ts +1 -1
  145. package/dist/components/containers/menu/theme.js +9 -9
  146. package/dist/components/containers/pane/DraggablePane.stories.svelte +4 -3
  147. package/dist/components/containers/pane/DraggablePane.svelte +2 -2
  148. package/dist/components/containers/pane/Pane.stories.svelte +11 -10
  149. package/dist/components/containers/pane/Pane.svelte +24 -2
  150. package/dist/components/containers/pane/PaneGrid.stories.svelte +19 -18
  151. package/dist/components/containers/pane/PaneGrid.svelte +3 -2
  152. package/dist/components/containers/pane/PaneGrid.svelte.d.ts +2 -1
  153. package/dist/components/containers/pane/PaneHandle.svelte +48 -2
  154. package/dist/components/containers/pane/PaneHandle.svelte.d.ts +4 -0
  155. package/dist/components/containers/pane/resizeStore.svelte.d.ts +10 -1
  156. package/dist/components/containers/pane/resizeStore.svelte.js +13 -2
  157. package/dist/components/containers/pane/theme.d.ts +1 -1
  158. package/dist/components/containers/pane/theme.js +131 -47
  159. package/dist/components/containers/pane/types.d.ts +3 -2
  160. package/dist/components/containers/popover/Popover.mdx +45 -0
  161. package/dist/components/containers/popover/Popover.stories.svelte +1 -1
  162. package/dist/components/containers/popover/Popover.svelte +1 -1
  163. package/dist/components/containers/popover/theme.d.ts +1 -1
  164. package/dist/components/containers/popover/theme.js +4 -4
  165. package/dist/components/containers/scroll-area/theme.js +3 -3
  166. package/dist/components/containers/side-sheet/SideSheet.mdx +71 -0
  167. package/dist/components/containers/side-sheet/SideSheet.stories.svelte +113 -17
  168. package/dist/components/containers/side-sheet/SideSheet.svelte +113 -66
  169. package/dist/components/containers/side-sheet/SideSheet.svelte.d.ts +8 -7
  170. package/dist/components/containers/side-sheet/index.d.ts +1 -0
  171. package/dist/components/containers/side-sheet/index.js +1 -0
  172. package/dist/components/containers/side-sheet/theme.d.ts +108 -0
  173. package/dist/components/containers/side-sheet/theme.js +72 -0
  174. package/dist/components/containers/side-sheet/types.d.ts +35 -7
  175. package/dist/components/date/DateField.stories.svelte +4 -3
  176. package/dist/components/date/DateField.svelte +11 -2
  177. package/dist/components/date/DateRangeField.stories.svelte +4 -3
  178. package/dist/components/date/DateRangeField.svelte +12 -3
  179. package/dist/components/date/theme.d.ts +8 -8
  180. package/dist/components/date/theme.js +32 -32
  181. package/dist/components/forms/checkbox/Checkbox.mdx +35 -0
  182. package/dist/components/forms/checkbox/Checkbox.stories.svelte +2 -2
  183. package/dist/components/forms/checkbox/Checkbox.svelte +1 -1
  184. package/dist/components/forms/checkbox/theme.d.ts +1 -1
  185. package/dist/components/forms/checkbox/theme.js +4 -4
  186. package/dist/components/forms/command/Command.stories.svelte +1 -0
  187. package/dist/components/forms/command/theme.d.ts +1 -1
  188. package/dist/components/forms/command/theme.js +10 -10
  189. package/dist/components/forms/pin/theme.d.ts +1 -1
  190. package/dist/components/forms/pin/theme.js +5 -5
  191. package/dist/components/forms/radio-group/RadioGroup.svelte +1 -1
  192. package/dist/components/forms/radio-group/theme.d.ts +1 -1
  193. package/dist/components/forms/radio-group/theme.js +6 -6
  194. package/dist/components/forms/search/Search.mdx +38 -0
  195. package/dist/components/forms/search/Search.stories.svelte +19 -9
  196. package/dist/components/forms/search/Search.svelte +40 -17
  197. package/dist/components/forms/search/Search.svelte.d.ts +2 -2
  198. package/dist/components/forms/search/theme.d.ts +46 -13
  199. package/dist/components/forms/search/theme.js +14 -9
  200. package/dist/components/forms/search/types.d.ts +18 -12
  201. package/dist/components/forms/select/Select.mdx +53 -0
  202. package/dist/components/forms/select/Select.stories.svelte +4 -4
  203. package/dist/components/forms/select/Select.svelte +12 -4
  204. package/dist/components/forms/select/SelectItem.svelte +1 -1
  205. package/dist/components/forms/select/theme.d.ts +1 -1
  206. package/dist/components/forms/select/theme.js +14 -14
  207. package/dist/components/forms/slider/Slider.mdx +85 -0
  208. package/dist/components/forms/slider/Slider.stories.svelte +7 -7
  209. package/dist/components/forms/slider/Slider.svelte +46 -28
  210. package/dist/components/forms/slider/theme.d.ts +15 -1
  211. package/dist/components/forms/slider/theme.js +29 -18
  212. package/dist/components/forms/slider/types.d.ts +3 -2
  213. package/dist/components/forms/switch/Switch.mdx +38 -0
  214. package/dist/components/forms/switch/Switch.stories.svelte +3 -3
  215. package/dist/components/forms/switch/theme.d.ts +1 -1
  216. package/dist/components/forms/switch/theme.js +7 -7
  217. package/dist/components/forms/textfield/Textfield.mdx +53 -0
  218. package/dist/components/forms/textfield/Textfield.stories.svelte +6 -6
  219. package/dist/components/forms/textfield/Textfield.svelte +1 -0
  220. package/dist/components/forms/textfield/theme.d.ts +1 -1
  221. package/dist/components/forms/textfield/theme.js +20 -20
  222. package/dist/components/forms/toggle-group/theme.d.ts +1 -1
  223. package/dist/components/forms/toggle-group/theme.js +3 -3
  224. package/dist/components/forms/tooltip/Tooltip.stories.svelte +1 -0
  225. package/dist/components/forms/tooltip/theme.d.ts +1 -1
  226. package/dist/components/forms/tooltip/theme.js +4 -4
  227. package/dist/components/misc/Avatar.stories.svelte +5 -4
  228. package/dist/components/misc/ThemeSettings.svelte +9 -9
  229. package/dist/components/misc/ThemeSwitcher.svelte +3 -3
  230. package/dist/components/misc/theme.js +5 -5
  231. package/dist/components/nav/appbar/AppBar.mdx +71 -0
  232. package/dist/components/nav/appbar/AppBar.stories.svelte +93 -3
  233. package/dist/components/nav/appbar/AppBar.stories.svelte.d.ts +2 -17
  234. package/dist/components/nav/appbar/AppBar.svelte +90 -37
  235. package/dist/components/nav/appbar/AppBar.svelte.d.ts +9 -2
  236. package/dist/components/nav/appbar/theme.d.ts +86 -19
  237. package/dist/components/nav/appbar/theme.js +160 -24
  238. package/dist/components/nav/appbar/types.d.ts +46 -9
  239. package/dist/components/nav/breadcrumb/Breadcrumb.stories.svelte +1 -0
  240. package/dist/components/nav/breadcrumb/theme.d.ts +1 -1
  241. package/dist/components/nav/breadcrumb/theme.js +6 -6
  242. package/dist/components/nav/navbar/Navbar.mdx +38 -0
  243. package/dist/components/nav/navbar/Navbar.svelte +1 -1
  244. package/dist/components/nav/navbar/NavbarItem.svelte +12 -9
  245. package/dist/components/nav/navbar/theme.d.ts +3 -3
  246. package/dist/components/nav/navbar/theme.js +7 -7
  247. package/dist/components/nav/rail/Rail.mdx +73 -0
  248. package/dist/components/nav/rail/Rail.stories.svelte +3 -7
  249. package/dist/components/nav/rail/Rail.svelte +5 -2
  250. package/dist/components/nav/rail/RailItem.svelte +12 -9
  251. package/dist/components/nav/rail/theme.d.ts +1 -1
  252. package/dist/components/nav/rail/theme.js +14 -14
  253. package/dist/components/nav/rail/types.d.ts +8 -1
  254. package/dist/components/nav/tabs/Tabs.mdx +62 -0
  255. package/dist/components/nav/tabs/Tabs.stories.svelte +1 -1
  256. package/dist/components/nav/tabs/theme.d.ts +1 -1
  257. package/dist/components/nav/tabs/theme.js +5 -5
  258. package/dist/components/pill/Pill.mdx +32 -0
  259. package/dist/components/pill/Pill.stories.svelte +1 -1
  260. package/dist/components/pill/theme.d.ts +2 -2
  261. package/dist/components/pill/theme.js +2 -2
  262. package/dist/components/progress/LinearProgress.svelte +2 -2
  263. package/dist/components/progress/Progress.mdx +50 -0
  264. package/dist/components/progress/Progress.stories.svelte +6 -6
  265. package/dist/components/snackbar/Snackbar.mdx +52 -0
  266. package/dist/components/snackbar/Snackbar.stories.svelte +5 -5
  267. package/dist/components/snackbar/Snackbar.svelte +1 -1
  268. package/dist/components/snackbar/theme.d.ts +4 -4
  269. package/dist/components/snackbar/theme.js +5 -5
  270. package/dist/components/table/Table.stories.svelte +1 -0
  271. package/dist/components/table/TableHeader.svelte +1 -1
  272. package/dist/components/table/theme.d.ts +1 -1
  273. package/dist/components/table/theme.js +4 -4
  274. package/dist/components/time/TimeField.stories.svelte +3 -2
  275. package/dist/components/time/TimeField.svelte +2 -2
  276. package/dist/components/time/TimepickerInput.svelte +1 -1
  277. package/dist/components/time/theme.d.ts +1 -1
  278. package/dist/components/time/theme.js +6 -6
  279. package/dist/components/toolbar/Toolbar.stories.svelte +1 -0
  280. package/dist/components/toolbar/Toolbar.svelte +1 -1
  281. package/dist/components/toolbar/Toolbar.svelte.d.ts +1 -1
  282. package/dist/components/toolbar/theme.d.ts +1 -1
  283. package/dist/components/toolbar/theme.js +15 -15
  284. package/dist/components/typography/Typography.mdx +67 -0
  285. package/dist/components/typography/body/Body.stories.svelte +2 -1
  286. package/dist/components/typography/body/theme.d.ts +16 -13
  287. package/dist/components/typography/body/theme.js +20 -5
  288. package/dist/components/typography/body/types.d.ts +2 -1
  289. package/dist/components/typography/display/Display.stories.svelte +2 -1
  290. package/dist/components/typography/display/theme.d.ts +16 -13
  291. package/dist/components/typography/display/theme.js +20 -5
  292. package/dist/components/typography/display/types.d.ts +2 -1
  293. package/dist/components/typography/headline/Headline.stories.svelte +2 -1
  294. package/dist/components/typography/headline/theme.d.ts +16 -13
  295. package/dist/components/typography/headline/theme.js +20 -5
  296. package/dist/components/typography/headline/types.d.ts +2 -1
  297. package/dist/components/typography/kbd/Kbd.stories.svelte +2 -1
  298. package/dist/components/typography/kbd/theme.d.ts +5 -5
  299. package/dist/components/typography/kbd/theme.js +3 -3
  300. package/dist/components/typography/label/Label.stories.svelte +2 -1
  301. package/dist/components/typography/label/theme.d.ts +15 -12
  302. package/dist/components/typography/label/theme.js +20 -5
  303. package/dist/components/typography/label/types.d.ts +2 -1
  304. package/dist/components/typography/title/Title.stories.svelte +2 -1
  305. package/dist/components/typography/title/theme.d.ts +16 -13
  306. package/dist/components/typography/title/theme.js +20 -5
  307. package/dist/components/typography/title/types.d.ts +2 -1
  308. package/dist/index.css +2 -0
  309. package/dist/styles/component.css +78 -175
  310. package/dist/styles/elevation.css +9 -0
  311. package/dist/styles/layers.css +33 -0
  312. package/dist/styles/spacing.css +29 -0
  313. package/dist/styles/typescale.css +635 -20
  314. package/dist/utils/Layer.svelte +1 -1
  315. package/dist/utils/icon/Icon.svelte +8 -6
  316. package/dist/utils/icon/theme.d.ts +1 -1
  317. package/dist/utils/icon/theme.js +1 -1
  318. package/dist/utils/tv.d.ts +6 -0
  319. package/dist/utils/tv.js +12 -0
  320. package/package.json +19 -15
  321. package/dist/components/containers/stack/HStack.svelte +0 -23
  322. package/dist/components/containers/stack/HStack.svelte.d.ts +0 -5
  323. package/dist/components/containers/stack/VStack.svelte +0 -23
  324. package/dist/components/containers/stack/VStack.svelte.d.ts +0 -5
  325. package/dist/components/containers/stack/index.d.ts +0 -4
  326. package/dist/components/containers/stack/theme.d.ts +0 -66
  327. package/dist/components/containers/stack/theme.js +0 -26
  328. package/dist/components/containers/stack/types.d.ts +0 -12
  329. /package/dist/components/containers/{stack → carousel}/types.js +0 -0
@@ -2,45 +2,53 @@
2
2
  import { defineMeta } from '@storybook/addon-svelte-csf';
3
3
  import Toggle from './Toggle.svelte';
4
4
 
5
+ const variants = ['elevated', 'filled', 'tonal', 'outlined'] as const;
6
+
5
7
  const { Story } = defineMeta({
6
8
  title: 'Buttons/Toggle',
7
9
  component: Toggle,
10
+ tags: ['autodocs'],
8
11
  argTypes: {
9
- size: {
10
- control: 'select',
11
- options: ['xs', 'sm', 'md', 'lg', 'xl']
12
- },
13
- shape: {
14
- control: 'select',
15
- options: ['round', 'square']
16
- },
12
+ variant: { control: 'select', options: variants },
13
+ size: { control: 'select', options: ['xs', 'sm', 'md', 'lg', 'xl'] },
14
+ shape: { control: 'inline-radio', options: ['round', 'square'] },
17
15
  pressed: { control: 'boolean' },
18
- disabled: { control: 'boolean' },
19
- loading: { control: 'boolean' }
16
+ disabled: { control: 'boolean' }
20
17
  },
21
18
  args: {
22
- size: 'md',
19
+ variant: 'filled',
20
+ size: 'sm',
23
21
  shape: 'round',
24
22
  pressed: false,
25
- disabled: false,
26
- loading: false
23
+ disabled: false
27
24
  }
28
25
  });
29
26
  </script>
30
27
 
31
- <Story name="Playground">Toggle</Story>
28
+ <script lang="ts">
29
+ let selected = $state<Record<string, boolean>>({ tonal: true, outlined: true });
30
+ </script>
31
+
32
+ <Story name="Playground">
33
+ {#snippet template(args)}
34
+ <Toggle {...args} iconProps={{ name: 'bookmark' }}>Save</Toggle>
35
+ {/snippet}
36
+ </Story>
32
37
 
33
- <Story name="With Icon" asChild>
34
- <div class="flex flex-wrap items-center gap-4 p-6">
35
- <Toggle iconProps={{ name: 'format_bold' }}>Bold</Toggle>
36
- <Toggle iconProps={{ name: 'format_italic' }} pressed>Italic</Toggle>
38
+ <Story name="Colour styles" asChild>
39
+ <div class="gap-spacing-200 p-spacing-300 grid grid-cols-[auto_auto] items-center justify-start">
40
+ {#each variants as variant (variant)}
41
+ <Toggle {variant} iconProps={{ name: 'favorite' }}>{variant}</Toggle>
42
+ <Toggle {variant} pressed iconProps={{ name: 'favorite' }}>{variant}</Toggle>
43
+ {/each}
37
44
  </div>
38
45
  </Story>
39
46
 
40
- <Story name="States" asChild>
41
- <div class="flex flex-wrap items-center gap-4 p-6">
42
- <Toggle>Unpressed</Toggle>
43
- <Toggle pressed>Pressed</Toggle>
44
- <Toggle disabled>Disabled</Toggle>
47
+ <Story name="Shape swap" asChild>
48
+ <div class="gap-spacing-200 p-spacing-300 flex flex-wrap items-center">
49
+ <Toggle size="md" bind:pressed={selected.tonal} variant="tonal">Round → square</Toggle>
50
+ <Toggle size="md" bind:pressed={selected.outlined} variant="outlined" shape="square">
51
+ Square → round
52
+ </Toggle>
45
53
  </div>
46
54
  </Story>
@@ -1,19 +1,4 @@
1
1
  import Toggle from './Toggle.svelte';
2
- 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 Toggle: $$__sveltets_2_IsomorphicComponent<Record<string, never>, {
16
- [evt: string]: CustomEvent<any>;
17
- }, {}, {}, string>;
18
- type Toggle = InstanceType<typeof Toggle>;
2
+ declare const Toggle: import("svelte").Component<Record<string, never>, {}, "">;
3
+ type Toggle = ReturnType<typeof Toggle>;
19
4
  export default Toggle;
@@ -1,21 +1,23 @@
1
1
  <!--
2
2
  @component
3
- A toggle button that switches between pressed and unpressed states.
4
- Uses Material 3 selection button styling.
3
+ A toggle button: a button with a selected state, exposed as `aria-pressed`. Selecting changes its
4
+ colours and swaps its resting shape (round ↔ square).
5
5
 
6
- @see https://m3.material.io/components/all-buttons
6
+ @see https://m3.material.io/components/buttons/specs
7
7
  -->
8
8
  <script lang="ts">
9
- import type { ToggleMDProps } from './types.js';
9
+ import type { ToggleProps } from './types.js';
10
10
  import { Icon, LoadingIndicator, Layer } from '../../utils/index.js';
11
- import { button } from './theme.js';
11
+ import { button, buttonColor } from './theme.js';
12
12
  import clsx from 'clsx';
13
+ import { buttonCorners, shapeMorph } from './shapeMorph.js';
13
14
  import { Toggle, type ToggleRootProps } from 'bits-ui';
14
15
 
15
16
  let {
16
17
  children,
17
18
  iconProps,
18
- size = 'md',
19
+ variant = 'filled',
20
+ size = 'sm',
19
21
  shape = 'round',
20
22
  disabled,
21
23
  loading,
@@ -23,38 +25,39 @@ Uses Material 3 selection button styling.
23
25
  onPressedChange,
24
26
  class: className,
25
27
  ...restProps
26
- }: ToggleMDProps = $props();
28
+ }: ToggleProps = $props();
27
29
 
28
- const { base, icon } = $derived(
29
- button({
30
- usage: 'selection',
31
- shape,
32
- size,
33
- selected: pressed
30
+ let ref = $state<HTMLElement | null>(null);
31
+ $effect(() => (ref ? shapeMorph(ref, buttonCorners) : undefined));
32
+
33
+ const cls = $derived(button({ variant, size, shape, selected: pressed }));
34
+ const btnCls = $derived(
35
+ cls.base({
36
+ class: clsx(buttonColor({ variant, state: pressed ? 'selected' : 'unselected' }), className)
34
37
  })
35
38
  );
36
-
37
- const btnCls = $derived(base({ class: clsx(className) }));
38
39
  </script>
39
40
 
40
41
  <Toggle.Root
42
+ bind:ref
41
43
  bind:pressed
42
44
  {onPressedChange}
43
45
  {disabled}
44
46
  class={btnCls}
47
+ aria-busy={loading || undefined}
45
48
  data-cy="m3-toggle"
46
49
  {...restProps as ToggleRootProps}
47
50
  >
48
- {#if iconProps}
49
- {#if loading}
50
- <LoadingIndicator container class={icon()} />
51
- {:else}
52
- <Icon class={icon()} {...iconProps} />
53
- {@render children?.()}
54
- {/if}
55
- {:else if loading}
56
- <LoadingIndicator container />
57
- {:else}
51
+ {#if loading}
52
+ <LoadingIndicator center={false} class={cls.icon({ class: 'text-current' })} />
53
+ {:else if iconProps}
54
+ <Icon
55
+ fill={pressed ? 1 : 0}
56
+ {...iconProps}
57
+ class={cls.icon({ class: clsx(iconProps.class) })}
58
+ />
59
+ {/if}
60
+ {#if !loading || iconProps}
58
61
  {@render children?.()}
59
62
  {/if}
60
63
  <Layer />
@@ -1,11 +1,11 @@
1
- import type { ToggleMDProps } from './types.js';
1
+ import type { ToggleProps } from './types.js';
2
2
  import { Toggle } from 'bits-ui';
3
3
  /**
4
- * A toggle button that switches between pressed and unpressed states.
5
- * Uses Material 3 selection button styling.
4
+ * A toggle button: a button with a selected state, exposed as `aria-pressed`. Selecting changes its
5
+ * colours and swaps its resting shape (round ↔ square).
6
6
  *
7
- * @see https://m3.material.io/components/all-buttons
7
+ * @see https://m3.material.io/components/buttons/specs
8
8
  */
9
- declare const Toggle: import("svelte").Component<ToggleMDProps, {}, "pressed">;
9
+ declare const Toggle: import("svelte").Component<ToggleProps, {}, "pressed">;
10
10
  type Toggle = ReturnType<typeof Toggle>;
11
11
  export default Toggle;
@@ -0,0 +1,39 @@
1
+ import { Meta, Title, Subtitle, Canvas, Controls } from '@storybook/addon-docs/blocks';
2
+ import * as GroupStories from './ButtonGroup.stories.svelte';
3
+
4
+ <Meta of={GroupStories} />
5
+
6
+ <Title />
7
+
8
+ <Subtitle>Standard button groups space buttons and make them react to each other.</Subtitle>
9
+
10
+ [M3 spec](https://m3.material.io/components/button-groups/specs) ·
11
+ `import { ButtonGroup } from '@noxlovette/material';`
12
+
13
+ <Canvas of={GroupStories.Playground} />
14
+
15
+ <Controls of={GroupStories.Playground} />
16
+
17
+ ## Standard or connected
18
+
19
+ - **`ButtonGroup`** (standard) holds separate actions, such as Back, Play, Next. Pressing a
20
+ button widens it by 15% while the buttons beside it narrow to make room, then all settle back.
21
+ - **`ConnectedButtonGroup`** holds related options, one or several selected, such as Walk, Bike,
22
+ Drive. It replaces the segmented button.
23
+
24
+ ## Contents
25
+
26
+ Mix `Button`, `Toggle` and `ButtonIcon` freely, in the filled, tonal, outlined or elevated
27
+ styles. Avoid text buttons and standard icon buttons, which have no container to change. A
28
+ toggle inside swaps its shape as it's selected.
29
+
30
+ <Canvas of={GroupStories.MixedButtons} />
31
+
32
+ ## Size
33
+
34
+ Set `size` to the buttons' size. It sets the space between them so each keeps a 48dp target:
35
+ 18dp at XS, 12dp at S, 8dp from M up. The group takes its buttons' height.
36
+
37
+ <Canvas of={GroupStories.Sizes} />
38
+
39
+ The press interaction is horizontal only, and off under reduced motion.
@@ -2,20 +2,17 @@
2
2
  import { defineMeta } from '@storybook/addon-svelte-csf';
3
3
  import Button from '../Button.svelte';
4
4
  import ButtonIcon from '../ButtonIcon.svelte';
5
+ import Toggle from '../Toggle.svelte';
5
6
  import ButtonGroup from './ButtonGroup.svelte';
6
7
 
8
+ const sizes = ['xs', 'sm', 'md', 'lg', 'xl'] as const;
9
+
7
10
  const { Story } = defineMeta({
8
11
  title: 'Buttons/Button Group',
9
12
  component: ButtonGroup,
10
13
  argTypes: {
11
- orientation: {
12
- control: 'select',
13
- options: ['horizontal', 'vertical']
14
- },
15
- size: {
16
- control: 'select',
17
- options: ['xs', 'sm', 'md', 'lg', 'xl']
18
- }
14
+ orientation: { control: 'inline-radio', options: ['horizontal', 'vertical'] },
15
+ size: { control: 'select', options: sizes }
19
16
  },
20
17
  args: {
21
18
  orientation: 'horizontal',
@@ -24,57 +21,79 @@
24
21
  });
25
22
  </script>
26
23
 
24
+ <script lang="ts">
25
+ let playing = $state(false);
26
+ </script>
27
+
27
28
  <Story name="Playground">
28
29
  {#snippet template(args)}
29
- <ButtonGroup orientation={args.orientation} size={args.size}>
30
- <Button variant="tonal">Left</Button>
31
- <Button variant="tonal">Center</Button>
32
- <Button variant="tonal">Right</Button>
30
+ <ButtonGroup orientation={args.orientation} size={args.size} aria-label="Playback">
31
+ <Button size={args.size} variant="tonal">Back</Button>
32
+ <Button size={args.size}>Play</Button>
33
+ <Button size={args.size} variant="tonal">Next</Button>
33
34
  </ButtonGroup>
34
35
  {/snippet}
35
36
  </Story>
36
37
 
37
- <Story name="Mixed Variants and Colors" asChild>
38
- <div class="p-6">
39
- <ButtonGroup size="sm">
40
- <Button variant="outlined">Cancel</Button>
41
- <Button variant="tonal" color="secondary">Save draft</Button>
42
- <Button variant="filled" color="primary">Publish</Button>
38
+ <Story name="Mixed buttons" asChild>
39
+ <div class="gap-spacing-400 p-spacing-300 flex flex-col items-start">
40
+ <ButtonGroup size="md" aria-label="Player">
41
+ <ButtonIcon
42
+ size="md"
43
+ variant="tonal"
44
+ width="wide"
45
+ aria-label="Previous"
46
+ iconProps={{ name: 'skip_previous' }}
47
+ />
48
+ <Toggle
49
+ size="md"
50
+ bind:pressed={playing}
51
+ iconProps={{ name: playing ? 'pause' : 'play_arrow' }}
52
+ >
53
+ {playing ? 'Pause' : 'Play'}
54
+ </Toggle>
55
+ <ButtonIcon
56
+ size="md"
57
+ variant="tonal"
58
+ width="wide"
59
+ aria-label="Next"
60
+ iconProps={{ name: 'skip_next' }}
61
+ />
43
62
  </ButtonGroup>
44
- </div>
45
- </Story>
46
-
47
- <Story name="Icon Toolbar" asChild>
48
- <div class="flex flex-wrap gap-8 p-6">
49
- <ButtonGroup size="sm">
50
- <ButtonIcon variant="tonal" variation="toggle" iconProps={{ name: 'mic' }} />
51
- <ButtonIcon variant="tonal" variation="toggle" iconProps={{ name: 'videocam' }} />
52
- <ButtonIcon variant="tonal" iconProps={{ name: 'more_vert' }} />
53
- <ButtonIcon variant="filled" color="error" iconProps={{ name: 'call_end' }} />
63
+ <ButtonGroup size="sm" aria-label="Call">
64
+ <ButtonIcon
65
+ variant="tonal"
66
+ variation="toggle"
67
+ aria-label="Mute"
68
+ iconProps={{ name: 'mic' }}
69
+ />
70
+ <ButtonIcon
71
+ variant="tonal"
72
+ variation="toggle"
73
+ aria-label="Camera"
74
+ iconProps={{ name: 'videocam' }}
75
+ />
76
+ <ButtonIcon variant="outlined" aria-label="More" iconProps={{ name: 'more_vert' }} />
77
+ <ButtonIcon width="wide" aria-label="End call" iconProps={{ name: 'call_end' }} />
54
78
  </ButtonGroup>
55
79
  </div>
56
80
  </Story>
57
81
 
58
82
  <Story name="Sizes" asChild>
59
- <div class="flex flex-wrap items-center gap-8 p-6">
60
- <ButtonGroup size="xs">
61
- <Button size="xs" variant="tonal">XS</Button>
62
- <Button size="xs" variant="tonal">XS</Button>
63
- </ButtonGroup>
64
- <ButtonGroup size="md">
65
- <Button size="md" variant="tonal">M</Button>
66
- <Button size="md" variant="tonal">M</Button>
67
- </ButtonGroup>
68
- <ButtonGroup size="xl">
69
- <Button size="xl" variant="tonal">XL</Button>
70
- <Button size="xl" variant="tonal">XL</Button>
71
- </ButtonGroup>
83
+ <div class="gap-spacing-300 p-spacing-300 flex flex-col items-start">
84
+ {#each sizes as size (size)}
85
+ <ButtonGroup {size}>
86
+ <Button {size} variant="tonal">One</Button>
87
+ <Button {size}>Two</Button>
88
+ <Button {size} variant="tonal">Three</Button>
89
+ </ButtonGroup>
90
+ {/each}
72
91
  </div>
73
92
  </Story>
74
93
 
75
94
  <Story name="Vertical" asChild>
76
- <div class="p-6">
77
- <ButtonGroup orientation="vertical" size="sm">
95
+ <div class="p-spacing-300">
96
+ <ButtonGroup orientation="vertical">
78
97
  <Button variant="tonal">Top</Button>
79
98
  <Button variant="tonal">Middle</Button>
80
99
  <Button variant="tonal">Bottom</Button>
@@ -1,19 +1,4 @@
1
1
  import ButtonGroup from './ButtonGroup.svelte';
2
- 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 ButtonGroup: $$__sveltets_2_IsomorphicComponent<Record<string, never>, {
16
- [evt: string]: CustomEvent<any>;
17
- }, {}, {}, string>;
18
- type ButtonGroup = InstanceType<typeof ButtonGroup>;
2
+ declare const ButtonGroup: import("svelte").Component<Record<string, never>, {}, "">;
3
+ type ButtonGroup = ReturnType<typeof ButtonGroup>;
19
4
  export default ButtonGroup;
@@ -1,17 +1,19 @@
1
1
  <!--
2
2
  @component
3
- A standard button group — an invisible container that adds spacing between
4
- buttons and lets them mix variants, colors, and widths freely. Pressing a
5
- button also nudges the width of its immediate neighbors, per the M3 spec.
3
+ A standard button group: an invisible container that spaces buttons and adds an interaction
4
+ between neighbours. Pressing a button widens it by 15% while the buttons beside it narrow to
5
+ make room, on the fast spatial spring; a toggle inside also swaps its shape as it's selected.
6
+ Children keep their own style, so filled, tonal and outlined buttons and icon buttons mix freely.
6
7
 
7
- Buttons keep their own identity here; this is a plain layout wrapper around
8
- `Button` / `ButtonIcon` / `Toggle` children, not a selection primitive. For a
9
- single/multi-select segmented control, use `ConnectedButtonGroup` instead.
8
+ For a set of related options where one or more is selected, use `ConnectedButtonGroup`.
10
9
 
11
- @see https://m3.material.io/components/button-groups/overview
10
+ @see https://m3.material.io/components/button-groups/specs
12
11
  -->
13
12
  <script lang="ts">
14
13
  import clsx from 'clsx';
14
+ import { animate } from 'motion';
15
+ import type { Attachment } from 'svelte/attachments';
16
+ import { springTokens, springTransition } from '../../../animation/spring.js';
15
17
  import { buttonGroup } from './theme.js';
16
18
  import type { ButtonGroupProps } from './types.js';
17
19
 
@@ -19,12 +21,104 @@ single/multi-select segmented control, use `ConnectedButtonGroup` instead.
19
21
  orientation = 'horizontal',
20
22
  size = 'sm',
21
23
  children,
24
+ 'aria-label': ariaLabel,
22
25
  class: className
23
26
  }: ButtonGroupProps = $props();
24
27
 
25
28
  const cls = $derived(buttonGroup({ orientation, size }));
29
+
30
+ const GROW = 0.15;
31
+ const spring = springTransition(springTokens.fastSpatial);
32
+ const reducedMotion = () =>
33
+ typeof matchMedia === 'function' && matchMedia('(prefers-reduced-motion: reduce)').matches;
34
+
35
+ // The pressed button and its neighbours, with their widths before the press.
36
+ type Press = { items: { el: HTMLElement; width: number; to: number }[] };
37
+
38
+ const squeeze: Attachment<HTMLElement> = (group) => {
39
+ let press: Press | null = null;
40
+ // Widths at rest, kept while a release is still settling so a quick re-press starts from them.
41
+ const rest = new WeakMap<HTMLElement, number>();
42
+
43
+ const isEnabled = (el: Element | null): el is HTMLElement =>
44
+ el instanceof HTMLElement &&
45
+ !el.matches(':disabled, [aria-disabled="true"], [data-disabled]');
46
+
47
+ const itemOf = (target: EventTarget | null) => {
48
+ if (!(target instanceof Node)) return null;
49
+ let el = target instanceof Element ? target : target.parentElement;
50
+ while (el && el.parentElement !== group) el = el.parentElement;
51
+ return el && isEnabled(el) ? el : null;
52
+ };
53
+
54
+ const widthOf = (el: HTMLElement) => {
55
+ if (!rest.has(el)) rest.set(el, el.getBoundingClientRect().width);
56
+ return rest.get(el)!;
57
+ };
58
+
59
+ const start = (el: HTMLElement) => {
60
+ if (orientation !== 'horizontal' || press || reducedMotion()) return;
61
+ const width = widthOf(el);
62
+ const neighbours = [el.previousElementSibling, el.nextElementSibling].filter(isEnabled);
63
+ const share = (width * GROW) / Math.max(neighbours.length, 1);
64
+ press = {
65
+ items: [
66
+ { el, width, to: width * (1 + GROW) },
67
+ ...neighbours.map((n) => {
68
+ const w = widthOf(n);
69
+ return { el: n, width: w, to: Math.max(w - share, 0) };
70
+ })
71
+ ]
72
+ };
73
+ for (const { el: item, to } of press.items) animate(item, { width: `${to}px` }, spring);
74
+ };
75
+
76
+ const end = () => {
77
+ if (!press) return;
78
+ const { items } = press;
79
+ press = null;
80
+ for (const { el, width } of items) {
81
+ animate(el, { width: `${width}px` }, spring).then(() => {
82
+ // Hand the width back to the layout, unless a new press picked this button up.
83
+ if (press?.items.some((i) => i.el === el)) return;
84
+ el.style.width = '';
85
+ rest.delete(el);
86
+ });
87
+ }
88
+ };
89
+
90
+ const onPointerDown = (e: PointerEvent) => {
91
+ if (e.button !== 0) return;
92
+ const el = itemOf(e.target);
93
+ if (el) start(el);
94
+ };
95
+ const onKeyDown = (e: KeyboardEvent) => {
96
+ if (e.repeat || (e.key !== ' ' && e.key !== 'Enter')) return;
97
+ const el = itemOf(e.target);
98
+ if (el) start(el);
99
+ };
100
+
101
+ group.addEventListener('pointerdown', onPointerDown);
102
+ group.addEventListener('keydown', onKeyDown);
103
+ group.addEventListener('keyup', end);
104
+ window.addEventListener('pointerup', end);
105
+ window.addEventListener('pointercancel', end);
106
+ return () => {
107
+ group.removeEventListener('pointerdown', onPointerDown);
108
+ group.removeEventListener('keydown', onKeyDown);
109
+ group.removeEventListener('keyup', end);
110
+ window.removeEventListener('pointerup', end);
111
+ window.removeEventListener('pointercancel', end);
112
+ };
113
+ };
26
114
  </script>
27
115
 
28
- <div class={cls.root({ class: clsx(className) })} data-size={size} data-orientation={orientation}>
116
+ <div
117
+ role="group"
118
+ aria-label={ariaLabel}
119
+ data-orientation={orientation}
120
+ class={cls.root({ class: clsx(className) })}
121
+ {@attach squeeze}
122
+ >
29
123
  {@render children()}
30
124
  </div>
@@ -1,14 +1,13 @@
1
1
  import type { ButtonGroupProps } from './types.js';
2
2
  /**
3
- * A standard button group — an invisible container that adds spacing between
4
- * buttons and lets them mix variants, colors, and widths freely. Pressing a
5
- * button also nudges the width of its immediate neighbors, per the M3 spec.
3
+ * A standard button group: an invisible container that spaces buttons and adds an interaction
4
+ * between neighbours. Pressing a button widens it by 15% while the buttons beside it narrow to
5
+ * make room, on the fast spatial spring; a toggle inside also swaps its shape as it's selected.
6
+ * Children keep their own style, so filled, tonal and outlined buttons and icon buttons mix freely.
6
7
  *
7
- * Buttons keep their own identity here; this is a plain layout wrapper around
8
- * `Button` / `ButtonIcon` / `Toggle` children, not a selection primitive. For a
9
- * single/multi-select segmented control, use `ConnectedButtonGroup` instead.
8
+ * For a set of related options where one or more is selected, use `ConnectedButtonGroup`.
10
9
  *
11
- * @see https://m3.material.io/components/button-groups/overview
10
+ * @see https://m3.material.io/components/button-groups/specs
12
11
  */
13
12
  declare const ButtonGroup: import("svelte").Component<ButtonGroupProps, {}, "">;
14
13
  type ButtonGroup = ReturnType<typeof ButtonGroup>;
@@ -1,4 +1,4 @@
1
- import { type VariantProps } from 'tailwind-variants';
1
+ import { type VariantProps } from '../../../utils/tv.js';
2
2
  export type ButtonGroupVariants = VariantProps<typeof buttonGroup>;
3
3
  export declare const buttonGroup: import("tailwind-variants").TVReturnType<{
4
4
  orientation: {
@@ -10,11 +10,21 @@ export declare const buttonGroup: import("tailwind-variants").TVReturnType<{
10
10
  };
11
11
  };
12
12
  size: {
13
- xs: {};
14
- sm: {};
15
- md: {};
16
- lg: {};
17
- xl: {};
13
+ xs: {
14
+ root: string;
15
+ };
16
+ sm: {
17
+ root: string;
18
+ };
19
+ md: {
20
+ root: string;
21
+ };
22
+ lg: {
23
+ root: string;
24
+ };
25
+ xl: {
26
+ root: string;
27
+ };
18
28
  };
19
29
  }, {
20
30
  root: string;
@@ -28,11 +38,21 @@ export declare const buttonGroup: import("tailwind-variants").TVReturnType<{
28
38
  };
29
39
  };
30
40
  size: {
31
- xs: {};
32
- sm: {};
33
- md: {};
34
- lg: {};
35
- xl: {};
41
+ xs: {
42
+ root: string;
43
+ };
44
+ sm: {
45
+ root: string;
46
+ };
47
+ md: {
48
+ root: string;
49
+ };
50
+ lg: {
51
+ root: string;
52
+ };
53
+ xl: {
54
+ root: string;
55
+ };
36
56
  };
37
57
  }, {
38
58
  root: string;
@@ -46,11 +66,21 @@ export declare const buttonGroup: import("tailwind-variants").TVReturnType<{
46
66
  };
47
67
  };
48
68
  size: {
49
- xs: {};
50
- sm: {};
51
- md: {};
52
- lg: {};
53
- xl: {};
69
+ xs: {
70
+ root: string;
71
+ };
72
+ sm: {
73
+ root: string;
74
+ };
75
+ md: {
76
+ root: string;
77
+ };
78
+ lg: {
79
+ root: string;
80
+ };
81
+ xl: {
82
+ root: string;
83
+ };
54
84
  };
55
85
  }, {
56
86
  root: string;