@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,31 @@
1
+ import { ClassValue } from "clsx";
2
+ //#region src/utils/cn.d.ts
3
+ /**
4
+ * tailwind-merge extension for the M3 theme keys, derived from the token source so
5
+ * class merging can never drift from the generated CSS. Shared with tailwind-variants.
6
+ */
7
+ export declare const twMergeConfig: {
8
+ extend: {
9
+ theme: {
10
+ color: ("primary" | "on-primary" | "primary-container" | "on-primary-container" | "inverse-primary" | "primary-fixed" | "primary-fixed-dim" | "on-primary-fixed" | "on-primary-fixed-variant" | "secondary" | "on-secondary" | "secondary-container" | "on-secondary-container" | "secondary-fixed" | "secondary-fixed-dim" | "on-secondary-fixed" | "on-secondary-fixed-variant" | "tertiary" | "on-tertiary" | "tertiary-container" | "on-tertiary-container" | "tertiary-fixed" | "tertiary-fixed-dim" | "on-tertiary-fixed" | "on-tertiary-fixed-variant" | "error" | "on-error" | "error-container" | "on-error-container" | "background" | "on-background" | "surface" | "surface-dim" | "surface-bright" | "surface-container-lowest" | "surface-container-low" | "surface-container" | "surface-container-high" | "surface-container-highest" | "on-surface" | "surface-variant" | "on-surface-variant" | "inverse-surface" | "inverse-on-surface" | "outline" | "outline-variant" | "shadow" | "scrim" | "surface-tint" | "success" | "on-success" | "success-container" | "on-success-container" | "warning" | "on-warning" | "warning-container" | "on-warning-container")[];
11
+ text: ("display-large" | "display-medium" | "display-small" | "headline-large" | "headline-medium" | "headline-small" | "title-large" | "title-medium" | "title-small" | "body-large" | "body-medium" | "body-small" | "label-large" | "label-medium" | "label-small" | "display-large-emphasized" | "display-medium-emphasized" | "display-small-emphasized" | "headline-large-emphasized" | "headline-medium-emphasized" | "headline-small-emphasized" | "title-large-emphasized" | "title-medium-emphasized" | "title-small-emphasized" | "body-large-emphasized" | "body-medium-emphasized" | "body-small-emphasized" | "label-large-emphasized" | "label-medium-emphasized" | "label-small-emphasized")[];
12
+ radius: string[];
13
+ shadow: string[];
14
+ ease: string[];
15
+ breakpoint: ("medium" | "large" | "expanded" | "xlarge")[];
16
+ font: string[];
17
+ };
18
+ classGroups: {
19
+ duration: {
20
+ duration: string[];
21
+ }[];
22
+ };
23
+ };
24
+ };
25
+ /**
26
+ * Joins class names and resolves Tailwind conflicts, M3 tokens included.
27
+ * Later classes win, so a consumer's `className` always overrides the library's.
28
+ */
29
+ export declare function cn(...inputs: ClassValue[]): string;
30
+ //#endregion
31
+ //# sourceMappingURL=cn.d.ts.map
@@ -0,0 +1,37 @@
1
+ import { COLOR_ROLES } from "../tokens/color.js";
2
+ import { LEGACY_EASINGS, SPRING_TOKEN_NAMES } from "../tokens/motion.js";
3
+ import { BREAKPOINT_NAMES } from "../tokens/breakpoints.js";
4
+ import { ELEVATION_LEVEL_NAMES } from "../tokens/elevation.js";
5
+ import { CORNER_NAMES } from "../tokens/shape.js";
6
+ import { TYPE_ROLES } from "../tokens/typography.js";
7
+ import { clsx } from "clsx";
8
+ import { extendTailwindMerge } from "tailwind-merge";
9
+ //#region src/utils/cn.ts
10
+ /**
11
+ * tailwind-merge extension for the M3 theme keys, derived from the token source so
12
+ * class merging can never drift from the generated CSS. Shared with tailwind-variants.
13
+ */
14
+ const twMergeConfig = { extend: {
15
+ theme: {
16
+ color: [...COLOR_ROLES],
17
+ text: [...TYPE_ROLES],
18
+ radius: CORNER_NAMES.map((name) => `corner-${name}`),
19
+ shadow: ELEVATION_LEVEL_NAMES.map((level) => `elevation-${level}`),
20
+ ease: [...SPRING_TOKEN_NAMES.map((name) => `m3-${name}`), ...Object.keys(LEGACY_EASINGS).map((name) => `m3-${name}`)],
21
+ breakpoint: [...BREAKPOINT_NAMES],
22
+ font: ["brand", "plain"]
23
+ },
24
+ classGroups: { duration: [{ duration: SPRING_TOKEN_NAMES.map((name) => `m3-${name}`) }] }
25
+ } };
26
+ const twMerge = extendTailwindMerge(twMergeConfig);
27
+ /**
28
+ * Joins class names and resolves Tailwind conflicts, M3 tokens included.
29
+ * Later classes win, so a consumer's `className` always overrides the library's.
30
+ */
31
+ function cn(...inputs) {
32
+ return twMerge(clsx(inputs));
33
+ }
34
+ //#endregion
35
+ export { cn, twMergeConfig };
36
+
37
+ //# sourceMappingURL=cn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cn.js","names":[],"sources":["../../src/utils/cn.ts"],"sourcesContent":["import { clsx, type ClassValue } from 'clsx';\nimport { extendTailwindMerge, type ConfigExtension } from 'tailwind-merge';\nimport {\n BREAKPOINT_NAMES,\n COLOR_ROLES,\n CORNER_NAMES,\n ELEVATION_LEVEL_NAMES,\n LEGACY_EASINGS,\n SPRING_TOKEN_NAMES,\n TYPE_ROLES,\n} from '../tokens';\n\n/**\n * tailwind-merge extension for the M3 theme keys, derived from the token source so\n * class merging can never drift from the generated CSS. Shared with tailwind-variants.\n */\nexport const twMergeConfig = {\n extend: {\n theme: {\n color: [...COLOR_ROLES],\n text: [...TYPE_ROLES],\n radius: CORNER_NAMES.map((name) => `corner-${name}`),\n shadow: ELEVATION_LEVEL_NAMES.map((level) => `elevation-${level}`),\n ease: [\n ...SPRING_TOKEN_NAMES.map((name) => `m3-${name}`),\n ...Object.keys(LEGACY_EASINGS).map((name) => `m3-${name}`),\n ],\n breakpoint: [...BREAKPOINT_NAMES],\n font: ['brand', 'plain'],\n },\n classGroups: {\n duration: [{ duration: SPRING_TOKEN_NAMES.map((name) => `m3-${name}`) }],\n },\n },\n} satisfies ConfigExtension<string, string>;\n\nconst twMerge = extendTailwindMerge<string, string>(twMergeConfig);\n\n/**\n * Joins class names and resolves Tailwind conflicts, M3 tokens included.\n * Later classes win, so a consumer's `className` always overrides the library's.\n */\nexport function cn(...inputs: ClassValue[]): string {\n return twMerge(clsx(inputs));\n}\n"],"mappings":";;;;;;;;;;;;;AAgBA,MAAa,gBAAgB,EAC3B,QAAQ;CACN,OAAO;EACL,OAAO,CAAC,GAAG,WAAW;EACtB,MAAM,CAAC,GAAG,UAAU;EACpB,QAAQ,aAAa,KAAK,SAAS,UAAU,MAAM;EACnD,QAAQ,sBAAsB,KAAK,UAAU,aAAa,OAAO;EACjE,MAAM,CACJ,GAAG,mBAAmB,KAAK,SAAS,MAAM,MAAM,GAChD,GAAG,OAAO,KAAK,cAAc,CAAC,CAAC,KAAK,SAAS,MAAM,MAAM,CAC3D;EACA,YAAY,CAAC,GAAG,gBAAgB;EAChC,MAAM,CAAC,SAAS,OAAO;CACzB;CACA,aAAa,EACX,UAAU,CAAC,EAAE,UAAU,mBAAmB,KAAK,SAAS,MAAM,MAAM,EAAE,CAAC,EACzE;AACF,EACF;AAEA,MAAM,UAAU,oBAAoC,aAAa;;;;;AAMjE,SAAgB,GAAG,GAAG,QAA8B;CAClD,OAAO,QAAQ,KAAK,MAAM,CAAC;AAC7B"}
@@ -0,0 +1,32 @@
1
+ //#region src/utils/composite-keys.ts
2
+ /** Text entry keeps its arrow, Home and End keys for the caret (APG toolbar pattern). */
3
+ const TEXT_ENTRY = "textarea, [contenteditable]:not([contenteditable=\"false\"]), input:not([type=\"button\"], [type=\"checkbox\"], [type=\"radio\"], [type=\"submit\"], [type=\"reset\"], [type=\"image\"], [type=\"range\"], [type=\"color\"], [type=\"file\"])";
4
+ function isRtl(root) {
5
+ return getComputedStyle(root).direction === "rtl";
6
+ }
7
+ function moveFor(key, axes, rtl) {
8
+ const horizontal = axes !== "vertical";
9
+ const vertical = axes !== "horizontal";
10
+ switch (key) {
11
+ case "ArrowRight": return horizontal ? rtl ? -1 : 1 : null;
12
+ case "ArrowLeft": return horizontal ? rtl ? 1 : -1 : null;
13
+ case "ArrowDown": return vertical ? 1 : null;
14
+ case "ArrowUp": return vertical ? -1 : null;
15
+ case "Home": return "first";
16
+ case "End": return "last";
17
+ default: return null;
18
+ }
19
+ }
20
+ /** The item a move lands on, wrapping from one end to the other. */
21
+ function target(items, current, move) {
22
+ if (move === "first") return items[0];
23
+ if (move === "last") return items.at(-1);
24
+ return items[(current + move + items.length) % items.length];
25
+ }
26
+ function hasModifier(event) {
27
+ return event.altKey || event.ctrlKey || event.metaKey;
28
+ }
29
+ //#endregion
30
+ export { TEXT_ENTRY, hasModifier, isRtl, moveFor, target };
31
+
32
+ //# sourceMappingURL=composite-keys.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"composite-keys.js","names":[],"sources":["../../src/utils/composite-keys.ts"],"sourcesContent":["import type { KeyboardEvent } from 'react';\n\n/*\n * What the composite widgets' keyboard handlers share: which move a key asks for, where it\n * lands, and when to leave a key alone. The handlers live in `toolbar-keys.ts` and\n * `radio-group-keys.ts`, so each component loads only the pattern it uses.\n */\n\n/** The axis a composite widget's arrow keys move along. */\nexport type KeyOrientation = 'horizontal' | 'vertical';\n\n/** Text entry keeps its arrow, Home and End keys for the caret (APG toolbar pattern). */\nexport const TEXT_ENTRY =\n 'textarea, [contenteditable]:not([contenteditable=\"false\"]), input:not([type=\"button\"], [type=\"checkbox\"], [type=\"radio\"], [type=\"submit\"], [type=\"reset\"], [type=\"image\"], [type=\"range\"], [type=\"color\"], [type=\"file\"])';\n\nexport function isRtl(root: Element): boolean {\n return getComputedStyle(root).direction === 'rtl';\n}\n\n/** The move a key asks for: one step either way, or to an end. */\nexport type Move = 1 | -1 | 'first' | 'last';\n\nexport function moveFor(\n key: string,\n axes: 'horizontal' | 'vertical' | 'both',\n rtl: boolean,\n): Move | null {\n const horizontal = axes !== 'vertical';\n const vertical = axes !== 'horizontal';\n switch (key) {\n case 'ArrowRight':\n return horizontal ? (rtl ? -1 : 1) : null;\n case 'ArrowLeft':\n return horizontal ? (rtl ? 1 : -1) : null;\n case 'ArrowDown':\n return vertical ? 1 : null;\n case 'ArrowUp':\n return vertical ? -1 : null;\n case 'Home':\n return 'first';\n case 'End':\n return 'last';\n default:\n return null;\n }\n}\n\n/** The item a move lands on, wrapping from one end to the other. */\nexport function target<T>(items: T[], current: number, move: Move): T | undefined {\n if (move === 'first') return items[0];\n if (move === 'last') return items.at(-1);\n return items[(current + move + items.length) % items.length];\n}\n\nexport function hasModifier(event: KeyboardEvent) {\n return event.altKey || event.ctrlKey || event.metaKey;\n}\n"],"mappings":";;AAYA,MAAa,aACX;AAEF,SAAgB,MAAM,MAAwB;CAC5C,OAAO,iBAAiB,IAAI,CAAC,CAAC,cAAc;AAC9C;AAKA,SAAgB,QACd,KACA,MACA,KACa;CACb,MAAM,aAAa,SAAS;CAC5B,MAAM,WAAW,SAAS;CAC1B,QAAQ,KAAR;EACE,KAAK,cACH,OAAO,aAAc,MAAM,KAAK,IAAK;EACvC,KAAK,aACH,OAAO,aAAc,MAAM,IAAI,KAAM;EACvC,KAAK,aACH,OAAO,WAAW,IAAI;EACxB,KAAK,WACH,OAAO,WAAW,KAAK;EACzB,KAAK,QACH,OAAO;EACT,KAAK,OACH,OAAO;EACT,SACE,OAAO;CACX;AACF;;AAGA,SAAgB,OAAU,OAAY,SAAiB,MAA2B;CAChF,IAAI,SAAS,SAAS,OAAO,MAAM;CACnC,IAAI,SAAS,QAAQ,OAAO,MAAM,GAAG,EAAE;CACvC,OAAO,OAAO,UAAU,OAAO,MAAM,UAAU,MAAM;AACvD;AAEA,SAAgB,YAAY,OAAsB;CAChD,OAAO,MAAM,UAAU,MAAM,WAAW,MAAM;AAChD"}
@@ -0,0 +1,14 @@
1
+ //#region src/utils/focus-visible.ts
2
+ /**
3
+ * Whether keyboard focus (`:focus-visible`) is inside `root`. Scroll-hidden bars use it to
4
+ * stay on screen while a keyboard user is on one of their controls, without pinning them
5
+ * after a pointer click (which focuses a button but doesn't show its focus ring).
6
+ */
7
+ function hasVisibleFocusWithin(root) {
8
+ const active = root.ownerDocument.activeElement;
9
+ return active !== null && root.contains(active) && active.matches(":focus-visible");
10
+ }
11
+ //#endregion
12
+ export { hasVisibleFocusWithin };
13
+
14
+ //# sourceMappingURL=focus-visible.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"focus-visible.js","names":[],"sources":["../../src/utils/focus-visible.ts"],"sourcesContent":["/**\n * Whether keyboard focus (`:focus-visible`) is inside `root`. Scroll-hidden bars use it to\n * stay on screen while a keyboard user is on one of their controls, without pinning them\n * after a pointer click (which focuses a button but doesn't show its focus ring).\n */\nexport function hasVisibleFocusWithin(root: Element): boolean {\n const active = root.ownerDocument.activeElement;\n return active !== null && root.contains(active) && active.matches(':focus-visible');\n}\n"],"mappings":";;;;;;AAKA,SAAgB,sBAAsB,MAAwB;CAC5D,MAAM,SAAS,KAAK,cAAc;CAClC,OAAO,WAAW,QAAQ,KAAK,SAAS,MAAM,KAAK,OAAO,QAAQ,gBAAgB;AACpF"}
@@ -0,0 +1,51 @@
1
+ //#region src/utils/focus.ts
2
+ const TABBABLE = [
3
+ "a[href]",
4
+ "area[href]",
5
+ "button",
6
+ "input:not([type=\"hidden\"])",
7
+ "select",
8
+ "textarea",
9
+ "iframe",
10
+ "summary",
11
+ "[contenteditable]:not([contenteditable=\"false\"])",
12
+ "[tabindex]"
13
+ ].join(",");
14
+ /**
15
+ * Whether an element is rendered: not under `display: none` (a responsive `hidden` class,
16
+ * say) or `content-visibility: hidden`. Environments without `checkVisibility` (jsdom)
17
+ * count every element as rendered.
18
+ */
19
+ function isRendered(el) {
20
+ return !("checkVisibility" in el) || el.checkVisibility();
21
+ }
22
+ /**
23
+ * The elements inside `root` that Tab would reach, in document order: focusable, not
24
+ * disabled, not `tabindex="-1"`, not in an `inert` or `hidden` subtree, and rendered. `skip`
25
+ * leaves out elements the caller doesn't want. (React Aria's tree walker isn't part of its
26
+ * public API.)
27
+ */
28
+ function tabbables(root, skip) {
29
+ return [...root.querySelectorAll(TABBABLE)].filter((el) => el.tabIndex >= 0 && !el.matches(":disabled") && !el.closest("[inert], [hidden]") && isRendered(el) && !skip?.(el));
30
+ }
31
+ /** The first of {@link tabbables}, or null when there's none. */
32
+ function firstTabbable(root, skip) {
33
+ return tabbables(root, skip)[0] ?? null;
34
+ }
35
+ /**
36
+ * Moves initial focus from a dialog's panel to its first interactive element (M3: "focus
37
+ * should automatically land on the first interactive element"). React Aria's `useDialog`
38
+ * focuses the panel itself unless something inside took focus (`autoFocus`), so this only
39
+ * acts while the panel holds focus. A scrolling region marked `data-scrollable` is
40
+ * focusable for the keyboard but isn't a control, so it's skipped. `pick` can hand focus to
41
+ * another element in place of that first one (a dialog's least destructive action).
42
+ */
43
+ function focusFirstInteractive(panel, pick = (first) => first) {
44
+ if (!panel || panel.ownerDocument.activeElement !== panel) return;
45
+ const first = firstTabbable(panel, (el) => el.hasAttribute("data-scrollable"));
46
+ if (first) pick(first).focus();
47
+ }
48
+ //#endregion
49
+ export { firstTabbable, focusFirstInteractive, tabbables };
50
+
51
+ //# sourceMappingURL=focus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"focus.js","names":[],"sources":["../../src/utils/focus.ts"],"sourcesContent":["const TABBABLE = [\n 'a[href]',\n 'area[href]',\n 'button',\n 'input:not([type=\"hidden\"])',\n 'select',\n 'textarea',\n 'iframe',\n 'summary',\n '[contenteditable]:not([contenteditable=\"false\"])',\n '[tabindex]',\n].join(',');\n\n/**\n * Whether an element is rendered: not under `display: none` (a responsive `hidden` class,\n * say) or `content-visibility: hidden`. Environments without `checkVisibility` (jsdom)\n * count every element as rendered.\n */\nfunction isRendered(el: HTMLElement): boolean {\n return !('checkVisibility' in el) || el.checkVisibility();\n}\n\n/**\n * The elements inside `root` that Tab would reach, in document order: focusable, not\n * disabled, not `tabindex=\"-1\"`, not in an `inert` or `hidden` subtree, and rendered. `skip`\n * leaves out elements the caller doesn't want. (React Aria's tree walker isn't part of its\n * public API.)\n */\nexport function tabbables(root: Element, skip?: (el: HTMLElement) => boolean): HTMLElement[] {\n return [...root.querySelectorAll<HTMLElement>(TABBABLE)].filter(\n (el) =>\n el.tabIndex >= 0 &&\n !el.matches(':disabled') &&\n !el.closest('[inert], [hidden]') &&\n isRendered(el) &&\n !skip?.(el),\n );\n}\n\n/** The first of {@link tabbables}, or null when there's none. */\nexport function firstTabbable(\n root: Element,\n skip?: (el: HTMLElement) => boolean,\n): HTMLElement | null {\n return tabbables(root, skip)[0] ?? null;\n}\n\n/**\n * Moves initial focus from a dialog's panel to its first interactive element (M3: \"focus\n * should automatically land on the first interactive element\"). React Aria's `useDialog`\n * focuses the panel itself unless something inside took focus (`autoFocus`), so this only\n * acts while the panel holds focus. A scrolling region marked `data-scrollable` is\n * focusable for the keyboard but isn't a control, so it's skipped. `pick` can hand focus to\n * another element in place of that first one (a dialog's least destructive action).\n */\nexport function focusFirstInteractive(\n panel: HTMLElement | null,\n pick: (first: HTMLElement) => HTMLElement = (first) => first,\n) {\n if (!panel || panel.ownerDocument.activeElement !== panel) return;\n const first = firstTabbable(panel, (el) => el.hasAttribute('data-scrollable'));\n if (first) pick(first).focus();\n}\n"],"mappings":";AAAA,MAAM,WAAW;CACf;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC,CAAC,KAAK,GAAG;;;;;;AAOV,SAAS,WAAW,IAA0B;CAC5C,OAAO,EAAE,qBAAqB,OAAO,GAAG,gBAAgB;AAC1D;;;;;;;AAQA,SAAgB,UAAU,MAAe,MAAoD;CAC3F,OAAO,CAAC,GAAG,KAAK,iBAA8B,QAAQ,CAAC,CAAC,CAAC,QACtD,OACC,GAAG,YAAY,KACf,CAAC,GAAG,QAAQ,WAAW,KACvB,CAAC,GAAG,QAAQ,mBAAmB,KAC/B,WAAW,EAAE,KACb,CAAC,OAAO,EAAE,CACd;AACF;;AAGA,SAAgB,cACd,MACA,MACoB;CACpB,OAAO,UAAU,MAAM,IAAI,CAAC,CAAC,MAAM;AACrC;;;;;;;;;AAUA,SAAgB,sBACd,OACA,QAA6C,UAAU,OACvD;CACA,IAAI,CAAC,SAAS,MAAM,cAAc,kBAAkB,OAAO;CAC3D,MAAM,QAAQ,cAAc,QAAQ,OAAO,GAAG,aAAa,iBAAiB,CAAC;CAC7E,IAAI,OAAO,KAAK,KAAK,CAAC,CAAC,MAAM;AAC/B"}
@@ -0,0 +1,12 @@
1
+ //#region src/utils/focusable-disabled.ts
2
+ /**
3
+ * Disabled items stay focusable but can't be chosen, as WAI-ARIA APG's "Focusability of disabled
4
+ * controls" asks for options, menu items and tabs, so screen reader users find them (M3 menus:
5
+ * "Disabled menu items can receive focus but aren't selectable"). React Stately reads it from
6
+ * the state options, though not every state hook's types list it.
7
+ */
8
+ const FOCUSABLE_DISABLED_OPTIONS = { disabledBehavior: "selection" };
9
+ //#endregion
10
+ export { FOCUSABLE_DISABLED_OPTIONS };
11
+
12
+ //# sourceMappingURL=focusable-disabled.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"focusable-disabled.js","names":[],"sources":["../../src/utils/focusable-disabled.ts"],"sourcesContent":["/**\n * Disabled items stay focusable but can't be chosen, as WAI-ARIA APG's \"Focusability of disabled\n * controls\" asks for options, menu items and tabs, so screen reader users find them (M3 menus:\n * \"Disabled menu items can receive focus but aren't selectable\"). React Stately reads it from\n * the state options, though not every state hook's types list it.\n */\nexport const FOCUSABLE_DISABLED_OPTIONS = { disabledBehavior: 'selection' as const };\n"],"mappings":";;;;;;;AAMA,MAAa,6BAA6B,EAAE,kBAAkB,YAAqB"}
@@ -0,0 +1,60 @@
1
+ import { SyntheticEvent } from "react";
2
+ //#region src/utils/keep-pressed-in-place.d.ts
3
+ /** The container's event handlers {@link useKeepPressedInPlace} returns. */
4
+ export interface KeepPressedInPlaceResult {
5
+ /**
6
+ * Notes the pressed element: the container's `onPointerDownCapture` and `onKeyDownCapture`,
7
+ * and its `onClickCapture` for a virtual click (`event.detail === 0`).
8
+ */
9
+ capture: (event: SyntheticEvent) => void;
10
+ /**
11
+ * Forgets a press that changed nothing, by the next task: the container's
12
+ * `onPointerUpCapture`, `onKeyUpCapture` and `onClickCapture`.
13
+ */
14
+ release: () => void;
15
+ }
16
+ /**
17
+ * Keeps the element a person pressed where it was on screen while the content above it changes
18
+ * size because of that press. When a press opens one item while an open item above it folds
19
+ * (a one-at-a-time tree or accordion), the pressed element would otherwise slide up by the
20
+ * folded height, off the window when the fold starts above it; with this hook its scroller
21
+ * scrolls by the folded height on every frame instead, so nothing moves out from under the
22
+ * person. The core `List` uses it for its tree grid (2026-10-17).
23
+ *
24
+ * **When to use it:** in a container of your own whose items open and fold in response to a
25
+ * press, where an item above the pressed one can fold (or grow) at the same time. Pair it with
26
+ * `overflow-anchor: none` on the folding parts: the browser's scroll anchoring then holds the
27
+ * pressed element on its own whenever it is the first thing showing below them, and this hook
28
+ * covers the rest (the anchor the browser picks above it, such as the folding item's own header
29
+ * or content above the container) and browsers without scroll anchoring.
30
+ *
31
+ * **Wiring:** put `capture` on the container as `onPointerDownCapture` and `onKeyDownCapture`,
32
+ * and `release` as `onPointerUpCapture` and `onKeyUpCapture`. A virtual click (assistive tech,
33
+ * `event.detail === 0`) presses with no pointer or key down before it, so `onClickCapture`
34
+ * calls `capture` for it, then `release` for every click.
35
+ *
36
+ * **What it notes:** on a pointer down, a key down or a virtual click, the element `selector`
37
+ * finds from the event's target (`closest`), its top on screen, its scroller (the nearest
38
+ * scrolling ancestor, else the page) and the scroller's position. A press outside `selector`
39
+ * clears it.
40
+ *
41
+ * **When it acts:** when `version` next changes (any value that changes whenever the content
42
+ * the press changed does, such as the open keys or the rows shown): in a layout effect, before
43
+ * the change paints, it scrolls by however far the element moved, which covers a change with no
44
+ * motion (reduced motion); then again on every animation frame while `settling` is true (the
45
+ * folding parts are still moving), and once more after.
46
+ *
47
+ * **When it lets go:** on the next wheel, touch, pointer down or key down anywhere (the person
48
+ * is scrolling or acting again), when `settling` turns false, when the element leaves the page,
49
+ * or on unmount. It ignores a press after which the scroller moved before the change (the
50
+ * person scrolled), and forgets a press that changed nothing by the next task, so it never holds
51
+ * a later, unrelated change.
52
+ *
53
+ * @param selector A CSS selector for the pressable items (`'[role=row]'`).
54
+ * @param version Changes whenever the content changes.
55
+ * @param settling Whether the content is still moving after the change (parts still folding).
56
+ * @returns `capture` and `release`, the container's event handlers.
57
+ */
58
+ export declare function useKeepPressedInPlace(selector: string, version: unknown, settling: boolean): KeepPressedInPlaceResult;
59
+ //#endregion
60
+ //# sourceMappingURL=keep-pressed-in-place.d.ts.map
@@ -0,0 +1,127 @@
1
+ "use client";
2
+ import { useCallback, useEffect, useLayoutEffect, useRef } from "react";
3
+ //#region src/utils/keep-pressed-in-place.ts
4
+ /** The element that scrolls `element`: its nearest scrolling ancestor, else the page. */
5
+ function scrollerOf(element) {
6
+ for (let node = element.parentElement; node; node = node.parentElement) {
7
+ const { overflowY } = getComputedStyle(node);
8
+ if (/auto|scroll|overlay/.test(overflowY) && node.scrollHeight > node.clientHeight) return node;
9
+ }
10
+ return document.scrollingElement ?? document.documentElement;
11
+ }
12
+ /** Inputs that mean the reader is scrolling or acting again, so the hold lets go. */
13
+ const RELEASE_EVENTS = [
14
+ "wheel",
15
+ "touchstart",
16
+ "pointerdown",
17
+ "keydown"
18
+ ];
19
+ /**
20
+ * Keeps the element a person pressed where it was on screen while the content above it changes
21
+ * size because of that press. When a press opens one item while an open item above it folds
22
+ * (a one-at-a-time tree or accordion), the pressed element would otherwise slide up by the
23
+ * folded height, off the window when the fold starts above it; with this hook its scroller
24
+ * scrolls by the folded height on every frame instead, so nothing moves out from under the
25
+ * person. The core `List` uses it for its tree grid (2026-10-17).
26
+ *
27
+ * **When to use it:** in a container of your own whose items open and fold in response to a
28
+ * press, where an item above the pressed one can fold (or grow) at the same time. Pair it with
29
+ * `overflow-anchor: none` on the folding parts: the browser's scroll anchoring then holds the
30
+ * pressed element on its own whenever it is the first thing showing below them, and this hook
31
+ * covers the rest (the anchor the browser picks above it, such as the folding item's own header
32
+ * or content above the container) and browsers without scroll anchoring.
33
+ *
34
+ * **Wiring:** put `capture` on the container as `onPointerDownCapture` and `onKeyDownCapture`,
35
+ * and `release` as `onPointerUpCapture` and `onKeyUpCapture`. A virtual click (assistive tech,
36
+ * `event.detail === 0`) presses with no pointer or key down before it, so `onClickCapture`
37
+ * calls `capture` for it, then `release` for every click.
38
+ *
39
+ * **What it notes:** on a pointer down, a key down or a virtual click, the element `selector`
40
+ * finds from the event's target (`closest`), its top on screen, its scroller (the nearest
41
+ * scrolling ancestor, else the page) and the scroller's position. A press outside `selector`
42
+ * clears it.
43
+ *
44
+ * **When it acts:** when `version` next changes (any value that changes whenever the content
45
+ * the press changed does, such as the open keys or the rows shown): in a layout effect, before
46
+ * the change paints, it scrolls by however far the element moved, which covers a change with no
47
+ * motion (reduced motion); then again on every animation frame while `settling` is true (the
48
+ * folding parts are still moving), and once more after.
49
+ *
50
+ * **When it lets go:** on the next wheel, touch, pointer down or key down anywhere (the person
51
+ * is scrolling or acting again), when `settling` turns false, when the element leaves the page,
52
+ * or on unmount. It ignores a press after which the scroller moved before the change (the
53
+ * person scrolled), and forgets a press that changed nothing by the next task, so it never holds
54
+ * a later, unrelated change.
55
+ *
56
+ * @param selector A CSS selector for the pressable items (`'[role=row]'`).
57
+ * @param version Changes whenever the content changes.
58
+ * @param settling Whether the content is still moving after the change (parts still folding).
59
+ * @returns `capture` and `release`, the container's event handlers.
60
+ */
61
+ function useKeepPressedInPlace(selector, version, settling) {
62
+ const pressed = useRef(null);
63
+ const settlingRef = useRef(settling);
64
+ settlingRef.current = settling;
65
+ const stopHold = useRef(null);
66
+ const capture = useCallback((event) => {
67
+ const element = event.target.closest?.(selector);
68
+ if (!element) {
69
+ pressed.current = null;
70
+ return;
71
+ }
72
+ const scroller = scrollerOf(element);
73
+ pressed.current = {
74
+ element,
75
+ top: element.getBoundingClientRect().top,
76
+ scroller,
77
+ scrollTop: scroller.scrollTop
78
+ };
79
+ }, [selector]);
80
+ const release = useCallback(() => {
81
+ const current = pressed.current;
82
+ setTimeout(() => {
83
+ if (pressed.current === current) pressed.current = null;
84
+ });
85
+ }, []);
86
+ useLayoutEffect(() => {
87
+ const press = pressed.current;
88
+ if (!press) return;
89
+ pressed.current = null;
90
+ const { element, top, scroller } = press;
91
+ if (scroller.scrollTop !== press.scrollTop) return;
92
+ stopHold.current?.();
93
+ let frame = 0;
94
+ const view = scroller.ownerDocument.defaultView;
95
+ const stop = () => {
96
+ cancelAnimationFrame(frame);
97
+ for (const type of RELEASE_EVENTS) view.removeEventListener(type, stop, true);
98
+ if (stopHold.current === stop) stopHold.current = null;
99
+ };
100
+ const keep = () => {
101
+ if (!element.isConnected) return stop();
102
+ const delta = element.getBoundingClientRect().top - top;
103
+ if (Math.abs(delta) >= .5) scroller.scrollTo({
104
+ top: scroller.scrollTop + delta,
105
+ behavior: "instant"
106
+ });
107
+ };
108
+ keep();
109
+ const tick = () => {
110
+ keep();
111
+ if (settlingRef.current) frame = requestAnimationFrame(tick);
112
+ else stop();
113
+ };
114
+ frame = requestAnimationFrame(tick);
115
+ for (const type of RELEASE_EVENTS) view.addEventListener(type, stop, true);
116
+ stopHold.current = stop;
117
+ }, [version]);
118
+ useEffect(() => () => stopHold.current?.(), []);
119
+ return {
120
+ capture,
121
+ release
122
+ };
123
+ }
124
+ //#endregion
125
+ export { useKeepPressedInPlace };
126
+
127
+ //# sourceMappingURL=keep-pressed-in-place.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"keep-pressed-in-place.js","names":[],"sources":["../../src/utils/keep-pressed-in-place.ts"],"sourcesContent":["'use client';\n\nimport { useCallback, useEffect, useLayoutEffect, useRef, type SyntheticEvent } from 'react';\n\n/** The element that scrolls `element`: its nearest scrolling ancestor, else the page. */\nfunction scrollerOf(element: Element): Element {\n for (let node = element.parentElement; node; node = node.parentElement) {\n const { overflowY } = getComputedStyle(node);\n if (/auto|scroll|overlay/.test(overflowY) && node.scrollHeight > node.clientHeight) {\n return node;\n }\n }\n return document.scrollingElement ?? document.documentElement;\n}\n\ninterface Pressed {\n element: Element;\n /** Its viewport top when it was pressed. */\n top: number;\n scroller: Element;\n /** The scroller's position then: if it has scrolled since, the press is stale. */\n scrollTop: number;\n}\n\n/** Inputs that mean the reader is scrolling or acting again, so the hold lets go. */\nconst RELEASE_EVENTS = ['wheel', 'touchstart', 'pointerdown', 'keydown'] as const;\n\n/** The container's event handlers {@link useKeepPressedInPlace} returns. */\nexport interface KeepPressedInPlaceResult {\n /**\n * Notes the pressed element: the container's `onPointerDownCapture` and `onKeyDownCapture`,\n * and its `onClickCapture` for a virtual click (`event.detail === 0`).\n */\n capture: (event: SyntheticEvent) => void;\n /**\n * Forgets a press that changed nothing, by the next task: the container's\n * `onPointerUpCapture`, `onKeyUpCapture` and `onClickCapture`.\n */\n release: () => void;\n}\n\n/**\n * Keeps the element a person pressed where it was on screen while the content above it changes\n * size because of that press. When a press opens one item while an open item above it folds\n * (a one-at-a-time tree or accordion), the pressed element would otherwise slide up by the\n * folded height, off the window when the fold starts above it; with this hook its scroller\n * scrolls by the folded height on every frame instead, so nothing moves out from under the\n * person. The core `List` uses it for its tree grid (2026-10-17).\n *\n * **When to use it:** in a container of your own whose items open and fold in response to a\n * press, where an item above the pressed one can fold (or grow) at the same time. Pair it with\n * `overflow-anchor: none` on the folding parts: the browser's scroll anchoring then holds the\n * pressed element on its own whenever it is the first thing showing below them, and this hook\n * covers the rest (the anchor the browser picks above it, such as the folding item's own header\n * or content above the container) and browsers without scroll anchoring.\n *\n * **Wiring:** put `capture` on the container as `onPointerDownCapture` and `onKeyDownCapture`,\n * and `release` as `onPointerUpCapture` and `onKeyUpCapture`. A virtual click (assistive tech,\n * `event.detail === 0`) presses with no pointer or key down before it, so `onClickCapture`\n * calls `capture` for it, then `release` for every click.\n *\n * **What it notes:** on a pointer down, a key down or a virtual click, the element `selector`\n * finds from the event's target (`closest`), its top on screen, its scroller (the nearest\n * scrolling ancestor, else the page) and the scroller's position. A press outside `selector`\n * clears it.\n *\n * **When it acts:** when `version` next changes (any value that changes whenever the content\n * the press changed does, such as the open keys or the rows shown): in a layout effect, before\n * the change paints, it scrolls by however far the element moved, which covers a change with no\n * motion (reduced motion); then again on every animation frame while `settling` is true (the\n * folding parts are still moving), and once more after.\n *\n * **When it lets go:** on the next wheel, touch, pointer down or key down anywhere (the person\n * is scrolling or acting again), when `settling` turns false, when the element leaves the page,\n * or on unmount. It ignores a press after which the scroller moved before the change (the\n * person scrolled), and forgets a press that changed nothing by the next task, so it never holds\n * a later, unrelated change.\n *\n * @param selector A CSS selector for the pressable items (`'[role=row]'`).\n * @param version Changes whenever the content changes.\n * @param settling Whether the content is still moving after the change (parts still folding).\n * @returns `capture` and `release`, the container's event handlers.\n */\nexport function useKeepPressedInPlace(\n selector: string,\n version: unknown,\n settling: boolean,\n): KeepPressedInPlaceResult {\n const pressed = useRef<Pressed | null>(null);\n const settlingRef = useRef(settling);\n settlingRef.current = settling;\n const stopHold = useRef<(() => void) | null>(null);\n\n const capture = useCallback(\n (event: SyntheticEvent) => {\n const element = (event.target as Element).closest?.(selector);\n if (!element) {\n pressed.current = null;\n return;\n }\n const scroller = scrollerOf(element);\n pressed.current = {\n element,\n top: element.getBoundingClientRect().top,\n scroller,\n scrollTop: scroller.scrollTop,\n };\n },\n [selector],\n );\n\n // A press's change commits before the next task, so a press that changed nothing is\n // forgotten then and never holds a later, unrelated change.\n const release = useCallback(() => {\n const current = pressed.current;\n setTimeout(() => {\n if (pressed.current === current) pressed.current = null;\n });\n }, []);\n\n useLayoutEffect(() => {\n const press = pressed.current;\n if (!press) return;\n pressed.current = null;\n const { element, top, scroller } = press;\n if (scroller.scrollTop !== press.scrollTop) return;\n stopHold.current?.();\n\n let frame = 0;\n const view = scroller.ownerDocument.defaultView!;\n const stop = () => {\n cancelAnimationFrame(frame);\n for (const type of RELEASE_EVENTS) view.removeEventListener(type, stop, true);\n if (stopHold.current === stop) stopHold.current = null;\n };\n const keep = () => {\n if (!element.isConnected) return stop();\n const delta = element.getBoundingClientRect().top - top;\n if (Math.abs(delta) >= 0.5) {\n scroller.scrollTo({ top: scroller.scrollTop + delta, behavior: 'instant' });\n }\n };\n // Before this commit paints (a change with no motion moves things at once), then on\n // every frame while the content settles, and once more after.\n keep();\n const tick = () => {\n keep();\n if (settlingRef.current) frame = requestAnimationFrame(tick);\n else stop();\n };\n frame = requestAnimationFrame(tick);\n for (const type of RELEASE_EVENTS) view.addEventListener(type, stop, true);\n stopHold.current = stop;\n }, [version]);\n\n useEffect(() => () => stopHold.current?.(), []);\n\n return { capture, release };\n}\n"],"mappings":";;;;AAKA,SAAS,WAAW,SAA2B;CAC7C,KAAK,IAAI,OAAO,QAAQ,eAAe,MAAM,OAAO,KAAK,eAAe;EACtE,MAAM,EAAE,cAAc,iBAAiB,IAAI;EAC3C,IAAI,sBAAsB,KAAK,SAAS,KAAK,KAAK,eAAe,KAAK,cACpE,OAAO;CAEX;CACA,OAAO,SAAS,oBAAoB,SAAS;AAC/C;;AAYA,MAAM,iBAAiB;CAAC;CAAS;CAAc;CAAe;AAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0DvE,SAAgB,sBACd,UACA,SACA,UAC0B;CAC1B,MAAM,UAAU,OAAuB,IAAI;CAC3C,MAAM,cAAc,OAAO,QAAQ;CACnC,YAAY,UAAU;CACtB,MAAM,WAAW,OAA4B,IAAI;CAEjD,MAAM,UAAU,aACb,UAA0B;EACzB,MAAM,UAAW,MAAM,OAAmB,UAAU,QAAQ;EAC5D,IAAI,CAAC,SAAS;GACZ,QAAQ,UAAU;GAClB;EACF;EACA,MAAM,WAAW,WAAW,OAAO;EACnC,QAAQ,UAAU;GAChB;GACA,KAAK,QAAQ,sBAAsB,CAAC,CAAC;GACrC;GACA,WAAW,SAAS;EACtB;CACF,GACA,CAAC,QAAQ,CACX;CAIA,MAAM,UAAU,kBAAkB;EAChC,MAAM,UAAU,QAAQ;EACxB,iBAAiB;GACf,IAAI,QAAQ,YAAY,SAAS,QAAQ,UAAU;EACrD,CAAC;CACH,GAAG,CAAC,CAAC;CAEL,sBAAsB;EACpB,MAAM,QAAQ,QAAQ;EACtB,IAAI,CAAC,OAAO;EACZ,QAAQ,UAAU;EAClB,MAAM,EAAE,SAAS,KAAK,aAAa;EACnC,IAAI,SAAS,cAAc,MAAM,WAAW;EAC5C,SAAS,UAAU;EAEnB,IAAI,QAAQ;EACZ,MAAM,OAAO,SAAS,cAAc;EACpC,MAAM,aAAa;GACjB,qBAAqB,KAAK;GAC1B,KAAK,MAAM,QAAQ,gBAAgB,KAAK,oBAAoB,MAAM,MAAM,IAAI;GAC5E,IAAI,SAAS,YAAY,MAAM,SAAS,UAAU;EACpD;EACA,MAAM,aAAa;GACjB,IAAI,CAAC,QAAQ,aAAa,OAAO,KAAK;GACtC,MAAM,QAAQ,QAAQ,sBAAsB,CAAC,CAAC,MAAM;GACpD,IAAI,KAAK,IAAI,KAAK,KAAK,IACrB,SAAS,SAAS;IAAE,KAAK,SAAS,YAAY;IAAO,UAAU;GAAU,CAAC;EAE9E;EAGA,KAAK;EACL,MAAM,aAAa;GACjB,KAAK;GACL,IAAI,YAAY,SAAS,QAAQ,sBAAsB,IAAI;QACtD,KAAK;EACZ;EACA,QAAQ,sBAAsB,IAAI;EAClC,KAAK,MAAM,QAAQ,gBAAgB,KAAK,iBAAiB,MAAM,MAAM,IAAI;EACzE,SAAS,UAAU;CACrB,GAAG,CAAC,OAAO,CAAC;CAEZ,sBAAsB,SAAS,UAAU,GAAG,CAAC,CAAC;CAE9C,OAAO;EAAE;EAAS;CAAQ;AAC5B"}
@@ -0,0 +1,111 @@
1
+ import { useEffect, useState } from "react";
2
+ import { jsx } from "react/jsx-runtime";
3
+ //#region src/utils/load-on-demand.tsx
4
+ /**
5
+ * Loads a component on demand, for parts a component shows only sometimes (a tooltip on
6
+ * hover, a loading indicator while loading), so it doesn't carry their code up front.
7
+ *
8
+ * Unlike `React.lazy` it never suspends: once the module is in, the component renders in the
9
+ * same pass, and on first use it renders as soon as the module arrives. A `Suspense` boundary
10
+ * would hold back content that resolves after its fallback showed (React throttles those
11
+ * reveals by up to 300ms), so a part preloaded on hover would still show late.
12
+ */
13
+ function onDemand(load) {
14
+ let loaded;
15
+ let pending;
16
+ const preload = () => {
17
+ pending ??= load().then((component) => loaded = component, (error) => {
18
+ pending = void 0;
19
+ throw error;
20
+ });
21
+ return pending;
22
+ };
23
+ function Component(props) {
24
+ const [, setArrived] = useState(false);
25
+ useEffect(() => {
26
+ if (loaded) return;
27
+ let mounted = true;
28
+ preload().then(() => mounted && setArrived(true), () => void 0);
29
+ return () => {
30
+ mounted = false;
31
+ };
32
+ }, []);
33
+ const Loaded = loaded;
34
+ return Loaded ? /* @__PURE__ */ jsx(Loaded, { ...props }) : null;
35
+ }
36
+ return {
37
+ preload,
38
+ Component
39
+ };
40
+ }
41
+ /** How long after mounting a browser without `requestIdleCallback` waits before preloading. */
42
+ const IDLE_FALLBACK_DELAY = 1e3;
43
+ const idleQueue = /* @__PURE__ */ new Set();
44
+ let cancelIdle;
45
+ function whenIdle(run) {
46
+ if (typeof window.requestIdleCallback === "function") {
47
+ const handle = window.requestIdleCallback(run);
48
+ return () => window.cancelIdleCallback(handle);
49
+ }
50
+ const handle = window.setTimeout(run, IDLE_FALLBACK_DELAY);
51
+ return () => window.clearTimeout(handle);
52
+ }
53
+ function runIdlePreloads() {
54
+ cancelIdle = void 0;
55
+ const preloads = new Set([...idleQueue].map((entry) => entry.preload));
56
+ idleQueue.clear();
57
+ for (const preload of preloads) preload().catch(() => void 0);
58
+ }
59
+ /** Whether the user asked to save data, where the browser tells. */
60
+ function savesData() {
61
+ const { connection } = navigator;
62
+ return connection?.saveData === true;
63
+ }
64
+ /**
65
+ * Calls `preload` in the browser's first idle period after mount (or `IDLE_FALLBACK_DELAY`
66
+ * later without `requestIdleCallback`), while `enabled`, so the part is usually in before it
67
+ * first shows. One callback serves every mounted part. Never on the server, nor when the user
68
+ * asked to save data.
69
+ */
70
+ function usePreloadWhenIdle(preload, enabled) {
71
+ useEffect(() => {
72
+ if (!enabled || savesData()) return;
73
+ const entry = { preload };
74
+ idleQueue.add(entry);
75
+ cancelIdle ??= whenIdle(runIdlePreloads);
76
+ return () => {
77
+ idleQueue.delete(entry);
78
+ if (idleQueue.size === 0 && cancelIdle) {
79
+ cancelIdle();
80
+ cancelIdle = void 0;
81
+ }
82
+ };
83
+ }, [preload, enabled]);
84
+ }
85
+ /**
86
+ * Calls `preload` when the pointer moves over `ref`'s element or focus enters it, while
87
+ * `enabled`: the moments a part shown on hover or focus becomes likely. It also preloads when
88
+ * the browser is idle (`usePreloadWhenIdle`).
89
+ */
90
+ function usePreloadOnIntent(ref, preload, enabled) {
91
+ usePreloadWhenIdle(preload, enabled);
92
+ useEffect(() => {
93
+ const element = ref.current;
94
+ if (!enabled || !element) return;
95
+ const onIntent = () => void preload().catch(() => void 0);
96
+ element.addEventListener("pointerover", onIntent);
97
+ element.addEventListener("focusin", onIntent);
98
+ return () => {
99
+ element.removeEventListener("pointerover", onIntent);
100
+ element.removeEventListener("focusin", onIntent);
101
+ };
102
+ }, [
103
+ ref,
104
+ preload,
105
+ enabled
106
+ ]);
107
+ }
108
+ //#endregion
109
+ export { IDLE_FALLBACK_DELAY, onDemand, usePreloadOnIntent, usePreloadWhenIdle };
110
+
111
+ //# sourceMappingURL=load-on-demand.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load-on-demand.js","names":[],"sources":["../../src/utils/load-on-demand.tsx"],"sourcesContent":["import { useEffect, useState, type ComponentType, type RefObject } from 'react';\n\n/** A component whose module loads the first time it renders, or ahead of that. */\nexport interface OnDemandComponent<P extends object> {\n /**\n * Starts loading the module, once; later calls return the same promise. A failed load (say,\n * a dropped connection) is tried again on the next call.\n */\n preload: () => Promise<ComponentType<P>>;\n /**\n * Renders the component once its module has loaded, and nothing until then; mounting it\n * starts the load. A failed load renders nothing and is tried again on the next mount or\n * `preload`.\n */\n Component: ComponentType<P>;\n}\n\n/**\n * Loads a component on demand, for parts a component shows only sometimes (a tooltip on\n * hover, a loading indicator while loading), so it doesn't carry their code up front.\n *\n * Unlike `React.lazy` it never suspends: once the module is in, the component renders in the\n * same pass, and on first use it renders as soon as the module arrives. A `Suspense` boundary\n * would hold back content that resolves after its fallback showed (React throttles those\n * reveals by up to 300ms), so a part preloaded on hover would still show late.\n */\nexport function onDemand<P extends object>(\n load: () => Promise<ComponentType<P>>,\n): OnDemandComponent<P> {\n let loaded: ComponentType<P> | undefined;\n let pending: Promise<ComponentType<P>> | undefined;\n\n const preload = () => {\n pending ??= load().then(\n (component) => (loaded = component),\n (error: unknown) => {\n pending = undefined;\n throw error;\n },\n );\n return pending;\n };\n\n function Component(props: P) {\n // Re-renders once the module arrives; `loaded` holds the component.\n const [, setArrived] = useState(false);\n useEffect(() => {\n if (loaded) return;\n let mounted = true;\n preload().then(\n () => mounted && setArrived(true),\n () => undefined,\n );\n return () => {\n mounted = false;\n };\n }, []);\n const Loaded = loaded;\n return Loaded ? <Loaded {...props} /> : null;\n }\n\n return { preload, Component };\n}\n\n/** How long after mounting a browser without `requestIdleCallback` waits before preloading. */\nexport const IDLE_FALLBACK_DELAY = 1000;\n\n/** A mounted part waiting for the browser's next idle period, with the preload it wants. */\ninterface IdleEntry {\n preload: () => Promise<unknown>;\n}\n\nconst idleQueue = new Set<IdleEntry>();\nlet cancelIdle: (() => void) | undefined;\n\nfunction whenIdle(run: () => void): () => void {\n if (typeof window.requestIdleCallback === 'function') {\n const handle = window.requestIdleCallback(run);\n return () => window.cancelIdleCallback(handle);\n }\n const handle = window.setTimeout(run, IDLE_FALLBACK_DELAY);\n return () => window.clearTimeout(handle);\n}\n\nfunction runIdlePreloads() {\n cancelIdle = undefined;\n const preloads = new Set([...idleQueue].map((entry) => entry.preload));\n idleQueue.clear();\n // A failed preload is left to the hover, focus or render that needs the part.\n for (const preload of preloads) void preload().catch(() => undefined);\n}\n\n/** Whether the user asked to save data, where the browser tells. */\nfunction savesData() {\n const { connection } = navigator as Navigator & { connection?: { saveData?: boolean } };\n return connection?.saveData === true;\n}\n\n/**\n * Calls `preload` in the browser's first idle period after mount (or `IDLE_FALLBACK_DELAY`\n * later without `requestIdleCallback`), while `enabled`, so the part is usually in before it\n * first shows. One callback serves every mounted part. Never on the server, nor when the user\n * asked to save data.\n */\nexport function usePreloadWhenIdle(preload: () => Promise<unknown>, enabled: boolean) {\n useEffect(() => {\n if (!enabled || savesData()) return;\n const entry: IdleEntry = { preload };\n idleQueue.add(entry);\n cancelIdle ??= whenIdle(runIdlePreloads);\n return () => {\n idleQueue.delete(entry);\n if (idleQueue.size === 0 && cancelIdle) {\n cancelIdle();\n cancelIdle = undefined;\n }\n };\n }, [preload, enabled]);\n}\n\n/**\n * Calls `preload` when the pointer moves over `ref`'s element or focus enters it, while\n * `enabled`: the moments a part shown on hover or focus becomes likely. It also preloads when\n * the browser is idle (`usePreloadWhenIdle`).\n */\nexport function usePreloadOnIntent(\n ref: RefObject<HTMLElement | null>,\n preload: () => Promise<unknown>,\n enabled: boolean,\n) {\n usePreloadWhenIdle(preload, enabled);\n useEffect(() => {\n const element = ref.current;\n if (!enabled || !element) return;\n // A failed preload is left to the render that needs the part, which loads again.\n const onIntent = () => void preload().catch(() => undefined);\n element.addEventListener('pointerover', onIntent);\n element.addEventListener('focusin', onIntent);\n return () => {\n element.removeEventListener('pointerover', onIntent);\n element.removeEventListener('focusin', onIntent);\n };\n }, [ref, preload, enabled]);\n}\n"],"mappings":";;;;;;;;;;;;AA0BA,SAAgB,SACd,MACsB;CACtB,IAAI;CACJ,IAAI;CAEJ,MAAM,gBAAgB;EACpB,YAAY,KAAK,CAAC,CAAC,MAChB,cAAe,SAAS,YACxB,UAAmB;GAClB,UAAU,KAAA;GACV,MAAM;EACR,CACF;EACA,OAAO;CACT;CAEA,SAAS,UAAU,OAAU;EAE3B,MAAM,GAAG,cAAc,SAAS,KAAK;EACrC,gBAAgB;GACd,IAAI,QAAQ;GACZ,IAAI,UAAU;GACd,QAAQ,CAAC,CAAC,WACF,WAAW,WAAW,IAAI,SAC1B,KAAA,CACR;GACA,aAAa;IACX,UAAU;GACZ;EACF,GAAG,CAAC,CAAC;EACL,MAAM,SAAS;EACf,OAAO,SAAS,oBAAC,QAAD,EAAQ,GAAI,MAAQ,CAAA,IAAI;CAC1C;CAEA,OAAO;EAAE;EAAS;CAAU;AAC9B;;AAGA,MAAa,sBAAsB;AAOnC,MAAM,4BAAY,IAAI,IAAe;AACrC,IAAI;AAEJ,SAAS,SAAS,KAA6B;CAC7C,IAAI,OAAO,OAAO,wBAAwB,YAAY;EACpD,MAAM,SAAS,OAAO,oBAAoB,GAAG;EAC7C,aAAa,OAAO,mBAAmB,MAAM;CAC/C;CACA,MAAM,SAAS,OAAO,WAAW,KAAK,mBAAmB;CACzD,aAAa,OAAO,aAAa,MAAM;AACzC;AAEA,SAAS,kBAAkB;CACzB,aAAa,KAAA;CACb,MAAM,WAAW,IAAI,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC,KAAK,UAAU,MAAM,OAAO,CAAC;CACrE,UAAU,MAAM;CAEhB,KAAK,MAAM,WAAW,UAAU,QAAa,CAAC,CAAC,YAAY,KAAA,CAAS;AACtE;;AAGA,SAAS,YAAY;CACnB,MAAM,EAAE,eAAe;CACvB,OAAO,YAAY,aAAa;AAClC;;;;;;;AAQA,SAAgB,mBAAmB,SAAiC,SAAkB;CACpF,gBAAgB;EACd,IAAI,CAAC,WAAW,UAAU,GAAG;EAC7B,MAAM,QAAmB,EAAE,QAAQ;EACnC,UAAU,IAAI,KAAK;EACnB,eAAe,SAAS,eAAe;EACvC,aAAa;GACX,UAAU,OAAO,KAAK;GACtB,IAAI,UAAU,SAAS,KAAK,YAAY;IACtC,WAAW;IACX,aAAa,KAAA;GACf;EACF;CACF,GAAG,CAAC,SAAS,OAAO,CAAC;AACvB;;;;;;AAOA,SAAgB,mBACd,KACA,SACA,SACA;CACA,mBAAmB,SAAS,OAAO;CACnC,gBAAgB;EACd,MAAM,UAAU,IAAI;EACpB,IAAI,CAAC,WAAW,CAAC,SAAS;EAE1B,MAAM,iBAAiB,KAAK,QAAQ,CAAC,CAAC,YAAY,KAAA,CAAS;EAC3D,QAAQ,iBAAiB,eAAe,QAAQ;EAChD,QAAQ,iBAAiB,WAAW,QAAQ;EAC5C,aAAa;GACX,QAAQ,oBAAoB,eAAe,QAAQ;GACnD,QAAQ,oBAAoB,WAAW,QAAQ;EACjD;CACF,GAAG;EAAC;EAAK;EAAS;CAAO,CAAC;AAC5B"}
@@ -0,0 +1,9 @@
1
+ //#region src/utils/merge-data-tokens.d.ts
2
+ /**
3
+ * A component's own `data-tokens` set followed by the sets an app passed in
4
+ * `props['data-tokens']`, each once (`"md-comp-assist-chip app-reaction"`). Token rules match
5
+ * with `~=`, so the root keeps the component's styles and takes the app's.
6
+ */
7
+ export declare function mergeDataTokens(own: string, props?: object | null): string;
8
+ //#endregion
9
+ //# sourceMappingURL=merge-data-tokens.d.ts.map
@@ -0,0 +1,15 @@
1
+ //#region src/utils/merge-data-tokens.ts
2
+ /**
3
+ * A component's own `data-tokens` set followed by the sets an app passed in
4
+ * `props['data-tokens']`, each once (`"md-comp-assist-chip app-reaction"`). Token rules match
5
+ * with `~=`, so the root keeps the component's styles and takes the app's.
6
+ */
7
+ function mergeDataTokens(own, props) {
8
+ const incoming = props?.["data-tokens"];
9
+ if (typeof incoming !== "string") return own;
10
+ return [...new Set(`${own} ${incoming}`.split(/\s+/).filter(Boolean))].join(" ");
11
+ }
12
+ //#endregion
13
+ export { mergeDataTokens };
14
+
15
+ //# sourceMappingURL=merge-data-tokens.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"merge-data-tokens.js","names":[],"sources":["../../src/utils/merge-data-tokens.ts"],"sourcesContent":["/**\n * A component's own `data-tokens` set followed by the sets an app passed in\n * `props['data-tokens']`, each once (`\"md-comp-assist-chip app-reaction\"`). Token rules match\n * with `~=`, so the root keeps the component's styles and takes the app's.\n */\nexport function mergeDataTokens(own: string, props?: object | null): string {\n const incoming = (props as { 'data-tokens'?: unknown } | null | undefined)?.['data-tokens'];\n if (typeof incoming !== 'string') return own;\n return [...new Set(`${own} ${incoming}`.split(/\\s+/).filter(Boolean))].join(' ');\n}\n"],"mappings":";;;;;;AAKA,SAAgB,gBAAgB,KAAa,OAA+B;CAC1E,MAAM,WAAY,QAA2D;CAC7E,IAAI,OAAO,aAAa,UAAU,OAAO;CACzC,OAAO,CAAC,GAAG,IAAI,IAAI,GAAG,IAAI,GAAG,WAAW,MAAM,KAAK,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG;AACjF"}
@@ -0,0 +1,53 @@
1
+ "use client";
2
+ import { useEffect, useLayoutEffect, useRef, useState } from "react";
3
+ //#region src/utils/natural-size.ts
4
+ /**
5
+ * Measures an element's natural length on one axis (its used `width` or `height`, in
6
+ * fractional px and untouched by transforms, as a scaled-down hidden FAB is), again whenever
7
+ * it resizes, so a wrapper can animate its own width or height between 0 and that length.
8
+ * A length in px lets a spring's overshoot show, which a `0fr ↔ 1fr` grid track can't (it
9
+ * never passes its content's size). The element must keep its natural size while the
10
+ * wrapper is closed (`w-max` / `h-max`, or `shrink-0`). The size is `undefined` until
11
+ * measured (and on the server), so the wrapper can fall back to its natural size.
12
+ *
13
+ * `resized` is true for one frame after the content itself changed size (a web font
14
+ * arriving, new text): the wrapper should follow it at once (`data-resized`, no
15
+ * transition), as a grid track would, instead of springing to it.
16
+ */
17
+ function useNaturalSize(axis = "width", enabled = true) {
18
+ const ref = useRef(null);
19
+ const [size, setSize] = useState();
20
+ const [resized, setResized] = useState(false);
21
+ useLayoutEffect(() => {
22
+ const element = ref.current;
23
+ if (!enabled || !element) return;
24
+ let measured;
25
+ const measure = () => {
26
+ const used = parseFloat(getComputedStyle(element)[axis]);
27
+ const next = Number.isNaN(used) ? void 0 : used;
28
+ if (next === measured) return;
29
+ if (measured !== void 0) setResized(true);
30
+ measured = next;
31
+ setSize(next);
32
+ };
33
+ measure();
34
+ if (typeof ResizeObserver === "undefined") return;
35
+ const observer = new ResizeObserver(measure);
36
+ observer.observe(element);
37
+ return () => observer.disconnect();
38
+ }, [axis, enabled]);
39
+ useEffect(() => {
40
+ if (!resized) return;
41
+ const frame = requestAnimationFrame(() => setResized(false));
42
+ return () => cancelAnimationFrame(frame);
43
+ }, [resized, size]);
44
+ return [
45
+ ref,
46
+ size,
47
+ resized
48
+ ];
49
+ }
50
+ //#endregion
51
+ export { useNaturalSize };
52
+
53
+ //# sourceMappingURL=natural-size.js.map