@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
@@ -1,19 +1,24 @@
1
- import { tv } from 'tailwind-variants';
1
+ import { tv } from '../../../utils/tv.js';
2
+ /*
3
+ * Standard button group, per https://m3.material.io/components/button-groups/specs: an invisible
4
+ * container that spaces its buttons so each keeps a 48dp target (18/12/8/8/8dp for XS–XL).
5
+ * Pressing a button widens it by 15% and its neighbours give that width back (ButtonGroup.svelte).
6
+ */
2
7
  export const buttonGroup = tv({
3
8
  slots: {
4
- root: 'md-btn-group-standard'
9
+ root: 'inline-flex w-max flex-nowrap'
5
10
  },
6
11
  variants: {
7
12
  orientation: {
8
- horizontal: { root: 'flex-row' },
9
- vertical: { root: 'flex-col' }
13
+ horizontal: { root: 'flex-row items-center' },
14
+ vertical: { root: 'w-auto flex-col items-stretch' }
10
15
  },
11
16
  size: {
12
- xs: {},
13
- sm: {},
14
- md: {},
15
- lg: {},
16
- xl: {}
17
+ xs: { root: 'gap-[1.125rem]' },
18
+ sm: { root: 'gap-spacing-150' },
19
+ md: { root: 'gap-spacing-100' },
20
+ lg: { root: 'gap-spacing-100' },
21
+ xl: { root: 'gap-spacing-100' }
17
22
  }
18
23
  },
19
24
  defaultVariants: {
@@ -1,14 +1,20 @@
1
1
  import type { Snippet } from 'svelte';
2
- import type { ButtonGroupVariants } from './theme.js';
3
- export type ButtonGroupProps = ButtonGroupVariants & {
4
- /** Layout direction of the buttons. */
2
+ import type { ButtonSize } from '../theme.js';
3
+ export type ButtonGroupProps = {
4
+ /** @default 'horizontal' */
5
5
  orientation?: 'horizontal' | 'vertical';
6
6
  /**
7
- * Drives the gap between buttons and the press-squeeze amount applied to a
8
- * pressed button's immediate neighbors. Match the size of the buttons inside.
7
+ * The size of the buttons inside. Sets the space between them: 18, 12, 8, 8 and 8dp for XS to
8
+ * XL, so each keeps a 48dp target.
9
+ * @default 'sm'
10
+ */
11
+ size?: ButtonSize;
12
+ /**
13
+ * `Button`s, `Toggle`s and `ButtonIcon`s, mixed freely. Avoid `text` buttons and `standard`
14
+ * icon buttons, which have no container to change shape.
9
15
  */
10
- size?: ButtonGroupVariants['size'];
11
- /** The buttons in the group — `Button`, `ButtonIcon`, or `Toggle` components, mixed freely. */
12
16
  children: Snippet;
17
+ /** Accessible name, when the group needs one (it gets `role="group"`). */
18
+ 'aria-label'?: string;
13
19
  class?: string;
14
20
  };
@@ -0,0 +1,43 @@
1
+ import { Meta, Title, Subtitle, Canvas, Controls } from '@storybook/addon-docs/blocks';
2
+ import * as ConnectedStories from './ConnectedButtonGroup.stories.svelte';
3
+
4
+ <Meta of={ConnectedStories} />
5
+
6
+ <Title />
7
+
8
+ <Subtitle>Connected button groups show related options, one or several selected.</Subtitle>
9
+
10
+ [M3 spec](https://m3.material.io/components/button-groups/specs) ·
11
+ `import { ConnectedButtonGroup, ConnectedButtonGroupItem } from '@noxlovette/material';`
12
+
13
+ <Canvas of={ConnectedStories.Playground} />
14
+
15
+ <Controls of={ConnectedStories.Playground} />
16
+
17
+ ## When to use
18
+
19
+ For a small set of related options that change what the page shows, such as Walk, Bike, Drive.
20
+ It replaces M3's segmented button. For separate actions, use `ButtonGroup`.
21
+ `type="single"` keeps one item selected; `type="multiple"` allows several.
22
+
23
+ ## Colour and shape
24
+
25
+ Items are toggle buttons in the group's `variant`: filled (default), tonal, outlined or
26
+ elevated, with the same unselected and selected colours as `Toggle`. Selection shows through
27
+ colour and shape, not a check mark:
28
+
29
+ - Items sit 2dp apart. The outer corners are fully round, or the inner size with
30
+ `shape="square"`.
31
+ - Inner corners are 8dp (16dp at L, 20dp at XL), tighten while pressed, and round out fully on
32
+ the selected item. Neighbours never change.
33
+
34
+ <Canvas of={ConnectedStories.ColourStyles} />
35
+
36
+ <Canvas of={ConnectedStories.SizesAndShapes} />
37
+
38
+ ## Accessibility
39
+
40
+ Name the group with `aria-label`, and give icon-only items an `aria-label`. Arrow keys move
41
+ between items; Space and Enter select. XS and S items are at least 48dp wide.
42
+
43
+ <Canvas of={ConnectedStories.MultiSelectIcons} />
@@ -3,29 +3,22 @@
3
3
  import ConnectedButtonGroup from './ConnectedButtonGroup.svelte';
4
4
  import ConnectedButtonGroupItem from './ConnectedButtonGroupItem.svelte';
5
5
 
6
+ const sizes = ['xs', 'sm', 'md', 'lg', 'xl'] as const;
7
+ const variants = ['filled', 'tonal', 'outlined', 'elevated'] as const;
8
+
6
9
  const { Story } = defineMeta({
7
10
  title: 'Buttons/Connected Button Group',
8
11
  component: ConnectedButtonGroup,
9
12
  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
- }
13
+ type: { control: 'inline-radio', options: ['single', 'multiple'] },
14
+ variant: { control: 'select', options: variants },
15
+ orientation: { control: 'inline-radio', options: ['horizontal', 'vertical'] },
16
+ shape: { control: 'inline-radio', options: ['round', 'square'] },
17
+ size: { control: 'select', options: sizes }
26
18
  },
27
19
  args: {
28
20
  type: 'single',
21
+ variant: 'filled',
29
22
  orientation: 'horizontal',
30
23
  shape: 'round',
31
24
  size: 'sm'
@@ -33,86 +26,75 @@
33
26
  });
34
27
  </script>
35
28
 
29
+ <script lang="ts">
30
+ let mode = $state('bike');
31
+ let format = $state<string[]>(['bold']);
32
+ </script>
33
+
36
34
  <Story name="Playground">
37
35
  {#snippet template(args)}
38
36
  <ConnectedButtonGroup
39
- type={args.type}
40
- orientation={args.orientation}
41
- shape={args.shape}
42
- size={args.size}
43
- value="left"
37
+ {...args}
38
+ value={args.type === 'multiple' ? [] : 'walk'}
39
+ aria-label="Travel mode"
44
40
  >
41
+ <ConnectedButtonGroupItem value="walk" label="Walk" iconProps={{ name: 'directions_walk' }} />
42
+ <ConnectedButtonGroupItem value="bike" label="Bike" iconProps={{ name: 'directions_bike' }} />
45
43
  <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' }}
44
+ value="drive"
45
+ label="Drive"
46
+ iconProps={{ name: 'directions_car' }}
59
47
  />
60
48
  </ConnectedButtonGroup>
61
49
  {/snippet}
62
50
  </Story>
63
51
 
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' }} />
52
+ <Story name="Colour styles" asChild>
53
+ <div class="gap-spacing-200 p-spacing-300 flex max-w-md flex-col">
54
+ {#each variants as variant (variant)}
55
+ <ConnectedButtonGroup type="single" {variant} bind:value={mode} aria-label="Travel mode">
56
+ <ConnectedButtonGroupItem value="walk" label="Walk" />
57
+ <ConnectedButtonGroupItem value="bike" label="Bike" />
58
+ <ConnectedButtonGroupItem value="drive" label="Drive" />
59
+ </ConnectedButtonGroup>
60
+ {/each}
61
+ </div>
62
+ </Story>
63
+
64
+ <Story name="Multi-select icons" asChild>
65
+ <div class="gap-spacing-200 p-spacing-300 flex flex-col items-start">
66
+ <ConnectedButtonGroup type="multiple" bind:value={format} class="w-auto" aria-label="Format">
67
+ <ConnectedButtonGroupItem
68
+ value="bold"
69
+ aria-label="Bold"
70
+ iconProps={{ name: 'format_bold' }}
71
+ />
68
72
  <ConnectedButtonGroupItem
69
73
  value="italic"
70
- label="Italic"
74
+ aria-label="Italic"
71
75
  iconProps={{ name: 'format_italic' }}
72
76
  />
73
77
  <ConnectedButtonGroupItem
74
78
  value="underline"
75
- label="Underline"
79
+ aria-label="Underline"
76
80
  iconProps={{ name: 'format_underlined' }}
77
81
  />
78
82
  </ConnectedButtonGroup>
79
83
  </div>
80
84
  </Story>
81
85
 
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>
86
+ <Story name="Sizes and shapes" asChild>
87
+ <div class="gap-spacing-200 p-spacing-300 flex max-w-xl flex-col">
88
+ {#each sizes as size (size)}
89
+ <div class="gap-spacing-200 flex">
90
+ {#each ['round', 'square'] as const as shape (shape)}
91
+ <ConnectedButtonGroup type="single" {size} {shape} value="b">
92
+ <ConnectedButtonGroupItem value="a" label="A" />
93
+ <ConnectedButtonGroupItem value="b" label="B" />
94
+ <ConnectedButtonGroupItem value="c" label="C" />
95
+ </ConnectedButtonGroup>
96
+ {/each}
97
+ </div>
107
98
  {/each}
108
99
  </div>
109
100
  </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>
@@ -1,19 +1,4 @@
1
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>;
2
+ declare const ConnectedButtonGroup: import("svelte").Component<Record<string, never>, {}, "">;
3
+ type ConnectedButtonGroup = ReturnType<typeof ConnectedButtonGroup>;
19
4
  export default ConnectedButtonGroup;
@@ -1,9 +1,9 @@
1
1
  <!--
2
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'.
3
+ A connected button group, M3's replacement for the segmented button: toggle buttons 2dp apart
4
+ in one shared shape, for related options such as Walk, Bike, Drive. Selecting an item rounds it
5
+ out and gives it the selected colours; pressing tightens its inner corners. Neighbours never
6
+ change.
7
7
 
8
8
  @see https://m3.material.io/components/button-groups/overview
9
9
  -->
@@ -21,9 +21,11 @@ color, never its neighbors'.
21
21
  disabled = false,
22
22
  loop = true,
23
23
  orientation = 'horizontal',
24
+ variant = 'filled',
24
25
  shape = 'round',
25
26
  size = 'sm',
26
27
  children,
28
+ 'aria-label': ariaLabel,
27
29
  class: className
28
30
  }: ConnectedButtonGroupProps = $props();
29
31
 
@@ -35,6 +37,15 @@ color, never its neighbors'.
35
37
  },
36
38
  get shape() {
37
39
  return shape;
40
+ },
41
+ get variant() {
42
+ return variant;
43
+ },
44
+ get type() {
45
+ return type;
46
+ },
47
+ get value() {
48
+ return value;
38
49
  }
39
50
  });
40
51
  </script>
@@ -46,6 +57,7 @@ color, never its neighbors'.
46
57
  {disabled}
47
58
  {loop}
48
59
  {orientation}
60
+ aria-label={ariaLabel}
49
61
  class={cls.root({ class: clsx(className) })}
50
62
  >
51
63
  {@render children?.()}
@@ -1,9 +1,9 @@
1
1
  import type { ConnectedButtonGroupProps } from './types.js';
2
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'.
3
+ * A connected button group, M3's replacement for the segmented button: toggle buttons 2dp apart
4
+ * in one shared shape, for related options such as Walk, Bike, Drive. Selecting an item rounds it
5
+ * out and gives it the selected colours; pressing tightens its inner corners. Neighbours never
6
+ * change.
7
7
  *
8
8
  * @see https://m3.material.io/components/button-groups/overview
9
9
  */
@@ -1,14 +1,15 @@
1
1
  <!--
2
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.
3
+ One item of a `ConnectedButtonGroup`: a toggle button. Selection shows through its colour and
4
+ shape (it rounds out), not a check mark.
6
5
  -->
7
6
  <script lang="ts">
8
7
  import { ToggleGroup } from 'bits-ui';
9
8
  import clsx from 'clsx';
10
9
  import { getContext } from 'svelte';
11
10
  import { Icon, Layer } from '../../../utils/index.js';
11
+ import { buttonColor, buttonElevation } from '../theme.js';
12
+ import { connectedCorners, shapeMorph } from '../shapeMorph.js';
12
13
  import { connectedButtonGroupItem } from './theme.js';
13
14
  import type { ConnectedButtonGroupCtx, ConnectedButtonGroupItemProps } from './types.js';
14
15
 
@@ -17,18 +18,44 @@ through an overlaid check icon.
17
18
  label,
18
19
  iconProps,
19
20
  disabled = false,
21
+ 'aria-label': ariaLabel,
20
22
  class: className
21
23
  }: ConnectedButtonGroupItemProps = $props();
22
24
 
25
+ let ref = $state<HTMLElement | null>(null);
26
+ $effect(() => (ref ? shapeMorph(ref, connectedCorners) : undefined));
27
+
23
28
  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 }));
29
+ const variant = $derived(ctx?.variant ?? 'filled');
30
+ const selected = $derived(
31
+ ctx?.type === 'multiple'
32
+ ? Array.isArray(ctx.value) && ctx.value.includes(value)
33
+ : ctx?.value === value
34
+ );
35
+ const cls = $derived(
36
+ connectedButtonGroupItem({ size: ctx?.size ?? 'sm', shape: ctx?.shape ?? 'round' })
37
+ );
27
38
  </script>
28
39
 
29
- <ToggleGroup.Item {value} {disabled} class={base({ class: clsx(className) })}>
40
+ <ToggleGroup.Item
41
+ bind:ref
42
+ {value}
43
+ {disabled}
44
+ aria-label={ariaLabel}
45
+ class={cls.base({
46
+ class: clsx(
47
+ buttonColor({ variant, state: selected ? 'selected' : 'unselected' }),
48
+ buttonElevation[variant],
49
+ className
50
+ )
51
+ })}
52
+ >
30
53
  {#if iconProps}
31
- <Icon {...iconProps} class={icon()} />
54
+ <Icon
55
+ fill={selected ? 1 : 0}
56
+ {...iconProps}
57
+ class={cls.icon({ class: clsx(iconProps.class) })}
58
+ />
32
59
  {/if}
33
60
  {#if label}
34
61
  <span>{label}</span>
@@ -1,8 +1,7 @@
1
1
  import type { ConnectedButtonGroupItemProps } from './types.js';
2
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.
3
+ * One item of a `ConnectedButtonGroup`: a toggle button. Selection shows through its colour and
4
+ * shape (it rounds out), not a check mark.
6
5
  */
7
6
  declare const ConnectedButtonGroupItem: import("svelte").Component<ConnectedButtonGroupItemProps, {}, "">;
8
7
  type ConnectedButtonGroupItem = ReturnType<typeof ConnectedButtonGroupItem>;
@@ -1,4 +1,4 @@
1
- import { type VariantProps } from 'tailwind-variants';
1
+ import { type VariantProps } from '../../../utils/tv.js';
2
2
  export type ConnectedButtonGroupVariants = VariantProps<typeof connectedButtonGroup>;
3
3
  export type ConnectedButtonGroupItemVariants = VariantProps<typeof connectedButtonGroupItem>;
4
4
  export declare const connectedButtonGroup: import("tailwind-variants").TVReturnType<{
@@ -38,19 +38,24 @@ export declare const connectedButtonGroup: import("tailwind-variants").TVReturnT
38
38
  export declare const connectedButtonGroupItem: import("tailwind-variants").TVReturnType<{
39
39
  size: {
40
40
  xs: {
41
- base: string;
41
+ base: string[];
42
+ icon: "size-spacing-250 text-[20px]";
42
43
  };
43
44
  sm: {
44
- base: string;
45
+ base: string[];
46
+ icon: "size-spacing-250 text-[20px]";
45
47
  };
46
48
  md: {
47
- base: string;
49
+ base: string[];
50
+ icon: "size-spacing-300 text-[24px]";
48
51
  };
49
52
  lg: {
50
- base: string;
53
+ base: string[];
54
+ icon: "size-spacing-400 text-[32px]";
51
55
  };
52
56
  xl: {
53
- base: string;
57
+ base: string[];
58
+ icon: "size-spacing-500 text-[40px]";
54
59
  };
55
60
  };
56
61
  shape: {
@@ -62,24 +67,29 @@ export declare const connectedButtonGroupItem: import("tailwind-variants").TVRet
62
67
  };
63
68
  };
64
69
  }, {
65
- base: string;
70
+ base: string[];
66
71
  icon: string;
67
72
  }, undefined, {
68
73
  size: {
69
74
  xs: {
70
- base: string;
75
+ base: string[];
76
+ icon: "size-spacing-250 text-[20px]";
71
77
  };
72
78
  sm: {
73
- base: string;
79
+ base: string[];
80
+ icon: "size-spacing-250 text-[20px]";
74
81
  };
75
82
  md: {
76
- base: string;
83
+ base: string[];
84
+ icon: "size-spacing-300 text-[24px]";
77
85
  };
78
86
  lg: {
79
- base: string;
87
+ base: string[];
88
+ icon: "size-spacing-400 text-[32px]";
80
89
  };
81
90
  xl: {
82
- base: string;
91
+ base: string[];
92
+ icon: "size-spacing-500 text-[40px]";
83
93
  };
84
94
  };
85
95
  shape: {
@@ -91,24 +101,29 @@ export declare const connectedButtonGroupItem: import("tailwind-variants").TVRet
91
101
  };
92
102
  };
93
103
  }, {
94
- base: string;
104
+ base: string[];
95
105
  icon: string;
96
106
  }, import("tailwind-variants").TVReturnTypeLike<{
97
107
  size: {
98
108
  xs: {
99
- base: string;
109
+ base: string[];
110
+ icon: "size-spacing-250 text-[20px]";
100
111
  };
101
112
  sm: {
102
- base: string;
113
+ base: string[];
114
+ icon: "size-spacing-250 text-[20px]";
103
115
  };
104
116
  md: {
105
- base: string;
117
+ base: string[];
118
+ icon: "size-spacing-300 text-[24px]";
106
119
  };
107
120
  lg: {
108
- base: string;
121
+ base: string[];
122
+ icon: "size-spacing-400 text-[32px]";
109
123
  };
110
124
  xl: {
111
- base: string;
125
+ base: string[];
126
+ icon: "size-spacing-500 text-[40px]";
112
127
  };
113
128
  };
114
129
  shape: {
@@ -120,6 +135,6 @@ export declare const connectedButtonGroupItem: import("tailwind-variants").TVRet
120
135
  };
121
136
  };
122
137
  }, {
123
- base: string;
138
+ base: string[];
124
139
  icon: string;
125
140
  }>>;
@@ -1,7 +1,15 @@
1
- import { tv } from 'tailwind-variants';
1
+ import { tv } from '../../../utils/tv.js';
2
+ import { buttonBase, buttonSizes } from '../theme.js';
3
+ /*
4
+ * Connected button group, per https://m3.material.io/components/button-groups/specs: toggle
5
+ * buttons 2dp apart that share one outline shape. Items take the button's measurements for their
6
+ * size. Corners (`.md-btn-connected` in styles/component.css): inner corners --cbg-inner, then
7
+ * --cbg-pressed while pressed and fully round while selected; outer corners --cbg-outer, fully
8
+ * round or, for the square shape, the inner size. XS and S items are at least 48dp wide.
9
+ */
2
10
  export const connectedButtonGroup = tv({
3
11
  slots: {
4
- root: 'flex w-full items-stretch gap-0.5'
12
+ root: 'flex w-full items-stretch gap-spacing-25'
5
13
  },
6
14
  variants: {
7
15
  orientation: {
@@ -15,19 +23,34 @@ export const connectedButtonGroup = tv({
15
23
  });
16
24
  export const connectedButtonGroupItem = tv({
17
25
  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]'
26
+ base: [buttonBase, 'md-btn-connected min-w-spacing-600 flex-1'],
27
+ icon: 'shrink-0'
20
28
  },
21
29
  variants: {
22
30
  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]' }
31
+ xs: {
32
+ base: [buttonSizes.xs.base, '[--cbg-inner:0.5rem] [--cbg-pressed:0.25rem]'],
33
+ icon: buttonSizes.xs.icon
34
+ },
35
+ sm: {
36
+ base: [buttonSizes.sm.base, '[--cbg-inner:0.5rem] [--cbg-pressed:0.25rem]'],
37
+ icon: buttonSizes.sm.icon
38
+ },
39
+ md: {
40
+ base: [buttonSizes.md.base, '[--cbg-inner:0.5rem] [--cbg-pressed:0.25rem]'],
41
+ icon: buttonSizes.md.icon
42
+ },
43
+ lg: {
44
+ base: [buttonSizes.lg.base, '[--cbg-inner:1rem] [--cbg-pressed:0.75rem]'],
45
+ icon: buttonSizes.lg.icon
46
+ },
47
+ xl: {
48
+ base: [buttonSizes.xl.base, '[--cbg-inner:1.25rem] [--cbg-pressed:1rem]'],
49
+ icon: buttonSizes.xl.icon
50
+ }
28
51
  },
29
52
  shape: {
30
- round: { base: '[--cbg-outer:9999px]' },
53
+ round: { base: '[--cbg-outer:var(--btn-round)]' },
31
54
  square: { base: '[--cbg-outer:var(--cbg-inner)]' }
32
55
  }
33
56
  },