entangle-ui 0.6.3 → 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 (446) hide show
  1. package/CHANGELOG.md +219 -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-DPIGnZ4A.css → ChatPanel.css.ts.vanilla-CLn8idfz.css} +180 -116
  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/EmptyState/EmptyState.css.ts.vanilla-B_TWsTOW.css +58 -0
  13. package/dist/esm/assets/src/components/feedback/ProgressBar/ProgressBar.css.ts.vanilla-4WLVf1hx.css +152 -0
  14. package/dist/esm/assets/src/components/feedback/Skeleton/Skeleton.css.ts.vanilla-Dk2_SSsC.css +39 -0
  15. package/dist/esm/assets/src/components/feedback/Spinner/Spinner.css.ts.vanilla-DEUewqdK.css +80 -0
  16. package/dist/esm/assets/src/components/feedback/Toast/{ToastItem.css.ts.vanilla-D6UuPKAj.css → ToastItem.css.ts.vanilla-DUeXqiaH.css} +9 -0
  17. package/dist/esm/assets/src/components/form/{InputWrapper.css.ts.vanilla-Bl7u62PI.css → InputWrapper.css.ts.vanilla-CLpKbEjq.css} +5 -0
  18. package/dist/esm/assets/src/components/layout/Accordion/{Accordion.css.ts.vanilla-Ck5Yew0e.css → Accordion.css.ts.vanilla-CJQum8px.css} +8 -0
  19. package/dist/esm/assets/src/components/layout/Divider/Divider.css.ts.vanilla-CPvd_RW9.css +72 -0
  20. package/dist/esm/assets/src/components/layout/ListItem/ListItem.css.ts.vanilla-BwAZrX2f.css +68 -0
  21. package/dist/esm/assets/src/components/layout/PageHeader/PageHeader.css.ts.vanilla-DdbyyWAN.css +70 -0
  22. package/dist/esm/assets/src/components/layout/SplitPane/{SplitPane.css.ts.vanilla-BFxdvwyI.css → SplitPane.css.ts.vanilla-BGFZ7zDa.css} +5 -0
  23. package/dist/esm/assets/src/components/navigation/Breadcrumbs/Breadcrumbs.css.ts.vanilla-DZ4jm_bw.css +128 -0
  24. package/dist/esm/assets/src/components/navigation/SegmentedControl/SegmentedControl.css.ts.vanilla-BHOnDD2B.css +197 -0
  25. package/dist/esm/assets/src/components/navigation/Tabs/{Tabs.css.ts.vanilla-D7RGpDPC.css → Tabs.css.ts.vanilla-CQucokdg.css} +14 -0
  26. package/dist/esm/assets/src/components/primitives/Avatar/Avatar.css.ts.vanilla-jG5hUudL.css +149 -0
  27. package/dist/esm/assets/src/components/primitives/Badge/Badge.css.ts.vanilla-DxCUcxYW.css +95 -0
  28. package/dist/esm/assets/src/components/primitives/Button/{Button.css.ts.vanilla-CT592JL7.css → Button.css.ts.vanilla-DXJcIb94.css} +9 -0
  29. package/dist/esm/assets/src/components/primitives/Checkbox/{Checkbox.css.ts.vanilla-dvrGPiPs.css → Checkbox.css.ts.vanilla-DNa-Gqto.css} +5 -0
  30. package/dist/esm/assets/src/components/primitives/Code/Code.css.ts.vanilla-mayBqLDM.css +19 -0
  31. package/dist/esm/assets/src/components/primitives/Collapsible/{Collapsible.css.ts.vanilla-C1rYV-JT.css → Collapsible.css.ts.vanilla-Dz4Vy-ob.css} +8 -0
  32. package/dist/esm/assets/src/components/primitives/IconButton/{IconButton.css.ts.vanilla-C-xAQoR3.css → IconButton.css.ts.vanilla-CPkPZJRU.css} +9 -0
  33. package/dist/esm/assets/src/components/primitives/Kbd/Kbd.css.ts.vanilla-Co2-Rxgv.css +60 -0
  34. package/dist/esm/assets/src/components/primitives/Link/Link.css.ts.vanilla-q-bqHUOF.css +82 -0
  35. package/dist/esm/assets/src/components/primitives/Popover/{Popover.css.ts.vanilla-DW6aAr57.css → Popover.css.ts.vanilla-KCfDIs4G.css} +5 -0
  36. package/dist/esm/assets/src/components/primitives/Radio/Radio.css.ts.vanilla-CPjdD-ZM.css +127 -0
  37. package/dist/esm/assets/src/components/primitives/Switch/{Switch.css.ts.vanilla-CxqwUToB.css → Switch.css.ts.vanilla-CDSt-M5W.css} +5 -0
  38. package/dist/esm/assets/src/components/primitives/TextArea/TextArea.css.ts.vanilla-M9l1t4HR.css +90 -0
  39. package/dist/esm/assets/src/components/primitives/VisuallyHidden/VisuallyHidden.css.ts.vanilla-DBulVh4Q.css +36 -0
  40. package/dist/esm/assets/src/theme/{darkTheme.css.ts.vanilla-DCe89yCJ.css → darkTheme.css.ts.vanilla-ab1WD4dr.css} +3 -0
  41. package/dist/esm/assets/src/theme/globalScrollbars.css.ts.vanilla-BAJwnUEJ.css +21 -0
  42. package/dist/esm/assets/src/theme/lightTheme.css.ts.vanilla-OaRI_wIc.css +99 -0
  43. package/dist/esm/assets/src/utils/animations.css.ts.vanilla-CRLFsBSV.css +72 -0
  44. package/dist/esm/components/Icons/AddIcon.js +30 -0
  45. package/dist/esm/components/Icons/AddIcon.js.map +1 -0
  46. package/dist/esm/components/Icons/AiChatIcon.js +31 -0
  47. package/dist/esm/components/Icons/AiChatIcon.js.map +1 -0
  48. package/dist/esm/components/Icons/AiSparklesIcon.js +31 -0
  49. package/dist/esm/components/Icons/AiSparklesIcon.js.map +1 -0
  50. package/dist/esm/components/Icons/ArrowDownIcon.js +30 -0
  51. package/dist/esm/components/Icons/ArrowDownIcon.js.map +1 -0
  52. package/dist/esm/components/Icons/ArrowLeftIcon.js +30 -0
  53. package/dist/esm/components/Icons/ArrowLeftIcon.js.map +1 -0
  54. package/dist/esm/components/Icons/ArrowRightIcon.js +30 -0
  55. package/dist/esm/components/Icons/ArrowRightIcon.js.map +1 -0
  56. package/dist/esm/components/Icons/ArrowUpIcon.js +30 -0
  57. package/dist/esm/components/Icons/ArrowUpIcon.js.map +1 -0
  58. package/dist/esm/components/Icons/BookmarkIcon.js +30 -0
  59. package/dist/esm/components/Icons/BookmarkIcon.js.map +1 -0
  60. package/dist/esm/components/Icons/CalendarIcon.js +30 -0
  61. package/dist/esm/components/Icons/CalendarIcon.js.map +1 -0
  62. package/dist/esm/components/Icons/ClockIcon.js +30 -0
  63. package/dist/esm/components/Icons/ClockIcon.js.map +1 -0
  64. package/dist/esm/components/Icons/CodeIcon.js +30 -0
  65. package/dist/esm/components/Icons/CodeIcon.js.map +1 -0
  66. package/dist/esm/components/Icons/CopyIcon.js +30 -0
  67. package/dist/esm/components/Icons/CopyIcon.js.map +1 -0
  68. package/dist/esm/components/Icons/CutIcon.js +30 -0
  69. package/dist/esm/components/Icons/CutIcon.js.map +1 -0
  70. package/dist/esm/components/Icons/DownloadIcon.js +30 -0
  71. package/dist/esm/components/Icons/DownloadIcon.js.map +1 -0
  72. package/dist/esm/components/Icons/EditIcon.js +30 -0
  73. package/dist/esm/components/Icons/EditIcon.js.map +1 -0
  74. package/dist/esm/components/Icons/ErrorIcon.js +30 -0
  75. package/dist/esm/components/Icons/ErrorIcon.js.map +1 -0
  76. package/dist/esm/components/Icons/EyeIcon.js +30 -0
  77. package/dist/esm/components/Icons/EyeIcon.js.map +1 -0
  78. package/dist/esm/components/Icons/FilterIcon.js +30 -0
  79. package/dist/esm/components/Icons/FilterIcon.js.map +1 -0
  80. package/dist/esm/components/Icons/FolderIcon.js +30 -0
  81. package/dist/esm/components/Icons/FolderIcon.js.map +1 -0
  82. package/dist/esm/components/Icons/FullscreenIcon.js +30 -0
  83. package/dist/esm/components/Icons/FullscreenIcon.js.map +1 -0
  84. package/dist/esm/components/Icons/GridIcon.js +30 -0
  85. package/dist/esm/components/Icons/GridIcon.js.map +1 -0
  86. package/dist/esm/components/Icons/HeartIcon.js +30 -0
  87. package/dist/esm/components/Icons/HeartIcon.js.map +1 -0
  88. package/dist/esm/components/Icons/HelpIcon.js +30 -0
  89. package/dist/esm/components/Icons/HelpIcon.js.map +1 -0
  90. package/dist/esm/components/Icons/HomeIcon.js +30 -0
  91. package/dist/esm/components/Icons/HomeIcon.js.map +1 -0
  92. package/dist/esm/components/Icons/InfoIcon.js +30 -0
  93. package/dist/esm/components/Icons/InfoIcon.js.map +1 -0
  94. package/dist/esm/components/Icons/LinkIcon.js +30 -0
  95. package/dist/esm/components/Icons/LinkIcon.js.map +1 -0
  96. package/dist/esm/components/Icons/ListIcon.js +30 -0
  97. package/dist/esm/components/Icons/ListIcon.js.map +1 -0
  98. package/dist/esm/components/Icons/LockIcon.js +30 -0
  99. package/dist/esm/components/Icons/LockIcon.js.map +1 -0
  100. package/dist/esm/components/Icons/MaximizeIcon.js +30 -0
  101. package/dist/esm/components/Icons/MaximizeIcon.js.map +1 -0
  102. package/dist/esm/components/Icons/MenuIcon.js +30 -0
  103. package/dist/esm/components/Icons/MenuIcon.js.map +1 -0
  104. package/dist/esm/components/Icons/MinimizeIcon.js +30 -0
  105. package/dist/esm/components/Icons/MinimizeIcon.js.map +1 -0
  106. package/dist/esm/components/Icons/PasteIcon.js +30 -0
  107. package/dist/esm/components/Icons/PasteIcon.js.map +1 -0
  108. package/dist/esm/components/Icons/PlayIcon.js +30 -0
  109. package/dist/esm/components/Icons/PlayIcon.js.map +1 -0
  110. package/dist/esm/components/Icons/RedoIcon.js +30 -0
  111. package/dist/esm/components/Icons/RedoIcon.js.map +1 -0
  112. package/dist/esm/components/Icons/RefreshIcon.js +30 -0
  113. package/dist/esm/components/Icons/RefreshIcon.js.map +1 -0
  114. package/dist/esm/components/Icons/RobotIcon.js +30 -0
  115. package/dist/esm/components/Icons/RobotIcon.js.map +1 -0
  116. package/dist/esm/components/Icons/SaveIcon.js +30 -0
  117. package/dist/esm/components/Icons/SaveIcon.js.map +1 -0
  118. package/dist/esm/components/Icons/SearchIcon.js +30 -0
  119. package/dist/esm/components/Icons/SearchIcon.js.map +1 -0
  120. package/dist/esm/components/Icons/SettingsIcon.js +30 -0
  121. package/dist/esm/components/Icons/SettingsIcon.js.map +1 -0
  122. package/dist/esm/components/Icons/SortIcon.js +30 -0
  123. package/dist/esm/components/Icons/SortIcon.js.map +1 -0
  124. package/dist/esm/components/Icons/StarIcon.js +30 -0
  125. package/dist/esm/components/Icons/StarIcon.js.map +1 -0
  126. package/dist/esm/components/Icons/SuccessIcon.js +30 -0
  127. package/dist/esm/components/Icons/SuccessIcon.js.map +1 -0
  128. package/dist/esm/components/Icons/TagIcon.js +30 -0
  129. package/dist/esm/components/Icons/TagIcon.js.map +1 -0
  130. package/dist/esm/components/Icons/TrashIcon.js +30 -0
  131. package/dist/esm/components/Icons/TrashIcon.js.map +1 -0
  132. package/dist/esm/components/Icons/UndoIcon.js +30 -0
  133. package/dist/esm/components/Icons/UndoIcon.js.map +1 -0
  134. package/dist/esm/components/Icons/UnlockIcon.js +30 -0
  135. package/dist/esm/components/Icons/UnlockIcon.js.map +1 -0
  136. package/dist/esm/components/Icons/UploadIcon.js +30 -0
  137. package/dist/esm/components/Icons/UploadIcon.js.map +1 -0
  138. package/dist/esm/components/Icons/UserIcon.js +30 -0
  139. package/dist/esm/components/Icons/UserIcon.js.map +1 -0
  140. package/dist/esm/components/Icons/WarningIcon.js +30 -0
  141. package/dist/esm/components/Icons/WarningIcon.js.map +1 -0
  142. package/dist/esm/components/Icons/ZoomInIcon.js +30 -0
  143. package/dist/esm/components/Icons/ZoomInIcon.js.map +1 -0
  144. package/dist/esm/components/Icons/ZoomOutIcon.js +30 -0
  145. package/dist/esm/components/Icons/ZoomOutIcon.js.map +1 -0
  146. package/dist/esm/components/controls/ColorPicker/ColorPicker.css.js +1 -1
  147. package/dist/esm/components/controls/NumberInput/useNumberInput.js +2 -1
  148. package/dist/esm/components/controls/NumberInput/useNumberInput.js.map +1 -1
  149. package/dist/esm/components/controls/Select/Select.css.js +1 -1
  150. package/dist/esm/components/controls/Slider/Slider.css.js +1 -1
  151. package/dist/esm/components/controls/TreeView/TreeNode.css.js +1 -1
  152. package/dist/esm/components/controls/VectorInput/VectorInput.css.js +1 -1
  153. package/dist/esm/components/controls/VectorInput/VectorInput.js +1 -0
  154. package/dist/esm/components/controls/VectorInput/VectorInput.js.map +1 -1
  155. package/dist/esm/components/editor/ChatPanel/ChatInput.js +18 -7
  156. package/dist/esm/components/editor/ChatPanel/ChatInput.js.map +1 -1
  157. package/dist/esm/components/editor/ChatPanel/ChatMarkdownRenderer.js +268 -0
  158. package/dist/esm/components/editor/ChatPanel/ChatMarkdownRenderer.js.map +1 -0
  159. package/dist/esm/components/editor/ChatPanel/ChatMessage.js +17 -13
  160. package/dist/esm/components/editor/ChatPanel/ChatMessage.js.map +1 -1
  161. package/dist/esm/components/editor/ChatPanel/ChatMessageList.js +23 -15
  162. package/dist/esm/components/editor/ChatPanel/ChatMessageList.js.map +1 -1
  163. package/dist/esm/components/editor/ChatPanel/ChatPanel.css.js +73 -63
  164. package/dist/esm/components/editor/ChatPanel/ChatPanel.css.js.map +1 -1
  165. package/dist/esm/components/editor/ChatPanel/ChatPanel.js +15 -3
  166. package/dist/esm/components/editor/ChatPanel/ChatPanel.js.map +1 -1
  167. package/dist/esm/components/editor/ChatPanel/useChatInput.js +3 -3
  168. package/dist/esm/components/editor/ChatPanel/useChatInput.js.map +1 -1
  169. package/dist/esm/components/editor/ChatPanel/useChatScroll.js +53 -2
  170. package/dist/esm/components/editor/ChatPanel/useChatScroll.js.map +1 -1
  171. package/dist/esm/components/editor/PropertyInspector/PropertySection.css.js +1 -1
  172. package/dist/esm/components/editor/TransformControl/TransformControl.css.js +11 -0
  173. package/dist/esm/components/editor/TransformControl/TransformControl.css.js.map +1 -0
  174. package/dist/esm/components/editor/TransformControl/TransformControl.js +158 -0
  175. package/dist/esm/components/editor/TransformControl/TransformControl.js.map +1 -0
  176. package/dist/esm/components/feedback/Alert/Alert.css.js +16 -0
  177. package/dist/esm/components/feedback/Alert/Alert.css.js.map +1 -0
  178. package/dist/esm/components/feedback/Alert/Alert.js +90 -0
  179. package/dist/esm/components/feedback/Alert/Alert.js.map +1 -0
  180. package/dist/esm/components/feedback/Alert/AlertActions.js +30 -0
  181. package/dist/esm/components/feedback/Alert/AlertActions.js.map +1 -0
  182. package/dist/esm/components/feedback/Alert/AlertDescription.js +28 -0
  183. package/dist/esm/components/feedback/Alert/AlertDescription.js.map +1 -0
  184. package/dist/esm/components/feedback/Alert/AlertTitle.js +28 -0
  185. package/dist/esm/components/feedback/Alert/AlertTitle.js.map +1 -0
  186. package/dist/esm/components/feedback/Dialog/Dialog.css.js +1 -1
  187. package/dist/esm/components/feedback/Dialog/Dialog.js +4 -12
  188. package/dist/esm/components/feedback/Dialog/Dialog.js.map +1 -1
  189. package/dist/esm/components/feedback/Dialog/useDialogAnimation.js +10 -3
  190. package/dist/esm/components/feedback/Dialog/useDialogAnimation.js.map +1 -1
  191. package/dist/esm/components/feedback/EmptyState/EmptyState.css.js +13 -0
  192. package/dist/esm/components/feedback/EmptyState/EmptyState.css.js.map +1 -0
  193. package/dist/esm/components/feedback/EmptyState/EmptyState.js +43 -0
  194. package/dist/esm/components/feedback/EmptyState/EmptyState.js.map +1 -0
  195. package/dist/esm/components/feedback/ProgressBar/CircularProgress.js +113 -0
  196. package/dist/esm/components/feedback/ProgressBar/CircularProgress.js.map +1 -0
  197. package/dist/esm/components/feedback/ProgressBar/ProgressBar.css.js +22 -0
  198. package/dist/esm/components/feedback/ProgressBar/ProgressBar.css.js.map +1 -0
  199. package/dist/esm/components/feedback/ProgressBar/ProgressBar.js +80 -0
  200. package/dist/esm/components/feedback/ProgressBar/ProgressBar.js.map +1 -0
  201. package/dist/esm/components/feedback/Skeleton/Skeleton.css.js +13 -0
  202. package/dist/esm/components/feedback/Skeleton/Skeleton.css.js.map +1 -0
  203. package/dist/esm/components/feedback/Skeleton/Skeleton.js +78 -0
  204. package/dist/esm/components/feedback/Skeleton/Skeleton.js.map +1 -0
  205. package/dist/esm/components/feedback/Skeleton/SkeletonGroup.js +58 -0
  206. package/dist/esm/components/feedback/Skeleton/SkeletonGroup.js.map +1 -0
  207. package/dist/esm/components/feedback/Spinner/Spinner.css.js +16 -0
  208. package/dist/esm/components/feedback/Spinner/Spinner.css.js.map +1 -0
  209. package/dist/esm/components/feedback/Spinner/Spinner.js +50 -0
  210. package/dist/esm/components/feedback/Spinner/Spinner.js.map +1 -0
  211. package/dist/esm/components/feedback/Toast/ToastItem.css.js +1 -1
  212. package/dist/esm/components/form/InputWrapper.css.js +1 -1
  213. package/dist/esm/components/layout/Accordion/Accordion.css.js +1 -1
  214. package/dist/esm/components/layout/Divider/Divider.css.js +9 -0
  215. package/dist/esm/components/layout/Divider/Divider.css.js.map +1 -0
  216. package/dist/esm/components/layout/Divider/Divider.js +51 -0
  217. package/dist/esm/components/layout/Divider/Divider.js.map +1 -0
  218. package/dist/esm/components/layout/ListItem/ListItem.css.js +10 -0
  219. package/dist/esm/components/layout/ListItem/ListItem.css.js.map +1 -0
  220. package/dist/esm/components/layout/ListItem/ListItem.js +45 -0
  221. package/dist/esm/components/layout/ListItem/ListItem.js.map +1 -0
  222. package/dist/esm/components/layout/PageHeader/PageHeader.css.js +13 -0
  223. package/dist/esm/components/layout/PageHeader/PageHeader.css.js.map +1 -0
  224. package/dist/esm/components/layout/PageHeader/PageHeader.js +29 -0
  225. package/dist/esm/components/layout/PageHeader/PageHeader.js.map +1 -0
  226. package/dist/esm/components/layout/ScrollArea/ScrollArea.js +17 -20
  227. package/dist/esm/components/layout/ScrollArea/ScrollArea.js.map +1 -1
  228. package/dist/esm/components/layout/SplitPane/SplitPane.css.js +1 -1
  229. package/dist/esm/components/layout/SplitPane/SplitPane.js +2 -10
  230. package/dist/esm/components/layout/SplitPane/SplitPane.js.map +1 -1
  231. package/dist/esm/components/navigation/Breadcrumbs/BreadcrumbEllipsis.js +49 -0
  232. package/dist/esm/components/navigation/Breadcrumbs/BreadcrumbEllipsis.js.map +1 -0
  233. package/dist/esm/components/navigation/Breadcrumbs/BreadcrumbItem.js +89 -0
  234. package/dist/esm/components/navigation/Breadcrumbs/BreadcrumbItem.js.map +1 -0
  235. package/dist/esm/components/navigation/Breadcrumbs/BreadcrumbSeparator.js +22 -0
  236. package/dist/esm/components/navigation/Breadcrumbs/BreadcrumbSeparator.js.map +1 -0
  237. package/dist/esm/components/navigation/Breadcrumbs/Breadcrumbs.css.js +16 -0
  238. package/dist/esm/components/navigation/Breadcrumbs/Breadcrumbs.css.js.map +1 -0
  239. package/dist/esm/components/navigation/Breadcrumbs/Breadcrumbs.js +152 -0
  240. package/dist/esm/components/navigation/Breadcrumbs/Breadcrumbs.js.map +1 -0
  241. package/dist/esm/components/navigation/SegmentedControl/SegmentedControl.css.js +15 -0
  242. package/dist/esm/components/navigation/SegmentedControl/SegmentedControl.css.js.map +1 -0
  243. package/dist/esm/components/navigation/SegmentedControl/SegmentedControl.js +240 -0
  244. package/dist/esm/components/navigation/SegmentedControl/SegmentedControl.js.map +1 -0
  245. package/dist/esm/components/navigation/SegmentedControl/SegmentedControlItem.js +83 -0
  246. package/dist/esm/components/navigation/SegmentedControl/SegmentedControlItem.js.map +1 -0
  247. package/dist/esm/components/navigation/Tabs/Tab.js +0 -1
  248. package/dist/esm/components/navigation/Tabs/Tab.js.map +1 -1
  249. package/dist/esm/components/navigation/Tabs/TabPanel.js +6 -3
  250. package/dist/esm/components/navigation/Tabs/TabPanel.js.map +1 -1
  251. package/dist/esm/components/navigation/Tabs/Tabs.css.js +1 -1
  252. package/dist/esm/components/navigation/Tabs/Tabs.js +3 -1
  253. package/dist/esm/components/navigation/Tabs/Tabs.js.map +1 -1
  254. package/dist/esm/components/primitives/Avatar/Avatar.css.js +16 -0
  255. package/dist/esm/components/primitives/Avatar/Avatar.css.js.map +1 -0
  256. package/dist/esm/components/primitives/Avatar/Avatar.js +138 -0
  257. package/dist/esm/components/primitives/Avatar/Avatar.js.map +1 -0
  258. package/dist/esm/components/primitives/Avatar/AvatarGroup.js +81 -0
  259. package/dist/esm/components/primitives/Avatar/AvatarGroup.js.map +1 -0
  260. package/dist/esm/components/primitives/Badge/Badge.css.js +12 -0
  261. package/dist/esm/components/primitives/Badge/Badge.css.js.map +1 -0
  262. package/dist/esm/components/primitives/Badge/Badge.js +67 -0
  263. package/dist/esm/components/primitives/Badge/Badge.js.map +1 -0
  264. package/dist/esm/components/primitives/Button/Button.css.js +1 -1
  265. package/dist/esm/components/primitives/Checkbox/Checkbox.css.js +1 -1
  266. package/dist/esm/components/primitives/Checkbox/Checkbox.js +9 -1
  267. package/dist/esm/components/primitives/Checkbox/Checkbox.js.map +1 -1
  268. package/dist/esm/components/primitives/Code/Code.css.js +7 -0
  269. package/dist/esm/components/primitives/Code/Code.css.js.map +1 -0
  270. package/dist/esm/components/primitives/Code/Code.js +24 -0
  271. package/dist/esm/components/primitives/Code/Code.js.map +1 -0
  272. package/dist/esm/components/primitives/Collapsible/Collapsible.css.js +1 -1
  273. package/dist/esm/components/primitives/IconButton/IconButton.css.js +1 -1
  274. package/dist/esm/components/primitives/Kbd/Kbd.css.js +9 -0
  275. package/dist/esm/components/primitives/Kbd/Kbd.css.js.map +1 -0
  276. package/dist/esm/components/primitives/Kbd/Kbd.js +46 -0
  277. package/dist/esm/components/primitives/Kbd/Kbd.js.map +1 -0
  278. package/dist/esm/components/primitives/Link/Link.css.js +11 -0
  279. package/dist/esm/components/primitives/Link/Link.css.js.map +1 -0
  280. package/dist/esm/components/primitives/Link/Link.js +160 -0
  281. package/dist/esm/components/primitives/Link/Link.js.map +1 -0
  282. package/dist/esm/components/primitives/Popover/Popover.css.js +1 -1
  283. package/dist/esm/components/primitives/Radio/Radio.css.js +18 -0
  284. package/dist/esm/components/primitives/Radio/Radio.css.js.map +1 -0
  285. package/dist/esm/components/primitives/Radio/Radio.js +109 -0
  286. package/dist/esm/components/primitives/Radio/Radio.js.map +1 -0
  287. package/dist/esm/components/primitives/Radio/RadioGroup.js +82 -0
  288. package/dist/esm/components/primitives/Radio/RadioGroup.js.map +1 -0
  289. package/dist/esm/components/primitives/Switch/Switch.css.js +1 -1
  290. package/dist/esm/components/primitives/TextArea/TextArea.css.js +10 -0
  291. package/dist/esm/components/primitives/TextArea/TextArea.css.js.map +1 -0
  292. package/dist/esm/components/primitives/TextArea/TextArea.js +97 -0
  293. package/dist/esm/components/primitives/TextArea/TextArea.js.map +1 -0
  294. package/dist/esm/components/primitives/Tooltip/Tooltip.js +7 -2
  295. package/dist/esm/components/primitives/Tooltip/Tooltip.js.map +1 -1
  296. package/dist/esm/components/primitives/VisuallyHidden/VisuallyHidden.css.js +7 -0
  297. package/dist/esm/components/primitives/VisuallyHidden/VisuallyHidden.css.js.map +1 -0
  298. package/dist/esm/components/primitives/VisuallyHidden/VisuallyHidden.js +38 -0
  299. package/dist/esm/components/primitives/VisuallyHidden/VisuallyHidden.js.map +1 -0
  300. package/dist/esm/components/shell/FloatingPanel/FloatingPanel.js +2 -10
  301. package/dist/esm/components/shell/FloatingPanel/FloatingPanel.js.map +1 -1
  302. package/dist/esm/context/KeyboardContext.js +1 -0
  303. package/dist/esm/context/KeyboardContext.js.map +1 -1
  304. package/dist/esm/hooks/useClickOutside/useClickOutside.js +60 -0
  305. package/dist/esm/hooks/useClickOutside/useClickOutside.js.map +1 -0
  306. package/dist/esm/hooks/useClipboard/useClipboard.js +147 -0
  307. package/dist/esm/hooks/useClipboard/useClipboard.js.map +1 -0
  308. package/dist/esm/hooks/useControlledState/useControlledState.js +75 -0
  309. package/dist/esm/hooks/useControlledState/useControlledState.js.map +1 -0
  310. package/dist/esm/hooks/useDisclosure/useDisclosure.js +49 -0
  311. package/dist/esm/hooks/useDisclosure/useDisclosure.js.map +1 -0
  312. package/dist/esm/{components/feedback/Dialog → hooks/useFocusTrap}/useFocusTrap.js +7 -7
  313. package/dist/esm/hooks/useFocusTrap/useFocusTrap.js.map +1 -0
  314. package/dist/esm/hooks/useHotkey/useHotkey.js +203 -0
  315. package/dist/esm/hooks/useHotkey/useHotkey.js.map +1 -0
  316. package/dist/esm/hooks/useKeyboard/useKeyboard.js +56 -0
  317. package/dist/esm/hooks/useKeyboard/useKeyboard.js.map +1 -0
  318. package/dist/esm/hooks/useKeyboard/utils.js +56 -0
  319. package/dist/esm/hooks/useKeyboard/utils.js.map +1 -0
  320. package/dist/esm/hooks/useMergedRef/useMergedRef.js +39 -0
  321. package/dist/esm/hooks/useMergedRef/useMergedRef.js.map +1 -0
  322. package/dist/esm/hooks/useResizeObserver/useResizeObserver.js +75 -0
  323. package/dist/esm/hooks/useResizeObserver/useResizeObserver.js.map +1 -0
  324. package/dist/esm/hooks/useTheme/useTheme.js +198 -0
  325. package/dist/esm/hooks/useTheme/useTheme.js.map +1 -0
  326. package/dist/esm/index.js +50 -1
  327. package/dist/esm/index.js.map +1 -1
  328. package/dist/esm/theme/ThemeProvider.js +17 -3
  329. package/dist/esm/theme/ThemeProvider.js.map +1 -1
  330. package/dist/esm/theme/contract.css.js +1 -1
  331. package/dist/esm/theme/createLightTheme.js +29 -0
  332. package/dist/esm/theme/createLightTheme.js.map +1 -0
  333. package/dist/esm/theme/darkTheme.css.js +2 -2
  334. package/dist/esm/theme/darkThemeValues.js +155 -0
  335. package/dist/esm/theme/darkThemeValues.js.map +1 -0
  336. package/dist/esm/theme/globalScrollbars.css.js +6 -0
  337. package/dist/esm/theme/globalScrollbars.css.js.map +1 -0
  338. package/dist/esm/theme/index.js +10 -0
  339. package/dist/esm/theme/index.js.map +1 -0
  340. package/dist/esm/theme/lightTheme.css.js +6 -0
  341. package/dist/esm/theme/lightTheme.css.js.map +1 -0
  342. package/dist/esm/theme/lightThemeValues.js +164 -0
  343. package/dist/esm/theme/lightThemeValues.js.map +1 -0
  344. package/dist/esm/theme/themeContractData.js +161 -0
  345. package/dist/esm/theme/themeContractData.js.map +1 -0
  346. package/dist/esm/theme-values.js +4 -0
  347. package/dist/esm/theme-values.js.map +1 -0
  348. package/dist/esm/utils/animations.css.js +15 -0
  349. package/dist/esm/utils/animations.css.js.map +1 -0
  350. package/dist/esm/utils/devWarn.js +36 -0
  351. package/dist/esm/utils/devWarn.js.map +1 -0
  352. package/dist/esm/utils/platform.js +91 -0
  353. package/dist/esm/utils/platform.js.map +1 -0
  354. package/dist/tokens/tokens.dark.css +98 -0
  355. package/dist/tokens/tokens.json +851 -0
  356. package/dist/tokens/tokens.light.css +98 -0
  357. package/dist/types/components/editor/ChatPanel/ChatMarkdownRenderer.d.ts +323 -0
  358. package/dist/types/components/editor/ChatPanel/ChatMarkdownRenderer.types.d.ts +46 -0
  359. package/dist/types/components/editor/ChatPanel/ChatMessage.d.ts +1 -0
  360. package/dist/types/components/editor/ChatPanel/ChatMessageList.d.ts +2 -1
  361. package/dist/types/components/editor/ChatPanel/ChatPanel.d.ts +1 -0
  362. package/dist/types/components/editor/ChatPanel/ChatPanel.types.d.ts +82 -1
  363. package/dist/types/components/editor/TransformControl/TransformControl.d.ts +34 -0
  364. package/dist/types/components/editor/TransformControl/TransformControl.types.d.ts +153 -0
  365. package/dist/types/components/feedback/Alert/Alert.d.ts +340 -0
  366. package/dist/types/components/feedback/Alert/Alert.types.d.ts +82 -0
  367. package/dist/types/components/feedback/Alert/AlertActions.d.ts +306 -0
  368. package/dist/types/components/feedback/Alert/AlertDescription.d.ts +303 -0
  369. package/dist/types/components/feedback/Alert/AlertTitle.d.ts +303 -0
  370. package/dist/types/components/feedback/EmptyState/EmptyState.d.ts +313 -0
  371. package/dist/types/components/feedback/EmptyState/EmptyState.types.d.ts +31 -0
  372. package/dist/types/components/feedback/ProgressBar/CircularProgress.d.ts +313 -0
  373. package/dist/types/components/feedback/ProgressBar/ProgressBar.d.ts +315 -0
  374. package/dist/types/components/feedback/ProgressBar/ProgressBar.types.d.ts +132 -0
  375. package/dist/types/components/feedback/Skeleton/Skeleton.d.ts +312 -0
  376. package/dist/types/components/feedback/Skeleton/Skeleton.types.d.ts +82 -0
  377. package/dist/types/components/feedback/Skeleton/SkeletonGroup.d.ts +313 -0
  378. package/dist/types/components/feedback/Spinner/Spinner.d.ts +306 -0
  379. package/dist/types/components/feedback/Spinner/Spinner.types.d.ts +41 -0
  380. package/dist/types/components/layout/Divider/Divider.d.ts +307 -0
  381. package/dist/types/components/layout/Divider/Divider.types.d.ts +50 -0
  382. package/dist/types/components/layout/ListItem/ListItem.d.ts +312 -0
  383. package/dist/types/components/layout/ListItem/ListItem.types.d.ts +35 -0
  384. package/dist/types/components/layout/PageHeader/PageHeader.d.ts +311 -0
  385. package/dist/types/components/layout/PageHeader/PageHeader.types.d.ts +30 -0
  386. package/dist/types/components/navigation/Breadcrumbs/BreadcrumbEllipsis.d.ts +297 -0
  387. package/dist/types/components/navigation/Breadcrumbs/BreadcrumbItem.d.ts +304 -0
  388. package/dist/types/components/navigation/Breadcrumbs/BreadcrumbSeparator.d.ts +296 -0
  389. package/dist/types/components/navigation/Breadcrumbs/Breadcrumbs.d.ts +311 -0
  390. package/dist/types/components/navigation/Breadcrumbs/Breadcrumbs.types.d.ts +89 -0
  391. package/dist/types/components/navigation/SegmentedControl/SegmentedControl.d.ts +24 -0
  392. package/dist/types/components/navigation/SegmentedControl/SegmentedControl.types.d.ts +85 -0
  393. package/dist/types/components/navigation/SegmentedControl/SegmentedControlItem.d.ts +12 -0
  394. package/dist/types/components/navigation/Tabs/Tabs.types.d.ts +10 -0
  395. package/dist/types/components/primitives/Avatar/Avatar.d.ts +317 -0
  396. package/dist/types/components/primitives/Avatar/Avatar.types.d.ts +139 -0
  397. package/dist/types/components/primitives/Avatar/AvatarGroup.d.ts +316 -0
  398. package/dist/types/components/primitives/Badge/Badge.d.ts +310 -0
  399. package/dist/types/components/primitives/Badge/Badge.types.d.ts +67 -0
  400. package/dist/types/components/primitives/Button/Button.d.ts +2 -2
  401. package/dist/types/components/primitives/Code/Code.d.ts +301 -0
  402. package/dist/types/components/primitives/Code/Code.types.d.ts +17 -0
  403. package/dist/types/components/primitives/IconButton/IconButton.d.ts +2 -2
  404. package/dist/types/components/primitives/Kbd/Kbd.d.ts +307 -0
  405. package/dist/types/components/primitives/Kbd/Kbd.types.d.ts +49 -0
  406. package/dist/types/components/primitives/Link/Link.d.ts +20 -0
  407. package/dist/types/components/primitives/Link/Link.types.d.ts +123 -0
  408. package/dist/types/components/primitives/Radio/Radio.d.ts +319 -0
  409. package/dist/types/components/primitives/Radio/Radio.types.d.ts +155 -0
  410. package/dist/types/components/primitives/Radio/RadioGroup.d.ts +320 -0
  411. package/dist/types/components/primitives/TextArea/TextArea.d.ts +26 -0
  412. package/dist/types/components/primitives/TextArea/TextArea.types.d.ts +76 -0
  413. package/dist/types/components/primitives/VisuallyHidden/VisuallyHidden.d.ts +316 -0
  414. package/dist/types/components/primitives/VisuallyHidden/VisuallyHidden.types.d.ts +29 -0
  415. package/dist/types/hooks/useClickOutside/useClickOutside.d.ts +37 -0
  416. package/dist/types/hooks/useClipboard/useClipboard.d.ts +24 -0
  417. package/dist/types/hooks/useClipboard/useClipboard.types.d.ts +22 -0
  418. package/dist/types/hooks/useControlledState/useControlledState.d.ts +38 -0
  419. package/dist/types/hooks/useDisclosure/useDisclosure.d.ts +25 -0
  420. package/dist/types/hooks/useDisclosure/useDisclosure.types.d.ts +22 -0
  421. package/dist/types/hooks/useFocusTrap/useFocusTrap.d.ts +30 -0
  422. package/dist/types/hooks/useHotkey/useHotkey.d.ts +23 -0
  423. package/dist/types/hooks/useHotkey/useHotkey.types.d.ts +36 -0
  424. package/dist/types/hooks/useKeyboard/types.d.ts +14 -0
  425. package/dist/types/hooks/useKeyboard/useKeyboard.d.ts +36 -0
  426. package/dist/types/hooks/useKeyboard/utils.d.ts +6 -0
  427. package/dist/types/hooks/useMergedRef/useMergedRef.d.ts +22 -0
  428. package/dist/types/hooks/useResizeObserver/useResizeObserver.d.ts +35 -0
  429. package/dist/types/hooks/useTheme/useTheme.d.ts +48 -0
  430. package/dist/types/hooks/useTheme/useTheme.types.d.ts +60 -0
  431. package/dist/types/index.d.ts +75 -3
  432. package/dist/types/theme/ThemeProvider.d.ts +14 -2
  433. package/dist/types/theme/contract.css.d.ts +125 -118
  434. package/dist/types/theme/createCustomTheme.d.ts +1 -1
  435. package/dist/types/theme/createLightTheme.d.ts +24 -0
  436. package/dist/types/theme/{darkTheme.css.d.ts → darkThemeValues.d.ts} +9 -2
  437. package/dist/types/theme/globalScrollbars.css.d.ts +15 -0
  438. package/dist/types/theme/index.d.ts +9 -0
  439. package/dist/types/theme/lightTheme.css.d.ts +17 -0
  440. package/dist/types/theme/lightThemeValues.d.ts +168 -0
  441. package/dist/types/theme/themeContractData.d.ts +160 -0
  442. package/dist/types/theme-values.d.ts +10 -0
  443. package/dist/types/utils/animations.css.d.ts +20 -0
  444. package/dist/types/utils/platform.d.ts +16 -0
  445. package/package.json +13 -4
  446. package/dist/esm/components/feedback/Dialog/useFocusTrap.js.map +0 -1
@@ -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;;"}
@@ -0,0 +1,49 @@
1
+ "use client";
2
+ import { useCallback, useMemo } from 'react';
3
+ import { useControlledState } from '../useControlledState/useControlledState.js';
4
+
5
+ /**
6
+ * Manage an open/closed state with stable `open`, `close`, `toggle` callbacks.
7
+ *
8
+ * Supports both controlled (driven by an `open` prop) and uncontrolled
9
+ * (managed internally with `defaultOpen`) modes. Built on top of
10
+ * `useControlledState` so the same controlled / uncontrolled rules apply —
11
+ * including the development warning when switching modes mid-life.
12
+ *
13
+ * @example
14
+ * ```tsx
15
+ * const { isOpen, open, close, toggle } = useDisclosure();
16
+ *
17
+ * return (
18
+ * <>
19
+ * <Button onClick={open}>Open</Button>
20
+ * <Dialog open={isOpen} onClose={close}>...</Dialog>
21
+ * </>
22
+ * );
23
+ * ```
24
+ */
25
+ function useDisclosure(options = {}) {
26
+ const { defaultOpen, open: controlledOpen, onOpenChange } = options;
27
+ const [isOpen, setOpenState] = useControlledState({
28
+ value: controlledOpen,
29
+ defaultValue: defaultOpen,
30
+ onChange: onOpenChange,
31
+ fallback: false,
32
+ });
33
+ const setOpen = useCallback((next) => {
34
+ setOpenState(next);
35
+ }, [setOpenState]);
36
+ const open = useCallback(() => {
37
+ setOpenState(true);
38
+ }, [setOpenState]);
39
+ const close = useCallback(() => {
40
+ setOpenState(false);
41
+ }, [setOpenState]);
42
+ const toggle = useCallback(() => {
43
+ setOpenState(prev => !prev);
44
+ }, [setOpenState]);
45
+ return useMemo(() => ({ isOpen, open, close, toggle, setOpen }), [isOpen, open, close, toggle, setOpen]);
46
+ }
47
+
48
+ export { useDisclosure };
49
+ //# sourceMappingURL=useDisclosure.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useDisclosure.js","sources":["../../../../../src/hooks/useDisclosure/useDisclosure.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;AASA;;;;;;;;;;;;;;;;;;;AAmBG;AACG;;AAKJ;AACE;AACA;AACA;AACA;AACD;AAED;;AAGE;AAIF;;AAEA;AAEA;;AAEA;AAEA;;AAEA;AAEA;AAIF;;"}
@@ -10,17 +10,17 @@ const FOCUSABLE_SELECTOR = [
10
10
  '[tabindex]:not([tabindex="-1"])',
11
11
  ].join(', ');
12
12
  /**
13
- * Reusable focus trap hook.
13
+ * Trap focus within a container element. Tab and Shift+Tab cycle through the
14
+ * focusable descendants without escaping the container.
14
15
  *
15
- * Traps Tab/Shift+Tab navigation within a container element,
16
- * wrapping focus from last to first element and vice versa.
17
- *
18
- * @returns onKeyDown handler to attach to the container element
16
+ * Returns a keyboard event handler to attach to the container's `onKeyDown`.
19
17
  *
20
18
  * @example
21
19
  * ```tsx
22
- * const handleKeyDown = useFocusTrap({ containerRef: panelRef, enabled: true });
23
- * <div ref={panelRef} onKeyDown={handleKeyDown}>...</div>
20
+ * const ref = useRef<HTMLDivElement>(null);
21
+ * const handleKeyDown = useFocusTrap({ containerRef: ref, enabled: isOpen });
22
+ *
23
+ * return <div ref={ref} onKeyDown={handleKeyDown}>...</div>;
24
24
  * ```
25
25
  */
26
26
  function useFocusTrap({ containerRef, enabled = true, }) {
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useFocusTrap.js","sources":["../../../../../src/hooks/useFocusTrap/useFocusTrap.ts"],"sourcesContent":[null],"names":[],"mappings":";;;AAIA;;;;;;;AAOC;AAaD;;;;;;;;;;;;;AAaG;AACG;AAIJ;AAEI;;AAEA;AACA;;AAEA;AAIA;;;;AAKA;;AAKA;AACE;;;;;;AAKA;;;;;AAKJ;AAGJ;;"}
@@ -0,0 +1,203 @@
1
+ "use client";
2
+ import { useRef, useMemo, useEffect } from 'react';
3
+ import { parseShortcut, getPlatform } from '../../utils/platform.js';
4
+
5
+ function isRefObject(value) {
6
+ return (typeof value === 'object' &&
7
+ value !== null &&
8
+ 'current' in value);
9
+ }
10
+ function resolveTarget(target) {
11
+ if (target === undefined) {
12
+ return typeof window === 'undefined' ? null : window;
13
+ }
14
+ if (target === null)
15
+ return null;
16
+ if (isRefObject(target))
17
+ return target.current;
18
+ return target;
19
+ }
20
+ const MODIFIERS = new Set(['ctrl', 'cmd', 'meta', 'alt', 'option', 'shift']);
21
+ const KEY_ALIASES = {
22
+ esc: 'escape',
23
+ return: 'enter',
24
+ space: ' ',
25
+ spacebar: ' ',
26
+ up: 'arrowup',
27
+ down: 'arrowdown',
28
+ left: 'arrowleft',
29
+ right: 'arrowright',
30
+ plus: '+',
31
+ };
32
+ function normalizeKey(key) {
33
+ const lower = key.toLowerCase();
34
+ return KEY_ALIASES[lower] ?? lower;
35
+ }
36
+ function parseCombo(combo) {
37
+ const parts = parseShortcut(combo);
38
+ if (parts.length === 0)
39
+ return null;
40
+ const platform = getPlatform();
41
+ const isMac = platform === 'mac';
42
+ let ctrl = false;
43
+ let meta = false;
44
+ let alt = false;
45
+ let shift = false;
46
+ let key = null;
47
+ for (const raw of parts) {
48
+ const lower = raw.toLowerCase();
49
+ if (MODIFIERS.has(lower)) {
50
+ switch (lower) {
51
+ case 'ctrl':
52
+ ctrl = true;
53
+ break;
54
+ case 'cmd':
55
+ // Cmd auto-maps to Ctrl on non-Mac.
56
+ if (isMac) {
57
+ meta = true;
58
+ }
59
+ else {
60
+ ctrl = true;
61
+ }
62
+ break;
63
+ case 'meta':
64
+ meta = true;
65
+ break;
66
+ case 'alt':
67
+ case 'option':
68
+ alt = true;
69
+ break;
70
+ case 'shift':
71
+ shift = true;
72
+ break;
73
+ }
74
+ }
75
+ else {
76
+ key = normalizeKey(raw);
77
+ }
78
+ }
79
+ if (key === null)
80
+ return null;
81
+ return { ctrl, meta, alt, shift, key };
82
+ }
83
+ function isEditableTarget(target) {
84
+ if (!(target instanceof HTMLElement))
85
+ return false;
86
+ if (target.isContentEditable)
87
+ return true;
88
+ const tag = target.tagName;
89
+ if (tag === 'INPUT') {
90
+ const type = target.type.toLowerCase();
91
+ // Buttons and similar non-text inputs should not block hotkeys.
92
+ const nonEditable = new Set([
93
+ 'button',
94
+ 'submit',
95
+ 'reset',
96
+ 'checkbox',
97
+ 'radio',
98
+ 'file',
99
+ 'image',
100
+ 'range',
101
+ 'color',
102
+ ]);
103
+ return !nonEditable.has(type);
104
+ }
105
+ return tag === 'TEXTAREA' || tag === 'SELECT';
106
+ }
107
+ function matches(parsed, event) {
108
+ if (event.ctrlKey !== parsed.ctrl)
109
+ return false;
110
+ if (event.metaKey !== parsed.meta)
111
+ return false;
112
+ if (event.altKey !== parsed.alt)
113
+ return false;
114
+ if (event.shiftKey !== parsed.shift)
115
+ return false;
116
+ const eventKey = event.key.toLowerCase();
117
+ return eventKey === parsed.key;
118
+ }
119
+ /**
120
+ * Bind a single keyboard combo to a callback.
121
+ *
122
+ * Combos use the same `+`-separated string format as `MenuBar`'s `shortcut`
123
+ * prop: `"Ctrl+S"`, `"Cmd+Shift+P"`, `"Escape"`. Modifiers: `Ctrl`, `Cmd`
124
+ * (= Meta), `Alt` / `Option`, `Shift`. `Cmd` automatically maps to `Ctrl` on
125
+ * non-Mac platforms via `getPlatform()`.
126
+ *
127
+ * The handler reference is stable — passing a fresh inline function on every
128
+ * render is safe and does not re-subscribe the underlying listener.
129
+ *
130
+ * @example
131
+ * ```tsx
132
+ * useHotkey('Ctrl+S', e => save(), { preventDefault: true });
133
+ * useHotkey('Escape', () => setOpen(false));
134
+ * useHotkey('Cmd+K', () => openCommandPalette()); // Cmd on Mac, Ctrl elsewhere
135
+ * ```
136
+ */
137
+ function useHotkey(combo, handler, options = {}) {
138
+ const { enabled = true, enableInInputs = false, preventDefault = true, stopPropagation = false, target, } = options;
139
+ const handlerRef = useRef(handler);
140
+ handlerRef.current = handler;
141
+ const optionsRef = useRef({
142
+ enabled,
143
+ enableInInputs,
144
+ preventDefault,
145
+ stopPropagation,
146
+ });
147
+ optionsRef.current = {
148
+ enabled,
149
+ enableInInputs,
150
+ preventDefault,
151
+ stopPropagation,
152
+ };
153
+ const parsed = useMemo(() => parseCombo(combo), [combo]);
154
+ const parsedRef = useRef(parsed);
155
+ parsedRef.current = parsed;
156
+ const attachedTargetRef = useRef(null);
157
+ const listenerRef = useRef(null);
158
+ // Runs every render so a ref whose `.current` becomes available after the
159
+ // first render (conditional rendering, lazy children) is picked up. The
160
+ // identity check on the resolved target keeps re-attaches limited to the
161
+ // moments the underlying element actually changes.
162
+ useEffect(() => {
163
+ const desired = enabled && parsed !== null ? resolveTarget(target) : null;
164
+ if (desired === attachedTargetRef.current)
165
+ return;
166
+ if (attachedTargetRef.current && listenerRef.current) {
167
+ attachedTargetRef.current.removeEventListener('keydown', listenerRef.current);
168
+ }
169
+ attachedTargetRef.current = desired;
170
+ if (desired === null) {
171
+ listenerRef.current = null;
172
+ return;
173
+ }
174
+ const listener = (event) => {
175
+ const ke = event;
176
+ const opts = optionsRef.current;
177
+ const p = parsedRef.current;
178
+ if (p === null || !opts.enabled)
179
+ return;
180
+ if (!matches(p, ke))
181
+ return;
182
+ if (!opts.enableInInputs && isEditableTarget(ke.target))
183
+ return;
184
+ if (opts.preventDefault)
185
+ ke.preventDefault();
186
+ handlerRef.current(ke);
187
+ if (opts.stopPropagation)
188
+ ke.stopPropagation();
189
+ };
190
+ listenerRef.current = listener;
191
+ desired.addEventListener('keydown', listener);
192
+ });
193
+ useEffect(() => () => {
194
+ if (attachedTargetRef.current && listenerRef.current) {
195
+ attachedTargetRef.current.removeEventListener('keydown', listenerRef.current);
196
+ }
197
+ attachedTargetRef.current = null;
198
+ listenerRef.current = null;
199
+ }, []);
200
+ }
201
+
202
+ export { useHotkey };
203
+ //# sourceMappingURL=useHotkey.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useHotkey.js","sources":["../../../../../src/hooks/useHotkey/useHotkey.ts"],"sourcesContent":[null],"names":[],"mappings":";;;;AAMA;AACE;AAEE;;AAGJ;AAEA;AACE;AACE;;;AAEmB;;;AAErB;AACF;AAWA;AAEA;AACE;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAGF;AACE;AACA;AACF;AAEA;AACE;AACA;AAAwB;AAExB;AACA;;;;;;AAQA;AACE;AACA;;AAEI;;;AAGA;;;;;;;;;AAQA;;;AAGA;AACA;;;AAGA;;;;;;AAKF;;;;AAIc;;AAEpB;AAEA;AACE;AAAsC;;AACR;AAC9B;AACA;;;AAGE;;;;;;;;;;AAUC;AACD;;AAEF;AACF;AAEA;AACE;AAAmC;AACnC;AAAmC;AACnC;AAAiC;AACjC;AAAqC;;AAGrC;AACF;AAEA;;;;;;;;;;;;;;;;;AAiBG;AACG;;AAaJ;AACA;;;;;;AAOC;;;;;;;AAQD;AACA;AACA;AAEA;AACA;;;;;;AAOE;AACA;;;;;AAQA;AACA;AACE;;;AAIF;;AAEE;AACA;AACA;;AACA;;;;;;AAIA;;;AAEF;AACA;AACA;AACF;AAEA;;;;AAQI;AACA;;AAIN;;"}
@@ -0,0 +1,56 @@
1
+ "use client";
2
+ import { useState, useCallback, useEffect, useMemo } from 'react';
3
+ import { updateState, mapInnerStateToState } from './utils.js';
4
+ export { isKeyPressed, isModifierKey } from './utils.js';
5
+
6
+ /**
7
+ * Hook for tracking keyboard state including modifier keys and pressed keys.
8
+ *
9
+ * Useful for components that need to respond to keyboard modifiers like
10
+ * Ctrl+drag for snapping, Shift+drag for precision, etc.
11
+ * @returns Current keyboard state
12
+ *
13
+ * @example
14
+ * ```tsx
15
+ * // Track all keys and modifiers
16
+ * const keyboard = useKeyboard();
17
+ *
18
+ * const handleMouseMove = (e: MouseEvent) => {
19
+ * if (keyboard.ctrl) {
20
+ * // Snap to grid
21
+ * } else if (keyboard.shift) {
22
+ * // Precision mode
23
+ * }
24
+ * };
25
+ *
26
+ * // Track only specific keys
27
+ * const keyboard = useKeyboard({
28
+ * trackAllKeys: false,
29
+ * trackedKeys: ['Space', 'Enter', 'Escape']
30
+ * });
31
+ *
32
+ * // Check if specific key is pressed
33
+ * const isSpacePressed = keyboard.pressedKeys.includes('Space');
34
+ * ```
35
+ */
36
+ const useKeyboard = () => {
37
+ const [keyboardState, setKeyboardState] = useState(new Set());
38
+ const handleKeyDown = useCallback((event) => {
39
+ setKeyboardState(prevState => updateState(prevState, event));
40
+ }, []);
41
+ const handleKeyUp = useCallback((event) => {
42
+ setKeyboardState(prevState => updateState(prevState, event));
43
+ }, []);
44
+ useEffect(() => {
45
+ window.addEventListener('keydown', handleKeyDown);
46
+ window.addEventListener('keyup', handleKeyUp);
47
+ return () => {
48
+ window.removeEventListener('keydown', handleKeyDown);
49
+ window.removeEventListener('keyup', handleKeyUp);
50
+ };
51
+ }, [handleKeyDown, handleKeyUp]);
52
+ return useMemo(() => mapInnerStateToState(keyboardState), [keyboardState]);
53
+ };
54
+
55
+ export { useKeyboard };
56
+ //# sourceMappingURL=useKeyboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useKeyboard.js","sources":["../../../../../src/hooks/useKeyboard/useKeyboard.tsx"],"sourcesContent":[null],"names":[],"mappings":";;;;;AAUA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA6BG;AACI;AACL;AAIA;AACE;;AAGF;AACE;;;AAIA;AACA;AAEA;AACE;AACA;AACF;AACF;AAEA;AACF;;"}