@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 @@
1
+ {"version":3,"file":"point.js","names":[],"sources":["../../src/shapes/point.ts"],"sourcesContent":["/*\n * Port of androidx.graphics.shapes Point.kt and Utils.kt (Apache-2.0, see LICENSE-androidx.md).\n */\n\n/** An immutable 2D point or vector. */\nexport class Point {\n constructor(\n readonly x: number,\n readonly y: number,\n ) {}\n\n /** Distance from (0, 0). */\n getDistance(): number {\n return Math.sqrt(this.x * this.x + this.y * this.y);\n }\n\n getDistanceSquared(): number {\n return this.x * this.x + this.y * this.y;\n }\n\n dotProduct(other: Point): number {\n return this.x * other.x + this.y * other.y;\n }\n\n dotProductXY(otherX: number, otherY: number): number {\n return this.x * otherX + this.y * otherY;\n }\n\n /** Whether `other` turns clockwise from this vector (z of the cross product > 0). */\n clockwise(other: Point): boolean {\n return this.x * other.y - this.y * other.x > 0;\n }\n\n /** Unit vector in this direction. */\n getDirection(): Point {\n const d = this.getDistance();\n if (!(d > 0)) throw new Error(\"Can't get the direction of a 0-length vector\");\n return this.div(d);\n }\n\n negate(): Point {\n return new Point(-this.x, -this.y);\n }\n\n minus(other: Point): Point {\n return new Point(this.x - other.x, this.y - other.y);\n }\n\n plus(other: Point): Point {\n return new Point(this.x + other.x, this.y + other.y);\n }\n\n times(operand: number): Point {\n return new Point(this.x * operand, this.y * operand);\n }\n\n div(operand: number): Point {\n return new Point(this.x / operand, this.y / operand);\n }\n\n rem(operand: number): Point {\n return new Point(this.x % operand, this.y % operand);\n }\n\n rotate90(): Point {\n return new Point(-this.y, this.x);\n }\n\n transformed(f: PointTransformer): Point {\n const [x, y] = f(this.x, this.y);\n return new Point(x, y);\n }\n}\n\n/** Maps a point to a new point, e.g. to scale or rotate a shape. */\nexport type PointTransformer = (x: number, y: number) => readonly [number, number];\n\nexport const Zero = new Point(0, 0);\n\n/*\n * These epsilon values are used internally to determine when two points are the same, within\n * some reasonable roundoff error. The distance epsilon is smaller, with the intention that the\n * roundoff should not be larger than a pixel on any reasonable sized display.\n */\nexport const DistanceEpsilon = 1e-4;\nexport const AngleEpsilon = 1e-6;\n/**\n * People see e.g. collinearity much more relaxed than what is mathematically correct; use this\n * for operations that allow higher tolerances.\n */\nexport const RelaxedDistanceEpsilon = 5e-3;\n\nexport const FloatPi = Math.PI;\nexport const TwoPi = 2 * Math.PI;\n\nexport function distance(x: number, y: number): number {\n return Math.sqrt(x * x + y * y);\n}\n\nexport function distanceSquared(x: number, y: number): number {\n return x * x + y * y;\n}\n\n/** Unit vector in the direction of (x, y). */\nexport function directionVector(x: number, y: number): Point {\n const d = distance(x, y);\n if (!(d > 0)) throw new Error('Required distance greater than zero');\n return new Point(x / d, y / d);\n}\n\nexport function directionVectorFromAngle(angleRadians: number): Point {\n return new Point(Math.cos(angleRadians), Math.sin(angleRadians));\n}\n\nexport function radialToCartesian(\n radius: number,\n angleRadians: number,\n center: Point = Zero,\n): Point {\n return directionVectorFromAngle(angleRadians).times(radius).plus(center);\n}\n\nexport function square(x: number): number {\n return x * x;\n}\n\n/** Linearly interpolates between `start` and `stop`. */\nexport function interpolate(start: number, stop: number, fraction: number): number {\n return (1 - fraction) * start + fraction * stop;\n}\n\nexport function interpolatePoint(start: Point, stop: Point, fraction: number): Point {\n return new Point(interpolate(start.x, stop.x, fraction), interpolate(start.y, stop.y, fraction));\n}\n\n/** Like `num % mod`, but always positive: positiveModulo(-4, 3) = 2. */\nexport function positiveModulo(num: number, mod: number): number {\n return ((num % mod) + mod) % mod;\n}\n\n/** Whether C is on the line through A and B, within `tolerance`. */\nexport function collinearIsh(\n aX: number,\n aY: number,\n bX: number,\n bY: number,\n cX: number,\n cY: number,\n tolerance: number = DistanceEpsilon,\n): boolean {\n // The dot product of a perpendicular angle is 0. By rotating one of the vectors,\n // we save the calculations to convert the dot product to degrees afterwards.\n const ab = new Point(bX - aX, bY - aY).rotate90();\n const ac = new Point(cX - aX, cY - aY);\n const dotProduct = Math.abs(ab.dotProduct(ac));\n const relativeTolerance = tolerance * ab.getDistance() * ac.getDistance();\n return dotProduct < tolerance || dotProduct < relativeTolerance;\n}\n\n/** Approximates whether the corner at `current` is convex. */\nexport function convex(previous: Point, current: Point, next: Point): boolean {\n // (androidx b/369320447: fast, but not reliable.)\n return current.minus(previous).clockwise(next.minus(current));\n}\n\n/** Ternary search for the minimum of `f` between `v0` and `v1`. */\nexport function findMinimum(\n v0: number,\n v1: number,\n tolerance: number,\n f: (value: number) => number,\n): number {\n let a = v0;\n let b = v1;\n while (b - a > tolerance) {\n const c1 = (2 * a + b) / 3;\n const c2 = (2 * b + a) / 3;\n if (f(c1) < f(c2)) b = c2;\n else a = c1;\n }\n return (a + b) / 2;\n}\n"],"mappings":"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"}
@@ -0,0 +1,140 @@
1
+ import { Point, positiveModulo } from "./point.js";
2
+ import { Corner } from "./features.js";
3
+ //#region src/shapes/polygon-measure.ts
4
+ /** Approximates arc length with a 3-segment polyline (≥ 98.5% of the true length). */
5
+ var LengthMeasurer = class {
6
+ segments = 3;
7
+ measureCubic(c) {
8
+ return this.closestProgressTo(c, Infinity)[1];
9
+ }
10
+ findCubicCutPoint(c, m) {
11
+ return this.closestProgressTo(c, m)[0];
12
+ }
13
+ closestProgressTo(cubic, threshold) {
14
+ let total = 0;
15
+ let remainder = threshold;
16
+ let prev = new Point(cubic.anchor0X, cubic.anchor0Y);
17
+ for (let i = 1; i <= this.segments; i++) {
18
+ const progress = i / this.segments;
19
+ const point = cubic.pointOnCurve(progress);
20
+ const segment = point.minus(prev).getDistance();
21
+ if (segment >= remainder) return [progress - (1 - remainder / segment) / this.segments, threshold];
22
+ remainder -= segment;
23
+ total += segment;
24
+ prev = point;
25
+ }
26
+ return [1, total];
27
+ }
28
+ };
29
+ /** A cubic with its `[start, end]` progress range along the polygon outline. */
30
+ var MeasuredCubic = class MeasuredCubic {
31
+ measurer;
32
+ cubic;
33
+ start;
34
+ end;
35
+ measuredSize;
36
+ constructor(measurer, cubic, start, end) {
37
+ this.measurer = measurer;
38
+ this.cubic = cubic;
39
+ this.start = start;
40
+ this.end = end;
41
+ if (!(end >= start)) throw new Error("endOutlineProgress is expected to be equal or greater than startOutlineProgress");
42
+ this.measuredSize = measurer.measureCubic(cubic);
43
+ }
44
+ get startOutlineProgress() {
45
+ return this.start;
46
+ }
47
+ get endOutlineProgress() {
48
+ return this.end;
49
+ }
50
+ updateProgressRange(start = this.start, end = this.end) {
51
+ if (!(end >= start)) throw new Error("endOutlineProgress is expected to be equal or greater than startOutlineProgress");
52
+ this.start = start;
53
+ this.end = end;
54
+ }
55
+ cutAtProgress(cutOutlineProgress) {
56
+ const bounded = Math.min(Math.max(cutOutlineProgress, this.start), this.end);
57
+ const relativeProgress = (bounded - this.start) / (this.end - this.start);
58
+ const t = this.measurer.findCubicCutPoint(this.cubic, relativeProgress * this.measuredSize);
59
+ if (!(t >= 0 && t <= 1)) throw new Error("Cubic cut point is expected to be between 0 and 1");
60
+ const [c1, c2] = this.cubic.split(t);
61
+ return [new MeasuredCubic(this.measurer, c1, this.start, bounded), new MeasuredCubic(this.measurer, c2, bounded, this.end)];
62
+ }
63
+ toString() {
64
+ return `MeasuredCubic(outlineProgress=[${this.start} .. ${this.end}], size=${this.measuredSize}, cubic=${this.cubic})`;
65
+ }
66
+ };
67
+ /** A polygon's cubics, measured and mapped to outline progress in `[0, 1]`. */
68
+ var MeasuredPolygon = class MeasuredPolygon {
69
+ measurer;
70
+ features;
71
+ cubics;
72
+ constructor(measurer, features, cubics, outlineProgress) {
73
+ this.measurer = measurer;
74
+ this.features = features;
75
+ if (outlineProgress.length !== cubics.length + 1) throw new Error("Outline progress size is expected to be the cubics size + 1");
76
+ if (outlineProgress[0] !== 0) throw new Error("First outline progress value is expected to be zero");
77
+ if (outlineProgress[outlineProgress.length - 1] !== 1) throw new Error("Last outline progress value is expected to be one");
78
+ const measured = [];
79
+ let startOutlineProgress = 0;
80
+ for (let i = 0; i < cubics.length; i++) if (outlineProgress[i + 1] - outlineProgress[i] > 1e-4) {
81
+ measured.push(new MeasuredCubic(measurer, cubics[i], startOutlineProgress, outlineProgress[i + 1]));
82
+ startOutlineProgress = outlineProgress[i + 1];
83
+ }
84
+ measured[measured.length - 1].updateProgressRange(void 0, 1);
85
+ this.cubics = measured;
86
+ }
87
+ get size() {
88
+ return this.cubics.length;
89
+ }
90
+ get(index) {
91
+ return this.cubics[index];
92
+ }
93
+ /** Cuts the outline at `cuttingPoint` and shifts it so that point becomes progress 0. */
94
+ cutAndShift(cuttingPoint) {
95
+ if (!(cuttingPoint >= 0 && cuttingPoint <= 1)) throw new Error("Cutting point is expected to be between 0 and 1");
96
+ if (cuttingPoint < 1e-4) return this;
97
+ const n = this.cubics.length;
98
+ const targetIndex = this.cubics.findIndex((c) => cuttingPoint >= c.startOutlineProgress && cuttingPoint <= c.endOutlineProgress);
99
+ const [b1, b2] = this.cubics[targetIndex].cutAtProgress(cuttingPoint);
100
+ const retCubics = [b2.cubic];
101
+ for (let i = 1; i < n; i++) retCubics.push(this.cubics[(i + targetIndex) % n].cubic);
102
+ retCubics.push(b1.cubic);
103
+ const retOutlineProgress = [0];
104
+ for (let index = 1; index <= n; index++) {
105
+ const cubicIndex = (targetIndex + index - 1) % n;
106
+ retOutlineProgress.push(positiveModulo(this.cubics[cubicIndex].endOutlineProgress - cuttingPoint, 1));
107
+ }
108
+ retOutlineProgress.push(1);
109
+ const newFeatures = this.features.map((f) => ({
110
+ progress: positiveModulo(f.progress - cuttingPoint, 1),
111
+ feature: f.feature
112
+ }));
113
+ return new MeasuredPolygon(this.measurer, newFeatures, retCubics, retOutlineProgress);
114
+ }
115
+ static measurePolygon(measurer, polygon) {
116
+ const cubics = [];
117
+ const featureToCubic = [];
118
+ for (const feature of polygon.features) feature.cubics.forEach((cubic, cubicIndex) => {
119
+ if (feature instanceof Corner && cubicIndex === Math.floor(feature.cubics.length / 2)) featureToCubic.push([feature, cubics.length]);
120
+ cubics.push(cubic);
121
+ });
122
+ const measures = [0];
123
+ for (const cubic of cubics) {
124
+ const size = measurer.measureCubic(cubic);
125
+ if (!(size >= 0)) throw new Error("Measured cubic is expected to be greater or equal to zero");
126
+ measures.push(measures[measures.length - 1] + size);
127
+ }
128
+ const totalMeasure = measures[measures.length - 1];
129
+ const outlineProgress = measures.map((m) => m / totalMeasure);
130
+ const features = featureToCubic.map(([feature, ix]) => ({
131
+ progress: positiveModulo((outlineProgress[ix] + outlineProgress[ix + 1]) / 2, 1),
132
+ feature
133
+ }));
134
+ return new MeasuredPolygon(measurer, features, cubics, outlineProgress);
135
+ }
136
+ };
137
+ //#endregion
138
+ export { LengthMeasurer, MeasuredCubic, MeasuredPolygon };
139
+
140
+ //# sourceMappingURL=polygon-measure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"polygon-measure.js","names":[],"sources":["../../src/shapes/polygon-measure.ts"],"sourcesContent":["/*\n * Port of androidx.graphics.shapes PolygonMeasure.kt (Apache-2.0, see LICENSE-androidx.md).\n */\nimport type { Cubic } from './cubic';\nimport { Corner, type Feature } from './features';\nimport { DistanceEpsilon, Point, positiveModulo } from './point';\nimport type { RoundedPolygon } from './rounded-polygon';\n\n/** A feature together with its progress along the polygon outline. */\nexport interface ProgressableFeature {\n readonly progress: number;\n readonly feature: Feature;\n}\n\nexport interface Measurer {\n /** A non-negative measure of the cubic, e.g. its length. */\n measureCubic(c: Cubic): number;\n /** The `t` at which the cubic's measure from its start reaches `m`. */\n findCubicCutPoint(c: Cubic, m: number): number;\n}\n\n/** Approximates arc length with a 3-segment polyline (≥ 98.5% of the true length). */\nexport class LengthMeasurer implements Measurer {\n private readonly segments = 3;\n\n measureCubic(c: Cubic): number {\n return this.closestProgressTo(c, Infinity)[1];\n }\n\n findCubicCutPoint(c: Cubic, m: number): number {\n return this.closestProgressTo(c, m)[0];\n }\n\n private closestProgressTo(cubic: Cubic, threshold: number): [number, number] {\n let total = 0;\n let remainder = threshold;\n let prev = new Point(cubic.anchor0X, cubic.anchor0Y);\n for (let i = 1; i <= this.segments; i++) {\n const progress = i / this.segments;\n const point = cubic.pointOnCurve(progress);\n const segment = point.minus(prev).getDistance();\n if (segment >= remainder) {\n return [progress - (1 - remainder / segment) / this.segments, threshold];\n }\n remainder -= segment;\n total += segment;\n prev = point;\n }\n return [1, total];\n }\n}\n\n/** A cubic with its `[start, end]` progress range along the polygon outline. */\nexport class MeasuredCubic {\n readonly measuredSize: number;\n\n constructor(\n private readonly measurer: Measurer,\n readonly cubic: Cubic,\n private start: number,\n private end: number,\n ) {\n if (!(end >= start)) {\n throw new Error(\n 'endOutlineProgress is expected to be equal or greater than startOutlineProgress',\n );\n }\n this.measuredSize = measurer.measureCubic(cubic);\n }\n\n get startOutlineProgress(): number {\n return this.start;\n }\n\n get endOutlineProgress(): number {\n return this.end;\n }\n\n updateProgressRange(start = this.start, end = this.end): void {\n if (!(end >= start)) {\n throw new Error(\n 'endOutlineProgress is expected to be equal or greater than startOutlineProgress',\n );\n }\n this.start = start;\n this.end = end;\n }\n\n cutAtProgress(cutOutlineProgress: number): [MeasuredCubic, MeasuredCubic] {\n // Float error upstream can land the cut just outside this cubic; clamp it.\n const bounded = Math.min(Math.max(cutOutlineProgress, this.start), this.end);\n const relativeProgress = (bounded - this.start) / (this.end - this.start);\n const t = this.measurer.findCubicCutPoint(this.cubic, relativeProgress * this.measuredSize);\n if (!(t >= 0 && t <= 1)) throw new Error('Cubic cut point is expected to be between 0 and 1');\n const [c1, c2] = this.cubic.split(t);\n return [\n new MeasuredCubic(this.measurer, c1, this.start, bounded),\n new MeasuredCubic(this.measurer, c2, bounded, this.end),\n ];\n }\n\n toString(): string {\n return `MeasuredCubic(outlineProgress=[${this.start} .. ${this.end}], size=${this.measuredSize}, cubic=${this.cubic})`;\n }\n}\n\n/** A polygon's cubics, measured and mapped to outline progress in `[0, 1]`. */\nexport class MeasuredPolygon {\n private readonly cubics: readonly MeasuredCubic[];\n\n private constructor(\n private readonly measurer: Measurer,\n readonly features: readonly ProgressableFeature[],\n cubics: readonly Cubic[],\n outlineProgress: readonly number[],\n ) {\n if (outlineProgress.length !== cubics.length + 1) {\n throw new Error('Outline progress size is expected to be the cubics size + 1');\n }\n if (outlineProgress[0] !== 0) {\n throw new Error('First outline progress value is expected to be zero');\n }\n if (outlineProgress[outlineProgress.length - 1] !== 1) {\n throw new Error('Last outline progress value is expected to be one');\n }\n const measured: MeasuredCubic[] = [];\n let startOutlineProgress = 0;\n for (let i = 0; i < cubics.length; i++) {\n // Filter out \"empty\" cubics.\n if (outlineProgress[i + 1]! - outlineProgress[i]! > DistanceEpsilon) {\n measured.push(\n new MeasuredCubic(measurer, cubics[i]!, startOutlineProgress, outlineProgress[i + 1]!),\n );\n startOutlineProgress = outlineProgress[i + 1]!;\n }\n }\n // Empty cubics may have been dropped at the end; the last one must still end at 1.\n measured[measured.length - 1]!.updateProgressRange(undefined, 1);\n this.cubics = measured;\n }\n\n get size(): number {\n return this.cubics.length;\n }\n\n get(index: number): MeasuredCubic | undefined {\n return this.cubics[index];\n }\n\n /** Cuts the outline at `cuttingPoint` and shifts it so that point becomes progress 0. */\n cutAndShift(cuttingPoint: number): MeasuredPolygon {\n if (!(cuttingPoint >= 0 && cuttingPoint <= 1)) {\n throw new Error('Cutting point is expected to be between 0 and 1');\n }\n if (cuttingPoint < DistanceEpsilon) return this;\n const n = this.cubics.length;\n const targetIndex = this.cubics.findIndex(\n (c) => cuttingPoint >= c.startOutlineProgress && cuttingPoint <= c.endOutlineProgress,\n );\n const [b1, b2] = this.cubics[targetIndex]!.cutAtProgress(cuttingPoint);\n\n // The tail of the cut cubic, every other cubic in order, then the head of the cut cubic.\n const retCubics = [b2.cubic];\n for (let i = 1; i < n; i++) retCubics.push(this.cubics[(i + targetIndex) % n]!.cubic);\n retCubics.push(b1.cubic);\n\n const retOutlineProgress: number[] = [0];\n for (let index = 1; index <= n; index++) {\n const cubicIndex = (targetIndex + index - 1) % n;\n retOutlineProgress.push(\n positiveModulo(this.cubics[cubicIndex]!.endOutlineProgress - cuttingPoint, 1),\n );\n }\n retOutlineProgress.push(1);\n\n const newFeatures = this.features.map((f) => ({\n progress: positiveModulo(f.progress - cuttingPoint, 1),\n feature: f.feature,\n }));\n return new MeasuredPolygon(this.measurer, newFeatures, retCubics, retOutlineProgress);\n }\n\n static measurePolygon(measurer: Measurer, polygon: RoundedPolygon): MeasuredPolygon {\n const cubics: Cubic[] = [];\n const featureToCubic: [Feature, number][] = [];\n // Collect the cubics; each corner is represented by its middle cubic.\n for (const feature of polygon.features) {\n feature.cubics.forEach((cubic, cubicIndex) => {\n if (feature instanceof Corner && cubicIndex === Math.floor(feature.cubics.length / 2)) {\n featureToCubic.push([feature, cubics.length]);\n }\n cubics.push(cubic);\n });\n }\n\n const measures = [0];\n for (const cubic of cubics) {\n const size = measurer.measureCubic(cubic);\n if (!(size >= 0))\n throw new Error('Measured cubic is expected to be greater or equal to zero');\n measures.push(measures[measures.length - 1]! + size);\n }\n const totalMeasure = measures[measures.length - 1]!;\n const outlineProgress = measures.map((m) => m / totalMeasure);\n\n const features = featureToCubic.map(([feature, ix]) => ({\n progress: positiveModulo((outlineProgress[ix]! + outlineProgress[ix + 1]!) / 2, 1),\n feature,\n }));\n return new MeasuredPolygon(measurer, features, cubics, outlineProgress);\n }\n}\n"],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ import { CornerRounding } from "./corner-rounding.js";
2
+ import { Point, PointTransformer } from "./point.js";
3
+ import { Cubic } from "./cubic.js";
4
+ import { Feature } from "./features.js";
5
+ //#region src/shapes/rounded-polygon.d.ts
6
+ /**
7
+ * A closed shape made of cubic Bézier curves, built from vertices with optional per-corner
8
+ * rounding (or from features). Its `features` (corners and edges) drive morph matching.
9
+ */
10
+ export declare class RoundedPolygon {
11
+ readonly features: readonly Feature[];
12
+ readonly center: Point;
13
+ readonly cubics: readonly Cubic[];
14
+ constructor(features: readonly Feature[], center: Point);
15
+ get centerX(): number;
16
+ get centerY(): number;
17
+ /** A regular polygon with `numVertices` vertices on a circle of `radius`. */
18
+ static fromNumVertices(numVertices: number, { radius, centerX, centerY, rounding, perVertexRounding }?: {
19
+ radius?: number;
20
+ centerX?: number;
21
+ centerY?: number;
22
+ rounding?: CornerRounding;
23
+ perVertexRounding?: readonly CornerRounding[];
24
+ }): RoundedPolygon;
25
+ /** A polygon through `vertices` (`[x0, y0, x1, y1, …]`), with optional corner rounding. */
26
+ static fromVertices(vertices: readonly number[], { rounding, perVertexRounding, centerX, centerY }?: {
27
+ rounding?: CornerRounding;
28
+ perVertexRounding?: readonly CornerRounding[];
29
+ centerX?: number;
30
+ centerY?: number;
31
+ }): RoundedPolygon;
32
+ /** A polygon from existing features; the center defaults to the average of their anchors. */
33
+ static fromFeatures(features: readonly Feature[], centerX?: number, centerY?: number): RoundedPolygon;
34
+ transformed(f: PointTransformer): RoundedPolygon;
35
+ /** Scales and translates the shape into the unit square (0..1), centred if not square. */
36
+ normalized(): RoundedPolygon;
37
+ /** Bounds of a circle around the center that contains the shape at any rotation. */
38
+ calculateMaxBounds(bounds?: number[]): number[];
39
+ /** `[minX, minY, maxX, maxY]`; `approximate` (default) uses control-point hulls. */
40
+ calculateBounds(bounds?: number[], approximate?: boolean): number[];
41
+ toString(): string;
42
+ }
43
+ //#endregion
44
+ //# sourceMappingURL=rounded-polygon.d.ts.map
@@ -0,0 +1,278 @@
1
+ import { CornerRounding } from "./corner-rounding.js";
2
+ import { Point, convex, directionVector, distance, distanceSquared, interpolatePoint, radialToCartesian, square } from "./point.js";
3
+ import { Cubic } from "./cubic.js";
4
+ import { Corner, Edge } from "./features.js";
5
+ //#region src/shapes/rounded-polygon.ts
6
+ /**
7
+ * A closed shape made of cubic Bézier curves, built from vertices with optional per-corner
8
+ * rounding (or from features). Its `features` (corners and edges) drive morph matching.
9
+ */
10
+ var RoundedPolygon = class RoundedPolygon {
11
+ features;
12
+ center;
13
+ cubics;
14
+ constructor(features, center) {
15
+ this.features = features;
16
+ this.center = center;
17
+ this.cubics = buildCubics(features, center);
18
+ let prev = this.cubics[this.cubics.length - 1];
19
+ for (const cubic of this.cubics) {
20
+ if (Math.abs(cubic.anchor0X - prev.anchor1X) > 1e-4 || Math.abs(cubic.anchor0Y - prev.anchor1Y) > 1e-4) throw new Error("RoundedPolygon must be contiguous, with the anchor points of all curves matching the anchor points of the preceding and succeeding cubics");
21
+ prev = cubic;
22
+ }
23
+ }
24
+ get centerX() {
25
+ return this.center.x;
26
+ }
27
+ get centerY() {
28
+ return this.center.y;
29
+ }
30
+ /** A regular polygon with `numVertices` vertices on a circle of `radius`. */
31
+ static fromNumVertices(numVertices, { radius = 1, centerX = 0, centerY = 0, rounding = CornerRounding.Unrounded, perVertexRounding } = {}) {
32
+ return RoundedPolygon.fromVertices(verticesFromNumVerts(numVertices, radius, centerX, centerY), {
33
+ rounding,
34
+ perVertexRounding,
35
+ centerX,
36
+ centerY
37
+ });
38
+ }
39
+ /** A polygon through `vertices` (`[x0, y0, x1, y1, …]`), with optional corner rounding. */
40
+ static fromVertices(vertices, { rounding = CornerRounding.Unrounded, perVertexRounding, centerX, centerY } = {}) {
41
+ if (vertices.length < 6) throw new Error("Polygons must have at least 3 vertices");
42
+ if (vertices.length % 2 === 1) throw new Error("The vertices array should have even size");
43
+ if (perVertexRounding && perVertexRounding.length * 2 !== vertices.length) throw new Error("perVertexRounding list should be either null or the same size as the number of vertices (vertices.size / 2)");
44
+ const n = vertices.length / 2;
45
+ const vertex = (i) => new Point(vertices[i * 2], vertices[i * 2 + 1]);
46
+ const roundedCorners = [];
47
+ for (let i = 0; i < n; i++) roundedCorners.push(new RoundedCorner(vertex((i + n - 1) % n), vertex(i), vertex((i + 1) % n), perVertexRounding?.[i] ?? rounding));
48
+ const cutAdjusts = roundedCorners.map((corner, ix) => {
49
+ const next = roundedCorners[(ix + 1) % n];
50
+ const expectedRoundCut = corner.expectedRoundCut + next.expectedRoundCut;
51
+ const expectedCut = corner.expectedCut + next.expectedCut;
52
+ const a = vertex(ix);
53
+ const b = vertex((ix + 1) % n);
54
+ const sideSize = distance(a.x - b.x, a.y - b.y);
55
+ if (expectedRoundCut > sideSize) return [sideSize / expectedRoundCut, 0];
56
+ if (expectedCut > sideSize) return [1, (sideSize - expectedRoundCut) / (expectedCut - expectedRoundCut)];
57
+ return [1, 1];
58
+ });
59
+ const corners = roundedCorners.map((corner, i) => {
60
+ const allowedCuts = [0, 1].map((delta) => {
61
+ const [roundCutRatio, cutRatio] = cutAdjusts[(i + n - 1 + delta) % n];
62
+ return corner.expectedRoundCut * roundCutRatio + (corner.expectedCut - corner.expectedRoundCut) * cutRatio;
63
+ });
64
+ return corner.getCubics(allowedCuts[0], allowedCuts[1]);
65
+ });
66
+ const features = [];
67
+ for (let i = 0; i < n; i++) {
68
+ const isConvex = convex(vertex((i + n - 1) % n), vertex(i), vertex((i + 1) % n));
69
+ features.push(new Corner(corners[i], isConvex));
70
+ const end = corners[i][corners[i].length - 1];
71
+ const start = corners[(i + 1) % n][0];
72
+ features.push(new Edge([Cubic.straightLine(end.anchor1X, end.anchor1Y, start.anchor0X, start.anchor0Y)]));
73
+ }
74
+ const center = centerX === void 0 || centerY === void 0 ? calculateCenter(vertices) : new Point(centerX, centerY);
75
+ return new RoundedPolygon(features, center);
76
+ }
77
+ /** A polygon from existing features; the center defaults to the average of their anchors. */
78
+ static fromFeatures(features, centerX, centerY) {
79
+ if (features.length < 2) throw new Error("Polygons must have at least 2 features");
80
+ const vertices = [];
81
+ for (const feature of features) for (const cubic of feature.cubics) vertices.push(cubic.anchor0X, cubic.anchor0Y);
82
+ const computed = calculateCenter(vertices);
83
+ return new RoundedPolygon(features, new Point(centerX === void 0 || Number.isNaN(centerX) ? computed.x : centerX, centerY === void 0 || Number.isNaN(centerY) ? computed.y : centerY));
84
+ }
85
+ transformed(f) {
86
+ return new RoundedPolygon(this.features.map((feature) => feature.transformed(f)), this.center.transformed(f));
87
+ }
88
+ /** Scales and translates the shape into the unit square (0..1), centred if not square. */
89
+ normalized() {
90
+ const bounds = this.calculateBounds();
91
+ const width = bounds[2] - bounds[0];
92
+ const height = bounds[3] - bounds[1];
93
+ const side = Math.max(width, height);
94
+ const offsetX = (side - width) / 2 - bounds[0];
95
+ const offsetY = (side - height) / 2 - bounds[1];
96
+ return this.transformed((x, y) => [(x + offsetX) / side, (y + offsetY) / side]);
97
+ }
98
+ /** Bounds of a circle around the center that contains the shape at any rotation. */
99
+ calculateMaxBounds(bounds = new Array(4).fill(0)) {
100
+ let maxDistSquared = 0;
101
+ for (const cubic of this.cubics) {
102
+ const anchorDistance = distanceSquared(cubic.anchor0X - this.centerX, cubic.anchor0Y - this.centerY);
103
+ const middle = cubic.pointOnCurve(.5);
104
+ const middleDistance = distanceSquared(middle.x - this.centerX, middle.y - this.centerY);
105
+ maxDistSquared = Math.max(maxDistSquared, anchorDistance, middleDistance);
106
+ }
107
+ const d = Math.sqrt(maxDistSquared);
108
+ bounds[0] = this.centerX - d;
109
+ bounds[1] = this.centerY - d;
110
+ bounds[2] = this.centerX + d;
111
+ bounds[3] = this.centerY + d;
112
+ return bounds;
113
+ }
114
+ /** `[minX, minY, maxX, maxY]`; `approximate` (default) uses control-point hulls. */
115
+ calculateBounds(bounds = new Array(4).fill(0), approximate = true) {
116
+ let minX = Number.POSITIVE_INFINITY;
117
+ let minY = Number.POSITIVE_INFINITY;
118
+ let maxX = Number.NEGATIVE_INFINITY;
119
+ let maxY = Number.NEGATIVE_INFINITY;
120
+ for (const cubic of this.cubics) {
121
+ cubic.calculateBounds(bounds, approximate);
122
+ minX = Math.min(minX, bounds[0]);
123
+ minY = Math.min(minY, bounds[1]);
124
+ maxX = Math.max(maxX, bounds[2]);
125
+ maxY = Math.max(maxY, bounds[3]);
126
+ }
127
+ bounds[0] = minX;
128
+ bounds[1] = minY;
129
+ bounds[2] = maxX;
130
+ bounds[3] = maxY;
131
+ return bounds;
132
+ }
133
+ toString() {
134
+ return `[RoundedPolygon. Cubics = ${this.cubics.join(", ")} || Features = ${this.features.join(", ")} || Center = (${this.centerX}, ${this.centerY})]`;
135
+ }
136
+ };
137
+ function buildCubics(features, center) {
138
+ const result = [];
139
+ let firstCubic;
140
+ let lastCubic;
141
+ let firstFeatureSplitStart;
142
+ let firstFeatureSplitEnd;
143
+ if (features.length > 0 && features[0].cubics.length === 3) {
144
+ const [start, end] = features[0].cubics[1].split(.5);
145
+ firstFeatureSplitStart = [features[0].cubics[0], start];
146
+ firstFeatureSplitEnd = [end, features[0].cubics[2]];
147
+ }
148
+ for (let i = 0; i <= features.length; i++) {
149
+ let featureCubics;
150
+ if (i === 0 && firstFeatureSplitEnd) featureCubics = firstFeatureSplitEnd;
151
+ else if (i === features.length) {
152
+ if (firstFeatureSplitStart) featureCubics = firstFeatureSplitStart;
153
+ else break;
154
+ } else featureCubics = features[i].cubics;
155
+ for (const cubic of featureCubics) if (!cubic.zeroLength()) {
156
+ if (lastCubic) result.push(lastCubic);
157
+ lastCubic = cubic;
158
+ firstCubic ??= cubic;
159
+ } else if (lastCubic) {
160
+ const points = [...lastCubic.points];
161
+ points[6] = cubic.anchor1X;
162
+ points[7] = cubic.anchor1Y;
163
+ lastCubic = new Cubic(points);
164
+ }
165
+ }
166
+ if (lastCubic && firstCubic) result.push(Cubic.of(lastCubic.anchor0X, lastCubic.anchor0Y, lastCubic.control0X, lastCubic.control0Y, lastCubic.control1X, lastCubic.control1Y, firstCubic.anchor0X, firstCubic.anchor0Y));
167
+ else result.push(Cubic.empty(center.x, center.y));
168
+ return result;
169
+ }
170
+ function calculateCenter(vertices) {
171
+ let cumulativeX = 0;
172
+ let cumulativeY = 0;
173
+ for (let i = 0; i < vertices.length; i += 2) {
174
+ cumulativeX += vertices[i];
175
+ cumulativeY += vertices[i + 1];
176
+ }
177
+ return new Point(cumulativeX / (vertices.length / 2), cumulativeY / (vertices.length / 2));
178
+ }
179
+ function verticesFromNumVerts(numVertices, radius, centerX, centerY) {
180
+ const result = [];
181
+ for (let i = 0; i < numVertices; i++) {
182
+ const vertex = radialToCartesian(radius, Math.PI / numVertices * 2 * i).plus(new Point(centerX, centerY));
183
+ result.push(vertex.x, vertex.y);
184
+ }
185
+ return result;
186
+ }
187
+ var RoundedCorner = class {
188
+ p0;
189
+ p1;
190
+ p2;
191
+ d1;
192
+ d2;
193
+ cornerRadius;
194
+ smoothing;
195
+ cosAngle;
196
+ sinAngle;
197
+ expectedRoundCut;
198
+ /** Center of the rounding circle; equals p1 when there is no rounding. */
199
+ center = new Point(0, 0);
200
+ constructor(p0, p1, p2, rounding) {
201
+ this.p0 = p0;
202
+ this.p1 = p1;
203
+ this.p2 = p2;
204
+ const v01 = p0.minus(p1);
205
+ const v21 = p2.minus(p1);
206
+ const d01 = v01.getDistance();
207
+ const d21 = v21.getDistance();
208
+ if (d01 > 0 && d21 > 0) {
209
+ this.d1 = v01.div(d01);
210
+ this.d2 = v21.div(d21);
211
+ this.cornerRadius = rounding?.radius ?? 0;
212
+ this.smoothing = rounding?.smoothing ?? 0;
213
+ this.cosAngle = this.d1.dotProduct(this.d2);
214
+ this.sinAngle = Math.sqrt(1 - square(this.cosAngle));
215
+ this.expectedRoundCut = this.sinAngle > .001 ? this.cornerRadius * (this.cosAngle + 1) / this.sinAngle : 0;
216
+ } else {
217
+ this.d1 = new Point(0, 0);
218
+ this.d2 = new Point(0, 0);
219
+ this.cornerRadius = 0;
220
+ this.smoothing = 0;
221
+ this.cosAngle = 0;
222
+ this.sinAngle = 0;
223
+ this.expectedRoundCut = 0;
224
+ }
225
+ }
226
+ /** Smoothing lengthens the cut: 0 equals expectedRoundCut, 1 doubles it. */
227
+ get expectedCut() {
228
+ return (1 + this.smoothing) * this.expectedRoundCut;
229
+ }
230
+ getCubics(allowedCut0, allowedCut1 = allowedCut0) {
231
+ const allowedCut = Math.min(allowedCut0, allowedCut1);
232
+ if (this.expectedRoundCut < 1e-4 || allowedCut < 1e-4 || this.cornerRadius < 1e-4) {
233
+ this.center = this.p1;
234
+ return [Cubic.straightLine(this.p1.x, this.p1.y, this.p1.x, this.p1.y)];
235
+ }
236
+ const actualRoundCut = Math.min(allowedCut, this.expectedRoundCut);
237
+ const actualSmoothing0 = this.calculateActualSmoothingValue(allowedCut0);
238
+ const actualSmoothing1 = this.calculateActualSmoothingValue(allowedCut1);
239
+ const actualR = this.cornerRadius * actualRoundCut / this.expectedRoundCut;
240
+ const centerDistance = Math.sqrt(square(actualR) + square(actualRoundCut));
241
+ this.center = this.p1.plus(this.d1.plus(this.d2).div(2).getDirection().times(centerDistance));
242
+ const circleIntersection0 = this.p1.plus(this.d1.times(actualRoundCut));
243
+ const circleIntersection2 = this.p1.plus(this.d2.times(actualRoundCut));
244
+ const flanking0 = this.computeFlankingCurve(actualRoundCut, actualSmoothing0, this.p1, this.p0, circleIntersection0, circleIntersection2, this.center, actualR);
245
+ const flanking2 = this.computeFlankingCurve(actualRoundCut, actualSmoothing1, this.p1, this.p2, circleIntersection2, circleIntersection0, this.center, actualR).reverse();
246
+ return [
247
+ flanking0,
248
+ Cubic.circularArc(this.center.x, this.center.y, flanking0.anchor1X, flanking0.anchor1Y, flanking2.anchor0X, flanking2.anchor0Y),
249
+ flanking2
250
+ ];
251
+ }
252
+ calculateActualSmoothingValue(allowedCut) {
253
+ if (allowedCut > this.expectedCut) return this.smoothing;
254
+ if (allowedCut > this.expectedRoundCut) return this.smoothing * (allowedCut - this.expectedRoundCut) / (this.expectedCut - this.expectedRoundCut);
255
+ return 0;
256
+ }
257
+ computeFlankingCurve(actualRoundCut, actualSmoothingValues, corner, sideStart, circleSegmentIntersection, otherCircleSegmentIntersection, circleCenter, actualR) {
258
+ const sideDirection = sideStart.minus(corner).getDirection();
259
+ const curveStart = corner.plus(sideDirection.times(actualRoundCut * (1 + actualSmoothingValues)));
260
+ const p = interpolatePoint(circleSegmentIntersection, circleSegmentIntersection.plus(otherCircleSegmentIntersection).div(2), actualSmoothingValues);
261
+ const curveEnd = circleCenter.plus(directionVector(p.x - circleCenter.x, p.y - circleCenter.y).times(actualR));
262
+ const anchorEnd = lineIntersection(sideStart, sideDirection, curveEnd, curveEnd.minus(circleCenter).rotate90()) ?? circleSegmentIntersection;
263
+ const anchorStart = curveStart.plus(anchorEnd.times(2)).div(3);
264
+ return Cubic.fromPoints(curveStart, anchorStart, anchorEnd, curveEnd);
265
+ }
266
+ };
267
+ function lineIntersection(p0, d0, p1, d1) {
268
+ const rotatedD1 = d1.rotate90();
269
+ const den = d0.dotProduct(rotatedD1);
270
+ if (Math.abs(den) < 1e-4) return void 0;
271
+ const num = p1.minus(p0).dotProduct(rotatedD1);
272
+ if (Math.abs(den) < 1e-4 * Math.abs(num)) return void 0;
273
+ return p0.plus(d0.times(num / den));
274
+ }
275
+ //#endregion
276
+ export { RoundedPolygon, calculateCenter };
277
+
278
+ //# sourceMappingURL=rounded-polygon.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rounded-polygon.js","names":[],"sources":["../../src/shapes/rounded-polygon.ts"],"sourcesContent":["/*\n * Port of androidx.graphics.shapes RoundedPolygon.kt (Apache-2.0, see LICENSE-androidx.md).\n */\nimport { CornerRounding } from './corner-rounding';\nimport { Cubic } from './cubic';\nimport { Corner, Edge, type Feature } from './features';\nimport {\n DistanceEpsilon,\n Point,\n convex,\n directionVector,\n distance,\n distanceSquared,\n interpolatePoint,\n radialToCartesian,\n square,\n type PointTransformer,\n} from './point';\n\n/**\n * A closed shape made of cubic Bézier curves, built from vertices with optional per-corner\n * rounding (or from features). Its `features` (corners and edges) drive morph matching.\n */\nexport class RoundedPolygon {\n readonly cubics: readonly Cubic[];\n\n constructor(\n readonly features: readonly Feature[],\n readonly center: Point,\n ) {\n this.cubics = buildCubics(features, center);\n let prev = this.cubics[this.cubics.length - 1]!;\n for (const cubic of this.cubics) {\n if (\n Math.abs(cubic.anchor0X - prev.anchor1X) > DistanceEpsilon ||\n Math.abs(cubic.anchor0Y - prev.anchor1Y) > DistanceEpsilon\n ) {\n throw new Error(\n 'RoundedPolygon must be contiguous, with the anchor points of all curves matching the anchor points of the preceding and succeeding cubics',\n );\n }\n prev = cubic;\n }\n }\n\n get centerX(): number {\n return this.center.x;\n }\n\n get centerY(): number {\n return this.center.y;\n }\n\n /** A regular polygon with `numVertices` vertices on a circle of `radius`. */\n static fromNumVertices(\n numVertices: number,\n {\n radius = 1,\n centerX = 0,\n centerY = 0,\n rounding = CornerRounding.Unrounded,\n perVertexRounding,\n }: {\n radius?: number;\n centerX?: number;\n centerY?: number;\n rounding?: CornerRounding;\n perVertexRounding?: readonly CornerRounding[];\n } = {},\n ): RoundedPolygon {\n return RoundedPolygon.fromVertices(\n verticesFromNumVerts(numVertices, radius, centerX, centerY),\n {\n rounding,\n perVertexRounding,\n centerX,\n centerY,\n },\n );\n }\n\n /** A polygon through `vertices` (`[x0, y0, x1, y1, …]`), with optional corner rounding. */\n static fromVertices(\n vertices: readonly number[],\n {\n rounding = CornerRounding.Unrounded,\n perVertexRounding,\n centerX,\n centerY,\n }: {\n rounding?: CornerRounding;\n perVertexRounding?: readonly CornerRounding[];\n centerX?: number;\n centerY?: number;\n } = {},\n ): RoundedPolygon {\n if (vertices.length < 6) throw new Error('Polygons must have at least 3 vertices');\n if (vertices.length % 2 === 1) throw new Error('The vertices array should have even size');\n if (perVertexRounding && perVertexRounding.length * 2 !== vertices.length) {\n throw new Error(\n 'perVertexRounding list should be either null or the same size as the number of vertices (vertices.size / 2)',\n );\n }\n const n = vertices.length / 2;\n const vertex = (i: number) => new Point(vertices[i * 2]!, vertices[i * 2 + 1]!);\n const roundedCorners: RoundedCorner[] = [];\n for (let i = 0; i < n; i++) {\n roundedCorners.push(\n new RoundedCorner(\n vertex((i + n - 1) % n),\n vertex(i),\n vertex((i + 1) % n),\n perVertexRounding?.[i] ?? rounding,\n ),\n );\n }\n\n // For each side, check if there is enough space for the cuts; if not, split the space,\n // first for round cuts, then for smoothing. Each entry is [how much of expectedRoundCut,\n // how much of expectedCut] the side from corner i to corner i+1 allows.\n const cutAdjusts = roundedCorners.map((corner, ix) => {\n const next = roundedCorners[(ix + 1) % n]!;\n const expectedRoundCut = corner.expectedRoundCut + next.expectedRoundCut;\n const expectedCut = corner.expectedCut + next.expectedCut;\n const a = vertex(ix);\n const b = vertex((ix + 1) % n);\n const sideSize = distance(a.x - b.x, a.y - b.y);\n if (expectedRoundCut > sideSize) return [sideSize / expectedRoundCut, 0] as const;\n if (expectedCut > sideSize) {\n return [1, (sideSize - expectedRoundCut) / (expectedCut - expectedRoundCut)] as const;\n }\n return [1, 1] as const;\n });\n\n const corners = roundedCorners.map((corner, i) => {\n // allowedCuts[0]: side from the previous corner; allowedCuts[1]: side to the next one.\n const allowedCuts = [0, 1].map((delta) => {\n const [roundCutRatio, cutRatio] = cutAdjusts[(i + n - 1 + delta) % n]!;\n return (\n corner.expectedRoundCut * roundCutRatio +\n (corner.expectedCut - corner.expectedRoundCut) * cutRatio\n );\n });\n return corner.getCubics(allowedCuts[0]!, allowedCuts[1]!);\n });\n\n const features: Feature[] = [];\n for (let i = 0; i < n; i++) {\n const isConvex = convex(vertex((i + n - 1) % n), vertex(i), vertex((i + 1) % n));\n features.push(new Corner(corners[i]!, isConvex));\n const end = corners[i]![corners[i]!.length - 1]!;\n const start = corners[(i + 1) % n]![0]!;\n features.push(\n new Edge([Cubic.straightLine(end.anchor1X, end.anchor1Y, start.anchor0X, start.anchor0Y)]),\n );\n }\n\n const center =\n centerX === undefined || centerY === undefined\n ? calculateCenter(vertices)\n : new Point(centerX, centerY);\n return new RoundedPolygon(features, center);\n }\n\n /** A polygon from existing features; the center defaults to the average of their anchors. */\n static fromFeatures(\n features: readonly Feature[],\n centerX?: number,\n centerY?: number,\n ): RoundedPolygon {\n if (features.length < 2) throw new Error('Polygons must have at least 2 features');\n const vertices: number[] = [];\n for (const feature of features) {\n for (const cubic of feature.cubics) vertices.push(cubic.anchor0X, cubic.anchor0Y);\n }\n const computed = calculateCenter(vertices);\n return new RoundedPolygon(\n features,\n new Point(\n centerX === undefined || Number.isNaN(centerX) ? computed.x : centerX,\n centerY === undefined || Number.isNaN(centerY) ? computed.y : centerY,\n ),\n );\n }\n\n transformed(f: PointTransformer): RoundedPolygon {\n return new RoundedPolygon(\n this.features.map((feature) => feature.transformed(f)),\n this.center.transformed(f),\n );\n }\n\n /** Scales and translates the shape into the unit square (0..1), centred if not square. */\n normalized(): RoundedPolygon {\n const bounds = this.calculateBounds();\n const width = bounds[2]! - bounds[0]!;\n const height = bounds[3]! - bounds[1]!;\n const side = Math.max(width, height);\n // Center the shape if bounds are not a square.\n const offsetX = (side - width) / 2 - bounds[0]!;\n const offsetY = (side - height) / 2 - bounds[1]!;\n return this.transformed((x, y) => [(x + offsetX) / side, (y + offsetY) / side]);\n }\n\n /** Bounds of a circle around the center that contains the shape at any rotation. */\n calculateMaxBounds(bounds: number[] = new Array(4).fill(0)): number[] {\n let maxDistSquared = 0;\n for (const cubic of this.cubics) {\n const anchorDistance = distanceSquared(\n cubic.anchor0X - this.centerX,\n cubic.anchor0Y - this.centerY,\n );\n const middle = cubic.pointOnCurve(0.5);\n const middleDistance = distanceSquared(middle.x - this.centerX, middle.y - this.centerY);\n maxDistSquared = Math.max(maxDistSquared, anchorDistance, middleDistance);\n }\n const d = Math.sqrt(maxDistSquared);\n bounds[0] = this.centerX - d;\n bounds[1] = this.centerY - d;\n bounds[2] = this.centerX + d;\n bounds[3] = this.centerY + d;\n return bounds;\n }\n\n /** `[minX, minY, maxX, maxY]`; `approximate` (default) uses control-point hulls. */\n calculateBounds(bounds: number[] = new Array(4).fill(0), approximate = true): number[] {\n // Kotlin seeds the maxima with Float.MIN_VALUE (the smallest positive float), which is wrong\n // for shapes entirely in negative space; -Infinity is used instead.\n let minX = Number.POSITIVE_INFINITY;\n let minY = Number.POSITIVE_INFINITY;\n let maxX = Number.NEGATIVE_INFINITY;\n let maxY = Number.NEGATIVE_INFINITY;\n for (const cubic of this.cubics) {\n cubic.calculateBounds(bounds, approximate);\n minX = Math.min(minX, bounds[0]!);\n minY = Math.min(minY, bounds[1]!);\n maxX = Math.max(maxX, bounds[2]!);\n maxY = Math.max(maxY, bounds[3]!);\n }\n bounds[0] = minX;\n bounds[1] = minY;\n bounds[2] = maxX;\n bounds[3] = maxY;\n return bounds;\n }\n\n toString(): string {\n return `[RoundedPolygon. Cubics = ${this.cubics.join(', ')} || Features = ${this.features.join(', ')} || Center = (${this.centerX}, ${this.centerY})]`;\n }\n}\n\nfunction buildCubics(features: readonly Feature[], center: Point): Cubic[] {\n // The first/last mechanism ensures that the final anchor point exactly matches the first:\n // points even slightly off can introduce rendering artifacts.\n const result: Cubic[] = [];\n let firstCubic: Cubic | undefined;\n let lastCubic: Cubic | undefined;\n let firstFeatureSplitStart: Cubic[] | undefined;\n let firstFeatureSplitEnd: Cubic[] | undefined;\n if (features.length > 0 && features[0]!.cubics.length === 3) {\n const [start, end] = features[0]!.cubics[1]!.split(0.5);\n firstFeatureSplitStart = [features[0]!.cubics[0]!, start];\n firstFeatureSplitEnd = [end, features[0]!.cubics[2]!];\n }\n // Iterating one past the features allows inserting the initial split cubic, if any.\n for (let i = 0; i <= features.length; i++) {\n let featureCubics: readonly Cubic[];\n if (i === 0 && firstFeatureSplitEnd) featureCubics = firstFeatureSplitEnd;\n else if (i === features.length) {\n if (firstFeatureSplitStart) featureCubics = firstFeatureSplitStart;\n else break;\n } else featureCubics = features[i]!.cubics;\n\n for (const cubic of featureCubics) {\n // Skip zero-length curves; they add nothing and can trigger rendering artifacts.\n if (!cubic.zeroLength()) {\n if (lastCubic) result.push(lastCubic);\n lastCubic = cubic;\n firstCubic ??= cubic;\n } else if (lastCubic) {\n // Dropping several near-zero curves in a row can add enough discontinuity to throw\n // later, so the last cubic always takes the latest anchor point.\n const points = [...lastCubic.points];\n points[6] = cubic.anchor1X;\n points[7] = cubic.anchor1Y;\n lastCubic = new Cubic(points);\n }\n }\n }\n if (lastCubic && firstCubic) {\n result.push(\n Cubic.of(\n lastCubic.anchor0X,\n lastCubic.anchor0Y,\n lastCubic.control0X,\n lastCubic.control0Y,\n lastCubic.control1X,\n lastCubic.control1Y,\n firstCubic.anchor0X,\n firstCubic.anchor0Y,\n ),\n );\n } else {\n // Empty / 0-sized polygon.\n result.push(Cubic.empty(center.x, center.y));\n }\n return result;\n}\n\nexport function calculateCenter(vertices: readonly number[]): Point {\n let cumulativeX = 0;\n let cumulativeY = 0;\n for (let i = 0; i < vertices.length; i += 2) {\n cumulativeX += vertices[i]!;\n cumulativeY += vertices[i + 1]!;\n }\n return new Point(cumulativeX / (vertices.length / 2), cumulativeY / (vertices.length / 2));\n}\n\nfunction verticesFromNumVerts(\n numVertices: number,\n radius: number,\n centerX: number,\n centerY: number,\n): number[] {\n const result: number[] = [];\n for (let i = 0; i < numVertices; i++) {\n const vertex = radialToCartesian(radius, (Math.PI / numVertices) * 2 * i).plus(\n new Point(centerX, centerY),\n );\n result.push(vertex.x, vertex.y);\n }\n return result;\n}\n\nclass RoundedCorner {\n readonly d1: Point;\n readonly d2: Point;\n readonly cornerRadius: number;\n readonly smoothing: number;\n readonly cosAngle: number;\n readonly sinAngle: number;\n readonly expectedRoundCut: number;\n /** Center of the rounding circle; equals p1 when there is no rounding. */\n center = new Point(0, 0);\n\n constructor(\n readonly p0: Point,\n readonly p1: Point,\n readonly p2: Point,\n rounding?: CornerRounding,\n ) {\n const v01 = p0.minus(p1);\n const v21 = p2.minus(p1);\n const d01 = v01.getDistance();\n const d21 = v21.getDistance();\n if (d01 > 0 && d21 > 0) {\n this.d1 = v01.div(d01);\n this.d2 = v21.div(d21);\n this.cornerRadius = rounding?.radius ?? 0;\n this.smoothing = rounding?.smoothing ?? 0;\n // Cosine of the angle at p1: dot product of unit vectors to the other two vertices.\n this.cosAngle = this.d1.dotProduct(this.d2);\n this.sinAngle = Math.sqrt(1 - square(this.cosAngle));\n // How much to cut, measured on a side, to get the required radius:\n // tan(A/2) = sinA / (1 + cosA), where tan(A/2) = radius / cut.\n this.expectedRoundCut =\n this.sinAngle > 1e-3 ? (this.cornerRadius * (this.cosAngle + 1)) / this.sinAngle : 0;\n } else {\n // One (or both) of the sides is empty.\n this.d1 = new Point(0, 0);\n this.d2 = new Point(0, 0);\n this.cornerRadius = 0;\n this.smoothing = 0;\n this.cosAngle = 0;\n this.sinAngle = 0;\n this.expectedRoundCut = 0;\n }\n }\n\n /** Smoothing lengthens the cut: 0 equals expectedRoundCut, 1 doubles it. */\n get expectedCut(): number {\n return (1 + this.smoothing) * this.expectedRoundCut;\n }\n\n getCubics(allowedCut0: number, allowedCut1: number = allowedCut0): Cubic[] {\n // The smaller cut sets the radius; extra space on one side can go to smoothing.\n const allowedCut = Math.min(allowedCut0, allowedCut1);\n if (\n this.expectedRoundCut < DistanceEpsilon ||\n allowedCut < DistanceEpsilon ||\n this.cornerRadius < DistanceEpsilon\n ) {\n this.center = this.p1;\n return [Cubic.straightLine(this.p1.x, this.p1.y, this.p1.x, this.p1.y)];\n }\n const actualRoundCut = Math.min(allowedCut, this.expectedRoundCut);\n const actualSmoothing0 = this.calculateActualSmoothingValue(allowedCut0);\n const actualSmoothing1 = this.calculateActualSmoothingValue(allowedCut1);\n const actualR = (this.cornerRadius * actualRoundCut) / this.expectedRoundCut;\n const centerDistance = Math.sqrt(square(actualR) + square(actualRoundCut));\n this.center = this.p1.plus(this.d1.plus(this.d2).div(2).getDirection().times(centerDistance));\n const circleIntersection0 = this.p1.plus(this.d1.times(actualRoundCut));\n const circleIntersection2 = this.p1.plus(this.d2.times(actualRoundCut));\n const flanking0 = this.computeFlankingCurve(\n actualRoundCut,\n actualSmoothing0,\n this.p1,\n this.p0,\n circleIntersection0,\n circleIntersection2,\n this.center,\n actualR,\n );\n const flanking2 = this.computeFlankingCurve(\n actualRoundCut,\n actualSmoothing1,\n this.p1,\n this.p2,\n circleIntersection2,\n circleIntersection0,\n this.center,\n actualR,\n ).reverse();\n return [\n flanking0,\n Cubic.circularArc(\n this.center.x,\n this.center.y,\n flanking0.anchor1X,\n flanking0.anchor1Y,\n flanking2.anchor0X,\n flanking2.anchor0Y,\n ),\n flanking2,\n ];\n }\n\n private calculateActualSmoothingValue(allowedCut: number): number {\n if (allowedCut > this.expectedCut) return this.smoothing;\n if (allowedCut > this.expectedRoundCut) {\n return (\n (this.smoothing * (allowedCut - this.expectedRoundCut)) /\n (this.expectedCut - this.expectedRoundCut)\n );\n }\n return 0;\n }\n\n private computeFlankingCurve(\n actualRoundCut: number,\n actualSmoothingValues: number,\n corner: Point,\n sideStart: Point,\n circleSegmentIntersection: Point,\n otherCircleSegmentIntersection: Point,\n circleCenter: Point,\n actualR: number,\n ): Cubic {\n const sideDirection = sideStart.minus(corner).getDirection();\n const curveStart = corner.plus(\n sideDirection.times(actualRoundCut * (1 + actualSmoothingValues)),\n );\n // Cut a part of the circle section proportional to 1 - smooth (full section at 0).\n const p = interpolatePoint(\n circleSegmentIntersection,\n circleSegmentIntersection.plus(otherCircleSegmentIntersection).div(2),\n actualSmoothingValues,\n );\n // The flanking curve ends on the circle.\n const curveEnd = circleCenter.plus(\n directionVector(p.x - circleCenter.x, p.y - circleCenter.y).times(actualR),\n );\n // The control on the circle side is where the tangent at curveEnd meets the side.\n const circleTangent = curveEnd.minus(circleCenter).rotate90();\n const anchorEnd =\n lineIntersection(sideStart, sideDirection, curveEnd, circleTangent) ??\n circleSegmentIntersection;\n // 2/3 comes from design tools.\n const anchorStart = curveStart.plus(anchorEnd.times(2)).div(3);\n return Cubic.fromPoints(curveStart, anchorStart, anchorEnd, curveEnd);\n }\n}\n\nfunction lineIntersection(p0: Point, d0: Point, p1: Point, d1: Point): Point | undefined {\n const rotatedD1 = d1.rotate90();\n const den = d0.dotProduct(rotatedD1);\n if (Math.abs(den) < DistanceEpsilon) return undefined;\n const num = p1.minus(p0).dotProduct(rotatedD1);\n // Equivalent to abs(den / num) < DistanceEpsilon without dividing.\n if (Math.abs(den) < DistanceEpsilon * Math.abs(num)) return undefined;\n return p0.plus(d0.times(num / den));\n}\n"],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ //#region src/shapes/shape-path.d.ts
2
+ /**
3
+ * A static shape outline: a closed SVG path in the unit square (0–1 on both axes), drawn
4
+ * with a CSS mask that scales with the element (`materialShapeMask`). The 35 M3 Expressive
5
+ * shapes are exported precomputed as `<name>Shape` constants (`cookie12SidedShape`, …), so an
6
+ * app pays only for the outlines it imports; any outline in the unit square works too.
7
+ */
8
+ export interface MaterialShapePath {
9
+ /** The shape's name, which components write to their `data-shape` (e.g. `Cookie12Sided`). */
10
+ readonly name: string;
11
+ /** SVG path data in the unit square. The precomputed shapes use 3 decimals. */
12
+ readonly path: string;
13
+ }
14
+ //#endregion
15
+ //# sourceMappingURL=shape-path.d.ts.map
@@ -0,0 +1,53 @@
1
+ import { CornerRounding } from "./corner-rounding.js";
2
+ import { RoundedPolygon } from "./rounded-polygon.js";
3
+ //#region src/shapes/shapes.d.ts
4
+ /** A circle approximated by a rounded regular polygon with `numVertices` vertices. */
5
+ export declare function circle({ numVertices, radius, centerX, centerY }?: {
6
+ numVertices?: number;
7
+ radius?: number;
8
+ centerX?: number;
9
+ centerY?: number;
10
+ }): RoundedPolygon;
11
+ /** A rectangle, optionally with rounded corners. */
12
+ export declare function rectangle({ width, height, rounding, perVertexRounding, centerX, centerY }?: {
13
+ width?: number;
14
+ height?: number;
15
+ rounding?: CornerRounding;
16
+ perVertexRounding?: readonly CornerRounding[];
17
+ centerX?: number;
18
+ centerY?: number;
19
+ }): RoundedPolygon;
20
+ /** A star with `numVerticesPerRadius` points, alternating between `radius` and `innerRadius`. */
21
+ export declare function star(numVerticesPerRadius: number, { radius, innerRadius, rounding, innerRounding, perVertexRounding, centerX, centerY }?: {
22
+ radius?: number;
23
+ innerRadius?: number;
24
+ rounding?: CornerRounding;
25
+ innerRounding?: CornerRounding;
26
+ perVertexRounding?: readonly CornerRounding[];
27
+ centerX?: number;
28
+ centerY?: number;
29
+ }): RoundedPolygon;
30
+ /** A pill: a rectangle with fully rounded ends. */
31
+ export declare function pill({ width, height, smoothing, centerX, centerY }?: {
32
+ width?: number;
33
+ height?: number;
34
+ smoothing?: number;
35
+ centerX?: number;
36
+ centerY?: number;
37
+ }): RoundedPolygon;
38
+ /** A star whose vertices lie along a pill outline. */
39
+ export declare function pillStar({ width, height, numVerticesPerRadius, innerRadiusRatio, rounding, innerRounding, perVertexRounding, vertexSpacing, startLocation, centerX, centerY }?: {
40
+ width?: number;
41
+ height?: number;
42
+ numVerticesPerRadius?: number;
43
+ innerRadiusRatio?: number;
44
+ rounding?: CornerRounding;
45
+ innerRounding?: CornerRounding;
46
+ perVertexRounding?: readonly CornerRounding[];
47
+ vertexSpacing?: number;
48
+ startLocation?: number;
49
+ centerX?: number;
50
+ centerY?: number;
51
+ }): RoundedPolygon;
52
+ //#endregion
53
+ //# sourceMappingURL=shapes.d.ts.map