entangle-ui 0.7.0 → 0.8.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 (363) hide show
  1. package/CHANGELOG.md +180 -0
  2. package/dist/esm/assets/src/components/controls/ColorPicker/{ColorPicker.css.ts.vanilla-Do5nbdgO.css → ColorPicker.css.ts.vanilla-D7ccNVQx.css} +14 -0
  3. package/dist/esm/assets/src/components/controls/Select/{Select.css.ts.vanilla-D4C059Ua.css → Select.css.ts.vanilla-oZnFUorL.css} +11 -0
  4. package/dist/esm/assets/src/components/controls/Slider/{Slider.css.ts.vanilla-C5SJ_7A1.css → Slider.css.ts.vanilla-Cqm3fQ0S.css} +14 -0
  5. package/dist/esm/assets/src/components/controls/TreeView/{TreeNode.css.ts.vanilla-D3ylUhuW.css → TreeNode.css.ts.vanilla-B_f8pUb8.css} +5 -0
  6. package/dist/esm/assets/src/components/controls/VectorInput/{VectorInput.css.ts.vanilla-BJma3iQ4.css → VectorInput.css.ts.vanilla-BpoiuhDA.css} +9 -0
  7. package/dist/esm/assets/src/components/editor/ChatPanel/{ChatPanel.css.ts.vanilla-BI5569ZO.css → ChatPanel.css.ts.vanilla-CLn8idfz.css} +117 -133
  8. package/dist/esm/assets/src/components/editor/PropertyInspector/{PropertySection.css.ts.vanilla-DJBtY_xk.css → PropertySection.css.ts.vanilla-DK12opZc.css} +5 -0
  9. package/dist/esm/assets/src/components/editor/TransformControl/TransformControl.css.ts.vanilla-H-iW-T0s.css +82 -0
  10. package/dist/esm/assets/src/components/feedback/Alert/Alert.css.ts.vanilla-CRAI-xHx.css +84 -0
  11. package/dist/esm/assets/src/components/feedback/Dialog/{Dialog.css.ts.vanilla-BrXTOHwS.css → Dialog.css.ts.vanilla-BxBFePLG.css} +8 -0
  12. package/dist/esm/assets/src/components/feedback/ProgressBar/ProgressBar.css.ts.vanilla-4WLVf1hx.css +152 -0
  13. package/dist/esm/assets/src/components/feedback/Skeleton/Skeleton.css.ts.vanilla-Dk2_SSsC.css +39 -0
  14. package/dist/esm/assets/src/components/feedback/Toast/{ToastItem.css.ts.vanilla-D6UuPKAj.css → ToastItem.css.ts.vanilla-DUeXqiaH.css} +9 -0
  15. package/dist/esm/assets/src/components/form/{InputWrapper.css.ts.vanilla-Bl7u62PI.css → InputWrapper.css.ts.vanilla-CLpKbEjq.css} +5 -0
  16. package/dist/esm/assets/src/components/layout/Accordion/{Accordion.css.ts.vanilla-Ck5Yew0e.css → Accordion.css.ts.vanilla-CJQum8px.css} +8 -0
  17. package/dist/esm/assets/src/components/navigation/Breadcrumbs/Breadcrumbs.css.ts.vanilla-DZ4jm_bw.css +128 -0
  18. package/dist/esm/assets/src/components/navigation/SegmentedControl/SegmentedControl.css.ts.vanilla-BHOnDD2B.css +197 -0
  19. package/dist/esm/assets/src/components/navigation/Tabs/{Tabs.css.ts.vanilla-D7RGpDPC.css → Tabs.css.ts.vanilla-CQucokdg.css} +14 -0
  20. package/dist/esm/assets/src/components/primitives/Avatar/Avatar.css.ts.vanilla-jG5hUudL.css +149 -0
  21. package/dist/esm/assets/src/components/primitives/Button/{Button.css.ts.vanilla-CT592JL7.css → Button.css.ts.vanilla-DXJcIb94.css} +9 -0
  22. package/dist/esm/assets/src/components/primitives/Checkbox/{Checkbox.css.ts.vanilla-dvrGPiPs.css → Checkbox.css.ts.vanilla-DNa-Gqto.css} +5 -0
  23. package/dist/esm/assets/src/components/primitives/Collapsible/{Collapsible.css.ts.vanilla-C1rYV-JT.css → Collapsible.css.ts.vanilla-Dz4Vy-ob.css} +8 -0
  24. package/dist/esm/assets/src/components/primitives/IconButton/{IconButton.css.ts.vanilla-C-xAQoR3.css → IconButton.css.ts.vanilla-CPkPZJRU.css} +9 -0
  25. package/dist/esm/assets/src/components/primitives/Kbd/Kbd.css.ts.vanilla-Co2-Rxgv.css +60 -0
  26. package/dist/esm/assets/src/components/primitives/Link/Link.css.ts.vanilla-q-bqHUOF.css +82 -0
  27. package/dist/esm/assets/src/components/primitives/Popover/{Popover.css.ts.vanilla-DW6aAr57.css → Popover.css.ts.vanilla-KCfDIs4G.css} +5 -0
  28. package/dist/esm/assets/src/components/primitives/Radio/Radio.css.ts.vanilla-CPjdD-ZM.css +127 -0
  29. package/dist/esm/assets/src/components/primitives/Switch/{Switch.css.ts.vanilla-CxqwUToB.css → Switch.css.ts.vanilla-CDSt-M5W.css} +5 -0
  30. package/dist/esm/assets/src/components/primitives/TextArea/{TextArea.css.ts.vanilla-DTOMjGkp.css → TextArea.css.ts.vanilla-M9l1t4HR.css} +5 -0
  31. package/dist/esm/assets/src/components/primitives/VisuallyHidden/VisuallyHidden.css.ts.vanilla-DBulVh4Q.css +36 -0
  32. package/dist/esm/assets/src/theme/lightTheme.css.ts.vanilla-OaRI_wIc.css +99 -0
  33. package/dist/esm/assets/src/utils/{animations.css.ts.vanilla-DOVlpljP.css → animations.css.ts.vanilla-CRLFsBSV.css} +22 -8
  34. package/dist/esm/components/Icons/AddIcon.js +30 -0
  35. package/dist/esm/components/Icons/AddIcon.js.map +1 -0
  36. package/dist/esm/components/Icons/AiChatIcon.js +31 -0
  37. package/dist/esm/components/Icons/AiChatIcon.js.map +1 -0
  38. package/dist/esm/components/Icons/AiSparklesIcon.js +31 -0
  39. package/dist/esm/components/Icons/AiSparklesIcon.js.map +1 -0
  40. package/dist/esm/components/Icons/ArrowDownIcon.js +30 -0
  41. package/dist/esm/components/Icons/ArrowDownIcon.js.map +1 -0
  42. package/dist/esm/components/Icons/ArrowLeftIcon.js +30 -0
  43. package/dist/esm/components/Icons/ArrowLeftIcon.js.map +1 -0
  44. package/dist/esm/components/Icons/ArrowRightIcon.js +30 -0
  45. package/dist/esm/components/Icons/ArrowRightIcon.js.map +1 -0
  46. package/dist/esm/components/Icons/ArrowUpIcon.js +30 -0
  47. package/dist/esm/components/Icons/ArrowUpIcon.js.map +1 -0
  48. package/dist/esm/components/Icons/BookmarkIcon.js +30 -0
  49. package/dist/esm/components/Icons/BookmarkIcon.js.map +1 -0
  50. package/dist/esm/components/Icons/CalendarIcon.js +30 -0
  51. package/dist/esm/components/Icons/CalendarIcon.js.map +1 -0
  52. package/dist/esm/components/Icons/ClockIcon.js +30 -0
  53. package/dist/esm/components/Icons/ClockIcon.js.map +1 -0
  54. package/dist/esm/components/Icons/CodeIcon.js +30 -0
  55. package/dist/esm/components/Icons/CodeIcon.js.map +1 -0
  56. package/dist/esm/components/Icons/CopyIcon.js +30 -0
  57. package/dist/esm/components/Icons/CopyIcon.js.map +1 -0
  58. package/dist/esm/components/Icons/CutIcon.js +30 -0
  59. package/dist/esm/components/Icons/CutIcon.js.map +1 -0
  60. package/dist/esm/components/Icons/DownloadIcon.js +30 -0
  61. package/dist/esm/components/Icons/DownloadIcon.js.map +1 -0
  62. package/dist/esm/components/Icons/EditIcon.js +30 -0
  63. package/dist/esm/components/Icons/EditIcon.js.map +1 -0
  64. package/dist/esm/components/Icons/ErrorIcon.js +30 -0
  65. package/dist/esm/components/Icons/ErrorIcon.js.map +1 -0
  66. package/dist/esm/components/Icons/EyeIcon.js +30 -0
  67. package/dist/esm/components/Icons/EyeIcon.js.map +1 -0
  68. package/dist/esm/components/Icons/FilterIcon.js +30 -0
  69. package/dist/esm/components/Icons/FilterIcon.js.map +1 -0
  70. package/dist/esm/components/Icons/FolderIcon.js +30 -0
  71. package/dist/esm/components/Icons/FolderIcon.js.map +1 -0
  72. package/dist/esm/components/Icons/FullscreenIcon.js +30 -0
  73. package/dist/esm/components/Icons/FullscreenIcon.js.map +1 -0
  74. package/dist/esm/components/Icons/GridIcon.js +30 -0
  75. package/dist/esm/components/Icons/GridIcon.js.map +1 -0
  76. package/dist/esm/components/Icons/HeartIcon.js +30 -0
  77. package/dist/esm/components/Icons/HeartIcon.js.map +1 -0
  78. package/dist/esm/components/Icons/HelpIcon.js +30 -0
  79. package/dist/esm/components/Icons/HelpIcon.js.map +1 -0
  80. package/dist/esm/components/Icons/HomeIcon.js +30 -0
  81. package/dist/esm/components/Icons/HomeIcon.js.map +1 -0
  82. package/dist/esm/components/Icons/InfoIcon.js +30 -0
  83. package/dist/esm/components/Icons/InfoIcon.js.map +1 -0
  84. package/dist/esm/components/Icons/LinkIcon.js +30 -0
  85. package/dist/esm/components/Icons/LinkIcon.js.map +1 -0
  86. package/dist/esm/components/Icons/ListIcon.js +30 -0
  87. package/dist/esm/components/Icons/ListIcon.js.map +1 -0
  88. package/dist/esm/components/Icons/LockIcon.js +30 -0
  89. package/dist/esm/components/Icons/LockIcon.js.map +1 -0
  90. package/dist/esm/components/Icons/MaximizeIcon.js +30 -0
  91. package/dist/esm/components/Icons/MaximizeIcon.js.map +1 -0
  92. package/dist/esm/components/Icons/MenuIcon.js +30 -0
  93. package/dist/esm/components/Icons/MenuIcon.js.map +1 -0
  94. package/dist/esm/components/Icons/MinimizeIcon.js +30 -0
  95. package/dist/esm/components/Icons/MinimizeIcon.js.map +1 -0
  96. package/dist/esm/components/Icons/PasteIcon.js +30 -0
  97. package/dist/esm/components/Icons/PasteIcon.js.map +1 -0
  98. package/dist/esm/components/Icons/PlayIcon.js +30 -0
  99. package/dist/esm/components/Icons/PlayIcon.js.map +1 -0
  100. package/dist/esm/components/Icons/RedoIcon.js +30 -0
  101. package/dist/esm/components/Icons/RedoIcon.js.map +1 -0
  102. package/dist/esm/components/Icons/RefreshIcon.js +30 -0
  103. package/dist/esm/components/Icons/RefreshIcon.js.map +1 -0
  104. package/dist/esm/components/Icons/RobotIcon.js +30 -0
  105. package/dist/esm/components/Icons/RobotIcon.js.map +1 -0
  106. package/dist/esm/components/Icons/SaveIcon.js +30 -0
  107. package/dist/esm/components/Icons/SaveIcon.js.map +1 -0
  108. package/dist/esm/components/Icons/SearchIcon.js +30 -0
  109. package/dist/esm/components/Icons/SearchIcon.js.map +1 -0
  110. package/dist/esm/components/Icons/SettingsIcon.js +30 -0
  111. package/dist/esm/components/Icons/SettingsIcon.js.map +1 -0
  112. package/dist/esm/components/Icons/SortIcon.js +30 -0
  113. package/dist/esm/components/Icons/SortIcon.js.map +1 -0
  114. package/dist/esm/components/Icons/StarIcon.js +30 -0
  115. package/dist/esm/components/Icons/StarIcon.js.map +1 -0
  116. package/dist/esm/components/Icons/SuccessIcon.js +30 -0
  117. package/dist/esm/components/Icons/SuccessIcon.js.map +1 -0
  118. package/dist/esm/components/Icons/TagIcon.js +30 -0
  119. package/dist/esm/components/Icons/TagIcon.js.map +1 -0
  120. package/dist/esm/components/Icons/TrashIcon.js +30 -0
  121. package/dist/esm/components/Icons/TrashIcon.js.map +1 -0
  122. package/dist/esm/components/Icons/UndoIcon.js +30 -0
  123. package/dist/esm/components/Icons/UndoIcon.js.map +1 -0
  124. package/dist/esm/components/Icons/UnlockIcon.js +30 -0
  125. package/dist/esm/components/Icons/UnlockIcon.js.map +1 -0
  126. package/dist/esm/components/Icons/UploadIcon.js +30 -0
  127. package/dist/esm/components/Icons/UploadIcon.js.map +1 -0
  128. package/dist/esm/components/Icons/UserIcon.js +30 -0
  129. package/dist/esm/components/Icons/UserIcon.js.map +1 -0
  130. package/dist/esm/components/Icons/WarningIcon.js +30 -0
  131. package/dist/esm/components/Icons/WarningIcon.js.map +1 -0
  132. package/dist/esm/components/Icons/ZoomInIcon.js +30 -0
  133. package/dist/esm/components/Icons/ZoomInIcon.js.map +1 -0
  134. package/dist/esm/components/Icons/ZoomOutIcon.js +30 -0
  135. package/dist/esm/components/Icons/ZoomOutIcon.js.map +1 -0
  136. package/dist/esm/components/controls/ColorPicker/ColorPicker.css.js +1 -1
  137. package/dist/esm/components/controls/NumberInput/useNumberInput.js +2 -1
  138. package/dist/esm/components/controls/NumberInput/useNumberInput.js.map +1 -1
  139. package/dist/esm/components/controls/Select/Select.css.js +1 -1
  140. package/dist/esm/components/controls/Slider/Slider.css.js +1 -1
  141. package/dist/esm/components/controls/TreeView/TreeNode.css.js +1 -1
  142. package/dist/esm/components/controls/VectorInput/VectorInput.css.js +1 -1
  143. package/dist/esm/components/controls/VectorInput/VectorInput.js +1 -0
  144. package/dist/esm/components/controls/VectorInput/VectorInput.js.map +1 -1
  145. package/dist/esm/components/editor/ChatPanel/ChatMessage.js +4 -12
  146. package/dist/esm/components/editor/ChatPanel/ChatMessage.js.map +1 -1
  147. package/dist/esm/components/editor/ChatPanel/ChatMessageList.js +4 -10
  148. package/dist/esm/components/editor/ChatPanel/ChatMessageList.js.map +1 -1
  149. package/dist/esm/components/editor/ChatPanel/ChatPanel.css.js +72 -74
  150. package/dist/esm/components/editor/ChatPanel/ChatPanel.css.js.map +1 -1
  151. package/dist/esm/components/editor/ChatPanel/useChatScroll.js +22 -28
  152. package/dist/esm/components/editor/ChatPanel/useChatScroll.js.map +1 -1
  153. package/dist/esm/components/editor/PropertyInspector/PropertySection.css.js +1 -1
  154. package/dist/esm/components/editor/TransformControl/TransformControl.css.js +11 -0
  155. package/dist/esm/components/editor/TransformControl/TransformControl.css.js.map +1 -0
  156. package/dist/esm/components/editor/TransformControl/TransformControl.js +158 -0
  157. package/dist/esm/components/editor/TransformControl/TransformControl.js.map +1 -0
  158. package/dist/esm/components/feedback/Alert/Alert.css.js +16 -0
  159. package/dist/esm/components/feedback/Alert/Alert.css.js.map +1 -0
  160. package/dist/esm/components/feedback/Alert/Alert.js +90 -0
  161. package/dist/esm/components/feedback/Alert/Alert.js.map +1 -0
  162. package/dist/esm/components/feedback/Alert/AlertActions.js +30 -0
  163. package/dist/esm/components/feedback/Alert/AlertActions.js.map +1 -0
  164. package/dist/esm/components/feedback/Alert/AlertDescription.js +28 -0
  165. package/dist/esm/components/feedback/Alert/AlertDescription.js.map +1 -0
  166. package/dist/esm/components/feedback/Alert/AlertTitle.js +28 -0
  167. package/dist/esm/components/feedback/Alert/AlertTitle.js.map +1 -0
  168. package/dist/esm/components/feedback/Dialog/Dialog.css.js +1 -1
  169. package/dist/esm/components/feedback/Dialog/Dialog.js +4 -12
  170. package/dist/esm/components/feedback/Dialog/Dialog.js.map +1 -1
  171. package/dist/esm/components/feedback/Dialog/useDialogAnimation.js +10 -3
  172. package/dist/esm/components/feedback/Dialog/useDialogAnimation.js.map +1 -1
  173. package/dist/esm/components/feedback/ProgressBar/CircularProgress.js +113 -0
  174. package/dist/esm/components/feedback/ProgressBar/CircularProgress.js.map +1 -0
  175. package/dist/esm/components/feedback/ProgressBar/ProgressBar.css.js +22 -0
  176. package/dist/esm/components/feedback/ProgressBar/ProgressBar.css.js.map +1 -0
  177. package/dist/esm/components/feedback/ProgressBar/ProgressBar.js +80 -0
  178. package/dist/esm/components/feedback/ProgressBar/ProgressBar.js.map +1 -0
  179. package/dist/esm/components/feedback/Skeleton/Skeleton.css.js +13 -0
  180. package/dist/esm/components/feedback/Skeleton/Skeleton.css.js.map +1 -0
  181. package/dist/esm/components/feedback/Skeleton/Skeleton.js +78 -0
  182. package/dist/esm/components/feedback/Skeleton/Skeleton.js.map +1 -0
  183. package/dist/esm/components/feedback/Skeleton/SkeletonGroup.js +58 -0
  184. package/dist/esm/components/feedback/Skeleton/SkeletonGroup.js.map +1 -0
  185. package/dist/esm/components/feedback/Spinner/Spinner.css.js +1 -1
  186. package/dist/esm/components/feedback/Toast/ToastItem.css.js +1 -1
  187. package/dist/esm/components/form/InputWrapper.css.js +1 -1
  188. package/dist/esm/components/layout/Accordion/Accordion.css.js +1 -1
  189. package/dist/esm/components/layout/ScrollArea/ScrollArea.js +17 -20
  190. package/dist/esm/components/layout/ScrollArea/ScrollArea.js.map +1 -1
  191. package/dist/esm/components/layout/SplitPane/SplitPane.js +2 -10
  192. package/dist/esm/components/layout/SplitPane/SplitPane.js.map +1 -1
  193. package/dist/esm/components/navigation/Breadcrumbs/BreadcrumbEllipsis.js +49 -0
  194. package/dist/esm/components/navigation/Breadcrumbs/BreadcrumbEllipsis.js.map +1 -0
  195. package/dist/esm/components/navigation/Breadcrumbs/BreadcrumbItem.js +89 -0
  196. package/dist/esm/components/navigation/Breadcrumbs/BreadcrumbItem.js.map +1 -0
  197. package/dist/esm/components/navigation/Breadcrumbs/BreadcrumbSeparator.js +22 -0
  198. package/dist/esm/components/navigation/Breadcrumbs/BreadcrumbSeparator.js.map +1 -0
  199. package/dist/esm/components/navigation/Breadcrumbs/Breadcrumbs.css.js +16 -0
  200. package/dist/esm/components/navigation/Breadcrumbs/Breadcrumbs.css.js.map +1 -0
  201. package/dist/esm/components/navigation/Breadcrumbs/Breadcrumbs.js +152 -0
  202. package/dist/esm/components/navigation/Breadcrumbs/Breadcrumbs.js.map +1 -0
  203. package/dist/esm/components/navigation/SegmentedControl/SegmentedControl.css.js +15 -0
  204. package/dist/esm/components/navigation/SegmentedControl/SegmentedControl.css.js.map +1 -0
  205. package/dist/esm/components/navigation/SegmentedControl/SegmentedControl.js +240 -0
  206. package/dist/esm/components/navigation/SegmentedControl/SegmentedControl.js.map +1 -0
  207. package/dist/esm/components/navigation/SegmentedControl/SegmentedControlItem.js +83 -0
  208. package/dist/esm/components/navigation/SegmentedControl/SegmentedControlItem.js.map +1 -0
  209. package/dist/esm/components/navigation/Tabs/Tab.js +0 -1
  210. package/dist/esm/components/navigation/Tabs/Tab.js.map +1 -1
  211. package/dist/esm/components/navigation/Tabs/Tabs.css.js +1 -1
  212. package/dist/esm/components/primitives/Avatar/Avatar.css.js +16 -0
  213. package/dist/esm/components/primitives/Avatar/Avatar.css.js.map +1 -0
  214. package/dist/esm/components/primitives/Avatar/Avatar.js +138 -0
  215. package/dist/esm/components/primitives/Avatar/Avatar.js.map +1 -0
  216. package/dist/esm/components/primitives/Avatar/AvatarGroup.js +81 -0
  217. package/dist/esm/components/primitives/Avatar/AvatarGroup.js.map +1 -0
  218. package/dist/esm/components/primitives/Button/Button.css.js +1 -1
  219. package/dist/esm/components/primitives/Checkbox/Checkbox.css.js +1 -1
  220. package/dist/esm/components/primitives/Checkbox/Checkbox.js +9 -1
  221. package/dist/esm/components/primitives/Checkbox/Checkbox.js.map +1 -1
  222. package/dist/esm/components/primitives/Collapsible/Collapsible.css.js +1 -1
  223. package/dist/esm/components/primitives/IconButton/IconButton.css.js +1 -1
  224. package/dist/esm/components/primitives/Kbd/Kbd.css.js +9 -0
  225. package/dist/esm/components/primitives/Kbd/Kbd.css.js.map +1 -0
  226. package/dist/esm/components/primitives/Kbd/Kbd.js +46 -0
  227. package/dist/esm/components/primitives/Kbd/Kbd.js.map +1 -0
  228. package/dist/esm/components/primitives/Link/Link.css.js +11 -0
  229. package/dist/esm/components/primitives/Link/Link.css.js.map +1 -0
  230. package/dist/esm/components/primitives/Link/Link.js +160 -0
  231. package/dist/esm/components/primitives/Link/Link.js.map +1 -0
  232. package/dist/esm/components/primitives/Popover/Popover.css.js +1 -1
  233. package/dist/esm/components/primitives/Radio/Radio.css.js +18 -0
  234. package/dist/esm/components/primitives/Radio/Radio.css.js.map +1 -0
  235. package/dist/esm/components/primitives/Radio/Radio.js +109 -0
  236. package/dist/esm/components/primitives/Radio/Radio.js.map +1 -0
  237. package/dist/esm/components/primitives/Radio/RadioGroup.js +82 -0
  238. package/dist/esm/components/primitives/Radio/RadioGroup.js.map +1 -0
  239. package/dist/esm/components/primitives/Switch/Switch.css.js +1 -1
  240. package/dist/esm/components/primitives/TextArea/TextArea.css.js +1 -1
  241. package/dist/esm/components/primitives/Tooltip/Tooltip.js +7 -2
  242. package/dist/esm/components/primitives/Tooltip/Tooltip.js.map +1 -1
  243. package/dist/esm/components/primitives/VisuallyHidden/VisuallyHidden.css.js +7 -0
  244. package/dist/esm/components/primitives/VisuallyHidden/VisuallyHidden.css.js.map +1 -0
  245. package/dist/esm/components/primitives/VisuallyHidden/VisuallyHidden.js +38 -0
  246. package/dist/esm/components/primitives/VisuallyHidden/VisuallyHidden.js.map +1 -0
  247. package/dist/esm/components/shell/FloatingPanel/FloatingPanel.js +2 -10
  248. package/dist/esm/components/shell/FloatingPanel/FloatingPanel.js.map +1 -1
  249. package/dist/esm/context/KeyboardContext.js +1 -0
  250. package/dist/esm/context/KeyboardContext.js.map +1 -1
  251. package/dist/esm/hooks/useClickOutside/useClickOutside.js +60 -0
  252. package/dist/esm/hooks/useClickOutside/useClickOutside.js.map +1 -0
  253. package/dist/esm/hooks/useClipboard/useClipboard.js +147 -0
  254. package/dist/esm/hooks/useClipboard/useClipboard.js.map +1 -0
  255. package/dist/esm/hooks/useControlledState/useControlledState.js +75 -0
  256. package/dist/esm/hooks/useControlledState/useControlledState.js.map +1 -0
  257. package/dist/esm/hooks/useDisclosure/useDisclosure.js +49 -0
  258. package/dist/esm/hooks/useDisclosure/useDisclosure.js.map +1 -0
  259. package/dist/esm/{components/feedback/Dialog → hooks/useFocusTrap}/useFocusTrap.js +7 -7
  260. package/dist/esm/hooks/useFocusTrap/useFocusTrap.js.map +1 -0
  261. package/dist/esm/hooks/useHotkey/useHotkey.js +203 -0
  262. package/dist/esm/hooks/useHotkey/useHotkey.js.map +1 -0
  263. package/dist/esm/hooks/useKeyboard/useKeyboard.js +56 -0
  264. package/dist/esm/hooks/useKeyboard/useKeyboard.js.map +1 -0
  265. package/dist/esm/hooks/useKeyboard/utils.js +56 -0
  266. package/dist/esm/hooks/useKeyboard/utils.js.map +1 -0
  267. package/dist/esm/hooks/useMergedRef/useMergedRef.js +39 -0
  268. package/dist/esm/hooks/useMergedRef/useMergedRef.js.map +1 -0
  269. package/dist/esm/hooks/useResizeObserver/useResizeObserver.js +75 -0
  270. package/dist/esm/hooks/useResizeObserver/useResizeObserver.js.map +1 -0
  271. package/dist/esm/hooks/useTheme/useTheme.js +198 -0
  272. package/dist/esm/hooks/useTheme/useTheme.js.map +1 -0
  273. package/dist/esm/index.js +40 -2
  274. package/dist/esm/index.js.map +1 -1
  275. package/dist/esm/theme/createLightTheme.js +29 -0
  276. package/dist/esm/theme/createLightTheme.js.map +1 -0
  277. package/dist/esm/theme/darkThemeValues.js +155 -0
  278. package/dist/esm/theme/darkThemeValues.js.map +1 -0
  279. package/dist/esm/theme/index.js +10 -0
  280. package/dist/esm/theme/index.js.map +1 -0
  281. package/dist/esm/theme/lightTheme.css.js +6 -0
  282. package/dist/esm/theme/lightTheme.css.js.map +1 -0
  283. package/dist/esm/theme/lightThemeValues.js +164 -0
  284. package/dist/esm/theme/lightThemeValues.js.map +1 -0
  285. package/dist/esm/theme/themeContractData.js +161 -0
  286. package/dist/esm/theme/themeContractData.js.map +1 -0
  287. package/dist/esm/theme-values.js +4 -0
  288. package/dist/esm/theme-values.js.map +1 -0
  289. package/dist/esm/utils/animations.css.js +8 -6
  290. package/dist/esm/utils/animations.css.js.map +1 -1
  291. package/dist/esm/utils/devWarn.js +36 -0
  292. package/dist/esm/utils/devWarn.js.map +1 -0
  293. package/dist/esm/utils/platform.js +91 -0
  294. package/dist/esm/utils/platform.js.map +1 -0
  295. package/dist/tokens/tokens.dark.css +98 -0
  296. package/dist/tokens/tokens.json +851 -0
  297. package/dist/tokens/tokens.light.css +98 -0
  298. package/dist/types/components/editor/TransformControl/TransformControl.d.ts +34 -0
  299. package/dist/types/components/editor/TransformControl/TransformControl.types.d.ts +153 -0
  300. package/dist/types/components/feedback/Alert/Alert.d.ts +340 -0
  301. package/dist/types/components/feedback/Alert/Alert.types.d.ts +82 -0
  302. package/dist/types/components/feedback/Alert/AlertActions.d.ts +306 -0
  303. package/dist/types/components/feedback/Alert/AlertDescription.d.ts +303 -0
  304. package/dist/types/components/feedback/Alert/AlertTitle.d.ts +303 -0
  305. package/dist/types/components/feedback/ProgressBar/CircularProgress.d.ts +313 -0
  306. package/dist/types/components/feedback/ProgressBar/ProgressBar.d.ts +315 -0
  307. package/dist/types/components/feedback/ProgressBar/ProgressBar.types.d.ts +132 -0
  308. package/dist/types/components/feedback/Skeleton/Skeleton.d.ts +312 -0
  309. package/dist/types/components/feedback/Skeleton/Skeleton.types.d.ts +82 -0
  310. package/dist/types/components/feedback/Skeleton/SkeletonGroup.d.ts +313 -0
  311. package/dist/types/components/navigation/Breadcrumbs/BreadcrumbEllipsis.d.ts +297 -0
  312. package/dist/types/components/navigation/Breadcrumbs/BreadcrumbItem.d.ts +304 -0
  313. package/dist/types/components/navigation/Breadcrumbs/BreadcrumbSeparator.d.ts +296 -0
  314. package/dist/types/components/navigation/Breadcrumbs/Breadcrumbs.d.ts +311 -0
  315. package/dist/types/components/navigation/Breadcrumbs/Breadcrumbs.types.d.ts +89 -0
  316. package/dist/types/components/navigation/SegmentedControl/SegmentedControl.d.ts +24 -0
  317. package/dist/types/components/navigation/SegmentedControl/SegmentedControl.types.d.ts +85 -0
  318. package/dist/types/components/navigation/SegmentedControl/SegmentedControlItem.d.ts +12 -0
  319. package/dist/types/components/primitives/Avatar/Avatar.d.ts +317 -0
  320. package/dist/types/components/primitives/Avatar/Avatar.types.d.ts +139 -0
  321. package/dist/types/components/primitives/Avatar/AvatarGroup.d.ts +316 -0
  322. package/dist/types/components/primitives/Button/Button.d.ts +1 -1
  323. package/dist/types/components/primitives/IconButton/IconButton.d.ts +1 -1
  324. package/dist/types/components/primitives/Kbd/Kbd.d.ts +307 -0
  325. package/dist/types/components/primitives/Kbd/Kbd.types.d.ts +49 -0
  326. package/dist/types/components/primitives/Link/Link.d.ts +20 -0
  327. package/dist/types/components/primitives/Link/Link.types.d.ts +123 -0
  328. package/dist/types/components/primitives/Radio/Radio.d.ts +319 -0
  329. package/dist/types/components/primitives/Radio/Radio.types.d.ts +155 -0
  330. package/dist/types/components/primitives/Radio/RadioGroup.d.ts +320 -0
  331. package/dist/types/components/primitives/VisuallyHidden/VisuallyHidden.d.ts +316 -0
  332. package/dist/types/components/primitives/VisuallyHidden/VisuallyHidden.types.d.ts +29 -0
  333. package/dist/types/hooks/useClickOutside/useClickOutside.d.ts +37 -0
  334. package/dist/types/hooks/useClipboard/useClipboard.d.ts +24 -0
  335. package/dist/types/hooks/useClipboard/useClipboard.types.d.ts +22 -0
  336. package/dist/types/hooks/useControlledState/useControlledState.d.ts +38 -0
  337. package/dist/types/hooks/useDisclosure/useDisclosure.d.ts +25 -0
  338. package/dist/types/hooks/useDisclosure/useDisclosure.types.d.ts +22 -0
  339. package/dist/types/hooks/useFocusTrap/useFocusTrap.d.ts +30 -0
  340. package/dist/types/hooks/useHotkey/useHotkey.d.ts +23 -0
  341. package/dist/types/hooks/useHotkey/useHotkey.types.d.ts +36 -0
  342. package/dist/types/hooks/useKeyboard/types.d.ts +14 -0
  343. package/dist/types/hooks/useKeyboard/useKeyboard.d.ts +36 -0
  344. package/dist/types/hooks/useKeyboard/utils.d.ts +6 -0
  345. package/dist/types/hooks/useMergedRef/useMergedRef.d.ts +22 -0
  346. package/dist/types/hooks/useResizeObserver/useResizeObserver.d.ts +35 -0
  347. package/dist/types/hooks/useTheme/useTheme.d.ts +48 -0
  348. package/dist/types/hooks/useTheme/useTheme.types.d.ts +60 -0
  349. package/dist/types/index.d.ts +56 -3
  350. package/dist/types/theme/contract.css.d.ts +125 -121
  351. package/dist/types/theme/createCustomTheme.d.ts +1 -1
  352. package/dist/types/theme/createLightTheme.d.ts +24 -0
  353. package/dist/types/theme/{darkTheme.css.d.ts → darkThemeValues.d.ts} +6 -2
  354. package/dist/types/theme/globalScrollbars.css.d.ts +15 -0
  355. package/dist/types/theme/index.d.ts +9 -0
  356. package/dist/types/theme/lightTheme.css.d.ts +17 -0
  357. package/dist/types/theme/lightThemeValues.d.ts +168 -0
  358. package/dist/types/theme/themeContractData.d.ts +160 -0
  359. package/dist/types/theme-values.d.ts +10 -0
  360. package/dist/types/utils/animations.css.d.ts +3 -1
  361. package/dist/types/utils/platform.d.ts +16 -0
  362. package/package.json +13 -4
  363. package/dist/esm/components/feedback/Dialog/useFocusTrap.js.map +0 -1
@@ -0,0 +1,109 @@
1
+ "use client";
2
+ import { jsxs, jsx } from 'react/jsx-runtime';
3
+ import React, { useContext, useId, useState, useCallback } from 'react';
4
+ import { assignInlineVars } from '@vanilla-extract/dynamic';
5
+ import { FormHelperText } from '../../form/FormHelperText.js';
6
+ import { cx } from '../../../utils/cx.js';
7
+ import { RadioGroupContext } from './RadioGroup.js';
8
+ import { innerSizeVar, outerSizeVar, visuallyHiddenInputStyle, radioDotRecipe, radioOuterRecipe, radioLabelTextStyle, radioLabelRecipe, radioContainerStyle } from './Radio.css.js';
9
+
10
+ const OUTER_SIZES = {
11
+ sm: 12,
12
+ md: 14,
13
+ lg: 16,
14
+ };
15
+ const INNER_SIZES = {
16
+ sm: 6,
17
+ md: 7,
18
+ lg: 8,
19
+ };
20
+ /**
21
+ * Radio component for mutually exclusive selection in property panels,
22
+ * settings, and form interfaces.
23
+ *
24
+ * Works standalone (controlled or uncontrolled) or as a child of `RadioGroup`,
25
+ * which manages exclusive selection across siblings via context. When inside
26
+ * a `RadioGroup`, the group's `value`, `name`, `size`, `disabled`, and `error`
27
+ * override the corresponding props on individual radios.
28
+ *
29
+ * @example
30
+ * ```tsx
31
+ * <Radio value="local" label="Local" />
32
+ *
33
+ * <RadioGroup value={space} onChange={setSpace} label="Coordinate space">
34
+ * <Radio value="local" label="Local" />
35
+ * <Radio value="world" label="World" />
36
+ * <Radio value="parent" label="Parent" />
37
+ * </RadioGroup>
38
+ * ```
39
+ */
40
+ const Radio = /*#__PURE__*/ React.memo(({ value, checked: checkedProp, defaultChecked = false, label, labelPosition = 'right', size: sizeProp, disabled: disabledProp, helperText, error: errorProp, errorMessage, name: nameProp, onChange, className, style, testId, ref, id: idProp, ...rest }) => {
41
+ const groupContext = useContext(RadioGroupContext);
42
+ const autoId = useId();
43
+ const radioId = idProp ?? autoId;
44
+ const helperId = `${radioId}-helper`;
45
+ const [internalChecked, setInternalChecked] = useState(defaultChecked);
46
+ const isControlled = checkedProp !== undefined;
47
+ const isGrouped = groupContext !== null;
48
+ // Group context overrides individual props when present
49
+ const size = isGrouped ? groupContext.size : (sizeProp ?? 'md');
50
+ const disabled = isGrouped
51
+ ? groupContext.disabled
52
+ : (disabledProp ?? false);
53
+ const error = isGrouped ? groupContext.error : (errorProp ?? false);
54
+ const name = isGrouped ? groupContext.name : nameProp;
55
+ let resolvedChecked;
56
+ if (isGrouped) {
57
+ resolvedChecked = groupContext.value === value;
58
+ }
59
+ else if (isControlled) {
60
+ resolvedChecked = checkedProp;
61
+ }
62
+ else {
63
+ resolvedChecked = internalChecked;
64
+ }
65
+ const handleChange = useCallback((event) => {
66
+ if (disabled)
67
+ return;
68
+ if (isGrouped) {
69
+ groupContext.onChange(value, event);
70
+ return;
71
+ }
72
+ if (!isControlled) {
73
+ setInternalChecked(true);
74
+ }
75
+ onChange?.(value, event);
76
+ }, [disabled, isGrouped, groupContext, value, isControlled, onChange]);
77
+ const showHelperText = !isGrouped && error && errorMessage
78
+ ? errorMessage
79
+ : !isGrouped
80
+ ? helperText
81
+ : undefined;
82
+ const outerInlineVars = assignInlineVars({
83
+ [outerSizeVar]: `${OUTER_SIZES[size]}px`,
84
+ [innerSizeVar]: `${INNER_SIZES[size]}px`,
85
+ });
86
+ const labelNode = (jsxs("label", { className: radioLabelRecipe({
87
+ labelPosition,
88
+ size,
89
+ disabled: disabled || undefined,
90
+ }), children: [jsx("input", { ref: ref, type: "radio", role: "radio", id: radioId, name: name, value: value, checked: resolvedChecked, disabled: disabled, "aria-checked": resolvedChecked, "aria-disabled": disabled || undefined, "aria-invalid": error || undefined, "aria-describedby": showHelperText ? helperId : undefined, onChange: handleChange, className: visuallyHiddenInputStyle, "data-testid": testId, ...rest }), jsx("span", { "aria-hidden": "true", className: radioOuterRecipe({
91
+ checked: resolvedChecked || undefined,
92
+ disabled: disabled || undefined,
93
+ error: error || undefined,
94
+ }), style: outerInlineVars, children: jsx("span", { className: radioDotRecipe({
95
+ checked: resolvedChecked || undefined,
96
+ error: error || undefined,
97
+ }) }) }), label && jsx("span", { className: radioLabelTextStyle, children: label })] }));
98
+ if (!showHelperText) {
99
+ if (className || style) {
100
+ return (jsx("div", { className: cx(radioContainerStyle, className), style: style, children: labelNode }));
101
+ }
102
+ return labelNode;
103
+ }
104
+ return (jsxs("div", { className: cx(radioContainerStyle, className), style: style, children: [labelNode, jsx(FormHelperText, { id: helperId, error: error, children: showHelperText })] }));
105
+ });
106
+ Radio.displayName = 'Radio';
107
+
108
+ export { Radio };
109
+ //# sourceMappingURL=Radio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Radio.js","sources":["../../../../../../src/components/primitives/Radio/Radio.tsx"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;;AAmBA;AACE;AACA;AACA;;AAGF;AACE;AACA;AACA;;AAGF;;;;;;;;;;;;;;;;;;;AAmBG;AACI;AAqBH;AACA;AACA;AACA;;AAGA;AACA;;AAGA;;;AAGE;AACF;AACA;AAEA;;AAEE;;;;;;;;AAOF;AAEI;;;AAGE;;;;;;AAQF;AACF;AAIF;AAEI;;AAEE;;;;;AAML;AAED;;;;AAMK;;;;;;;AAiCI;;AAQP;AACE;;AAMF;;AAGF;AAQF;AAGF;;"}
@@ -0,0 +1,82 @@
1
+ "use client";
2
+ import { jsxs, jsx } from 'react/jsx-runtime';
3
+ import React, { useId, useState, useCallback, useMemo, createContext } from 'react';
4
+ import { assignInlineVars } from '@vanilla-extract/dynamic';
5
+ import { FormLabel } from '../../form/FormLabel.js';
6
+ import { FormHelperText } from '../../form/FormHelperText.js';
7
+ import { vars } from '../../../theme/contract.css.js';
8
+ import { cx } from '../../../utils/cx.js';
9
+ import { groupItemsStyle, groupSpacingVar, groupOrientationVar, groupContainerStyle } from './Radio.css.js';
10
+
11
+ const RadioGroupContext =
12
+ /*#__PURE__*/ createContext(null);
13
+ const SPACING_SCALE = [
14
+ '0',
15
+ vars.spacing.xs,
16
+ vars.spacing.sm,
17
+ vars.spacing.md,
18
+ vars.spacing.lg,
19
+ vars.spacing.xl,
20
+ vars.spacing.xxl,
21
+ vars.spacing.xxxl,
22
+ ];
23
+ const resolveSpacing = (spacing) => {
24
+ if (typeof spacing === 'string')
25
+ return spacing;
26
+ const clamped = Math.max(0, Math.min(SPACING_SCALE.length - 1, spacing));
27
+ const index = Math.floor(clamped);
28
+ return SPACING_SCALE[index] ?? vars.spacing.sm;
29
+ };
30
+ /**
31
+ * Groups multiple Radio components with shared, exclusive selection state.
32
+ *
33
+ * Manages a single `string` value, propagates `name`, `size`, `disabled`,
34
+ * and `error` to children via React Context, and applies `aria-required`
35
+ * for required fields. Supports controlled and uncontrolled modes.
36
+ *
37
+ * @example
38
+ * ```tsx
39
+ * <RadioGroup
40
+ * label="Coordinate space"
41
+ * value={space}
42
+ * onChange={setSpace}
43
+ * >
44
+ * <Radio value="local" label="Local" />
45
+ * <Radio value="world" label="World" />
46
+ * <Radio value="parent" label="Parent" />
47
+ * </RadioGroup>
48
+ * ```
49
+ */
50
+ const RadioGroup = /*#__PURE__*/ React.memo(({ value: valueProp, defaultValue, label, helperText, disabled = false, error = false, errorMessage, required = false, orientation = 'vertical', spacing = 2, name, size = 'md', onChange, children, className, style, testId, ref, id: idProp, ...rest }) => {
51
+ const autoId = useId();
52
+ const groupId = idProp ?? autoId;
53
+ const labelId = `${groupId}-label`;
54
+ const helperId = `${groupId}-helper`;
55
+ const [internalValue, setInternalValue] = useState(defaultValue);
56
+ const isControlled = valueProp !== undefined;
57
+ const currentValue = isControlled ? valueProp : internalValue;
58
+ const handleChange = useCallback((nextValue) => {
59
+ if (!isControlled) {
60
+ setInternalValue(nextValue);
61
+ }
62
+ onChange?.(nextValue);
63
+ }, [isControlled, onChange]);
64
+ const contextValue = useMemo(() => ({
65
+ value: currentValue,
66
+ name,
67
+ size,
68
+ disabled,
69
+ error,
70
+ onChange: handleChange,
71
+ }), [currentValue, name, size, disabled, error, handleChange]);
72
+ const showHelperText = error && errorMessage ? errorMessage : helperText;
73
+ const flexDirection = orientation === 'horizontal' ? 'row' : 'column';
74
+ return (jsxs("div", { ref: ref, role: "radiogroup", "aria-labelledby": label ? labelId : undefined, "aria-describedby": showHelperText ? helperId : undefined, "aria-required": required || undefined, "aria-invalid": error || undefined, "aria-disabled": disabled || undefined, "aria-orientation": orientation, className: cx(groupContainerStyle, className), style: style, "data-testid": testId, ...rest, children: [label && (jsx(FormLabel, { id: labelId, required: required, disabled: disabled, children: label })), jsx(RadioGroupContext.Provider, { value: contextValue, children: jsx("div", { className: groupItemsStyle, style: assignInlineVars({
75
+ [groupOrientationVar]: flexDirection,
76
+ [groupSpacingVar]: resolveSpacing(spacing),
77
+ }), children: children }) }), showHelperText && (jsx(FormHelperText, { id: helperId, error: error, children: showHelperText }))] }));
78
+ });
79
+ RadioGroup.displayName = 'RadioGroup';
80
+
81
+ export { RadioGroup, RadioGroupContext };
82
+ //# sourceMappingURL=RadioGroup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RadioGroup.js","sources":["../../../../../../src/components/primitives/Radio/RadioGroup.tsx"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;;;;AAuBE;AAEF;;;;;;;;;;AAWA;;AACmC;;;;AAInC;AAEA;;;;;;;;;;;;;;;;;;;AAmBG;AACI;AAuBH;AACA;AACA;AACA;;AAKA;;AAGA;;;;AAKI;AACF;AAIF;AAEI;;;;;AAKA;AACD;AAIH;AAEA;;;AA2BU;;AAaZ;AAGF;;"}
@@ -1,4 +1,4 @@
1
- import './../../../assets/src/components/primitives/Switch/Switch.css.ts.vanilla-CxqwUToB.css';
1
+ import './../../../assets/src/components/primitives/Switch/Switch.css.ts.vanilla-CDSt-M5W.css';
2
2
  import { createRuntimeFn } from '@vanilla-extract/recipes/createRuntimeFn';
3
3
 
4
4
  var labelTextStyle = 'Switch_labelTextStyle__h3xwyto';
@@ -1,4 +1,4 @@
1
- import './../../../assets/src/components/primitives/TextArea/TextArea.css.ts.vanilla-DTOMjGkp.css';
1
+ import './../../../assets/src/components/primitives/TextArea/TextArea.css.ts.vanilla-M9l1t4HR.css';
2
2
  import { createRuntimeFn } from '@vanilla-extract/recipes/createRuntimeFn';
3
3
 
4
4
  var textAreaContainerStyle = 'TextArea_textAreaContainerStyle__nwf0m90';
@@ -139,8 +139,13 @@ const Tooltip = ({ children, title, placement = 'top', collision = 'smart', coll
139
139
  if (trackCursor) {
140
140
  rootProps.trackCursorAxis = trackCursor;
141
141
  }
142
- // Build animation transition style
143
- const animated = animation?.animated !== false;
142
+ // Build animation transition style. Honors `prefers-reduced-motion: reduce`
143
+ // by collapsing to `transition: none` regardless of caller-passed config —
144
+ // user OS-level preference always wins over component config.
145
+ const prefersReducedMotion = typeof window !== 'undefined' &&
146
+ typeof window.matchMedia === 'function' &&
147
+ window.matchMedia('(prefers-reduced-motion: reduce)').matches;
148
+ const animated = animation?.animated !== false && !prefersReducedMotion;
144
149
  const duration = animation?.duration ?? 200;
145
150
  const easing = animation?.easing ?? 'ease-out';
146
151
  const animationStyle = animated
@@ -1 +1 @@
1
- {"version":3,"file":"Tooltip.js","sources":["../../../../../../src/components/primitives/Tooltip/Tooltip.tsx"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;AA8HA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuFG;AACI;;;AAuBH;;;;;;AAQA;AACI;AACE;AACA;AACA;AACqB;AACxB;AACH;;AAGF;;AASA;;;AAGE;AACA;;;AAGA;;;;AAKA;;;AAGI;;;;AAGF;;;;;AAMF;;;AAIF;AACA;AACA;;AAGE;;AAEG;AACH;;AA8BgB;AACA;;;AAoBpB;AAEA;;"}
1
+ {"version":3,"file":"Tooltip.js","sources":["../../../../../../src/components/primitives/Tooltip/Tooltip.tsx"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;AA8HA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuFG;AACI;;;AAuBH;;;;;;AAQA;AACI;AACE;AACA;AACA;AACqB;AACxB;AACH;;AAGF;;AASA;;;AAGE;AACA;;;AAGA;;;;AAKA;;;AAGI;;;;AAGF;;;;;AAMF;;;;;AAMF;AAEE;AACA;;AAEF;AACA;;AAGE;;AAEG;AACH;;AA8BgB;AACA;;;AAoBpB;AAEA;;"}
@@ -0,0 +1,7 @@
1
+ import './../../../assets/src/components/primitives/VisuallyHidden/VisuallyHidden.css.ts.vanilla-DBulVh4Q.css';
2
+
3
+ var visuallyHiddenFocusableStyle = 'VisuallyHidden_visuallyHiddenFocusableStyle__1mwqwxp1';
4
+ var visuallyHiddenStyle = 'VisuallyHidden_visuallyHiddenStyle__1mwqwxp0';
5
+
6
+ export { visuallyHiddenFocusableStyle, visuallyHiddenStyle };
7
+ //# sourceMappingURL=VisuallyHidden.css.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VisuallyHidden.css.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;"}
@@ -0,0 +1,38 @@
1
+ "use client";
2
+ import { jsx } from 'react/jsx-runtime';
3
+ import React from 'react';
4
+ import { cx } from '../../../utils/cx.js';
5
+ import { visuallyHiddenFocusableStyle, visuallyHiddenStyle } from './VisuallyHidden.css.js';
6
+
7
+ /**
8
+ * Hides content visually while keeping it accessible to screen readers.
9
+ *
10
+ * Implements the canonical `sr-only` / `visually-hidden` pattern. Use it for
11
+ * screen-reader-only labels, additional context next to icons, and
12
+ * skip-to-content links (with `focusable`).
13
+ *
14
+ * Don't use this to hide content from sighted users for layout reasons —
15
+ * that's `display: none`. This component keeps content in the accessibility
16
+ * tree on purpose.
17
+ *
18
+ * @example
19
+ * ```tsx
20
+ * // SR-only label next to an icon-only button
21
+ * <button>
22
+ * <SearchIcon />
23
+ * <VisuallyHidden>Search</VisuallyHidden>
24
+ * </button>
25
+ *
26
+ * // Skip link revealed on focus
27
+ * <VisuallyHidden as="a" href="#main" focusable>
28
+ * Skip to content
29
+ * </VisuallyHidden>
30
+ * ```
31
+ */
32
+ const VisuallyHidden = /*#__PURE__*/ React.memo(({ as: Component = 'span', focusable = false, children, className, style, testId, ref, ...rest }) => {
33
+ return (jsx(Component, { ref: ref, className: cx(focusable ? visuallyHiddenFocusableStyle : visuallyHiddenStyle, className), style: style, "data-testid": testId, ...rest, children: children }));
34
+ });
35
+ VisuallyHidden.displayName = 'VisuallyHidden';
36
+
37
+ export { VisuallyHidden };
38
+ //# sourceMappingURL=VisuallyHidden.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"VisuallyHidden.js","sources":["../../../../../../src/components/primitives/VisuallyHidden/VisuallyHidden.tsx"],"sourcesContent":[null],"names":[],"mappings":";;;;;;AAUA;;;;;;;;;;;;;;;;;;;;;;;;AAwBG;AACI;AAWH;AAcF;AAGF;;"}
@@ -3,6 +3,7 @@ import { jsx, jsxs } from 'react/jsx-runtime';
3
3
  import { useRef, useState, useCallback, useMemo, useId, useEffect, createContext, useContext } from 'react';
4
4
  import { assignInlineVars } from '@vanilla-extract/dynamic';
5
5
  import { cx } from '../../../utils/cx.js';
6
+ import { useMergedRef } from '../../../hooks/useMergedRef/useMergedRef.js';
6
7
  import { ScrollArea } from '../../layout/ScrollArea/ScrollArea.js';
7
8
  import { CloseIcon } from '../../Icons/CloseIcon.js';
8
9
  import { ChevronUpIcon } from '../../Icons/ChevronUpIcon.js';
@@ -84,16 +85,7 @@ const FloatingPanel = ({ title: panelTitle, position: controlledPosition, defaul
84
85
  const zIndex = manager?.getZIndex(id) ?? 100;
85
86
  // --- Drag ---
86
87
  const panelRef = useRef(null);
87
- const setPanelRef = useMemo(() => (node) => {
88
- panelRef.current = node;
89
- if (typeof externalRef === 'function') {
90
- externalRef(node);
91
- }
92
- else if (externalRef && typeof externalRef === 'object') {
93
- externalRef.current =
94
- node;
95
- }
96
- }, [externalRef]);
88
+ const setPanelRef = useMergedRef(panelRef, externalRef);
97
89
  const dragOffsetRef = useRef({ x: 0, y: 0 });
98
90
  const handleDragStart = useCallback((e) => {
99
91
  e.preventDefault();
@@ -1 +1 @@
1
- {"version":3,"file":"FloatingPanel.js","sources":["../../../../../../src/components/shell/FloatingPanel/FloatingPanel.tsx"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;;;;AAyCA;AAEA;AACE;AAEF;AAEO;AAIL;;AAGA;;;;;;AAOA;AACE;;;AAIF;AACE;;AACoC;;;;AAKtC;;AAGI;AACF;AAIF;AAKA;AAKF;AAEA;AAEA;;AA6BE;AACA;AACA;;;AAKA;AACA;AAEI;;AACA;AACF;;;AAOF;AACA;AAEI;;AACA;AACF;;;AAMF;AACA;AACE;;;AAEA;;;AAIF;AACA;;AAGE;;AAEF;AAEA;AACE;AACF;;;AAKA;;AAGI;AACA;;;AAEO;AACJ;AACC;;AAEN;AAGF;AAEA;;AAGI;AACA;;AAGE;AACA;;AAGF;;;;;;AAMA;;AAGE;AACA;AACF;AAEA;AACA;AACF;;AAKF;;;AAII;AACA;AAEA;AACA;AACA;AACA;AAEA;AACE;AACA;AACA;AACA;;AAEF;;AAGE;AACA;AACF;AAEA;AACA;AACF;;AAKA;AACA;AACA;AACA;AACA;AACD;AAED;AAWM;AACA;;AAwDR;AAEA;;"}
1
+ {"version":3,"file":"FloatingPanel.js","sources":["../../../../../../src/components/shell/FloatingPanel/FloatingPanel.tsx"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;;;;;AA0CA;AAEA;AACE;AAEF;AAEO;AAIL;;AAGA;;;;;;AAOA;AACE;;;AAIF;AACE;;AACoC;;;;AAKtC;;AAGI;AACF;AAIF;AAKA;AAKF;AAEA;AAEA;;AA6BE;AACA;AACA;;;AAKA;AACA;AAEI;;AACA;AACF;;;AAOF;AACA;AAEI;;AACA;AACF;;;AAMF;AACA;AACE;;;AAEA;;;AAIF;AACA;;AAGE;;AAEF;AAEA;AACE;AACF;;;AAKA;;AAEA;AAEA;;AAGI;AACA;;AAGE;AACA;;AAGF;;;;;;AAMA;;AAGE;AACA;AACF;AAEA;AACA;AACF;;AAKF;;;AAII;AACA;AAEA;AACA;AACA;AACA;AAEA;AACE;AACA;AACA;AACA;;AAEF;;AAGE;AACA;AACF;AAEA;AACA;AACF;;AAKA;AACA;AACA;AACA;AACA;AACD;AAED;AAWM;AACA;;AAwDR;AAEA;;"}
@@ -1,6 +1,7 @@
1
1
  "use client";
2
2
  import 'react/jsx-runtime';
3
3
  import { useContext, createContext } from 'react';
4
+ import '../utils/devWarn.js';
4
5
 
5
6
  const KeyboardContext = /*#__PURE__*/ createContext(null);
6
7
  const useKeyboardContext = () => {
@@ -1 +1 @@
1
- {"version":3,"file":"KeyboardContext.js","sources":["../../../../src/context/KeyboardContext.tsx"],"sourcesContent":[null],"names":[],"mappings":";;;;AAQA;AAiBO;AACL;;AAEE;;AAIF;AACF;;"}
1
+ {"version":3,"file":"KeyboardContext.js","sources":["../../../../src/context/KeyboardContext.tsx"],"sourcesContent":[null],"names":[],"mappings":";;;;;AAQA;AAiBO;AACL;;AAEE;;AAIF;AACF;;"}
@@ -0,0 +1,60 @@
1
+ "use client";
2
+ import { useRef, useEffect } from 'react';
3
+
4
+ function isOutside(target, refs) {
5
+ if (!(target instanceof Node))
6
+ return true;
7
+ for (const ref of refs) {
8
+ const node = ref.current;
9
+ if (node && (node === target || node.contains(target))) {
10
+ return false;
11
+ }
12
+ }
13
+ return true;
14
+ }
15
+ /**
16
+ * Fire a callback when a click occurs outside the referenced element(s).
17
+ *
18
+ * Accepts either a single ref or an array of refs. The handler fires only
19
+ * when the click lands outside ALL provided refs — useful for popover +
20
+ * trigger pairs where clicking either should be considered "inside".
21
+ *
22
+ * Defaults to `mousedown` so the handler runs before `click`. SSR-safe;
23
+ * cleans up on unmount and when `enabled` flips to `false`.
24
+ *
25
+ * @example
26
+ * ```tsx
27
+ * const ref = useRef<HTMLDivElement>(null);
28
+ * useClickOutside(ref, () => setOpen(false), { enabled: isOpen });
29
+ *
30
+ * return <div ref={ref}>...</div>;
31
+ * ```
32
+ */
33
+ function useClickOutside(ref, handler, options = {}) {
34
+ const { enabled = true, event = 'mousedown' } = options;
35
+ const handlerRef = useRef(handler);
36
+ const refsRef = useRef([]);
37
+ // Latest handler — invoked from the listener without re-subscribing.
38
+ handlerRef.current = handler;
39
+ // Latest ref(s) — refreshed every render so consumers may pass inline
40
+ // arrays without forcing a re-subscribe of the document listener.
41
+ refsRef.current = Array.isArray(ref) ? ref : [ref];
42
+ useEffect(() => {
43
+ if (!enabled)
44
+ return;
45
+ if (typeof document === 'undefined')
46
+ return;
47
+ const listener = (e) => {
48
+ if (isOutside(e.target, refsRef.current)) {
49
+ handlerRef.current(e);
50
+ }
51
+ };
52
+ document.addEventListener(event, listener);
53
+ return () => {
54
+ document.removeEventListener(event, listener);
55
+ };
56
+ }, [enabled, event]);
57
+ }
58
+
59
+ export { useClickOutside };
60
+ //# sourceMappingURL=useClickOutside.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useClickOutside.js","sources":["../../../../../src/hooks/useClickOutside/useClickOutside.ts"],"sourcesContent":[null],"names":[],"mappings":";;;AAoBA;AACE;AAA+B;AAE/B;AACE;AACA;AACE;;;AAGJ;AACF;AAEA;;;;;;;;;;;;;;;;;AAiBG;AACG;;AAOJ;AACA;;AAGA;;;AAGA;;AAGE;;;;AAGA;;AAEI;;AAEJ;AAEA;AACA;AACE;AACF;AACF;AACF;;"}
@@ -0,0 +1,147 @@
1
+ "use client";
2
+ import { useState, useRef, useEffect, useCallback } from 'react';
3
+
4
+ const DEFAULT_TIMEOUT = 2000;
5
+ async function writeViaClipboardApi(text) {
6
+ if (typeof navigator === 'undefined' ||
7
+ typeof navigator.clipboard === 'undefined' ||
8
+ typeof navigator.clipboard.writeText !== 'function') {
9
+ return false;
10
+ }
11
+ await navigator.clipboard.writeText(text);
12
+ return true;
13
+ }
14
+ function writeViaExecCommand(text) {
15
+ if (typeof document === 'undefined')
16
+ return false;
17
+ const textarea = document.createElement('textarea');
18
+ textarea.value = text;
19
+ textarea.setAttribute('readonly', '');
20
+ textarea.style.position = 'absolute';
21
+ textarea.style.left = '-9999px';
22
+ textarea.style.top = '0';
23
+ document.body.appendChild(textarea);
24
+ textarea.select();
25
+ let succeeded = false;
26
+ try {
27
+ succeeded = document.execCommand('copy');
28
+ }
29
+ catch {
30
+ succeeded = false;
31
+ }
32
+ document.body.removeChild(textarea);
33
+ return succeeded;
34
+ }
35
+ /**
36
+ * Copy text to the clipboard with a built-in timeout-driven feedback state.
37
+ *
38
+ * Uses `navigator.clipboard.writeText` when available; falls back to
39
+ * `document.execCommand('copy')` only when the modern API is missing.
40
+ * In SSR or restricted contexts where neither path is available, `copy`
41
+ * resolves to `false` and `status` flips to `'error'` without throwing.
42
+ *
43
+ * @example
44
+ * ```tsx
45
+ * const { copy, copied } = useClipboard({ timeout: 1500 });
46
+ *
47
+ * return (
48
+ * <Button onClick={() => copy('Hello!')}>
49
+ * {copied ? 'Copied!' : 'Copy'}
50
+ * </Button>
51
+ * );
52
+ * ```
53
+ */
54
+ function useClipboard(options = {}) {
55
+ const { timeout = DEFAULT_TIMEOUT } = options;
56
+ const [status, setStatus] = useState('idle');
57
+ const [error, setError] = useState(null);
58
+ const timerRef = useRef(null);
59
+ const timeoutRef = useRef(timeout);
60
+ // Bumped on every `copy()` call. The async path captures its own value
61
+ // and short-circuits on resolution if a newer call has started — that
62
+ // prevents an older, slower `writeText` from overwriting the state of a
63
+ // newer copy or from arming a stale timer.
64
+ const requestSeqRef = useRef(0);
65
+ useEffect(() => {
66
+ timeoutRef.current = timeout;
67
+ }, [timeout]);
68
+ const clearTimer = useCallback(() => {
69
+ if (timerRef.current !== null) {
70
+ clearTimeout(timerRef.current);
71
+ timerRef.current = null;
72
+ }
73
+ }, []);
74
+ const reset = useCallback(() => {
75
+ clearTimer();
76
+ // Invalidate any in-flight copy so a late resolution does not flip
77
+ // the status back from idle/error.
78
+ requestSeqRef.current += 1;
79
+ setStatus('idle');
80
+ setError(null);
81
+ }, [clearTimer]);
82
+ const copy = useCallback(async (text) => {
83
+ clearTimer();
84
+ requestSeqRef.current += 1;
85
+ const requestId = requestSeqRef.current;
86
+ let succeeded = false;
87
+ let copyError = null;
88
+ try {
89
+ succeeded = await writeViaClipboardApi(text);
90
+ }
91
+ catch (err) {
92
+ copyError = err instanceof Error ? err : new Error(String(err));
93
+ }
94
+ if (!succeeded && copyError === null) {
95
+ try {
96
+ succeeded = writeViaExecCommand(text);
97
+ if (!succeeded) {
98
+ copyError = new Error('Copy command was rejected by the browser.');
99
+ }
100
+ }
101
+ catch (err) {
102
+ copyError = err instanceof Error ? err : new Error(String(err));
103
+ }
104
+ }
105
+ // A newer call (or `reset`) has started — drop this result on the
106
+ // floor so it does not race the active state.
107
+ if (requestId !== requestSeqRef.current) {
108
+ return succeeded;
109
+ }
110
+ if (succeeded) {
111
+ setError(null);
112
+ setStatus('copied');
113
+ timerRef.current = setTimeout(() => {
114
+ timerRef.current = null;
115
+ // Guard the timer too: another copy may have started during the
116
+ // window and bumped the sequence. We still clear the timer ref,
117
+ // but only flip back to idle if the timer belonged to the
118
+ // current request.
119
+ if (requestId === requestSeqRef.current) {
120
+ setStatus('idle');
121
+ }
122
+ }, timeoutRef.current);
123
+ return true;
124
+ }
125
+ setError(copyError ?? new Error('Clipboard API is not available.'));
126
+ setStatus('error');
127
+ return false;
128
+ }, [clearTimer]);
129
+ useEffect(() => {
130
+ return () => {
131
+ if (timerRef.current !== null) {
132
+ clearTimeout(timerRef.current);
133
+ timerRef.current = null;
134
+ }
135
+ };
136
+ }, []);
137
+ return {
138
+ status,
139
+ copied: status === 'copied',
140
+ error,
141
+ copy,
142
+ reset,
143
+ };
144
+ }
145
+
146
+ export { useClipboard };
147
+ //# sourceMappingURL=useClipboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useClipboard.js","sources":["../../../../../src/hooks/useClipboard/useClipboard.ts"],"sourcesContent":[null],"names":[],"mappings":";;;AASA;AAEA;;AAGI;;AAGA;;;AAGF;AACF;AAEA;;AACuC;;AAGrC;AACA;AACA;AACA;AACA;AACA;;;AAIA;AACE;;AACA;;;AAGF;AACA;AACF;AAEA;;;;;;;;;;;;;;;;;;AAkBG;AACG;AAGJ;;;AAKA;AACA;;;;;AAKA;;AAGE;AACF;AAEA;AACE;AACE;AACA;;;AAIJ;AACE;;;AAGA;;;AAGF;;AAII;AAEA;AACA;;;AAKA;AACE;;;AAEA;;AAGF;AACE;AACE;;AAEE;;;;AAGF;;;;;AAMJ;AACE;;;;;AAMA;AACE;;;;;AAKA;;;AAGF;AACA;;;;AAKF;AACF;;AAKA;AACE;AACE;AACA;;AAEJ;;;;;;;;;AAUJ;;"}
@@ -0,0 +1,75 @@
1
+ "use client";
2
+ import { useState, useRef, useEffect, useCallback } from 'react';
3
+ import { devWarn } from '../../utils/devWarn.js';
4
+
5
+ /**
6
+ * Manage a value that may be either controlled (via prop) or uncontrolled
7
+ * (managed internally with a default).
8
+ *
9
+ * Returns a `[value, setValue]` tuple just like `useState`. When
10
+ * `options.value` is defined the state is read from there and `setValue`
11
+ * becomes a pure side-effect callback that calls `onChange` only — internal
12
+ * state is never mutated. When `options.value` is undefined the hook owns the
13
+ * state and `setValue` updates it as well as calls `onChange`.
14
+ *
15
+ * Switching between controlled and uncontrolled within a component's lifetime
16
+ * is a known pitfall (matches React's own warning for `<input value/defaultValue>`).
17
+ * The hook emits a development-only warning when this happens.
18
+ *
19
+ * @example
20
+ * ```ts
21
+ * const [value, setValue] = useControlledState({
22
+ * value: props.value,
23
+ * defaultValue: props.defaultValue,
24
+ * onChange: props.onChange,
25
+ * fallback: '',
26
+ * });
27
+ * ```
28
+ */
29
+ function useControlledState(options) {
30
+ const { value, defaultValue, onChange, fallback } = options;
31
+ const isControlled = value !== undefined;
32
+ // Only `undefined` means "no defaultValue given" — `null` is a legal value
33
+ // for generic T (e.g. `string | null`) and must not be replaced by fallback.
34
+ const [internalValue, setInternalValue] = useState(
35
+ // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
36
+ defaultValue !== undefined ? defaultValue : fallback);
37
+ // Stable refs to avoid stale closures and unnecessary identity changes.
38
+ const onChangeRef = useRef(onChange);
39
+ const internalValueRef = useRef(internalValue);
40
+ const isControlledRef = useRef(isControlled);
41
+ useEffect(() => {
42
+ onChangeRef.current = onChange;
43
+ }, [onChange]);
44
+ useEffect(() => {
45
+ internalValueRef.current = internalValue;
46
+ }, [internalValue]);
47
+ // Dev-only warning when controlled <-> uncontrolled flips after mount.
48
+ // Mirrors React's behavior for <input value/defaultValue>.
49
+ useEffect(() => {
50
+ const wasControlled = isControlledRef.current;
51
+ if (wasControlled !== isControlled) {
52
+ devWarn(`[useControlledState] Component is changing from ${wasControlled ? 'controlled' : 'uncontrolled'} to ${isControlled ? 'controlled' : 'uncontrolled'}. ` +
53
+ 'Components should not switch between controlled and uncontrolled ' +
54
+ '(or vice versa) during their lifetime. Decide between using a ' +
55
+ 'controlled or uncontrolled mode for the lifetime of the component.');
56
+ isControlledRef.current = isControlled;
57
+ }
58
+ }, [isControlled]);
59
+ const setValue = useCallback((next) => {
60
+ const prev = isControlledRef.current
61
+ ? value
62
+ : internalValueRef.current;
63
+ const resolved = typeof next === 'function' ? next(prev) : next;
64
+ if (!isControlledRef.current) {
65
+ setInternalValue(resolved);
66
+ internalValueRef.current = resolved;
67
+ }
68
+ onChangeRef.current?.(resolved);
69
+ }, [value]);
70
+ const currentValue = isControlled ? value : internalValue;
71
+ return [currentValue, setValue];
72
+ }
73
+
74
+ export { useControlledState };
75
+ //# sourceMappingURL=useControlledState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useControlledState.js","sources":["../../../../../src/hooks/useControlledState/useControlledState.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAgBA;;;;;;;;;;;;;;;;;;;;;;;AAuBG;AACG;;AAKJ;;;AAIA;;;;AAMA;AACA;AACA;;AAGE;AACF;;AAGE;AACF;;;;AAKE;AACA;;;;AAOM;AAEJ;;AAEJ;AAEA;AAEI;AACE;AACA;AACF;AAGA;;AAEE;;AAEF;AACF;;AAKF;AACF;;"}