@windmorph/react 0.0.0-stage → 0.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (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,72 @@
1
+ import { BuiltInThemeName, ColorMode, ContrastLevel } from "../tokens/color.js";
2
+ import { Density } from "../tokens/density.js";
3
+ import { MotionScheme } from "../tokens/motion.js";
4
+ import { ThemeDefinition } from "./create-theme.js";
5
+ import { ThemeStorage } from "./state.js";
6
+ import { ReactNode } from "react";
7
+ //#region src/theme/ThemeProvider.d.ts
8
+ export interface ThemeProviderProps {
9
+ children?: ReactNode;
10
+ /**
11
+ * Themes available to `setTheme`: built-in names and/or `createTheme()` results.
12
+ * Defaults to all six built-in themes.
13
+ */
14
+ themes?: ReadonlyArray<BuiltInThemeName | ThemeDefinition>;
15
+ /** Controlled colour theme. */
16
+ theme?: string;
17
+ /** Initial colour theme when uncontrolled. @default "baseline" */
18
+ defaultTheme?: string;
19
+ /** Called with the new colour theme when it changes. */
20
+ onThemeChange?: (theme: string) => void;
21
+ /** Controlled colour mode. */
22
+ mode?: ColorMode;
23
+ /** Initial colour mode when uncontrolled. @default "system" */
24
+ defaultMode?: ColorMode;
25
+ /** Called with the new colour mode when it changes. */
26
+ onModeChange?: (mode: ColorMode) => void;
27
+ /** Controlled contrast level. */
28
+ contrast?: ContrastLevel;
29
+ /** Initial contrast level when uncontrolled. @default "standard" */
30
+ defaultContrast?: ContrastLevel;
31
+ /** Called with the new contrast level when it changes. */
32
+ onContrastChange?: (contrast: ContrastLevel) => void;
33
+ /** Controlled motion scheme. */
34
+ motion?: MotionScheme;
35
+ /** Initial motion scheme when uncontrolled. @default "expressive" */
36
+ defaultMotion?: MotionScheme;
37
+ /** Called with the new motion scheme when it changes. */
38
+ onMotionChange?: (motion: MotionScheme) => void;
39
+ /**
40
+ * Controlled web density, `0` to `-3`: each step takes 4px off the height of fields, menus
41
+ * and other dense-capable components. M3 asks for density to be the reader's choice, not a
42
+ * default, so offer it as a setting; keep the control that changes it at 48px or more.
43
+ */
44
+ density?: Density;
45
+ /** Initial web density when uncontrolled. @default 0 */
46
+ defaultDensity?: Density;
47
+ /** Called with the new density when it changes. */
48
+ onDensityChange?: (density: Density) => void;
49
+ /**
50
+ * Where the selection is remembered. Use `"cookie"` (default) with
51
+ * `getThemeFromCookies` or `ThemeScript` for flash-free server rendering. Nothing is written
52
+ * until the selection changes from the one the page loaded with, so a visitor who never
53
+ * picks a setting gets no cookie.
54
+ * @default "cookie"
55
+ */
56
+ storage?: ThemeStorage;
57
+ /** Cookie or localStorage key. @default "windmorph-theme" */
58
+ storageKey?: string;
59
+ /**
60
+ * Whether the theme attributes are written to `<html>`. Set to `false` when you
61
+ * render them yourself or theme a subtree with `ThemeScope` instead.
62
+ * @default true
63
+ */
64
+ applyToDocument?: boolean;
65
+ }
66
+ /**
67
+ * Provides the colour theme, mode, contrast level, motion scheme and density to the app,
68
+ * mirrors them as `data-*` attributes on `<html>` and remembers the selection.
69
+ */
70
+ export declare function ThemeProvider({ children, themes: themeList, theme: themeProp, defaultTheme, onThemeChange, mode: modeProp, defaultMode, onModeChange, contrast: contrastProp, defaultContrast, onContrastChange, motion: motionProp, defaultMotion, onMotionChange, density: densityProp, defaultDensity, onDensityChange, storage, storageKey, applyToDocument }: ThemeProviderProps): import("react").JSX.Element;
71
+ //#endregion
72
+ //# sourceMappingURL=ThemeProvider.d.ts.map
@@ -0,0 +1,144 @@
1
+ "use client";
2
+ import { BUILT_IN_THEME_NAMES } from "../tokens/color.js";
3
+ import { DEFAULT_STORAGE_KEY, DEFAULT_THEME_STATE, parseThemeState, serializeThemeState, themeAttributes } from "./state.js";
4
+ import { DocumentThemeContext, InheritedThemeContext, ThemeContext, ThemeScopeContext } from "./context.js";
5
+ import { readStoredTheme, writeStoredTheme } from "./storage.js";
6
+ import { useCallback, useEffect, useLayoutEffect, useMemo, useRef, useState, useSyncExternalStore } from "react";
7
+ import { jsx, jsxs } from "react/jsx-runtime";
8
+ //#region src/theme/ThemeProvider.tsx
9
+ const DARK_QUERY = "(prefers-color-scheme: dark)";
10
+ function subscribeToColorScheme(onChange) {
11
+ const query = window.matchMedia(DARK_QUERY);
12
+ query.addEventListener("change", onChange);
13
+ return () => query.removeEventListener("change", onChange);
14
+ }
15
+ const getSystemMode = () => window.matchMedia(DARK_QUERY).matches ? "dark" : "light";
16
+ const subscribeToNothing = () => () => {};
17
+ /** Re-reads localStorage when another tab changes the theme. Cookies have no change event. */
18
+ function subscribeToStorage(storage, key, onChange) {
19
+ if (storage !== "local-storage") return () => {};
20
+ const listener = (event) => {
21
+ if (event.key === key) onChange();
22
+ };
23
+ window.addEventListener("storage", listener);
24
+ return () => window.removeEventListener("storage", listener);
25
+ }
26
+ /**
27
+ * One theme dimension: the controlled prop wins, then the user's choice in this
28
+ * session, then the stored selection, then the default.
29
+ */
30
+ function useThemeValue(controlled, stored, defaultValue, onChange) {
31
+ const [selected, setSelected] = useState(void 0);
32
+ const value = controlled ?? selected ?? stored ?? defaultValue;
33
+ return [value, useCallback((next) => {
34
+ if (controlled === void 0) setSelected(next);
35
+ if (next !== value) onChange?.(next);
36
+ }, [
37
+ controlled,
38
+ value,
39
+ onChange
40
+ ])];
41
+ }
42
+ /**
43
+ * Provides the colour theme, mode, contrast level, motion scheme and density to the app,
44
+ * mirrors them as `data-*` attributes on `<html>` and remembers the selection.
45
+ */
46
+ function ThemeProvider({ children, themes: themeList, theme: themeProp, defaultTheme = DEFAULT_THEME_STATE.theme, onThemeChange, mode: modeProp, defaultMode = DEFAULT_THEME_STATE.mode, onModeChange, contrast: contrastProp, defaultContrast = DEFAULT_THEME_STATE.contrast, onContrastChange, motion: motionProp, defaultMotion = DEFAULT_THEME_STATE.motion, onMotionChange, density: densityProp, defaultDensity = DEFAULT_THEME_STATE.density, onDensityChange, storage = "cookie", storageKey = DEFAULT_STORAGE_KEY, applyToDocument = true }) {
47
+ const definitions = useMemo(() => (themeList ?? []).filter((entry) => typeof entry !== "string"), [themeList]);
48
+ const themeNames = useMemo(() => themeList ? themeList.map((entry) => typeof entry === "string" ? entry : entry.name) : BUILT_IN_THEME_NAMES, [themeList]);
49
+ const storedRaw = useSyncExternalStore(useCallback((onChange) => subscribeToStorage(storage, storageKey, onChange), [storage, storageKey]), () => readStoredTheme(storage, storageKey), () => null);
50
+ const isHydrated = useSyncExternalStore(subscribeToNothing, () => true, () => false);
51
+ const stored = useMemo(() => parseThemeState(storedRaw, themeNames), [storedRaw, themeNames]);
52
+ const [theme, setThemeState] = useThemeValue(themeProp, stored.theme, defaultTheme, onThemeChange);
53
+ const [mode, setMode] = useThemeValue(modeProp, stored.mode, defaultMode, onModeChange);
54
+ const [contrast, setContrast] = useThemeValue(contrastProp, stored.contrast, defaultContrast, onContrastChange);
55
+ const [motion, setMotion] = useThemeValue(motionProp, stored.motion, defaultMotion, onMotionChange);
56
+ const [density, setDensity] = useThemeValue(densityProp, stored.density, defaultDensity, onDensityChange);
57
+ const state = useMemo(() => ({
58
+ theme,
59
+ mode,
60
+ contrast,
61
+ motion,
62
+ density
63
+ }), [
64
+ theme,
65
+ mode,
66
+ contrast,
67
+ motion,
68
+ density
69
+ ]);
70
+ const documentTheme = applyToDocument ? state : null;
71
+ useLayoutEffect(() => {
72
+ if (!isHydrated || !applyToDocument) return;
73
+ const root = document.documentElement;
74
+ for (const [name, value] of Object.entries(themeAttributes(state))) root.setAttribute(name, value);
75
+ }, [
76
+ isHydrated,
77
+ applyToDocument,
78
+ state
79
+ ]);
80
+ const loaded = useRef(null);
81
+ const changed = useRef(false);
82
+ useEffect(() => {
83
+ if (!isHydrated || storage === "none") return;
84
+ const serialized = serializeThemeState(state);
85
+ loaded.current ??= serialized;
86
+ if (!changed.current && serialized === loaded.current) return;
87
+ changed.current = true;
88
+ writeStoredTheme(storage, storageKey, state);
89
+ }, [
90
+ isHydrated,
91
+ storage,
92
+ storageKey,
93
+ state
94
+ ]);
95
+ const systemMode = useSyncExternalStore(subscribeToColorScheme, getSystemMode, () => "light");
96
+ const resolvedMode = mode === "system" ? systemMode : mode;
97
+ const setTheme = useCallback((next) => {
98
+ if (!themeNames.includes(next)) {
99
+ if (process.env.NODE_ENV !== "production") console.warn(`[@windmorph/react] setTheme("${next}") ignored: not one of ${themeNames.join(", ")}.`);
100
+ return;
101
+ }
102
+ setThemeState(next);
103
+ }, [themeNames, setThemeState]);
104
+ const value = useMemo(() => ({
105
+ ...state,
106
+ resolvedMode,
107
+ themes: themeNames,
108
+ setTheme,
109
+ setMode,
110
+ setContrast,
111
+ setMotion,
112
+ setDensity
113
+ }), [
114
+ state,
115
+ resolvedMode,
116
+ themeNames,
117
+ setTheme,
118
+ setMode,
119
+ setContrast,
120
+ setMotion,
121
+ setDensity
122
+ ]);
123
+ return /* @__PURE__ */ jsx(ThemeContext, {
124
+ value,
125
+ children: /* @__PURE__ */ jsx(ThemeScopeContext, {
126
+ value: state,
127
+ children: /* @__PURE__ */ jsx(DocumentThemeContext, {
128
+ value: documentTheme,
129
+ children: /* @__PURE__ */ jsxs(InheritedThemeContext, {
130
+ value: documentTheme,
131
+ children: [definitions.map((definition) => /* @__PURE__ */ jsx("style", {
132
+ href: `windmorph-theme-${definition.name}`,
133
+ precedence: "windmorph",
134
+ children: definition.css
135
+ }, definition.name)), children]
136
+ })
137
+ })
138
+ })
139
+ });
140
+ }
141
+ //#endregion
142
+ export { ThemeProvider };
143
+
144
+ //# sourceMappingURL=ThemeProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThemeProvider.js","names":[],"sources":["../../src/theme/ThemeProvider.tsx"],"sourcesContent":["'use client';\n\nimport {\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n useSyncExternalStore,\n type ReactNode,\n} from 'react';\nimport {\n BUILT_IN_THEME_NAMES,\n type BuiltInThemeName,\n type ColorMode,\n type ContrastLevel,\n type ResolvedColorMode,\n} from '../tokens/color';\nimport type { Density } from '../tokens/density';\nimport type { MotionScheme } from '../tokens/motion';\nimport {\n DocumentThemeContext,\n InheritedThemeContext,\n ThemeContext,\n ThemeScopeContext,\n type ThemeContextValue,\n} from './context';\nimport type { ThemeDefinition } from './create-theme';\nimport {\n DEFAULT_STORAGE_KEY,\n DEFAULT_THEME_STATE,\n parseThemeState,\n serializeThemeState,\n themeAttributes,\n type ThemeState,\n type ThemeStorage,\n} from './state';\nimport { readStoredTheme, writeStoredTheme } from './storage';\n\nexport interface ThemeProviderProps {\n children?: ReactNode;\n /**\n * Themes available to `setTheme`: built-in names and/or `createTheme()` results.\n * Defaults to all six built-in themes.\n */\n themes?: ReadonlyArray<BuiltInThemeName | ThemeDefinition>;\n /** Controlled colour theme. */\n theme?: string;\n /** Initial colour theme when uncontrolled. @default \"baseline\" */\n defaultTheme?: string;\n /** Called with the new colour theme when it changes. */\n onThemeChange?: (theme: string) => void;\n /** Controlled colour mode. */\n mode?: ColorMode;\n /** Initial colour mode when uncontrolled. @default \"system\" */\n defaultMode?: ColorMode;\n /** Called with the new colour mode when it changes. */\n onModeChange?: (mode: ColorMode) => void;\n /** Controlled contrast level. */\n contrast?: ContrastLevel;\n /** Initial contrast level when uncontrolled. @default \"standard\" */\n defaultContrast?: ContrastLevel;\n /** Called with the new contrast level when it changes. */\n onContrastChange?: (contrast: ContrastLevel) => void;\n /** Controlled motion scheme. */\n motion?: MotionScheme;\n /** Initial motion scheme when uncontrolled. @default \"expressive\" */\n defaultMotion?: MotionScheme;\n /** Called with the new motion scheme when it changes. */\n onMotionChange?: (motion: MotionScheme) => void;\n /**\n * Controlled web density, `0` to `-3`: each step takes 4px off the height of fields, menus\n * and other dense-capable components. M3 asks for density to be the reader's choice, not a\n * default, so offer it as a setting; keep the control that changes it at 48px or more.\n */\n density?: Density;\n /** Initial web density when uncontrolled. @default 0 */\n defaultDensity?: Density;\n /** Called with the new density when it changes. */\n onDensityChange?: (density: Density) => void;\n /**\n * Where the selection is remembered. Use `\"cookie\"` (default) with\n * `getThemeFromCookies` or `ThemeScript` for flash-free server rendering. Nothing is written\n * until the selection changes from the one the page loaded with, so a visitor who never\n * picks a setting gets no cookie.\n * @default \"cookie\"\n */\n storage?: ThemeStorage;\n /** Cookie or localStorage key. @default \"windmorph-theme\" */\n storageKey?: string;\n /**\n * Whether the theme attributes are written to `<html>`. Set to `false` when you\n * render them yourself or theme a subtree with `ThemeScope` instead.\n * @default true\n */\n applyToDocument?: boolean;\n}\n\nconst DARK_QUERY = '(prefers-color-scheme: dark)';\n\nfunction subscribeToColorScheme(onChange: () => void) {\n const query = window.matchMedia(DARK_QUERY);\n query.addEventListener('change', onChange);\n return () => query.removeEventListener('change', onChange);\n}\n\nconst getSystemMode = (): ResolvedColorMode =>\n window.matchMedia(DARK_QUERY).matches ? 'dark' : 'light';\n\nconst subscribeToNothing = () => () => {};\n\n/** Re-reads localStorage when another tab changes the theme. Cookies have no change event. */\nfunction subscribeToStorage(storage: ThemeStorage, key: string, onChange: () => void) {\n if (storage !== 'local-storage') return () => {};\n const listener = (event: StorageEvent) => {\n if (event.key === key) onChange();\n };\n window.addEventListener('storage', listener);\n return () => window.removeEventListener('storage', listener);\n}\n\n/**\n * One theme dimension: the controlled prop wins, then the user's choice in this\n * session, then the stored selection, then the default.\n */\nfunction useThemeValue<T extends string | number>(\n controlled: T | undefined,\n stored: T | undefined,\n defaultValue: T,\n onChange: ((value: T) => void) | undefined,\n) {\n const [selected, setSelected] = useState<T | undefined>(undefined);\n const value = controlled ?? selected ?? stored ?? defaultValue;\n const setValue = useCallback(\n (next: T) => {\n if (controlled === undefined) setSelected(next);\n if (next !== value) onChange?.(next);\n },\n [controlled, value, onChange],\n );\n return [value, setValue] as const;\n}\n\n/**\n * Provides the colour theme, mode, contrast level, motion scheme and density to the app,\n * mirrors them as `data-*` attributes on `<html>` and remembers the selection.\n */\nexport function ThemeProvider({\n children,\n themes: themeList,\n theme: themeProp,\n defaultTheme = DEFAULT_THEME_STATE.theme,\n onThemeChange,\n mode: modeProp,\n defaultMode = DEFAULT_THEME_STATE.mode,\n onModeChange,\n contrast: contrastProp,\n defaultContrast = DEFAULT_THEME_STATE.contrast,\n onContrastChange,\n motion: motionProp,\n defaultMotion = DEFAULT_THEME_STATE.motion,\n onMotionChange,\n density: densityProp,\n defaultDensity = DEFAULT_THEME_STATE.density,\n onDensityChange,\n storage = 'cookie',\n storageKey = DEFAULT_STORAGE_KEY,\n applyToDocument = true,\n}: ThemeProviderProps) {\n const definitions = useMemo(\n () => (themeList ?? []).filter((entry): entry is ThemeDefinition => typeof entry !== 'string'),\n [themeList],\n );\n const themeNames = useMemo(\n () =>\n themeList\n ? themeList.map((entry) => (typeof entry === 'string' ? entry : entry.name))\n : BUILT_IN_THEME_NAMES,\n [themeList],\n );\n\n // The stored selection is external data that only exists in the browser. Reading it\n // through useSyncExternalStore renders the server snapshot during hydration and then\n // the stored value, without a hydration mismatch. `isHydrated` flips in the same pass.\n const storedRaw = useSyncExternalStore(\n useCallback(\n (onChange: () => void) => subscribeToStorage(storage, storageKey, onChange),\n [storage, storageKey],\n ),\n () => readStoredTheme(storage, storageKey),\n () => null,\n );\n const isHydrated = useSyncExternalStore(\n subscribeToNothing,\n () => true,\n () => false,\n );\n const stored = useMemo(() => parseThemeState(storedRaw, themeNames), [storedRaw, themeNames]);\n\n const [theme, setThemeState] = useThemeValue(\n themeProp,\n stored.theme,\n defaultTheme,\n onThemeChange,\n );\n const [mode, setMode] = useThemeValue(modeProp, stored.mode, defaultMode, onModeChange);\n const [contrast, setContrast] = useThemeValue(\n contrastProp,\n stored.contrast,\n defaultContrast,\n onContrastChange,\n );\n const [motion, setMotion] = useThemeValue(\n motionProp,\n stored.motion,\n defaultMotion,\n onMotionChange,\n );\n\n const [density, setDensity] = useThemeValue(\n densityProp,\n stored.density,\n defaultDensity,\n onDensityChange,\n );\n\n const state = useMemo<ThemeState>(\n () => ({ theme, mode, contrast, motion, density }),\n [theme, mode, contrast, motion, density],\n );\n\n // What `<html>` carries, for scopes and overlays to put only what differs on their elements.\n const documentTheme = applyToDocument ? state : null;\n\n useLayoutEffect(() => {\n if (!isHydrated || !applyToDocument) return;\n const root = document.documentElement;\n for (const [name, value] of Object.entries(themeAttributes(state))) {\n root.setAttribute(name, value);\n }\n }, [isHydrated, applyToDocument, state]);\n\n // Stored only once the selection changes from the one the page loaded with (the stored one,\n // or the defaults): a preference is remembered when someone sets it, and a visit that sets\n // nothing leaves no cookie behind.\n const loaded = useRef<string | null>(null);\n const changed = useRef(false);\n useEffect(() => {\n if (!isHydrated || storage === 'none') return;\n const serialized = serializeThemeState(state);\n loaded.current ??= serialized;\n if (!changed.current && serialized === loaded.current) return;\n changed.current = true;\n writeStoredTheme(storage, storageKey, state);\n }, [isHydrated, storage, storageKey, state]);\n\n const systemMode = useSyncExternalStore(\n subscribeToColorScheme,\n getSystemMode,\n (): ResolvedColorMode => 'light',\n );\n const resolvedMode = mode === 'system' ? systemMode : mode;\n\n const setTheme = useCallback(\n (next: string) => {\n if (!themeNames.includes(next)) {\n if (process.env.NODE_ENV !== 'production') {\n console.warn(\n `[@windmorph/react] setTheme(\"${next}\") ignored: not one of ${themeNames.join(', ')}.`,\n );\n }\n return;\n }\n setThemeState(next);\n },\n [themeNames, setThemeState],\n );\n\n const value = useMemo<ThemeContextValue>(\n () => ({\n ...state,\n resolvedMode,\n themes: themeNames,\n setTheme,\n setMode,\n setContrast,\n setMotion,\n setDensity,\n }),\n [state, resolvedMode, themeNames, setTheme, setMode, setContrast, setMotion, setDensity],\n );\n\n return (\n <ThemeContext value={value}>\n <ThemeScopeContext value={state}>\n <DocumentThemeContext value={documentTheme}>\n <InheritedThemeContext value={documentTheme}>\n {definitions.map((definition) => (\n <style\n key={definition.name}\n href={`windmorph-theme-${definition.name}`}\n precedence=\"windmorph\"\n >\n {definition.css}\n </style>\n ))}\n {children}\n </InheritedThemeContext>\n </DocumentThemeContext>\n </ThemeScopeContext>\n </ThemeContext>\n );\n}\n"],"mappings":";;;;;;;;AAmGA,MAAM,aAAa;AAEnB,SAAS,uBAAuB,UAAsB;CACpD,MAAM,QAAQ,OAAO,WAAW,UAAU;CAC1C,MAAM,iBAAiB,UAAU,QAAQ;CACzC,aAAa,MAAM,oBAAoB,UAAU,QAAQ;AAC3D;AAEA,MAAM,sBACJ,OAAO,WAAW,UAAU,CAAC,CAAC,UAAU,SAAS;AAEnD,MAAM,iCAAiC,CAAC;;AAGxC,SAAS,mBAAmB,SAAuB,KAAa,UAAsB;CACpF,IAAI,YAAY,iBAAiB,aAAa,CAAC;CAC/C,MAAM,YAAY,UAAwB;EACxC,IAAI,MAAM,QAAQ,KAAK,SAAS;CAClC;CACA,OAAO,iBAAiB,WAAW,QAAQ;CAC3C,aAAa,OAAO,oBAAoB,WAAW,QAAQ;AAC7D;;;;;AAMA,SAAS,cACP,YACA,QACA,cACA,UACA;CACA,MAAM,CAAC,UAAU,eAAe,SAAwB,KAAA,CAAS;CACjE,MAAM,QAAQ,cAAc,YAAY,UAAU;CAQlD,OAAO,CAAC,OAPS,aACd,SAAY;EACX,IAAI,eAAe,KAAA,GAAW,YAAY,IAAI;EAC9C,IAAI,SAAS,OAAO,WAAW,IAAI;CACrC,GACA;EAAC;EAAY;EAAO;CAAQ,CAER,CAAC;AACzB;;;;;AAMA,SAAgB,cAAc,EAC5B,UACA,QAAQ,WACR,OAAO,WACP,eAAe,oBAAoB,OACnC,eACA,MAAM,UACN,cAAc,oBAAoB,MAClC,cACA,UAAU,cACV,kBAAkB,oBAAoB,UACtC,kBACA,QAAQ,YACR,gBAAgB,oBAAoB,QACpC,gBACA,SAAS,aACT,iBAAiB,oBAAoB,SACrC,iBACA,UAAU,UACV,aAAa,qBACb,kBAAkB,QACG;CACrB,MAAM,cAAc,eACX,aAAa,CAAC,EAAA,CAAG,QAAQ,UAAoC,OAAO,UAAU,QAAQ,GAC7F,CAAC,SAAS,CACZ;CACA,MAAM,aAAa,cAEf,YACI,UAAU,KAAK,UAAW,OAAO,UAAU,WAAW,QAAQ,MAAM,IAAK,IACzE,sBACN,CAAC,SAAS,CACZ;CAKA,MAAM,YAAY,qBAChB,aACG,aAAyB,mBAAmB,SAAS,YAAY,QAAQ,GAC1E,CAAC,SAAS,UAAU,CACtB,SACM,gBAAgB,SAAS,UAAU,SACnC,IACR;CACA,MAAM,aAAa,qBACjB,0BACM,YACA,KACR;CACA,MAAM,SAAS,cAAc,gBAAgB,WAAW,UAAU,GAAG,CAAC,WAAW,UAAU,CAAC;CAE5F,MAAM,CAAC,OAAO,iBAAiB,cAC7B,WACA,OAAO,OACP,cACA,aACF;CACA,MAAM,CAAC,MAAM,WAAW,cAAc,UAAU,OAAO,MAAM,aAAa,YAAY;CACtF,MAAM,CAAC,UAAU,eAAe,cAC9B,cACA,OAAO,UACP,iBACA,gBACF;CACA,MAAM,CAAC,QAAQ,aAAa,cAC1B,YACA,OAAO,QACP,eACA,cACF;CAEA,MAAM,CAAC,SAAS,cAAc,cAC5B,aACA,OAAO,SACP,gBACA,eACF;CAEA,MAAM,QAAQ,eACL;EAAE;EAAO;EAAM;EAAU;EAAQ;CAAQ,IAChD;EAAC;EAAO;EAAM;EAAU;EAAQ;CAAO,CACzC;CAGA,MAAM,gBAAgB,kBAAkB,QAAQ;CAEhD,sBAAsB;EACpB,IAAI,CAAC,cAAc,CAAC,iBAAiB;EACrC,MAAM,OAAO,SAAS;EACtB,KAAK,MAAM,CAAC,MAAM,UAAU,OAAO,QAAQ,gBAAgB,KAAK,CAAC,GAC/D,KAAK,aAAa,MAAM,KAAK;CAEjC,GAAG;EAAC;EAAY;EAAiB;CAAK,CAAC;CAKvC,MAAM,SAAS,OAAsB,IAAI;CACzC,MAAM,UAAU,OAAO,KAAK;CAC5B,gBAAgB;EACd,IAAI,CAAC,cAAc,YAAY,QAAQ;EACvC,MAAM,aAAa,oBAAoB,KAAK;EAC5C,OAAO,YAAY;EACnB,IAAI,CAAC,QAAQ,WAAW,eAAe,OAAO,SAAS;EACvD,QAAQ,UAAU;EAClB,iBAAiB,SAAS,YAAY,KAAK;CAC7C,GAAG;EAAC;EAAY;EAAS;EAAY;CAAK,CAAC;CAE3C,MAAM,aAAa,qBACjB,wBACA,qBACyB,OAC3B;CACA,MAAM,eAAe,SAAS,WAAW,aAAa;CAEtD,MAAM,WAAW,aACd,SAAiB;EAChB,IAAI,CAAC,WAAW,SAAS,IAAI,GAAG;GAC9B,IAAI,QAAQ,IAAI,aAAa,cAC3B,QAAQ,KACN,gCAAgC,KAAK,yBAAyB,WAAW,KAAK,IAAI,EAAE,EACtF;GAEF;EACF;EACA,cAAc,IAAI;CACpB,GACA,CAAC,YAAY,aAAa,CAC5B;CAEA,MAAM,QAAQ,eACL;EACL,GAAG;EACH;EACA,QAAQ;EACR;EACA;EACA;EACA;EACA;CACF,IACA;EAAC;EAAO;EAAc;EAAY;EAAU;EAAS;EAAa;EAAW;CAAU,CACzF;CAEA,OACE,oBAAC,cAAD;EAAqB;EACnB,UAAA,oBAAC,mBAAD;GAAmB,OAAO;GACxB,UAAA,oBAAC,sBAAD;IAAsB,OAAO;IAC3B,UAAA,qBAAC,uBAAD;KAAuB,OAAO;KAA9B,UAAA,CACG,YAAY,KAAK,eAChB,oBAAC,SAAD;MAEE,MAAM,mBAAmB,WAAW;MACpC,YAAW;MAEV,UAAA,WAAW;KACP,GALA,WAAW,IAKX,CACR,GACA,QACoB;;GACH,CAAA;EACL,CAAA;CACP,CAAA;AAElB"}
@@ -0,0 +1,32 @@
1
+ import { ColorMode, ContrastLevel } from "../tokens/color.js";
2
+ import { Density } from "../tokens/density.js";
3
+ import { MotionScheme } from "../tokens/motion.js";
4
+ import { ComponentPropsWithRef } from "react";
5
+ //#region src/theme/ThemeScope.d.ts
6
+ export interface ThemeScopeProps extends ComponentPropsWithRef<'div'> {
7
+ /** Colour theme for this subtree. Inherited when omitted. */
8
+ theme?: string;
9
+ /** Colour mode for this subtree. Inherited when omitted. */
10
+ mode?: ColorMode;
11
+ /** Contrast level for this subtree. Inherited when omitted. */
12
+ contrast?: ContrastLevel;
13
+ /** Motion scheme for this subtree. Inherited when omitted. */
14
+ motion?: MotionScheme;
15
+ /**
16
+ * Web density for this subtree, `0` to `-3` (e.g. a dense data table's filters). Inherited
17
+ * when omitted.
18
+ */
19
+ density?: Density;
20
+ }
21
+ /**
22
+ * Applies a different theme, mode, contrast level, motion scheme or density to a subtree.
23
+ * Scopes nest; unset dimensions are inherited from the nearest provider or scope.
24
+ * Renders a `div` with `text-on-surface` so text picks up the scope's colours.
25
+ *
26
+ * Overlays opened inside (menus, dialogs, tooltips) are portalled out of the `div`, so they
27
+ * get its theme attributes, its `className` and the CSS variables of its `style` on their own
28
+ * wrapper: component tokens set through the class or as inline variables reach them too.
29
+ */
30
+ export declare function ThemeScope({ theme, mode, contrast, motion, density, className, style, children, ...props }: ThemeScopeProps): import("react").JSX.Element;
31
+ //#endregion
32
+ //# sourceMappingURL=ThemeScope.d.ts.map
@@ -0,0 +1,67 @@
1
+ "use client";
2
+ import { themeAttributesOver } from "./state.js";
3
+ import { InheritedThemeContext, ThemeScopeContext, ThemeScopeLayersContext, useThemeScope, useThemeScopeLayers } from "./context.js";
4
+ import { cn } from "../utils/cn.js";
5
+ import { useContext, useMemo } from "react";
6
+ import { jsx } from "react/jsx-runtime";
7
+ //#region src/theme/ThemeScope.tsx
8
+ /**
9
+ * Applies a different theme, mode, contrast level, motion scheme or density to a subtree.
10
+ * Scopes nest; unset dimensions are inherited from the nearest provider or scope.
11
+ * Renders a `div` with `text-on-surface` so text picks up the scope's colours.
12
+ *
13
+ * Overlays opened inside (menus, dialogs, tooltips) are portalled out of the `div`, so they
14
+ * get its theme attributes, its `className` and the CSS variables of its `style` on their own
15
+ * wrapper: component tokens set through the class or as inline variables reach them too.
16
+ */
17
+ function ThemeScope({ theme, mode, contrast, motion, density, className, style, children, ...props }) {
18
+ const parent = useThemeScope();
19
+ const inherited = useContext(InheritedThemeContext);
20
+ const parentLayers = useThemeScopeLayers();
21
+ const layers = useMemo(() => {
22
+ const variables = Object.fromEntries(Object.entries(style ?? {}).filter(([name, value]) => name.startsWith("--") && value !== void 0 && value !== null).map(([name, value]) => [name, String(value)]));
23
+ if (!className && Object.keys(variables).length === 0) return parentLayers;
24
+ return [...parentLayers, {
25
+ className: className ?? "",
26
+ variables
27
+ }];
28
+ }, [
29
+ parentLayers,
30
+ className,
31
+ style
32
+ ]);
33
+ const state = useMemo(() => ({
34
+ theme: theme ?? parent.theme,
35
+ mode: mode ?? parent.mode,
36
+ contrast: contrast ?? parent.contrast,
37
+ motion: motion ?? parent.motion,
38
+ density: density ?? parent.density
39
+ }), [
40
+ theme,
41
+ mode,
42
+ contrast,
43
+ motion,
44
+ density,
45
+ parent
46
+ ]);
47
+ return /* @__PURE__ */ jsx("div", {
48
+ ...props,
49
+ ...themeAttributesOver(state, inherited, layers !== parentLayers),
50
+ style,
51
+ className: cn("text-on-surface", className),
52
+ children: /* @__PURE__ */ jsx(ThemeScopeContext, {
53
+ value: state,
54
+ children: /* @__PURE__ */ jsx(InheritedThemeContext, {
55
+ value: state,
56
+ children: /* @__PURE__ */ jsx(ThemeScopeLayersContext, {
57
+ value: layers,
58
+ children
59
+ })
60
+ })
61
+ })
62
+ });
63
+ }
64
+ //#endregion
65
+ export { ThemeScope };
66
+
67
+ //# sourceMappingURL=ThemeScope.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThemeScope.js","names":[],"sources":["../../src/theme/ThemeScope.tsx"],"sourcesContent":["'use client';\n\nimport { useContext, useMemo, type ComponentPropsWithRef } from 'react';\nimport type { ColorMode, ContrastLevel } from '../tokens/color';\nimport type { Density } from '../tokens/density';\nimport type { MotionScheme } from '../tokens/motion';\nimport { cn } from '../utils/cn';\nimport {\n InheritedThemeContext,\n ThemeScopeContext,\n ThemeScopeLayersContext,\n useThemeScope,\n useThemeScopeLayers,\n} from './context';\nimport { themeAttributesOver, type ThemeState } from './state';\n\nexport interface ThemeScopeProps extends ComponentPropsWithRef<'div'> {\n /** Colour theme for this subtree. Inherited when omitted. */\n theme?: string;\n /** Colour mode for this subtree. Inherited when omitted. */\n mode?: ColorMode;\n /** Contrast level for this subtree. Inherited when omitted. */\n contrast?: ContrastLevel;\n /** Motion scheme for this subtree. Inherited when omitted. */\n motion?: MotionScheme;\n /**\n * Web density for this subtree, `0` to `-3` (e.g. a dense data table's filters). Inherited\n * when omitted.\n */\n density?: Density;\n}\n\n/**\n * Applies a different theme, mode, contrast level, motion scheme or density to a subtree.\n * Scopes nest; unset dimensions are inherited from the nearest provider or scope.\n * Renders a `div` with `text-on-surface` so text picks up the scope's colours.\n *\n * Overlays opened inside (menus, dialogs, tooltips) are portalled out of the `div`, so they\n * get its theme attributes, its `className` and the CSS variables of its `style` on their own\n * wrapper: component tokens set through the class or as inline variables reach them too.\n */\nexport function ThemeScope({\n theme,\n mode,\n contrast,\n motion,\n density,\n className,\n style,\n children,\n ...props\n}: ThemeScopeProps) {\n const parent = useThemeScope();\n const inherited = useContext(InheritedThemeContext);\n const parentLayers = useThemeScopeLayers();\n const layers = useMemo(() => {\n const variables = Object.fromEntries(\n Object.entries(style ?? {})\n .filter(([name, value]) => name.startsWith('--') && value !== undefined && value !== null)\n .map(([name, value]) => [name, String(value)]),\n );\n if (!className && Object.keys(variables).length === 0) return parentLayers;\n return [...parentLayers, { className: className ?? '', variables }];\n }, [parentLayers, className, style]);\n const state = useMemo<ThemeState>(\n () => ({\n theme: theme ?? parent.theme,\n mode: mode ?? parent.mode,\n contrast: contrast ?? parent.contrast,\n motion: motion ?? parent.motion,\n density: density ?? parent.density,\n }),\n [theme, mode, contrast, motion, density, parent],\n );\n\n return (\n <div\n {...props}\n {...themeAttributesOver(state, inherited, layers !== parentLayers)}\n style={style}\n className={cn('text-on-surface', className)}\n >\n <ThemeScopeContext value={state}>\n <InheritedThemeContext value={state}>\n <ThemeScopeLayersContext value={layers}>{children}</ThemeScopeLayersContext>\n </InheritedThemeContext>\n </ThemeScopeContext>\n </div>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;AAyCA,SAAgB,WAAW,EACzB,OACA,MACA,UACA,QACA,SACA,WACA,OACA,UACA,GAAG,SACe;CAClB,MAAM,SAAS,cAAc;CAC7B,MAAM,YAAY,WAAW,qBAAqB;CAClD,MAAM,eAAe,oBAAoB;CACzC,MAAM,SAAS,cAAc;EAC3B,MAAM,YAAY,OAAO,YACvB,OAAO,QAAQ,SAAS,CAAC,CAAC,CAAC,CACxB,QAAQ,CAAC,MAAM,WAAW,KAAK,WAAW,IAAI,KAAK,UAAU,KAAA,KAAa,UAAU,IAAI,CAAC,CACzF,KAAK,CAAC,MAAM,WAAW,CAAC,MAAM,OAAO,KAAK,CAAC,CAAC,CACjD;EACA,IAAI,CAAC,aAAa,OAAO,KAAK,SAAS,CAAC,CAAC,WAAW,GAAG,OAAO;EAC9D,OAAO,CAAC,GAAG,cAAc;GAAE,WAAW,aAAa;GAAI;EAAU,CAAC;CACpE,GAAG;EAAC;EAAc;EAAW;CAAK,CAAC;CACnC,MAAM,QAAQ,eACL;EACL,OAAO,SAAS,OAAO;EACvB,MAAM,QAAQ,OAAO;EACrB,UAAU,YAAY,OAAO;EAC7B,QAAQ,UAAU,OAAO;EACzB,SAAS,WAAW,OAAO;CAC7B,IACA;EAAC;EAAO;EAAM;EAAU;EAAQ;EAAS;CAAM,CACjD;CAEA,OACE,oBAAC,OAAD;EACE,GAAI;EACJ,GAAI,oBAAoB,OAAO,WAAW,WAAW,YAAY;EAC1D;EACP,WAAW,GAAG,mBAAmB,SAAS;EAE1C,UAAA,oBAAC,mBAAD;GAAmB,OAAO;GACxB,UAAA,oBAAC,uBAAD;IAAuB,OAAO;IAC5B,UAAA,oBAAC,yBAAD;KAAyB,OAAO;KAAS;IAAkC,CAAA;GACtD,CAAA;EACN,CAAA;CAChB,CAAA;AAET"}
@@ -0,0 +1,26 @@
1
+ import { ThemeState, ThemeStorage } from "./state.js";
2
+ //#region src/theme/ThemeScript.d.ts
3
+ export interface ThemeScriptProps {
4
+ /** Values used when nothing is stored. Must match the `ThemeProvider` defaults. */
5
+ defaults?: Partial<ThemeState>;
6
+ /** Must match `ThemeProvider`'s `storage`. @default "cookie" */
7
+ storage?: Exclude<ThemeStorage, 'none'>;
8
+ /** Must match `ThemeProvider`'s `storageKey`. */
9
+ storageKey?: string;
10
+ /** CSP nonce for the inline script. */
11
+ nonce?: string;
12
+ }
13
+ /**
14
+ * Builds the inline script source. It runs before first paint, reads the stored
15
+ * selection and writes the `data-*` attributes on `<html>`, so static and exported
16
+ * sites never flash the wrong theme.
17
+ */
18
+ export declare function getThemeScriptSource({ defaults, storage, storageKey }?: Omit<ThemeScriptProps, 'nonce'>): string;
19
+ /**
20
+ * Prevents a theme flash on static or exported sites. Render it in `<head>` and add
21
+ * `suppressHydrationWarning` to `<html>`. With server rendering, prefer
22
+ * `getThemeFromCookies` from `@windmorph/react/next` instead.
23
+ */
24
+ export declare function ThemeScript({ nonce, ...options }: ThemeScriptProps): import("react").JSX.Element;
25
+ //#endregion
26
+ //# sourceMappingURL=ThemeScript.d.ts.map
@@ -0,0 +1,44 @@
1
+ import { COLOR_MODES, CONTRAST_LEVEL_NAMES } from "../tokens/color.js";
2
+ import { DENSITIES } from "../tokens/density.js";
3
+ import { MOTION_SCHEMES } from "../tokens/motion.js";
4
+ import { DEFAULT_STORAGE_KEY, DEFAULT_THEME_STATE } from "./state.js";
5
+ import { jsx } from "react/jsx-runtime";
6
+ //#region src/theme/ThemeScript.tsx
7
+ /**
8
+ * Builds the inline script source. It runs before first paint, reads the stored
9
+ * selection and writes the `data-*` attributes on `<html>`, so static and exported
10
+ * sites never flash the wrong theme.
11
+ */
12
+ function getThemeScriptSource({ defaults, storage = "cookie", storageKey = DEFAULT_STORAGE_KEY } = {}) {
13
+ const config = {
14
+ defaults: {
15
+ ...DEFAULT_THEME_STATE,
16
+ ...defaults
17
+ },
18
+ storage,
19
+ key: storageKey,
20
+ cookie: `(?:^|; )${storageKey.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")}=([^;]*)`,
21
+ allowed: {
22
+ mode: COLOR_MODES,
23
+ contrast: CONTRAST_LEVEL_NAMES,
24
+ motion: MOTION_SCHEMES,
25
+ density: DENSITIES.map(String)
26
+ }
27
+ };
28
+ return `(function(c){try{var r=null;if(c.storage==="cookie"){var m=document.cookie.match(new RegExp(c.cookie));r=m&&m[1]}else{r=localStorage.getItem(c.key)}var p=new URLSearchParams(r?decodeURIComponent(r):""),s={},k;for(k in c.defaults){var v=p.get(k);s[k]=v&&(k==="theme"?/^[a-z][a-z0-9-]*$/.test(v):c.allowed[k].indexOf(v)>-1)?v:c.defaults[k]}var e=document.documentElement;for(k in s)e.setAttribute("data-"+k,s[k])}catch(_){}})(${JSON.stringify(config).replace(/</g, "\\u003c")})`;
29
+ }
30
+ /**
31
+ * Prevents a theme flash on static or exported sites. Render it in `<head>` and add
32
+ * `suppressHydrationWarning` to `<html>`. With server rendering, prefer
33
+ * `getThemeFromCookies` from `@windmorph/react/next` instead.
34
+ */
35
+ function ThemeScript({ nonce, ...options }) {
36
+ return /* @__PURE__ */ jsx("script", {
37
+ nonce,
38
+ dangerouslySetInnerHTML: { __html: getThemeScriptSource(options) }
39
+ });
40
+ }
41
+ //#endregion
42
+ export { ThemeScript, getThemeScriptSource };
43
+
44
+ //# sourceMappingURL=ThemeScript.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ThemeScript.js","names":[],"sources":["../../src/theme/ThemeScript.tsx"],"sourcesContent":["import { COLOR_MODES, CONTRAST_LEVEL_NAMES } from '../tokens/color';\nimport { DENSITIES } from '../tokens/density';\nimport { MOTION_SCHEMES } from '../tokens/motion';\nimport {\n DEFAULT_STORAGE_KEY,\n DEFAULT_THEME_STATE,\n type ThemeState,\n type ThemeStorage,\n} from './state';\n\nexport interface ThemeScriptProps {\n /** Values used when nothing is stored. Must match the `ThemeProvider` defaults. */\n defaults?: Partial<ThemeState>;\n /** Must match `ThemeProvider`'s `storage`. @default \"cookie\" */\n storage?: Exclude<ThemeStorage, 'none'>;\n /** Must match `ThemeProvider`'s `storageKey`. */\n storageKey?: string;\n /** CSP nonce for the inline script. */\n nonce?: string;\n}\n\n/**\n * Builds the inline script source. It runs before first paint, reads the stored\n * selection and writes the `data-*` attributes on `<html>`, so static and exported\n * sites never flash the wrong theme.\n */\nexport function getThemeScriptSource({\n defaults,\n storage = 'cookie',\n storageKey = DEFAULT_STORAGE_KEY,\n}: Omit<ThemeScriptProps, 'nonce'> = {}): string {\n const config = {\n defaults: { ...DEFAULT_THEME_STATE, ...defaults },\n storage,\n key: storageKey,\n cookie: `(?:^|; )${storageKey.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')}=([^;]*)`,\n allowed: {\n mode: COLOR_MODES,\n contrast: CONTRAST_LEVEL_NAMES,\n motion: MOTION_SCHEMES,\n density: DENSITIES.map(String),\n },\n };\n return `(function(c){try{var r=null;if(c.storage===\"cookie\"){var m=document.cookie.match(new RegExp(c.cookie));r=m&&m[1]}else{r=localStorage.getItem(c.key)}var p=new URLSearchParams(r?decodeURIComponent(r):\"\"),s={},k;for(k in c.defaults){var v=p.get(k);s[k]=v&&(k===\"theme\"?/^[a-z][a-z0-9-]*$/.test(v):c.allowed[k].indexOf(v)>-1)?v:c.defaults[k]}var e=document.documentElement;for(k in s)e.setAttribute(\"data-\"+k,s[k])}catch(_){}})(${JSON.stringify(config).replace(/</g, '\\\\u003c')})`;\n}\n\n/**\n * Prevents a theme flash on static or exported sites. Render it in `<head>` and add\n * `suppressHydrationWarning` to `<html>`. With server rendering, prefer\n * `getThemeFromCookies` from `@windmorph/react/next` instead.\n */\nexport function ThemeScript({ nonce, ...options }: ThemeScriptProps) {\n return (\n <script nonce={nonce} dangerouslySetInnerHTML={{ __html: getThemeScriptSource(options) }} />\n );\n}\n"],"mappings":";;;;;;;;;;;AA0BA,SAAgB,qBAAqB,EACnC,UACA,UAAU,UACV,aAAa,wBACsB,CAAC,GAAW;CAC/C,MAAM,SAAS;EACb,UAAU;GAAE,GAAG;GAAqB,GAAG;EAAS;EAChD;EACA,KAAK;EACL,QAAQ,WAAW,WAAW,QAAQ,uBAAuB,MAAM,EAAE;EACrE,SAAS;GACP,MAAM;GACN,UAAU;GACV,QAAQ;GACR,SAAS,UAAU,IAAI,MAAM;EAC/B;CACF;CACA,OAAO,2aAA2a,KAAK,UAAU,MAAM,CAAC,CAAC,QAAQ,MAAM,SAAS,EAAE;AACpe;;;;;;AAOA,SAAgB,YAAY,EAAE,OAAO,GAAG,WAA6B;CACnE,OACE,oBAAC,UAAD;EAAe;EAAO,yBAAyB,EAAE,QAAQ,qBAAqB,OAAO,EAAE;CAAI,CAAA;AAE/F"}
@@ -0,0 +1,32 @@
1
+ import { ColorMode, ContrastLevel, ResolvedColorMode } from "../tokens/color.js";
2
+ import { Density } from "../tokens/density.js";
3
+ import { MotionScheme } from "../tokens/motion.js";
4
+ import { ThemeState } from "./state.js";
5
+ //#region src/theme/context.d.ts
6
+ export interface ThemeContextValue extends ThemeState {
7
+ /** `mode` with `"system"` resolved from `prefers-color-scheme`. */
8
+ resolvedMode: ResolvedColorMode;
9
+ /** Names of the themes available to `setTheme`. */
10
+ themes: readonly string[];
11
+ /** Switches the colour theme; a name not in `themes` is ignored (with a warning in development). */
12
+ setTheme: (theme: string) => void;
13
+ /** Switches the colour mode: `light`, `dark` or `system`. */
14
+ setMode: (mode: ColorMode) => void;
15
+ /** Switches the contrast level: `standard`, `medium` or `high`. */
16
+ setContrast: (contrast: ContrastLevel) => void;
17
+ /** Switches the motion scheme: `expressive` or `standard`. */
18
+ setMotion: (motion: MotionScheme) => void;
19
+ /** Switches the web density, `0` to `-3`. */
20
+ setDensity: (density: Density) => void;
21
+ }
22
+ /** The theme applied to the nearest `ThemeProvider` or `ThemeScope`. */
23
+ export declare const ThemeScopeContext: import("react").Context<ThemeState>;
24
+ /**
25
+ * Reads and changes the app theme set by `ThemeProvider`.
26
+ * @throws if called outside a `ThemeProvider`.
27
+ */
28
+ export declare function useTheme(): ThemeContextValue;
29
+ /** The theme state in effect at this point in the tree, including any `ThemeScope`. */
30
+ export declare function useThemeScope(): ThemeState;
31
+ //#endregion
32
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1,47 @@
1
+ "use client";
2
+ import { DEFAULT_THEME_STATE } from "./state.js";
3
+ import { createContext, useContext } from "react";
4
+ //#region src/theme/context.ts
5
+ const ThemeContext = createContext(null);
6
+ /** The theme applied to the nearest `ThemeProvider` or `ThemeScope`. */
7
+ const ThemeScopeContext = createContext(DEFAULT_THEME_STATE);
8
+ /**
9
+ * The classes and inline CSS variables of the `ThemeScope`s around this point, outermost first,
10
+ * one layer per scope that sets either, so `Overlay` can repeat them around its portalled
11
+ * content: component tokens an app sets through a scope's class or `style` then reach overlays
12
+ * opened inside it (2026-10-17). Kept per scope (2026-10-24), so an inner scope's value wins
13
+ * however each scope sets it, as on the page.
14
+ */
15
+ const ThemeScopeLayersContext = createContext([]);
16
+ /**
17
+ * The theme the DOM already carries at this point through `data-*` attributes: the nearest
18
+ * `ThemeScope`'s, or the `ThemeProvider`'s when it writes them on `<html>`; `null` when unknown.
19
+ * A `ThemeScope` puts only the attributes that differ from it on its element.
20
+ */
21
+ const InheritedThemeContext = createContext(null);
22
+ /**
23
+ * The theme `<html>` carries (the `ThemeProvider`'s, when it writes it there), for `Overlay`'s
24
+ * wrapper in `document.body`; `null` when unknown.
25
+ */
26
+ const DocumentThemeContext = createContext(null);
27
+ /**
28
+ * Reads and changes the app theme set by `ThemeProvider`.
29
+ * @throws if called outside a `ThemeProvider`.
30
+ */
31
+ function useTheme() {
32
+ const value = useContext(ThemeContext);
33
+ if (!value) throw new Error("[@windmorph/react] useTheme() must be used inside <ThemeProvider>.");
34
+ return value;
35
+ }
36
+ /** The classes and CSS variables of the `ThemeScope`s around this point (`ThemeScopeLayersContext`). */
37
+ function useThemeScopeLayers() {
38
+ return useContext(ThemeScopeLayersContext);
39
+ }
40
+ /** The theme state in effect at this point in the tree, including any `ThemeScope`. */
41
+ function useThemeScope() {
42
+ return useContext(ThemeScopeContext);
43
+ }
44
+ //#endregion
45
+ export { DocumentThemeContext, InheritedThemeContext, ThemeContext, ThemeScopeContext, ThemeScopeLayersContext, useTheme, useThemeScope, useThemeScopeLayers };
46
+
47
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","names":[],"sources":["../../src/theme/context.ts"],"sourcesContent":["'use client';\n\nimport { createContext, useContext } from 'react';\nimport type { ColorMode, ContrastLevel, ResolvedColorMode } from '../tokens/color';\nimport type { Density } from '../tokens/density';\nimport type { MotionScheme } from '../tokens/motion';\nimport { DEFAULT_THEME_STATE, type ThemeState } from './state';\n\nexport interface ThemeContextValue extends ThemeState {\n /** `mode` with `\"system\"` resolved from `prefers-color-scheme`. */\n resolvedMode: ResolvedColorMode;\n /** Names of the themes available to `setTheme`. */\n themes: readonly string[];\n /** Switches the colour theme; a name not in `themes` is ignored (with a warning in development). */\n setTheme: (theme: string) => void;\n /** Switches the colour mode: `light`, `dark` or `system`. */\n setMode: (mode: ColorMode) => void;\n /** Switches the contrast level: `standard`, `medium` or `high`. */\n setContrast: (contrast: ContrastLevel) => void;\n /** Switches the motion scheme: `expressive` or `standard`. */\n setMotion: (motion: MotionScheme) => void;\n /** Switches the web density, `0` to `-3`. */\n setDensity: (density: Density) => void;\n}\n\nexport const ThemeContext = createContext<ThemeContextValue | null>(null);\n\n/** The theme applied to the nearest `ThemeProvider` or `ThemeScope`. */\nexport const ThemeScopeContext = createContext<ThemeState>(DEFAULT_THEME_STATE);\n\n/** One `ThemeScope`'s class and the CSS variables (`--*` keys) of its `style`. */\nexport interface ThemeScopeLayer {\n className: string;\n variables: Readonly<Record<string, string>>;\n}\n\n/**\n * The classes and inline CSS variables of the `ThemeScope`s around this point, outermost first,\n * one layer per scope that sets either, so `Overlay` can repeat them around its portalled\n * content: component tokens an app sets through a scope's class or `style` then reach overlays\n * opened inside it (2026-10-17). Kept per scope (2026-10-24), so an inner scope's value wins\n * however each scope sets it, as on the page.\n */\nexport const ThemeScopeLayersContext = createContext<readonly ThemeScopeLayer[]>([]);\n\n/**\n * The theme the DOM already carries at this point through `data-*` attributes: the nearest\n * `ThemeScope`'s, or the `ThemeProvider`'s when it writes them on `<html>`; `null` when unknown.\n * A `ThemeScope` puts only the attributes that differ from it on its element.\n */\nexport const InheritedThemeContext = createContext<ThemeState | null>(null);\n\n/**\n * The theme `<html>` carries (the `ThemeProvider`'s, when it writes it there), for `Overlay`'s\n * wrapper in `document.body`; `null` when unknown.\n */\nexport const DocumentThemeContext = createContext<ThemeState | null>(null);\n\n/**\n * Reads and changes the app theme set by `ThemeProvider`.\n * @throws if called outside a `ThemeProvider`.\n */\nexport function useTheme(): ThemeContextValue {\n const value = useContext(ThemeContext);\n if (!value) throw new Error('[@windmorph/react] useTheme() must be used inside <ThemeProvider>.');\n return value;\n}\n\n/** The classes and CSS variables of the `ThemeScope`s around this point (`ThemeScopeLayersContext`). */\nexport function useThemeScopeLayers(): readonly ThemeScopeLayer[] {\n return useContext(ThemeScopeLayersContext);\n}\n\n/** The theme state in effect at this point in the tree, including any `ThemeScope`. */\nexport function useThemeScope(): ThemeState {\n return useContext(ThemeScopeContext);\n}\n"],"mappings":";;;;AAyBA,MAAa,eAAe,cAAwC,IAAI;;AAGxE,MAAa,oBAAoB,cAA0B,mBAAmB;;;;;;;;AAe9E,MAAa,0BAA0B,cAA0C,CAAC,CAAC;;;;;;AAOnF,MAAa,wBAAwB,cAAiC,IAAI;;;;;AAM1E,MAAa,uBAAuB,cAAiC,IAAI;;;;;AAMzE,SAAgB,WAA8B;CAC5C,MAAM,QAAQ,WAAW,YAAY;CACrC,IAAI,CAAC,OAAO,MAAM,IAAI,MAAM,oEAAoE;CAChG,OAAO;AACT;;AAGA,SAAgB,sBAAkD;CAChE,OAAO,WAAW,uBAAuB;AAC3C;;AAGA,SAAgB,gBAA4B;CAC1C,OAAO,WAAW,iBAAiB;AACrC"}
@@ -0,0 +1,60 @@
1
+ import { ContrastLevel, CustomColorName, SchemeVariant, ThemePalettes } from "../tokens/color.js";
2
+ //#region src/theme/create-theme.d.ts
3
+ export interface CreateThemeOptions {
4
+ /** Theme name used in `data-theme`. Lowercase kebab-case, e.g. `"acme"`. */
5
+ name: string;
6
+ /** Seed colour as hex, e.g. `"#0B57D0"`. */
7
+ seed: string;
8
+ /** Colour scheme variant. Defaults to `"tonal-spot"`. */
9
+ variant?: SchemeVariant;
10
+ /**
11
+ * Takes some of the scheme's palettes from elsewhere: another variant of the same seed, or
12
+ * a hex colour. `{ neutral: 'tonal-spot', neutralVariant: 'tonal-spot' }` gives vivid
13
+ * accents on calm surfaces; `{ tertiary: '#00A07A' }` sets a brand's own tertiary colour.
14
+ */
15
+ palettes?: ThemePalettes;
16
+ /**
17
+ * The success and warning colours (docs/plans/custom-colors.md); each defaults to a green
18
+ * and an amber. Only hue and chroma matter: the tones follow M3's error roles.
19
+ */
20
+ customColors?: Partial<Record<CustomColorName, `#${string}`>>;
21
+ /** Turns the custom colours' hues toward the seed, as Material Theme Builder does. @default true */
22
+ harmonize?: boolean;
23
+ /** Contrast level(s) to generate. Defaults to all three. */
24
+ contrast?: ContrastLevel | readonly ContrastLevel[];
25
+ }
26
+ /** A generated colour theme, ready to pass to `ThemeProvider`'s `themes` prop. */
27
+ export interface ThemeDefinition {
28
+ name: string;
29
+ seed: string;
30
+ variant: SchemeVariant;
31
+ palettes: ThemePalettes;
32
+ customColors: Partial<Record<CustomColorName, `#${string}`>>;
33
+ harmonize: boolean;
34
+ contrast: readonly ContrastLevel[];
35
+ /** Light, dark and system-mode CSS for each contrast level. */
36
+ css: string;
37
+ }
38
+ /**
39
+ * Generates a custom colour theme from a seed colour with the M3 2025 colour spec.
40
+ * Works at runtime and on the server; for static sites prefer the CLI, which writes
41
+ * the same CSS to a file.
42
+ *
43
+ * @example
44
+ * const acme = createTheme({ name: 'acme', seed: '#0B57D0' });
45
+ * <ThemeProvider themes={['baseline', acme]} defaultTheme="acme">…</ThemeProvider>
46
+ *
47
+ * // Vivid accents on calm, nearly neutral surfaces.
48
+ * createTheme({
49
+ * name: 'blue',
50
+ * seed: '#1877F2',
51
+ * variant: 'vibrant',
52
+ * palettes: { neutral: 'tonal-spot', neutralVariant: 'tonal-spot' },
53
+ * });
54
+ *
55
+ * // A brand's own status colours, at their exact hues.
56
+ * createTheme({ name: 'shop', seed: '#0B57D0', customColors: { success: '#0B8043' }, harmonize: false });
57
+ */
58
+ export declare function createTheme({ name, seed, variant, palettes, customColors, harmonize, contrast }: CreateThemeOptions): ThemeDefinition;
59
+ //#endregion
60
+ //# sourceMappingURL=create-theme.d.ts.map
@@ -0,0 +1,47 @@
1
+ import { CONTRAST_LEVEL_NAMES } from "../tokens/color.js";
2
+ import { assertThemeName, generateThemeCss } from "./css.js";
3
+ //#region src/theme/create-theme.ts
4
+ /**
5
+ * Generates a custom colour theme from a seed colour with the M3 2025 colour spec.
6
+ * Works at runtime and on the server; for static sites prefer the CLI, which writes
7
+ * the same CSS to a file.
8
+ *
9
+ * @example
10
+ * const acme = createTheme({ name: 'acme', seed: '#0B57D0' });
11
+ * <ThemeProvider themes={['baseline', acme]} defaultTheme="acme">…</ThemeProvider>
12
+ *
13
+ * // Vivid accents on calm, nearly neutral surfaces.
14
+ * createTheme({
15
+ * name: 'blue',
16
+ * seed: '#1877F2',
17
+ * variant: 'vibrant',
18
+ * palettes: { neutral: 'tonal-spot', neutralVariant: 'tonal-spot' },
19
+ * });
20
+ *
21
+ * // A brand's own status colours, at their exact hues.
22
+ * createTheme({ name: 'shop', seed: '#0B57D0', customColors: { success: '#0B8043' }, harmonize: false });
23
+ */
24
+ function createTheme({ name, seed, variant = "tonal-spot", palettes = {}, customColors = {}, harmonize = true, contrast = CONTRAST_LEVEL_NAMES }) {
25
+ assertThemeName(name);
26
+ const contrastLevels = typeof contrast === "string" ? [contrast] : contrast;
27
+ return {
28
+ name,
29
+ seed,
30
+ variant,
31
+ palettes,
32
+ customColors,
33
+ harmonize,
34
+ contrast: contrastLevels,
35
+ css: generateThemeCss(name, {
36
+ seed,
37
+ variant,
38
+ palettes,
39
+ customColors,
40
+ harmonize
41
+ }, { contrastLevels })
42
+ };
43
+ }
44
+ //#endregion
45
+ export { createTheme };
46
+
47
+ //# sourceMappingURL=create-theme.js.map