@windmorph/react 0.0.0-stage → 0.1.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 (761) hide show
  1. package/LICENSE +21 -0
  2. package/NOTICE +23 -0
  3. package/README.md +149 -2
  4. package/dist/cli.d.ts +1 -0
  5. package/dist/cli.js +112 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/components/app-bar/AppBarItems.js +23 -0
  8. package/dist/components/app-bar/AppBarItems.js.map +1 -0
  9. package/dist/components/app-bar/TopAppBar.d.ts +89 -0
  10. package/dist/components/app-bar/TopAppBar.js +103 -0
  11. package/dist/components/app-bar/TopAppBar.js.map +1 -0
  12. package/dist/components/app-bar/app-bar-styles.d.ts +280 -0
  13. package/dist/components/app-bar/app-bar-styles.js +142 -0
  14. package/dist/components/app-bar/app-bar-styles.js.map +1 -0
  15. package/dist/components/app-bar/app-bar-tokens.d.ts +7 -0
  16. package/dist/components/app-bar/app-bar-tokens.js +64 -0
  17. package/dist/components/app-bar/app-bar-tokens.js.map +1 -0
  18. package/dist/components/app-bar/use-app-bar-scroll.d.ts +6 -0
  19. package/dist/components/app-bar/use-app-bar-scroll.js +139 -0
  20. package/dist/components/app-bar/use-app-bar-scroll.js.map +1 -0
  21. package/dist/components/autocomplete/Autocomplete.d.ts +142 -0
  22. package/dist/components/autocomplete/Autocomplete.js +284 -0
  23. package/dist/components/autocomplete/Autocomplete.js.map +1 -0
  24. package/dist/components/badge/Badge.d.ts +71 -0
  25. package/dist/components/badge/Badge.js +72 -0
  26. package/dist/components/badge/Badge.js.map +1 -0
  27. package/dist/components/badge/badge-styles.d.ts +100 -0
  28. package/dist/components/badge/badge-styles.js +43 -0
  29. package/dist/components/badge/badge-styles.js.map +1 -0
  30. package/dist/components/badge/badge-tokens.d.ts +7 -0
  31. package/dist/components/badge/badge-tokens.js +40 -0
  32. package/dist/components/badge/badge-tokens.js.map +1 -0
  33. package/dist/components/button/Button.d.ts +91 -0
  34. package/dist/components/button/Button.js +96 -0
  35. package/dist/components/button/Button.js.map +1 -0
  36. package/dist/components/button/ButtonContext.d.ts +30 -0
  37. package/dist/components/button/ButtonContext.js +18 -0
  38. package/dist/components/button/ButtonContext.js.map +1 -0
  39. package/dist/components/button/DensityZeroButtons.js +25 -0
  40. package/dist/components/button/DensityZeroButtons.js.map +1 -0
  41. package/dist/components/button/button-pending.d.ts +10 -0
  42. package/dist/components/button/button-pending.js +166 -0
  43. package/dist/components/button/button-pending.js.map +1 -0
  44. package/dist/components/button/button-styles.d.ts +216 -0
  45. package/dist/components/button/button-styles.js +199 -0
  46. package/dist/components/button/button-styles.js.map +1 -0
  47. package/dist/components/button/button-tokens.d.ts +10 -0
  48. package/dist/components/button/button-tokens.js +257 -0
  49. package/dist/components/button/button-tokens.js.map +1 -0
  50. package/dist/components/button/connected-shapes.js +152 -0
  51. package/dist/components/button/connected-shapes.js.map +1 -0
  52. package/dist/components/card/Card.d.ts +60 -0
  53. package/dist/components/card/Card.js +69 -0
  54. package/dist/components/card/Card.js.map +1 -0
  55. package/dist/components/card/card-styles.d.ts +42 -0
  56. package/dist/components/card/card-styles.js +64 -0
  57. package/dist/components/card/card-styles.js.map +1 -0
  58. package/dist/components/card/card-tokens.d.ts +7 -0
  59. package/dist/components/card/card-tokens.js +84 -0
  60. package/dist/components/card/card-tokens.js.map +1 -0
  61. package/dist/components/carousel/Carousel.d.ts +124 -0
  62. package/dist/components/carousel/Carousel.js +387 -0
  63. package/dist/components/carousel/Carousel.js.map +1 -0
  64. package/dist/components/carousel/carousel-keylines.js +486 -0
  65. package/dist/components/carousel/carousel-keylines.js.map +1 -0
  66. package/dist/components/carousel/carousel-press-area.js +35 -0
  67. package/dist/components/carousel/carousel-press-area.js.map +1 -0
  68. package/dist/components/carousel/carousel-styles.d.ts +188 -0
  69. package/dist/components/carousel/carousel-styles.js +116 -0
  70. package/dist/components/carousel/carousel-styles.js.map +1 -0
  71. package/dist/components/carousel/carousel-tokens.d.ts +7 -0
  72. package/dist/components/carousel/carousel-tokens.js +18 -0
  73. package/dist/components/carousel/carousel-tokens.js.map +1 -0
  74. package/dist/components/checkbox/Checkbox.d.ts +78 -0
  75. package/dist/components/checkbox/Checkbox.js +77 -0
  76. package/dist/components/checkbox/Checkbox.js.map +1 -0
  77. package/dist/components/checkbox/checkbox-box.js +34 -0
  78. package/dist/components/checkbox/checkbox-box.js.map +1 -0
  79. package/dist/components/checkbox/checkbox-styles.d.ts +100 -0
  80. package/dist/components/checkbox/checkbox-styles.js +54 -0
  81. package/dist/components/checkbox/checkbox-styles.js.map +1 -0
  82. package/dist/components/checkbox/checkbox-tokens.d.ts +7 -0
  83. package/dist/components/checkbox/checkbox-tokens.js +41 -0
  84. package/dist/components/checkbox/checkbox-tokens.js.map +1 -0
  85. package/dist/components/chip/Chip.d.ts +171 -0
  86. package/dist/components/chip/Chip.js +348 -0
  87. package/dist/components/chip/Chip.js.map +1 -0
  88. package/dist/components/chip/ChipSet.d.ts +70 -0
  89. package/dist/components/chip/ChipSet.js +198 -0
  90. package/dist/components/chip/ChipSet.js.map +1 -0
  91. package/dist/components/chip/chip-styles.d.ts +263 -0
  92. package/dist/components/chip/chip-styles.js +360 -0
  93. package/dist/components/chip/chip-styles.js.map +1 -0
  94. package/dist/components/chip/chip-tokens.d.ts +13 -0
  95. package/dist/components/chip/chip-tokens.js +185 -0
  96. package/dist/components/chip/chip-tokens.js.map +1 -0
  97. package/dist/components/date-picker/CalendarGrid.js +94 -0
  98. package/dist/components/date-picker/CalendarGrid.js.map +1 -0
  99. package/dist/components/date-picker/CompactDateDialog.js +63 -0
  100. package/dist/components/date-picker/CompactDateDialog.js.map +1 -0
  101. package/dist/components/date-picker/DateField.d.ts +161 -0
  102. package/dist/components/date-picker/DateField.js +393 -0
  103. package/dist/components/date-picker/DateField.js.map +1 -0
  104. package/dist/components/date-picker/DateInput.d.ts +20 -0
  105. package/dist/components/date-picker/DateInput.js +99 -0
  106. package/dist/components/date-picker/DateInput.js.map +1 -0
  107. package/dist/components/date-picker/DatePicker.d.ts +165 -0
  108. package/dist/components/date-picker/DatePicker.js +492 -0
  109. package/dist/components/date-picker/DatePicker.js.map +1 -0
  110. package/dist/components/date-picker/PickerDialog.d.ts +121 -0
  111. package/dist/components/date-picker/PickerDialog.js +161 -0
  112. package/dist/components/date-picker/PickerDialog.js.map +1 -0
  113. package/dist/components/date-picker/calendar-parts.js +141 -0
  114. package/dist/components/date-picker/calendar-parts.js.map +1 -0
  115. package/dist/components/date-picker/date-format.js +72 -0
  116. package/dist/components/date-picker/date-format.js.map +1 -0
  117. package/dist/components/date-picker/date-picker-styles.d.ts +247 -0
  118. package/dist/components/date-picker/date-picker-styles.js +163 -0
  119. package/dist/components/date-picker/date-picker-styles.js.map +1 -0
  120. package/dist/components/date-picker/date-picker-tokens.d.ts +7 -0
  121. package/dist/components/date-picker/date-picker-tokens.js +104 -0
  122. package/dist/components/date-picker/date-picker-tokens.js.map +1 -0
  123. package/dist/components/date-picker/picker-dialog-context.js +8 -0
  124. package/dist/components/date-picker/picker-dialog-context.js.map +1 -0
  125. package/dist/components/date-picker/picker-dialog-styles.d.ts +95 -0
  126. package/dist/components/date-picker/picker-dialog-styles.js +57 -0
  127. package/dist/components/date-picker/picker-dialog-styles.js.map +1 -0
  128. package/dist/components/date-picker/picker-icons.js +24 -0
  129. package/dist/components/date-picker/picker-icons.js.map +1 -0
  130. package/dist/components/date-picker/use-media-query.js +21 -0
  131. package/dist/components/date-picker/use-media-query.js.map +1 -0
  132. package/dist/components/date-picker/use-size-transform.js +62 -0
  133. package/dist/components/date-picker/use-size-transform.js.map +1 -0
  134. package/dist/components/date-picker/use-view-exit.js +68 -0
  135. package/dist/components/date-picker/use-view-exit.js.map +1 -0
  136. package/dist/components/dialog/Dialog.d.ts +267 -0
  137. package/dist/components/dialog/Dialog.js +521 -0
  138. package/dist/components/dialog/Dialog.js.map +1 -0
  139. package/dist/components/dialog/dialog-styles.d.ts +335 -0
  140. package/dist/components/dialog/dialog-styles.js +377 -0
  141. package/dist/components/dialog/dialog-styles.js.map +1 -0
  142. package/dist/components/dialog/dialog-tokens.d.ts +7 -0
  143. package/dist/components/dialog/dialog-tokens.js +57 -0
  144. package/dist/components/dialog/dialog-tokens.js.map +1 -0
  145. package/dist/components/divider/Divider.d.ts +59 -0
  146. package/dist/components/divider/Divider.js +53 -0
  147. package/dist/components/divider/Divider.js.map +1 -0
  148. package/dist/components/divider/divider-styles.d.ts +90 -0
  149. package/dist/components/divider/divider-styles.js +66 -0
  150. package/dist/components/divider/divider-styles.js.map +1 -0
  151. package/dist/components/divider/divider-tokens.d.ts +7 -0
  152. package/dist/components/divider/divider-tokens.js +16 -0
  153. package/dist/components/divider/divider-tokens.js.map +1 -0
  154. package/dist/components/fab/Fab.d.ts +130 -0
  155. package/dist/components/fab/Fab.js +137 -0
  156. package/dist/components/fab/Fab.js.map +1 -0
  157. package/dist/components/fab/FabTooltip.js +36 -0
  158. package/dist/components/fab/FabTooltip.js.map +1 -0
  159. package/dist/components/fab/fab-styles.d.ts +286 -0
  160. package/dist/components/fab/fab-styles.js +131 -0
  161. package/dist/components/fab/fab-styles.js.map +1 -0
  162. package/dist/components/fab/fab-tokens.d.ts +12 -0
  163. package/dist/components/fab/fab-tokens.js +105 -0
  164. package/dist/components/fab/fab-tokens.js.map +1 -0
  165. package/dist/components/fab-menu/FabMenu.d.ts +156 -0
  166. package/dist/components/fab-menu/FabMenu.js +291 -0
  167. package/dist/components/fab-menu/FabMenu.js.map +1 -0
  168. package/dist/components/fab-menu/fab-menu-stagger.js +51 -0
  169. package/dist/components/fab-menu/fab-menu-stagger.js.map +1 -0
  170. package/dist/components/fab-menu/fab-menu-styles.d.ts +166 -0
  171. package/dist/components/fab-menu/fab-menu-styles.js +107 -0
  172. package/dist/components/fab-menu/fab-menu-styles.js.map +1 -0
  173. package/dist/components/fab-menu/fab-menu-tokens.d.ts +7 -0
  174. package/dist/components/fab-menu/fab-menu-tokens.js +120 -0
  175. package/dist/components/fab-menu/fab-menu-tokens.js.map +1 -0
  176. package/dist/components/icon-button/IconButton.d.ts +125 -0
  177. package/dist/components/icon-button/IconButton.js +112 -0
  178. package/dist/components/icon-button/IconButton.js.map +1 -0
  179. package/dist/components/icon-button/icon-button-styles.d.ts +217 -0
  180. package/dist/components/icon-button/icon-button-styles.js +244 -0
  181. package/dist/components/icon-button/icon-button-styles.js.map +1 -0
  182. package/dist/components/icon-button/icon-button-tokens.d.ts +11 -0
  183. package/dist/components/icon-button/icon-button-tokens.js +215 -0
  184. package/dist/components/icon-button/icon-button-tokens.js.map +1 -0
  185. package/dist/components/list/List.d.ts +265 -0
  186. package/dist/components/list/List.js +1386 -0
  187. package/dist/components/list/List.js.map +1 -0
  188. package/dist/components/list/ListMedia.d.ts +88 -0
  189. package/dist/components/list/ListMedia.js +132 -0
  190. package/dist/components/list/ListMedia.js.map +1 -0
  191. package/dist/components/list/list-styles.d.ts +375 -0
  192. package/dist/components/list/list-styles.js +220 -0
  193. package/dist/components/list/list-styles.js.map +1 -0
  194. package/dist/components/list/list-tokens.d.ts +7 -0
  195. package/dist/components/list/list-tokens.js +92 -0
  196. package/dist/components/list/list-tokens.js.map +1 -0
  197. package/dist/components/loading-indicator/LoadingIndicator.d.ts +65 -0
  198. package/dist/components/loading-indicator/LoadingIndicator.js +92 -0
  199. package/dist/components/loading-indicator/LoadingIndicator.js.map +1 -0
  200. package/dist/components/loading-indicator/lazy-loading-indicator.js +25 -0
  201. package/dist/components/loading-indicator/lazy-loading-indicator.js.map +1 -0
  202. package/dist/components/loading-indicator/loading-indicator-frames.js +149 -0
  203. package/dist/components/loading-indicator/loading-indicator-frames.js.map +1 -0
  204. package/dist/components/loading-indicator/loading-indicator-styles.d.ts +36 -0
  205. package/dist/components/loading-indicator/loading-indicator-styles.js +22 -0
  206. package/dist/components/loading-indicator/loading-indicator-styles.js.map +1 -0
  207. package/dist/components/loading-indicator/loading-indicator-tokens.d.ts +7 -0
  208. package/dist/components/loading-indicator/loading-indicator-tokens.js +44 -0
  209. package/dist/components/loading-indicator/loading-indicator-tokens.js.map +1 -0
  210. package/dist/components/menu/Menu.d.ts +215 -0
  211. package/dist/components/menu/Menu.js +715 -0
  212. package/dist/components/menu/Menu.js.map +1 -0
  213. package/dist/components/menu/menu-styles.d.ts +354 -0
  214. package/dist/components/menu/menu-styles.js +219 -0
  215. package/dist/components/menu/menu-styles.js.map +1 -0
  216. package/dist/components/menu/menu-tokens.d.ts +7 -0
  217. package/dist/components/menu/menu-tokens.js +93 -0
  218. package/dist/components/menu/menu-tokens.js.map +1 -0
  219. package/dist/components/menu/menu-trigger.d.ts +51 -0
  220. package/dist/components/menu/menu-trigger.js +100 -0
  221. package/dist/components/menu/menu-trigger.js.map +1 -0
  222. package/dist/components/menu/use-reveal-entering.js +42 -0
  223. package/dist/components/menu/use-reveal-entering.js.map +1 -0
  224. package/dist/components/navigation/NavItem.d.ts +54 -0
  225. package/dist/components/navigation/NavItem.js +182 -0
  226. package/dist/components/navigation/NavItem.js.map +1 -0
  227. package/dist/components/navigation/NavigationBar.d.ts +64 -0
  228. package/dist/components/navigation/NavigationBar.js +121 -0
  229. package/dist/components/navigation/NavigationBar.js.map +1 -0
  230. package/dist/components/navigation/NavigationRail.d.ts +91 -0
  231. package/dist/components/navigation/NavigationRail.js +285 -0
  232. package/dist/components/navigation/NavigationRail.js.map +1 -0
  233. package/dist/components/navigation/nav-item-styles.d.ts +190 -0
  234. package/dist/components/navigation/nav-item-styles.js +123 -0
  235. package/dist/components/navigation/nav-item-styles.js.map +1 -0
  236. package/dist/components/navigation/navigation-styles.d.ts +239 -0
  237. package/dist/components/navigation/navigation-styles.js +134 -0
  238. package/dist/components/navigation/navigation-styles.js.map +1 -0
  239. package/dist/components/navigation/navigation-tokens.d.ts +9 -0
  240. package/dist/components/navigation/navigation-tokens.js +114 -0
  241. package/dist/components/navigation/navigation-tokens.js.map +1 -0
  242. package/dist/components/navigation/use-hide-on-scroll.js +115 -0
  243. package/dist/components/navigation/use-hide-on-scroll.js.map +1 -0
  244. package/dist/components/navigation/use-item-arrow-keys.js +37 -0
  245. package/dist/components/navigation/use-item-arrow-keys.js.map +1 -0
  246. package/dist/components/navigation/use-rail-item-morph.js +61 -0
  247. package/dist/components/navigation/use-rail-item-morph.js.map +1 -0
  248. package/dist/components/progress/ProgressIndicator.d.ts +95 -0
  249. package/dist/components/progress/ProgressIndicator.js +426 -0
  250. package/dist/components/progress/ProgressIndicator.js.map +1 -0
  251. package/dist/components/progress/progress-geometry.js +285 -0
  252. package/dist/components/progress/progress-geometry.js.map +1 -0
  253. package/dist/components/progress/progress-styles.d.ts +81 -0
  254. package/dist/components/progress/progress-styles.js +43 -0
  255. package/dist/components/progress/progress-styles.js.map +1 -0
  256. package/dist/components/progress/progress-tokens.d.ts +7 -0
  257. package/dist/components/progress/progress-tokens.js +39 -0
  258. package/dist/components/progress/progress-tokens.js.map +1 -0
  259. package/dist/components/pull-to-refresh/PullToRefresh.d.ts +94 -0
  260. package/dist/components/pull-to-refresh/PullToRefresh.js +395 -0
  261. package/dist/components/pull-to-refresh/PullToRefresh.js.map +1 -0
  262. package/dist/components/pull-to-refresh/pull-to-refresh-math.js +37 -0
  263. package/dist/components/pull-to-refresh/pull-to-refresh-math.js.map +1 -0
  264. package/dist/components/pull-to-refresh/pull-to-refresh-styles.d.ts +53 -0
  265. package/dist/components/pull-to-refresh/pull-to-refresh-styles.js +14 -0
  266. package/dist/components/pull-to-refresh/pull-to-refresh-styles.js.map +1 -0
  267. package/dist/components/radio/RadioGroup.d.ts +121 -0
  268. package/dist/components/radio/RadioGroup.js +163 -0
  269. package/dist/components/radio/RadioGroup.js.map +1 -0
  270. package/dist/components/radio/radio-ring.js +21 -0
  271. package/dist/components/radio/radio-ring.js.map +1 -0
  272. package/dist/components/radio/radio-styles.d.ts +155 -0
  273. package/dist/components/radio/radio-styles.js +60 -0
  274. package/dist/components/radio/radio-styles.js.map +1 -0
  275. package/dist/components/radio/radio-tokens.d.ts +7 -0
  276. package/dist/components/radio/radio-tokens.js +31 -0
  277. package/dist/components/radio/radio-tokens.js.map +1 -0
  278. package/dist/components/search/SearchAppBar.d.ts +45 -0
  279. package/dist/components/search/SearchAppBar.js +61 -0
  280. package/dist/components/search/SearchAppBar.js.map +1 -0
  281. package/dist/components/search/SearchBar.d.ts +147 -0
  282. package/dist/components/search/SearchBar.js +412 -0
  283. package/dist/components/search/SearchBar.js.map +1 -0
  284. package/dist/components/search/search-styles.d.ts +243 -0
  285. package/dist/components/search/search-styles.js +143 -0
  286. package/dist/components/search/search-styles.js.map +1 -0
  287. package/dist/components/search/search-tokens.d.ts +9 -0
  288. package/dist/components/search/search-tokens.js +70 -0
  289. package/dist/components/search/search-tokens.js.map +1 -0
  290. package/dist/components/select/Select.d.ts +187 -0
  291. package/dist/components/select/Select.js +319 -0
  292. package/dist/components/select/Select.js.map +1 -0
  293. package/dist/components/select/field-shell.d.ts +29 -0
  294. package/dist/components/select/field-shell.js +135 -0
  295. package/dist/components/select/field-shell.js.map +1 -0
  296. package/dist/components/select/option-list.d.ts +81 -0
  297. package/dist/components/select/option-list.js +291 -0
  298. package/dist/components/select/option-list.js.map +1 -0
  299. package/dist/components/select/search-list.js +135 -0
  300. package/dist/components/select/search-list.js.map +1 -0
  301. package/dist/components/select/selection-cap.js +30 -0
  302. package/dist/components/select/selection-cap.js.map +1 -0
  303. package/dist/components/sheet/BottomSheet.d.ts +154 -0
  304. package/dist/components/sheet/BottomSheet.js +442 -0
  305. package/dist/components/sheet/BottomSheet.js.map +1 -0
  306. package/dist/components/sheet/SheetTrigger.d.ts +25 -0
  307. package/dist/components/sheet/SheetTrigger.js +46 -0
  308. package/dist/components/sheet/SheetTrigger.js.map +1 -0
  309. package/dist/components/sheet/SideSheet.d.ts +139 -0
  310. package/dist/components/sheet/SideSheet.js +289 -0
  311. package/dist/components/sheet/SideSheet.js.map +1 -0
  312. package/dist/components/sheet/bottom-sheet-gesture.js +30 -0
  313. package/dist/components/sheet/bottom-sheet-gesture.js.map +1 -0
  314. package/dist/components/sheet/lazy-bottom-sheet.js +33 -0
  315. package/dist/components/sheet/lazy-bottom-sheet.js.map +1 -0
  316. package/dist/components/sheet/sheet-gesture.js +48 -0
  317. package/dist/components/sheet/sheet-gesture.js.map +1 -0
  318. package/dist/components/sheet/sheet-icons.js +31 -0
  319. package/dist/components/sheet/sheet-icons.js.map +1 -0
  320. package/dist/components/sheet/sheet-settle.js +58 -0
  321. package/dist/components/sheet/sheet-settle.js.map +1 -0
  322. package/dist/components/sheet/sheet-styles.d.ts +312 -0
  323. package/dist/components/sheet/sheet-styles.js +229 -0
  324. package/dist/components/sheet/sheet-styles.js.map +1 -0
  325. package/dist/components/sheet/sheet-tokens.d.ts +12 -0
  326. package/dist/components/sheet/sheet-tokens.js +115 -0
  327. package/dist/components/sheet/sheet-tokens.js.map +1 -0
  328. package/dist/components/sheet/side-swipe-gesture.js +22 -0
  329. package/dist/components/sheet/side-swipe-gesture.js.map +1 -0
  330. package/dist/components/sheet/use-peek-inert.js +32 -0
  331. package/dist/components/sheet/use-peek-inert.js.map +1 -0
  332. package/dist/components/sheet/use-side-swipe.js +174 -0
  333. package/dist/components/sheet/use-side-swipe.js.map +1 -0
  334. package/dist/components/slider/Slider.d.ts +129 -0
  335. package/dist/components/slider/Slider.js +295 -0
  336. package/dist/components/slider/Slider.js.map +1 -0
  337. package/dist/components/slider/slider-geometry.js +138 -0
  338. package/dist/components/slider/slider-geometry.js.map +1 -0
  339. package/dist/components/slider/slider-styles.d.ts +133 -0
  340. package/dist/components/slider/slider-styles.js +97 -0
  341. package/dist/components/slider/slider-styles.js.map +1 -0
  342. package/dist/components/slider/slider-tokens.d.ts +7 -0
  343. package/dist/components/slider/slider-tokens.js +66 -0
  344. package/dist/components/slider/slider-tokens.js.map +1 -0
  345. package/dist/components/slider/use-touch-track.js +138 -0
  346. package/dist/components/slider/use-touch-track.js.map +1 -0
  347. package/dist/components/snackbar/Snackbar.d.ts +96 -0
  348. package/dist/components/snackbar/Snackbar.js +253 -0
  349. package/dist/components/snackbar/Snackbar.js.map +1 -0
  350. package/dist/components/snackbar/snackbar-state.d.ts +58 -0
  351. package/dist/components/snackbar/snackbar-state.js +73 -0
  352. package/dist/components/snackbar/snackbar-state.js.map +1 -0
  353. package/dist/components/snackbar/snackbar-styles.d.ts +109 -0
  354. package/dist/components/snackbar/snackbar-styles.js +67 -0
  355. package/dist/components/snackbar/snackbar-styles.js.map +1 -0
  356. package/dist/components/snackbar/snackbar-tokens.d.ts +7 -0
  357. package/dist/components/snackbar/snackbar-tokens.js +54 -0
  358. package/dist/components/snackbar/snackbar-tokens.js.map +1 -0
  359. package/dist/components/split-button/SplitButton.d.ts +109 -0
  360. package/dist/components/split-button/SplitButton.js +195 -0
  361. package/dist/components/split-button/SplitButton.js.map +1 -0
  362. package/dist/components/split-button/split-button-styles.d.ts +214 -0
  363. package/dist/components/split-button/split-button-styles.js +164 -0
  364. package/dist/components/split-button/split-button-styles.js.map +1 -0
  365. package/dist/components/split-button/split-button-tokens.d.ts +7 -0
  366. package/dist/components/split-button/split-button-tokens.js +36 -0
  367. package/dist/components/split-button/split-button-tokens.js.map +1 -0
  368. package/dist/components/switch/Switch.d.ts +82 -0
  369. package/dist/components/switch/Switch.js +165 -0
  370. package/dist/components/switch/Switch.js.map +1 -0
  371. package/dist/components/switch/switch-styles.d.ts +96 -0
  372. package/dist/components/switch/switch-styles.js +68 -0
  373. package/dist/components/switch/switch-styles.js.map +1 -0
  374. package/dist/components/switch/switch-thumb.js +41 -0
  375. package/dist/components/switch/switch-thumb.js.map +1 -0
  376. package/dist/components/switch/switch-tokens.d.ts +7 -0
  377. package/dist/components/switch/switch-tokens.js +78 -0
  378. package/dist/components/switch/switch-tokens.js.map +1 -0
  379. package/dist/components/tabs/Tabs.d.ts +120 -0
  380. package/dist/components/tabs/Tabs.js +346 -0
  381. package/dist/components/tabs/Tabs.js.map +1 -0
  382. package/dist/components/tabs/tabs-styles.d.ts +198 -0
  383. package/dist/components/tabs/tabs-styles.js +99 -0
  384. package/dist/components/tabs/tabs-styles.js.map +1 -0
  385. package/dist/components/tabs/tabs-tokens.d.ts +7 -0
  386. package/dist/components/tabs/tabs-tokens.js +121 -0
  387. package/dist/components/tabs/tabs-tokens.js.map +1 -0
  388. package/dist/components/text-field/TextField.d.ts +175 -0
  389. package/dist/components/text-field/TextField.js +250 -0
  390. package/dist/components/text-field/TextField.js.map +1 -0
  391. package/dist/components/text-field/text-field-styles.d.ts +252 -0
  392. package/dist/components/text-field/text-field-styles.js +209 -0
  393. package/dist/components/text-field/text-field-styles.js.map +1 -0
  394. package/dist/components/text-field/text-field-tokens.d.ts +7 -0
  395. package/dist/components/text-field/text-field-tokens.js +177 -0
  396. package/dist/components/text-field/text-field-tokens.js.map +1 -0
  397. package/dist/components/time-picker/TimePicker.d.ts +142 -0
  398. package/dist/components/time-picker/TimePicker.js +700 -0
  399. package/dist/components/time-picker/TimePicker.js.map +1 -0
  400. package/dist/components/time-picker/time-picker-styles.d.ts +175 -0
  401. package/dist/components/time-picker/time-picker-styles.js +112 -0
  402. package/dist/components/time-picker/time-picker-styles.js.map +1 -0
  403. package/dist/components/time-picker/time-picker-tokens.d.ts +7 -0
  404. package/dist/components/time-picker/time-picker-tokens.js +86 -0
  405. package/dist/components/time-picker/time-picker-tokens.js.map +1 -0
  406. package/dist/components/toolbar/Toolbar.d.ts +209 -0
  407. package/dist/components/toolbar/Toolbar.js +282 -0
  408. package/dist/components/toolbar/Toolbar.js.map +1 -0
  409. package/dist/components/toolbar/toolbar-styles.d.ts +403 -0
  410. package/dist/components/toolbar/toolbar-styles.js +253 -0
  411. package/dist/components/toolbar/toolbar-styles.js.map +1 -0
  412. package/dist/components/toolbar/toolbar-tokens.d.ts +27 -0
  413. package/dist/components/toolbar/toolbar-tokens.js +117 -0
  414. package/dist/components/toolbar/toolbar-tokens.js.map +1 -0
  415. package/dist/components/toolbar/use-toolbar-scroll-expansion.d.ts +56 -0
  416. package/dist/components/toolbar/use-toolbar-scroll-expansion.js +86 -0
  417. package/dist/components/toolbar/use-toolbar-scroll-expansion.js.map +1 -0
  418. package/dist/components/tooltip/Tooltip.d.ts +131 -0
  419. package/dist/components/tooltip/Tooltip.js +388 -0
  420. package/dist/components/tooltip/Tooltip.js.map +1 -0
  421. package/dist/components/tooltip/lazy-tooltip.js +35 -0
  422. package/dist/components/tooltip/lazy-tooltip.js.map +1 -0
  423. package/dist/components/tooltip/tooltip-placement.d.ts +16 -0
  424. package/dist/components/tooltip/tooltip-placement.js +14 -0
  425. package/dist/components/tooltip/tooltip-placement.js.map +1 -0
  426. package/dist/components/tooltip/tooltip-styles.d.ts +142 -0
  427. package/dist/components/tooltip/tooltip-styles.js +81 -0
  428. package/dist/components/tooltip/tooltip-styles.js.map +1 -0
  429. package/dist/components/tooltip/tooltip-tokens.d.ts +9 -0
  430. package/dist/components/tooltip/tooltip-tokens.js +72 -0
  431. package/dist/components/tooltip/tooltip-tokens.js.map +1 -0
  432. package/dist/components/tooltip/tooltip-trigger.d.ts +42 -0
  433. package/dist/components/tooltip/tooltip-trigger.js +115 -0
  434. package/dist/components/tooltip/tooltip-trigger.js.map +1 -0
  435. package/dist/composites/button-group/ButtonGroup.d.ts +116 -0
  436. package/dist/composites/button-group/ButtonGroup.js +270 -0
  437. package/dist/composites/button-group/ButtonGroup.js.map +1 -0
  438. package/dist/composites/button-group/button-group-styles.d.ts +73 -0
  439. package/dist/composites/button-group/button-group-styles.js +87 -0
  440. package/dist/composites/button-group/button-group-styles.js.map +1 -0
  441. package/dist/composites/button-group/lazy-overflow-menu.js +43 -0
  442. package/dist/composites/button-group/lazy-overflow-menu.js.map +1 -0
  443. package/dist/composites/button-group/overflow-menu-list.js +26 -0
  444. package/dist/composites/button-group/overflow-menu-list.js.map +1 -0
  445. package/dist/composites/button-group/use-overflow.js +75 -0
  446. package/dist/composites/button-group/use-overflow.js.map +1 -0
  447. package/dist/composites/button-group/use-press-expansion.js +155 -0
  448. package/dist/composites/button-group/use-press-expansion.js.map +1 -0
  449. package/dist/index.d.ts +142 -0
  450. package/dist/index.js +136 -0
  451. package/dist/motion/get-m3-spring.d.ts +6 -0
  452. package/dist/motion/get-m3-spring.js +10 -0
  453. package/dist/motion/get-m3-spring.js.map +1 -0
  454. package/dist/motion/reduced-motion.js +19 -0
  455. package/dist/motion/reduced-motion.js.map +1 -0
  456. package/dist/motion/use-m3-spring.d.ts +13 -0
  457. package/dist/motion/use-m3-spring.js +22 -0
  458. package/dist/motion/use-m3-spring.js.map +1 -0
  459. package/dist/next/NextRouterProvider.d.ts +13 -0
  460. package/dist/next/NextRouterProvider.js +26 -0
  461. package/dist/next/NextRouterProvider.js.map +1 -0
  462. package/dist/next/get-theme-from-cookies.d.ts +32 -0
  463. package/dist/next/get-theme-from-cookies.js +27 -0
  464. package/dist/next/get-theme-from-cookies.js.map +1 -0
  465. package/dist/next/navigation-guard.d.ts +30 -0
  466. package/dist/next/navigation-guard.js +68 -0
  467. package/dist/next/navigation-guard.js.map +1 -0
  468. package/dist/next.d.ts +5 -0
  469. package/dist/next.js +5 -0
  470. package/dist/primitives/ButtonBase.d.ts +115 -0
  471. package/dist/primitives/ButtonBase.js +231 -0
  472. package/dist/primitives/ButtonBase.js.map +1 -0
  473. package/dist/primitives/DomDirectionLocale.d.ts +18 -0
  474. package/dist/primitives/DomDirectionLocale.js +28 -0
  475. package/dist/primitives/DomDirectionLocale.js.map +1 -0
  476. package/dist/primitives/Field.d.ts +50 -0
  477. package/dist/primitives/Field.js +74 -0
  478. package/dist/primitives/Field.js.map +1 -0
  479. package/dist/primitives/IconFaces.js +23 -0
  480. package/dist/primitives/IconFaces.js.map +1 -0
  481. package/dist/primitives/Overlay.d.ts +39 -0
  482. package/dist/primitives/Overlay.js +86 -0
  483. package/dist/primitives/Overlay.js.map +1 -0
  484. package/dist/primitives/SelectionControl.d.ts +55 -0
  485. package/dist/primitives/SelectionControl.js +58 -0
  486. package/dist/primitives/SelectionControl.js.map +1 -0
  487. package/dist/primitives/Surface.d.ts +123 -0
  488. package/dist/primitives/Surface.js +68 -0
  489. package/dist/primitives/Surface.js.map +1 -0
  490. package/dist/primitives/ToolbarContext.js +12 -0
  491. package/dist/primitives/ToolbarContext.js.map +1 -0
  492. package/dist/primitives/TouchTarget.d.ts +14 -0
  493. package/dist/primitives/TouchTarget.js +20 -0
  494. package/dist/primitives/TouchTarget.js.map +1 -0
  495. package/dist/primitives/TriggerContext.d.ts +34 -0
  496. package/dist/primitives/TriggerContext.js +24 -0
  497. package/dist/primitives/TriggerContext.js.map +1 -0
  498. package/dist/primitives/hidden-input-focus.js +27 -0
  499. package/dist/primitives/hidden-input-focus.js.map +1 -0
  500. package/dist/primitives/icon-faces-styles.d.ts +9 -0
  501. package/dist/primitives/icon-faces-styles.js +45 -0
  502. package/dist/primitives/icon-faces-styles.js.map +1 -0
  503. package/dist/primitives/locale-with-direction.d.ts +9 -0
  504. package/dist/primitives/locale-with-direction.js +17 -0
  505. package/dist/primitives/locale-with-direction.js.map +1 -0
  506. package/dist/primitives/morph-path.d.ts +25 -0
  507. package/dist/primitives/morph-path.js +38 -0
  508. package/dist/primitives/morph-path.js.map +1 -0
  509. package/dist/primitives/selection-control-styles.d.ts +54 -0
  510. package/dist/primitives/selection-control-styles.js +44 -0
  511. package/dist/primitives/selection-control-styles.js.map +1 -0
  512. package/dist/primitives/use-m3-interaction.d.ts +51 -0
  513. package/dist/primitives/use-m3-interaction.js +149 -0
  514. package/dist/primitives/use-m3-interaction.js.map +1 -0
  515. package/dist/primitives/use-m3-morph.d.ts +18 -0
  516. package/dist/primitives/use-m3-morph.js +36 -0
  517. package/dist/primitives/use-m3-morph.js.map +1 -0
  518. package/dist/primitives/use-presence.d.ts +19 -0
  519. package/dist/primitives/use-presence.js +37 -0
  520. package/dist/primitives/use-presence.js.map +1 -0
  521. package/dist/primitives.d.ts +36 -0
  522. package/dist/primitives.js +34 -0
  523. package/dist/shapes/corner-rounding.d.ts +13 -0
  524. package/dist/shapes/corner-rounding.js +18 -0
  525. package/dist/shapes/corner-rounding.js.map +1 -0
  526. package/dist/shapes/cubic.d.ts +52 -0
  527. package/dist/shapes/cubic.js +189 -0
  528. package/dist/shapes/cubic.js.map +1 -0
  529. package/dist/shapes/feature-mapping.js +80 -0
  530. package/dist/shapes/feature-mapping.js.map +1 -0
  531. package/dist/shapes/features.d.ts +23 -0
  532. package/dist/shapes/features.js +82 -0
  533. package/dist/shapes/features.js.map +1 -0
  534. package/dist/shapes/float-mapping.js +65 -0
  535. package/dist/shapes/float-mapping.js.map +1 -0
  536. package/dist/shapes/generated/material-shape-path-record.d.ts +11 -0
  537. package/dist/shapes/generated/material-shape-path-record.js +48 -0
  538. package/dist/shapes/generated/material-shape-path-record.js.map +1 -0
  539. package/dist/shapes/generated/material-shape-paths.d.ts +78 -0
  540. package/dist/shapes/generated/material-shape-paths.js +218 -0
  541. package/dist/shapes/generated/material-shape-paths.js.map +1 -0
  542. package/dist/shapes/mask.d.ts +14 -0
  543. package/dist/shapes/mask.js +24 -0
  544. package/dist/shapes/mask.js.map +1 -0
  545. package/dist/shapes/material-shapes.d.ts +11 -0
  546. package/dist/shapes/material-shapes.js +250 -0
  547. package/dist/shapes/material-shapes.js.map +1 -0
  548. package/dist/shapes/morph.d.ts +25 -0
  549. package/dist/shapes/morph.js +97 -0
  550. package/dist/shapes/morph.js.map +1 -0
  551. package/dist/shapes/path.d.ts +33 -0
  552. package/dist/shapes/path.js +47 -0
  553. package/dist/shapes/path.js.map +1 -0
  554. package/dist/shapes/point.d.ts +28 -0
  555. package/dist/shapes/point.js +103 -0
  556. package/dist/shapes/point.js.map +1 -0
  557. package/dist/shapes/polygon-measure.js +140 -0
  558. package/dist/shapes/polygon-measure.js.map +1 -0
  559. package/dist/shapes/rounded-polygon.d.ts +44 -0
  560. package/dist/shapes/rounded-polygon.js +278 -0
  561. package/dist/shapes/rounded-polygon.js.map +1 -0
  562. package/dist/shapes/shape-path.d.ts +15 -0
  563. package/dist/shapes/shapes.d.ts +53 -0
  564. package/dist/shapes/shapes.js +171 -0
  565. package/dist/shapes/shapes.js.map +1 -0
  566. package/dist/styles/generated/components.css +710 -0
  567. package/dist/styles/generated/theme.css +247 -0
  568. package/dist/styles/generated/themes.css +3361 -0
  569. package/dist/styles/generated/tokens.css +284 -0
  570. package/dist/styles/styles.css +15 -0
  571. package/dist/styles/utilities.css +283 -0
  572. package/dist/styles.compiled.css +2 -0
  573. package/dist/theme/ThemeProvider.d.ts +72 -0
  574. package/dist/theme/ThemeProvider.js +144 -0
  575. package/dist/theme/ThemeProvider.js.map +1 -0
  576. package/dist/theme/ThemeScope.d.ts +32 -0
  577. package/dist/theme/ThemeScope.js +67 -0
  578. package/dist/theme/ThemeScope.js.map +1 -0
  579. package/dist/theme/ThemeScript.d.ts +26 -0
  580. package/dist/theme/ThemeScript.js +44 -0
  581. package/dist/theme/ThemeScript.js.map +1 -0
  582. package/dist/theme/context.d.ts +32 -0
  583. package/dist/theme/context.js +47 -0
  584. package/dist/theme/context.js.map +1 -0
  585. package/dist/theme/create-theme.d.ts +60 -0
  586. package/dist/theme/create-theme.js +47 -0
  587. package/dist/theme/create-theme.js.map +1 -0
  588. package/dist/theme/css.js +54 -0
  589. package/dist/theme/css.js.map +1 -0
  590. package/dist/theme/parse-palettes.js +40 -0
  591. package/dist/theme/parse-palettes.js.map +1 -0
  592. package/dist/theme/scheme.d.ts +6 -0
  593. package/dist/theme/scheme.js +118 -0
  594. package/dist/theme/scheme.js.map +1 -0
  595. package/dist/theme/state.d.ts +38 -0
  596. package/dist/theme/state.js +93 -0
  597. package/dist/theme/state.js.map +1 -0
  598. package/dist/theme/storage.js +21 -0
  599. package/dist/theme/storage.js.map +1 -0
  600. package/dist/tokens/breakpoints.d.ts +15 -0
  601. package/dist/tokens/breakpoints.js +16 -0
  602. package/dist/tokens/breakpoints.js.map +1 -0
  603. package/dist/tokens/color.d.ts +104 -0
  604. package/dist/tokens/color.js +147 -0
  605. package/dist/tokens/color.js.map +1 -0
  606. package/dist/tokens/component.d.ts +110 -0
  607. package/dist/tokens/component.js +67 -0
  608. package/dist/tokens/component.js.map +1 -0
  609. package/dist/tokens/density.d.ts +20 -0
  610. package/dist/tokens/density.js +27 -0
  611. package/dist/tokens/density.js.map +1 -0
  612. package/dist/tokens/elevation.d.ts +44 -0
  613. package/dist/tokens/elevation.js +45 -0
  614. package/dist/tokens/elevation.js.map +1 -0
  615. package/dist/tokens/motion.d.ts +79 -0
  616. package/dist/tokens/motion.js +126 -0
  617. package/dist/tokens/motion.js.map +1 -0
  618. package/dist/tokens/shape.d.ts +22 -0
  619. package/dist/tokens/shape.js +22 -0
  620. package/dist/tokens/shape.js.map +1 -0
  621. package/dist/tokens/spring-velocity.d.ts +19 -0
  622. package/dist/tokens/spring-velocity.js +44 -0
  623. package/dist/tokens/spring-velocity.js.map +1 -0
  624. package/dist/tokens/state.d.ts +18 -0
  625. package/dist/tokens/state.js +19 -0
  626. package/dist/tokens/state.js.map +1 -0
  627. package/dist/tokens/typography.d.ts +64 -0
  628. package/dist/tokens/typography.js +60 -0
  629. package/dist/tokens/typography.js.map +1 -0
  630. package/dist/tokens/z-index.d.ts +17 -0
  631. package/dist/tokens/z-index.js +18 -0
  632. package/dist/tokens/z-index.js.map +1 -0
  633. package/dist/utils/announce.js +51 -0
  634. package/dist/utils/announce.js.map +1 -0
  635. package/dist/utils/assert-collection-children.js +26 -0
  636. package/dist/utils/assert-collection-children.js.map +1 -0
  637. package/dist/utils/closed-by.d.ts +9 -0
  638. package/dist/utils/closed-by.js +12 -0
  639. package/dist/utils/closed-by.js.map +1 -0
  640. package/dist/utils/cn.d.ts +31 -0
  641. package/dist/utils/cn.js +37 -0
  642. package/dist/utils/cn.js.map +1 -0
  643. package/dist/utils/composite-keys.js +32 -0
  644. package/dist/utils/composite-keys.js.map +1 -0
  645. package/dist/utils/focus-visible.js +14 -0
  646. package/dist/utils/focus-visible.js.map +1 -0
  647. package/dist/utils/focus.js +51 -0
  648. package/dist/utils/focus.js.map +1 -0
  649. package/dist/utils/focusable-disabled.js +12 -0
  650. package/dist/utils/focusable-disabled.js.map +1 -0
  651. package/dist/utils/keep-pressed-in-place.d.ts +60 -0
  652. package/dist/utils/keep-pressed-in-place.js +127 -0
  653. package/dist/utils/keep-pressed-in-place.js.map +1 -0
  654. package/dist/utils/load-on-demand.js +111 -0
  655. package/dist/utils/load-on-demand.js.map +1 -0
  656. package/dist/utils/merge-data-tokens.d.ts +9 -0
  657. package/dist/utils/merge-data-tokens.js +15 -0
  658. package/dist/utils/merge-data-tokens.js.map +1 -0
  659. package/dist/utils/natural-size.js +53 -0
  660. package/dist/utils/natural-size.js.map +1 -0
  661. package/dist/utils/nearest-reveal.js +28 -0
  662. package/dist/utils/nearest-reveal.js.map +1 -0
  663. package/dist/utils/placement.js +14 -0
  664. package/dist/utils/placement.js.map +1 -0
  665. package/dist/utils/radio-group-keys.js +74 -0
  666. package/dist/utils/radio-group-keys.js.map +1 -0
  667. package/dist/utils/rendered-description.js +17 -0
  668. package/dist/utils/rendered-description.js.map +1 -0
  669. package/dist/utils/root-props.d.ts +103 -0
  670. package/dist/utils/root-props.js +51 -0
  671. package/dist/utils/root-props.js.map +1 -0
  672. package/dist/utils/search.d.ts +11 -0
  673. package/dist/utils/search.js +18 -0
  674. package/dist/utils/search.js.map +1 -0
  675. package/dist/utils/shortcut.js +20 -0
  676. package/dist/utils/shortcut.js.map +1 -0
  677. package/dist/utils/split-data-attributes.d.ts +12 -0
  678. package/dist/utils/split-data-attributes.js +20 -0
  679. package/dist/utils/split-data-attributes.js.map +1 -0
  680. package/dist/utils/toolbar-keys.js +28 -0
  681. package/dist/utils/toolbar-keys.js.map +1 -0
  682. package/dist/utils/tv.d.ts +7 -0
  683. package/dist/utils/tv.js +9 -0
  684. package/dist/utils/tv.js.map +1 -0
  685. package/dist/utils/typeahead.js +64 -0
  686. package/dist/utils/typeahead.js.map +1 -0
  687. package/dist/utils/warn-once.js +30 -0
  688. package/dist/utils/warn-once.js.map +1 -0
  689. package/dist/vendor/material-color-utilities/blend/blend.js +88 -0
  690. package/dist/vendor/material-color-utilities/blend/blend.js.map +1 -0
  691. package/dist/vendor/material-color-utilities/contrast/contrast.js +131 -0
  692. package/dist/vendor/material-color-utilities/contrast/contrast.js.map +1 -0
  693. package/dist/vendor/material-color-utilities/dislike/dislike_analyzer.js +58 -0
  694. package/dist/vendor/material-color-utilities/dislike/dislike_analyzer.js.map +1 -0
  695. package/dist/vendor/material-color-utilities/dynamiccolor/color_spec_2021.js +620 -0
  696. package/dist/vendor/material-color-utilities/dynamiccolor/color_spec_2021.js.map +1 -0
  697. package/dist/vendor/material-color-utilities/dynamiccolor/color_spec_2025.js +786 -0
  698. package/dist/vendor/material-color-utilities/dynamiccolor/color_spec_2025.js.map +1 -0
  699. package/dist/vendor/material-color-utilities/dynamiccolor/contrast_curve.js +59 -0
  700. package/dist/vendor/material-color-utilities/dynamiccolor/contrast_curve.js.map +1 -0
  701. package/dist/vendor/material-color-utilities/dynamiccolor/dynamic_color.js +420 -0
  702. package/dist/vendor/material-color-utilities/dynamiccolor/dynamic_color.js.map +1 -0
  703. package/dist/vendor/material-color-utilities/dynamiccolor/dynamic_scheme.js +701 -0
  704. package/dist/vendor/material-color-utilities/dynamiccolor/dynamic_scheme.js.map +1 -0
  705. package/dist/vendor/material-color-utilities/dynamiccolor/material_dynamic_colors.js +374 -0
  706. package/dist/vendor/material-color-utilities/dynamiccolor/material_dynamic_colors.js.map +1 -0
  707. package/dist/vendor/material-color-utilities/dynamiccolor/tone_delta_pair.js +65 -0
  708. package/dist/vendor/material-color-utilities/dynamiccolor/tone_delta_pair.js.map +1 -0
  709. package/dist/vendor/material-color-utilities/dynamiccolor/variant.js +38 -0
  710. package/dist/vendor/material-color-utilities/dynamiccolor/variant.js.map +1 -0
  711. package/dist/vendor/material-color-utilities/hct/cam16.js +309 -0
  712. package/dist/vendor/material-color-utilities/hct/cam16.js.map +1 -0
  713. package/dist/vendor/material-color-utilities/hct/hct.js +148 -0
  714. package/dist/vendor/material-color-utilities/hct/hct.js.map +1 -0
  715. package/dist/vendor/material-color-utilities/hct/hct_solver.js +660 -0
  716. package/dist/vendor/material-color-utilities/hct/hct_solver.js.map +1 -0
  717. package/dist/vendor/material-color-utilities/hct/viewing_conditions.js +117 -0
  718. package/dist/vendor/material-color-utilities/hct/viewing_conditions.js.map +1 -0
  719. package/dist/vendor/material-color-utilities/index.js +51 -0
  720. package/dist/vendor/material-color-utilities/index.js.map +1 -0
  721. package/dist/vendor/material-color-utilities/palettes/core_palette.js +22 -0
  722. package/dist/vendor/material-color-utilities/palettes/core_palette.js.map +1 -0
  723. package/dist/vendor/material-color-utilities/palettes/tonal_palette.js +134 -0
  724. package/dist/vendor/material-color-utilities/palettes/tonal_palette.js.map +1 -0
  725. package/dist/vendor/material-color-utilities/scheme/scheme.js +21 -0
  726. package/dist/vendor/material-color-utilities/scheme/scheme.js.map +1 -0
  727. package/dist/vendor/material-color-utilities/scheme/scheme_android.js +21 -0
  728. package/dist/vendor/material-color-utilities/scheme/scheme_android.js.map +1 -0
  729. package/dist/vendor/material-color-utilities/scheme/scheme_content.js +22 -0
  730. package/dist/vendor/material-color-utilities/scheme/scheme_content.js.map +1 -0
  731. package/dist/vendor/material-color-utilities/scheme/scheme_expressive.js +38 -0
  732. package/dist/vendor/material-color-utilities/scheme/scheme_expressive.js.map +1 -0
  733. package/dist/vendor/material-color-utilities/scheme/scheme_fidelity.js +22 -0
  734. package/dist/vendor/material-color-utilities/scheme/scheme_fidelity.js.map +1 -0
  735. package/dist/vendor/material-color-utilities/scheme/scheme_fruit_salad.js +22 -0
  736. package/dist/vendor/material-color-utilities/scheme/scheme_fruit_salad.js.map +1 -0
  737. package/dist/vendor/material-color-utilities/scheme/scheme_monochrome.js +22 -0
  738. package/dist/vendor/material-color-utilities/scheme/scheme_monochrome.js.map +1 -0
  739. package/dist/vendor/material-color-utilities/scheme/scheme_neutral.js +36 -0
  740. package/dist/vendor/material-color-utilities/scheme/scheme_neutral.js.map +1 -0
  741. package/dist/vendor/material-color-utilities/scheme/scheme_rainbow.js +22 -0
  742. package/dist/vendor/material-color-utilities/scheme/scheme_rainbow.js.map +1 -0
  743. package/dist/vendor/material-color-utilities/scheme/scheme_tonal_spot.js +41 -0
  744. package/dist/vendor/material-color-utilities/scheme/scheme_tonal_spot.js.map +1 -0
  745. package/dist/vendor/material-color-utilities/scheme/scheme_vibrant.js +39 -0
  746. package/dist/vendor/material-color-utilities/scheme/scheme_vibrant.js.map +1 -0
  747. package/dist/vendor/material-color-utilities/score/score.js +115 -0
  748. package/dist/vendor/material-color-utilities/score/score.js.map +1 -0
  749. package/dist/vendor/material-color-utilities/temperature/temperature_cache.js +227 -0
  750. package/dist/vendor/material-color-utilities/temperature/temperature_cache.js.map +1 -0
  751. package/dist/vendor/material-color-utilities/utils/color_utils.js +246 -0
  752. package/dist/vendor/material-color-utilities/utils/color_utils.js.map +1 -0
  753. package/dist/vendor/material-color-utilities/utils/image_utils.js +21 -0
  754. package/dist/vendor/material-color-utilities/utils/image_utils.js.map +1 -0
  755. package/dist/vendor/material-color-utilities/utils/math_utils.js +119 -0
  756. package/dist/vendor/material-color-utilities/utils/math_utils.js.map +1 -0
  757. package/dist/vendor/material-color-utilities/utils/string_utils.js +74 -0
  758. package/dist/vendor/material-color-utilities/utils/string_utils.js.map +1 -0
  759. package/dist/vendor/material-color-utilities/utils/theme_utils.js +24 -0
  760. package/dist/vendor/material-color-utilities/utils/theme_utils.js.map +1 -0
  761. package/package.json +114 -3
@@ -0,0 +1,164 @@
1
+ import { tv } from "../../utils/tv.js";
2
+ import { buttonVariantClasses, forcedColorClasses, nonBouncingMorph } from "../button/button-styles.js";
3
+ //#region src/components/split-button/split-button-styles.ts
4
+ const half = [
5
+ "inline-flex shrink-0 cursor-pointer items-center justify-center align-middle min-w-[48px]",
6
+ "font-plain whitespace-nowrap select-none",
7
+ "state-layer focus-ring container-motion",
8
+ nonBouncingMorph,
9
+ "data-disabled:cursor-default data-disabled:text-on-surface-variant/38 data-disabled:shadow-elevation-0",
10
+ forcedColorClasses.disabled
11
+ ];
12
+ const variant = {
13
+ filled: {
14
+ leading: buttonVariantClasses.filled,
15
+ trailing: buttonVariantClasses.filled
16
+ },
17
+ elevated: {
18
+ leading: buttonVariantClasses.elevated,
19
+ trailing: buttonVariantClasses.elevated
20
+ },
21
+ tonal: {
22
+ leading: buttonVariantClasses.tonal,
23
+ trailing: buttonVariantClasses.tonal
24
+ },
25
+ outlined: {
26
+ leading: buttonVariantClasses.outlined,
27
+ trailing: buttonVariantClasses.outlined
28
+ }
29
+ };
30
+ /** Variant definitions for {@link SplitButton}; extend them to add variants. */
31
+ const splitButtonStyles = tv({
32
+ slots: {
33
+ root: "inline-flex items-center gap-[2px]",
34
+ leading: half,
35
+ content: "relative inline-flex min-w-0 items-center justify-center",
36
+ trailingContent: "relative inline-flex items-center justify-center",
37
+ label: "min-w-0",
38
+ icon: "inline-flex shrink-0 items-center justify-center [&>svg]:size-full",
39
+ trailing: half,
40
+ menuIcon: [
41
+ "relative start-(--m3-optical) inline-flex shrink-0 items-center justify-center [&>svg]:size-full",
42
+ "[transition-property:inset-inline-start,rotate]",
43
+ "[transition-duration:var(--md-sys-motion-spring-spatial-fast-duration)]",
44
+ "[transition-timing-function:var(--md-sys-motion-spring-spatial-fast-easing)]",
45
+ "in-data-open:ltr:rotate-180 in-data-open:rtl:-rotate-180",
46
+ "motion-reduce:transition-none"
47
+ ]
48
+ },
49
+ variants: {
50
+ variant,
51
+ size: {
52
+ xs: {
53
+ root: "h-fit items-stretch",
54
+ leading: [
55
+ "min-h-[32px] ps-[calc(12px-var(--m3-button-border,0px))] pe-[calc(10px-var(--m3-button-border,0px))] text-label-large",
56
+ "rounded-s-[var(--_md-comp-split-button-container-shape-capped)] rounded-e-corner-extra-small",
57
+ "data-hovered:rounded-e-corner-small data-focus-visible:rounded-e-corner-small data-pressed:rounded-e-corner-small"
58
+ ],
59
+ content: "gap-[8px]",
60
+ icon: "size-[20px]",
61
+ trailing: [
62
+ "min-h-[32px] ps-[calc(13px-var(--m3-button-border,0px))] pe-[calc(13px-var(--m3-button-border,0px))]",
63
+ "rounded-e-[var(--_md-comp-split-button-container-shape-capped)] rounded-s-corner-extra-small",
64
+ "not-data-open:data-hovered:rounded-s-corner-small not-data-open:data-focus-visible:rounded-s-corner-small data-pressed:rounded-s-corner-small",
65
+ "data-open:not-data-pressed:rounded-s-[min(var(--md-sys-shape-corner-full),16px)]",
66
+ "[--m3-optical:-1px] data-pressed:[--m3-optical:-1px] data-open:not-data-pressed:[--m3-optical:0px]"
67
+ ],
68
+ menuIcon: "size-[22px]"
69
+ },
70
+ sm: {
71
+ root: "h-fit items-stretch",
72
+ leading: [
73
+ "min-h-[40px] ps-[calc(16px-var(--m3-button-border,0px))] pe-[calc(12px-var(--m3-button-border,0px))] text-label-large",
74
+ "rounded-s-[var(--_md-comp-split-button-container-shape-capped)] rounded-e-corner-extra-small",
75
+ "data-hovered:rounded-e-corner-medium data-focus-visible:rounded-e-corner-medium data-pressed:rounded-e-corner-medium"
76
+ ],
77
+ content: "gap-[8px]",
78
+ icon: "size-[20px]",
79
+ trailing: [
80
+ "min-h-[40px] ps-[calc(13px-var(--m3-button-border,0px))] pe-[calc(13px-var(--m3-button-border,0px))]",
81
+ "rounded-e-[var(--_md-comp-split-button-container-shape-capped)] rounded-s-corner-extra-small",
82
+ "not-data-open:data-hovered:rounded-s-corner-medium not-data-open:data-focus-visible:rounded-s-corner-medium data-pressed:rounded-s-corner-medium",
83
+ "data-open:not-data-pressed:rounded-s-[min(var(--md-sys-shape-corner-full),20px)]",
84
+ "[--m3-optical:-1px] data-pressed:[--m3-optical:-1px] data-open:not-data-pressed:[--m3-optical:0px]"
85
+ ],
86
+ menuIcon: "size-[22px]"
87
+ },
88
+ md: {
89
+ leading: [
90
+ "h-[56px] ps-[calc(24px-var(--m3-button-border,0px))] pe-[calc(24px-var(--m3-button-border,0px))] text-title-medium",
91
+ "rounded-s-[var(--_md-comp-split-button-container-shape-capped)] rounded-e-corner-extra-small",
92
+ "data-hovered:rounded-e-corner-medium data-focus-visible:rounded-e-corner-medium data-pressed:rounded-e-corner-medium"
93
+ ],
94
+ content: "gap-[8px]",
95
+ icon: "size-[24px]",
96
+ trailing: [
97
+ "h-[56px] ps-[calc(15px-var(--m3-button-border,0px))] pe-[calc(15px-var(--m3-button-border,0px))]",
98
+ "rounded-e-[var(--_md-comp-split-button-container-shape-capped)] rounded-s-corner-extra-small",
99
+ "not-data-open:data-hovered:rounded-s-corner-medium not-data-open:data-focus-visible:rounded-s-corner-medium data-pressed:rounded-s-corner-medium",
100
+ "data-open:not-data-pressed:rounded-s-[min(var(--md-sys-shape-corner-full),28px)]",
101
+ "[--m3-optical:-2px] data-pressed:[--m3-optical:-2px] data-open:not-data-pressed:[--m3-optical:0px]"
102
+ ],
103
+ menuIcon: "size-[26px]"
104
+ },
105
+ lg: {
106
+ leading: [
107
+ "h-[96px] ps-[calc(48px-var(--m3-button-border,0px))] pe-[calc(48px-var(--m3-button-border,0px))] font-brand text-headline-small",
108
+ "rounded-s-[var(--_md-comp-split-button-container-shape-capped)] rounded-e-corner-small",
109
+ "data-hovered:rounded-e-corner-large-increased data-focus-visible:rounded-e-corner-large-increased data-pressed:rounded-e-corner-large-increased"
110
+ ],
111
+ content: "gap-[12px]",
112
+ icon: "size-[32px]",
113
+ trailing: [
114
+ "h-[96px] ps-[calc(29px-var(--m3-button-border,0px))] pe-[calc(29px-var(--m3-button-border,0px))]",
115
+ "rounded-e-[var(--_md-comp-split-button-container-shape-capped)] rounded-s-corner-small",
116
+ "not-data-open:data-hovered:rounded-s-corner-large-increased not-data-open:data-focus-visible:rounded-s-corner-large-increased data-pressed:rounded-s-corner-large-increased",
117
+ "data-open:not-data-pressed:rounded-s-[min(var(--md-sys-shape-corner-full),48px)]",
118
+ "[--m3-optical:-3px] data-pressed:[--m3-optical:-3px] data-open:not-data-pressed:[--m3-optical:0px]"
119
+ ],
120
+ menuIcon: "size-[38px]"
121
+ },
122
+ xl: {
123
+ leading: [
124
+ "h-[136px] ps-[calc(64px-var(--m3-button-border,0px))] pe-[calc(64px-var(--m3-button-border,0px))] font-brand text-headline-large",
125
+ "rounded-s-[var(--_md-comp-split-button-container-shape-capped)] rounded-e-corner-medium",
126
+ "data-hovered:rounded-e-corner-large-increased data-focus-visible:rounded-e-corner-large-increased data-pressed:rounded-e-corner-large-increased"
127
+ ],
128
+ content: "gap-[16px]",
129
+ icon: "size-[40px]",
130
+ trailing: [
131
+ "h-[136px] ps-[calc(43px-var(--m3-button-border,0px))] pe-[calc(43px-var(--m3-button-border,0px))]",
132
+ "rounded-e-[var(--_md-comp-split-button-container-shape-capped)] rounded-s-corner-medium",
133
+ "not-data-open:data-hovered:rounded-s-corner-large-increased not-data-open:data-focus-visible:rounded-s-corner-large-increased data-pressed:rounded-s-corner-large-increased",
134
+ "data-open:not-data-pressed:rounded-s-[min(var(--md-sys-shape-corner-full),68px)]",
135
+ "[--m3-optical:-6px] data-pressed:[--m3-optical:-5px] data-open:not-data-pressed:[--m3-optical:0px]"
136
+ ],
137
+ menuIcon: "size-[50px]"
138
+ }
139
+ }
140
+ },
141
+ compoundVariants: [{
142
+ variant: "outlined",
143
+ size: "lg",
144
+ class: {
145
+ leading: "[--m3-button-border:2px]",
146
+ trailing: "[--m3-button-border:2px]"
147
+ }
148
+ }, {
149
+ variant: "outlined",
150
+ size: "xl",
151
+ class: {
152
+ leading: "[--m3-button-border:3px]",
153
+ trailing: "[--m3-button-border:3px]"
154
+ }
155
+ }],
156
+ defaultVariants: {
157
+ variant: "filled",
158
+ size: "sm"
159
+ }
160
+ });
161
+ //#endregion
162
+ export { splitButtonStyles };
163
+
164
+ //# sourceMappingURL=split-button-styles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"split-button-styles.js","names":[],"sources":["../../../src/components/split-button/split-button-styles.ts"],"sourcesContent":["import { tv, type VariantProps } from '../../utils/tv';\nimport {\n buttonVariantClasses,\n forcedColorClasses,\n nonBouncingMorph,\n} from '../button/button-styles';\n\n/*\n * Values follow the M3 Expressive split button specs and Compose's\n * SplitButton{XSmall…XLarge}Tokens (2026-10-13):\n *\n * - Two buttons 2px apart, each at least 48px wide, with full outer corners. Inner corners\n * are 4 / 4 / 4 / 8 / 12px (XS–XL) and change to 8 / 12 / 12 / 20 / 20px when hovered,\n * keyboard-focused or pressed (\"The inner corners change shape for hovered, focused, and\n * pressed states\"). Corners move on the default effects spring (`container-motion`,\n * `nonBouncingMorph`), which never bounces, as Compose's split button (2026-10-15).\n * - XS and S halves are shorter than 48px, so each gets a 48px touch target.\n * - Leading padding 12/10, 16/12, 24, 48, 64px; trailing 13, 13, 15, 29, 43px with a 22 /\n * 22 / 26 / 38 / 50px icon. Padding counts from the container's edge: an outlined half\n * takes its outline (`--m3-button-border`, as on Button) out of it.\n * - While its menu is open the trailing button is a circle with a persistent 10% layer\n * of its content colour (Compose draws the outline at the pressed state-layer alpha).\n * - The trailing icon is optically centred, −1 / −1 / −2 / −3 / −6px from the centre at\n * rest (the spec's \"Menu icon offset when unselected\"), −1 / −1 / −2 / −3 / −5px pressed\n * (Compose) and centred when open.\n * - The icon turns over inwards (towards the leading button, so the other way in RTL) on\n * the standard scheme's fast spatial spring whatever the active scheme (\"The split\n * button uses the standard motion scheme … when rotating the menu button\"): the icon\n * carries `data-motion=\"standard\"`. Under reduced motion it turns without animating.\n *\n * The XS and S halves take a 32 / 40px minimum height rather than a fixed one, so they grow\n * around text at a large browser font size, as Compose's `heightIn(min)` does (XS\n * 2026-10-13, S 2026-10-15).\n *\n * The outer corners come from the component tokens (`split-button-tokens.ts`,\n * `--md-comp-split-button-<size>-container-shape`), read through the root's resolved\n * corner; the halves' colours come from Button's (`buttonVariantClasses`).\n *\n * Label type and icon sizes follow the Button scale per size; Compose's split button\n * provides `label-large` and leaves larger text to the caller. Every class is written out\n * in full so Tailwind can find it.\n */\n\nconst half = [\n 'inline-flex shrink-0 cursor-pointer items-center justify-center align-middle min-w-[48px]',\n 'font-plain whitespace-nowrap select-none',\n 'state-layer focus-ring container-motion',\n // Corners on the default effects spring, which never bounces, as Compose's split button\n // (\"DefaultEffects\", 2026-10-15).\n nonBouncingMorph,\n 'data-disabled:cursor-default data-disabled:text-on-surface-variant/38 data-disabled:shadow-elevation-0',\n forcedColorClasses.disabled,\n];\n\nconst variant = {\n filled: { leading: buttonVariantClasses.filled, trailing: buttonVariantClasses.filled },\n elevated: { leading: buttonVariantClasses.elevated, trailing: buttonVariantClasses.elevated },\n tonal: { leading: buttonVariantClasses.tonal, trailing: buttonVariantClasses.tonal },\n outlined: { leading: buttonVariantClasses.outlined, trailing: buttonVariantClasses.outlined },\n} as const;\n\n/** Variant definitions for {@link SplitButton}; extend them to add variants. */\nexport const splitButtonStyles = tv({\n slots: {\n root: 'inline-flex items-center gap-[2px]',\n leading: half,\n // Library-owned inner wrappers: they hold the touch targets, never consumer layout.\n content: 'relative inline-flex min-w-0 items-center justify-center',\n trailingContent: 'relative inline-flex items-center justify-center',\n label: 'min-w-0',\n icon: 'inline-flex shrink-0 items-center justify-center [&>svg]:size-full',\n // The checked layer is the state layer's menu-open layer (`MenuTrigger` sets\n // `data-menu-open`), which adds to the hover and focus layers.\n trailing: half,\n // Optically centred: offset by --m3-optical (logical, so it mirrors in RTL).\n menuIcon: [\n 'relative start-(--m3-optical) inline-flex shrink-0 items-center justify-center [&>svg]:size-full',\n '[transition-property:inset-inline-start,rotate]',\n '[transition-duration:var(--md-sys-motion-spring-spatial-fast-duration)]',\n '[transition-timing-function:var(--md-sys-motion-spring-spatial-fast-easing)]',\n 'in-data-open:ltr:rotate-180 in-data-open:rtl:-rotate-180',\n // Reduced motion: the chevron and its offset snap (architecture §6).\n 'motion-reduce:transition-none',\n ],\n },\n variants: {\n variant,\n size: {\n xs: {\n // The halves have a minimum height and grow with larger text; they stretch to the\n // taller one, and the root keeps its content height in a stretching parent.\n root: 'h-fit items-stretch',\n leading: [\n 'min-h-[32px] ps-[calc(12px-var(--m3-button-border,0px))] pe-[calc(10px-var(--m3-button-border,0px))] text-label-large',\n 'rounded-s-[var(--_md-comp-split-button-container-shape-capped)] rounded-e-corner-extra-small',\n 'data-hovered:rounded-e-corner-small data-focus-visible:rounded-e-corner-small data-pressed:rounded-e-corner-small',\n ],\n content: 'gap-[8px]',\n icon: 'size-[20px]',\n trailing: [\n 'min-h-[32px] ps-[calc(13px-var(--m3-button-border,0px))] pe-[calc(13px-var(--m3-button-border,0px))]',\n 'rounded-e-[var(--_md-comp-split-button-container-shape-capped)] rounded-s-corner-extra-small',\n 'not-data-open:data-hovered:rounded-s-corner-small not-data-open:data-focus-visible:rounded-s-corner-small data-pressed:rounded-s-corner-small',\n 'data-open:not-data-pressed:rounded-s-[min(var(--md-sys-shape-corner-full),16px)]',\n '[--m3-optical:-1px] data-pressed:[--m3-optical:-1px] data-open:not-data-pressed:[--m3-optical:0px]',\n ],\n menuIcon: 'size-[22px]',\n },\n sm: {\n // As at XS: the halves grow with larger text, never overflowing 40px (2026-10-15).\n root: 'h-fit items-stretch',\n leading: [\n 'min-h-[40px] ps-[calc(16px-var(--m3-button-border,0px))] pe-[calc(12px-var(--m3-button-border,0px))] text-label-large',\n 'rounded-s-[var(--_md-comp-split-button-container-shape-capped)] rounded-e-corner-extra-small',\n 'data-hovered:rounded-e-corner-medium data-focus-visible:rounded-e-corner-medium data-pressed:rounded-e-corner-medium',\n ],\n content: 'gap-[8px]',\n icon: 'size-[20px]',\n trailing: [\n 'min-h-[40px] ps-[calc(13px-var(--m3-button-border,0px))] pe-[calc(13px-var(--m3-button-border,0px))]',\n 'rounded-e-[var(--_md-comp-split-button-container-shape-capped)] rounded-s-corner-extra-small',\n 'not-data-open:data-hovered:rounded-s-corner-medium not-data-open:data-focus-visible:rounded-s-corner-medium data-pressed:rounded-s-corner-medium',\n 'data-open:not-data-pressed:rounded-s-[min(var(--md-sys-shape-corner-full),20px)]',\n '[--m3-optical:-1px] data-pressed:[--m3-optical:-1px] data-open:not-data-pressed:[--m3-optical:0px]',\n ],\n menuIcon: 'size-[22px]',\n },\n md: {\n leading: [\n 'h-[56px] ps-[calc(24px-var(--m3-button-border,0px))] pe-[calc(24px-var(--m3-button-border,0px))] text-title-medium',\n 'rounded-s-[var(--_md-comp-split-button-container-shape-capped)] rounded-e-corner-extra-small',\n 'data-hovered:rounded-e-corner-medium data-focus-visible:rounded-e-corner-medium data-pressed:rounded-e-corner-medium',\n ],\n content: 'gap-[8px]',\n icon: 'size-[24px]',\n trailing: [\n 'h-[56px] ps-[calc(15px-var(--m3-button-border,0px))] pe-[calc(15px-var(--m3-button-border,0px))]',\n 'rounded-e-[var(--_md-comp-split-button-container-shape-capped)] rounded-s-corner-extra-small',\n 'not-data-open:data-hovered:rounded-s-corner-medium not-data-open:data-focus-visible:rounded-s-corner-medium data-pressed:rounded-s-corner-medium',\n 'data-open:not-data-pressed:rounded-s-[min(var(--md-sys-shape-corner-full),28px)]',\n '[--m3-optical:-2px] data-pressed:[--m3-optical:-2px] data-open:not-data-pressed:[--m3-optical:0px]',\n ],\n menuIcon: 'size-[26px]',\n },\n lg: {\n leading: [\n 'h-[96px] ps-[calc(48px-var(--m3-button-border,0px))] pe-[calc(48px-var(--m3-button-border,0px))] font-brand text-headline-small',\n 'rounded-s-[var(--_md-comp-split-button-container-shape-capped)] rounded-e-corner-small',\n 'data-hovered:rounded-e-corner-large-increased data-focus-visible:rounded-e-corner-large-increased data-pressed:rounded-e-corner-large-increased',\n ],\n content: 'gap-[12px]',\n icon: 'size-[32px]',\n trailing: [\n 'h-[96px] ps-[calc(29px-var(--m3-button-border,0px))] pe-[calc(29px-var(--m3-button-border,0px))]',\n 'rounded-e-[var(--_md-comp-split-button-container-shape-capped)] rounded-s-corner-small',\n 'not-data-open:data-hovered:rounded-s-corner-large-increased not-data-open:data-focus-visible:rounded-s-corner-large-increased data-pressed:rounded-s-corner-large-increased',\n 'data-open:not-data-pressed:rounded-s-[min(var(--md-sys-shape-corner-full),48px)]',\n '[--m3-optical:-3px] data-pressed:[--m3-optical:-3px] data-open:not-data-pressed:[--m3-optical:0px]',\n ],\n menuIcon: 'size-[38px]',\n },\n xl: {\n leading: [\n 'h-[136px] ps-[calc(64px-var(--m3-button-border,0px))] pe-[calc(64px-var(--m3-button-border,0px))] font-brand text-headline-large',\n 'rounded-s-[var(--_md-comp-split-button-container-shape-capped)] rounded-e-corner-medium',\n 'data-hovered:rounded-e-corner-large-increased data-focus-visible:rounded-e-corner-large-increased data-pressed:rounded-e-corner-large-increased',\n ],\n content: 'gap-[16px]',\n icon: 'size-[40px]',\n trailing: [\n 'h-[136px] ps-[calc(43px-var(--m3-button-border,0px))] pe-[calc(43px-var(--m3-button-border,0px))]',\n 'rounded-e-[var(--_md-comp-split-button-container-shape-capped)] rounded-s-corner-medium',\n 'not-data-open:data-hovered:rounded-s-corner-large-increased not-data-open:data-focus-visible:rounded-s-corner-large-increased data-pressed:rounded-s-corner-large-increased',\n 'data-open:not-data-pressed:rounded-s-[min(var(--md-sys-shape-corner-full),68px)]',\n '[--m3-optical:-6px] data-pressed:[--m3-optical:-5px] data-open:not-data-pressed:[--m3-optical:0px]',\n ],\n menuIcon: 'size-[50px]',\n },\n },\n },\n compoundVariants: [\n // Outline width grows with size, as on Button.\n {\n variant: 'outlined',\n size: 'lg',\n class: { leading: '[--m3-button-border:2px]', trailing: '[--m3-button-border:2px]' },\n },\n {\n variant: 'outlined',\n size: 'xl',\n class: { leading: '[--m3-button-border:3px]', trailing: '[--m3-button-border:3px]' },\n },\n ],\n defaultVariants: { variant: 'filled', size: 'sm' },\n});\n\n/**\n * The variants of {@link splitButtonStyles}, for building on its styles. They are the recipe's keys, not\n * component props: their names (`hasIcon`, `isOpen`…) follow the classes and may change.\n */\nexport type SplitButtonStyleProps = VariantProps<typeof splitButtonStyles>;\nexport type SplitButtonVariant = NonNullable<SplitButtonStyleProps['variant']>;\nexport type SplitButtonSize = NonNullable<SplitButtonStyleProps['size']>;\n"],"mappings":";;;AA2CA,MAAM,OAAO;CACX;CACA;CACA;CAGA;CACA;CACA,mBAAmB;AACrB;AAEA,MAAM,UAAU;CACd,QAAQ;EAAE,SAAS,qBAAqB;EAAQ,UAAU,qBAAqB;CAAO;CACtF,UAAU;EAAE,SAAS,qBAAqB;EAAU,UAAU,qBAAqB;CAAS;CAC5F,OAAO;EAAE,SAAS,qBAAqB;EAAO,UAAU,qBAAqB;CAAM;CACnF,UAAU;EAAE,SAAS,qBAAqB;EAAU,UAAU,qBAAqB;CAAS;AAC9F;;AAGA,MAAa,oBAAoB,GAAG;CAClC,OAAO;EACL,MAAM;EACN,SAAS;EAET,SAAS;EACT,iBAAiB;EACjB,OAAO;EACP,MAAM;EAGN,UAAU;EAEV,UAAU;GACR;GACA;GACA;GACA;GACA;GAEA;EACF;CACF;CACA,UAAU;EACR;EACA,MAAM;GACJ,IAAI;IAGF,MAAM;IACN,SAAS;KACP;KACA;KACA;IACF;IACA,SAAS;IACT,MAAM;IACN,UAAU;KACR;KACA;KACA;KACA;KACA;IACF;IACA,UAAU;GACZ;GACA,IAAI;IAEF,MAAM;IACN,SAAS;KACP;KACA;KACA;IACF;IACA,SAAS;IACT,MAAM;IACN,UAAU;KACR;KACA;KACA;KACA;KACA;IACF;IACA,UAAU;GACZ;GACA,IAAI;IACF,SAAS;KACP;KACA;KACA;IACF;IACA,SAAS;IACT,MAAM;IACN,UAAU;KACR;KACA;KACA;KACA;KACA;IACF;IACA,UAAU;GACZ;GACA,IAAI;IACF,SAAS;KACP;KACA;KACA;IACF;IACA,SAAS;IACT,MAAM;IACN,UAAU;KACR;KACA;KACA;KACA;KACA;IACF;IACA,UAAU;GACZ;GACA,IAAI;IACF,SAAS;KACP;KACA;KACA;IACF;IACA,SAAS;IACT,MAAM;IACN,UAAU;KACR;KACA;KACA;KACA;KACA;IACF;IACA,UAAU;GACZ;EACF;CACF;CACA,kBAAkB,CAEhB;EACE,SAAS;EACT,MAAM;EACN,OAAO;GAAE,SAAS;GAA4B,UAAU;EAA2B;CACrF,GACA;EACE,SAAS;EACT,MAAM;EACN,OAAO;GAAE,SAAS;GAA4B,UAAU;EAA2B;CACrF,CACF;CACA,iBAAiB;EAAE,SAAS;EAAU,MAAM;CAAK;AACnD,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { ComponentTokenSet } from "../../tokens/component.js";
2
+ import "../../index.js";
3
+ //#region src/components/split-button/split-button-tokens.d.ts
4
+ /** The tokens of {@link SplitButton}: `--md-comp-split-button-<size>-container-shape`. */
5
+ export declare const splitButtonTokenSet: ComponentTokenSet<never>;
6
+ //#endregion
7
+ //# sourceMappingURL=split-button-tokens.d.ts.map
@@ -0,0 +1,36 @@
1
+ import { corner, defineComponentTokens, px } from "../../tokens/component.js";
2
+ //#region src/components/split-button/split-button-tokens.ts
3
+ const outerCorner = {
4
+ property: "border-top-left-radius",
5
+ slot: "leading"
6
+ };
7
+ /** One size's outer corners: full, capped at half the height of the halves. */
8
+ function size(prefix, compose, halfHeight) {
9
+ return {
10
+ prefix,
11
+ tokens: { "container-shape": {
12
+ value: corner("full"),
13
+ description: "The outer corners of both halves: full, at most half the height.",
14
+ compose: `${compose}.ContainerShape`,
15
+ paints: outerCorner
16
+ } },
17
+ fixed: { "half-height": px(halfHeight) }
18
+ };
19
+ }
20
+ /** The tokens of {@link SplitButton}: `--md-comp-split-button-<size>-container-shape`. */
21
+ const splitButtonTokenSet = defineComponentTokens({
22
+ name: "md-comp-split-button",
23
+ tokens: {},
24
+ scopes: { size: {
25
+ xs: size("md-comp-split-button-xsmall", "SplitButtonXSmallTokens", 16),
26
+ sm: size("md-comp-split-button-small", "SplitButtonSmallTokens", 20),
27
+ md: size("md-comp-split-button-medium", "SplitButtonMediumTokens", 28),
28
+ lg: size("md-comp-split-button-large", "SplitButtonLargeTokens", 48),
29
+ xl: size("md-comp-split-button-xlarge", "SplitButtonXLargeTokens", 68)
30
+ } },
31
+ derived: { "container-shape-capped": "min(var(--_md-comp-split-button-container-shape), var(--_md-comp-split-button-half-height))" }
32
+ });
33
+ //#endregion
34
+ export { splitButtonTokenSet };
35
+
36
+ //# sourceMappingURL=split-button-tokens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"split-button-tokens.js","names":[],"sources":["../../../src/components/split-button/split-button-tokens.ts"],"sourcesContent":["import {\n corner,\n defineComponentTokens,\n px,\n type ComponentTokenScope,\n type TokenPaints,\n} from '../../tokens/component';\n\n/*\n * The split button's component tokens, M3 Expressive's `md.comp.split-button.<size>.*`\n * names (checked against m3.material.io's token tables, 2026-10-14), with Compose's\n * defaults: the outer corners of its two halves, per size. The root carries\n * `data-tokens=\"md-comp-split-button\"`, `data-variant` and `data-size`; the halves inherit\n * the resolved corner. Their colours are Button's (`md-comp-button`): each half carries\n * `data-tokens=\"md-comp-button\"` and the variant, so `--md-comp-button-filled-*` restyles\n * them too. The inner corners and their state changes stay classes.\n */\n\n// The leading half's outer corner (its start side), in LTR.\nconst outerCorner: TokenPaints = { property: 'border-top-left-radius', slot: 'leading' };\n\n/** One size's outer corners: full, capped at half the height of the halves. */\nfunction size(prefix: string, compose: string, halfHeight: number): ComponentTokenScope {\n return {\n prefix,\n tokens: {\n 'container-shape': {\n value: corner('full'),\n description: 'The outer corners of both halves: full, at most half the height.',\n compose: `${compose}.ContainerShape`,\n paints: outerCorner,\n },\n },\n fixed: { 'half-height': px(halfHeight) },\n };\n}\n\n/** The tokens of {@link SplitButton}: `--md-comp-split-button-<size>-container-shape`. */\nexport const splitButtonTokenSet = defineComponentTokens({\n name: 'md-comp-split-button',\n tokens: {},\n scopes: {\n size: {\n xs: size('md-comp-split-button-xsmall', 'SplitButtonXSmallTokens', 16),\n sm: size('md-comp-split-button-small', 'SplitButtonSmallTokens', 20),\n md: size('md-comp-split-button-medium', 'SplitButtonMediumTokens', 28),\n lg: size('md-comp-split-button-large', 'SplitButtonLargeTokens', 48),\n xl: size('md-comp-split-button-xlarge', 'SplitButtonXLargeTokens', 68),\n },\n },\n derived: {\n // Full corners stop at half the height, so the corner transitions interpolate smoothly.\n 'container-shape-capped':\n 'min(var(--_md-comp-split-button-container-shape), var(--_md-comp-split-button-half-height))',\n },\n});\n"],"mappings":";;AAmBA,MAAM,cAA2B;CAAE,UAAU;CAA0B,MAAM;AAAU;;AAGvF,SAAS,KAAK,QAAgB,SAAiB,YAAyC;CACtF,OAAO;EACL;EACA,QAAQ,EACN,mBAAmB;GACjB,OAAO,OAAO,MAAM;GACpB,aAAa;GACb,SAAS,GAAG,QAAQ;GACpB,QAAQ;EACV,EACF;EACA,OAAO,EAAE,eAAe,GAAG,UAAU,EAAE;CACzC;AACF;;AAGA,MAAa,sBAAsB,sBAAsB;CACvD,MAAM;CACN,QAAQ,CAAC;CACT,QAAQ,EACN,MAAM;EACJ,IAAI,KAAK,+BAA+B,2BAA2B,EAAE;EACrE,IAAI,KAAK,8BAA8B,0BAA0B,EAAE;EACnE,IAAI,KAAK,+BAA+B,2BAA2B,EAAE;EACrE,IAAI,KAAK,8BAA8B,0BAA0B,EAAE;EACnE,IAAI,KAAK,+BAA+B,2BAA2B,EAAE;CACvE,EACF;CACA,SAAS,EAEP,0BACE,8FACJ;AACF,CAAC"}
@@ -0,0 +1,82 @@
1
+ import { Density } from "../../tokens/density.js";
2
+ import { WrapperRootDOMProps } from "../../utils/root-props.js";
3
+ import { SelectionControlClassNames } from "../../primitives/SelectionControl.js";
4
+ import { AriaAttributes, CSSProperties, ReactNode, Ref } from "react";
5
+ import { AriaSwitchProps } from "react-aria";
6
+ //#region src/components/switch/Switch.d.ts
7
+ export interface SwitchClassNames extends SelectionControlClassNames {
8
+ /** The thumb, the circle that slides along the track. */
9
+ thumb?: string;
10
+ /** The icon inside the thumb. */
11
+ icon?: string;
12
+ /** The round state layer around the thumb (hover, focus and press). */
13
+ stateLayer?: string;
14
+ }
15
+ type RenamedAriaProps = 'isSelected' | 'defaultSelected' | 'onChange' | 'isDisabled' | 'isReadOnly' | 'isRequired' | 'isInvalid' | 'children' | 'validationState' | 'excludeFromTabOrder';
16
+ interface SwitchOwnProps extends Omit<AriaSwitchProps, RenamedAriaProps>, Omit<WrapperRootDOMProps<HTMLLabelElement>, keyof AriaSwitchProps>, Pick<AriaAttributes, 'aria-expanded' | 'aria-required' | 'aria-invalid' | 'aria-readonly'> {
17
+ /** Controlled on state (`checked`, as an HTML checkbox). */
18
+ checked?: boolean;
19
+ /** Initial on state when uncontrolled. */
20
+ defaultChecked?: boolean;
21
+ /** Called when the user switches it on or off. */
22
+ onCheckedChange?: (checked: boolean) => void;
23
+ /** Turns the switch off: it can't be changed or focused. @default false */
24
+ disabled?: boolean;
25
+ /** The switch can be focused but not changed. @default false */
26
+ readOnly?: boolean;
27
+ /**
28
+ * The switch must be on (`aria-required`; with `validationBehavior="native"`, the form can't
29
+ * submit until it is). @default false
30
+ */
31
+ required?: boolean;
32
+ /** Marks the switch invalid for assistive tech (`aria-invalid`). @default false */
33
+ invalid?: boolean;
34
+ /** Shows the default check / close icons in the thumb. @default false */
35
+ icons?: boolean;
36
+ /**
37
+ * Web density, `0` to `-3`: each step takes 4px off the round state layer around the thumb
38
+ * (40px at 0, 32px at -2 and -3, so it still shows around a pressed 28px thumb); the track
39
+ * stays 52 × 32px and the touch target 48px. Left out, the switch takes the density of the
40
+ * nearest `ThemeProvider` or `ThemeScope`. M3 asks for density to be the reader's choice
41
+ * rather than a default, so prefer setting it there, from a setting.
42
+ * @default 0
43
+ */
44
+ density?: Density;
45
+ /** Icon in the thumb while checked (overrides the default check). */
46
+ checkedIcon?: ReactNode;
47
+ /** Icon in the thumb while unchecked (overrides the default close). */
48
+ uncheckedIcon?: ReactNode;
49
+ /** Classes for the root `<label>`, merged with `classNames.root`; consumer classes win. */
50
+ className?: string;
51
+ /** Classes for each part, by slot. `classNames.root` is merged with `className`. */
52
+ classNames?: SwitchClassNames;
53
+ /** Inline styles for the root `<label>`. */
54
+ style?: CSSProperties;
55
+ /** The root `<label>`. Use `inputRef` for the switch input. */
56
+ ref?: Ref<HTMLLabelElement>;
57
+ /** Ref to the visually hidden switch `<input>`. */
58
+ inputRef?: Ref<HTMLInputElement>;
59
+ }
60
+ type SwitchLabel = {
61
+ children: ReactNode;
62
+ } | {
63
+ children?: undefined;
64
+ 'aria-label': string;
65
+ } | {
66
+ children?: undefined;
67
+ 'aria-labelledby': string;
68
+ };
69
+ export type SwitchProps = SwitchOwnProps & SwitchLabel;
70
+ /**
71
+ * M3 switch: a track and a thumb that grows and slides when switched on (by a tap, a
72
+ * drag, Space or Enter), optional icons in the thumb, a state layer that follows the
73
+ * thumb and a 48px touch target.
74
+ * A visually hidden native input with `role="switch"` (React Aria `useSwitch`) keeps
75
+ * forms and assistive tech working.
76
+ *
77
+ * @example
78
+ * <Switch defaultChecked icons>Wi-Fi</Switch>
79
+ */
80
+ export declare function Switch({ checked, defaultChecked, onCheckedChange, disabled, readOnly, required, invalid, icons, checkedIcon, uncheckedIcon, density, className, classNames, style, ref, inputRef, children, ...otherProps }: SwitchProps): import("react").JSX.Element;
81
+ //#endregion
82
+ //# sourceMappingURL=Switch.d.ts.map
@@ -0,0 +1,165 @@
1
+ "use client";
2
+ import { densityAttribute } from "../../tokens/density.js";
3
+ import { restartRipple, useRippleHold } from "../../primitives/use-m3-interaction.js";
4
+ import { mergeDataTokens } from "../../utils/merge-data-tokens.js";
5
+ import { pickWidgetAria, splitRootProps } from "../../utils/root-props.js";
6
+ import { SelectionControl } from "../../primitives/SelectionControl.js";
7
+ import { switchStyles } from "./switch-styles.js";
8
+ import { CheckIcon, CloseIcon, SwitchThumb, thumbGeometry } from "./switch-thumb.js";
9
+ import { useEffect, useRef, useState } from "react";
10
+ import { Fragment as Fragment$1, jsx, jsxs } from "react/jsx-runtime";
11
+ import { mergeProps, useFocusRing, useHover, useObjectRef, useSwitch } from "react-aria";
12
+ import { useToggleState } from "react-stately";
13
+ //#region src/components/switch/Switch.tsx
14
+ /** How far (px) a press moves before it becomes a drag. */
15
+ const DRAG_SLOP = 3;
16
+ /** Whether a thumb dragged to `center` (px) is in the on half. */
17
+ const isOnAt = (center) => center > 26;
18
+ /**
19
+ * M3 switch: a track and a thumb that grows and slides when switched on (by a tap, a
20
+ * drag, Space or Enter), optional icons in the thumb, a state layer that follows the
21
+ * thumb and a 48px touch target.
22
+ * A visually hidden native input with `role="switch"` (React Aria `useSwitch`) keeps
23
+ * forms and assistive tech working.
24
+ *
25
+ * @example
26
+ * <Switch defaultChecked icons>Wi-Fi</Switch>
27
+ */
28
+ function Switch({ checked, defaultChecked, onCheckedChange, disabled = false, readOnly, required, invalid, icons = false, checkedIcon, uncheckedIcon, density, className, classNames, style, ref, inputRef, children, ...otherProps }) {
29
+ const { root: data, rest } = splitRootProps(otherProps, { wrapper: true });
30
+ const domInputRef = useObjectRef(inputRef);
31
+ const options = {
32
+ ...rest,
33
+ children,
34
+ isSelected: checked,
35
+ defaultSelected: defaultChecked,
36
+ onChange: onCheckedChange,
37
+ isDisabled: disabled,
38
+ isReadOnly: readOnly,
39
+ isRequired: required,
40
+ isInvalid: invalid
41
+ };
42
+ const toggleState = useToggleState(options);
43
+ const [dragCenter, setDragCenter] = useState(null);
44
+ const [skipToggle, setSkipToggle] = useState(false);
45
+ const state = {
46
+ ...toggleState,
47
+ toggle: () => skipToggle ? setSkipToggle(false) : toggleState.toggle()
48
+ };
49
+ const stopDrag = useRef(null);
50
+ useEffect(() => () => stopDrag.current?.(), []);
51
+ const dragProps = { onPointerDown: (event) => {
52
+ if (event.button !== 0 || disabled || readOnly) return;
53
+ const { pointerId } = event;
54
+ const start = state.isSelected ? 36 : 16;
55
+ const sign = getComputedStyle(event.currentTarget).direction === "rtl" ? -1 : 1;
56
+ const startX = event.clientX;
57
+ let center = null;
58
+ const move = (moveEvent) => {
59
+ if (moveEvent.pointerId !== pointerId) return;
60
+ const offset = (moveEvent.clientX - startX) * sign;
61
+ if (center === null && Math.abs(offset) < DRAG_SLOP) return;
62
+ center = Math.min(36, Math.max(16, start + offset));
63
+ setDragCenter(center);
64
+ };
65
+ const remove = () => {
66
+ window.removeEventListener("pointermove", move);
67
+ window.removeEventListener("pointerup", end);
68
+ window.removeEventListener("pointercancel", end);
69
+ stopDrag.current = null;
70
+ };
71
+ const end = (endEvent) => {
72
+ if (endEvent.pointerId !== pointerId) return;
73
+ remove();
74
+ setDragCenter(null);
75
+ if (center === null) return;
76
+ if (endEvent.type !== "pointerup") return;
77
+ state.setSelected(isOnAt(center));
78
+ setSkipToggle(true);
79
+ setTimeout(() => setSkipToggle(false), 100);
80
+ };
81
+ stopDrag.current?.();
82
+ stopDrag.current = remove;
83
+ window.addEventListener("pointermove", move);
84
+ window.addEventListener("pointerup", end);
85
+ window.addEventListener("pointercancel", end);
86
+ } };
87
+ const { inputProps, labelProps, isSelected, isPressed } = useSwitch(options, state, domInputRef);
88
+ const { focusProps, isFocusVisible } = useFocusRing();
89
+ const { hoverProps, isHovered } = useHover({ isDisabled: disabled });
90
+ const icon = isSelected ? checkedIcon ?? (icons ? /* @__PURE__ */ jsx(CheckIcon, {}) : null) : uncheckedIcon ?? (icons ? /* @__PURE__ */ jsx(CloseIcon, {}) : null);
91
+ const [enterPressed, setEnterPressed] = useState(false);
92
+ const enterProps = {
93
+ onKeyDown: (event) => {
94
+ if (event.key !== "Enter") return;
95
+ event.preventDefault();
96
+ if (event.repeat || disabled || readOnly) return;
97
+ const control = event.currentTarget.closest("[data-selection-control]");
98
+ if (control) restartRipple(control);
99
+ setEnterPressed(true);
100
+ },
101
+ onKeyUp: (event) => {
102
+ if (event.key !== "Enter" || !enterPressed) return;
103
+ setEnterPressed(false);
104
+ toggleState.toggle();
105
+ },
106
+ onBlur: () => setEnterPressed(false)
107
+ };
108
+ const dragging = dragCenter !== null;
109
+ const pressed = (isPressed || enterPressed || dragging) && !disabled;
110
+ const rippling = useRippleHold(pressed);
111
+ const geometry = thumbGeometry(isSelected, pressed, Boolean(icon));
112
+ const { size } = geometry;
113
+ const center = dragCenter ?? geometry.center;
114
+ const stateAttributes = {
115
+ "data-checked": isSelected || void 0,
116
+ "data-disabled": disabled || void 0,
117
+ "data-hovered": isHovered && !disabled || void 0,
118
+ "data-pressed": pressed || void 0,
119
+ "data-dragged": dragging || void 0,
120
+ "data-rippling": rippling || void 0,
121
+ "data-focus-visible": isFocusVisible || void 0,
122
+ "data-has-icon": Boolean(icon) || void 0
123
+ };
124
+ const styles = switchStyles();
125
+ const trackProps = {
126
+ ...dragProps,
127
+ "data-slot": "track"
128
+ };
129
+ return /* @__PURE__ */ jsx(SelectionControl, {
130
+ ref,
131
+ rootProps: mergeProps(labelProps, hoverProps),
132
+ inputProps: mergeProps(pickWidgetAria(rest), inputProps, focusProps, enterProps),
133
+ inputRef: domInputRef,
134
+ rootData: {
135
+ ...data,
136
+ ...densityAttribute(density),
137
+ "data-tokens": mergeDataTokens("md-comp-switch", data)
138
+ },
139
+ state: stateAttributes,
140
+ styles,
141
+ className,
142
+ classNames,
143
+ style,
144
+ controlProps: trackProps,
145
+ controlStyle: {
146
+ "--m3-thumb-size": `${size}px`,
147
+ "--m3-thumb-center": `${center}px`
148
+ },
149
+ indicator: /* @__PURE__ */ jsxs(Fragment$1, { children: [/* @__PURE__ */ jsx("span", {
150
+ "aria-hidden": "true",
151
+ ...stateAttributes,
152
+ className: styles.stateLayer({ class: classNames?.stateLayer })
153
+ }), /* @__PURE__ */ jsx(SwitchThumb, {
154
+ styles,
155
+ icon,
156
+ className: classNames?.thumb,
157
+ iconClassName: classNames?.icon
158
+ })] }),
159
+ children
160
+ });
161
+ }
162
+ //#endregion
163
+ export { Switch };
164
+
165
+ //# sourceMappingURL=Switch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Switch.js","names":[],"sources":["../../../src/components/switch/Switch.tsx"],"sourcesContent":["'use client';\n\nimport {\n useEffect,\n useRef,\n useState,\n type AriaAttributes,\n type CSSProperties,\n type KeyboardEvent,\n type PointerEvent,\n type ReactNode,\n type Ref,\n} from 'react';\nimport {\n mergeProps,\n useFocusRing,\n useHover,\n useObjectRef,\n useSwitch,\n type AriaSwitchProps,\n} from 'react-aria';\nimport { useToggleState } from 'react-stately';\nimport {\n SelectionControl,\n type SelectionControlClassNames,\n} from '../../primitives/SelectionControl';\nimport { densityAttribute, type Density } from '../../tokens/density';\nimport { mergeDataTokens } from '../../utils/merge-data-tokens';\nimport { pickWidgetAria, splitRootProps, type WrapperRootDOMProps } from '../../utils/root-props';\nimport { switchStyles } from './switch-styles';\nimport { restartRipple, useRippleHold } from '../../primitives/use-m3-interaction';\nimport {\n CheckIcon,\n CloseIcon,\n SwitchThumb,\n THUMB_OFF_CENTER,\n THUMB_ON_CENTER,\n thumbGeometry,\n} from './switch-thumb';\n\nexport interface SwitchClassNames extends SelectionControlClassNames {\n /** The thumb, the circle that slides along the track. */\n thumb?: string;\n /** The icon inside the thumb. */\n icon?: string;\n /** The round state layer around the thumb (hover, focus and press). */\n stateLayer?: string;\n}\n\ntype RenamedAriaProps =\n | 'isSelected'\n | 'defaultSelected'\n | 'onChange'\n | 'isDisabled'\n | 'isReadOnly'\n | 'isRequired'\n | 'isInvalid'\n | 'children'\n // Left out: the deprecated `validationState` (`invalid` replaces it) and React Aria's\n // `excludeFromTabOrder` (`tabIndex={-1}` covers the rare case).\n | 'validationState'\n | 'excludeFromTabOrder';\n\ninterface SwitchOwnProps\n extends\n Omit<AriaSwitchProps, RenamedAriaProps>,\n Omit<WrapperRootDOMProps<HTMLLabelElement>, keyof AriaSwitchProps>,\n // The input's own state attributes go to it, with React Aria's `aria-controls`.\n Pick<AriaAttributes, 'aria-expanded' | 'aria-required' | 'aria-invalid' | 'aria-readonly'> {\n /** Controlled on state (`checked`, as an HTML checkbox). */\n checked?: boolean;\n /** Initial on state when uncontrolled. */\n defaultChecked?: boolean;\n /** Called when the user switches it on or off. */\n onCheckedChange?: (checked: boolean) => void;\n /** Turns the switch off: it can't be changed or focused. @default false */\n disabled?: boolean;\n /** The switch can be focused but not changed. @default false */\n readOnly?: boolean;\n /**\n * The switch must be on (`aria-required`; with `validationBehavior=\"native\"`, the form can't\n * submit until it is). @default false\n */\n required?: boolean;\n /** Marks the switch invalid for assistive tech (`aria-invalid`). @default false */\n invalid?: boolean;\n /** Shows the default check / close icons in the thumb. @default false */\n icons?: boolean;\n /**\n * Web density, `0` to `-3`: each step takes 4px off the round state layer around the thumb\n * (40px at 0, 32px at -2 and -3, so it still shows around a pressed 28px thumb); the track\n * stays 52 × 32px and the touch target 48px. Left out, the switch takes the density of the\n * nearest `ThemeProvider` or `ThemeScope`. M3 asks for density to be the reader's choice\n * rather than a default, so prefer setting it there, from a setting.\n * @default 0\n */\n density?: Density;\n /** Icon in the thumb while checked (overrides the default check). */\n checkedIcon?: ReactNode;\n /** Icon in the thumb while unchecked (overrides the default close). */\n uncheckedIcon?: ReactNode;\n /** Classes for the root `<label>`, merged with `classNames.root`; consumer classes win. */\n className?: string;\n /** Classes for each part, by slot. `classNames.root` is merged with `className`. */\n classNames?: SwitchClassNames;\n /** Inline styles for the root `<label>`. */\n style?: CSSProperties;\n /** The root `<label>`. Use `inputRef` for the switch input. */\n ref?: Ref<HTMLLabelElement>;\n /** Ref to the visually hidden switch `<input>`. */\n inputRef?: Ref<HTMLInputElement>;\n}\n\ntype SwitchLabel =\n | { children: ReactNode }\n | { children?: undefined; 'aria-label': string }\n | { children?: undefined; 'aria-labelledby': string };\n\nexport type SwitchProps = SwitchOwnProps & SwitchLabel;\n/** How far (px) a press moves before it becomes a drag. */\nconst DRAG_SLOP = 3;\n\n/** Whether a thumb dragged to `center` (px) is in the on half. */\nconst isOnAt = (center: number) => center > (THUMB_ON_CENTER + THUMB_OFF_CENTER) / 2;\n/**\n * M3 switch: a track and a thumb that grows and slides when switched on (by a tap, a\n * drag, Space or Enter), optional icons in the thumb, a state layer that follows the\n * thumb and a 48px touch target.\n * A visually hidden native input with `role=\"switch\"` (React Aria `useSwitch`) keeps\n * forms and assistive tech working.\n *\n * @example\n * <Switch defaultChecked icons>Wi-Fi</Switch>\n */\nexport function Switch({\n checked,\n defaultChecked,\n onCheckedChange,\n disabled = false,\n readOnly,\n required,\n invalid,\n icons = false,\n checkedIcon,\n uncheckedIcon,\n density,\n className,\n classNames,\n style,\n ref,\n inputRef,\n children,\n ...otherProps\n}: SwitchProps) {\n // DOM attributes for the whole control go on the root; the rest goes to the input.\n const { root: data, rest } = splitRootProps(otherProps, { wrapper: true });\n const domInputRef = useObjectRef(inputRef);\n const options: AriaSwitchProps = {\n ...rest,\n children,\n isSelected: checked,\n defaultSelected: defaultChecked,\n onChange: onCheckedChange,\n isDisabled: disabled,\n isReadOnly: readOnly,\n isRequired: required,\n isInvalid: invalid,\n };\n const toggleState = useToggleState(options);\n // Dragging the thumb (M3: \"Touch: Tap, Drag\"). The thumb follows the pointer between its\n // off and on centres; releasing sets the switch from the half the thumb is in. React\n // Aria's press then toggles on the click that follows, which `skipToggle` absorbs (it\n // lapses after React Aria's own 80ms click fallback, for a release outside the switch).\n const [dragCenter, setDragCenter] = useState<number | null>(null);\n const [skipToggle, setSkipToggle] = useState(false);\n const state = {\n ...toggleState,\n toggle: () => (skipToggle ? setSkipToggle(false) : toggleState.toggle()),\n };\n const stopDrag = useRef<(() => void) | null>(null);\n useEffect(() => () => stopDrag.current?.(), []);\n // Window listeners rather than React Aria `useMove`, which stops the pointer-down from\n // reaching the label's press handling (a tap on the track must still toggle).\n const dragProps = {\n onPointerDown: (event: PointerEvent<HTMLSpanElement>) => {\n if (event.button !== 0 || disabled || readOnly) return;\n const { pointerId } = event;\n const start = state.isSelected ? THUMB_ON_CENTER : THUMB_OFF_CENTER;\n const sign = getComputedStyle(event.currentTarget).direction === 'rtl' ? -1 : 1;\n const startX = event.clientX;\n let center: number | null = null;\n const move = (moveEvent: globalThis.PointerEvent) => {\n if (moveEvent.pointerId !== pointerId) return;\n const offset = (moveEvent.clientX - startX) * sign;\n if (center === null && Math.abs(offset) < DRAG_SLOP) return;\n center = Math.min(THUMB_ON_CENTER, Math.max(THUMB_OFF_CENTER, start + offset));\n setDragCenter(center);\n };\n const remove = () => {\n window.removeEventListener('pointermove', move);\n window.removeEventListener('pointerup', end);\n window.removeEventListener('pointercancel', end);\n stopDrag.current = null;\n };\n const end = (endEvent: globalThis.PointerEvent) => {\n if (endEvent.pointerId !== pointerId) return;\n remove();\n setDragCenter(null);\n if (center === null) return;\n if (endEvent.type !== 'pointerup') return;\n state.setSelected(isOnAt(center));\n setSkipToggle(true);\n setTimeout(() => setSkipToggle(false), 100);\n };\n stopDrag.current?.();\n stopDrag.current = remove;\n window.addEventListener('pointermove', move);\n window.addEventListener('pointerup', end);\n window.addEventListener('pointercancel', end);\n },\n };\n const { inputProps, labelProps, isSelected, isPressed } = useSwitch(options, state, domInputRef);\n const { focusProps, isFocusVisible } = useFocusRing();\n const { hoverProps, isHovered } = useHover({ isDisabled: disabled });\n\n const icon = isSelected\n ? (checkedIcon ?? (icons ? <CheckIcon /> : null))\n : (uncheckedIcon ?? (icons ? <CloseIcon /> : null));\n // Browsers toggle a checkbox input on Space only; M3 also toggles a switch on Enter.\n // Enter presses like Space does: the thumb grows on key down and the switch toggles on\n // key up.\n const [enterPressed, setEnterPressed] = useState(false);\n const enterProps = {\n onKeyDown: (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key !== 'Enter') return;\n event.preventDefault();\n if (event.repeat || disabled || readOnly) return;\n const control = event.currentTarget.closest<HTMLElement>('[data-selection-control]');\n if (control) restartRipple(control);\n setEnterPressed(true);\n },\n onKeyUp: (event: KeyboardEvent<HTMLInputElement>) => {\n if (event.key !== 'Enter' || !enterPressed) return;\n setEnterPressed(false);\n toggleState.toggle();\n },\n onBlur: () => setEnterPressed(false),\n };\n const dragging = dragCenter !== null;\n const pressed = (isPressed || enterPressed || dragging) && !disabled;\n const rippling = useRippleHold(pressed);\n const geometry = thumbGeometry(isSelected, pressed, Boolean(icon));\n const { size } = geometry;\n const center = dragCenter ?? geometry.center;\n const stateAttributes = {\n 'data-checked': isSelected || undefined,\n 'data-disabled': disabled || undefined,\n 'data-hovered': (isHovered && !disabled) || undefined,\n 'data-pressed': pressed || undefined,\n 'data-dragged': dragging || undefined,\n 'data-rippling': rippling || undefined,\n 'data-focus-visible': isFocusVisible || undefined,\n 'data-has-icon': Boolean(icon) || undefined,\n };\n const styles = switchStyles();\n // The track is the control; the switch's tokens name it as a part.\n const trackProps = { ...dragProps, 'data-slot': 'track' };\n\n return (\n <SelectionControl\n ref={ref}\n rootProps={mergeProps(labelProps, hoverProps)}\n inputProps={mergeProps(pickWidgetAria(rest), inputProps, focusProps, enterProps)}\n inputRef={domInputRef}\n rootData={{\n ...data,\n ...densityAttribute(density),\n 'data-tokens': mergeDataTokens('md-comp-switch', data),\n }}\n state={stateAttributes}\n styles={styles}\n className={className}\n classNames={classNames}\n style={style}\n controlProps={trackProps}\n controlStyle={\n {\n '--m3-thumb-size': `${size}px`,\n '--m3-thumb-center': `${center}px`,\n } as CSSProperties\n }\n indicator={\n <>\n <span\n aria-hidden=\"true\"\n {...stateAttributes}\n className={styles.stateLayer({ class: classNames?.stateLayer })}\n />\n <SwitchThumb\n styles={styles}\n icon={icon}\n className={classNames?.thumb}\n iconClassName={classNames?.icon}\n />\n </>\n }\n >\n {children}\n </SelectionControl>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;AAwHA,MAAM,YAAY;;AAGlB,MAAM,UAAU,WAAmB,SAAA;;;;;;;;;;;AAWnC,SAAgB,OAAO,EACrB,SACA,gBACA,iBACA,WAAW,OACX,UACA,UACA,SACA,QAAQ,OACR,aACA,eACA,SACA,WACA,YACA,OACA,KACA,UACA,UACA,GAAG,cACW;CAEd,MAAM,EAAE,MAAM,MAAM,SAAS,eAAe,YAAY,EAAE,SAAS,KAAK,CAAC;CACzE,MAAM,cAAc,aAAa,QAAQ;CACzC,MAAM,UAA2B;EAC/B,GAAG;EACH;EACA,YAAY;EACZ,iBAAiB;EACjB,UAAU;EACV,YAAY;EACZ,YAAY;EACZ,YAAY;EACZ,WAAW;CACb;CACA,MAAM,cAAc,eAAe,OAAO;CAK1C,MAAM,CAAC,YAAY,iBAAiB,SAAwB,IAAI;CAChE,MAAM,CAAC,YAAY,iBAAiB,SAAS,KAAK;CAClD,MAAM,QAAQ;EACZ,GAAG;EACH,cAAe,aAAa,cAAc,KAAK,IAAI,YAAY,OAAO;CACxE;CACA,MAAM,WAAW,OAA4B,IAAI;CACjD,sBAAsB,SAAS,UAAU,GAAG,CAAC,CAAC;CAG9C,MAAM,YAAY,EAChB,gBAAgB,UAAyC;EACvD,IAAI,MAAM,WAAW,KAAK,YAAY,UAAU;EAChD,MAAM,EAAE,cAAc;EACtB,MAAM,QAAQ,MAAM,aAAA,KAAA;EACpB,MAAM,OAAO,iBAAiB,MAAM,aAAa,CAAC,CAAC,cAAc,QAAQ,KAAK;EAC9E,MAAM,SAAS,MAAM;EACrB,IAAI,SAAwB;EAC5B,MAAM,QAAQ,cAAuC;GACnD,IAAI,UAAU,cAAc,WAAW;GACvC,MAAM,UAAU,UAAU,UAAU,UAAU;GAC9C,IAAI,WAAW,QAAQ,KAAK,IAAI,MAAM,IAAI,WAAW;GACrD,SAAS,KAAK,IAAA,IAAqB,KAAK,IAAA,IAAsB,QAAQ,MAAM,CAAC;GAC7E,cAAc,MAAM;EACtB;EACA,MAAM,eAAe;GACnB,OAAO,oBAAoB,eAAe,IAAI;GAC9C,OAAO,oBAAoB,aAAa,GAAG;GAC3C,OAAO,oBAAoB,iBAAiB,GAAG;GAC/C,SAAS,UAAU;EACrB;EACA,MAAM,OAAO,aAAsC;GACjD,IAAI,SAAS,cAAc,WAAW;GACtC,OAAO;GACP,cAAc,IAAI;GAClB,IAAI,WAAW,MAAM;GACrB,IAAI,SAAS,SAAS,aAAa;GACnC,MAAM,YAAY,OAAO,MAAM,CAAC;GAChC,cAAc,IAAI;GAClB,iBAAiB,cAAc,KAAK,GAAG,GAAG;EAC5C;EACA,SAAS,UAAU;EACnB,SAAS,UAAU;EACnB,OAAO,iBAAiB,eAAe,IAAI;EAC3C,OAAO,iBAAiB,aAAa,GAAG;EACxC,OAAO,iBAAiB,iBAAiB,GAAG;CAC9C,EACF;CACA,MAAM,EAAE,YAAY,YAAY,YAAY,cAAc,UAAU,SAAS,OAAO,WAAW;CAC/F,MAAM,EAAE,YAAY,mBAAmB,aAAa;CACpD,MAAM,EAAE,YAAY,cAAc,SAAS,EAAE,YAAY,SAAS,CAAC;CAEnE,MAAM,OAAO,aACR,gBAAgB,QAAQ,oBAAC,WAAD,CAAY,CAAA,IAAI,QACxC,kBAAkB,QAAQ,oBAAC,WAAD,CAAY,CAAA,IAAI;CAI/C,MAAM,CAAC,cAAc,mBAAmB,SAAS,KAAK;CACtD,MAAM,aAAa;EACjB,YAAY,UAA2C;GACrD,IAAI,MAAM,QAAQ,SAAS;GAC3B,MAAM,eAAe;GACrB,IAAI,MAAM,UAAU,YAAY,UAAU;GAC1C,MAAM,UAAU,MAAM,cAAc,QAAqB,0BAA0B;GACnF,IAAI,SAAS,cAAc,OAAO;GAClC,gBAAgB,IAAI;EACtB;EACA,UAAU,UAA2C;GACnD,IAAI,MAAM,QAAQ,WAAW,CAAC,cAAc;GAC5C,gBAAgB,KAAK;GACrB,YAAY,OAAO;EACrB;EACA,cAAc,gBAAgB,KAAK;CACrC;CACA,MAAM,WAAW,eAAe;CAChC,MAAM,WAAW,aAAa,gBAAgB,aAAa,CAAC;CAC5D,MAAM,WAAW,cAAc,OAAO;CACtC,MAAM,WAAW,cAAc,YAAY,SAAS,QAAQ,IAAI,CAAC;CACjE,MAAM,EAAE,SAAS;CACjB,MAAM,SAAS,cAAc,SAAS;CACtC,MAAM,kBAAkB;EACtB,gBAAgB,cAAc,KAAA;EAC9B,iBAAiB,YAAY,KAAA;EAC7B,gBAAiB,aAAa,CAAC,YAAa,KAAA;EAC5C,gBAAgB,WAAW,KAAA;EAC3B,gBAAgB,YAAY,KAAA;EAC5B,iBAAiB,YAAY,KAAA;EAC7B,sBAAsB,kBAAkB,KAAA;EACxC,iBAAiB,QAAQ,IAAI,KAAK,KAAA;CACpC;CACA,MAAM,SAAS,aAAa;CAE5B,MAAM,aAAa;EAAE,GAAG;EAAW,aAAa;CAAQ;CAExD,OACE,oBAAC,kBAAD;EACO;EACL,WAAW,WAAW,YAAY,UAAU;EAC5C,YAAY,WAAW,eAAe,IAAI,GAAG,YAAY,YAAY,UAAU;EAC/E,UAAU;EACV,UAAU;GACR,GAAG;GACH,GAAG,iBAAiB,OAAO;GAC3B,eAAe,gBAAgB,kBAAkB,IAAI;EACvD;EACA,OAAO;EACC;EACG;EACC;EACL;EACP,cAAc;EACd,cACE;GACE,mBAAmB,GAAG,KAAK;GAC3B,qBAAqB,GAAG,OAAO;EACjC;EAEF,WACE,qBAAA,YAAA,EAAA,UAAA,CACE,oBAAC,QAAD;GACE,eAAY;GACZ,GAAI;GACJ,WAAW,OAAO,WAAW,EAAE,OAAO,YAAY,WAAW,CAAC;EAC/D,CAAA,GACD,oBAAC,aAAD;GACU;GACF;GACN,WAAW,YAAY;GACvB,eAAe,YAAY;EAC5B,CAAA,CACD,EAAA,CAAA;EAGH;CACe,CAAA;AAEtB"}
@@ -0,0 +1,96 @@
1
+ import { VariantProps } from "../../utils/tv.js";
2
+ //#region src/components/switch/switch-styles.d.ts
3
+ /** Variant definitions for {@link Switch}. */
4
+ export declare const switchStyles: import("tailwind-variants").TVReturnType<{
5
+ [key: string]: {
6
+ [key: string]: import("tailwind-variants").ClassValue | {
7
+ control?: import("tailwind-variants").ClassValue;
8
+ icon?: import("tailwind-variants").ClassValue;
9
+ stateLayer?: import("tailwind-variants").ClassValue;
10
+ thumb?: import("tailwind-variants").ClassValue;
11
+ };
12
+ };
13
+ } | {
14
+ kind: {
15
+ circle: import("tailwind-variants").ClassValue | {
16
+ control?: import("tailwind-variants").ClassValue;
17
+ icon?: import("tailwind-variants").ClassValue;
18
+ stateLayer?: import("tailwind-variants").ClassValue;
19
+ thumb?: import("tailwind-variants").ClassValue;
20
+ };
21
+ track: import("tailwind-variants").ClassValue | {
22
+ control?: import("tailwind-variants").ClassValue;
23
+ icon?: import("tailwind-variants").ClassValue;
24
+ stateLayer?: import("tailwind-variants").ClassValue;
25
+ thumb?: import("tailwind-variants").ClassValue;
26
+ };
27
+ };
28
+ }, {
29
+ control: string[];
30
+ stateLayer: string[];
31
+ thumb: string[];
32
+ icon: string;
33
+ }, undefined, {
34
+ kind: {
35
+ circle: {
36
+ control: string[];
37
+ };
38
+ track: {
39
+ control: string;
40
+ label: string;
41
+ };
42
+ };
43
+ }, {
44
+ root: string[];
45
+ control: string;
46
+ label: string;
47
+ }, import("tailwind-variants").TVReturnType<{
48
+ kind: {
49
+ circle: {
50
+ control: string[];
51
+ };
52
+ track: {
53
+ control: string;
54
+ label: string;
55
+ };
56
+ };
57
+ }, {
58
+ root: string[];
59
+ control: string;
60
+ label: string;
61
+ }, undefined, {
62
+ kind: {
63
+ circle: {
64
+ control: string[];
65
+ };
66
+ track: {
67
+ control: string;
68
+ label: string;
69
+ };
70
+ };
71
+ }, {
72
+ root: string[];
73
+ control: string;
74
+ label: string;
75
+ }, import("tailwind-variants").TVReturnTypeLike<{
76
+ kind: {
77
+ circle: {
78
+ control: string[];
79
+ };
80
+ track: {
81
+ control: string;
82
+ label: string;
83
+ };
84
+ };
85
+ }, {
86
+ root: string[];
87
+ control: string;
88
+ label: string;
89
+ }>>>;
90
+ /**
91
+ * The variants of {@link switchStyles}, for building on its styles. They are the recipe's keys, not
92
+ * component props: their names (`hasIcon`, `isOpen`…) follow the classes and may change.
93
+ */
94
+ export type SwitchStyleProps = VariantProps<typeof switchStyles>;
95
+ //#endregion
96
+ //# sourceMappingURL=switch-styles.d.ts.map