@zyncat/ui 0.10.0 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (597) hide show
  1. package/README.md +135 -40
  2. package/dist/alert.css +126 -121
  3. package/dist/alert.js +12 -14
  4. package/dist/alert.js.map +1 -1
  5. package/dist/avatar-group.js.map +1 -1
  6. package/dist/avatar.css +179 -174
  7. package/dist/avatar.js.map +1 -1
  8. package/dist/badge.css +166 -160
  9. package/dist/badge.js +1 -1
  10. package/dist/button.css +272 -246
  11. package/dist/button.js +1 -1
  12. package/dist/checkbox.css +158 -153
  13. package/dist/checkbox.js +2 -2
  14. package/dist/{chunk-UXONUUPI.js → chunk-227ZW4V7.js} +40 -32
  15. package/dist/chunk-227ZW4V7.js.map +1 -0
  16. package/dist/{chunk-2ERBBFZS.js → chunk-3MPF7FZV.js} +2 -2
  17. package/dist/chunk-3MPF7FZV.js.map +1 -0
  18. package/dist/{chunk-OMHQ4U4J.js → chunk-43M6GQ4Q.js} +86 -79
  19. package/dist/chunk-43M6GQ4Q.js.map +1 -0
  20. package/dist/{chunk-7SZCJ7WI.js → chunk-45R4Z5XN.js} +3 -3
  21. package/dist/chunk-45R4Z5XN.js.map +1 -0
  22. package/dist/{chunk-I4XQ4PV2.js → chunk-4BSHB7R3.js} +9 -7
  23. package/dist/chunk-4BSHB7R3.js.map +1 -0
  24. package/dist/{chunk-YGGCQNNU.js → chunk-4C5RZXBT.js} +33 -34
  25. package/dist/chunk-4C5RZXBT.js.map +1 -0
  26. package/dist/{chunk-2QWJ6FAX.js → chunk-5PZ43DCG.js} +31 -15
  27. package/dist/chunk-5PZ43DCG.js.map +1 -0
  28. package/dist/{chunk-S5ZTZANS.js → chunk-7IZJERGA.js} +35 -12
  29. package/dist/chunk-7IZJERGA.js.map +1 -0
  30. package/dist/{chunk-ZCOUPPTI.js → chunk-A5WTZACK.js} +22 -12
  31. package/dist/chunk-A5WTZACK.js.map +1 -0
  32. package/dist/{chunk-64UU4LGU.js → chunk-AADAJL7D.js} +3 -3
  33. package/dist/{chunk-64UU4LGU.js.map → chunk-AADAJL7D.js.map} +1 -1
  34. package/dist/{chunk-FTOAUJL5.js → chunk-CF4QHO4N.js} +21 -11
  35. package/dist/chunk-CF4QHO4N.js.map +1 -0
  36. package/dist/{chunk-WM5J5TDI.js → chunk-CNWTIMIP.js} +13 -17
  37. package/dist/chunk-CNWTIMIP.js.map +1 -0
  38. package/dist/{chunk-356HZMT4.js → chunk-DDRSMHN4.js} +31 -22
  39. package/dist/chunk-DDRSMHN4.js.map +1 -0
  40. package/dist/{chunk-VTJTGVZZ.js → chunk-DMX2F6B4.js} +2 -2
  41. package/dist/chunk-DMX2F6B4.js.map +1 -0
  42. package/dist/{chunk-3SBCBYB7.js → chunk-EAI4POPB.js} +2 -2
  43. package/dist/{chunk-3SBCBYB7.js.map → chunk-EAI4POPB.js.map} +1 -1
  44. package/dist/{chunk-Y7AJQVWJ.js → chunk-EF6RPXU7.js} +17 -15
  45. package/dist/chunk-EF6RPXU7.js.map +1 -0
  46. package/dist/{chunk-K5X2GCXU.js → chunk-FONOS5RN.js} +14 -15
  47. package/dist/chunk-FONOS5RN.js.map +1 -0
  48. package/dist/{chunk-PMECHR3A.js → chunk-FQEHSKEI.js} +2 -2
  49. package/dist/chunk-FQEHSKEI.js.map +1 -0
  50. package/dist/chunk-HDSFWZ7L.js +12 -0
  51. package/dist/chunk-HDSFWZ7L.js.map +1 -0
  52. package/dist/{chunk-2F5PITAO.js → chunk-HY5MPISE.js} +2 -2
  53. package/dist/chunk-HY5MPISE.js.map +1 -0
  54. package/dist/{chunk-QDK66S4G.js → chunk-I45AU6KH.js} +3 -3
  55. package/dist/chunk-I45AU6KH.js.map +1 -0
  56. package/dist/{chunk-YGCVWGUG.js → chunk-IJS7TPGV.js} +153 -46
  57. package/dist/chunk-IJS7TPGV.js.map +1 -0
  58. package/dist/{chunk-62P3KD57.js → chunk-IUQAUBVM.js} +18 -11
  59. package/dist/chunk-IUQAUBVM.js.map +1 -0
  60. package/dist/chunk-JY6A2ZJZ.js +44 -0
  61. package/dist/chunk-JY6A2ZJZ.js.map +1 -0
  62. package/dist/{chunk-XWUWYSCT.js → chunk-M43IOM5C.js} +20 -10
  63. package/dist/chunk-M43IOM5C.js.map +1 -0
  64. package/dist/{chunk-S7B34VGN.js → chunk-OWNMRMPN.js} +3 -3
  65. package/dist/{chunk-S7B34VGN.js.map → chunk-OWNMRMPN.js.map} +1 -1
  66. package/dist/chunk-RFRE4WKX.js +22 -0
  67. package/dist/chunk-RFRE4WKX.js.map +1 -0
  68. package/dist/{chunk-NNXJCLTV.js → chunk-RJFGWJ4W.js} +2 -2
  69. package/dist/chunk-RJFGWJ4W.js.map +1 -0
  70. package/dist/{chunk-NEF5XAHG.js → chunk-TUTXXC3W.js} +4 -4
  71. package/dist/chunk-TUTXXC3W.js.map +1 -0
  72. package/dist/chunk-TVYH4AN7.js +70 -0
  73. package/dist/chunk-TVYH4AN7.js.map +1 -0
  74. package/dist/{chunk-RCONNA7I.js → chunk-VAXCXZ53.js} +34 -22
  75. package/dist/chunk-VAXCXZ53.js.map +1 -0
  76. package/dist/chunk-XNIYSAMJ.js +52 -0
  77. package/dist/chunk-XNIYSAMJ.js.map +1 -0
  78. package/dist/{chunk-CONSWNIV.js → chunk-Y2YA7QRF.js} +6 -6
  79. package/dist/chunk-Y2YA7QRF.js.map +1 -0
  80. package/dist/cli.js +1809 -0
  81. package/dist/collapse.css +70 -61
  82. package/dist/collapse.js +2 -2
  83. package/dist/confetti.css +45 -0
  84. package/dist/confetti.js +540 -0
  85. package/dist/confetti.js.map +1 -0
  86. package/dist/count-badge.js +3 -3
  87. package/dist/count-badge.js.map +1 -1
  88. package/dist/date-field.js +24 -19
  89. package/dist/date-field.js.map +1 -1
  90. package/dist/date-picker.css +563 -559
  91. package/dist/date-range-field.js +58 -41
  92. package/dist/date-range-field.js.map +1 -1
  93. package/dist/datetime-field.js +24 -19
  94. package/dist/datetime-field.js.map +1 -1
  95. package/dist/dialog.css +176 -172
  96. package/dist/dialog.js +30 -19
  97. package/dist/dialog.js.map +1 -1
  98. package/dist/digit-strip.css +65 -0
  99. package/dist/dropdown.css +65 -0
  100. package/dist/dropdown.js +350 -0
  101. package/dist/dropdown.js.map +1 -0
  102. package/dist/emoji-picker.js +713 -0
  103. package/dist/emoji-picker.js.map +1 -0
  104. package/dist/facebook-feed.css +880 -0
  105. package/dist/facebook-feed.js +697 -0
  106. package/dist/facebook-feed.js.map +1 -0
  107. package/dist/flow-field.css +49 -0
  108. package/dist/flow-field.js +269 -0
  109. package/dist/flow-field.js.map +1 -0
  110. package/dist/glide.js +3 -3
  111. package/dist/icon.css +34 -30
  112. package/dist/input.css +296 -318
  113. package/dist/instagram-feed.css +378 -0
  114. package/dist/instagram-feed.js +272 -0
  115. package/dist/instagram-feed.js.map +1 -0
  116. package/dist/lens.css +119 -0
  117. package/dist/lens.js +307 -0
  118. package/dist/lens.js.map +1 -0
  119. package/dist/mcp.js +379 -184
  120. package/dist/menu-surface.css +127 -0
  121. package/dist/modal.css +11 -7
  122. package/dist/modal.js +24 -17
  123. package/dist/modal.js.map +1 -1
  124. package/dist/morphing-text.css +84 -0
  125. package/dist/morphing-text.js +256 -0
  126. package/dist/morphing-text.js.map +1 -0
  127. package/dist/motion-devtools.css +237 -233
  128. package/dist/motion-devtools.js +7 -6
  129. package/dist/motion-devtools.js.map +1 -1
  130. package/dist/motion-tokens.js +1 -1
  131. package/dist/multi-select.js +20 -17
  132. package/dist/multi-select.js.map +1 -1
  133. package/dist/number-field.js +11 -7
  134. package/dist/number-field.js.map +1 -1
  135. package/dist/odometer.css +58 -59
  136. package/dist/odometer.js +109 -0
  137. package/dist/odometer.js.map +1 -0
  138. package/dist/otp-field.js.map +1 -1
  139. package/dist/overlay.css +24 -20
  140. package/dist/pagination.css +42 -38
  141. package/dist/pagination.js +6 -12
  142. package/dist/pagination.js.map +1 -1
  143. package/dist/popover.css +69 -65
  144. package/dist/popover.js +12 -10
  145. package/dist/radio-group.css +275 -276
  146. package/dist/radio-group.js +70 -95
  147. package/dist/radio-group.js.map +1 -1
  148. package/dist/select.css +291 -386
  149. package/dist/select.js +18 -15
  150. package/dist/select.js.map +1 -1
  151. package/dist/sheet.css +47 -23
  152. package/dist/sheet.js +11 -10
  153. package/dist/status-badge.js +3 -3
  154. package/dist/status-badge.js.map +1 -1
  155. package/dist/styles.css +221 -0
  156. package/dist/support-rail.css +421 -0
  157. package/dist/support-rail.js +243 -0
  158. package/dist/support-rail.js.map +1 -0
  159. package/dist/table.css +333 -323
  160. package/dist/table.js +32 -21
  161. package/dist/table.js.map +1 -1
  162. package/dist/tabs.css +163 -156
  163. package/dist/tabs.js +26 -20
  164. package/dist/tabs.js.map +1 -1
  165. package/dist/tag.css +209 -231
  166. package/dist/tag.js +11 -10
  167. package/dist/tag.js.map +1 -1
  168. package/dist/text-field.js +7 -67
  169. package/dist/text-field.js.map +1 -1
  170. package/dist/textarea.css +205 -211
  171. package/dist/textarea.js +12 -12
  172. package/dist/textarea.js.map +1 -1
  173. package/dist/theme.js +69 -0
  174. package/dist/theme.js.map +1 -0
  175. package/dist/tiktok.css +662 -0
  176. package/dist/tiktok.js +494 -0
  177. package/dist/tiktok.js.map +1 -0
  178. package/dist/time-field.js +6 -6
  179. package/dist/time-field.js.map +1 -1
  180. package/dist/toast.css +237 -233
  181. package/dist/toast.js +43 -47
  182. package/dist/toast.js.map +1 -1
  183. package/dist/toggle-tag.js +1 -1
  184. package/dist/toggle-tag.js.map +1 -1
  185. package/dist/toggle.css +139 -135
  186. package/dist/toggle.js.map +1 -1
  187. package/dist/tooltip.css +79 -78
  188. package/dist/tooltip.js +50 -60
  189. package/dist/tooltip.js.map +1 -1
  190. package/dist/trigger.css +13 -0
  191. package/dist/{alert.d.ts → types/components/composites/alert/Alert.d.ts} +13 -15
  192. package/dist/{date-field.d.ts → types/components/composites/date-picker/DateField.d.ts} +4 -10
  193. package/dist/types/components/composites/date-picker/DateRangeField.d.ts +21 -0
  194. package/dist/{datetime-field.d.ts → types/components/composites/date-picker/DateTimeField.d.ts} +4 -10
  195. package/dist/{time-field.d.ts → types/components/composites/date-picker/TimeField.d.ts} +5 -11
  196. package/dist/types/components/composites/date-picker/calendar-panel.d.ts +16 -0
  197. package/dist/types/components/composites/date-picker/date-utils.d.ts +12 -0
  198. package/dist/types/components/composites/date-picker/field-shell.d.ts +46 -0
  199. package/dist/types/components/composites/date-picker/range-panel.d.ts +24 -0
  200. package/dist/types/components/composites/date-picker/time-core.d.ts +14 -0
  201. package/dist/types/components/composites/date-picker/use-day-focus.d.ts +2 -0
  202. package/dist/{dialog.d.ts → types/components/composites/dialog/Dialog.d.ts} +10 -11
  203. package/dist/types/components/composites/dropdown/Dropdown.d.ts +37 -0
  204. package/dist/types/components/composites/dropdown/menu-panel.d.ts +7 -0
  205. package/dist/types/components/composites/dropdown/types.d.ts +71 -0
  206. package/dist/types/components/composites/emoji-picker/EmojiPickerPanel.d.ts +45 -0
  207. package/dist/types/components/composites/emoji-picker/category-icons.d.ts +9 -0
  208. package/dist/types/components/composites/emoji-picker/data.d.ts +33 -0
  209. package/dist/types/components/composites/emoji-picker/dom.d.ts +19 -0
  210. package/dist/types/components/composites/emoji-picker/getEmojiUrl.d.ts +2 -0
  211. package/dist/types/components/composites/emoji-picker/navigation.d.ts +7 -0
  212. package/dist/types/components/composites/emoji-picker/picker.d.ts +20 -0
  213. package/dist/types/components/composites/emoji-picker/react/category-bar.d.ts +6 -0
  214. package/dist/types/components/composites/emoji-picker/react/useEmojiPicker.d.ts +50 -0
  215. package/dist/types/components/composites/emoji-picker/scaffold.d.ts +8 -0
  216. package/dist/types/components/composites/emoji-picker/search.d.ts +1 -0
  217. package/dist/types/components/composites/emoji-picker/types.d.ts +13 -0
  218. package/dist/{modal.d.ts → types/components/composites/modal/Modal.d.ts} +10 -11
  219. package/dist/{pagination.d.ts → types/components/composites/pagination/Pagination.d.ts} +5 -8
  220. package/dist/{popover.d.ts → types/components/composites/popover/Popover.d.ts} +11 -14
  221. package/dist/{multi-select.d.ts → types/components/composites/select/MultiSelect.d.ts} +12 -11
  222. package/dist/{select.d.ts → types/components/composites/select/Select.d.ts} +16 -14
  223. package/dist/types/components/composites/select/core/index.d.ts +4 -0
  224. package/dist/types/components/composites/select/core/menu.d.ts +13 -0
  225. package/dist/types/components/composites/select/core/panel.d.ts +18 -0
  226. package/dist/types/components/composites/select/core/trigger.d.ts +16 -0
  227. package/dist/{types-SGMShK7R.d.ts → types/components/composites/select/core/types.d.ts} +13 -6
  228. package/dist/types/components/composites/select/core/use-listbox.d.ts +42 -0
  229. package/dist/{sheet.d.ts → types/components/composites/sheet/Sheet.d.ts} +10 -11
  230. package/dist/types/components/composites/sheet/use-sheet-drag.d.ts +13 -0
  231. package/dist/{table.d.ts → types/components/composites/table/Table.d.ts} +12 -12
  232. package/dist/{tabs.d.ts → types/components/composites/tabs/Tabs.d.ts} +13 -13
  233. package/dist/types/components/composites/toast/Toast.d.ts +10 -0
  234. package/dist/{toast-store.d.ts → types/components/composites/toast/toast-store.d.ts} +12 -14
  235. package/dist/{tooltip.d.ts → types/components/composites/tooltip/Tooltip.d.ts} +6 -10
  236. package/dist/types/components/composites/tooltip/tooltip-host.d.ts +1 -0
  237. package/dist/types/components/composites/tooltip/tooltip-store.d.ts +29 -0
  238. package/dist/types/components/compound/support-rail/SupportRail.d.ts +41 -0
  239. package/dist/types/components/dev/MotionDevtools.d.ts +24 -0
  240. package/dist/types/components/dev/slowmo-engine.d.ts +27 -0
  241. package/dist/types/components/expressive/confetti/Confetti.d.ts +43 -0
  242. package/dist/types/components/expressive/facebook-feed/FacebookFeed.d.ts +73 -0
  243. package/dist/types/components/expressive/facebook-feed/chrome.d.ts +30 -0
  244. package/dist/types/components/expressive/facebook-feed/icons.d.ts +21 -0
  245. package/dist/types/components/expressive/facebook-feed/post.d.ts +25 -0
  246. package/dist/types/components/expressive/facebook-feed/reel.d.ts +26 -0
  247. package/dist/types/components/expressive/facebook-feed/story.d.ts +20 -0
  248. package/dist/types/components/expressive/flow-field/FlowField.d.ts +23 -0
  249. package/dist/types/components/expressive/instagram-feed/InstagramFeed.d.ts +59 -0
  250. package/dist/types/components/expressive/lens/Lens.d.ts +23 -0
  251. package/dist/types/components/expressive/morphing-text/MorphingText.d.ts +21 -0
  252. package/dist/types/components/expressive/odometer/Odometer.d.ts +21 -0
  253. package/dist/types/components/expressive/tiktok/TikTok.d.ts +85 -0
  254. package/dist/types/components/expressive/tiktok/glyphs.d.ts +40 -0
  255. package/dist/types/components/expressive/typing-lines/TypingLines.d.ts +25 -0
  256. package/dist/types/components/expressive/weight-field/WeightField.d.ts +19 -0
  257. package/dist/types/components/expressive/youtube/YouTube.d.ts +73 -0
  258. package/dist/types/components/expressive/youtube/format.d.ts +2 -0
  259. package/dist/types/components/expressive/youtube/glyphs.d.ts +16 -0
  260. package/dist/types/components/expressive/youtube/media.d.ts +8 -0
  261. package/dist/types/components/expressive/youtube/post.d.ts +19 -0
  262. package/dist/types/components/expressive/youtube/short.d.ts +18 -0
  263. package/dist/types/components/expressive/youtube/video.d.ts +14 -0
  264. package/dist/types/components/internal/collection/collection.d.ts +19 -0
  265. package/dist/types/components/internal/glass/glint.d.ts +1 -0
  266. package/dist/types/components/internal/hooks/use-controllable.d.ts +1 -0
  267. package/dist/types/components/internal/hooks/use-media-query.d.ts +1 -0
  268. package/dist/types/components/internal/hooks/use-scroll-edges.d.ts +10 -0
  269. package/dist/types/components/internal/hooks/use-typeahead.d.ts +5 -0
  270. package/dist/types/components/internal/icon/Icon.d.ts +33 -0
  271. package/dist/types/components/internal/icon/IconSlot.d.ts +7 -0
  272. package/dist/types/components/internal/menu/menu-row.d.ts +11 -0
  273. package/dist/types/components/internal/overlay/focus.d.ts +8 -0
  274. package/dist/types/components/internal/overlay/layer.d.ts +38 -0
  275. package/dist/types/components/internal/overlay/modal.d.ts +18 -0
  276. package/dist/types/components/internal/overlay/position.d.ts +14 -0
  277. package/dist/types/components/internal/support/types.d.ts +15 -0
  278. package/dist/types/components/internal/utils/activation.d.ts +23 -0
  279. package/dist/types/components/internal/utils/cx.d.ts +1 -0
  280. package/dist/types/components/internal/utils/token-px.d.ts +1 -0
  281. package/dist/{avatar.d.ts → types/components/primitives/avatar/Avatar.d.ts} +10 -12
  282. package/dist/{avatar-group.d.ts → types/components/primitives/avatar/AvatarGroup.d.ts} +7 -9
  283. package/dist/{badge.d.ts → types/components/primitives/badge/Badge.d.ts} +8 -10
  284. package/dist/types/components/primitives/badge/CountBadge.d.ts +8 -0
  285. package/dist/types/components/primitives/badge/StatusBadge.d.ts +15 -0
  286. package/dist/types/components/primitives/badge/digit-strip.d.ts +5 -0
  287. package/dist/{button.d.ts → types/components/primitives/button/Button.d.ts} +6 -8
  288. package/dist/{checkbox.d.ts → types/components/primitives/checkbox/Checkbox.d.ts} +6 -8
  289. package/dist/types/components/primitives/checkbox/check-glyph.d.ts +6 -0
  290. package/dist/{collapse.d.ts → types/components/primitives/collapse/Collapse.d.ts} +12 -13
  291. package/dist/types/components/primitives/collapse/collapse.typecheck.d.ts +2 -0
  292. package/dist/{number-field.d.ts → types/components/primitives/input/NumberField.d.ts} +7 -9
  293. package/dist/{otp-field.d.ts → types/components/primitives/input/OtpField.d.ts} +6 -8
  294. package/dist/{text-field.d.ts → types/components/primitives/input/TextField.d.ts} +7 -9
  295. package/dist/types/components/primitives/input/field-chrome.d.ts +45 -0
  296. package/dist/{radio-group.d.ts → types/components/primitives/radio-group/RadioGroup.d.ts} +8 -10
  297. package/dist/{tag.d.ts → types/components/primitives/tag/Tag.d.ts} +9 -12
  298. package/dist/{toggle-tag.d.ts → types/components/primitives/tag/ToggleTag.d.ts} +7 -8
  299. package/dist/{textarea.d.ts → types/components/primitives/textarea/Textarea.d.ts} +7 -9
  300. package/dist/{toggle.d.ts → types/components/primitives/toggle/Toggle.d.ts} +6 -8
  301. package/dist/{dom-props-C0jrllBw.d.ts → types/dom-props.d.ts} +1 -3
  302. package/dist/types/engine/animate.d.ts +30 -0
  303. package/dist/types/engine/drag.d.ts +17 -0
  304. package/dist/types/engine/ease.d.ts +15 -0
  305. package/dist/types/engine/flip.d.ts +18 -0
  306. package/dist/types/engine/index.d.ts +4 -0
  307. package/dist/types/engine/loop.d.ts +9 -0
  308. package/dist/types/motion/element.d.ts +17 -0
  309. package/dist/types/motion/flip.d.ts +4 -0
  310. package/dist/types/motion/glide.d.ts +11 -0
  311. package/dist/types/motion/motion-timing.d.ts +16 -0
  312. package/dist/types/motion/presence-context.d.ts +11 -0
  313. package/dist/types/motion/presence.d.ts +12 -0
  314. package/dist/types/motion/presets.d.ts +6 -0
  315. package/dist/{timing-7JA_zQHP.d.ts → types/motion/timing.d.ts} +9 -9
  316. package/dist/types/motion/use-motion.d.ts +17 -0
  317. package/dist/types/tokens/component-styles.generated.d.ts +262 -0
  318. package/dist/{motion-scale-Canq4stZ.d.ts → types/tokens/motion-scale.d.ts} +4 -4
  319. package/dist/{motion-tokens.d.ts → types/tokens/motion-tokens.d.ts} +9 -9
  320. package/dist/types/tokens/theme-tokens.generated.d.ts +1249 -0
  321. package/dist/types/tokens/theme.d.ts +12 -0
  322. package/dist/typing-lines.css +92 -0
  323. package/dist/typing-lines.js +139 -0
  324. package/dist/typing-lines.js.map +1 -0
  325. package/dist/weight-field.css +84 -0
  326. package/dist/weight-field.js +17 -0
  327. package/dist/weight-field.js.map +1 -0
  328. package/dist/youtube.css +611 -0
  329. package/dist/youtube.js +814 -0
  330. package/dist/youtube.js.map +1 -0
  331. package/package.json +155 -49
  332. package/skills/zyncat-ui/SKILL.md +95 -0
  333. package/skills/zyncat-ui/references/components.md +85 -0
  334. package/skills/zyncat-ui/references/recipes.md +171 -0
  335. package/skills/zyncat-ui/references/theming.md +83 -0
  336. package/src/components/composites/alert/Alert.tsx +13 -11
  337. package/src/components/composites/alert/Alert.usage.md +15 -0
  338. package/src/components/composites/alert/alert.css +126 -121
  339. package/src/components/composites/date-picker/DateField.tsx +7 -2
  340. package/src/components/composites/date-picker/DateField.usage.md +10 -0
  341. package/src/components/composites/date-picker/DateRangeField.tsx +18 -16
  342. package/src/components/composites/date-picker/DateRangeField.usage.md +10 -0
  343. package/src/components/composites/date-picker/DateTimeField.tsx +10 -5
  344. package/src/components/composites/date-picker/DateTimeField.usage.md +12 -0
  345. package/src/components/composites/date-picker/TimeField.tsx +3 -1
  346. package/src/components/composites/date-picker/TimeField.usage.md +12 -0
  347. package/src/components/composites/date-picker/calendar-panel.tsx +15 -10
  348. package/src/components/composites/date-picker/date-picker.css +563 -559
  349. package/src/components/composites/date-picker/field-shell.tsx +9 -3
  350. package/src/components/composites/date-picker/range-panel.tsx +23 -8
  351. package/src/components/composites/date-picker/time-core.tsx +2 -0
  352. package/src/components/composites/dialog/Dialog.tsx +30 -15
  353. package/src/components/composites/dialog/Dialog.usage.md +17 -0
  354. package/src/components/composites/dialog/dialog.css +176 -172
  355. package/src/components/composites/dropdown/Dropdown.tsx +184 -0
  356. package/src/components/composites/dropdown/Dropdown.usage.md +19 -0
  357. package/src/components/composites/dropdown/dropdown.css +65 -0
  358. package/src/components/composites/dropdown/menu-panel.tsx +255 -0
  359. package/src/components/composites/dropdown/types.ts +95 -0
  360. package/src/components/composites/emoji-picker/EmojiPickerPanel.tsx +153 -0
  361. package/src/components/composites/emoji-picker/EmojiPickerPanel.usage.md +26 -0
  362. package/src/components/composites/emoji-picker/category-icons.ts +29 -0
  363. package/src/components/composites/emoji-picker/data.ts +83 -0
  364. package/src/components/composites/emoji-picker/dom.ts +79 -0
  365. package/src/components/composites/emoji-picker/getEmojiUrl.ts +17 -0
  366. package/src/components/composites/emoji-picker/navigation.ts +86 -0
  367. package/src/components/composites/emoji-picker/picker.ts +169 -0
  368. package/src/components/composites/emoji-picker/react/category-bar.tsx +77 -0
  369. package/src/components/composites/emoji-picker/react/useEmojiPicker.ts +139 -0
  370. package/src/components/composites/emoji-picker/scaffold.ts +74 -0
  371. package/src/components/composites/emoji-picker/search.ts +79 -0
  372. package/src/components/composites/emoji-picker/styles.css +221 -0
  373. package/src/components/composites/emoji-picker/types.ts +14 -0
  374. package/src/components/composites/modal/Modal.tsx +24 -13
  375. package/src/components/composites/modal/Modal.usage.md +24 -0
  376. package/src/components/composites/modal/modal.css +11 -7
  377. package/src/components/composites/pagination/Pagination.tsx +6 -11
  378. package/src/components/composites/pagination/Pagination.usage.md +12 -0
  379. package/src/components/composites/pagination/pagination.css +42 -38
  380. package/src/components/composites/popover/Popover.tsx +22 -7
  381. package/src/components/composites/popover/Popover.usage.md +15 -0
  382. package/src/components/composites/popover/popover.css +69 -65
  383. package/src/components/composites/select/MultiSelect.tsx +13 -5
  384. package/src/components/composites/select/MultiSelect.usage.md +12 -0
  385. package/src/components/composites/select/Select.tsx +23 -7
  386. package/src/components/composites/select/Select.usage.md +20 -0
  387. package/src/components/composites/select/core/index.ts +1 -1
  388. package/src/components/composites/select/core/menu.tsx +8 -6
  389. package/src/components/composites/select/core/panel.tsx +25 -26
  390. package/src/components/composites/select/core/trigger.tsx +36 -24
  391. package/src/components/composites/select/core/types.ts +17 -15
  392. package/src/components/composites/select/core/use-listbox.ts +22 -21
  393. package/src/components/composites/select/select.css +291 -386
  394. package/src/components/composites/sheet/Sheet.tsx +28 -18
  395. package/src/components/composites/sheet/Sheet.usage.md +15 -0
  396. package/src/components/composites/sheet/sheet.css +47 -23
  397. package/src/components/composites/sheet/use-sheet-drag.ts +19 -15
  398. package/src/components/composites/table/Table.tsx +17 -6
  399. package/src/components/composites/table/Table.usage.md +19 -0
  400. package/src/components/composites/table/table.css +333 -323
  401. package/src/components/composites/tabs/Tabs.tsx +31 -23
  402. package/src/components/composites/tabs/Tabs.usage.md +13 -0
  403. package/src/components/composites/tabs/tabs.css +163 -156
  404. package/src/components/composites/toast/Toast.tsx +48 -51
  405. package/src/components/composites/toast/Toast.usage.md +23 -0
  406. package/src/components/composites/toast/toast-store.usage.md +16 -0
  407. package/src/components/composites/toast/toast.css +237 -233
  408. package/src/components/composites/tooltip/Tooltip.tsx +13 -8
  409. package/src/components/composites/tooltip/Tooltip.usage.md +14 -0
  410. package/src/components/composites/tooltip/tooltip-host.tsx +29 -61
  411. package/src/components/composites/tooltip/tooltip-store.ts +10 -0
  412. package/src/components/composites/tooltip/tooltip.css +79 -78
  413. package/src/components/compound/support-rail/SupportRail.tsx +343 -0
  414. package/src/components/compound/support-rail/SupportRail.usage.md +18 -0
  415. package/src/components/compound/support-rail/support-rail.css +421 -0
  416. package/src/components/dev/MotionDevtools.tsx +3 -1
  417. package/src/components/dev/MotionDevtools.usage.md +16 -0
  418. package/src/components/dev/motion-devtools.css +237 -233
  419. package/src/components/expressive/confetti/Confetti.tsx +727 -0
  420. package/src/components/expressive/confetti/Confetti.usage.md +18 -0
  421. package/src/components/expressive/confetti/confetti.css +45 -0
  422. package/src/components/expressive/facebook-feed/FacebookFeed.tsx +200 -0
  423. package/src/components/expressive/facebook-feed/FacebookFeed.usage.md +18 -0
  424. package/src/components/expressive/facebook-feed/chrome.tsx +120 -0
  425. package/src/components/expressive/facebook-feed/facebook-feed.css +880 -0
  426. package/src/components/expressive/facebook-feed/icons.tsx +145 -0
  427. package/src/components/expressive/facebook-feed/post.tsx +213 -0
  428. package/src/components/expressive/facebook-feed/reel.tsx +199 -0
  429. package/src/components/expressive/facebook-feed/story.tsx +132 -0
  430. package/src/components/expressive/flow-field/FlowField.tsx +348 -0
  431. package/src/components/expressive/flow-field/FlowField.usage.md +19 -0
  432. package/src/components/expressive/flow-field/flow-field.css +49 -0
  433. package/src/components/expressive/instagram-feed/InstagramFeed.tsx +374 -0
  434. package/src/components/expressive/instagram-feed/InstagramFeed.usage.md +18 -0
  435. package/src/components/expressive/instagram-feed/instagram-feed.css +378 -0
  436. package/src/components/expressive/lens/Lens.tsx +415 -0
  437. package/src/components/expressive/lens/Lens.usage.md +20 -0
  438. package/src/components/expressive/lens/lens.css +119 -0
  439. package/src/components/expressive/morphing-text/MorphingText.tsx +328 -0
  440. package/src/components/expressive/morphing-text/MorphingText.usage.md +19 -0
  441. package/src/components/expressive/morphing-text/morphing-text.css +84 -0
  442. package/src/components/expressive/odometer/Odometer.tsx +158 -0
  443. package/src/components/expressive/odometer/Odometer.usage.md +17 -0
  444. package/src/components/expressive/odometer/odometer.css +61 -0
  445. package/src/components/expressive/tiktok/TikTok.tsx +542 -0
  446. package/src/components/expressive/tiktok/TikTok.usage.md +17 -0
  447. package/src/components/expressive/tiktok/glyphs.tsx +163 -0
  448. package/src/components/expressive/tiktok/tiktok.css +662 -0
  449. package/src/components/expressive/typing-lines/TypingLines.tsx +0 -0
  450. package/src/components/expressive/typing-lines/TypingLines.usage.md +17 -0
  451. package/src/components/expressive/typing-lines/typing-lines.css +92 -0
  452. package/src/components/expressive/weight-field/WeightField.tsx +41 -0
  453. package/src/components/expressive/weight-field/WeightField.usage.md +20 -0
  454. package/src/components/expressive/weight-field/weight-field.css +84 -0
  455. package/src/components/expressive/youtube/YouTube.tsx +192 -0
  456. package/src/components/expressive/youtube/YouTube.usage.md +18 -0
  457. package/src/components/expressive/youtube/format.ts +22 -0
  458. package/src/components/expressive/youtube/glyphs.tsx +235 -0
  459. package/src/components/expressive/youtube/media.tsx +18 -0
  460. package/src/components/expressive/youtube/post.tsx +282 -0
  461. package/src/components/expressive/youtube/short.tsx +212 -0
  462. package/src/components/expressive/youtube/video.tsx +75 -0
  463. package/src/components/expressive/youtube/youtube.css +611 -0
  464. package/src/components/internal/collection/collection.ts +44 -0
  465. package/src/components/internal/glass/glass.css +88 -84
  466. package/src/components/internal/hooks/use-media-query.ts +20 -0
  467. package/src/components/internal/hooks/use-typeahead.ts +28 -0
  468. package/src/components/internal/icon/Icon.tsx +2 -0
  469. package/src/components/internal/icon/IconSlot.tsx +2 -0
  470. package/src/components/internal/icon/icon.css +34 -30
  471. package/src/components/internal/menu/menu-row.tsx +34 -0
  472. package/src/components/internal/menu/menu-surface.css +127 -0
  473. package/src/components/internal/overlay/focus.ts +26 -10
  474. package/src/components/internal/overlay/layer.tsx +50 -19
  475. package/src/components/internal/overlay/modal.tsx +14 -12
  476. package/src/components/internal/overlay/overlay.css +24 -20
  477. package/src/components/internal/overlay/position.ts +19 -9
  478. package/src/components/internal/overlay/trigger.css +13 -0
  479. package/src/components/internal/support/types.ts +16 -0
  480. package/src/components/internal/utils/activation.ts +78 -0
  481. package/src/components/primitives/avatar/Avatar.tsx +2 -0
  482. package/src/components/primitives/avatar/Avatar.usage.md +12 -0
  483. package/src/components/primitives/avatar/AvatarGroup.tsx +3 -1
  484. package/src/components/primitives/avatar/AvatarGroup.usage.md +15 -0
  485. package/src/components/primitives/avatar/avatar.css +179 -174
  486. package/src/components/primitives/badge/Badge.tsx +3 -1
  487. package/src/components/primitives/badge/Badge.usage.md +14 -0
  488. package/src/components/primitives/badge/CountBadge.tsx +2 -2
  489. package/src/components/primitives/badge/CountBadge.usage.md +13 -0
  490. package/src/components/primitives/badge/StatusBadge.tsx +3 -1
  491. package/src/components/primitives/badge/StatusBadge.usage.md +14 -0
  492. package/src/components/primitives/badge/badge.css +166 -160
  493. package/src/components/primitives/badge/digit-strip.css +65 -0
  494. package/src/components/primitives/badge/{odometer.tsx → digit-strip.tsx} +3 -3
  495. package/src/components/primitives/button/Button.tsx +2 -0
  496. package/src/components/primitives/button/Button.usage.md +14 -0
  497. package/src/components/primitives/button/button.css +272 -246
  498. package/src/components/primitives/checkbox/Checkbox.tsx +3 -1
  499. package/src/components/primitives/checkbox/Checkbox.usage.md +12 -0
  500. package/src/components/primitives/checkbox/check-glyph.tsx +1 -0
  501. package/src/components/primitives/checkbox/checkbox.css +158 -153
  502. package/src/components/primitives/collapse/Collapse.tsx +3 -1
  503. package/src/components/primitives/collapse/Collapse.usage.md +17 -0
  504. package/src/components/primitives/collapse/collapse.css +70 -61
  505. package/src/components/primitives/collapse/collapse.typecheck.tsx +2 -0
  506. package/src/components/primitives/input/NumberField.tsx +18 -5
  507. package/src/components/primitives/input/NumberField.usage.md +12 -0
  508. package/src/components/primitives/input/OtpField.tsx +2 -0
  509. package/src/components/primitives/input/OtpField.usage.md +12 -0
  510. package/src/components/primitives/input/TextField.tsx +16 -4
  511. package/src/components/primitives/input/TextField.usage.md +13 -0
  512. package/src/components/primitives/input/field-chrome.tsx +11 -2
  513. package/src/components/primitives/input/input.css +296 -318
  514. package/src/components/primitives/radio-group/RadioGroup.tsx +20 -44
  515. package/src/components/primitives/radio-group/RadioGroup.usage.md +13 -0
  516. package/src/components/primitives/radio-group/radio-group.css +275 -276
  517. package/src/components/primitives/tag/Tag.tsx +10 -6
  518. package/src/components/primitives/tag/Tag.usage.md +14 -0
  519. package/src/components/primitives/tag/ToggleTag.tsx +4 -2
  520. package/src/components/primitives/tag/ToggleTag.usage.md +14 -0
  521. package/src/components/primitives/tag/tag.css +209 -231
  522. package/src/components/primitives/textarea/Textarea.tsx +17 -7
  523. package/src/components/primitives/textarea/Textarea.usage.md +12 -0
  524. package/src/components/primitives/textarea/textarea.css +205 -211
  525. package/src/components/primitives/toggle/Toggle.tsx +3 -1
  526. package/src/components/primitives/toggle/Toggle.usage.md +12 -0
  527. package/src/components/primitives/toggle/toggle.css +139 -135
  528. package/src/engine/animate.ts +40 -13
  529. package/src/engine/ease.ts +1 -0
  530. package/src/engine/flip.ts +32 -15
  531. package/src/engine/index.ts +2 -1
  532. package/src/engine/loop.ts +97 -0
  533. package/src/mcp/server.ts +315 -221
  534. package/src/motion/element.tsx +1 -0
  535. package/src/motion/flip.ts +29 -10
  536. package/src/motion/glide.tsx +11 -14
  537. package/src/motion/glide.usage.md +15 -0
  538. package/src/motion/motion-timing.ts +3 -3
  539. package/src/motion/presence.tsx +38 -21
  540. package/src/motion/presets.ts +13 -0
  541. package/src/motion/timing.ts +1 -0
  542. package/src/motion/use-motion.ts +16 -3
  543. package/src/styles.css +5 -0
  544. package/src/tokens/avatar.css +20 -16
  545. package/src/tokens/color.css +67 -56
  546. package/src/tokens/component-styles.generated.ts +270 -0
  547. package/src/tokens/elevation.css +28 -17
  548. package/src/tokens/fonts.css +1 -1
  549. package/src/tokens/glass.css +19 -15
  550. package/src/tokens/icons.css +8 -4
  551. package/src/tokens/layers.css +9 -4
  552. package/src/tokens/motion-scale.ts +4 -0
  553. package/src/tokens/motion-tokens.ts +42 -12
  554. package/src/tokens/motion-tokens.usage.md +16 -0
  555. package/src/tokens/motion.css +63 -45
  556. package/src/tokens/radius.css +12 -8
  557. package/src/tokens/semantic.css +62 -54
  558. package/src/tokens/spacing.css +25 -21
  559. package/src/tokens/theme-tokens.generated.ts +1278 -0
  560. package/src/tokens/theme.tsx +83 -0
  561. package/src/tokens/theme.usage.md +36 -0
  562. package/src/tokens/typography.css +53 -49
  563. package/dist/chunk-2ERBBFZS.js.map +0 -1
  564. package/dist/chunk-2F5PITAO.js.map +0 -1
  565. package/dist/chunk-2QWJ6FAX.js.map +0 -1
  566. package/dist/chunk-356HZMT4.js.map +0 -1
  567. package/dist/chunk-62P3KD57.js.map +0 -1
  568. package/dist/chunk-7SZCJ7WI.js.map +0 -1
  569. package/dist/chunk-CONSWNIV.js.map +0 -1
  570. package/dist/chunk-FTOAUJL5.js.map +0 -1
  571. package/dist/chunk-I4XQ4PV2.js.map +0 -1
  572. package/dist/chunk-K5X2GCXU.js.map +0 -1
  573. package/dist/chunk-NEF5XAHG.js.map +0 -1
  574. package/dist/chunk-NNXJCLTV.js.map +0 -1
  575. package/dist/chunk-OMHQ4U4J.js.map +0 -1
  576. package/dist/chunk-PMECHR3A.js.map +0 -1
  577. package/dist/chunk-QDK66S4G.js.map +0 -1
  578. package/dist/chunk-RCONNA7I.js.map +0 -1
  579. package/dist/chunk-S5ZTZANS.js.map +0 -1
  580. package/dist/chunk-UXONUUPI.js.map +0 -1
  581. package/dist/chunk-VTJTGVZZ.js.map +0 -1
  582. package/dist/chunk-WM5J5TDI.js.map +0 -1
  583. package/dist/chunk-XWUWYSCT.js.map +0 -1
  584. package/dist/chunk-Y7AJQVWJ.js.map +0 -1
  585. package/dist/chunk-YGCVWGUG.js.map +0 -1
  586. package/dist/chunk-YGGCQNNU.js.map +0 -1
  587. package/dist/chunk-ZCOUPPTI.js.map +0 -1
  588. package/dist/count-badge.d.ts +0 -13
  589. package/dist/date-range-field.d.ts +0 -33
  590. package/dist/field-chrome-CMPOQSLs.d.ts +0 -28
  591. package/dist/field-shell-Cuda-feL.d.ts +0 -24
  592. package/dist/glide.d.ts +0 -15
  593. package/dist/motion-devtools.d.ts +0 -51
  594. package/dist/status-badge.d.ts +0 -19
  595. package/dist/toast.d.ts +0 -12
  596. package/llms.txt +0 -220
  597. package/src/components/primitives/badge/odometer.css +0 -62
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/internal/overlay/modal.tsx"],"names":[],"mappings":"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","file":"chunk-FONOS5RN.js","sourcesContent":["'use client';\n\nimport './overlay.css';\n\nimport { useEffect, useRef, type ReactNode, type RefObject } from 'react';\n\nimport { animate, type Layer, type Playback } from '../../../engine';\nimport type { MotionTimingDefaults, MotionTimings } from '../../../motion/motion-timing';\nimport { run, useMotion, type MotionSpec, type MotionSpecs } from '../../../motion/use-motion';\nimport { cx } from '../utils/cx';\nimport { useFocusTrap, useReturnFocus } from './focus';\nimport { useOverlayEntry } from './layer';\n\nexport const OV_TAKEOVER_TIMING: MotionTimingDefaults = {\n open: { duration: 'slow', ease: 'entrance' },\n close: { duration: 'base', ease: 'standard' },\n};\n\ninterface OvScopeLock {\n depth: number;\n overflow: string;\n paddingRight: string;\n inerted: HTMLElement[];\n}\n\nconst ovScopeLocks = new Map<HTMLElement, OvScopeLock>();\n\nfunction ovGutter(scope: HTMLElement, cs: CSSStyleDeclaration): number {\n if (scope === document.body) return window.innerWidth - document.documentElement.clientWidth;\n return scope.offsetWidth - scope.clientWidth - parseFloat(cs.borderLeftWidth) - parseFloat(cs.borderRightWidth);\n}\n\nfunction useScopeLock(container?: HTMLElement | null) {\n useEffect(() => {\n const scope = container ?? document.body;\n const lock: OvScopeLock = ovScopeLocks.get(scope) ?? {\n depth: 0,\n overflow: scope.style.overflow,\n paddingRight: scope.style.paddingRight,\n inerted: [],\n };\n ovScopeLocks.set(scope, lock);\n\n if (++lock.depth === 1) {\n const cs = getComputedStyle(scope);\n const gutter = ovGutter(scope, cs);\n scope.style.overflow = 'hidden';\n if (gutter > 0) scope.style.paddingRight = (parseFloat(cs.paddingRight) || 0) + gutter + 'px';\n for (const el of Array.from(scope.children) as HTMLElement[]) {\n if (el.hasAttribute('data-overlay-root') || el.tagName === 'SCRIPT' || el.tagName === 'STYLE' || el.inert)\n continue;\n el.inert = true;\n lock.inerted.push(el);\n }\n }\n return () => {\n if (--lock.depth > 0) return;\n scope.style.overflow = lock.overflow;\n scope.style.paddingRight = lock.paddingRight;\n for (const el of lock.inerted) el.inert = false;\n ovScopeLocks.delete(scope);\n };\n }, []); // eslint-disable-line react-hooks/exhaustive-deps\n}\n\nfunction OverlayScrim({\n dismissible,\n onPress,\n scrimRef,\n}: {\n dismissible: boolean;\n onPress: () => void;\n scrimRef: RefObject<HTMLDivElement | null>;\n}) {\n const down = useRef(false);\n return (\n <div\n ref={scrimRef}\n className=\"overlay-scrim\"\n aria-hidden=\"true\"\n onPointerDown={(e) => {\n down.current = e.target === e.currentTarget;\n }}\n onClick={(e) => {\n if (dismissible && down.current && e.target === e.currentTarget) onPress();\n }}\n ></div>\n );\n}\n\nexport function ModalShell({\n layerClass,\n panelClass,\n panelId,\n dismissible,\n requestClose,\n container,\n panelRef: externalPanelRef = null,\n panelProps = {},\n layerProps = {},\n timings,\n animate: animateSpec,\n exit,\n children,\n}: {\n layerClass: string;\n panelClass: string;\n panelId: string;\n dismissible: boolean;\n requestClose: () => void;\n container?: HTMLElement | null;\n panelRef?: RefObject<HTMLElement> | null;\n panelProps?: Record<string, any>;\n layerProps?: Record<string, any>;\n timings: MotionTimings;\n children: ReactNode;\n} & MotionSpecs) {\n const layerRef = useRef<HTMLDivElement>(null);\n const scrimRef = useRef<HTMLDivElement>(null);\n const internalPanelRef = useRef<HTMLElement>(null);\n const panelRef = externalPanelRef || internalPanelRef;\n const entry = useOverlayEntry({ nodeRef: layerRef, dismissible, requestClose });\n\n const withScrim = (dir: 'open' | 'close', panelSpec: MotionSpec | undefined) => (): Playback[] => {\n const fade: Layer = { opacity: dir === 'open' ? [0, 1] : [0], timing: timings[dir] };\n const plays = scrimRef.current ? [animate(scrimRef.current, fade)] : [];\n return panelRef.current ? plays.concat(run(panelSpec, panelRef.current)) : plays;\n };\n\n useMotion(layerRef, { animate: withScrim('open', animateSpec), exit: withScrim('close', exit) });\n useScopeLock(container);\n useReturnFocus(layerRef);\n useFocusTrap({ panelRef, entry, scoped: !!container });\n return (\n <div\n {...layerProps}\n ref={layerRef}\n className={cx('overlay-layer', container && 'overlay-layer--scoped', layerClass, layerProps.className)}\n >\n <OverlayScrim dismissible={dismissible} onPress={requestClose} scrimRef={scrimRef} />\n <div\n id={panelId}\n tabIndex={-1}\n {...panelProps}\n ref={panelRef as RefObject<HTMLDivElement>}\n className={cx('overlay-panel', panelClass, panelProps.className)}\n >\n {children}\n </div>\n </div>\n );\n}\n"]}
@@ -34,5 +34,5 @@ function Badge({
34
34
  }
35
35
 
36
36
  export { Badge };
37
- //# sourceMappingURL=chunk-PMECHR3A.js.map
38
- //# sourceMappingURL=chunk-PMECHR3A.js.map
37
+ //# sourceMappingURL=chunk-FQEHSKEI.js.map
38
+ //# sourceMappingURL=chunk-FQEHSKEI.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/primitives/badge/Badge.tsx"],"names":[],"mappings":";;;;AAuCO,SAAS,KAAA,CAAM;AAAA,EACpB,IAAA,GAAO,SAAA;AAAA,EACP,OAAA,GAAU,OAAA;AAAA,EACV,IAAA,GAAO,IAAA;AAAA,EACP,GAAA,GAAM,KAAA;AAAA,EACN,IAAA,GAAO,KAAA;AAAA,EACP,IAAA,GAAO,KAAA;AAAA,EACP,IAAA,GAAO,IAAA;AAAA,EACP,SAAA,GAAY,EAAA;AAAA,EACZ,KAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAAe;AACb,EAAA,MAAM,UAAU,OAAA,KAAY,SAAA;AAC5B,EAAA,MAAM,GAAA,GAAM,EAAA;AAAA,IACV,OAAA,IAAW,0BAAA;AAAA,IACX,OAAA;AAAA,IACA,UAAU,IAAI,CAAA,CAAA;AAAA,IACd,YAAY,SAAA,IAAa,gBAAA;AAAA,IACzB,IAAA,KAAS,IAAA,IAAQ,CAAA,OAAA,EAAU,IAAI,CAAA,CAAA;AAAA,IAC/B,IAAA,IAAQ,aAAA;AAAA,IACR;AAAA,GACF;AAEA,EAAA,MAAM,OAAA,GAAA,CAAW,GAAA,IAAO,IAAA,KAAS,CAAC,IAAA;AAElC,EAAA,4BACG,MAAA,EAAA,EAAK,SAAA,EAAW,GAAA,EAAK,KAAA,EAAe,GAAG,SAAA,EACrC,QAAA,EAAA;AAAA,IAAA,OAAA,mBAAU,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAW,CAAA,UAAA,EAAa,IAAA,GAAO,sBAAsB,EAAE,CAAA,CAAA,EAAI,aAAA,EAAY,MAAA,EAAO,CAAA,GAAK,IAAA;AAAA,IACnG,IAAA,uBACE,MAAA,EAAA,EAAK,SAAA,EAAU,eAAc,aAAA,EAAY,MAAA,EACvC,gBACH,CAAA,GACE,IAAA;AAAA,oBACJ,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,cAAA,EAAgB,QAAA,EAAS;AAAA,GAAA,EAC3C,CAAA;AAEJ","file":"chunk-FQEHSKEI.js","sourcesContent":["'use client';\n\nimport './badge.css';\n\nimport type { CSSProperties, HTMLAttributes, ReactNode } from 'react';\n\nimport type { DataAttributes } from '../../../dom-props';\nimport { cx } from '../../internal/utils/cx';\n\nexport type BadgeTone = 'neutral' | 'info' | 'success' | 'warning' | 'danger';\n\ninterface BadgeOwnProps {\n /** Status hue. @default 'neutral' */\n tone?: BadgeTone;\n /** Surface. @default 'glass' */\n variant?: 'glass' | 'outline';\n /** Chip density - `sm` tightens the vertical padding for inline use. @default 'md' */\n size?: 'sm' | 'md';\n /** Leading status dot. */\n dot?: boolean;\n /** Dot pulses (implies dot) - for in-progress status. */\n live?: boolean;\n /** Fully-rounded shape. */\n pill?: boolean;\n /** Optional leading <Icon> (overrides dot if both set). */\n icon?: ReactNode;\n /** Extra class(es) merged onto the chip. */\n className?: string;\n /** Inline styles merged onto the chip. */\n style?: CSSProperties;\n /** Chip label. */\n children?: ReactNode;\n}\n\nexport interface BadgeProps extends BadgeOwnProps {\n /** Standard <span> attributes (aria-*, data-*, title, ...) forwarded to the chip. */\n htmlProps?: Omit<HTMLAttributes<HTMLSpanElement>, keyof BadgeOwnProps> & DataAttributes;\n}\n\nexport function Badge({\n tone = 'neutral',\n variant = 'glass',\n size = 'md',\n dot = false,\n live = false,\n pill = false,\n icon = null,\n className = '',\n style,\n children,\n htmlProps,\n}: BadgeProps) {\n const isGlass = variant !== 'outline';\n const cls = cx(\n isGlass && 'glass glass--interactive',\n 'badge',\n `badge--${tone}`,\n variant === 'outline' && 'badge--outline',\n size !== 'md' && `badge--${size}`,\n pill && 'badge--pill',\n className,\n );\n\n const showDot = (dot || live) && !icon;\n\n return (\n <span className={cls} style={style} {...htmlProps}>\n {showDot ? <span className={`badge__dot${live ? ' badge__dot--live' : ''}`} aria-hidden=\"true\" /> : null}\n {icon ? (\n <span className=\"badge__icon\" aria-hidden=\"true\">\n {icon}\n </span>\n ) : null}\n <span className=\"badge__label\">{children}</span>\n </span>\n );\n}\n"]}
@@ -0,0 +1,12 @@
1
+ // src/motion/presets.ts
2
+ var popIn = (scale, timing) => ({ opacity: [0, 1], scale: [scale, 1], timing });
3
+ var popOut = (scale, timing) => ({ opacity: [0], scale: [scale], timing });
4
+ var slideIn = (distance, timing) => ({
5
+ x: [distance, 0],
6
+ opacity: [0, 1],
7
+ timing
8
+ });
9
+
10
+ export { popIn, popOut, slideIn };
11
+ //# sourceMappingURL=chunk-HDSFWZ7L.js.map
12
+ //# sourceMappingURL=chunk-HDSFWZ7L.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/motion/presets.ts"],"names":[],"mappings":";AAIO,IAAM,KAAA,GAAQ,CAAC,KAAA,EAAe,MAAA,MAAgC,EAAE,OAAA,EAAS,CAAC,CAAA,EAAG,CAAC,GAAG,KAAA,EAAO,CAAC,KAAA,EAAO,CAAC,GAAG,MAAA,EAAO;AAE3G,IAAM,MAAA,GAAS,CAAC,KAAA,EAAe,MAAA,MAAgC,EAAE,OAAA,EAAS,CAAC,CAAC,CAAA,EAAG,KAAA,EAAO,CAAC,KAAK,GAAG,MAAA,EAAO;AAEtG,IAAM,OAAA,GAAU,CAAC,QAAA,EAAkB,MAAA,MAAgC;AAAA,EACxE,CAAA,EAAG,CAAC,QAAA,EAAU,CAAC,CAAA;AAAA,EACf,OAAA,EAAS,CAAC,CAAA,EAAG,CAAC,CAAA;AAAA,EACd;AACF,CAAA","file":"chunk-HDSFWZ7L.js","sourcesContent":["import type { Layer } from '../engine';\n\ntype LayerTiming = Layer['timing'];\n\nexport const popIn = (scale: number, timing: LayerTiming): Layer => ({ opacity: [0, 1], scale: [scale, 1], timing });\n\nexport const popOut = (scale: number, timing: LayerTiming): Layer => ({ opacity: [0], scale: [scale], timing });\n\nexport const slideIn = (distance: number, timing: LayerTiming): Layer => ({\n x: [distance, 0],\n opacity: [0, 1],\n timing,\n});\n"]}
@@ -48,5 +48,5 @@ function Button({
48
48
  }
49
49
 
50
50
  export { Button };
51
- //# sourceMappingURL=chunk-2F5PITAO.js.map
52
- //# sourceMappingURL=chunk-2F5PITAO.js.map
51
+ //# sourceMappingURL=chunk-HY5MPISE.js.map
52
+ //# sourceMappingURL=chunk-HY5MPISE.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/primitives/button/Button.tsx"],"names":[],"mappings":";;;;AA6CO,SAAS,MAAA,CAAO;AAAA,EACrB,OAAA,GAAU,SAAA;AAAA,EACV,IAAA,GAAO,IAAA;AAAA,EACP,IAAA,GAAO,QAAA;AAAA,EACP,QAAA,GAAW,KAAA;AAAA,EACX,OAAA,GAAU,KAAA;AAAA,EACV,SAAA,GAAY,KAAA;AAAA,EACZ,SAAA,GAAY,EAAA;AAAA,EACZ,KAAA;AAAA,EACA,QAAA;AAAA,EACA,OAAA;AAAA,EACA,GAAA;AAAA,EACA,aAAA;AAAA,EACA,SAAA;AAAA,EACA,GAAG;AACL,CAAA,EAAgB;AACd,EAAA,MAAM,GAAA,GAAM,EAAA;AAAA,IACV,KAAA;AAAA,IACA,OAAA,KAAY,UAAA,IAAc,CAAA,KAAA,EAAQ,OAAO,CAAA,CAAA;AAAA,IACzC,IAAA,KAAS,IAAA,IAAQ,CAAA,KAAA,EAAQ,IAAI,CAAA,CAAA;AAAA,IAC7B,SAAA,IAAa,YAAA;AAAA,IACb,OAAA,IAAW,YAAA;AAAA,IACX;AAAA,GACF;AAEA,EAAA,uBACE,IAAA;AAAA,IAAC,QAAA;AAAA,IAAA;AAAA,MACC,IAAA;AAAA,MACA,GAAA;AAAA,MACA,SAAA,EAAW,GAAA;AAAA,MACX,KAAA;AAAA,MACA,UAAU,QAAA,IAAY,OAAA;AAAA,MACtB,aAAW,OAAA,IAAW,MAAA;AAAA,MACtB,OAAA;AAAA,MACA,aAAA;AAAA,MACC,GAAG,IAAA;AAAA,MACH,GAAG,SAAA;AAAA,MAEJ,QAAA,EAAA;AAAA,wBAAA,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,YAAA,EAAc,QAAA,EAAS,CAAA;AAAA,QACtC,0BAAU,GAAA,CAAC,MAAA,EAAA,EAAK,WAAU,cAAA,EAAe,aAAA,EAAY,QAAO,CAAA,GAAK;AAAA;AAAA;AAAA,GACpE;AAEJ","file":"chunk-HY5MPISE.js","sourcesContent":["'use client';\n\nimport './button.css';\n\nimport type { ButtonHTMLAttributes, CSSProperties, ReactNode, Ref } from 'react';\n\nimport type { DataAttributes } from '../../../dom-props';\nimport { cx } from '../../internal/utils/cx';\n\ninterface ButtonOwnProps {\n /** Visual weight / intent. `unstyled` emits base chrome only (sizing, focus ring,\n * layout) with no skin - for local re-skins via `className`, e.g. Alert's tone action. @default 'primary' */\n variant?: 'primary' | 'secondary' | 'ghost' | 'danger' | 'link' | 'unstyled';\n /** Forwarded to the underlying <button> (React 19 ref-as-prop). */\n ref?: Ref<HTMLButtonElement>;\n /** Control height. sm 28px - md 36px (default) - lg 40px. @default 'md' */\n size?: 'sm' | 'md' | 'lg' | 'icon';\n /** `submit` / `reset` / `button`. @default 'button' */\n type?: 'button' | 'submit' | 'reset';\n /** Disable the control (also implied by `loading`). */\n disabled?: boolean;\n /** Loading - swaps content for a spinner and makes the button inert. */\n loading?: boolean;\n /** Stretch to fill the container width. */\n fullWidth?: boolean;\n /** Extra class(es) merged onto the button. */\n className?: string;\n /** Inline styles merged onto the button. */\n style?: CSSProperties;\n /** Button label. */\n children?: ReactNode;\n /** Click handler */\n onClick?: React.MouseEventHandler<HTMLButtonElement>;\n /** Pointer handler */\n onPointerDown?: React.PointerEventHandler<HTMLButtonElement>;\n}\n\ntype ButtonRestProps = Omit<ButtonHTMLAttributes<HTMLButtonElement>, keyof ButtonOwnProps> & DataAttributes;\n\nexport interface ButtonProps extends ButtonOwnProps, ButtonRestProps {\n /** Standard <button> attributes (onClick, name, form, aria-*, data-*, ...) forwarded verbatim.\n * Bare `<button>` attributes also pass through directly; `htmlProps` wins on conflict. */\n htmlProps?: ButtonRestProps;\n}\n\nexport function Button({\n variant = 'primary',\n size = 'md',\n type = 'button',\n disabled = false,\n loading = false,\n fullWidth = false,\n className = '',\n style,\n children,\n onClick,\n ref,\n onPointerDown,\n htmlProps,\n ...rest\n}: ButtonProps) {\n const cls = cx(\n 'btn',\n variant !== 'unstyled' && `btn--${variant}`,\n size !== 'md' && `btn--${size}`,\n fullWidth && 'btn--block',\n loading && 'is-loading',\n className,\n );\n\n return (\n <button\n type={type}\n ref={ref}\n className={cls}\n style={style}\n disabled={disabled || loading}\n aria-busy={loading || undefined}\n onClick={onClick}\n onPointerDown={onPointerDown}\n {...rest}\n {...htmlProps}\n >\n <span className=\"btn__label\">{children}</span>\n {loading ? <span className=\"btn__spinner\" aria-hidden=\"true\" /> : null}\n </button>\n );\n}\n"]}
@@ -1,4 +1,4 @@
1
- 'use client';import { CheckGlyph } from './chunk-NNXJCLTV.js';
1
+ 'use client';import { CheckGlyph } from './chunk-RJFGWJ4W.js';
2
2
  import { cx } from './chunk-QGNC7LH5.js';
3
3
  import './checkbox.css';
4
4
  import { jsxs, jsx } from 'react/jsx-runtime';
@@ -40,5 +40,5 @@ function Checkbox({
40
40
  }
41
41
 
42
42
  export { Checkbox };
43
- //# sourceMappingURL=chunk-QDK66S4G.js.map
44
- //# sourceMappingURL=chunk-QDK66S4G.js.map
43
+ //# sourceMappingURL=chunk-I45AU6KH.js.map
44
+ //# sourceMappingURL=chunk-I45AU6KH.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/primitives/checkbox/Checkbox.tsx"],"names":[],"mappings":";;;;;AAwCO,SAAS,QAAA,CAAS;AAAA,EACvB,OAAA;AAAA,EACA,cAAA;AAAA,EACA,aAAA,GAAgB,KAAA;AAAA,EAChB,KAAA,GAAQ,KAAA;AAAA,EACR,QAAA,GAAW,KAAA;AAAA,EACX,IAAA,GAAO,IAAA;AAAA,EACP,KAAA;AAAA,EACA,WAAA;AAAA,EACA,SAAA,GAAY,EAAA;AAAA,EACZ,KAAA;AAAA,EACA,QAAA;AAAA,EACA;AACF,CAAA,EAAkB;AAChB,EAAA,MAAM,GAAA,GAAM,EAAA,CAAG,KAAA,EAAO,IAAA,KAAS,IAAA,IAAQ,WAAW,KAAA,IAAS,YAAA,EAAc,QAAA,IAAY,eAAA,EAAiB,SAAS,CAAA;AAE/G,EAAA,MAAM,aAAa,OAAA,KAAY,MAAA;AAC/B,EAAA,MAAM,eAAe,UAAA,GAAa,EAAE,OAAA,EAAQ,GAAI,EAAE,cAAA,EAAe;AAEjE,EAAA,uBACE,IAAA,CAAC,OAAA,EAAA,EAAM,SAAA,EAAW,GAAA,EAAK,KAAA,EACrB,QAAA,EAAA;AAAA,oBAAA,GAAA;AAAA,MAAC,UAAA;AAAA,MAAA;AAAA,QACC,aAAA;AAAA,QACA,QAAA;AAAA,QACA,gBAAc,KAAA,IAAS,MAAA;AAAA,QACvB,QAAA;AAAA,QACC,GAAG,YAAA;AAAA,QACH,GAAG;AAAA;AAAA,KACN;AAAA,IACC,KAAA,IAAS,WAAA,mBACR,IAAA,CAAC,MAAA,EAAA,EAAK,WAAU,WAAA,EACb,QAAA,EAAA;AAAA,MAAA,KAAA,mBAAQ,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,YAAA,EAAc,iBAAM,CAAA,GAAU,IAAA;AAAA,MACtD,8BAAc,GAAA,CAAC,MAAA,EAAA,EAAK,SAAA,EAAU,WAAA,EAAa,uBAAY,CAAA,GAAU;AAAA,KAAA,EACpE,CAAA,GACE;AAAA,GAAA,EACN,CAAA;AAEJ","file":"chunk-I45AU6KH.js","sourcesContent":["'use client';\n\nimport './checkbox.css';\n\nimport type { ChangeEventHandler, CSSProperties, InputHTMLAttributes, ReactNode } from 'react';\n\nimport type { DataAttributes } from '../../../dom-props';\nimport { cx } from '../../internal/utils/cx';\nimport { CheckGlyph } from './check-glyph';\n\ninterface CheckboxOwnProps {\n /** Controlled checked state. Omit for uncontrolled (use `defaultChecked`). */\n checked?: boolean;\n /** Uncontrolled initial state. */\n defaultChecked?: boolean;\n /** Indeterminate - the \"some, not all\" select-all state; visually wins over `checked`. @default false */\n indeterminate?: boolean;\n /** Single error state for consent gates (\"you must agree\"); also sets `aria-invalid`. @default false */\n error?: boolean;\n /** Disabled - inert and de-emphasized (distinct fill when checked). */\n disabled?: boolean;\n /** Box size: `md` 18px - `sm` 16px for dense table rows. @default 'md' */\n size?: 'sm' | 'md';\n /** Label text beside the box. */\n label?: ReactNode;\n /** Optional secondary line under the label (settings rows). */\n description?: ReactNode;\n /** Fires on toggle - read `e.target.checked`. */\n onChange?: ChangeEventHandler<HTMLInputElement>;\n /** Extra class(es) merged onto the root label. */\n className?: string;\n /** Inline styles merged onto the root label. */\n style?: CSSProperties;\n}\n\nexport interface CheckboxProps extends CheckboxOwnProps {\n /** Standard <input> attributes (name, value, required, aria-*, ...) forwarded to the checkbox input. */\n htmlProps?: Omit<InputHTMLAttributes<HTMLInputElement>, keyof CheckboxOwnProps | 'type'> & DataAttributes;\n}\n\nexport function Checkbox({\n checked,\n defaultChecked,\n indeterminate = false,\n error = false,\n disabled = false,\n size = 'md',\n label,\n description,\n className = '',\n style,\n onChange,\n htmlProps,\n}: CheckboxProps) {\n const cls = cx('cbx', size === 'sm' && 'cbx--sm', error && 'cbx--error', disabled && 'cbx--disabled', className);\n\n const controlled = checked !== undefined;\n const checkedProps = controlled ? { checked } : { defaultChecked };\n\n return (\n <label className={cls} style={style}>\n <CheckGlyph\n indeterminate={indeterminate}\n disabled={disabled}\n aria-invalid={error || undefined}\n onChange={onChange}\n {...checkedProps}\n {...htmlProps}\n />\n {label || description ? (\n <span className=\"cbx__text\">\n {label ? <span className=\"cbx__label\">{label}</span> : null}\n {description ? <span className=\"cbx__desc\">{description}</span> : null}\n </span>\n ) : null}\n </label>\n );\n}\n"]}
@@ -1,3 +1,5 @@
1
+ import { UIMotion } from './chunk-7IZJERGA.js';
2
+
1
3
  // src/engine/ease.ts
2
4
  var NAMED = {
3
5
  linear: [0, 0, 1, 1],
@@ -103,6 +105,9 @@ function measureAuto(el, key) {
103
105
  function held(list, index) {
104
106
  return list[Math.min(index, list.length - 1)];
105
107
  }
108
+ function cssLength(value) {
109
+ return typeof value === "number" ? `${value}px` : value;
110
+ }
106
111
  function currentValue(el, key) {
107
112
  const raw = getComputedStyle(el).getPropertyValue(key).trim();
108
113
  return raw && raw !== "none" ? raw : RESET[key];
@@ -114,7 +119,7 @@ function compile(el, layer) {
114
119
  const x = layer.x?.length ? layer.x : [0];
115
120
  const y = layer.y?.length ? layer.y : [0];
116
121
  const count = Math.max(x.length, y.length);
117
- frames.translate = Array.from({ length: count }, (_, i) => `${held(x, i)}px ${held(y, i)}px`);
122
+ frames.translate = Array.from({ length: count }, (_, i) => `${cssLength(held(x, i))} ${cssLength(held(y, i))}`);
118
123
  }
119
124
  if (layer.scale) frames.scale = layer.scale.map((v) => typeof v === "number" ? String(v) : `${v[0]} ${v[1]}`);
120
125
  if (layer.opacity) frames.opacity = layer.opacity.map(String);
@@ -123,22 +128,33 @@ function compile(el, layer) {
123
128
  if (!list) continue;
124
129
  if (list[list.length - 1] === "auto") autoKeys.push(key);
125
130
  const measured = list.includes("auto") ? measureAuto(el, key) : 0;
126
- frames[key] = list.map((v) => `${v === "auto" ? measured : v}px`);
131
+ frames[key] = list.map((v) => v === "auto" ? `${measured}px` : cssLength(v));
127
132
  }
128
133
  for (const [key, list] of Object.entries(frames)) if (list.length === 1) list.unshift(currentValue(el, key));
129
134
  return { frames, autoKeys };
130
135
  }
136
+ function commitIfRendered(animation) {
137
+ try {
138
+ animation.commitStyles();
139
+ } catch {
140
+ }
141
+ }
131
142
  var owned = /* @__PURE__ */ new WeakMap();
132
- function claim(el, keys, animation) {
143
+ function claim(el, keys, holder) {
133
144
  const map = owned.get(el) ?? /* @__PURE__ */ new Map();
134
145
  owned.set(el, map);
135
146
  for (const key of keys) {
136
147
  const previous = map.get(key);
137
- if (previous && previous !== animation) previous.cancel();
138
- if (animation) map.set(key, animation);
148
+ if (previous && previous !== holder) previous.cancel();
149
+ if (holder) map.set(key, holder);
139
150
  else map.delete(key);
140
151
  }
141
152
  }
153
+ function release(el, keys, holder) {
154
+ const map = owned.get(el);
155
+ if (!map) return;
156
+ for (const key of keys) if (map.get(key) === holder) map.delete(key);
157
+ }
142
158
  function play(el, layer) {
143
159
  const { frames, autoKeys } = compile(el, layer);
144
160
  const keys = Object.keys(frames);
@@ -164,8 +180,8 @@ function play(el, layer) {
164
180
  if (layer.composite !== "add") claim(el, keys, animation);
165
181
  const finished = animation.finished.then(
166
182
  () => {
167
- if (!autoKeys.length) return;
168
- animation.commitStyles();
183
+ if (!autoKeys.length && !timing?.release) return;
184
+ commitIfRendered(animation);
169
185
  animation.cancel();
170
186
  for (const key of autoKeys) el.style.setProperty(key, "auto");
171
187
  },
@@ -192,6 +208,133 @@ function animate(el, ...layers) {
192
208
  })
193
209
  };
194
210
  }
211
+ function set(el, ...placements) {
212
+ for (const placement of placements) play(el, { ...placement, timing: { duration: 0 } });
213
+ }
214
+
215
+ // src/engine/loop.ts
216
+ var MAX_FRAME_MS = 34;
217
+ var BASE_FRAME_MS = 1e3 / 60;
218
+ var settled2 = { stop() {
219
+ }, finished: Promise.resolve() };
220
+ function loop(frame, options = {}) {
221
+ if (UIMotion.reduced) {
222
+ options.snap?.();
223
+ return settled2;
224
+ }
225
+ const { el, claims, speed } = options;
226
+ const keys = el && claims?.length ? claims : null;
227
+ let raf = 0;
228
+ let stopped = false;
229
+ let hidden = document.visibilityState === "hidden";
230
+ let inView = true;
231
+ let running = false;
232
+ let last = 0;
233
+ let resolveFinished;
234
+ const finished = new Promise((resolve) => resolveFinished = resolve);
235
+ const step = (now) => {
236
+ raf = 0;
237
+ if (!running) return;
238
+ const dt = Math.min(MAX_FRAME_MS, now - last) || BASE_FRAME_MS;
239
+ last = now;
240
+ const rate = Number(speed ? speed() : 1);
241
+ const effective = (isFinite(rate) && rate >= 0 ? rate : 1) / clock.scale;
242
+ frame(dt / BASE_FRAME_MS * effective, dt * effective, now);
243
+ if (running) raf = requestAnimationFrame(step);
244
+ };
245
+ const sync = () => {
246
+ const next = !stopped && !hidden && inView;
247
+ if (next === running) return;
248
+ running = next;
249
+ if (running) {
250
+ last = performance.now();
251
+ raf = requestAnimationFrame(step);
252
+ } else if (raf) {
253
+ cancelAnimationFrame(raf);
254
+ raf = 0;
255
+ }
256
+ };
257
+ const onVisibility = () => {
258
+ hidden = document.visibilityState === "hidden";
259
+ sync();
260
+ };
261
+ document.addEventListener("visibilitychange", onVisibility);
262
+ let observer = null;
263
+ if (el && typeof IntersectionObserver !== "undefined") {
264
+ observer = new IntersectionObserver((entries) => {
265
+ inView = entries[entries.length - 1].isIntersecting;
266
+ sync();
267
+ });
268
+ observer.observe(el);
269
+ }
270
+ const teardown = () => {
271
+ if (stopped) return;
272
+ stopped = true;
273
+ sync();
274
+ document.removeEventListener("visibilitychange", onVisibility);
275
+ observer?.disconnect();
276
+ resolveFinished();
277
+ };
278
+ const holder = { cancel: teardown };
279
+ const stop = () => {
280
+ if (stopped) return;
281
+ if (keys && el) release(el, keys, holder);
282
+ teardown();
283
+ };
284
+ if (keys && el) claim(el, keys, holder);
285
+ sync();
286
+ return { stop, finished };
287
+ }
288
+
289
+ // src/engine/flip.ts
290
+ var MOVE_EPSILON = 0.5;
291
+ var SCALE_EPSILON = 0.01;
292
+ var TOP_LEFT = { x: 0, y: 0 };
293
+ function transformOrigin(el) {
294
+ const [x, y] = getComputedStyle(el).transformOrigin.split(" ");
295
+ return { x: parseFloat(x), y: parseFloat(y) };
296
+ }
297
+ function measure(el) {
298
+ const rect = el.getBoundingClientRect();
299
+ return { left: rect.left + window.scrollX, top: rect.top + window.scrollY, width: rect.width, height: rect.height };
300
+ }
301
+ var shared = /* @__PURE__ */ new Map();
302
+ function keepShared(key, box) {
303
+ shared.set(key, box);
304
+ }
305
+ function readShared(key) {
306
+ return shared.get(key) ?? null;
307
+ }
308
+ function dropShared(key) {
309
+ shared.delete(key);
310
+ }
311
+ function flip(el, from, options = {}) {
312
+ const to = measure(el);
313
+ if (!to.width || !to.height) return null;
314
+ const size = options.size ?? "scale";
315
+ const sx = from.width / to.width;
316
+ const sy = from.height / to.height;
317
+ const moved = Math.abs(from.left - to.left) > MOVE_EPSILON || Math.abs(from.top - to.top) > MOVE_EPSILON;
318
+ const resized = size !== "none" && (Math.abs(sx - 1) > SCALE_EPSILON || Math.abs(sy - 1) > SCALE_EPSILON);
319
+ if (!moved && !resized) return null;
320
+ const scaling = resized && size === "scale";
321
+ const pivot = scaling ? transformOrigin(el) : TOP_LEFT;
322
+ const dx = from.left - to.left + pivot.x * (sx - 1);
323
+ const dy = from.top - to.top + pivot.y * (sy - 1);
324
+ const timing = { ...options.timing, fill: "none" };
325
+ const layers = [{ x: [dx, 0], y: [dy, 0], timing, composite: "add" }];
326
+ if (scaling)
327
+ layers.push({
328
+ scale: [
329
+ [sx, sy],
330
+ [1, 1]
331
+ ],
332
+ timing
333
+ });
334
+ if (resized && size === "morph")
335
+ layers.push({ width: [from.width, to.width], height: [from.height, to.height], timing });
336
+ return animate(el, ...layers);
337
+ }
195
338
 
196
339
  // src/engine/drag.ts
197
340
  function startDrag(origin, handlers) {
@@ -228,42 +371,6 @@ function startDrag(origin, handlers) {
228
371
  return detach;
229
372
  }
230
373
 
231
- // src/engine/flip.ts
232
- var MOVE_EPSILON = 0.5;
233
- var SCALE_EPSILON = 0.01;
234
- function measure(el) {
235
- const rect = el.getBoundingClientRect();
236
- return { left: rect.left + window.scrollX, top: rect.top + window.scrollY, width: rect.width, height: rect.height };
237
- }
238
- var shared = /* @__PURE__ */ new Map();
239
- function keepShared(key, box) {
240
- shared.set(key, box);
241
- }
242
- function readShared(key) {
243
- return shared.get(key) ?? null;
244
- }
245
- function dropShared(key) {
246
- shared.delete(key);
247
- }
248
- function flip(el, from, options = {}) {
249
- const to = measure(el);
250
- if (!to.width || !to.height) return null;
251
- const dx = from.left - to.left;
252
- const dy = from.top - to.top;
253
- const sx = options.scale === false ? 1 : from.width / to.width;
254
- const sy = options.scale === false ? 1 : from.height / to.height;
255
- const moved = Math.abs(dx) > MOVE_EPSILON || Math.abs(dy) > MOVE_EPSILON;
256
- const scaled = Math.abs(sx - 1) > SCALE_EPSILON || Math.abs(sy - 1) > SCALE_EPSILON;
257
- if (!moved && !scaled) return null;
258
- const layer = { x: [dx, 0], y: [dy, 0], timing: { ...options.timing, fill: "none" } };
259
- if (scaled)
260
- layer.scale = [
261
- [sx, sy],
262
- [1, 1]
263
- ];
264
- return animate(el, layer);
265
- }
266
-
267
- export { animate, clock, dropShared, flip, keepShared, measure, readShared, startDrag };
268
- //# sourceMappingURL=chunk-YGCVWGUG.js.map
269
- //# sourceMappingURL=chunk-YGCVWGUG.js.map
374
+ export { animate, clock, dropShared, flip, keepShared, loop, measure, readShared, set, startDrag };
375
+ //# sourceMappingURL=chunk-IJS7TPGV.js.map
376
+ //# sourceMappingURL=chunk-IJS7TPGV.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/engine/ease.ts","../src/engine/animate.ts","../src/engine/loop.ts","../src/engine/flip.ts","../src/engine/drag.ts"],"names":["settled"],"mappings":"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","file":"chunk-IJS7TPGV.js","sourcesContent":["import type { Bezier, MotionTransition } from '../tokens/motion-tokens';\n\nconst NAMED: Record<string, Bezier> = {\n linear: [0, 0, 1, 1],\n easeIn: [0.42, 0, 1, 1],\n easeOut: [0, 0, 0.58, 1],\n easeInOut: [0.42, 0, 0.58, 1],\n circIn: [0.55, 0, 1, 0.45],\n circOut: [0, 0.55, 0.45, 1],\n circInOut: [0.85, 0, 0.15, 1],\n backIn: [0.36, 0, 0.66, -0.56],\n backOut: [0.34, 1.56, 0.64, 1],\n backInOut: [0.68, -0.6, 0.32, 1.6],\n anticipate: [0.38, -0.4, 0.88, 1.08],\n};\n\nexport type EaseValue = NonNullable<MotionTransition['ease']>;\n\nconst toBezier = (ease: EaseValue): Bezier => (typeof ease === 'string' ? (NAMED[ease] ?? NAMED.easeInOut) : ease);\n\nconst cssBezier = (ease: EaseValue): string => `cubic-bezier(${toBezier(ease).join(',')})`;\n\nconst isSegmented = (ease: unknown): ease is EaseValue[] =>\n Array.isArray(ease) && (Array.isArray(ease[0]) || typeof ease[0] === 'string');\n\nconst ARRIVAL = 0.99;\nconst SETTLE_BAND = 0.002;\nconst MAX_SPRING_SECONDS = 4;\nconst SETTLE_LIMIT = 2.5;\nconst SETTLE_STEP = 1 / 240;\nconst OMEGA_PROBE = 0.1;\nconst OMEGA_CEILING = 1e5;\n\nfunction springAt(zeta: number, omega: number, t: number): number {\n const decay = Math.exp(-zeta * omega * t);\n if (zeta < 1) {\n const damped = omega * Math.sqrt(1 - zeta * zeta);\n return 1 - decay * (Math.cos(damped * t) + ((zeta * omega) / damped) * Math.sin(damped * t));\n }\n return 1 - decay * (1 + omega * t);\n}\n\nfunction omegaForArrival(zeta: number, visual: number): number {\n let hi = OMEGA_PROBE / visual;\n while (hi < OMEGA_CEILING && springAt(zeta, hi, visual) < ARRIVAL) hi *= 2;\n let lo = hi / 2;\n for (let i = 0; i < 40; i++) {\n const mid = (lo + hi) / 2;\n if (springAt(zeta, mid, visual) < ARRIVAL) lo = mid;\n else hi = mid;\n }\n return hi;\n}\n\nfunction settleSeconds(zeta: number, omega: number, visual: number): number {\n let last = SETTLE_STEP;\n for (let t = SETTLE_STEP; t < MAX_SPRING_SECONDS; t += SETTLE_STEP) {\n if (Math.abs(springAt(zeta, omega, t) - 1) >= SETTLE_BAND) last = t;\n }\n return Math.min(MAX_SPRING_SECONDS, visual * SETTLE_LIMIT, last + SETTLE_STEP);\n}\n\nconst SAMPLE_MS = 4;\nconst MIN_SAMPLES = 24;\nconst MAX_SAMPLES = 120;\n\nconst trim = (n: number) => Math.round(n * 1e4) / 1e4;\n\nfunction toLinearEasing(at: (progress: number) => number, durationMs: number): string {\n const steps = Math.min(MAX_SAMPLES, Math.max(MIN_SAMPLES, Math.round(durationMs / SAMPLE_MS)));\n const points: string[] = [];\n for (let i = 0; i <= steps; i++) points.push(String(trim(at(i / steps))));\n return `linear(${points.join(',')})`;\n}\n\ninterface SpringCurve {\n duration: number;\n easing: string;\n}\n\nconst springCache = new Map<string, SpringCurve>();\n\nfunction springCurve(visual: number, bounce: number): SpringCurve {\n const key = `${visual}:${bounce}`;\n const cached = springCache.get(key);\n if (cached) return cached;\n const zeta = Math.min(1, Math.max(0.05, 1 - bounce));\n const omega = omegaForArrival(zeta, visual);\n const seconds = settleSeconds(zeta, omega, visual);\n const duration = seconds * 1000;\n const at = (progress: number) => (progress >= 1 ? 1 : springAt(zeta, omega, progress * seconds));\n const curve: SpringCurve = { duration, easing: toLinearEasing(at, duration) };\n springCache.set(key, curve);\n return curve;\n}\n\nexport interface Timing extends Omit<MotionTransition, 'ease'> {\n ease?: EaseValue | EaseValue[];\n times?: number[];\n fill?: FillMode;\n release?: boolean;\n}\n\nexport interface ResolvedTiming {\n duration: number;\n delay: number;\n easing: string;\n segments: string[] | null;\n}\n\nexport function resolveTiming(timing: Timing = {}): ResolvedTiming {\n const delay = (timing.delay ?? 0) * 1000;\n const spring = timing.type === 'spring' || (timing.visualDuration != null && !timing.type);\n if (spring) {\n const visual = Math.max(timing.visualDuration ?? timing.duration ?? 0.3, 0.01);\n const curve = springCurve(visual, timing.bounce ?? 0);\n return { duration: curve.duration, delay, easing: curve.easing, segments: null };\n }\n const duration = (timing.duration ?? 0.3) * 1000;\n const ease = timing.ease;\n if (isSegmented(ease)) return { duration, delay, easing: 'linear', segments: ease.map(cssBezier) };\n const bezier = ease === undefined ? NAMED.easeInOut : toBezier(ease);\n return { duration, delay, easing: cssBezier(bezier), segments: null };\n}\n","import { resolveTiming, type Timing } from './ease';\n\nexport const clock = { scale: 1 };\n\nexport interface Playback {\n stop(): void;\n finished: Promise<void>;\n}\n\ntype Vec = [number, number];\nexport type Length = number | `${number}%`;\nexport type Size = Length | 'auto';\n\nexport interface Layer {\n x?: Length[];\n y?: Length[];\n scale?: number[] | Vec[];\n opacity?: number[];\n width?: Size[];\n height?: Size[];\n timing?: Timing;\n composite?: CompositeOperation;\n}\n\nexport type Placement = Omit<Layer, 'timing' | 'composite'>;\n\nconst RESET: Record<string, string> = { translate: '0px 0px', scale: '1' };\nconst AUTO_METRIC = { width: 'offsetWidth', height: 'offsetHeight' } as const;\nconst SIZES = ['width', 'height'] as const;\n\nfunction measureAuto(el: HTMLElement, key: 'width' | 'height'): number {\n const saved = el.style.getPropertyValue(key);\n el.style.setProperty(key, 'auto');\n const measured = el[AUTO_METRIC[key]];\n if (saved) el.style.setProperty(key, saved);\n else el.style.removeProperty(key);\n return measured;\n}\n\nfunction held<T>(list: T[], index: number): T {\n return list[Math.min(index, list.length - 1)];\n}\n\nfunction cssLength(value: Length): string {\n return typeof value === 'number' ? `${value}px` : value;\n}\n\nfunction currentValue(el: HTMLElement, key: string): string {\n const raw = getComputedStyle(el).getPropertyValue(key).trim();\n return raw && raw !== 'none' ? raw : RESET[key];\n}\n\nfunction compile(el: HTMLElement, layer: Layer) {\n const frames: Record<string, string[]> = {};\n const autoKeys: string[] = [];\n\n if (layer.x?.length || layer.y?.length) {\n const x = layer.x?.length ? layer.x : [0];\n const y = layer.y?.length ? layer.y : [0];\n const count = Math.max(x.length, y.length);\n frames.translate = Array.from({ length: count }, (_, i) => `${cssLength(held(x, i))} ${cssLength(held(y, i))}`);\n }\n if (layer.scale) frames.scale = layer.scale.map((v) => (typeof v === 'number' ? String(v) : `${v[0]} ${v[1]}`));\n if (layer.opacity) frames.opacity = layer.opacity.map(String);\n\n for (const key of SIZES) {\n const list = layer[key];\n if (!list) continue;\n if (list[list.length - 1] === 'auto') autoKeys.push(key);\n const measured = list.includes('auto') ? measureAuto(el, key) : 0;\n frames[key] = list.map((v) => (v === 'auto' ? `${measured}px` : cssLength(v)));\n }\n\n for (const [key, list] of Object.entries(frames)) if (list.length === 1) list.unshift(currentValue(el, key));\n return { frames, autoKeys };\n}\n\nfunction commitIfRendered(animation: Animation): void {\n try {\n animation.commitStyles();\n } catch {}\n}\n\nexport interface PropertyHolder {\n cancel(): void;\n}\n\nconst owned = new WeakMap<HTMLElement, Map<string, PropertyHolder>>();\n\nexport function claim(el: HTMLElement, keys: string[], holder: PropertyHolder | null): void {\n const map = owned.get(el) ?? new Map<string, PropertyHolder>();\n owned.set(el, map);\n for (const key of keys) {\n const previous = map.get(key);\n if (previous && previous !== holder) previous.cancel();\n if (holder) map.set(key, holder);\n else map.delete(key);\n }\n}\n\nexport function release(el: HTMLElement, keys: string[], holder: PropertyHolder): void {\n const map = owned.get(el);\n if (!map) return;\n for (const key of keys) if (map.get(key) === holder) map.delete(key);\n}\n\nfunction play(el: HTMLElement, layer: Layer): Playback | null {\n const { frames, autoKeys } = compile(el, layer);\n const keys = Object.keys(frames);\n if (!keys.length) return null;\n\n const timing = layer.timing;\n const resolved = resolveTiming(timing);\n\n if (resolved.duration <= 0) {\n claim(el, keys, null);\n if (timing?.fill !== 'none') for (const key of keys) el.style.setProperty(key, frames[key][frames[key].length - 1]);\n return null;\n }\n\n const shaped: PropertyIndexedKeyframes = { ...frames };\n if (timing?.times) shaped.offset = timing.times;\n if (resolved.segments) shaped.easing = resolved.segments;\n\n const animation = el.animate(shaped, {\n duration: resolved.duration,\n delay: resolved.delay,\n easing: resolved.easing,\n fill: timing?.fill ?? 'both',\n composite: layer.composite,\n });\n animation.playbackRate = 1 / clock.scale;\n if (layer.composite !== 'add') claim(el, keys, animation);\n\n const finished = animation.finished.then(\n (): void => {\n if (!autoKeys.length && !timing?.release) return;\n commitIfRendered(animation);\n animation.cancel();\n for (const key of autoKeys) el.style.setProperty(key, 'auto');\n },\n (): void => {},\n );\n\n return { stop: () => animation.cancel(), finished };\n}\n\nconst settled: Playback = { stop() {}, finished: Promise.resolve() };\n\nexport function animate(el: HTMLElement, ...layers: Layer[]): Playback {\n const plays: Playback[] = [];\n for (const layer of layers) {\n const started = play(el, layer);\n if (started) plays.push(started);\n }\n if (!plays.length) return settled;\n if (plays.length === 1) return plays[0];\n return {\n stop: () => {\n for (const started of plays) started.stop();\n },\n finished: Promise.all(plays.map((started) => started.finished)).then((): void => {}),\n };\n}\n\nexport function set(el: HTMLElement, ...placements: Placement[]): void {\n for (const placement of placements) play(el, { ...placement, timing: { duration: 0 } });\n}\n","import { UIMotion } from '../tokens/motion-tokens';\nimport { claim, clock, release, type Playback, type PropertyHolder } from './animate';\n\nexport type SimulationFrame = (k: number, dt: number, now: number) => void;\n\nexport interface LoopOptions {\n el?: HTMLElement;\n claims?: string[];\n speed?: () => number;\n snap?: () => void;\n}\n\nconst MAX_FRAME_MS = 34;\nconst BASE_FRAME_MS = 1000 / 60;\n\nconst settled: Playback = { stop() {}, finished: Promise.resolve() };\n\nexport function loop(frame: SimulationFrame, options: LoopOptions = {}): Playback {\n if (UIMotion.reduced) {\n options.snap?.();\n return settled;\n }\n\n const { el, claims, speed } = options;\n const keys = el && claims?.length ? claims : null;\n\n let raf = 0;\n let stopped = false;\n let hidden = document.visibilityState === 'hidden';\n let inView = true;\n let running = false;\n let last = 0;\n let resolveFinished!: () => void;\n const finished = new Promise<void>((resolve) => (resolveFinished = resolve));\n\n const step = (now: number) => {\n raf = 0;\n if (!running) return;\n const dt = Math.min(MAX_FRAME_MS, now - last) || BASE_FRAME_MS;\n last = now;\n const rate = Number(speed ? speed() : 1);\n const effective = (isFinite(rate) && rate >= 0 ? rate : 1) / clock.scale;\n frame((dt / BASE_FRAME_MS) * effective, dt * effective, now);\n if (running) raf = requestAnimationFrame(step);\n };\n\n const sync = () => {\n const next = !stopped && !hidden && inView;\n if (next === running) return;\n running = next;\n if (running) {\n last = performance.now();\n raf = requestAnimationFrame(step);\n } else if (raf) {\n cancelAnimationFrame(raf);\n raf = 0;\n }\n };\n\n const onVisibility = () => {\n hidden = document.visibilityState === 'hidden';\n sync();\n };\n document.addEventListener('visibilitychange', onVisibility);\n\n let observer: IntersectionObserver | null = null;\n if (el && typeof IntersectionObserver !== 'undefined') {\n observer = new IntersectionObserver((entries) => {\n inView = entries[entries.length - 1].isIntersecting;\n sync();\n });\n observer.observe(el);\n }\n\n const teardown = () => {\n if (stopped) return;\n stopped = true;\n sync();\n document.removeEventListener('visibilitychange', onVisibility);\n observer?.disconnect();\n resolveFinished();\n };\n\n const holder: PropertyHolder = { cancel: teardown };\n\n const stop = () => {\n if (stopped) return;\n if (keys && el) release(el, keys, holder);\n teardown();\n };\n\n if (keys && el) claim(el, keys, holder);\n\n sync();\n\n return { stop, finished };\n}\n","import { animate, type Layer, type Playback } from './animate';\nimport type { Timing } from './ease';\n\nexport interface Box {\n left: number;\n top: number;\n width: number;\n height: number;\n}\n\nconst MOVE_EPSILON = 0.5;\nconst SCALE_EPSILON = 0.01;\nconst TOP_LEFT = { x: 0, y: 0 };\n\nfunction transformOrigin(el: HTMLElement): { x: number; y: number } {\n const [x, y] = getComputedStyle(el).transformOrigin.split(' ');\n return { x: parseFloat(x), y: parseFloat(y) };\n}\n\nexport function measure(el: HTMLElement): Box {\n const rect = el.getBoundingClientRect();\n return { left: rect.left + window.scrollX, top: rect.top + window.scrollY, width: rect.width, height: rect.height };\n}\n\nconst shared = new Map<string, Box>();\n\nexport function keepShared(key: string, box: Box): void {\n shared.set(key, box);\n}\n\nexport function readShared(key: string): Box | null {\n return shared.get(key) ?? null;\n}\n\nexport function dropShared(key: string): void {\n shared.delete(key);\n}\n\nexport interface FlipOptions {\n /** How a changed box size is reconciled: cheap scale correction, a real width/height morph, or left alone. */\n size?: 'scale' | 'morph' | 'none';\n timing?: Timing;\n}\n\nexport function flip(el: HTMLElement, from: Box, options: FlipOptions = {}): Playback | null {\n const to = measure(el);\n if (!to.width || !to.height) return null;\n\n const size = options.size ?? 'scale';\n const sx = from.width / to.width;\n const sy = from.height / to.height;\n\n const moved = Math.abs(from.left - to.left) > MOVE_EPSILON || Math.abs(from.top - to.top) > MOVE_EPSILON;\n const resized = size !== 'none' && (Math.abs(sx - 1) > SCALE_EPSILON || Math.abs(sy - 1) > SCALE_EPSILON);\n if (!moved && !resized) return null;\n\n const scaling = resized && size === 'scale';\n const pivot = scaling ? transformOrigin(el) : TOP_LEFT;\n const dx = from.left - to.left + pivot.x * (sx - 1);\n const dy = from.top - to.top + pivot.y * (sy - 1);\n\n const timing = { ...options.timing, fill: 'none' as const };\n const layers: Layer[] = [{ x: [dx, 0], y: [dy, 0], timing, composite: 'add' }];\n if (scaling)\n layers.push({\n scale: [\n [sx, sy],\n [1, 1],\n ],\n timing,\n });\n if (resized && size === 'morph')\n layers.push({ width: [from.width, to.width], height: [from.height, to.height], timing });\n\n return animate(el, ...layers);\n}\n","interface Axes {\n x: number;\n y: number;\n}\n\nexport interface PanInfo {\n offset: Axes;\n velocity: Axes;\n}\n\ninterface DragHandlers {\n onMove?: (info: PanInfo) => void;\n onEnd?: (info: PanInfo) => void;\n}\n\nexport function startDrag(origin: { clientX: number; clientY: number }, handlers: DragHandlers): () => void {\n const startX = origin.clientX;\n const startY = origin.clientY;\n let lastX = startX;\n let lastY = startY;\n let lastTime = performance.now();\n let velocity: Axes = { x: 0, y: 0 };\n\n const info = (): PanInfo => ({ offset: { x: lastX - startX, y: lastY - startY }, velocity });\n\n const move = (event: PointerEvent) => {\n const now = performance.now();\n const elapsed = now - lastTime;\n if (elapsed > 0) {\n velocity = { x: ((event.clientX - lastX) / elapsed) * 1000, y: ((event.clientY - lastY) / elapsed) * 1000 };\n lastTime = now;\n }\n lastX = event.clientX;\n lastY = event.clientY;\n handlers.onMove?.(info());\n };\n\n const detach = () => {\n window.removeEventListener('pointermove', move);\n window.removeEventListener('pointerup', end);\n window.removeEventListener('pointercancel', end);\n };\n\n const end = () => {\n detach();\n handlers.onEnd?.(info());\n };\n\n window.addEventListener('pointermove', move);\n window.addEventListener('pointerup', end);\n window.addEventListener('pointercancel', end);\n return detach;\n}\n"]}
@@ -1,9 +1,10 @@
1
1
  'use client';import { tokenPx } from './chunk-UE63OOVG.js';
2
2
  import { useLayoutEffect } from 'react';
3
3
 
4
+ var GLIDE = "left var(--duration-fast) var(--ease-standard), top var(--duration-fast) var(--ease-standard)";
4
5
  function useAnchorPosition({ side, align, arrow, anchor, triggerRef, panelRef }) {
5
6
  useLayoutEffect(() => {
6
- const place = () => {
7
+ const place = (moved) => {
7
8
  const t = anchor ?? triggerRef.current;
8
9
  const p = panelRef.current;
9
10
  if (!t || !p) return;
@@ -39,8 +40,13 @@ function useAnchorPosition({ side, align, arrow, anchor, triggerRef, panelRef })
39
40
  y = Math.min(Math.max(y, edge), vh - ph - edge);
40
41
  x = Math.max(Math.min(x, vw - pw - edge), edge);
41
42
  }
42
- p.style.left = Math.round(x) + "px";
43
- p.style.top = Math.round(y) + "px";
43
+ const left = Math.round(x) + "px";
44
+ const top = Math.round(y) + "px";
45
+ if (p.style.left !== left || p.style.top !== top) {
46
+ p.style.transition = moved && p.style.left ? GLIDE : "";
47
+ p.style.left = left;
48
+ p.style.top = top;
49
+ }
44
50
  p.setAttribute("data-side", s);
45
51
  p.setAttribute("data-align", align);
46
52
  if (arrow) {
@@ -57,19 +63,20 @@ function useAnchorPosition({ side, align, arrow, anchor, triggerRef, panelRef })
57
63
  }
58
64
  }
59
65
  };
60
- place();
61
- window.addEventListener("scroll", place, true);
62
- window.addEventListener("resize", place);
63
- const ro = new ResizeObserver(place);
66
+ place(true);
67
+ const track = () => place(false);
68
+ window.addEventListener("scroll", track, true);
69
+ window.addEventListener("resize", track);
70
+ const ro = new ResizeObserver(track);
64
71
  ro.observe(panelRef.current);
65
72
  return () => {
66
- window.removeEventListener("scroll", place, true);
67
- window.removeEventListener("resize", place);
73
+ window.removeEventListener("scroll", track, true);
74
+ window.removeEventListener("resize", track);
68
75
  ro.disconnect();
69
76
  };
70
77
  }, [side, align, arrow, anchor]);
71
78
  }
72
79
 
73
80
  export { useAnchorPosition };
74
- //# sourceMappingURL=chunk-62P3KD57.js.map
75
- //# sourceMappingURL=chunk-62P3KD57.js.map
81
+ //# sourceMappingURL=chunk-IUQAUBVM.js.map
82
+ //# sourceMappingURL=chunk-IUQAUBVM.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/internal/overlay/position.ts"],"names":[],"mappings":"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","file":"chunk-IUQAUBVM.js","sourcesContent":["'use client';\n\nimport { useLayoutEffect, type RefObject } from 'react';\n\nimport { tokenPx } from '../utils/token-px';\n\nconst GLIDE = 'left var(--duration-fast) var(--ease-standard), top var(--duration-fast) var(--ease-standard)';\n\nexport interface VirtualAnchor {\n getBoundingClientRect(): DOMRect;\n}\n\ninterface UseAnchorPositionProps {\n side: 'top' | 'bottom' | 'left' | 'right';\n align: 'start' | 'center' | 'end';\n arrow: boolean;\n anchor?: VirtualAnchor | null;\n triggerRef: RefObject<HTMLElement>;\n panelRef: RefObject<HTMLElement>;\n}\n\nexport function useAnchorPosition({ side, align, arrow, anchor, triggerRef, panelRef }: UseAnchorPositionProps) {\n useLayoutEffect(() => {\n const place = (moved: boolean) => {\n const t = anchor ?? triggerRef.current;\n const p = panelRef.current;\n if (!t || !p) return;\n\n const r = t.getBoundingClientRect();\n const pw = p.offsetWidth;\n const ph = p.offsetHeight;\n\n const edge = tokenPx('--space-2');\n\n const gap = arrow ? tokenPx('--space-2') + 3 : 0;\n\n const vw = window.innerWidth;\n const vh = window.innerHeight;\n\n const room: Record<string, number> = { top: r.top, bottom: vh - r.bottom, left: r.left, right: vw - r.right };\n\n const opposite: Record<string, 'top' | 'bottom' | 'left' | 'right'> = {\n top: 'bottom',\n bottom: 'top',\n left: 'right',\n right: 'left',\n };\n\n const vertical = side === 'top' || side === 'bottom';\n\n let s = side;\n if (room[s] < (vertical ? ph : pw) + gap && room[opposite[s]] > room[s]) {\n s = opposite[s];\n }\n\n let x: number;\n let y: number;\n\n if (vertical) {\n y = s === 'top' ? r.top - ph - gap : r.bottom + gap;\n\n x = align === 'start' ? r.left : align === 'end' ? r.right - pw : r.left + (r.width - pw) / 2;\n\n x = Math.min(Math.max(x, edge), vw - pw - edge);\n\n y = Math.max(Math.min(y, vh - ph - edge), edge);\n } else {\n x = s === 'left' ? r.left - pw - gap : r.right + gap;\n\n y = align === 'start' ? r.top : align === 'end' ? r.bottom - ph : r.top + (r.height - ph) / 2;\n\n y = Math.min(Math.max(y, edge), vh - ph - edge);\n x = Math.max(Math.min(x, vw - pw - edge), edge);\n }\n\n const left = Math.round(x) + 'px';\n const top = Math.round(y) + 'px';\n if (p.style.left !== left || p.style.top !== top) {\n p.style.transition = moved && p.style.left ? GLIDE : '';\n p.style.left = left;\n p.style.top = top;\n }\n\n p.setAttribute('data-side', s);\n p.setAttribute('data-align', align);\n\n if (arrow) {\n if (vertical) {\n p.style.setProperty(\n '--overlay-arrow-x',\n Math.round(Math.min(Math.max(r.left + r.width / 2 - x, 12), pw - 12)) + 'px',\n );\n } else {\n p.style.setProperty(\n '--overlay-arrow-y',\n Math.round(Math.min(Math.max(r.top + r.height / 2 - y, 12), ph - 12)) + 'px',\n );\n }\n }\n };\n\n place(true);\n\n const track = () => place(false);\n\n window.addEventListener('scroll', track, true);\n window.addEventListener('resize', track);\n\n const ro = new ResizeObserver(track);\n ro.observe(panelRef.current!);\n\n return () => {\n window.removeEventListener('scroll', track, true);\n window.removeEventListener('resize', track);\n ro.disconnect();\n };\n }, [side, align, arrow, anchor]); // eslint-disable-line react-hooks/exhaustive-deps\n}\n"]}
@@ -0,0 +1,44 @@
1
+ 'use client';// src/components/internal/utils/activation.ts
2
+ var drivesActivation = (pointerType) => pointerType === "mouse" || pointerType === "pen";
3
+ var activatedOnPointerDown = false;
4
+ function isInert(target) {
5
+ const el = target;
6
+ return Boolean(el?.disabled) || el?.getAttribute?.("aria-disabled") === "true";
7
+ }
8
+ function takeFocus(target) {
9
+ const el = target;
10
+ if (!el || typeof el.focus !== "function" || (el.tabIndex ?? -1) < 0) return;
11
+ if (el !== document.activeElement) el.focus({ preventScroll: true });
12
+ }
13
+ function pointerDownActivates(e, holdFocus = false) {
14
+ activatedOnPointerDown = !e.defaultPrevented && e.button === 0 && !e.ctrlKey && !e.metaKey && !e.shiftKey && !e.altKey && drivesActivation(e.pointerType) && !isInert(e.currentTarget);
15
+ if (!activatedOnPointerDown) return false;
16
+ if (holdFocus) e.preventDefault();
17
+ else takeFocus(e.currentTarget);
18
+ return true;
19
+ }
20
+ function declinePointerDown() {
21
+ activatedOnPointerDown = false;
22
+ }
23
+ function clickActivates(e) {
24
+ const native = "nativeEvent" in e ? e.nativeEvent : e;
25
+ if (isInert(e.currentTarget)) return false;
26
+ return !drivesActivation(native.pointerType) || !activatedOnPointerDown;
27
+ }
28
+ function activationProps(activate, { on = "click", holdFocus, onPointerDown, onClick } = {}) {
29
+ return {
30
+ onPointerDown: (e) => {
31
+ onPointerDown?.(e);
32
+ if (on !== "pointerdown") return declinePointerDown();
33
+ if (pointerDownActivates(e, holdFocus)) activate(e);
34
+ },
35
+ onClick: (e) => {
36
+ onClick?.(e);
37
+ if (clickActivates(e)) activate(e);
38
+ }
39
+ };
40
+ }
41
+
42
+ export { activationProps, clickActivates, declinePointerDown, pointerDownActivates };
43
+ //# sourceMappingURL=chunk-JY6A2ZJZ.js.map
44
+ //# sourceMappingURL=chunk-JY6A2ZJZ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/components/internal/utils/activation.ts"],"names":[],"mappings":";AAUA,IAAM,gBAAA,GAAmB,CAAC,WAAA,KAAoC,WAAA,KAAgB,WAAW,WAAA,KAAgB,KAAA;AAEzG,IAAI,sBAAA,GAAyB,KAAA;AAE7B,SAAS,QAAQ,MAAA,EAA4B;AAC3C,EAAA,MAAM,EAAA,GAAK,MAAA;AACX,EAAA,OAAO,QAAQ,EAAA,EAAI,QAAQ,KAAK,EAAA,EAAI,YAAA,GAAe,eAAe,CAAA,KAAM,MAAA;AAC1E;AAEA,SAAS,UAAU,MAAA,EAA4B;AAC7C,EAAA,MAAM,EAAA,GAAK,MAAA;AACX,EAAA,IAAI,CAAC,MAAM,OAAO,EAAA,CAAG,UAAU,UAAA,IAAA,CAAe,EAAA,CAAG,QAAA,IAAY,EAAA,IAAM,CAAA,EAAG;AACtE,EAAA,IAAI,EAAA,KAAO,SAAS,aAAA,EAAe,EAAA,CAAG,MAAM,EAAE,aAAA,EAAe,MAAM,CAAA;AACrE;AAEO,SAAS,oBAAA,CAAqB,CAAA,EAAoB,SAAA,GAAY,KAAA,EAAO;AAC1E,EAAA,sBAAA,GACE,CAAC,CAAA,CAAE,gBAAA,IACH,CAAA,CAAE,MAAA,KAAW,KACb,CAAC,CAAA,CAAE,OAAA,IACH,CAAC,CAAA,CAAE,OAAA,IACH,CAAC,CAAA,CAAE,QAAA,IACH,CAAC,CAAA,CAAE,MAAA,IACH,gBAAA,CAAiB,CAAA,CAAE,WAAW,CAAA,IAC9B,CAAC,OAAA,CAAQ,CAAA,CAAE,aAAa,CAAA;AAC1B,EAAA,IAAI,CAAC,wBAAwB,OAAO,KAAA;AACpC,EAAA,IAAI,SAAA,IAAa,cAAA,EAAe;AAAA,OAC3B,SAAA,CAAU,EAAE,aAAa,CAAA;AAC9B,EAAA,OAAO,IAAA;AACT;AAEO,SAAS,kBAAA,GAAqB;AACnC,EAAA,sBAAA,GAAyB,KAAA;AAC3B;AAEO,SAAS,eAAe,CAAA,EAAkB;AAC/C,EAAA,MAAM,MAAA,GAAU,aAAA,IAAiB,CAAA,GAAI,CAAA,CAAE,WAAA,GAAc,CAAA;AACrD,EAAA,IAAI,OAAA,CAAQ,CAAA,CAAE,aAAa,CAAA,EAAG,OAAO,KAAA;AACrC,EAAA,OAAO,CAAC,gBAAA,CAAiB,MAAA,CAAO,WAAW,KAAK,CAAC,sBAAA;AACnD;AAaO,SAAS,eAAA,CACd,QAAA,EACA,EAAE,EAAA,GAAK,OAAA,EAAS,WAAW,aAAA,EAAe,OAAA,EAAQ,GAA0B,EAAC,EAC7E;AACA,EAAA,OAAO;AAAA,IACL,aAAA,EAAe,CAAC,CAAA,KAA4B;AAC1C,MAAA,aAAA,GAAgB,CAAC,CAAA;AACjB,MAAA,IAAI,EAAA,KAAO,aAAA,EAAe,OAAO,kBAAA,EAAmB;AACpD,MAAA,IAAI,oBAAA,CAAqB,CAAA,EAAG,SAAS,CAAA,WAAY,CAAC,CAAA;AAAA,IACpD,CAAA;AAAA,IACA,OAAA,EAAS,CAAC,CAAA,KAA0B;AAClC,MAAA,OAAA,GAAU,CAAC,CAAA;AACX,MAAA,IAAI,cAAA,CAAe,CAAC,CAAA,EAAG,QAAA,CAAS,CAAC,CAAA;AAAA,IACnC;AAAA,GACF;AACF","file":"chunk-JY6A2ZJZ.js","sourcesContent":["'use client';\n\nimport type { MouseEvent as ReactMouseEvent, PointerEvent as ReactPointerEvent } from 'react';\n\n/** When a library-owned trigger fires: on `pointerdown` (snappier) or on `click`. */\nexport type ActivateOn = 'pointerdown' | 'click';\n\ntype AnyPointerEvent = ReactPointerEvent<Element> | PointerEvent;\ntype AnyMouseEvent = ReactMouseEvent<Element> | MouseEvent;\n\nconst drivesActivation = (pointerType: string | undefined) => pointerType === 'mouse' || pointerType === 'pen';\n\nlet activatedOnPointerDown = false;\n\nfunction isInert(target: EventTarget | null) {\n const el = target as (Element & { disabled?: boolean }) | null;\n return Boolean(el?.disabled) || el?.getAttribute?.('aria-disabled') === 'true';\n}\n\nfunction takeFocus(target: EventTarget | null) {\n const el = target as (HTMLElement & { tabIndex?: number }) | null;\n if (!el || typeof el.focus !== 'function' || (el.tabIndex ?? -1) < 0) return;\n if (el !== document.activeElement) el.focus({ preventScroll: true });\n}\n\nexport function pointerDownActivates(e: AnyPointerEvent, holdFocus = false) {\n activatedOnPointerDown =\n !e.defaultPrevented &&\n e.button === 0 &&\n !e.ctrlKey &&\n !e.metaKey &&\n !e.shiftKey &&\n !e.altKey &&\n drivesActivation(e.pointerType) &&\n !isInert(e.currentTarget);\n if (!activatedOnPointerDown) return false;\n if (holdFocus) e.preventDefault();\n else takeFocus(e.currentTarget);\n return true;\n}\n\nexport function declinePointerDown() {\n activatedOnPointerDown = false;\n}\n\nexport function clickActivates(e: AnyMouseEvent) {\n const native = ('nativeEvent' in e ? e.nativeEvent : e) as PointerEvent;\n if (isInert(e.currentTarget)) return false;\n return !drivesActivation(native.pointerType) || !activatedOnPointerDown;\n}\n\nexport interface ActivationOptions<E extends Element> {\n /** The component supplies its own default; `activateOn` overrides it. @default 'click' */\n on?: ActivateOn;\n /** For rows inside a panel that places focus itself - the press leaves focus untouched. @default false */\n holdFocus?: boolean;\n /** Runs before the built-in activation, and can cancel it with `preventDefault()`. */\n onPointerDown?: (e: ReactPointerEvent<E>) => void;\n /** Runs before the built-in activation on click and on keyboard activation. */\n onClick?: (e: ReactMouseEvent<E>) => void;\n}\n\nexport function activationProps<E extends Element>(\n activate: (e: ReactPointerEvent<E> | ReactMouseEvent<E>) => void,\n { on = 'click', holdFocus, onPointerDown, onClick }: ActivationOptions<E> = {},\n) {\n return {\n onPointerDown: (e: ReactPointerEvent<E>) => {\n onPointerDown?.(e);\n if (on !== 'pointerdown') return declinePointerDown();\n if (pointerDownActivates(e, holdFocus)) activate(e);\n },\n onClick: (e: ReactMouseEvent<E>) => {\n onClick?.(e);\n if (clickActivates(e)) activate(e);\n },\n };\n}\n"]}
@@ -1,12 +1,10 @@
1
- 'use client';import { animate } from './chunk-YGCVWGUG.js';
2
- import { createContext, useRef, useLayoutEffect, useContext } from 'react';
1
+ 'use client';import { animate } from './chunk-IJS7TPGV.js';
2
+ import { createContext, useContext, useRef, useLayoutEffect } from 'react';
3
3
 
4
4
  var DETACHED = { isPresent: true, initial: true, claimExit: () => () => {
5
5
  } };
6
6
  var PresenceContext = createContext(DETACHED);
7
7
  var usePresence = () => useContext(PresenceContext);
8
-
9
- // src/motion/use-motion.ts
10
8
  var toList = (plays) => !plays ? [] : Array.isArray(plays) ? plays : [plays];
11
9
  function run(spec, el) {
12
10
  if (!spec) return [];
@@ -19,6 +17,7 @@ function useMotion(ref, { animate: animate2, exit, initial, deps }) {
19
17
  const presence = usePresence();
20
18
  const playing = useRef([]);
21
19
  const mounted = useRef(false);
20
+ const exiting = useRef(false);
22
21
  const spec = useRef({ animate: animate2, exit, initial });
23
22
  spec.current = { animate: animate2, exit, initial };
24
23
  const release = useRef(null);
@@ -45,15 +44,26 @@ function useMotion(ref, { animate: animate2, exit, initial, deps }) {
45
44
  playing.current = run(spec.current.animate, el);
46
45
  }, deps ?? []);
47
46
  useLayoutEffect(() => {
48
- if (presence.isPresent || !ownsExit) return;
49
47
  const el = ref.current;
48
+ if (presence.isPresent) {
49
+ if (!exiting.current) return;
50
+ exiting.current = false;
51
+ stop();
52
+ if (el) playing.current = run(spec.current.animate, el);
53
+ return;
54
+ }
55
+ if (!ownsExit) return;
56
+ exiting.current = true;
50
57
  stop();
51
- playing.current = el ? run(spec.current.exit, el) : [];
52
- allSettled(playing.current).then(() => release.current?.());
58
+ const exitPlays = el ? run(spec.current.exit, el) : [];
59
+ playing.current = exitPlays;
60
+ allSettled(exitPlays).then(() => {
61
+ if (playing.current === exitPlays) release.current?.();
62
+ });
53
63
  }, [presence.isPresent]);
54
64
  useLayoutEffect(() => stop, []);
55
65
  }
56
66
 
57
- export { PresenceContext, run, useMotion };
58
- //# sourceMappingURL=chunk-XWUWYSCT.js.map
59
- //# sourceMappingURL=chunk-XWUWYSCT.js.map
67
+ export { PresenceContext, run, useMotion, usePresence };
68
+ //# sourceMappingURL=chunk-M43IOM5C.js.map
69
+ //# sourceMappingURL=chunk-M43IOM5C.js.map