entangle-ui 0.9.0 → 0.11.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 (1053) hide show
  1. package/CHANGELOG.md +766 -0
  2. package/README.md +8 -6
  3. package/dist/esm/assets/src/components/controls/FileTree/FileTree.css.ts.vanilla-YmktPvnr.css +48 -0
  4. package/dist/esm/assets/src/components/controls/Select/{Select.css.ts.vanilla-oZnFUorL.css → Select.css.ts.vanilla-Cpu2BvWL.css} +3 -0
  5. package/dist/esm/assets/src/components/controls/TreeView/{TreeNode.css.ts.vanilla-B_f8pUb8.css → TreeNode.css.ts.vanilla-DXPJRWZZ.css} +31 -24
  6. package/dist/esm/assets/src/components/editor/AssetBrowser/AssetBrowser.css.ts.vanilla-B2S4cEiY.css +262 -0
  7. package/dist/esm/assets/src/components/editor/Minimap/Minimap.css.ts.vanilla--rNdWQwy.css +133 -0
  8. package/dist/esm/assets/src/components/editor/NodeGraph/NodeGraph.css.ts.vanilla-ClF4YZvl.css +401 -0
  9. package/dist/esm/assets/src/components/editor/PropertyInspector/{PropertyPanel.css.ts.vanilla-RYv_XgOu.css → PropertyPanel.css.ts.vanilla-Dpr_k5I3.css} +4 -1
  10. package/dist/esm/assets/src/components/editor/PropertyInspector/{PropertyRow.css.ts.vanilla-C3YZnnHb.css → PropertyRow.css.ts.vanilla-pq1Uhd2a.css} +15 -8
  11. package/dist/esm/assets/src/components/editor/PropertyInspector/{PropertySection.css.ts.vanilla-DK12opZc.css → PropertySection.css.ts.vanilla-6MWWAqyd.css} +50 -32
  12. package/dist/esm/assets/src/components/editor/Timeline/Timeline.css.ts.vanilla-DDX6Zalo.css +203 -0
  13. package/dist/esm/assets/src/components/feedback/LogView/LogView.css.ts.vanilla-nB5ENOpw.css +312 -0
  14. package/dist/esm/assets/src/components/navigation/Menu/Menu.css.ts.vanilla-B5iVe5S2.css +88 -0
  15. package/dist/esm/assets/src/components/navigation/PathBar/PathBar.css.ts.vanilla-BIEzQQOf.css +10 -0
  16. package/dist/esm/assets/src/components/primitives/viewport/Viewport.css.ts.vanilla-CkFBJ7Vo.css +65 -0
  17. package/dist/esm/assets/src/components/shell/FloatingPanel/{FloatingPanel.css.ts.vanilla-1rIAXEFp.css → FloatingPanel.css.ts.vanilla-CRaeYJ2b.css} +20 -13
  18. package/dist/esm/assets/src/theme/{darkTheme.css.ts.vanilla-ab1WD4dr.css → darkTheme.css.ts.vanilla-BHZ3ecRn.css} +3 -3
  19. package/dist/esm/assets/src/theme/{lightTheme.css.ts.vanilla-OaRI_wIc.css → lightTheme.css.ts.vanilla-Ct6f9Iym.css} +3 -3
  20. package/dist/esm/components/Icons/AddIcon.js.map +1 -1
  21. package/dist/esm/components/Icons/AiChatIcon.js.map +1 -1
  22. package/dist/esm/components/Icons/AiSparklesIcon.js.map +1 -1
  23. package/dist/esm/components/Icons/ArchiveIcon.js.map +1 -1
  24. package/dist/esm/components/Icons/ArrowDownIcon.js.map +1 -1
  25. package/dist/esm/components/Icons/ArrowLeftIcon.js.map +1 -1
  26. package/dist/esm/components/Icons/ArrowRightIcon.js.map +1 -1
  27. package/dist/esm/components/Icons/ArrowUpIcon.js.map +1 -1
  28. package/dist/esm/components/Icons/BookmarkIcon.js.map +1 -1
  29. package/dist/esm/components/Icons/BugIcon.js.map +1 -1
  30. package/dist/esm/components/Icons/BuildingIcon.js.map +1 -1
  31. package/dist/esm/components/Icons/CalendarIcon.js.map +1 -1
  32. package/dist/esm/components/Icons/CameraIcon.js +31 -0
  33. package/dist/esm/components/Icons/CameraIcon.js.map +1 -0
  34. package/dist/esm/components/Icons/CheckIcon.js.map +1 -1
  35. package/dist/esm/components/Icons/ChevronDownIcon.js.map +1 -1
  36. package/dist/esm/components/Icons/ChevronLeftIcon.js.map +1 -1
  37. package/dist/esm/components/Icons/ChevronRightIcon.js.map +1 -1
  38. package/dist/esm/components/Icons/ChevronUpIcon.js.map +1 -1
  39. package/dist/esm/components/Icons/CircleIcon.js.map +1 -1
  40. package/dist/esm/components/Icons/ClockIcon.js.map +1 -1
  41. package/dist/esm/components/Icons/CloseIcon.js.map +1 -1
  42. package/dist/esm/components/Icons/CloudUploadIcon.js.map +1 -1
  43. package/dist/esm/components/Icons/CodeIcon.js.map +1 -1
  44. package/dist/esm/components/Icons/CopyIcon.js.map +1 -1
  45. package/dist/esm/components/Icons/CubeIcon.js +31 -0
  46. package/dist/esm/components/Icons/CubeIcon.js.map +1 -0
  47. package/dist/esm/components/Icons/CutIcon.js.map +1 -1
  48. package/dist/esm/components/Icons/DotsHorizontalIcon.js.map +1 -1
  49. package/dist/esm/components/Icons/DotsVerticalIcon.js.map +1 -1
  50. package/dist/esm/components/Icons/DownloadIcon.js.map +1 -1
  51. package/dist/esm/components/Icons/EditIcon.js.map +1 -1
  52. package/dist/esm/components/Icons/ErrorIcon.js.map +1 -1
  53. package/dist/esm/components/Icons/ExternalLinkIcon.js.map +1 -1
  54. package/dist/esm/components/Icons/EyeDropperIcon.js.map +1 -1
  55. package/dist/esm/components/Icons/EyeIcon.js.map +1 -1
  56. package/dist/esm/components/Icons/FileTextIcon.js.map +1 -1
  57. package/dist/esm/components/Icons/FilterIcon.js.map +1 -1
  58. package/dist/esm/components/Icons/FirstIcon.js.map +1 -1
  59. package/dist/esm/components/Icons/FolderCogIcon.js.map +1 -1
  60. package/dist/esm/components/Icons/FolderIcon.js.map +1 -1
  61. package/dist/esm/components/Icons/FolderOpenIcon.js +2 -2
  62. package/dist/esm/components/Icons/FolderOpenIcon.js.map +1 -1
  63. package/dist/esm/components/Icons/FullscreenIcon.js.map +1 -1
  64. package/dist/esm/components/Icons/GitBranchIcon.js.map +1 -1
  65. package/dist/esm/components/Icons/GridIcon.js.map +1 -1
  66. package/dist/esm/components/Icons/HeartIcon.js.map +1 -1
  67. package/dist/esm/components/Icons/HelpIcon.js.map +1 -1
  68. package/dist/esm/components/Icons/HomeIcon.js.map +1 -1
  69. package/dist/esm/components/Icons/ImageIcon.js +31 -0
  70. package/dist/esm/components/Icons/ImageIcon.js.map +1 -0
  71. package/dist/esm/components/Icons/InfoIcon.js.map +1 -1
  72. package/dist/esm/components/Icons/LastIcon.js.map +1 -1
  73. package/dist/esm/components/Icons/LinkIcon.js.map +1 -1
  74. package/dist/esm/components/Icons/ListIcon.js.map +1 -1
  75. package/dist/esm/components/Icons/LockIcon.js.map +1 -1
  76. package/dist/esm/components/Icons/MaximizeIcon.js.map +1 -1
  77. package/dist/esm/components/Icons/MenuIcon.js.map +1 -1
  78. package/dist/esm/components/Icons/MinimizeIcon.js.map +1 -1
  79. package/dist/esm/components/Icons/MinusIcon.js.map +1 -1
  80. package/dist/esm/components/Icons/OrbitIcon.js +31 -0
  81. package/dist/esm/components/Icons/OrbitIcon.js.map +1 -0
  82. package/dist/esm/components/Icons/PasteIcon.js.map +1 -1
  83. package/dist/esm/components/Icons/PauseIcon.js +2 -2
  84. package/dist/esm/components/Icons/PauseIcon.js.map +1 -1
  85. package/dist/esm/components/Icons/PinIcon.js.map +1 -1
  86. package/dist/esm/components/Icons/PlayIcon.js.map +1 -1
  87. package/dist/esm/components/Icons/RedoIcon.js.map +1 -1
  88. package/dist/esm/components/Icons/RefreshIcon.js.map +1 -1
  89. package/dist/esm/components/Icons/RobotIcon.js.map +1 -1
  90. package/dist/esm/components/Icons/RotateIcon.js +32 -0
  91. package/dist/esm/components/Icons/RotateIcon.js.map +1 -0
  92. package/dist/esm/components/Icons/SaveIcon.js.map +1 -1
  93. package/dist/esm/components/Icons/SearchIcon.js.map +1 -1
  94. package/dist/esm/components/Icons/SendIcon.js.map +1 -1
  95. package/dist/esm/components/Icons/SettingsIcon.js.map +1 -1
  96. package/dist/esm/components/Icons/SortIcon.js.map +1 -1
  97. package/dist/esm/components/Icons/SpinIcon.js +32 -0
  98. package/dist/esm/components/Icons/SpinIcon.js.map +1 -0
  99. package/dist/esm/components/Icons/StarIcon.js.map +1 -1
  100. package/dist/esm/components/Icons/StopIcon.js.map +1 -1
  101. package/dist/esm/components/Icons/SuccessIcon.js.map +1 -1
  102. package/dist/esm/components/Icons/TagIcon.js.map +1 -1
  103. package/dist/esm/components/Icons/TangentAlignedIcon.js.map +1 -1
  104. package/dist/esm/components/Icons/TangentAutoIcon.js.map +1 -1
  105. package/dist/esm/components/Icons/TangentFreeIcon.js.map +1 -1
  106. package/dist/esm/components/Icons/TangentLinearIcon.js.map +1 -1
  107. package/dist/esm/components/Icons/TangentMirroredIcon.js.map +1 -1
  108. package/dist/esm/components/Icons/TangentStepIcon.js.map +1 -1
  109. package/dist/esm/components/Icons/TerminalIcon.js.map +1 -1
  110. package/dist/esm/components/Icons/TrashIcon.js.map +1 -1
  111. package/dist/esm/components/Icons/UndoIcon.js.map +1 -1
  112. package/dist/esm/components/Icons/UnlinkIcon.js.map +1 -1
  113. package/dist/esm/components/Icons/UnlockIcon.js.map +1 -1
  114. package/dist/esm/components/Icons/UploadIcon.js.map +1 -1
  115. package/dist/esm/components/Icons/UserIcon.js.map +1 -1
  116. package/dist/esm/components/Icons/UsersIcon.js.map +1 -1
  117. package/dist/esm/components/Icons/WarningIcon.js.map +1 -1
  118. package/dist/esm/components/Icons/ZoomFitIcon.js +32 -0
  119. package/dist/esm/components/Icons/ZoomFitIcon.js.map +1 -0
  120. package/dist/esm/components/Icons/ZoomInIcon.js.map +1 -1
  121. package/dist/esm/components/Icons/ZoomOutIcon.js.map +1 -1
  122. package/dist/esm/components/controls/CartesianPicker/CartesianPicker.js +3 -3
  123. package/dist/esm/components/controls/CartesianPicker/CartesianPicker.js.map +1 -1
  124. package/dist/esm/components/controls/CartesianPicker/useCartesianInteraction.js +7 -5
  125. package/dist/esm/components/controls/CartesianPicker/useCartesianInteraction.js.map +1 -1
  126. package/dist/esm/components/controls/CartesianPicker/useCartesianRenderer.js.map +1 -1
  127. package/dist/esm/components/controls/ColorPicker/AlphaSlider.js.map +1 -1
  128. package/dist/esm/components/controls/ColorPicker/ColorArea.js +2 -2
  129. package/dist/esm/components/controls/ColorPicker/ColorArea.js.map +1 -1
  130. package/dist/esm/components/controls/ColorPicker/ColorInputs.js +16 -2
  131. package/dist/esm/components/controls/ColorPicker/ColorInputs.js.map +1 -1
  132. package/dist/esm/components/controls/ColorPicker/ColorPalette.js +3 -1
  133. package/dist/esm/components/controls/ColorPicker/ColorPalette.js.map +1 -1
  134. package/dist/esm/components/controls/ColorPicker/ColorPicker.js +6 -6
  135. package/dist/esm/components/controls/ColorPicker/ColorPicker.js.map +1 -1
  136. package/dist/esm/components/controls/ColorPicker/ColorPresets.js +3 -1
  137. package/dist/esm/components/controls/ColorPicker/ColorPresets.js.map +1 -1
  138. package/dist/esm/components/controls/ColorPicker/ColorSwatch.js.map +1 -1
  139. package/dist/esm/components/controls/ColorPicker/EyeDropper.js.map +1 -1
  140. package/dist/esm/components/controls/ColorPicker/HueSlider.js.map +1 -1
  141. package/dist/esm/components/controls/ColorPicker/colorUtils.js.map +1 -1
  142. package/dist/esm/components/controls/ColorPicker/palettes/material.js.map +1 -1
  143. package/dist/esm/components/controls/ColorPicker/palettes/professional.js.map +1 -1
  144. package/dist/esm/components/controls/ColorPicker/palettes/tailwind.js.map +1 -1
  145. package/dist/esm/components/controls/ColorPicker/useColor.js.map +1 -1
  146. package/dist/esm/components/controls/Combobox/Combobox.js +46 -23
  147. package/dist/esm/components/controls/Combobox/Combobox.js.map +1 -1
  148. package/dist/esm/components/controls/CurveEditor/CurveCanvas.js +11 -4
  149. package/dist/esm/components/controls/CurveEditor/CurveCanvas.js.map +1 -1
  150. package/dist/esm/components/controls/CurveEditor/CurveEditor.js +4 -4
  151. package/dist/esm/components/controls/CurveEditor/CurveEditor.js.map +1 -1
  152. package/dist/esm/components/controls/CurveEditor/CurveToolbar.js +7 -5
  153. package/dist/esm/components/controls/CurveEditor/CurveToolbar.js.map +1 -1
  154. package/dist/esm/components/controls/CurveEditor/curvePresets.js.map +1 -1
  155. package/dist/esm/components/controls/CurveEditor/curveUtils.js +13 -15
  156. package/dist/esm/components/controls/CurveEditor/curveUtils.js.map +1 -1
  157. package/dist/esm/components/controls/CurveEditor/useCurveInteraction.js +72 -50
  158. package/dist/esm/components/controls/CurveEditor/useCurveInteraction.js.map +1 -1
  159. package/dist/esm/components/controls/CurveEditor/useCurveRenderer.js +11 -3
  160. package/dist/esm/components/controls/CurveEditor/useCurveRenderer.js.map +1 -1
  161. package/dist/esm/components/controls/FileTree/FileTree.css.js +9 -0
  162. package/dist/esm/components/controls/FileTree/FileTree.css.js.map +1 -0
  163. package/dist/esm/components/controls/FileTree/FileTree.js +252 -0
  164. package/dist/esm/components/controls/FileTree/FileTree.js.map +1 -0
  165. package/dist/esm/components/controls/FileTree/fileTreeIcons.js +129 -0
  166. package/dist/esm/components/controls/FileTree/fileTreeIcons.js.map +1 -0
  167. package/dist/esm/components/controls/FileTree/fileTreeLabels.js +8 -0
  168. package/dist/esm/components/controls/FileTree/fileTreeLabels.js.map +1 -0
  169. package/dist/esm/components/controls/FileTree/useFileTreeDrop.js +115 -0
  170. package/dist/esm/components/controls/FileTree/useFileTreeDrop.js.map +1 -0
  171. package/dist/esm/components/controls/FileUploader/FileUploader.js +3 -6
  172. package/dist/esm/components/controls/FileUploader/FileUploader.js.map +1 -1
  173. package/dist/esm/components/controls/MultiSelect/MultiSelect.js +46 -15
  174. package/dist/esm/components/controls/MultiSelect/MultiSelect.js.map +1 -1
  175. package/dist/esm/components/controls/NumberInput/NumberInput.js +11 -4
  176. package/dist/esm/components/controls/NumberInput/NumberInput.js.map +1 -1
  177. package/dist/esm/components/controls/NumberInput/useNumberInput.js +6 -2
  178. package/dist/esm/components/controls/NumberInput/useNumberInput.js.map +1 -1
  179. package/dist/esm/components/controls/Select/Select.css.js +1 -1
  180. package/dist/esm/components/controls/Select/Select.js +44 -16
  181. package/dist/esm/components/controls/Select/Select.js.map +1 -1
  182. package/dist/esm/components/controls/Slider/Slider.js +6 -8
  183. package/dist/esm/components/controls/Slider/Slider.js.map +1 -1
  184. package/dist/esm/components/controls/TagInput/TagInput.js +4 -2
  185. package/dist/esm/components/controls/TagInput/TagInput.js.map +1 -1
  186. package/dist/esm/components/controls/TreeView/TreeNode.css.js +9 -8
  187. package/dist/esm/components/controls/TreeView/TreeNode.css.js.map +1 -1
  188. package/dist/esm/components/controls/TreeView/TreeNode.js +42 -7
  189. package/dist/esm/components/controls/TreeView/TreeNode.js.map +1 -1
  190. package/dist/esm/components/controls/TreeView/TreeView.js +18 -6
  191. package/dist/esm/components/controls/TreeView/TreeView.js.map +1 -1
  192. package/dist/esm/components/controls/TreeView/useTreeState.js +2 -6
  193. package/dist/esm/components/controls/TreeView/useTreeState.js.map +1 -1
  194. package/dist/esm/components/controls/VectorInput/VectorInput.js +13 -4
  195. package/dist/esm/components/controls/VectorInput/VectorInput.js.map +1 -1
  196. package/dist/esm/components/data/DataTable/DataTable.js +25 -8
  197. package/dist/esm/components/data/DataTable/DataTable.js.map +1 -1
  198. package/dist/esm/components/editor/AssetBrowser/AssetBrowser.css.js +46 -0
  199. package/dist/esm/components/editor/AssetBrowser/AssetBrowser.css.js.map +1 -0
  200. package/dist/esm/components/editor/AssetBrowser/AssetBrowser.js +254 -0
  201. package/dist/esm/components/editor/AssetBrowser/AssetBrowser.js.map +1 -0
  202. package/dist/esm/components/editor/AssetBrowser/AssetBrowserAnnouncementLive.js +17 -0
  203. package/dist/esm/components/editor/AssetBrowser/AssetBrowserAnnouncementLive.js.map +1 -0
  204. package/dist/esm/components/editor/AssetBrowser/AssetBrowserBreadcrumbs.js +25 -0
  205. package/dist/esm/components/editor/AssetBrowser/AssetBrowserBreadcrumbs.js.map +1 -0
  206. package/dist/esm/components/editor/AssetBrowser/AssetBrowserContent.js +140 -0
  207. package/dist/esm/components/editor/AssetBrowser/AssetBrowserContent.js.map +1 -0
  208. package/dist/esm/components/editor/AssetBrowser/AssetBrowserContext.js +81 -0
  209. package/dist/esm/components/editor/AssetBrowser/AssetBrowserContext.js.map +1 -0
  210. package/dist/esm/components/editor/AssetBrowser/AssetBrowserContextMenu.js +123 -0
  211. package/dist/esm/components/editor/AssetBrowser/AssetBrowserContextMenu.js.map +1 -0
  212. package/dist/esm/components/editor/AssetBrowser/AssetBrowserDefaultMenus.js +136 -0
  213. package/dist/esm/components/editor/AssetBrowser/AssetBrowserDefaultMenus.js.map +1 -0
  214. package/dist/esm/components/editor/AssetBrowser/AssetBrowserGrid.js +137 -0
  215. package/dist/esm/components/editor/AssetBrowser/AssetBrowserGrid.js.map +1 -0
  216. package/dist/esm/components/editor/AssetBrowser/AssetBrowserGridItem.js +226 -0
  217. package/dist/esm/components/editor/AssetBrowser/AssetBrowserGridItem.js.map +1 -0
  218. package/dist/esm/components/editor/AssetBrowser/AssetBrowserList.js +189 -0
  219. package/dist/esm/components/editor/AssetBrowser/AssetBrowserList.js.map +1 -0
  220. package/dist/esm/components/editor/AssetBrowser/AssetBrowserRenameField.js +63 -0
  221. package/dist/esm/components/editor/AssetBrowser/AssetBrowserRenameField.js.map +1 -0
  222. package/dist/esm/components/editor/AssetBrowser/AssetBrowserSidebar.js +19 -0
  223. package/dist/esm/components/editor/AssetBrowser/AssetBrowserSidebar.js.map +1 -0
  224. package/dist/esm/components/editor/AssetBrowser/AssetBrowserStatusBar.js +24 -0
  225. package/dist/esm/components/editor/AssetBrowser/AssetBrowserStatusBar.js.map +1 -0
  226. package/dist/esm/components/editor/AssetBrowser/AssetBrowserStore.js +176 -0
  227. package/dist/esm/components/editor/AssetBrowser/AssetBrowserStore.js.map +1 -0
  228. package/dist/esm/components/editor/AssetBrowser/AssetBrowserSurface.js +120 -0
  229. package/dist/esm/components/editor/AssetBrowser/AssetBrowserSurface.js.map +1 -0
  230. package/dist/esm/components/editor/AssetBrowser/AssetBrowserToolbar.js +134 -0
  231. package/dist/esm/components/editor/AssetBrowser/AssetBrowserToolbar.js.map +1 -0
  232. package/dist/esm/components/editor/AssetBrowser/assetBrowserFilter.js +90 -0
  233. package/dist/esm/components/editor/AssetBrowser/assetBrowserFilter.js.map +1 -0
  234. package/dist/esm/components/editor/AssetBrowser/assetBrowserFormat.js +32 -0
  235. package/dist/esm/components/editor/AssetBrowser/assetBrowserFormat.js.map +1 -0
  236. package/dist/esm/components/editor/AssetBrowser/assetBrowserGeometry.js +70 -0
  237. package/dist/esm/components/editor/AssetBrowser/assetBrowserGeometry.js.map +1 -0
  238. package/dist/esm/components/editor/AssetBrowser/assetBrowserKeyboard.js +62 -0
  239. package/dist/esm/components/editor/AssetBrowser/assetBrowserKeyboard.js.map +1 -0
  240. package/dist/esm/components/editor/AssetBrowser/assetBrowserLabels.js +52 -0
  241. package/dist/esm/components/editor/AssetBrowser/assetBrowserLabels.js.map +1 -0
  242. package/dist/esm/components/editor/AssetBrowser/slots.js +18 -0
  243. package/dist/esm/components/editor/AssetBrowser/slots.js.map +1 -0
  244. package/dist/esm/components/editor/AssetBrowser/useAssetBrowserAnnouncement.js +19 -0
  245. package/dist/esm/components/editor/AssetBrowser/useAssetBrowserAnnouncement.js.map +1 -0
  246. package/dist/esm/components/editor/AssetBrowser/useAssetBrowserHandle.js +70 -0
  247. package/dist/esm/components/editor/AssetBrowser/useAssetBrowserHandle.js.map +1 -0
  248. package/dist/esm/components/editor/AssetBrowser/useAssetBrowserViewState.js +108 -0
  249. package/dist/esm/components/editor/AssetBrowser/useAssetBrowserViewState.js.map +1 -0
  250. package/dist/esm/components/editor/AssetBrowser/useAssetDnd.js +192 -0
  251. package/dist/esm/components/editor/AssetBrowser/useAssetDnd.js.map +1 -0
  252. package/dist/esm/components/editor/AssetBrowser/useAssetGridKeyboardNav.js +91 -0
  253. package/dist/esm/components/editor/AssetBrowser/useAssetGridKeyboardNav.js.map +1 -0
  254. package/dist/esm/components/editor/AssetBrowser/useAssetGridVirtualizer.js +91 -0
  255. package/dist/esm/components/editor/AssetBrowser/useAssetGridVirtualizer.js.map +1 -0
  256. package/dist/esm/components/editor/AssetBrowser/useAssetMarqueeGesture.js +128 -0
  257. package/dist/esm/components/editor/AssetBrowser/useAssetMarqueeGesture.js.map +1 -0
  258. package/dist/esm/components/editor/AssetBrowser/useAssetMutationKeyboard.js +72 -0
  259. package/dist/esm/components/editor/AssetBrowser/useAssetMutationKeyboard.js.map +1 -0
  260. package/dist/esm/components/editor/AssetBrowser/useAssetMutations.js +141 -0
  261. package/dist/esm/components/editor/AssetBrowser/useAssetMutations.js.map +1 -0
  262. package/dist/esm/components/editor/AssetBrowser/useAssetNavigation.js +113 -0
  263. package/dist/esm/components/editor/AssetBrowser/useAssetNavigation.js.map +1 -0
  264. package/dist/esm/components/editor/AssetBrowser/useAssetSelectionController.js +174 -0
  265. package/dist/esm/components/editor/AssetBrowser/useAssetSelectionController.js.map +1 -0
  266. package/dist/esm/components/editor/ChatPanel/ChatActionBar.js.map +1 -1
  267. package/dist/esm/components/editor/ChatPanel/ChatAttachment.js +8 -2
  268. package/dist/esm/components/editor/ChatPanel/ChatAttachment.js.map +1 -1
  269. package/dist/esm/components/editor/ChatPanel/ChatBubble.js.map +1 -1
  270. package/dist/esm/components/editor/ChatPanel/ChatCodeBlock.js +20 -4
  271. package/dist/esm/components/editor/ChatPanel/ChatCodeBlock.js.map +1 -1
  272. package/dist/esm/components/editor/ChatPanel/ChatContextChip.js +1 -1
  273. package/dist/esm/components/editor/ChatPanel/ChatContextChip.js.map +1 -1
  274. package/dist/esm/components/editor/ChatPanel/ChatEmptyState.js +3 -1
  275. package/dist/esm/components/editor/ChatPanel/ChatEmptyState.js.map +1 -1
  276. package/dist/esm/components/editor/ChatPanel/ChatIcons.js.map +1 -1
  277. package/dist/esm/components/editor/ChatPanel/ChatInput.js +10 -3
  278. package/dist/esm/components/editor/ChatPanel/ChatInput.js.map +1 -1
  279. package/dist/esm/components/editor/ChatPanel/ChatInputToolbar.js.map +1 -1
  280. package/dist/esm/components/editor/ChatPanel/ChatMarkdownRenderer.js +1 -1
  281. package/dist/esm/components/editor/ChatPanel/ChatMarkdownRenderer.js.map +1 -1
  282. package/dist/esm/components/editor/ChatPanel/ChatMessage.js +10 -3
  283. package/dist/esm/components/editor/ChatPanel/ChatMessage.js.map +1 -1
  284. package/dist/esm/components/editor/ChatPanel/ChatMessageList.js +5 -3
  285. package/dist/esm/components/editor/ChatPanel/ChatMessageList.js.map +1 -1
  286. package/dist/esm/components/editor/ChatPanel/ChatPanel.js.map +1 -1
  287. package/dist/esm/components/editor/ChatPanel/ChatToolCall.js +1 -1
  288. package/dist/esm/components/editor/ChatPanel/ChatToolCall.js.map +1 -1
  289. package/dist/esm/components/editor/ChatPanel/ChatTypingIndicator.js.map +1 -1
  290. package/dist/esm/components/editor/ChatPanel/useChatInput.js.map +1 -1
  291. package/dist/esm/components/editor/ChatPanel/useChatMessages.js +7 -4
  292. package/dist/esm/components/editor/ChatPanel/useChatMessages.js.map +1 -1
  293. package/dist/esm/components/editor/ChatPanel/useChatScroll.js +6 -1
  294. package/dist/esm/components/editor/ChatPanel/useChatScroll.js.map +1 -1
  295. package/dist/esm/components/editor/Minimap/Minimap.css.js +18 -0
  296. package/dist/esm/components/editor/Minimap/Minimap.css.js.map +1 -0
  297. package/dist/esm/components/editor/Minimap/Minimap.js +257 -0
  298. package/dist/esm/components/editor/Minimap/Minimap.js.map +1 -0
  299. package/dist/esm/components/editor/Minimap/Minimap.types.js +11 -0
  300. package/dist/esm/components/editor/Minimap/Minimap.types.js.map +1 -0
  301. package/dist/esm/components/editor/Minimap/MinimapContext.js +48 -0
  302. package/dist/esm/components/editor/Minimap/MinimapContext.js.map +1 -0
  303. package/dist/esm/components/editor/Minimap/MinimapCorner.js +16 -0
  304. package/dist/esm/components/editor/Minimap/MinimapCorner.js.map +1 -0
  305. package/dist/esm/components/editor/Minimap/MinimapFooter.js +16 -0
  306. package/dist/esm/components/editor/Minimap/MinimapFooter.js.map +1 -0
  307. package/dist/esm/components/editor/Minimap/MinimapStore.js +166 -0
  308. package/dist/esm/components/editor/Minimap/MinimapStore.js.map +1 -0
  309. package/dist/esm/components/editor/Minimap/MinimapTitle.js +16 -0
  310. package/dist/esm/components/editor/Minimap/MinimapTitle.js.map +1 -0
  311. package/dist/esm/components/editor/Minimap/ViewportMinimap.js +69 -0
  312. package/dist/esm/components/editor/Minimap/ViewportMinimap.js.map +1 -0
  313. package/dist/esm/components/editor/Minimap/computeBoundsFromItems.js +65 -0
  314. package/dist/esm/components/editor/Minimap/computeBoundsFromItems.js.map +1 -0
  315. package/dist/esm/components/editor/Minimap/index.js +15 -0
  316. package/dist/esm/components/editor/Minimap/index.js.map +1 -0
  317. package/dist/esm/components/editor/Minimap/minimapCoords.js +105 -0
  318. package/dist/esm/components/editor/Minimap/minimapCoords.js.map +1 -0
  319. package/dist/esm/components/editor/Minimap/minimapDrawing.js +93 -0
  320. package/dist/esm/components/editor/Minimap/minimapDrawing.js.map +1 -0
  321. package/dist/esm/components/editor/Minimap/minimapHitTest.js +59 -0
  322. package/dist/esm/components/editor/Minimap/minimapHitTest.js.map +1 -0
  323. package/dist/esm/components/editor/Minimap/useMinimapGestures.js +299 -0
  324. package/dist/esm/components/editor/Minimap/useMinimapGestures.js.map +1 -0
  325. package/dist/esm/components/editor/NodeGraph/NodeGraph.css.js +36 -0
  326. package/dist/esm/components/editor/NodeGraph/NodeGraph.css.js.map +1 -0
  327. package/dist/esm/components/editor/NodeGraph/NodeGraph.js +627 -0
  328. package/dist/esm/components/editor/NodeGraph/NodeGraph.js.map +1 -0
  329. package/dist/esm/components/editor/NodeGraph/NodeGraph.types.js +10 -0
  330. package/dist/esm/components/editor/NodeGraph/NodeGraph.types.js.map +1 -0
  331. package/dist/esm/components/editor/NodeGraph/NodeGraphContext.js +54 -0
  332. package/dist/esm/components/editor/NodeGraph/NodeGraphContext.js.map +1 -0
  333. package/dist/esm/components/editor/NodeGraph/NodeGraphEdgeLabels.js +137 -0
  334. package/dist/esm/components/editor/NodeGraph/NodeGraphEdgeLabels.js.map +1 -0
  335. package/dist/esm/components/editor/NodeGraph/NodeGraphGroup.js +211 -0
  336. package/dist/esm/components/editor/NodeGraph/NodeGraphGroup.js.map +1 -0
  337. package/dist/esm/components/editor/NodeGraph/NodeGraphMinimap.js +122 -0
  338. package/dist/esm/components/editor/NodeGraph/NodeGraphMinimap.js.map +1 -0
  339. package/dist/esm/components/editor/NodeGraph/NodeGraphNode.js +170 -0
  340. package/dist/esm/components/editor/NodeGraph/NodeGraphNode.js.map +1 -0
  341. package/dist/esm/components/editor/NodeGraph/NodeGraphNodeContext.js +21 -0
  342. package/dist/esm/components/editor/NodeGraph/NodeGraphNodeContext.js.map +1 -0
  343. package/dist/esm/components/editor/NodeGraph/NodeGraphNodeParts.js +56 -0
  344. package/dist/esm/components/editor/NodeGraph/NodeGraphNodeParts.js.map +1 -0
  345. package/dist/esm/components/editor/NodeGraph/NodeGraphNodeSection.js +59 -0
  346. package/dist/esm/components/editor/NodeGraph/NodeGraphNodeSection.js.map +1 -0
  347. package/dist/esm/components/editor/NodeGraph/NodeGraphNodeSectionContext.js +17 -0
  348. package/dist/esm/components/editor/NodeGraph/NodeGraphNodeSectionContext.js.map +1 -0
  349. package/dist/esm/components/editor/NodeGraph/NodeGraphPin.js +35 -0
  350. package/dist/esm/components/editor/NodeGraph/NodeGraphPin.js.map +1 -0
  351. package/dist/esm/components/editor/NodeGraph/NodeGraphPort.js +191 -0
  352. package/dist/esm/components/editor/NodeGraph/NodeGraphPort.js.map +1 -0
  353. package/dist/esm/components/editor/NodeGraph/NodeGraphPortVisual.js +46 -0
  354. package/dist/esm/components/editor/NodeGraph/NodeGraphPortVisual.js.map +1 -0
  355. package/dist/esm/components/editor/NodeGraph/NodeGraphSlots.js +50 -0
  356. package/dist/esm/components/editor/NodeGraph/NodeGraphSlots.js.map +1 -0
  357. package/dist/esm/components/editor/NodeGraph/NodeGraphSpawnPalette.js +70 -0
  358. package/dist/esm/components/editor/NodeGraph/NodeGraphSpawnPalette.js.map +1 -0
  359. package/dist/esm/components/editor/NodeGraph/NodeGraphStore.js +543 -0
  360. package/dist/esm/components/editor/NodeGraph/NodeGraphStore.js.map +1 -0
  361. package/dist/esm/components/editor/NodeGraph/NodeGraphToolbar.js +100 -0
  362. package/dist/esm/components/editor/NodeGraph/NodeGraphToolbar.js.map +1 -0
  363. package/dist/esm/components/editor/NodeGraph/createTypeMatchValidator.js +37 -0
  364. package/dist/esm/components/editor/NodeGraph/createTypeMatchValidator.js.map +1 -0
  365. package/dist/esm/components/editor/NodeGraph/nodeGraphActions.js +53 -0
  366. package/dist/esm/components/editor/NodeGraph/nodeGraphActions.js.map +1 -0
  367. package/dist/esm/components/editor/NodeGraph/nodeGraphDrawing.js +461 -0
  368. package/dist/esm/components/editor/NodeGraph/nodeGraphDrawing.js.map +1 -0
  369. package/dist/esm/components/editor/NodeGraph/nodeGraphIds.js +31 -0
  370. package/dist/esm/components/editor/NodeGraph/nodeGraphIds.js.map +1 -0
  371. package/dist/esm/components/editor/NodeGraph/nodeGraphMath.js +350 -0
  372. package/dist/esm/components/editor/NodeGraph/nodeGraphMath.js.map +1 -0
  373. package/dist/esm/components/editor/NodeGraph/sortSlots.js +69 -0
  374. package/dist/esm/components/editor/NodeGraph/sortSlots.js.map +1 -0
  375. package/dist/esm/components/editor/NodeGraph/useDragGesture.js +63 -0
  376. package/dist/esm/components/editor/NodeGraph/useDragGesture.js.map +1 -0
  377. package/dist/esm/components/editor/NodeGraph/useNodeGraph.js +207 -0
  378. package/dist/esm/components/editor/NodeGraph/useNodeGraph.js.map +1 -0
  379. package/dist/esm/components/editor/NodeGraph/useNodeGraphConnection.js +334 -0
  380. package/dist/esm/components/editor/NodeGraph/useNodeGraphConnection.js.map +1 -0
  381. package/dist/esm/components/editor/NodeGraph/useNodeGraphEdgeInteraction.js +137 -0
  382. package/dist/esm/components/editor/NodeGraph/useNodeGraphEdgeInteraction.js.map +1 -0
  383. package/dist/esm/components/editor/NodeGraph/useNodeGraphGroupDrag.js +392 -0
  384. package/dist/esm/components/editor/NodeGraph/useNodeGraphGroupDrag.js.map +1 -0
  385. package/dist/esm/components/editor/NodeGraph/useNodeGraphKeyboard.js +164 -0
  386. package/dist/esm/components/editor/NodeGraph/useNodeGraphKeyboard.js.map +1 -0
  387. package/dist/esm/components/editor/NodeGraph/useNodeGraphNodeDrag.js +234 -0
  388. package/dist/esm/components/editor/NodeGraph/useNodeGraphNodeDrag.js.map +1 -0
  389. package/dist/esm/components/editor/NodeGraph/useStoreSlice.js +49 -0
  390. package/dist/esm/components/editor/NodeGraph/useStoreSlice.js.map +1 -0
  391. package/dist/esm/components/editor/PropertyInspector/PropertyGroup.js +1 -1
  392. package/dist/esm/components/editor/PropertyInspector/PropertyGroup.js.map +1 -1
  393. package/dist/esm/components/editor/PropertyInspector/PropertyPanel.css.js +4 -3
  394. package/dist/esm/components/editor/PropertyInspector/PropertyPanel.css.js.map +1 -1
  395. package/dist/esm/components/editor/PropertyInspector/PropertyPanel.js +12 -7
  396. package/dist/esm/components/editor/PropertyInspector/PropertyPanel.js.map +1 -1
  397. package/dist/esm/components/editor/PropertyInspector/PropertyRow.css.js +7 -6
  398. package/dist/esm/components/editor/PropertyInspector/PropertyRow.css.js.map +1 -1
  399. package/dist/esm/components/editor/PropertyInspector/PropertyRow.js +21 -5
  400. package/dist/esm/components/editor/PropertyInspector/PropertyRow.js.map +1 -1
  401. package/dist/esm/components/editor/PropertyInspector/PropertySection.css.js +11 -10
  402. package/dist/esm/components/editor/PropertyInspector/PropertySection.css.js.map +1 -1
  403. package/dist/esm/components/editor/PropertyInspector/PropertySection.js +32 -11
  404. package/dist/esm/components/editor/PropertyInspector/PropertySection.js.map +1 -1
  405. package/dist/esm/components/editor/PropertyInspector/usePropertyUndo.js.map +1 -1
  406. package/dist/esm/components/editor/Timeline/Timeline.css.js +23 -0
  407. package/dist/esm/components/editor/Timeline/Timeline.css.js.map +1 -0
  408. package/dist/esm/components/editor/Timeline/Timeline.js +450 -0
  409. package/dist/esm/components/editor/Timeline/Timeline.js.map +1 -0
  410. package/dist/esm/components/editor/Timeline/Timeline.types.js +10 -0
  411. package/dist/esm/components/editor/Timeline/Timeline.types.js.map +1 -0
  412. package/dist/esm/components/editor/Timeline/TimelineContext.js +69 -0
  413. package/dist/esm/components/editor/Timeline/TimelineContext.js.map +1 -0
  414. package/dist/esm/components/editor/Timeline/TimelineFooter.js +16 -0
  415. package/dist/esm/components/editor/Timeline/TimelineFooter.js.map +1 -0
  416. package/dist/esm/components/editor/Timeline/TimelineMinimap.js +280 -0
  417. package/dist/esm/components/editor/Timeline/TimelineMinimap.js.map +1 -0
  418. package/dist/esm/components/editor/Timeline/TimelineStore.js +289 -0
  419. package/dist/esm/components/editor/Timeline/TimelineStore.js.map +1 -0
  420. package/dist/esm/components/editor/Timeline/TimelineToolbar.js +15 -0
  421. package/dist/esm/components/editor/Timeline/TimelineToolbar.js.map +1 -0
  422. package/dist/esm/components/editor/Timeline/TimelineTrackHeaders.js +142 -0
  423. package/dist/esm/components/editor/Timeline/TimelineTrackHeaders.js.map +1 -0
  424. package/dist/esm/components/editor/Timeline/TimelineTrackScale.js +18 -0
  425. package/dist/esm/components/editor/Timeline/TimelineTrackScale.js.map +1 -0
  426. package/dist/esm/components/editor/Timeline/index.js +18 -0
  427. package/dist/esm/components/editor/Timeline/index.js.map +1 -0
  428. package/dist/esm/components/editor/Timeline/timelineCoords.js +118 -0
  429. package/dist/esm/components/editor/Timeline/timelineCoords.js.map +1 -0
  430. package/dist/esm/components/editor/Timeline/timelineDrawing.js +390 -0
  431. package/dist/esm/components/editor/Timeline/timelineDrawing.js.map +1 -0
  432. package/dist/esm/components/editor/Timeline/timelineEdits.js +323 -0
  433. package/dist/esm/components/editor/Timeline/timelineEdits.js.map +1 -0
  434. package/dist/esm/components/editor/Timeline/timelineHitTest.js +153 -0
  435. package/dist/esm/components/editor/Timeline/timelineHitTest.js.map +1 -0
  436. package/dist/esm/components/editor/Timeline/timelineLayout.js +39 -0
  437. package/dist/esm/components/editor/Timeline/timelineLayout.js.map +1 -0
  438. package/dist/esm/components/editor/Timeline/timelineSelection.js +0 -0
  439. package/dist/esm/components/editor/Timeline/timelineSelection.js.map +1 -0
  440. package/dist/esm/components/editor/Timeline/useTimelineDraw.js +156 -0
  441. package/dist/esm/components/editor/Timeline/useTimelineDraw.js.map +1 -0
  442. package/dist/esm/components/editor/Timeline/useTimelineGestures.js +587 -0
  443. package/dist/esm/components/editor/Timeline/useTimelineGestures.js.map +1 -0
  444. package/dist/esm/components/editor/Timeline/useTimelinePlayback.js +85 -0
  445. package/dist/esm/components/editor/Timeline/useTimelinePlayback.js.map +1 -0
  446. package/dist/esm/components/editor/TransformControl/TransformControl.js +4 -4
  447. package/dist/esm/components/editor/TransformControl/TransformControl.js.map +1 -1
  448. package/dist/esm/components/editor/ViewportGizmo/ViewportGizmo.js +8 -4
  449. package/dist/esm/components/editor/ViewportGizmo/ViewportGizmo.js.map +1 -1
  450. package/dist/esm/components/editor/ViewportGizmo/gizmoMath.js +6 -2
  451. package/dist/esm/components/editor/ViewportGizmo/gizmoMath.js.map +1 -1
  452. package/dist/esm/components/editor/ViewportGizmo/useGizmoInteraction.js +8 -6
  453. package/dist/esm/components/editor/ViewportGizmo/useGizmoInteraction.js.map +1 -1
  454. package/dist/esm/components/editor/ViewportGizmo/useGizmoRenderer.js +1 -2
  455. package/dist/esm/components/editor/ViewportGizmo/useGizmoRenderer.js.map +1 -1
  456. package/dist/esm/components/feedback/Alert/Alert.js +8 -8
  457. package/dist/esm/components/feedback/Alert/Alert.js.map +1 -1
  458. package/dist/esm/components/feedback/Alert/AlertActions.js.map +1 -1
  459. package/dist/esm/components/feedback/Alert/AlertDescription.js.map +1 -1
  460. package/dist/esm/components/feedback/Alert/AlertTitle.js.map +1 -1
  461. package/dist/esm/components/feedback/CommandPalette/CommandPalette.js +32 -22
  462. package/dist/esm/components/feedback/CommandPalette/CommandPalette.js.map +1 -1
  463. package/dist/esm/components/feedback/CommandPalette/fuzzySearch.js.map +1 -1
  464. package/dist/esm/components/feedback/CommandPalette/useRecentItems.js +3 -1
  465. package/dist/esm/components/feedback/CommandPalette/useRecentItems.js.map +1 -1
  466. package/dist/esm/components/feedback/Dialog/Dialog.js +6 -3
  467. package/dist/esm/components/feedback/Dialog/Dialog.js.map +1 -1
  468. package/dist/esm/components/feedback/Dialog/DialogBody.js.map +1 -1
  469. package/dist/esm/components/feedback/Dialog/DialogClose.js.map +1 -1
  470. package/dist/esm/components/feedback/Dialog/DialogFooter.js.map +1 -1
  471. package/dist/esm/components/feedback/Dialog/DialogHeader.js +1 -1
  472. package/dist/esm/components/feedback/Dialog/DialogHeader.js.map +1 -1
  473. package/dist/esm/components/feedback/Dialog/useDialogAnimation.js +10 -2
  474. package/dist/esm/components/feedback/Dialog/useDialogAnimation.js.map +1 -1
  475. package/dist/esm/components/feedback/Drawer/Drawer.js +4 -1
  476. package/dist/esm/components/feedback/Drawer/Drawer.js.map +1 -1
  477. package/dist/esm/components/feedback/Drawer/useDrawerAnimation.js +4 -0
  478. package/dist/esm/components/feedback/Drawer/useDrawerAnimation.js.map +1 -1
  479. package/dist/esm/components/feedback/EmptyState/EmptyState.js +1 -1
  480. package/dist/esm/components/feedback/EmptyState/EmptyState.js.map +1 -1
  481. package/dist/esm/components/feedback/LogView/LogView.css.js +35 -0
  482. package/dist/esm/components/feedback/LogView/LogView.css.js.map +1 -0
  483. package/dist/esm/components/feedback/LogView/LogView.js +297 -0
  484. package/dist/esm/components/feedback/LogView/LogView.js.map +1 -0
  485. package/dist/esm/components/feedback/LogView/LogViewBody.js +205 -0
  486. package/dist/esm/components/feedback/LogView/LogViewBody.js.map +1 -0
  487. package/dist/esm/components/feedback/LogView/LogViewContext.js +31 -0
  488. package/dist/esm/components/feedback/LogView/LogViewContext.js.map +1 -0
  489. package/dist/esm/components/feedback/LogView/LogViewParts.js +73 -0
  490. package/dist/esm/components/feedback/LogView/LogViewParts.js.map +1 -0
  491. package/dist/esm/components/feedback/LogView/LogViewStore.js +240 -0
  492. package/dist/esm/components/feedback/LogView/LogViewStore.js.map +1 -0
  493. package/dist/esm/components/feedback/LogView/logViewLabels.js +25 -0
  494. package/dist/esm/components/feedback/LogView/logViewLabels.js.map +1 -0
  495. package/dist/esm/components/feedback/LogView/logViewLevels.js +74 -0
  496. package/dist/esm/components/feedback/LogView/logViewLevels.js.map +1 -0
  497. package/dist/esm/components/feedback/LogView/logViewUtils.js +128 -0
  498. package/dist/esm/components/feedback/LogView/logViewUtils.js.map +1 -0
  499. package/dist/esm/components/feedback/LogView/useFollowTail.js +95 -0
  500. package/dist/esm/components/feedback/LogView/useFollowTail.js.map +1 -0
  501. package/dist/esm/components/feedback/LogView/useLogSelection.js +113 -0
  502. package/dist/esm/components/feedback/LogView/useLogSelection.js.map +1 -0
  503. package/dist/esm/components/feedback/ProgressBar/CircularProgress.js +1 -1
  504. package/dist/esm/components/feedback/ProgressBar/CircularProgress.js.map +1 -1
  505. package/dist/esm/components/feedback/ProgressBar/ProgressBar.js +1 -1
  506. package/dist/esm/components/feedback/ProgressBar/ProgressBar.js.map +1 -1
  507. package/dist/esm/components/feedback/Skeleton/Skeleton.js +1 -1
  508. package/dist/esm/components/feedback/Skeleton/Skeleton.js.map +1 -1
  509. package/dist/esm/components/feedback/Skeleton/SkeletonGroup.js +1 -1
  510. package/dist/esm/components/feedback/Skeleton/SkeletonGroup.js.map +1 -1
  511. package/dist/esm/components/feedback/Skeleton/SkeletonLayout.js +1 -1
  512. package/dist/esm/components/feedback/Skeleton/SkeletonLayout.js.map +1 -1
  513. package/dist/esm/components/feedback/Spinner/Spinner.js +1 -1
  514. package/dist/esm/components/feedback/Spinner/Spinner.js.map +1 -1
  515. package/dist/esm/components/feedback/Stat/Stat.js.map +1 -1
  516. package/dist/esm/components/feedback/Toast/ToastContainer.js +1 -1
  517. package/dist/esm/components/feedback/Toast/ToastContainer.js.map +1 -1
  518. package/dist/esm/components/feedback/Toast/ToastItem.js +7 -3
  519. package/dist/esm/components/feedback/Toast/ToastItem.js.map +1 -1
  520. package/dist/esm/components/feedback/Toast/ToastProvider.js.map +1 -1
  521. package/dist/esm/components/feedback/Toast/useToast.js.map +1 -1
  522. package/dist/esm/components/form/FormHelperText.js.map +1 -1
  523. package/dist/esm/components/form/FormLabel.js.map +1 -1
  524. package/dist/esm/components/form/InputWrapper.js.map +1 -1
  525. package/dist/esm/components/layout/Accordion/Accordion.js +1 -1
  526. package/dist/esm/components/layout/Accordion/Accordion.js.map +1 -1
  527. package/dist/esm/components/layout/Accordion/AccordionContent.js +1 -1
  528. package/dist/esm/components/layout/Accordion/AccordionContent.js.map +1 -1
  529. package/dist/esm/components/layout/Accordion/AccordionItem.js +1 -1
  530. package/dist/esm/components/layout/Accordion/AccordionItem.js.map +1 -1
  531. package/dist/esm/components/layout/Accordion/AccordionTrigger.js +7 -2
  532. package/dist/esm/components/layout/Accordion/AccordionTrigger.js.map +1 -1
  533. package/dist/esm/components/layout/Card/Card.js +2 -2
  534. package/dist/esm/components/layout/Card/Card.js.map +1 -1
  535. package/dist/esm/components/layout/Divider/Divider.js.map +1 -1
  536. package/dist/esm/components/layout/Flex/Flex.js +1 -1
  537. package/dist/esm/components/layout/Flex/Flex.js.map +1 -1
  538. package/dist/esm/components/layout/Grid/Grid.js +1 -1
  539. package/dist/esm/components/layout/Grid/Grid.js.map +1 -1
  540. package/dist/esm/components/layout/ListItem/ListItem.js +1 -1
  541. package/dist/esm/components/layout/ListItem/ListItem.js.map +1 -1
  542. package/dist/esm/components/layout/PageHeader/PageHeader.js.map +1 -1
  543. package/dist/esm/components/layout/PanelSurface/PanelSurface.js +3 -3
  544. package/dist/esm/components/layout/PanelSurface/PanelSurface.js.map +1 -1
  545. package/dist/esm/components/layout/ScrollArea/ScrollArea.js +91 -23
  546. package/dist/esm/components/layout/ScrollArea/ScrollArea.js.map +1 -1
  547. package/dist/esm/components/layout/Spacer/Spacer.js.map +1 -1
  548. package/dist/esm/components/layout/SplitPane/SplitPane.js +29 -16
  549. package/dist/esm/components/layout/SplitPane/SplitPane.js.map +1 -1
  550. package/dist/esm/components/layout/SplitPane/SplitPanePanel.js.map +1 -1
  551. package/dist/esm/components/layout/Stack/Stack.js +1 -1
  552. package/dist/esm/components/layout/Stack/Stack.js.map +1 -1
  553. package/dist/esm/components/navigation/Breadcrumbs/BreadcrumbEllipsis.js +4 -0
  554. package/dist/esm/components/navigation/Breadcrumbs/BreadcrumbEllipsis.js.map +1 -1
  555. package/dist/esm/components/navigation/Breadcrumbs/BreadcrumbItem.js +6 -2
  556. package/dist/esm/components/navigation/Breadcrumbs/BreadcrumbItem.js.map +1 -1
  557. package/dist/esm/components/navigation/Breadcrumbs/BreadcrumbSeparator.js.map +1 -1
  558. package/dist/esm/components/navigation/Breadcrumbs/Breadcrumbs.js +13 -2
  559. package/dist/esm/components/navigation/Breadcrumbs/Breadcrumbs.js.map +1 -1
  560. package/dist/esm/components/navigation/ContextMenu/ContextMenu.js +45 -39
  561. package/dist/esm/components/navigation/ContextMenu/ContextMenu.js.map +1 -1
  562. package/dist/esm/components/navigation/Menu/Menu.css.js +9 -12
  563. package/dist/esm/components/navigation/Menu/Menu.css.js.map +1 -1
  564. package/dist/esm/components/navigation/Menu/Menu.js +97 -63
  565. package/dist/esm/components/navigation/Menu/Menu.js.map +1 -1
  566. package/dist/esm/components/navigation/Menu/MenuGapContext.js +19 -0
  567. package/dist/esm/components/navigation/Menu/MenuGapContext.js.map +1 -0
  568. package/dist/esm/components/navigation/Pagination/Pagination.js.map +1 -1
  569. package/dist/esm/components/navigation/Pagination/usePagination.js.map +1 -1
  570. package/dist/esm/components/navigation/PathBar/PathBar.css.js +6 -0
  571. package/dist/esm/components/navigation/PathBar/PathBar.css.js.map +1 -0
  572. package/dist/esm/components/navigation/PathBar/PathBar.js +184 -0
  573. package/dist/esm/components/navigation/PathBar/PathBar.js.map +1 -0
  574. package/dist/esm/components/navigation/PathBar/PathBarSiblingMenu.js +151 -0
  575. package/dist/esm/components/navigation/PathBar/PathBarSiblingMenu.js.map +1 -0
  576. package/dist/esm/components/navigation/PathBar/pathUtils.js +118 -0
  577. package/dist/esm/components/navigation/PathBar/pathUtils.js.map +1 -0
  578. package/dist/esm/components/navigation/SegmentedControl/SegmentedControl.js +16 -6
  579. package/dist/esm/components/navigation/SegmentedControl/SegmentedControl.js.map +1 -1
  580. package/dist/esm/components/navigation/SegmentedControl/SegmentedControlItem.js +1 -1
  581. package/dist/esm/components/navigation/SegmentedControl/SegmentedControlItem.js.map +1 -1
  582. package/dist/esm/components/navigation/Tabs/Tab.js +10 -3
  583. package/dist/esm/components/navigation/Tabs/Tab.js.map +1 -1
  584. package/dist/esm/components/navigation/Tabs/TabList.js +5 -2
  585. package/dist/esm/components/navigation/Tabs/TabList.js.map +1 -1
  586. package/dist/esm/components/navigation/Tabs/TabPanel.js +1 -1
  587. package/dist/esm/components/navigation/Tabs/TabPanel.js.map +1 -1
  588. package/dist/esm/components/navigation/Tabs/Tabs.js.map +1 -1
  589. package/dist/esm/components/primitives/Avatar/Avatar.js +11 -4
  590. package/dist/esm/components/primitives/Avatar/Avatar.js.map +1 -1
  591. package/dist/esm/components/primitives/Avatar/AvatarGroup.js +2 -2
  592. package/dist/esm/components/primitives/Avatar/AvatarGroup.js.map +1 -1
  593. package/dist/esm/components/primitives/Badge/Badge.js +10 -3
  594. package/dist/esm/components/primitives/Badge/Badge.js.map +1 -1
  595. package/dist/esm/components/primitives/Button/Button.js.map +1 -1
  596. package/dist/esm/components/primitives/Checkbox/Checkbox.js +6 -4
  597. package/dist/esm/components/primitives/Checkbox/Checkbox.js.map +1 -1
  598. package/dist/esm/components/primitives/Checkbox/CheckboxGroup.js +2 -2
  599. package/dist/esm/components/primitives/Checkbox/CheckboxGroup.js.map +1 -1
  600. package/dist/esm/components/primitives/Code/Code.js.map +1 -1
  601. package/dist/esm/components/primitives/Collapsible/Collapsible.js +2 -2
  602. package/dist/esm/components/primitives/Collapsible/Collapsible.js.map +1 -1
  603. package/dist/esm/components/primitives/HoverCard/HoverCard.js +5 -3
  604. package/dist/esm/components/primitives/HoverCard/HoverCard.js.map +1 -1
  605. package/dist/esm/components/primitives/Icon/Icon.js +1 -1
  606. package/dist/esm/components/primitives/Icon/Icon.js.map +1 -1
  607. package/dist/esm/components/primitives/IconButton/IconButton.js.map +1 -1
  608. package/dist/esm/components/primitives/Input/Input.js +1 -1
  609. package/dist/esm/components/primitives/Input/Input.js.map +1 -1
  610. package/dist/esm/components/primitives/Kbd/Kbd.js +1 -1
  611. package/dist/esm/components/primitives/Kbd/Kbd.js.map +1 -1
  612. package/dist/esm/components/primitives/Link/Link.js.map +1 -1
  613. package/dist/esm/components/primitives/Paper/Paper.js.map +1 -1
  614. package/dist/esm/components/primitives/Popover/Popover.js +1 -1
  615. package/dist/esm/components/primitives/Popover/Popover.js.map +1 -1
  616. package/dist/esm/components/primitives/Popover/PopoverClose.js +1 -1
  617. package/dist/esm/components/primitives/Popover/PopoverClose.js.map +1 -1
  618. package/dist/esm/components/primitives/Popover/PopoverContent.js +6 -4
  619. package/dist/esm/components/primitives/Popover/PopoverContent.js.map +1 -1
  620. package/dist/esm/components/primitives/Popover/PopoverTrigger.js.map +1 -1
  621. package/dist/esm/components/primitives/Radio/Radio.js +3 -3
  622. package/dist/esm/components/primitives/Radio/Radio.js.map +1 -1
  623. package/dist/esm/components/primitives/Radio/RadioGroup.js +2 -2
  624. package/dist/esm/components/primitives/Radio/RadioGroup.js.map +1 -1
  625. package/dist/esm/components/primitives/Switch/Switch.js +1 -1
  626. package/dist/esm/components/primitives/Switch/Switch.js.map +1 -1
  627. package/dist/esm/components/primitives/Text/Text.js.map +1 -1
  628. package/dist/esm/components/primitives/TextArea/TextArea.js +3 -4
  629. package/dist/esm/components/primitives/TextArea/TextArea.js.map +1 -1
  630. package/dist/esm/components/primitives/Tooltip/Arrow.js +1 -1
  631. package/dist/esm/components/primitives/Tooltip/Arrow.js.map +1 -1
  632. package/dist/esm/components/primitives/Tooltip/Tooltip.js +9 -7
  633. package/dist/esm/components/primitives/Tooltip/Tooltip.js.map +1 -1
  634. package/dist/esm/components/primitives/Tooltip/utils.js +1 -1
  635. package/dist/esm/components/primitives/Tooltip/utils.js.map +1 -1
  636. package/dist/esm/components/primitives/VisuallyHidden/VisuallyHidden.js.map +1 -1
  637. package/dist/esm/components/primitives/canvas/CanvasContainer.js +1 -1
  638. package/dist/esm/components/primitives/canvas/CanvasContainer.js.map +1 -1
  639. package/dist/esm/components/primitives/canvas/canvasCoords.js.map +1 -1
  640. package/dist/esm/components/primitives/canvas/canvasDrawing.js +1 -1
  641. package/dist/esm/components/primitives/canvas/canvasDrawing.js.map +1 -1
  642. package/dist/esm/components/primitives/canvas/canvasTheme.js.map +1 -1
  643. package/dist/esm/components/primitives/canvas/useCanvasRenderer.js +8 -2
  644. package/dist/esm/components/primitives/canvas/useCanvasRenderer.js.map +1 -1
  645. package/dist/esm/components/primitives/viewport/Viewport.css.js +12 -0
  646. package/dist/esm/components/primitives/viewport/Viewport.css.js.map +1 -0
  647. package/dist/esm/components/primitives/viewport/Viewport.js +189 -0
  648. package/dist/esm/components/primitives/viewport/Viewport.js.map +1 -0
  649. package/dist/esm/components/primitives/viewport/ViewportContext.js +47 -0
  650. package/dist/esm/components/primitives/viewport/ViewportContext.js.map +1 -0
  651. package/dist/esm/components/primitives/viewport/ViewportLayer.js +113 -0
  652. package/dist/esm/components/primitives/viewport/ViewportLayer.js.map +1 -0
  653. package/dist/esm/components/primitives/viewport/ViewportOverlay.js +47 -0
  654. package/dist/esm/components/primitives/viewport/ViewportOverlay.js.map +1 -0
  655. package/dist/esm/components/primitives/viewport/ViewportStore.js +210 -0
  656. package/dist/esm/components/primitives/viewport/ViewportStore.js.map +1 -0
  657. package/dist/esm/components/primitives/viewport/ViewportWorld.js +38 -0
  658. package/dist/esm/components/primitives/viewport/ViewportWorld.js.map +1 -0
  659. package/dist/esm/components/primitives/viewport/useViewportGestures.js +333 -0
  660. package/dist/esm/components/primitives/viewport/useViewportGestures.js.map +1 -0
  661. package/dist/esm/components/primitives/viewport/viewportCoords.js +37 -0
  662. package/dist/esm/components/primitives/viewport/viewportCoords.js.map +1 -0
  663. package/dist/esm/components/primitives/viewport/viewportMath.js +77 -0
  664. package/dist/esm/components/primitives/viewport/viewportMath.js.map +1 -0
  665. package/dist/esm/components/shell/AppShell/AppShell.js +1 -1
  666. package/dist/esm/components/shell/AppShell/AppShell.js.map +1 -1
  667. package/dist/esm/components/shell/FloatingPanel/FloatingPanel.css.js +11 -10
  668. package/dist/esm/components/shell/FloatingPanel/FloatingPanel.css.js.map +1 -1
  669. package/dist/esm/components/shell/FloatingPanel/FloatingPanel.js +60 -24
  670. package/dist/esm/components/shell/FloatingPanel/FloatingPanel.js.map +1 -1
  671. package/dist/esm/components/shell/MenuBar/MenuBar.js +23 -16
  672. package/dist/esm/components/shell/MenuBar/MenuBar.js.map +1 -1
  673. package/dist/esm/components/shell/StatusBar/StatusBar.js.map +1 -1
  674. package/dist/esm/components/shell/Toolbar/Toolbar.js +4 -3
  675. package/dist/esm/components/shell/Toolbar/Toolbar.js.map +1 -1
  676. package/dist/esm/context/KeyboardContext.js.map +1 -1
  677. package/dist/esm/hooks/useBreakpoint/useBreakpoint.js +1 -1
  678. package/dist/esm/hooks/useBreakpoint/useBreakpoint.js.map +1 -1
  679. package/dist/esm/hooks/useClickOutside/useClickOutside.js +9 -9
  680. package/dist/esm/hooks/useClickOutside/useClickOutside.js.map +1 -1
  681. package/dist/esm/hooks/useClipboard/useClipboard.js +4 -0
  682. package/dist/esm/hooks/useClipboard/useClipboard.js.map +1 -1
  683. package/dist/esm/hooks/useControlledState/useControlledState.js.map +1 -1
  684. package/dist/esm/hooks/useDebounced/useDebouncedCallback.js +11 -6
  685. package/dist/esm/hooks/useDebounced/useDebouncedCallback.js.map +1 -1
  686. package/dist/esm/hooks/useDebounced/useDebouncedValue.js +16 -4
  687. package/dist/esm/hooks/useDebounced/useDebouncedValue.js.map +1 -1
  688. package/dist/esm/hooks/useDisclosure/useDisclosure.js.map +1 -1
  689. package/dist/esm/hooks/useEventCallback/useEventCallback.js +49 -0
  690. package/dist/esm/hooks/useEventCallback/useEventCallback.js.map +1 -0
  691. package/dist/esm/hooks/useFocusTrap/useFocusTrap.js.map +1 -1
  692. package/dist/esm/hooks/useHotkey/useHotkey.js +7 -12
  693. package/dist/esm/hooks/useHotkey/useHotkey.js.map +1 -1
  694. package/dist/esm/hooks/useIntersectionObserver/useIntersectionObserver.js +2 -0
  695. package/dist/esm/hooks/useIntersectionObserver/useIntersectionObserver.js.map +1 -1
  696. package/dist/esm/hooks/useIsMounted/useIsMounted.js +43 -0
  697. package/dist/esm/hooks/useIsMounted/useIsMounted.js.map +1 -0
  698. package/dist/esm/hooks/useKeyboard/useKeyboard.js.map +1 -1
  699. package/dist/esm/hooks/useKeyboard/utils.js.map +1 -1
  700. package/dist/esm/hooks/useLatest/useLatest.js +31 -0
  701. package/dist/esm/hooks/useLatest/useLatest.js.map +1 -0
  702. package/dist/esm/hooks/useListboxNav/useListboxNav.js +29 -13
  703. package/dist/esm/hooks/useListboxNav/useListboxNav.js.map +1 -1
  704. package/dist/esm/hooks/useMediaQuery/useMediaQuery.js +7 -1
  705. package/dist/esm/hooks/useMediaQuery/useMediaQuery.js.map +1 -1
  706. package/dist/esm/hooks/useMergedRef/useMergedRef.js +6 -1
  707. package/dist/esm/hooks/useMergedRef/useMergedRef.js.map +1 -1
  708. package/dist/esm/hooks/useNavigationHistory/useNavigationHistory.js +146 -0
  709. package/dist/esm/hooks/useNavigationHistory/useNavigationHistory.js.map +1 -0
  710. package/dist/esm/hooks/useResizeObserver/useResizeObserver.js +6 -8
  711. package/dist/esm/hooks/useResizeObserver/useResizeObserver.js.map +1 -1
  712. package/dist/esm/hooks/useTheme/useTheme.js +6 -3
  713. package/dist/esm/hooks/useTheme/useTheme.js.map +1 -1
  714. package/dist/esm/hooks/useThrottledCallback/useThrottledCallback.js +9 -4
  715. package/dist/esm/hooks/useThrottledCallback/useThrottledCallback.js.map +1 -1
  716. package/dist/esm/index.js +63 -4
  717. package/dist/esm/index.js.map +1 -1
  718. package/dist/esm/node_modules/tslib/tslib.es6.js +37 -0
  719. package/dist/esm/node_modules/tslib/tslib.es6.js.map +1 -0
  720. package/dist/esm/styles.js +3 -0
  721. package/dist/esm/styles.js.map +1 -0
  722. package/dist/esm/theme/ThemeProvider.js +6 -4
  723. package/dist/esm/theme/ThemeProvider.js.map +1 -1
  724. package/dist/esm/theme/VanillaThemeProvider.js.map +1 -1
  725. package/dist/esm/theme/breakpoints.js.map +1 -1
  726. package/dist/esm/theme/contract.css.js +1 -1
  727. package/dist/esm/theme/createCustomTheme.js +2 -2
  728. package/dist/esm/theme/createCustomTheme.js.map +1 -1
  729. package/dist/esm/theme/createLightTheme.js.map +1 -1
  730. package/dist/esm/theme/darkTheme.css.js +2 -2
  731. package/dist/esm/theme/darkThemeValues.js +1 -1
  732. package/dist/esm/theme/darkThemeValues.js.map +1 -1
  733. package/dist/esm/theme/lightTheme.css.js +1 -1
  734. package/dist/esm/theme/lightThemeValues.js +1 -1
  735. package/dist/esm/theme/lightThemeValues.js.map +1 -1
  736. package/dist/esm/theme/themeContractData.js +4 -4
  737. package/dist/esm/theme/themeContractData.js.map +1 -1
  738. package/dist/esm/utils/cx.js.map +1 -1
  739. package/dist/esm/utils/devWarn.js +1 -1
  740. package/dist/esm/utils/devWarn.js.map +1 -1
  741. package/dist/esm/utils/mathExpression.js +1 -1
  742. package/dist/esm/utils/mathExpression.js.map +1 -1
  743. package/dist/esm/utils/mathUtils.js.map +1 -1
  744. package/dist/esm/utils/objects.js.map +1 -1
  745. package/dist/esm/utils/platform.js.map +1 -1
  746. package/dist/tokens/tokens.dark.css +1 -1
  747. package/dist/tokens/tokens.json +1 -1
  748. package/dist/tokens/tokens.light.css +1 -1
  749. package/dist/types/components/Icons/AddIcon.d.ts +1 -1
  750. package/dist/types/components/Icons/AiChatIcon.d.ts +1 -1
  751. package/dist/types/components/Icons/AiSparklesIcon.d.ts +1 -1
  752. package/dist/types/components/Icons/ArchiveIcon.d.ts +1 -1
  753. package/dist/types/components/Icons/ArrowDownIcon.d.ts +1 -1
  754. package/dist/types/components/Icons/ArrowLeftIcon.d.ts +1 -1
  755. package/dist/types/components/Icons/ArrowRightIcon.d.ts +1 -1
  756. package/dist/types/components/Icons/ArrowUpIcon.d.ts +1 -1
  757. package/dist/types/components/Icons/BookmarkIcon.d.ts +1 -1
  758. package/dist/types/components/Icons/BugIcon.d.ts +1 -1
  759. package/dist/types/components/Icons/BuildingIcon.d.ts +1 -1
  760. package/dist/types/components/Icons/CalendarIcon.d.ts +1 -1
  761. package/dist/types/components/Icons/CameraIcon.d.ts +34 -0
  762. package/dist/types/components/Icons/CheckIcon.d.ts +1 -1
  763. package/dist/types/components/Icons/ChevronDownIcon.d.ts +1 -1
  764. package/dist/types/components/Icons/ChevronLeftIcon.d.ts +1 -1
  765. package/dist/types/components/Icons/ChevronRightIcon.d.ts +1 -1
  766. package/dist/types/components/Icons/ChevronUpIcon.d.ts +1 -1
  767. package/dist/types/components/Icons/CircleIcon.d.ts +1 -1
  768. package/dist/types/components/Icons/ClockIcon.d.ts +1 -1
  769. package/dist/types/components/Icons/CloseIcon.d.ts +1 -1
  770. package/dist/types/components/Icons/CloudUploadIcon.d.ts +1 -1
  771. package/dist/types/components/Icons/CodeIcon.d.ts +1 -1
  772. package/dist/types/components/Icons/CopyIcon.d.ts +1 -1
  773. package/dist/types/components/Icons/CubeIcon.d.ts +34 -0
  774. package/dist/types/components/Icons/CutIcon.d.ts +1 -1
  775. package/dist/types/components/Icons/DotsHorizontalIcon.d.ts +1 -1
  776. package/dist/types/components/Icons/DotsVerticalIcon.d.ts +1 -1
  777. package/dist/types/components/Icons/DownloadIcon.d.ts +1 -1
  778. package/dist/types/components/Icons/EditIcon.d.ts +1 -1
  779. package/dist/types/components/Icons/ErrorIcon.d.ts +1 -1
  780. package/dist/types/components/Icons/ExternalLinkIcon.d.ts +1 -1
  781. package/dist/types/components/Icons/EyeDropperIcon.d.ts +1 -1
  782. package/dist/types/components/Icons/EyeIcon.d.ts +1 -1
  783. package/dist/types/components/Icons/FileTextIcon.d.ts +1 -1
  784. package/dist/types/components/Icons/FilterIcon.d.ts +1 -1
  785. package/dist/types/components/Icons/FirstIcon.d.ts +1 -1
  786. package/dist/types/components/Icons/FolderCogIcon.d.ts +1 -1
  787. package/dist/types/components/Icons/FolderIcon.d.ts +1 -1
  788. package/dist/types/components/Icons/FolderOpenIcon.d.ts +1 -1
  789. package/dist/types/components/Icons/FullscreenIcon.d.ts +1 -1
  790. package/dist/types/components/Icons/GitBranchIcon.d.ts +1 -1
  791. package/dist/types/components/Icons/GridIcon.d.ts +1 -1
  792. package/dist/types/components/Icons/HeartIcon.d.ts +1 -1
  793. package/dist/types/components/Icons/HelpIcon.d.ts +1 -1
  794. package/dist/types/components/Icons/HomeIcon.d.ts +1 -1
  795. package/dist/types/components/Icons/ImageIcon.d.ts +34 -0
  796. package/dist/types/components/Icons/InfoIcon.d.ts +1 -1
  797. package/dist/types/components/Icons/LastIcon.d.ts +1 -1
  798. package/dist/types/components/Icons/LinkIcon.d.ts +1 -1
  799. package/dist/types/components/Icons/ListIcon.d.ts +1 -1
  800. package/dist/types/components/Icons/LockIcon.d.ts +1 -1
  801. package/dist/types/components/Icons/MaximizeIcon.d.ts +1 -1
  802. package/dist/types/components/Icons/MenuIcon.d.ts +1 -1
  803. package/dist/types/components/Icons/MinimizeIcon.d.ts +1 -1
  804. package/dist/types/components/Icons/MinusIcon.d.ts +1 -1
  805. package/dist/types/components/Icons/OrbitIcon.d.ts +34 -0
  806. package/dist/types/components/Icons/PasteIcon.d.ts +1 -1
  807. package/dist/types/components/Icons/PauseIcon.d.ts +1 -1
  808. package/dist/types/components/Icons/PinIcon.d.ts +1 -1
  809. package/dist/types/components/Icons/PlayIcon.d.ts +1 -1
  810. package/dist/types/components/Icons/RedoIcon.d.ts +1 -1
  811. package/dist/types/components/Icons/RefreshIcon.d.ts +1 -1
  812. package/dist/types/components/Icons/RobotIcon.d.ts +1 -1
  813. package/dist/types/components/Icons/RotateIcon.d.ts +35 -0
  814. package/dist/types/components/Icons/SaveIcon.d.ts +1 -1
  815. package/dist/types/components/Icons/SearchIcon.d.ts +1 -1
  816. package/dist/types/components/Icons/SendIcon.d.ts +1 -1
  817. package/dist/types/components/Icons/SettingsIcon.d.ts +1 -1
  818. package/dist/types/components/Icons/SortIcon.d.ts +1 -1
  819. package/dist/types/components/Icons/SpinIcon.d.ts +35 -0
  820. package/dist/types/components/Icons/StarIcon.d.ts +1 -1
  821. package/dist/types/components/Icons/StopIcon.d.ts +1 -1
  822. package/dist/types/components/Icons/SuccessIcon.d.ts +1 -1
  823. package/dist/types/components/Icons/TagIcon.d.ts +1 -1
  824. package/dist/types/components/Icons/TangentAlignedIcon.d.ts +1 -1
  825. package/dist/types/components/Icons/TangentAutoIcon.d.ts +1 -1
  826. package/dist/types/components/Icons/TangentFreeIcon.d.ts +1 -1
  827. package/dist/types/components/Icons/TangentLinearIcon.d.ts +1 -1
  828. package/dist/types/components/Icons/TangentMirroredIcon.d.ts +1 -1
  829. package/dist/types/components/Icons/TangentStepIcon.d.ts +1 -1
  830. package/dist/types/components/Icons/TerminalIcon.d.ts +1 -1
  831. package/dist/types/components/Icons/TrashIcon.d.ts +1 -1
  832. package/dist/types/components/Icons/UndoIcon.d.ts +1 -1
  833. package/dist/types/components/Icons/UnlinkIcon.d.ts +1 -1
  834. package/dist/types/components/Icons/UnlockIcon.d.ts +1 -1
  835. package/dist/types/components/Icons/UploadIcon.d.ts +1 -1
  836. package/dist/types/components/Icons/UserIcon.d.ts +1 -1
  837. package/dist/types/components/Icons/UsersIcon.d.ts +1 -1
  838. package/dist/types/components/Icons/WarningIcon.d.ts +1 -1
  839. package/dist/types/components/Icons/ZoomFitIcon.d.ts +35 -0
  840. package/dist/types/components/Icons/ZoomInIcon.d.ts +1 -1
  841. package/dist/types/components/Icons/ZoomOutIcon.d.ts +1 -1
  842. package/dist/types/components/controls/CartesianPicker/CartesianPicker.types.d.ts +3 -3
  843. package/dist/types/components/controls/ColorPicker/ColorPicker.types.d.ts +2 -2
  844. package/dist/types/components/controls/ColorPicker/EyeDropper.d.ts +1 -1
  845. package/dist/types/components/controls/Combobox/Combobox.types.d.ts +1 -1
  846. package/dist/types/components/controls/CurveEditor/CurveEditor.types.d.ts +8 -58
  847. package/dist/types/components/controls/CurveEditor/curveUtils.d.ts +2 -1
  848. package/dist/types/components/controls/FileTree/FileTree.d.ts +34 -0
  849. package/dist/types/components/controls/FileTree/FileTree.types.d.ts +133 -0
  850. package/dist/types/components/controls/FileTree/fileTreeIcons.d.ts +29 -0
  851. package/dist/types/components/controls/FileTree/fileTreeLabels.d.ts +19 -0
  852. package/dist/types/components/controls/FileUploader/FileUploader.types.d.ts +2 -2
  853. package/dist/types/components/controls/MultiSelect/MultiSelect.types.d.ts +1 -1
  854. package/dist/types/components/controls/NumberInput/NumberInput.d.ts +2 -2
  855. package/dist/types/components/controls/Select/Select.d.ts +1 -1
  856. package/dist/types/components/controls/Select/Select.types.d.ts +45 -11
  857. package/dist/types/components/controls/Slider/Slider.d.ts +1 -1
  858. package/dist/types/components/controls/TagInput/TagInput.types.d.ts +2 -2
  859. package/dist/types/components/controls/TreeView/TreeView.d.ts +1 -1
  860. package/dist/types/components/controls/TreeView/TreeView.types.d.ts +24 -2
  861. package/dist/types/components/controls/VectorInput/VectorInput.types.d.ts +1 -1
  862. package/dist/types/components/data/DataTable/DataTable.types.d.ts +2 -2
  863. package/dist/types/components/editor/AssetBrowser/AssetBrowser.d.ts +13 -0
  864. package/dist/types/components/editor/AssetBrowser/AssetBrowser.types.d.ts +241 -0
  865. package/dist/types/components/editor/AssetBrowser/assetBrowserLabels.d.ts +70 -0
  866. package/dist/types/components/editor/ChatPanel/ChatMarkdownRenderer.types.d.ts +1 -1
  867. package/dist/types/components/editor/ChatPanel/ChatPanel.types.d.ts +2 -2
  868. package/dist/types/components/editor/Minimap/Minimap.d.ts +26 -0
  869. package/dist/types/components/editor/Minimap/Minimap.types.d.ts +249 -0
  870. package/dist/types/components/editor/Minimap/MinimapContext.d.ts +27 -0
  871. package/dist/types/components/editor/Minimap/MinimapCorner.d.ts +8 -0
  872. package/dist/types/components/editor/Minimap/MinimapFooter.d.ts +8 -0
  873. package/dist/types/components/editor/Minimap/MinimapStore.d.ts +17 -0
  874. package/dist/types/components/editor/Minimap/MinimapTitle.d.ts +8 -0
  875. package/dist/types/components/editor/Minimap/ViewportMinimap.d.ts +52 -0
  876. package/dist/types/components/editor/Minimap/computeBoundsFromItems.d.ts +13 -0
  877. package/dist/types/components/editor/Minimap/index.d.ts +13 -0
  878. package/dist/types/components/editor/NodeGraph/NodeGraph.d.ts +63 -0
  879. package/dist/types/components/editor/NodeGraph/NodeGraph.types.d.ts +568 -0
  880. package/dist/types/components/editor/NodeGraph/NodeGraphContext.d.ts +30 -0
  881. package/dist/types/components/editor/NodeGraph/NodeGraphNodeParts.d.ts +86 -0
  882. package/dist/types/components/editor/NodeGraph/NodeGraphNodeSection.d.ts +47 -0
  883. package/dist/types/components/editor/NodeGraph/NodeGraphPin.d.ts +57 -0
  884. package/dist/types/components/editor/NodeGraph/NodeGraphPort.d.ts +30 -0
  885. package/dist/types/components/editor/NodeGraph/NodeGraphPortVisual.d.ts +46 -0
  886. package/dist/types/components/editor/NodeGraph/NodeGraphSlots.d.ts +16 -0
  887. package/dist/types/components/editor/NodeGraph/NodeGraphStore.d.ts +256 -0
  888. package/dist/types/components/editor/NodeGraph/NodeGraphToolbar.d.ts +54 -0
  889. package/dist/types/components/editor/NodeGraph/createTypeMatchValidator.d.ts +43 -0
  890. package/dist/types/components/editor/NodeGraph/nodeGraphActions.d.ts +39 -0
  891. package/dist/types/components/editor/NodeGraph/nodeGraphIds.d.ts +16 -0
  892. package/dist/types/components/editor/NodeGraph/useNodeGraph.d.ts +103 -0
  893. package/dist/types/components/editor/PropertyInspector/PropertyInspector.types.d.ts +51 -5
  894. package/dist/types/components/editor/Timeline/Timeline.d.ts +18 -0
  895. package/dist/types/components/editor/Timeline/Timeline.types.d.ts +348 -0
  896. package/dist/types/components/editor/Timeline/TimelineContext.d.ts +51 -0
  897. package/dist/types/components/editor/Timeline/TimelineFooter.d.ts +8 -0
  898. package/dist/types/components/editor/Timeline/TimelineMinimap.d.ts +21 -0
  899. package/dist/types/components/editor/Timeline/TimelineStore.d.ts +41 -0
  900. package/dist/types/components/editor/Timeline/TimelineToolbar.d.ts +8 -0
  901. package/dist/types/components/editor/Timeline/TimelineTrackScale.d.ts +8 -0
  902. package/dist/types/components/editor/Timeline/index.d.ts +15 -0
  903. package/dist/types/components/editor/Timeline/timelineCoords.d.ts +7 -0
  904. package/dist/types/components/editor/Timeline/timelineEdits.d.ts +18 -0
  905. package/dist/types/components/editor/TransformControl/TransformControl.types.d.ts +2 -2
  906. package/dist/types/components/editor/ViewportGizmo/ViewportGizmo.types.d.ts +1 -1
  907. package/dist/types/components/feedback/Alert/Alert.d.ts +2 -2
  908. package/dist/types/components/feedback/Alert/Alert.types.d.ts +5 -5
  909. package/dist/types/components/feedback/CommandPalette/CommandPalette.types.d.ts +1 -3
  910. package/dist/types/components/feedback/Dialog/Dialog.types.d.ts +2 -2
  911. package/dist/types/components/feedback/Drawer/Drawer.types.d.ts +1 -1
  912. package/dist/types/components/feedback/EmptyState/EmptyState.types.d.ts +2 -2
  913. package/dist/types/components/feedback/LogView/LogView.d.ts +58 -0
  914. package/dist/types/components/feedback/LogView/LogView.types.d.ts +333 -0
  915. package/dist/types/components/feedback/LogView/LogViewBody.d.ts +15 -0
  916. package/dist/types/components/feedback/LogView/LogViewContext.d.ts +9 -0
  917. package/dist/types/components/feedback/LogView/LogViewParts.d.ts +35 -0
  918. package/dist/types/components/feedback/LogView/LogViewStore.d.ts +4 -0
  919. package/dist/types/components/feedback/LogView/logViewLabels.d.ts +9 -0
  920. package/dist/types/components/feedback/LogView/logViewUtils.d.ts +41 -0
  921. package/dist/types/components/feedback/ProgressBar/ProgressBar.types.d.ts +3 -3
  922. package/dist/types/components/feedback/Skeleton/Skeleton.types.d.ts +4 -4
  923. package/dist/types/components/feedback/Stat/Stat.types.d.ts +2 -2
  924. package/dist/types/components/feedback/Toast/Toast.types.d.ts +1 -1
  925. package/dist/types/components/form/FormHelperText.d.ts +2 -2
  926. package/dist/types/components/form/FormLabel.d.ts +1 -1
  927. package/dist/types/components/form/InputWrapper.d.ts +2 -2
  928. package/dist/types/components/layout/Accordion/Accordion.types.d.ts +2 -2
  929. package/dist/types/components/layout/Card/Card.types.d.ts +6 -6
  930. package/dist/types/components/layout/Divider/Divider.types.d.ts +2 -2
  931. package/dist/types/components/layout/Flex/Flex.d.ts +1 -1
  932. package/dist/types/components/layout/Grid/Grid.d.ts +1 -1
  933. package/dist/types/components/layout/ListItem/ListItem.types.d.ts +2 -2
  934. package/dist/types/components/layout/PageHeader/PageHeader.types.d.ts +1 -1
  935. package/dist/types/components/layout/PanelSurface/PanelSurface.types.d.ts +6 -6
  936. package/dist/types/components/layout/ScrollArea/ScrollArea.types.d.ts +2 -2
  937. package/dist/types/components/layout/Stack/Stack.d.ts +1 -1
  938. package/dist/types/components/navigation/Breadcrumbs/BreadcrumbItem.d.ts +1 -0
  939. package/dist/types/components/navigation/Breadcrumbs/Breadcrumbs.types.d.ts +7 -0
  940. package/dist/types/components/navigation/ContextMenu/ContextMenu.d.ts +18 -3
  941. package/dist/types/components/navigation/ContextMenu/ContextMenu.types.d.ts +55 -63
  942. package/dist/types/components/navigation/Menu/Menu.d.ts +38 -35
  943. package/dist/types/components/navigation/Menu/Menu.types.d.ts +190 -71
  944. package/dist/types/components/navigation/Pagination/Pagination.types.d.ts +1 -1
  945. package/dist/types/components/navigation/PathBar/PathBar.d.ts +31 -0
  946. package/dist/types/components/navigation/PathBar/PathBar.types.d.ts +79 -0
  947. package/dist/types/components/navigation/SegmentedControl/SegmentedControl.types.d.ts +3 -3
  948. package/dist/types/components/navigation/Tabs/Tabs.types.d.ts +2 -2
  949. package/dist/types/components/primitives/Avatar/Avatar.types.d.ts +2 -2
  950. package/dist/types/components/primitives/Badge/Badge.types.d.ts +1 -1
  951. package/dist/types/components/primitives/Button/Button.d.ts +2 -2
  952. package/dist/types/components/primitives/Checkbox/Checkbox.types.d.ts +2 -2
  953. package/dist/types/components/primitives/Code/Code.types.d.ts +1 -1
  954. package/dist/types/components/primitives/Collapsible/Collapsible.types.d.ts +2 -2
  955. package/dist/types/components/primitives/HoverCard/HoverCard.types.d.ts +3 -3
  956. package/dist/types/components/primitives/Icon/Icon.d.ts +2 -2
  957. package/dist/types/components/primitives/IconButton/IconButton.d.ts +1 -1
  958. package/dist/types/components/primitives/Input/Input.d.ts +1 -1
  959. package/dist/types/components/primitives/Kbd/Kbd.types.d.ts +1 -1
  960. package/dist/types/components/primitives/Link/Link.types.d.ts +1 -1
  961. package/dist/types/components/primitives/Popover/Popover.types.d.ts +2 -2
  962. package/dist/types/components/primitives/Radio/Radio.types.d.ts +3 -3
  963. package/dist/types/components/primitives/Switch/Switch.d.ts +1 -1
  964. package/dist/types/components/primitives/TextArea/TextArea.types.d.ts +1 -1
  965. package/dist/types/components/primitives/Tooltip/Tooltip.d.ts +1 -1
  966. package/dist/types/components/primitives/VisuallyHidden/VisuallyHidden.types.d.ts +1 -1
  967. package/dist/types/components/primitives/canvas/canvas.types.d.ts +16 -1
  968. package/dist/types/components/primitives/viewport/Viewport.d.ts +38 -0
  969. package/dist/types/components/primitives/viewport/Viewport.types.d.ts +257 -0
  970. package/dist/types/components/primitives/viewport/ViewportContext.d.ts +23 -0
  971. package/dist/types/components/primitives/viewport/ViewportLayer.d.ts +26 -0
  972. package/dist/types/components/primitives/viewport/ViewportOverlay.d.ts +27 -0
  973. package/dist/types/components/primitives/viewport/ViewportWorld.d.ts +25 -0
  974. package/dist/types/components/primitives/viewport/viewportCoords.d.ts +25 -0
  975. package/dist/types/components/primitives/viewport/viewportMath.d.ts +35 -0
  976. package/dist/types/components/shell/AppShell/AppShell.types.d.ts +2 -2
  977. package/dist/types/components/shell/FloatingPanel/FloatingPanel.types.d.ts +2 -2
  978. package/dist/types/components/shell/MenuBar/MenuBar.types.d.ts +5 -5
  979. package/dist/types/components/shell/StatusBar/StatusBar.types.d.ts +3 -3
  980. package/dist/types/components/shell/Toolbar/Toolbar.types.d.ts +5 -5
  981. package/dist/types/hooks/useDebounced/useDebouncedValue.d.ts +13 -4
  982. package/dist/types/hooks/useEventCallback/useEventCallback.d.ts +32 -0
  983. package/dist/types/hooks/useIsMounted/useIsMounted.d.ts +28 -0
  984. package/dist/types/hooks/useKeyboard/types.d.ts +1 -1
  985. package/dist/types/hooks/useLatest/useLatest.d.ts +23 -0
  986. package/dist/types/hooks/useResizeObserver/useResizeObserver.d.ts +3 -3
  987. package/dist/types/index.d.ts +71 -6
  988. package/dist/types/theme/ThemeProvider.d.ts +5 -3
  989. package/dist/types/theme/contract.css.d.ts +1 -1
  990. package/dist/types/theme/createCustomTheme.d.ts +1 -1
  991. package/dist/types/theme/darkThemeValues.d.ts +1 -1
  992. package/dist/types/theme/lightThemeValues.d.ts +1 -1
  993. package/dist/types/theme/themeContractData.d.ts +4 -4
  994. package/dist/types/theme-values.d.ts +1 -1
  995. package/dist/types/types/keyframe.d.ts +64 -0
  996. package/package.json +34 -18
  997. package/dist/esm/_virtual/_commonjsHelpers.js +0 -6
  998. package/dist/esm/_virtual/_commonjsHelpers.js.map +0 -1
  999. package/dist/esm/_virtual/cjs.js +0 -4
  1000. package/dist/esm/_virtual/cjs.js.map +0 -1
  1001. package/dist/esm/_virtual/cssesc.js +0 -8
  1002. package/dist/esm/_virtual/cssesc.js.map +0 -1
  1003. package/dist/esm/_virtual/picocolors.js +0 -8
  1004. package/dist/esm/_virtual/picocolors.js.map +0 -1
  1005. package/dist/esm/_virtual/picocolors2.js +0 -4
  1006. package/dist/esm/_virtual/picocolors2.js.map +0 -1
  1007. package/dist/esm/assets/src/components/navigation/Menu/Menu.css.ts.vanilla-DD0c5D10.css +0 -67
  1008. package/dist/esm/components/navigation/ContextMenu/useContextMenuTarget.js +0 -53
  1009. package/dist/esm/components/navigation/ContextMenu/useContextMenuTarget.js.map +0 -1
  1010. package/dist/esm/components/navigation/Menu/Menu.helpers.js +0 -53
  1011. package/dist/esm/components/navigation/Menu/Menu.helpers.js.map +0 -1
  1012. package/dist/esm/components/navigation/Menu/useMenu.js +0 -88
  1013. package/dist/esm/components/navigation/Menu/useMenu.js.map +0 -1
  1014. package/dist/esm/node_modules/@emotion/hash/dist/emotion-hash.esm.js +0 -56
  1015. package/dist/esm/node_modules/@emotion/hash/dist/emotion-hash.esm.js.map +0 -1
  1016. package/dist/esm/node_modules/@vanilla-extract/css/adapter/dist/vanilla-extract-css-adapter.esm.js +0 -46
  1017. package/dist/esm/node_modules/@vanilla-extract/css/adapter/dist/vanilla-extract-css-adapter.esm.js.map +0 -1
  1018. package/dist/esm/node_modules/@vanilla-extract/css/dist/taggedTemplateLiteral-10998315.esm.js +0 -13
  1019. package/dist/esm/node_modules/@vanilla-extract/css/dist/taggedTemplateLiteral-10998315.esm.js.map +0 -1
  1020. package/dist/esm/node_modules/@vanilla-extract/css/dist/transformCss-fd0786e1.esm.js +0 -962
  1021. package/dist/esm/node_modules/@vanilla-extract/css/dist/transformCss-fd0786e1.esm.js.map +0 -1
  1022. package/dist/esm/node_modules/@vanilla-extract/css/dist/vanilla-extract-css.esm.js +0 -309
  1023. package/dist/esm/node_modules/@vanilla-extract/css/dist/vanilla-extract-css.esm.js.map +0 -1
  1024. package/dist/esm/node_modules/@vanilla-extract/css/fileScope/dist/vanilla-extract-css-fileScope.esm.js +0 -18
  1025. package/dist/esm/node_modules/@vanilla-extract/css/fileScope/dist/vanilla-extract-css-fileScope.esm.js.map +0 -1
  1026. package/dist/esm/node_modules/@vanilla-extract/css/injectStyles/dist/vanilla-extract-css-injectStyles.esm.js +0 -23
  1027. package/dist/esm/node_modules/@vanilla-extract/css/injectStyles/dist/vanilla-extract-css-injectStyles.esm.js.map +0 -1
  1028. package/dist/esm/node_modules/@vanilla-extract/css/node_modules/lru-cache/dist/esm/index.js +0 -1543
  1029. package/dist/esm/node_modules/@vanilla-extract/css/node_modules/lru-cache/dist/esm/index.js.map +0 -1
  1030. package/dist/esm/node_modules/@vanilla-extract/private/dist/vanilla-extract-private.esm.js +0 -38
  1031. package/dist/esm/node_modules/@vanilla-extract/private/dist/vanilla-extract-private.esm.js.map +0 -1
  1032. package/dist/esm/node_modules/css-what/lib/es/parse.js +0 -424
  1033. package/dist/esm/node_modules/css-what/lib/es/parse.js.map +0 -1
  1034. package/dist/esm/node_modules/css-what/lib/es/types.js +0 -29
  1035. package/dist/esm/node_modules/css-what/lib/es/types.js.map +0 -1
  1036. package/dist/esm/node_modules/cssesc/cssesc.js +0 -120
  1037. package/dist/esm/node_modules/cssesc/cssesc.js.map +0 -1
  1038. package/dist/esm/node_modules/dedent/dist/dedent.js +0 -100
  1039. package/dist/esm/node_modules/dedent/dist/dedent.js.map +0 -1
  1040. package/dist/esm/node_modules/deep-object-diff/mjs/diff.js +0 -40
  1041. package/dist/esm/node_modules/deep-object-diff/mjs/diff.js.map +0 -1
  1042. package/dist/esm/node_modules/deep-object-diff/mjs/utils.js +0 -9
  1043. package/dist/esm/node_modules/deep-object-diff/mjs/utils.js.map +0 -1
  1044. package/dist/esm/node_modules/deepmerge/dist/cjs.js +0 -143
  1045. package/dist/esm/node_modules/deepmerge/dist/cjs.js.map +0 -1
  1046. package/dist/esm/node_modules/media-query-parser/dist/media-query-parser.esm.js +0 -1386
  1047. package/dist/esm/node_modules/media-query-parser/dist/media-query-parser.esm.js.map +0 -1
  1048. package/dist/esm/node_modules/modern-ahocorasick/dist/index.js +0 -102
  1049. package/dist/esm/node_modules/modern-ahocorasick/dist/index.js.map +0 -1
  1050. package/dist/esm/node_modules/picocolors/picocolors.js +0 -87
  1051. package/dist/esm/node_modules/picocolors/picocolors.js.map +0 -1
  1052. package/dist/types/components/navigation/ContextMenu/useContextMenuTarget.d.ts +0 -5
  1053. package/dist/types/components/navigation/Menu/useMenu.d.ts +0 -16
@@ -1,9 +1,7 @@
1
1
  "use client";
2
2
  import { jsxs, jsx } from 'react/jsx-runtime';
3
- import React, { useCallback } from 'react';
4
3
  import { assignInlineVars } from '@vanilla-extract/dynamic';
5
- import { vars } from '../../../theme/contract.css.js';
6
- import { cx } from '../../../utils/cx.js';
4
+ import React, { useCallback } from 'react';
7
5
  import '../../Icons/AddIcon.js';
8
6
  import '../../Icons/AiChatIcon.js';
9
7
  import '../../Icons/AiSparklesIcon.js';
@@ -35,6 +33,7 @@ import '../../Icons/GridIcon.js';
35
33
  import '../../Icons/HeartIcon.js';
36
34
  import '../../Icons/HelpIcon.js';
37
35
  import '../../Icons/HomeIcon.js';
36
+ import '../../Icons/ImageIcon.js';
38
37
  import '../../Icons/InfoIcon.js';
39
38
  import '../../Icons/LastIcon.js';
40
39
  import '../../Icons/LinkIcon.js';
@@ -90,6 +89,14 @@ import '../../Icons/GitBranchIcon.js';
90
89
  import '../../Icons/BugIcon.js';
91
90
  import '../../Icons/MinusIcon.js';
92
91
  import '../../Icons/PinIcon.js';
92
+ import '../../Icons/OrbitIcon.js';
93
+ import '../../Icons/RotateIcon.js';
94
+ import '../../Icons/SpinIcon.js';
95
+ import '../../Icons/CameraIcon.js';
96
+ import '../../Icons/CubeIcon.js';
97
+ import '../../Icons/ZoomFitIcon.js';
98
+ import { vars } from '../../../theme/contract.css.js';
99
+ import { cx } from '../../../utils/cx.js';
93
100
  import { badgeContrastVar, badgeColorVar, badgeDotStyle, badgeIconStyle, badgeRemoveButtonStyle, badgeRecipe } from './Badge.css.js';
94
101
 
95
102
  const NAMED_COLOR_MAP = {
@@ -1 +1 @@
1
- {"version":3,"file":"Badge.js","sources":["../../../../../../src/components/primitives/Badge/Badge.tsx"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiBA;AACE;AACA;AACA;AACA;AACA;AACA;;AAGF;;;;;AAKG;AACH;AAIE;;;;AAKE;;AAEF;AACF;AAEA;AAIA;;;;;;;;;;;;;;AAcG;;AAiBC;AAEA;;AAGI;AACF;;AAKA;AACA;AACD;;;;;AAUM;AA0BT;AAGF;;"}
1
+ {"version":3,"file":"Badge.js","sources":["src/components/primitives/Badge/Badge.tsx"],"sourcesContent":["'use client';\n\nimport { assignInlineVars } from '@vanilla-extract/dynamic';\nimport React, { useCallback } from 'react';\n\nimport { CloseIcon } from '@/components/Icons';\nimport { vars } from '@/theme/contract.css';\nimport { cx } from '@/utils/cx';\n\nimport {\n badgeColorVar,\n badgeContrastVar,\n badgeDotStyle,\n badgeIconStyle,\n badgeRecipe,\n badgeRemoveButtonStyle,\n} from './Badge.css';\n\nimport type { BadgeColor, BadgeProps } from './Badge.types';\n\nconst NAMED_COLOR_MAP: Record<string, string> = {\n neutral: vars.colors.text.muted,\n primary: vars.colors.accent.primary,\n info: vars.colors.accent.primary,\n success: vars.colors.accent.success,\n warning: vars.colors.accent.warning,\n error: vars.colors.accent.error,\n};\n\n/**\n * Resolve a `BadgeColor` to a CSS color value.\n *\n * Named values produce a `var(...)` reference into the theme; everything\n * else is treated as a raw CSS color string (hex, rgb, hsl, …).\n */\nfunction resolveBadgeColor(color: BadgeColor): {\n color: string;\n contrast: string;\n} {\n const named = NAMED_COLOR_MAP[color];\n if (named) {\n // For neutral we keep contrast as the text primary so solid reads well.\n const contrast =\n color === 'neutral' ? vars.colors.text.primary : vars.colors.text.primary;\n return { color: named, contrast };\n }\n return { color, contrast: '#ffffff' };\n}\n\nconst RemoveIcon: React.FC = () => (\n <CloseIcon size={10} color=\"currentColor\" decorative />\n);\n\n/**\n * A small inline status indicator / tag.\n *\n * Badges are visual labels for status, counts, or tags. Pair with an\n * editor item to indicate its state (e.g. \"DRAFT\", \"ERROR\", \"3 NEW\").\n *\n * @example\n * ```tsx\n * <Badge color=\"success\">Saved</Badge>\n * <Badge variant=\"outline\" color=\"warning\" icon={<WarningIcon />}>\n * Warning\n * </Badge>\n * <Badge removable onRemove={handleRemove}>feature/foo</Badge>\n * ```\n */\nexport const Badge = /*#__PURE__*/ React.memo<BadgeProps>(\n ({\n variant = 'subtle',\n size = 'sm',\n color = 'neutral',\n uppercase = false,\n icon,\n removable = false,\n onRemove,\n children,\n className,\n style,\n testId,\n ref,\n ...rest\n }) => {\n const resolved = resolveBadgeColor(color);\n\n const handleRemoveClick = useCallback(\n (event: React.MouseEvent<HTMLButtonElement>) => {\n event.stopPropagation();\n onRemove?.(event);\n },\n [onRemove]\n );\n\n const inlineVars = assignInlineVars({\n [badgeColorVar]: resolved.color,\n [badgeContrastVar]: resolved.contrast,\n });\n\n return (\n <span\n ref={ref}\n className={cx(\n badgeRecipe({\n variant,\n size,\n uppercase: uppercase || undefined,\n }),\n className\n )}\n style={{ ...inlineVars, ...style }}\n data-testid={testId}\n {...rest}\n >\n {variant === 'dot' && <span className={badgeDotStyle} aria-hidden />}\n {icon && (\n <span className={badgeIconStyle} aria-hidden>\n {icon}\n </span>\n )}\n {children && <span>{children}</span>}\n {removable && (\n <button\n type=\"button\"\n className={badgeRemoveButtonStyle}\n onClick={handleRemoveClick}\n aria-label=\"Remove\"\n >\n <RemoveIcon />\n </button>\n )}\n </span>\n );\n }\n);\n\nBadge.displayName = 'Badge';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAoBA;AACE;AACA;AACA;AACA;AACA;AACA;;AAGF;;;;;AAKG;AACH;AAIE;;;;AAKE;;AAEF;AACF;AAEA;AAIA;;;;;;;;;;;;;;AAcG;;AAiBC;AAEA;;AAGI;AACF;;AAKA;AACA;AACD;;;;;AAUM;AA0BT;AAGF;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"Button.js","sources":["../../../../../../src/components/primitives/Button/Button.tsx"],"sourcesContent":[null],"names":[],"mappings":";;;;;;AAqGA;;;;;;;;;;;;;;;;;;;;;;;;;AAyBG;;AAiBC;AAsBF;AAGF;;"}
1
+ {"version":3,"file":"Button.js","sources":["src/components/primitives/Button/Button.tsx"],"sourcesContent":["'use client';\n\n// src/primitives/Button/Button.tsx\nimport React from 'react';\n\nimport { cx } from '@/utils/cx';\n\nimport {\n buttonRecipe,\n loadingSpinnerStyle,\n iconWrapperStyle,\n} from './Button.css';\n\nimport type { Size, Variant } from '@/types/common';\nimport type { Prettify } from '@/types/utilities';\n\n/**\n * Button sizes optimized for editor interfaces\n */\nexport type ButtonSize = Size;\n\n/**\n * Visual variants for the button\n */\nexport type ButtonVariant = Variant;\n\n/**\n * Base props for the Button component\n */\nexport interface ButtonBaseProps extends Omit<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n 'css'\n> {\n /**\n * Button content — text, icons, or other React elements\n * @example \"Save\", <><SaveIcon /> Save</>\n */\n children?: React.ReactNode;\n\n /**\n * Size variant optimized for editor interfaces\n * - `sm`: 20px height, compact for toolbars\n * - `md`: 24px height, standard for panels\n * - `lg`: 32px height, prominent actions\n * @default \"md\"\n */\n size?: ButtonSize;\n\n /**\n * Visual variant of the button\n * - `default`: Transparent with border, fills on hover\n * - `ghost`: No border, subtle hover state\n * - `filled`: Solid background with accent color\n * @default \"default\"\n */\n variant?: ButtonVariant;\n\n /**\n * Whether the button is disabled\n * When true, button becomes non-interactive with reduced opacity\n * @default false\n */\n disabled?: boolean;\n\n /**\n * Loading state — shows spinner and disables interaction\n * Use for async operations like saving, loading data\n * @default false\n */\n loading?: boolean;\n\n /**\n * Icon element to display before text\n * Should be 16x16px for optimal appearance\n * @example <SaveIcon />, <PlayIcon />\n */\n icon?: React.ReactNode;\n\n /**\n * Whether the button should take the full width of the container\n * Useful for form actions and modal buttons\n * @default false\n */\n fullWidth?: boolean;\n\n /**\n * Test identifier for automated testing\n */\n testId?: string;\n\n /**\n * Click event handler\n * Called when button is clicked (not when disabled/loading)\n */\n onClick?: (event: React.MouseEvent<HTMLButtonElement>) => void;\n\n ref?: React.Ref<HTMLButtonElement>;\n}\n\n/**\n * Props for the Button component with prettified type for better IntelliSense\n */\nexport type ButtonProps = Prettify<ButtonBaseProps>;\n\n/**\n * Versatile button component for editor interfaces.\n *\n * Supports multiple variants, sizes, and states. Optimized for professional\n * editor interfaces with compact dimensions and precise interactions.\n *\n * @example\n * ```tsx\n * // Basic usage\n * <Button variant=\"default\" size=\"md\">Save</Button>\n *\n * // With icon and loading state\n * <Button\n * icon={<SaveIcon />}\n * loading={isSaving}\n * onClick={handleSave}\n * >\n * Save Project\n * </Button>\n *\n * // Full width button\n * <Button variant=\"filled\" fullWidth>\n * Confirm\n * </Button>\n * ```\n */\nexport const Button = /*#__PURE__*/ React.memo<ButtonProps>(\n ({\n children,\n className,\n size = 'md',\n variant = 'default',\n disabled = false,\n loading = false,\n icon,\n fullWidth = false,\n onClick,\n testId,\n style,\n ref,\n ...props\n }) => {\n return (\n <button\n ref={ref}\n className={cx(\n buttonRecipe({ variant, size, fullWidth: fullWidth || undefined }),\n className\n )}\n disabled={disabled || loading}\n onClick={onClick}\n data-testid={testId}\n style={style}\n {...props}\n >\n {loading ? (\n <div className={loadingSpinnerStyle} />\n ) : icon ? (\n <span className={iconWrapperStyle}>{icon}</span>\n ) : null}\n\n {children && <span>{children}</span>}\n </button>\n );\n }\n);\n\nButton.displayName = 'Button';\n"],"names":[],"mappings":";;;;;;AAwGA;;;;;;;;;;;;;;;;;;;;;;;;;AAyBG;;AAiBC;AAsBF;AAGF;;"}
@@ -1,13 +1,13 @@
1
1
  "use client";
2
2
  import { jsxs, jsx } from 'react/jsx-runtime';
3
- import { useContext, useId, useState, useCallback } from 'react';
4
3
  import { assignInlineVars } from '@vanilla-extract/dynamic';
4
+ import { useContext, useId, useState, useCallback } from 'react';
5
+ import { FormHelperText } from '../../form/FormHelperText.js';
5
6
  import { CheckIcon } from '../../Icons/CheckIcon.js';
6
7
  import { MinusIcon } from '../../Icons/MinusIcon.js';
7
- import { FormHelperText } from '../../form/FormHelperText.js';
8
- import { CheckboxGroupContext } from './CheckboxGroup.js';
9
8
  import { cx } from '../../../utils/cx.js';
10
9
  import { boxSizeVar, checkboxBoxRecipe, checkboxLabelRecipe, checkboxContainerStyle } from './Checkbox.css.js';
10
+ import { CheckboxGroupContext } from './CheckboxGroup.js';
11
11
 
12
12
  // --- Size maps ---
13
13
  const BOX_SIZES = {
@@ -34,7 +34,7 @@ const ICON_SIZES = {
34
34
  * <Checkbox indeterminate label="Select all" />
35
35
  * ```
36
36
  */
37
- const Checkbox = ({ checked: checkedProp, defaultChecked = false, indeterminate = false, label, labelPosition = 'right', size: sizeProp = 'md', variant = 'default', disabled: disabledProp = false, required = false, error = false, helperText, errorMessage, value, name, onChange, className, style, testId, ref, id: idProp, ...rest }) => {
37
+ const Checkbox = ({ checked: checkedProp, defaultChecked = false, indeterminate = false, label, labelPosition = 'right', size: sizeProp, variant = 'default', disabled: disabledProp = false, required = false, error = false, helperText, errorMessage, value, name, onChange, className, style, testId, ref, id: idProp, ...rest }) => {
38
38
  const groupContext = useContext(CheckboxGroupContext);
39
39
  const autoId = useId();
40
40
  const checkboxId = idProp ?? autoId;
@@ -43,6 +43,8 @@ const Checkbox = ({ checked: checkedProp, defaultChecked = false, indeterminate
43
43
  const [internalChecked, setInternalChecked] = useState(defaultChecked);
44
44
  // Resolve group context
45
45
  const disabled = disabledProp || (groupContext?.disabled ?? false);
46
+ // Size resolves from the checkbox prop, then the group, then the default —
47
+ // mirroring how `disabled` above falls back to the group context.
46
48
  const size = sizeProp ?? groupContext?.size ?? 'md';
47
49
  // Determine checked state for group integration
48
50
  const isGrouped = groupContext !== null && value !== undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"Checkbox.js","sources":["../../../../../../src/components/primitives/Checkbox/Checkbox.tsx"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;;;;AAiBA;AAEA;AACE;AACA;AACA;;AAGF;AACE;AACA;AACA;;AAGF;;;;;;;;;;;;;AAaG;AACI;AAuBL;AACA;AACA;AACA;;;;;;;;AAWA;AAEA;;;;;;;;;;AASA;AACE;;AAEA;AAEA;AACE;;AAGF;;;AAIA;AACF;;;;;;;;AAQC;AAED;AACA;;AAGE;AACA;AACE;;AAGJ;;;AAIC;;;;AAKD;AAEE;AACA;;;;;;AAmBG;AAUK;;;AAGA;AACE;AACA;;AAiBZ;AACE;;AAGF;;;;AAOO;AAYT;AAEA;;"}
1
+ {"version":3,"file":"Checkbox.js","sources":["src/components/primitives/Checkbox/Checkbox.tsx"],"sourcesContent":["'use client';\n\nimport { assignInlineVars } from '@vanilla-extract/dynamic';\nimport React, { useCallback, useId, useContext, useState } from 'react';\n\nimport { FormHelperText } from '@/components/form/FormHelperText';\nimport { CheckIcon } from '@/components/Icons/CheckIcon';\nimport { MinusIcon } from '@/components/Icons/MinusIcon';\nimport { cx } from '@/utils/cx';\n\nimport {\n checkboxContainerStyle,\n checkboxLabelRecipe,\n checkboxBoxRecipe,\n boxSizeVar,\n} from './Checkbox.css';\nimport { CheckboxGroupContext } from './CheckboxGroup';\n\nimport type { CheckboxProps, CheckboxSize } from './Checkbox.types';\n\n// --- Size maps ---\n\nconst BOX_SIZES: Record<CheckboxSize, number> = {\n sm: 14,\n md: 16,\n lg: 20,\n};\n\nconst ICON_SIZES: Record<CheckboxSize, number> = {\n sm: 10,\n md: 12,\n lg: 14,\n};\n\n/**\n * Checkbox component for boolean selection in settings panels,\n * property inspectors, and form interfaces.\n *\n * Supports controlled/uncontrolled modes, indeterminate state,\n * label positioning, sizes, variants, and error states.\n *\n * @example\n * ```tsx\n * <Checkbox label=\"Enable shadows\" />\n * <Checkbox checked={value} onChange={setValue} label=\"Auto-save\" />\n * <Checkbox indeterminate label=\"Select all\" />\n * ```\n */\nexport const Checkbox: React.FC<CheckboxProps> = ({\n checked: checkedProp,\n defaultChecked = false,\n indeterminate = false,\n label,\n labelPosition = 'right',\n size: sizeProp,\n variant = 'default',\n disabled: disabledProp = false,\n required = false,\n error = false,\n helperText,\n errorMessage,\n value,\n name,\n onChange,\n className,\n style,\n testId,\n ref,\n id: idProp,\n ...rest\n}) => {\n const groupContext = useContext(CheckboxGroupContext);\n const autoId = useId();\n const checkboxId = idProp ?? autoId;\n const helperId = `${checkboxId}-helper`;\n\n // Internal state for uncontrolled mode\n const [internalChecked, setInternalChecked] = useState(defaultChecked);\n\n // Resolve group context\n const disabled = disabledProp || (groupContext?.disabled ?? false);\n // Size resolves from the checkbox prop, then the group, then the default —\n // mirroring how `disabled` above falls back to the group context.\n const size = sizeProp ?? groupContext?.size ?? 'md';\n\n // Determine checked state for group integration\n const isGrouped = groupContext !== null && value !== undefined;\n const isControlled = checkedProp !== undefined;\n\n let resolvedChecked: boolean;\n if (isGrouped) {\n resolvedChecked = groupContext.groupValue.includes(value);\n } else if (isControlled) {\n resolvedChecked = checkedProp;\n } else {\n resolvedChecked = internalChecked;\n }\n\n const handleClick = useCallback(() => {\n if (disabled) return;\n\n const newChecked = !resolvedChecked;\n\n if (isGrouped && value) {\n groupContext.toggleValue(value);\n }\n\n if (!isControlled && !isGrouped) {\n setInternalChecked(newChecked);\n }\n\n onChange?.(newChecked);\n }, [\n disabled,\n resolvedChecked,\n isGrouped,\n value,\n groupContext,\n isControlled,\n onChange,\n ]);\n\n const iconSize = ICON_SIZES[size];\n const showHelperText = error && errorMessage ? errorMessage : helperText;\n\n const ariaChecked: 'true' | 'false' | 'mixed' = indeterminate\n ? 'mixed'\n : resolvedChecked\n ? 'true'\n : 'false';\n\n const isActive = resolvedChecked || indeterminate;\n\n const boxInlineVars = assignInlineVars({\n [boxSizeVar]: `${BOX_SIZES[size]}px`,\n });\n\n // Respect OS-level reduced-motion preference for the inline check-mark\n // animation. Stylesheet @media queries cover CSS-driven motion elsewhere;\n // this style is set inline, so the check has to happen here.\n const prefersReducedMotion =\n typeof window !== 'undefined' &&\n typeof window.matchMedia === 'function' &&\n window.matchMedia('(prefers-reduced-motion: reduce)').matches;\n\n const checkboxBox = (\n <button\n ref={ref}\n type=\"button\"\n role=\"checkbox\"\n aria-checked={ariaChecked}\n aria-disabled={disabled || undefined}\n aria-required={required || undefined}\n aria-invalid={error || undefined}\n aria-describedby={showHelperText ? helperId : undefined}\n disabled={disabled}\n onClick={handleClick}\n className={checkboxBoxRecipe({\n active: isActive || undefined,\n variant,\n disabled: disabled || undefined,\n error: error || undefined,\n })}\n style={boxInlineVars}\n data-testid={testId}\n {...rest}\n >\n {indeterminate ? (\n <MinusIcon size={iconSize} color=\"white\" decorative />\n ) : (\n <span\n style={{\n display: 'inline-flex',\n opacity: resolvedChecked ? 1 : 0,\n transform: resolvedChecked ? 'scale(1)' : 'scale(0)',\n transition: prefersReducedMotion\n ? 'none'\n : 'opacity 150ms ease-out, transform 150ms ease-out',\n }}\n aria-hidden=\"true\"\n >\n <CheckIcon size={iconSize} color=\"white\" decorative />\n </span>\n )}\n {name && (\n <input\n type=\"hidden\"\n name={name}\n value={resolvedChecked ? (value ?? 'on') : ''}\n />\n )}\n </button>\n );\n\n if (!label && !showHelperText) {\n return checkboxBox;\n }\n\n return (\n <div className={cx(checkboxContainerStyle, className)} style={style}>\n <label\n className={checkboxLabelRecipe({\n labelPosition,\n disabled: disabled || undefined,\n size,\n })}\n >\n {checkboxBox}\n {label && <span>{label}</span>}\n </label>\n {showHelperText && (\n <FormHelperText id={helperId} error={error}>\n {showHelperText}\n </FormHelperText>\n )}\n </div>\n );\n};\n\nCheckbox.displayName = 'Checkbox';\n"],"names":[],"mappings":";;;;;;;;;;;AAoBA;AAEA;AACE;AACA;AACA;;AAGF;AACE;AACA;AACA;;AAGF;;;;;;;;;;;;;AAaG;AACI;AAuBL;AACA;AACA;AACA;;;;;;;;;;AAaA;AAEA;;;;;;;;;;AASA;AACE;;AAEA;AAEA;AACE;;AAGF;;;AAIA;AACF;;;;;;;;AAQC;AAED;AACA;;AAGE;AACA;AACE;;AAGJ;;;AAIC;;;;AAKD;AAEE;AACA;;;;;;AAmBG;AAUK;;;AAGA;AACE;AACA;;AAiBZ;AACE;;AAGF;;;;AAOO;AAYT;AAEA;;"}
@@ -1,9 +1,9 @@
1
1
  "use client";
2
2
  import { jsxs, jsx } from 'react/jsx-runtime';
3
- import { useId, useState, useCallback, createContext } from 'react';
4
3
  import { assignInlineVars } from '@vanilla-extract/dynamic';
5
- import { FormLabel } from '../../form/FormLabel.js';
4
+ import { useId, useState, useCallback, createContext } from 'react';
6
5
  import { FormHelperText } from '../../form/FormHelperText.js';
6
+ import { FormLabel } from '../../form/FormLabel.js';
7
7
  import { cx } from '../../../utils/cx.js';
8
8
  import { groupItemsStyle, groupGapVar, groupDirectionVar, groupContainerStyle } from './Checkbox.css.js';
9
9
 
@@ -1 +1 @@
1
- {"version":3,"file":"CheckboxGroup.js","sources":["../../../../../../src/components/primitives/Checkbox/CheckboxGroup.tsx"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;;;AAmBE;AAEF;;;;;;;;;;;;;;;;;;AAkBG;AACI;AAqBL;AACA;AACA;AACA;;AAGA;;AAGA;AAEI;AACE;AACA;;;;AAKF;;AAKJ;AACE;;;;;AAMF;AAEA;;AAqBU;;AAaZ;AAEA;;"}
1
+ {"version":3,"file":"CheckboxGroup.js","sources":["src/components/primitives/Checkbox/CheckboxGroup.tsx"],"sourcesContent":["'use client';\n\nimport { assignInlineVars } from '@vanilla-extract/dynamic';\nimport React, { createContext, useCallback, useId, useState } from 'react';\n\nimport { FormHelperText } from '@/components/form/FormHelperText';\nimport { FormLabel } from '@/components/form/FormLabel';\nimport { cx } from '@/utils/cx';\n\nimport {\n groupContainerStyle,\n groupItemsStyle,\n groupDirectionVar,\n groupGapVar,\n} from './Checkbox.css';\n\nimport type {\n CheckboxGroupProps,\n CheckboxGroupContextValue,\n} from './Checkbox.types';\n\nexport const CheckboxGroupContext =\n /*#__PURE__*/ createContext<CheckboxGroupContextValue | null>(null);\n\n/**\n * Groups multiple Checkbox components with shared state management.\n *\n * Manages a `string[]` value, propagates `disabled` and `size` to children\n * via React Context. Supports controlled and uncontrolled modes.\n *\n * @example\n * ```tsx\n * <CheckboxGroup\n * label=\"Render passes\"\n * value={selected}\n * onChange={setSelected}\n * >\n * <Checkbox value=\"diffuse\" label=\"Diffuse\" />\n * <Checkbox value=\"specular\" label=\"Specular\" />\n * <Checkbox value=\"shadow\" label=\"Shadow\" />\n * </CheckboxGroup>\n * ```\n */\nexport const CheckboxGroup: React.FC<CheckboxGroupProps> = ({\n value: valueProp,\n defaultValue = [],\n label,\n direction = 'column',\n gap = 2,\n disabled = false,\n size = 'md',\n helperText,\n error = false,\n errorMessage,\n required = false,\n children,\n onChange,\n className,\n style,\n testId,\n ref,\n id: idProp,\n ...rest\n}) => {\n const autoId = useId();\n const groupId = idProp ?? autoId;\n const labelId = `${groupId}-label`;\n const helperId = `${groupId}-helper`;\n\n const [internalValue, setInternalValue] = useState<string[]>(defaultValue);\n const isControlled = valueProp !== undefined;\n const currentValue = isControlled ? valueProp : internalValue;\n\n const toggleValue = useCallback(\n (itemValue: string) => {\n const nextValue = currentValue.includes(itemValue)\n ? currentValue.filter(v => v !== itemValue)\n : [...currentValue, itemValue];\n\n if (!isControlled) {\n setInternalValue(nextValue);\n }\n onChange?.(nextValue);\n },\n [currentValue, isControlled, onChange]\n );\n\n const contextValue: CheckboxGroupContextValue = {\n groupValue: currentValue,\n toggleValue,\n disabled,\n size,\n };\n\n const showHelperText = error && errorMessage ? errorMessage : helperText;\n\n return (\n <div\n ref={ref}\n role=\"group\"\n aria-labelledby={label ? labelId : undefined}\n aria-describedby={showHelperText ? helperId : undefined}\n className={cx(groupContainerStyle, className)}\n style={style}\n data-testid={testId}\n {...rest}\n >\n {label && (\n <FormLabel id={labelId} required={required} disabled={disabled}>\n {label}\n </FormLabel>\n )}\n <CheckboxGroupContext.Provider value={contextValue}>\n <div\n className={groupItemsStyle}\n style={assignInlineVars({\n [groupDirectionVar]: direction,\n [groupGapVar]: `${8 * gap}px`,\n })}\n >\n {children}\n </div>\n </CheckboxGroupContext.Provider>\n {showHelperText && (\n <FormHelperText id={helperId} error={error}>\n {showHelperText}\n </FormHelperText>\n )}\n </div>\n );\n};\n\nCheckboxGroup.displayName = 'CheckboxGroup';\n"],"names":[],"mappings":";;;;;;;;;;AAsBE;AAEF;;;;;;;;;;;;;;;;;;AAkBG;AACI;AAqBL;AACA;AACA;AACA;;AAGA;;AAGA;AAEI;AACE;AACA;;;;AAKF;;AAKJ;AACE;;;;;AAMF;AAEA;;AAqBU;;AAaZ;AAEA;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"Code.js","sources":["../../../../../../src/components/primitives/Code/Code.tsx"],"sourcesContent":[null],"names":[],"mappings":";;;;;;AAOA;;;;;;;;;;AAUG;AACI;AAEH;AAWF;AAGF;;"}
1
+ {"version":3,"file":"Code.js","sources":["src/components/primitives/Code/Code.tsx"],"sourcesContent":["'use client';\n\nimport React from 'react';\n\nimport { cx } from '@/utils/cx';\n\nimport { codeRecipe } from './Code.css';\n\nimport type { CodeProps } from './Code.types';\n\n/**\n * Small inline `<code>` primitive with theme-aware background and font.\n *\n * Complements `ChatCodeBlock` (block-level) — use `Code` for short inline\n * snippets inside sentences and markdown renderers.\n *\n * @example\n * ```tsx\n * <Text>Run <Code>npm install</Code> to add the package.</Text>\n * ```\n */\nexport const Code = /*#__PURE__*/ React.memo<CodeProps>(\n ({ children, size = 'sm', className, style, testId, ref, ...rest }) => {\n return (\n <code\n ref={ref}\n className={cx(codeRecipe({ size }), className)}\n style={style}\n data-testid={testId}\n {...rest}\n >\n {children}\n </code>\n );\n }\n);\n\nCode.displayName = 'Code';\n"],"names":[],"mappings":";;;;;;AAUA;;;;;;;;;;AAUG;AACI;AAEH;AAWF;AAGF;;"}
@@ -1,11 +1,11 @@
1
1
  "use client";
2
2
  import { jsxs, jsx } from 'react/jsx-runtime';
3
- import { useId, useState, useCallback } from 'react';
4
3
  import { assignInlineVars } from '@vanilla-extract/dynamic';
4
+ import { useId, useState, useCallback } from 'react';
5
5
  import { ChevronRightIcon } from '../../Icons/ChevronRightIcon.js';
6
+ import { vars } from '../../../theme/contract.css.js';
6
7
  import { cx } from '../../../utils/cx.js';
7
8
  import { triggerFontSizeVar, triggerPaddingVar, triggerHeightVar, contentPaddingHVar, contentPaddingVVar, chevronSizeVar, chevronRecipe, triggerRecipe, contentInnerStyle, contentBodyStyle, contentWrapperRecipe, collapsibleRootStyle } from './Collapsible.css.js';
8
- import { vars } from '../../../theme/contract.css.js';
9
9
 
10
10
  const TRIGGER_SIZE_MAP = {
11
11
  sm: {
@@ -1 +1 @@
1
- {"version":3,"file":"Collapsible.js","sources":["../../../../../../src/components/primitives/Collapsible/Collapsible.tsx"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;;AAgCA;AACE;AACE;AACA;AACA;AACA;AACD;AACD;AACE;AACA;AACA;AACA;AACD;AACD;AACE;AACA;AACA;AACA;AACD;;AAQH;AACE;AACA;AACA;;AAGF;;AAkBE;AACA;AACA;;AAGA;;AAGA;AACE;;AAEA;;;;AAMA;;AAGF;AACA;AACA;;AAGE;AACA;AACA;AACD;;AAGC;AACA;AACD;;;AAoBM;;AAOI;AAEC;AACD;;AAcF;AAeX;AAEA;;"}
1
+ {"version":3,"file":"Collapsible.js","sources":["src/components/primitives/Collapsible/Collapsible.tsx"],"sourcesContent":["'use client';\n\nimport { assignInlineVars } from '@vanilla-extract/dynamic';\nimport React, { useCallback, useId, useState } from 'react';\n\nimport { ChevronRightIcon } from '@/components/Icons/ChevronRightIcon';\nimport { vars } from '@/theme/contract.css';\nimport { cx } from '@/utils/cx';\n\nimport {\n collapsibleRootStyle,\n triggerRecipe,\n triggerHeightVar,\n triggerPaddingVar,\n triggerFontSizeVar,\n chevronRecipe,\n chevronSizeVar,\n contentWrapperRecipe,\n contentInnerStyle,\n contentBodyStyle,\n contentPaddingVVar,\n contentPaddingHVar,\n} from './Collapsible.css';\n\nimport type { CollapsibleProps, CollapsibleSize } from './Collapsible.types';\n\n// --- Size maps ---\n\ninterface TriggerSizeConfig {\n height: string;\n padding: string;\n fontSize: string;\n chevronSize: number;\n}\n\nconst TRIGGER_SIZE_MAP: Record<CollapsibleSize, TriggerSizeConfig> = {\n sm: {\n height: '24px',\n padding: vars.spacing.md,\n fontSize: vars.typography.fontSize.xs,\n chevronSize: 10,\n },\n md: {\n height: '28px',\n padding: vars.spacing.md,\n fontSize: vars.typography.fontSize.sm,\n chevronSize: 12,\n },\n lg: {\n height: '32px',\n padding: vars.spacing.lg,\n fontSize: vars.typography.fontSize.md,\n chevronSize: 14,\n },\n};\n\ninterface ContentSizeConfig {\n paddingV: string;\n paddingH: string;\n}\n\nconst CONTENT_SIZE_MAP: Record<CollapsibleSize, ContentSizeConfig> = {\n sm: { paddingV: vars.spacing.sm, paddingH: vars.spacing.md },\n md: { paddingV: vars.spacing.md, paddingH: vars.spacing.lg },\n lg: { paddingV: vars.spacing.lg, paddingH: vars.spacing.xl },\n};\n\n// --- Component ---\n\nexport const Collapsible: React.FC<CollapsibleProps> = ({\n trigger,\n open: openProp,\n defaultOpen = false,\n size = 'sm',\n indicator,\n disabled = false,\n keepMounted = false,\n onChange,\n children,\n className,\n style,\n testId,\n ref,\n ...rest\n}) => {\n const autoId = useId();\n const triggerId = `collapsible-${autoId}-trigger`;\n const contentId = `collapsible-${autoId}-content`;\n\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n const isControlled = openProp !== undefined;\n const resolvedOpen = isControlled ? openProp : internalOpen;\n\n const handleToggle = useCallback(() => {\n if (disabled) return;\n\n const nextOpen = !resolvedOpen;\n\n if (!isControlled) {\n setInternalOpen(nextOpen);\n }\n\n onChange?.(nextOpen);\n }, [disabled, resolvedOpen, isControlled, onChange]);\n\n const showIndicator = indicator !== null;\n const sizeConfig = TRIGGER_SIZE_MAP[size];\n const contentConfig = CONTENT_SIZE_MAP[size];\n\n const triggerInlineVars = assignInlineVars({\n [triggerHeightVar]: sizeConfig.height,\n [triggerPaddingVar]: sizeConfig.padding,\n [triggerFontSizeVar]: sizeConfig.fontSize,\n });\n\n const contentInlineVars = assignInlineVars({\n [contentPaddingVVar]: contentConfig.paddingV,\n [contentPaddingHVar]: contentConfig.paddingH,\n });\n\n return (\n <div\n ref={ref}\n className={cx(collapsibleRootStyle, className)}\n style={style}\n data-testid={testId}\n {...rest}\n >\n <button\n type=\"button\"\n id={triggerId}\n aria-expanded={resolvedOpen}\n aria-controls={contentId}\n aria-disabled={disabled || undefined}\n disabled={disabled}\n onClick={handleToggle}\n className={triggerRecipe({\n disabled: disabled || undefined,\n })}\n style={triggerInlineVars}\n >\n {showIndicator && (\n <span\n className={chevronRecipe({\n open: resolvedOpen || undefined,\n })}\n style={assignInlineVars({\n [chevronSizeVar]: `${sizeConfig.chevronSize}px`,\n })}\n >\n {indicator ?? (\n <ChevronRightIcon size={sizeConfig.chevronSize} decorative />\n )}\n </span>\n )}\n <span>{trigger}</span>\n </button>\n\n {(resolvedOpen || keepMounted) && (\n <div\n className={contentWrapperRecipe({\n open: resolvedOpen || undefined,\n })}\n role=\"region\"\n id={contentId}\n aria-labelledby={triggerId}\n hidden={!resolvedOpen || undefined}\n >\n <div className={contentInnerStyle}>\n <div className={contentBodyStyle} style={contentInlineVars}>\n {children}\n </div>\n </div>\n </div>\n )}\n </div>\n );\n};\n\nCollapsible.displayName = 'Collapsible';\n"],"names":[],"mappings":";;;;;;;;;AAmCA;AACE;AACE;AACA;AACA;AACA;AACD;AACD;AACE;AACA;AACA;AACA;AACD;AACD;AACE;AACA;AACA;AACA;AACD;;AAQH;AACE;AACA;AACA;;AAGF;;AAkBE;AACA;AACA;;AAGA;;AAGA;AACE;;AAEA;;;;AAMA;;AAGF;AACA;AACA;;AAGE;AACA;AACA;AACD;;AAGC;AACA;AACD;;;AAoBM;;AAOI;AAEC;AACD;;AAcF;AAeX;AAEA;;"}
@@ -1,8 +1,8 @@
1
1
  "use client";
2
2
  import { jsx } from 'react/jsx-runtime';
3
+ import { useFloating, autoUpdate, offset, flip, shift, useHover, safePolygon, useFocus, useInteractions } from '@floating-ui/react';
3
4
  import React, { useId, useRef, useState, useCallback, useMemo, useEffect, createContext, useContext } from 'react';
4
5
  import { createPortal } from 'react-dom';
5
- import { useFloating, autoUpdate, offset, flip, shift, useHover, safePolygon, useFocus, useInteractions } from '@floating-ui/react';
6
6
  import { cx } from '../../../utils/cx.js';
7
7
  import { hoverCardContentRecipe } from './HoverCard.css.js';
8
8
 
@@ -117,8 +117,7 @@ const HoverCardContent = ({ children, width, maxHeight, padding = 'md', classNam
117
117
  externalRef(node);
118
118
  }
119
119
  else if (externalRef && typeof externalRef === 'object') {
120
- externalRef.current =
121
- node;
120
+ externalRef.current = node;
122
121
  }
123
122
  }, [contentRef, floatingRefs, externalRef]);
124
123
  useEffect(() => {
@@ -130,6 +129,9 @@ const HoverCardContent = ({ children, width, maxHeight, padding = 'md', classNam
130
129
  cancelAnimationFrame(handle);
131
130
  };
132
131
  }
132
+ // Reset enter-animation state on close; gated by the `isOpen` prop, so this
133
+ // is a one-shot transition rather than continuous state synchronization.
134
+ // eslint-disable-next-line react-hooks/set-state-in-effect
133
135
  setVisible(false);
134
136
  return undefined;
135
137
  }, [isOpen]);
@@ -1 +1 @@
1
- {"version":3,"file":"HoverCard.js","sources":["../../../../../../src/components/primitives/HoverCard/HoverCard.tsx"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;AAkCA;AACE;AAEF;AACE;;AAEE;;AAIF;AACF;AAEA;;;;;;;;;;;;;;;;AAgBG;AACH;AAaE;AACA;AACA;;AAGA;AACA;AAEA;;;;;;AAMI;;;AAMF;AACA;AACA;AACA;AACA;AACD;AAED;;;;AAIE;AACD;AACD;AAEA;;;AAGC;AAED;;AAGI;;;;AAIA;;AAEA;;;AAGD;;;;;;;;;AAUA;AAGH;AAKF;AAEA;AAEA;AACE;AAEA;AAEA;AAEI;AACA;AACF;AAIF;AAAqC;AAErC;AAEA;AAGI;AACA;;AAED;AAEL;AAEA;AAEA;AAWE;;AAWA;AAEA;AAEI;AACA;AACA;;;AAEO;AACJ;AACC;;;;;AAQJ;;AAEA;AACA;;AAEA;;;AAGF;AACF;AAEA;AAAa;;AAGb;AACE;AACE;;AAEJ;AACE;AACE;AACF;;AAGF;;;;AAWO;AAID;AACA;AACA;;AAUN;;;AAGA;AACF;AAEA;;AAQE;AACA;AACD;;"}
1
+ {"version":3,"file":"HoverCard.js","sources":["src/components/primitives/HoverCard/HoverCard.tsx"],"sourcesContent":["'use client';\n\nimport {\n autoUpdate,\n flip,\n offset as offsetMiddleware,\n safePolygon,\n shift,\n useFloating,\n useFocus,\n useHover,\n useInteractions,\n} from '@floating-ui/react';\nimport React, {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useId,\n useMemo,\n useRef,\n useState,\n} from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { cx } from '@/utils/cx';\n\nimport { hoverCardContentRecipe } from './HoverCard.css';\n\nimport type {\n HoverCardContentProps,\n HoverCardContextValue,\n HoverCardProps,\n HoverCardTriggerProps,\n} from './HoverCard.types';\n\nconst HoverCardContext =\n /*#__PURE__*/ createContext<HoverCardContextValue | null>(null);\n\nfunction useHoverCardContext(): HoverCardContextValue {\n const ctx = useContext(HoverCardContext);\n if (!ctx) {\n throw new Error(\n 'HoverCard compound components must be used within <HoverCard>'\n );\n }\n return ctx;\n}\n\n/**\n * A floating content container anchored to a trigger and shown on hover.\n * Cursor can move from the trigger onto the content without closing\n * (safe-polygon based). Also opens on keyboard focus for accessibility.\n *\n * @example\n * ```tsx\n * <HoverCard>\n * <HoverCard.Trigger>\n * <Link>@octocat</Link>\n * </HoverCard.Trigger>\n * <HoverCard.Content width={280}>\n * <UserPreview user={...} />\n * </HoverCard.Content>\n * </HoverCard>\n * ```\n */\nconst HoverCardRoot: React.FC<HoverCardProps> = ({\n open: openProp,\n defaultOpen = false,\n placement = 'bottom-start',\n offset = 8,\n openDelay = 400,\n closeDelay = 150,\n portal = true,\n disableSafePolygon = false,\n disabled = false,\n onOpenChange,\n children,\n}) => {\n const autoId = useId();\n const triggerRef = useRef<HTMLElement | null>(null);\n const contentRef = useRef<HTMLDivElement | null>(null);\n\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n const isControlled = openProp !== undefined;\n const isOpen = disabled ? false : isControlled ? openProp : internalOpen;\n\n const handleOpenChange = useCallback(\n (nextOpen: boolean) => {\n if (disabled && nextOpen) return;\n if (!isControlled) {\n setInternalOpen(nextOpen);\n }\n onOpenChange?.(nextOpen);\n },\n [disabled, isControlled, onOpenChange]\n );\n\n const { refs, floatingStyles, context } = useFloating({\n open: isOpen,\n onOpenChange: handleOpenChange,\n placement: placement,\n middleware: [offsetMiddleware(offset), flip(), shift({ padding: 8 })],\n whileElementsMounted: autoUpdate,\n });\n\n const hover = useHover(context, {\n enabled: !disabled,\n delay: { open: openDelay, close: closeDelay },\n handleClose: disableSafePolygon ? null : safePolygon(),\n move: false,\n });\n const focus = useFocus(context, { enabled: !disabled });\n\n const { getReferenceProps, getFloatingProps } = useInteractions([\n hover,\n focus,\n ]);\n\n const contextValue: HoverCardContextValue = useMemo(\n () => ({\n isOpen,\n hoverCardId: autoId,\n portal,\n triggerRef,\n contentRef,\n floatingRefs: refs,\n floatingStyles,\n floatingContext: context,\n getReferenceProps,\n getFloatingProps,\n }),\n [\n isOpen,\n autoId,\n portal,\n refs,\n floatingStyles,\n context,\n getReferenceProps,\n getFloatingProps,\n ]\n );\n\n return (\n <HoverCardContext.Provider value={contextValue}>\n {children}\n </HoverCardContext.Provider>\n );\n};\n\nHoverCardRoot.displayName = 'HoverCard';\n\nconst HoverCardTrigger: React.FC<HoverCardTriggerProps> = ({ children }) => {\n const { isOpen, hoverCardId, triggerRef, floatingRefs, getReferenceProps } =\n useHoverCardContext();\n const contentId = `hovercard-${hoverCardId}-content`;\n\n const setRef = useCallback(\n (node: HTMLElement | null) => {\n triggerRef.current = node;\n floatingRefs.setReference(node);\n },\n [triggerRef, floatingRefs]\n );\n\n if (!React.isValidElement(children)) return null;\n\n const referenceProps = getReferenceProps();\n\n return React.cloneElement(\n children as React.ReactElement<Record<string, unknown>>,\n {\n ref: setRef,\n ...referenceProps,\n 'aria-describedby': isOpen ? contentId : undefined,\n }\n );\n};\n\nHoverCardTrigger.displayName = 'HoverCard.Trigger';\n\nconst HoverCardContent: React.FC<HoverCardContentProps> = ({\n children,\n width,\n maxHeight,\n padding = 'md',\n className,\n style,\n testId,\n ref: externalRef,\n ...rest\n}) => {\n const {\n isOpen,\n contentRef,\n portal,\n hoverCardId,\n floatingRefs,\n floatingStyles,\n getFloatingProps,\n } = useHoverCardContext();\n\n const [visible, setVisible] = useState(false);\n const contentId = `hovercard-${hoverCardId}-content`;\n\n const setRef = useCallback(\n (node: HTMLDivElement | null) => {\n contentRef.current = node;\n floatingRefs.setFloating(node);\n if (typeof externalRef === 'function') {\n externalRef(node);\n } else if (externalRef && typeof externalRef === 'object') {\n externalRef.current = node;\n }\n },\n [contentRef, floatingRefs, externalRef]\n );\n\n useEffect(() => {\n if (isOpen) {\n const handle = requestAnimationFrame(() => {\n setVisible(true);\n });\n return () => {\n cancelAnimationFrame(handle);\n };\n }\n // Reset enter-animation state on close; gated by the `isOpen` prop, so this\n // is a one-shot transition rather than continuous state synchronization.\n // eslint-disable-next-line react-hooks/set-state-in-effect\n setVisible(false);\n return undefined;\n }, [isOpen]);\n\n if (!isOpen) return null;\n\n const dimensionStyles: React.CSSProperties = {};\n if (width != null) {\n dimensionStyles.width =\n typeof width === 'number' ? `${String(width)}px` : width;\n }\n if (maxHeight != null) {\n dimensionStyles.maxHeight =\n typeof maxHeight === 'number' ? `${String(maxHeight)}px` : maxHeight;\n dimensionStyles.overflowY = 'auto';\n }\n\n const floatingProps = getFloatingProps();\n\n const element = (\n <div\n ref={setRef}\n role=\"tooltip\"\n id={contentId}\n className={cx(\n hoverCardContentRecipe({\n padding,\n visible: visible || undefined,\n }),\n className\n )}\n style={{\n ...floatingStyles,\n ...dimensionStyles,\n ...style,\n }}\n data-testid={testId}\n {...floatingProps}\n {...rest}\n >\n {children}\n </div>\n );\n\n if (portal && typeof document !== 'undefined') {\n return createPortal(element, document.body);\n }\n return element;\n};\n\nHoverCardContent.displayName = 'HoverCard.Content';\n\ninterface HoverCardComponent extends React.FC<HoverCardProps> {\n Trigger: React.FC<HoverCardTriggerProps>;\n Content: React.FC<HoverCardContentProps>;\n}\n\nexport const HoverCard = Object.assign(HoverCardRoot, {\n Trigger: HoverCardTrigger,\n Content: HoverCardContent,\n}) as HoverCardComponent;\n"],"names":[],"mappings":";;;;;;;;AAoCA;AACE;AAEF;AACE;;AAEE;;AAIF;AACF;AAEA;;;;;;;;;;;;;;;;AAgBG;AACH;AAaE;AACA;AACA;;AAGA;AACA;AAEA;;;;;;AAMI;;;AAMF;AACA;AACA;AACA;AACA;AACD;AAED;;;;AAIE;AACD;AACD;AAEA;;;AAGC;AAED;;AAGI;;;;AAIA;;AAEA;;;AAGD;;;;;;;;;AAUA;AAGH;AAKF;AAEA;AAEA;AACE;AAEA;AAEA;AAEI;AACA;AACF;AAIF;AAAqC;AAErC;AAEA;AAGI;AACA;;AAED;AAEL;AAEA;AAEA;AAWE;;AAWA;AAEA;AAEI;AACA;AACA;;;AAEO;AACL;;;;;AAQF;;AAEA;AACA;;AAEA;;;;;;AAMF;AACF;AAEA;AAAa;;AAGb;AACE;AACE;;AAEJ;AACE;AACE;AACF;;AAGF;;;;AAWO;AAID;AACA;AACA;;AAUN;;;AAGA;AACF;AAEA;;AAQE;AACA;AACD;;"}
@@ -20,7 +20,7 @@ const STANDARD_SIZES = new Set(['sm', 'md', 'lg']);
20
20
  const Icon = /*#__PURE__*/ React.memo(({ children, size = 'md', color = 'primary', className, title, decorative = false, testId, ref, ...props }) => {
21
21
  const isStandardColor = STANDARD_COLORS.has(color);
22
22
  const isStandardSize = typeof size === 'string' && STANDARD_SIZES.has(size);
23
- const resolvedSize = isStandardSize || size === undefined
23
+ const resolvedSize = isStandardSize
24
24
  ? undefined
25
25
  : typeof size === 'number'
26
26
  ? `${size}px`
@@ -1 +1 @@
1
- {"version":3,"file":"Icon.js","sources":["../../../../../../src/components/primitives/Icon/Icon.tsx"],"sourcesContent":[null],"names":[],"mappings":";;;;;;AA6CA;;AAEG;AACH;;;;;;;;AAQC;AAED;AAEO;;AAaH;AAEA;AAEI;AACA;;;;AAKJ;AAAsB;AACtB;AACE;AACA;;;;AASM;AACE;AAQA;AACH;AAeT;AAGF;;"}
1
+ {"version":3,"file":"Icon.js","sources":["src/components/primitives/Icon/Icon.tsx"],"sourcesContent":["'use client';\n\n// src/primitives/Icon/Icon.tsx\nimport React from 'react';\n\nimport { cx } from '@/utils/cx';\n\nimport { iconRecipe } from './Icon.css';\n\nimport type { Size } from '@/types/common';\nimport type { Prettify, LiteralUnion } from '@/types/utilities';\n\nexport type IconSize = LiteralUnion<Size> | number;\nexport type IconColor = LiteralUnion<\n 'primary' | 'secondary' | 'muted' | 'accent' | 'success' | 'warning' | 'error'\n>;\n\nexport interface IconBaseProps {\n children: React.ReactNode;\n /**\n * Icon size. `'sm' | 'md' | 'lg'` map to 12 / 16 / 20 px through the theme\n * recipe. Pass a `number` for a custom pixel size, or a `string` for any\n * CSS length (e.g. `'1.5em'`, `'24px'`).\n * @default \"md\"\n */\n size?: IconSize;\n /**\n * Icon color. Standard tokens (`'primary' | 'secondary' | 'muted' |\n * 'accent' | 'success' | 'warning' | 'error'`) map to theme variables;\n * any other string is forwarded as an inline `color` value (hex,\n * `currentColor`, `var(--…)`, etc.).\n * @default \"primary\"\n */\n color?: IconColor;\n className?: string;\n title?: string;\n decorative?: boolean;\n\n /**\n * Test identifier for automated testing\n */\n testId?: string;\n\n ref?: React.Ref<SVGSVGElement>;\n}\n\nexport type IconProps = Prettify<IconBaseProps>;\n\n/**\n * Standard color keys that map to recipe variants\n */\nconst STANDARD_COLORS = new Set([\n 'primary',\n 'secondary',\n 'muted',\n 'accent',\n 'success',\n 'warning',\n 'error',\n]);\n\nconst STANDARD_SIZES = new Set(['sm', 'md', 'lg']);\n\nexport const Icon = /*#__PURE__*/ React.memo<IconProps>(\n ({\n children,\n size = 'md',\n color = 'primary',\n className,\n title,\n decorative = false,\n testId,\n ref,\n ...props\n }) => {\n const isStandardColor = STANDARD_COLORS.has(color);\n const isStandardSize = typeof size === 'string' && STANDARD_SIZES.has(size);\n\n const resolvedSize = isStandardSize\n ? undefined\n : typeof size === 'number'\n ? `${size}px`\n : size;\n\n const inlineStyle: React.CSSProperties = {};\n if (!isStandardColor) inlineStyle.color = color;\n if (resolvedSize !== undefined) {\n inlineStyle.width = resolvedSize;\n inlineStyle.height = resolvedSize;\n }\n\n return (\n <svg\n ref={ref}\n className={cx(\n iconRecipe({\n size: isStandardSize ? (size as Size) : undefined,\n color: isStandardColor\n ? (color as\n | 'primary'\n | 'secondary'\n | 'muted'\n | 'accent'\n | 'success'\n | 'warning'\n | 'error')\n : undefined,\n }),\n className\n )}\n style={Object.keys(inlineStyle).length > 0 ? inlineStyle : undefined}\n viewBox=\"0 0 24 24\"\n fill=\"none\"\n aria-hidden={decorative}\n role={decorative ? 'presentation' : 'img'}\n data-testid={testId}\n {...props}\n >\n {title && !decorative && <title>{title}</title>}\n {children}\n </svg>\n );\n }\n);\n\nIcon.displayName = 'Icon';\n"],"names":[],"mappings":";;;;;;AAgDA;;AAEG;AACH;;;;;;;;AAQC;AAED;AAEO;;AAaH;;AAGE;AACA;;;;AAKF;AAAsB;AACtB;AACE;AACA;;;;AASM;AACE;AAQA;AACH;AAeT;AAGF;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"IconButton.js","sources":["../../../../../../src/components/primitives/IconButton/IconButton.tsx"],"sourcesContent":[null],"names":[],"mappings":";;;;;;AAmHA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2CG;AACI;;;;;;;AA4CL;AAGF;;"}
1
+ {"version":3,"file":"IconButton.js","sources":["src/components/primitives/IconButton/IconButton.tsx"],"sourcesContent":["'use client';\n\n// src/primitives/IconButton/IconButton.tsx\nimport React from 'react';\n\nimport { cx } from '@/utils/cx';\n\nimport { iconButtonRecipe, loadingSpinnerRecipe } from './IconButton.css';\n\nimport type { Size, Variant } from '@/types/common';\nimport type { Prettify } from '@/types/utilities';\n\n/**\n * Standard size variants for IconButton using library sizing.\n */\nexport type IconButtonSize = Size;\n\n/**\n * Visual variants for IconButton - strict typing for controlled API.\n */\nexport type IconButtonVariant = Variant;\n\n/**\n * Border radius variants for IconButton shape control.\n */\nexport type IconButtonRadius = 'none' | 'sm' | 'md' | 'lg' | 'full';\n\nexport interface IconButtonBaseProps extends Omit<\n React.ButtonHTMLAttributes<HTMLButtonElement>,\n 'css' | 'children'\n> {\n /**\n * Icon component to display inside the button.\n * Should be an Icon component or similar icon element.\n * The button will automatically size itself based on the icon size.\n *\n * @example <SaveIcon />, <AddIcon />\n */\n children: React.ReactNode;\n\n /**\n * Button size using standard library sizing\n * Button will be square and sized appropriately for the icon\n * - `sm`: 20px square (for 12px icons)\n * - `md`: 24px square (for 16px icons)\n * - `lg`: 32px square (for 20px icons)\n * @default \"md\"\n */\n size?: IconButtonSize;\n\n /**\n * Button visual variant\n * - `default`: Transparent with border, fills on hover\n * - `ghost`: No border, subtle hover state\n * - `filled`: Solid background with accent color\n * @default \"ghost\"\n */\n variant?: IconButtonVariant;\n\n /**\n * Border radius for button shape control\n * - `none`: Sharp corners (0px)\n * - `sm`: Slightly rounded (2px)\n * - `md`: Moderately rounded (4px)\n * - `lg`: More rounded (6px)\n * - `full`: Fully circular\n * @default \"md\"\n */\n radius?: IconButtonRadius;\n\n /**\n * Whether the button is disabled\n * When true, button becomes non-interactive with reduced opacity\n * @default false\n */\n disabled?: boolean;\n\n /**\n * Whether the button is in a loading state\n * Shows spinner and disables interaction\n * @default false\n */\n loading?: boolean;\n\n /**\n * Whether the button appears pressed/active\n * Useful for toggle states and active tool indicators\n * @default false\n */\n pressed?: boolean;\n\n /**\n * Accessible label for screen readers\n * Required for proper accessibility\n * @example \"Save file\", \"Delete item\", \"Close dialog\"\n */\n 'aria-label': string;\n\n /**\n * Click event handler\n * Called when button is clicked (not when disabled/loading)\n */\n onClick?: (event: React.MouseEvent<HTMLButtonElement>) => void;\n\n /**\n * Test identifier for automated testing\n */\n testId?: string;\n\n ref?: React.Ref<HTMLButtonElement>;\n}\n\n/**\n * Props for the IconButton component with prettified type for better IntelliSense\n */\nexport type IconButtonProps = Prettify<IconButtonBaseProps>;\n\n/**\n * A specialized square button component for displaying icons in editor interfaces.\n *\n * Designed for toolbar actions, quick controls, and icon-based interactions.\n * Always square and sized appropriately for the contained icon.\n * Supports various border radius options from sharp corners to fully circular.\n *\n * @example\n * ```tsx\n * // Basic ghost button (default)\n * <IconButton aria-label=\"Save file\">\n * <SaveIcon />\n * </IconButton>\n *\n * // Circular filled button\n * <IconButton\n * variant=\"filled\"\n * radius=\"full\"\n * size=\"lg\"\n * aria-label=\"Add item\"\n * >\n * <AddIcon />\n * </IconButton>\n *\n * // Sharp corners for toolbar\n * <IconButton\n * variant=\"default\"\n * radius=\"none\"\n * aria-label=\"Settings\"\n * >\n * <SettingsIcon />\n * </IconButton>\n *\n * // Toggle state\n * <IconButton\n * pressed={isVisible}\n * radius=\"sm\"\n * aria-label=\"Toggle visibility\"\n * onClick={toggleVisibility}\n * >\n * <EyeIcon />\n * </IconButton>\n * ```\n */\nexport const IconButton = /*#__PURE__*/ React.memo<IconButtonProps>(\n ({\n children,\n className,\n size = 'md',\n variant = 'ghost',\n radius = 'md',\n disabled = false,\n loading = false,\n pressed = false,\n onClick,\n 'aria-label': ariaLabel,\n testId,\n style,\n ref,\n ...props\n }) => {\n return (\n <button\n ref={ref}\n className={cx(\n iconButtonRecipe({\n size,\n variant,\n radius,\n pressed: pressed || undefined,\n }),\n className\n )}\n disabled={disabled || loading}\n onClick={onClick}\n aria-label={ariaLabel}\n aria-pressed={pressed}\n data-testid={testId}\n style={style}\n {...props}\n >\n {loading ? (\n <div className={loadingSpinnerRecipe({ size })} />\n ) : (\n children\n )}\n </button>\n );\n }\n);\n\nIconButton.displayName = 'IconButton';\n"],"names":[],"mappings":";;;;;;AAqHA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2CG;AACI;;;;;;;AA4CL;AAGF;;"}
@@ -1,8 +1,8 @@
1
1
  "use client";
2
2
  import { jsxs, jsx } from 'react/jsx-runtime';
3
+ import React from 'react';
3
4
  import { inputWrapperRecipe } from '../../form/InputWrapper.css.js';
4
5
  import { cx } from '../../../utils/cx.js';
5
- import React from 'react';
6
6
  import { labelRecipe, iconStartStyle, inputRecipe, iconEndStyle, helperTextRecipe, inputContainerStyle } from './Input.css.js';
7
7
 
8
8
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"Input.js","sources":["../../../../../../src/components/primitives/Input/Input.tsx"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;AAiJA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmCG;AACI;AAyBL;AACA;AAEA;;AAEE;AACF;AAEA;;AAEE;AACF;AAEA;;AAEA;;;;;;AAoBO;AAiCT;AAEA;;"}
1
+ {"version":3,"file":"Input.js","sources":["src/components/primitives/Input/Input.tsx"],"sourcesContent":["'use client';\n\n// src/primitives/Input/Input.tsx\nimport React from 'react';\n\nimport { inputWrapperRecipe } from '@/components/form/InputWrapper.css';\nimport { cx } from '@/utils/cx';\n\nimport {\n inputContainerStyle,\n labelRecipe,\n inputRecipe,\n iconStartStyle,\n iconEndStyle,\n helperTextRecipe,\n} from './Input.css';\n\nimport type { Size } from '@/types/common';\nimport type { Prettify } from '@/types/utilities';\n\n/**\n * Standard input sizes using library sizing.\n */\nexport type InputSize = Size;\n\nexport interface InputBaseProps extends Omit<\n React.InputHTMLAttributes<HTMLInputElement>,\n 'onChange' | 'size' | 'css'\n> {\n /**\n * Input value (controlled)\n */\n value?: string | undefined;\n\n /**\n * Default value (uncontrolled)\n */\n defaultValue?: string | undefined;\n\n /**\n * Placeholder text\n */\n placeholder?: string | undefined;\n\n /**\n * Input type\n */\n type?:\n | 'text'\n | 'email'\n | 'password'\n | 'number'\n | 'search'\n | 'url'\n | 'tel'\n | undefined;\n\n /**\n * Input size using standard library sizing\n * - `sm`: 20px height, compact for toolbars\n * - `md`: 24px height, standard for forms\n * - `lg`: 32px height, prominent inputs\n * @default \"md\"\n */\n size?: InputSize;\n\n /**\n * Whether the input is disabled\n * @default false\n */\n disabled?: boolean;\n\n /**\n * Whether the input has an error state\n * @default false\n */\n error?: boolean;\n\n /**\n * Whether the input is required\n * @default false\n */\n required?: boolean;\n\n /**\n * Whether the input is read-only\n * @default false\n */\n readOnly?: boolean;\n\n /**\n * Input label\n */\n label?: string | undefined;\n\n /**\n * Helper text displayed below the input\n */\n helperText?: string | undefined;\n\n /**\n * Error message displayed when error is true\n */\n errorMessage?: string | undefined;\n\n /**\n * Icon displayed at the start of the input\n */\n startIcon?: React.ReactNode;\n\n /**\n * Icon displayed at the end of the input\n */\n endIcon?: React.ReactNode;\n\n /**\n * Change event handler — receives the new string value directly\n */\n onChange?: (value: string) => void;\n\n /**\n * Focus event handler\n */\n onFocus?: (event: React.FocusEvent<HTMLInputElement>) => void;\n\n /**\n * Blur event handler\n */\n onBlur?: (event: React.FocusEvent<HTMLInputElement>) => void;\n\n /**\n * Key down event handler\n */\n onKeyDown?: (event: React.KeyboardEvent<HTMLInputElement>) => void;\n\n /**\n * Test identifier for automated testing\n */\n testId?: string;\n\n ref?: React.Ref<HTMLInputElement>;\n}\n\n/**\n * Props for the Input component with prettified type for better IntelliSense\n */\nexport type InputProps = Prettify<InputBaseProps>;\n\n/**\n * A versatile input component for text entry in editor interfaces.\n *\n * Provides a clean, consistent text input with support for labels, helper text,\n * icons, and various states. Optimized for editor UIs with compact sizing.\n *\n * @example\n * ```tsx\n * // Basic text input\n * <Input\n * placeholder=\"Enter text...\"\n * value={text}\n * onChange={setText}\n * />\n *\n * // With label and helper text\n * <Input\n * label=\"Project Name\"\n * placeholder=\"My Project\"\n * helperText=\"Choose a unique name for your project\"\n * value={name}\n * onChange={setName}\n * />\n *\n * // With icons and error state\n * <Input\n * label=\"Email\"\n * type=\"email\"\n * startIcon={<SearchIcon />}\n * error={!!emailError}\n * errorMessage={emailError}\n * value={email}\n * onChange={setEmail}\n * />\n * ```\n */\nexport const Input: React.FC<InputProps> = ({\n value,\n defaultValue,\n placeholder,\n type = 'text',\n size = 'md',\n disabled = false,\n error = false,\n required = false,\n readOnly = false,\n label,\n helperText,\n errorMessage,\n startIcon,\n endIcon,\n className,\n style,\n onChange,\n onFocus,\n onBlur,\n onKeyDown,\n testId,\n ref,\n ...props\n}) => {\n const [focused, setFocused] = React.useState(false);\n const inputId = React.useId();\n\n const handleFocus = (event: React.FocusEvent<HTMLInputElement>) => {\n setFocused(true);\n onFocus?.(event);\n };\n\n const handleBlur = (event: React.FocusEvent<HTMLInputElement>) => {\n setFocused(false);\n onBlur?.(event);\n };\n\n const handleChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n onChange?.(event.target.value);\n };\n\n return (\n <div className={cx(inputContainerStyle, className)} style={style}>\n {label && (\n <label\n htmlFor={inputId}\n className={labelRecipe({ disabled: disabled || undefined })}\n >\n {label}\n {required && <span style={{ color: 'var(--accent-error)' }}> *</span>}\n </label>\n )}\n\n <div\n className={inputWrapperRecipe({\n size,\n error,\n disabled,\n focused,\n })}\n >\n {startIcon && <div className={iconStartStyle}>{startIcon}</div>}\n\n <input\n ref={ref}\n id={inputId}\n type={type}\n value={value}\n defaultValue={defaultValue}\n placeholder={placeholder}\n disabled={disabled}\n required={required}\n readOnly={readOnly}\n className={inputRecipe({ size })}\n onChange={onChange ? handleChange : undefined}\n onFocus={handleFocus}\n onBlur={handleBlur}\n onKeyDown={onKeyDown}\n data-testid={testId}\n {...props}\n />\n\n {endIcon && <div className={iconEndStyle}>{endIcon}</div>}\n </div>\n\n {(helperText ?? (error && errorMessage)) && (\n <div className={helperTextRecipe({ error: error || undefined })}>\n {error && errorMessage ? errorMessage : helperText}\n </div>\n )}\n </div>\n );\n};\n\nInput.displayName = 'Input';\n"],"names":[],"mappings":";;;;;;;AAoJA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmCG;AACI;AAyBL;AACA;AAEA;;AAEE;AACF;AAEA;;AAEE;AACF;AAEA;;AAEA;;;;;;AAoBO;AAiCT;AAEA;;"}
@@ -1,8 +1,8 @@
1
1
  "use client";
2
2
  import { jsx, jsxs } from 'react/jsx-runtime';
3
3
  import React, { useState, useEffect, useMemo } from 'react';
4
- import { getPlatform, parseShortcut, getKeyGlyph } from '../../../utils/platform.js';
5
4
  import { cx } from '../../../utils/cx.js';
5
+ import { getPlatform, parseShortcut, getKeyGlyph } from '../../../utils/platform.js';
6
6
  import { separatorStyle, keycapRecipe, kbdRoot } from './Kbd.css.js';
7
7
 
8
8
  function getKeys(children) {
@@ -1 +1 @@
1
- {"version":3,"file":"Kbd.js","sources":["../../../../../../src/components/primitives/Kbd/Kbd.tsx"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;AASA;AACE;AACE;;;AAIJ;AAEA;;;;;;;;;;;AAWG;;;;AAmBG;AACE;;AAEJ;AAEA;AACA;AAEA;AACE;AACE;;AAGF;AACF;;AA0BF;AAGF;;"}
1
+ {"version":3,"file":"Kbd.js","sources":["src/components/primitives/Kbd/Kbd.tsx"],"sourcesContent":["'use client';\n\nimport React, { useEffect, useMemo, useState } from 'react';\n\nimport { cx } from '@/utils/cx';\nimport { getKeyGlyph, getPlatform, parseShortcut } from '@/utils/platform';\n\nimport { kbdRoot, keycapRecipe, separatorStyle } from './Kbd.css';\n\nimport type { KbdProps } from './Kbd.types';\nimport type { Platform } from '@/utils/platform';\n\nfunction getKeys(children: React.ReactNode): React.ReactNode[] {\n if (typeof children === 'string') {\n return parseShortcut(children);\n }\n\n return React.Children.toArray(children);\n}\n\n/**\n * Render keyboard shortcuts with consistent keycap styling and platform-aware glyphs.\n *\n * Use Kbd for shortcut hints in menus, tooltips, command palettes, help overlays,\n * and keyboard reference panels.\n *\n * @example\n * ```tsx\n * <Kbd>Ctrl+S</Kbd>\n * <Kbd platform=\"mac\" separator={null}>Cmd+S</Kbd>\n * ```\n */\nexport const Kbd = /*#__PURE__*/ React.memo<KbdProps>(\n ({\n children,\n size = 'md',\n variant = 'outline',\n glyphs = true,\n platform = 'auto',\n separator = '+',\n className,\n style,\n testId,\n ref,\n ...rest\n }) => {\n const [platformDetected, setPlatformDetected] =\n useState<Platform>('windows');\n\n useEffect(() => {\n if (platform === 'auto') {\n setPlatformDetected(getPlatform());\n }\n }, [platform]);\n\n const platformResolved = platform === 'auto' ? platformDetected : platform;\n const keys = useMemo(() => getKeys(children), [children]);\n\n const renderKey = (key: React.ReactNode): React.ReactNode => {\n if (glyphs && typeof key === 'string') {\n return getKeyGlyph(key, platformResolved);\n }\n\n return key;\n };\n\n return (\n <span\n ref={ref}\n className={cx(kbdRoot, className)}\n style={style}\n data-testid={testId}\n {...rest}\n >\n {keys.map((key, index) => (\n <React.Fragment\n key={`${typeof key === 'string' ? key : index}-${index}`}\n >\n {index > 0 && separator !== null && (\n <span className={separatorStyle} aria-hidden=\"true\">\n {separator}\n </span>\n )}\n <kbd className={keycapRecipe({ size, variant })}>\n {renderKey(key)}\n </kbd>\n </React.Fragment>\n ))}\n </span>\n );\n }\n);\n\nKbd.displayName = 'Kbd';\n"],"names":[],"mappings":";;;;;;;AAYA;AACE;AACE;;;AAIJ;AAEA;;;;;;;;;;;AAWG;;;;AAmBG;AACE;;AAEJ;AAEA;AACA;AAEA;AACE;AACE;;AAGF;AACF;;AA0BF;AAGF;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"Link.js","sources":["../../../../../../src/components/primitives/Link/Link.tsx"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;AAgBA;AAEA;;;AAGG;AACH;AACE;AACA;AACA;;AAGF;AACE;AACA;AACA;;AAGF;AACE;AACE;AACA;AACD;AACD;AACE;AACA;AACD;AACD;AACE;AACA;AACD;;AAGH;AACE;AACA;AAAW;;AAEb;AAEA;;;;;;;AAOG;AACH;;;;;;;;;;;;;;;;;;;;AAqBA;;AAIE;AACE;;;AAGA;;AAEF;AACF;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;AAyBG;AACH;AAGE;AAkBA;AACA;AACA;;;;;;;;AAWE;;;;;AAMD;;;;;AAMD;;AAGE;;;;;;;;;;AAcA;AACI;;AAEE;AACH;;AAGL;AAEI;AACA;AACA;;;AAMJ;AA4BF;AAiBO;AACP;;"}
1
+ {"version":3,"file":"Link.js","sources":["src/components/primitives/Link/Link.tsx"],"sourcesContent":["'use client';\n\nimport { assignInlineVars } from '@vanilla-extract/dynamic';\nimport React from 'react';\n\nimport { ExternalLinkIcon } from '@/components/Icons/ExternalLinkIcon';\nimport { vars } from '@/theme/contract.css';\nimport { cx } from '@/utils/cx';\n\nimport {\n externalIconStyle,\n linkColorVar,\n linkHoverColorVar,\n linkRecipe,\n srOnlyStyle,\n} from './Link.css';\n\nimport type { LinkColor, LinkProps, LinkVariant } from './Link.types';\n\nconst EXTERNAL_PROTOCOL_RE = /^https?:\\/\\//i;\n\n/**\n * Defaults — keep variant and color in sync so consumers can pass either\n * (or both) without surprising results.\n */\nconst VARIANT_DEFAULT_COLOR: Record<LinkVariant, LinkColor> = {\n default: 'primary',\n subtle: 'secondary',\n inline: 'inherit',\n};\n\nconst VARIANT_DEFAULT_UNDERLINE = {\n default: 'hover',\n subtle: 'hover',\n inline: 'always',\n} as const;\n\nconst NAMED_COLOR_TOKENS: Record<string, { base: string; hover: string }> = {\n primary: {\n base: vars.colors.accent.primary,\n hover: vars.colors.accent.secondary,\n },\n secondary: {\n base: vars.colors.text.secondary,\n hover: vars.colors.accent.primary,\n },\n inherit: {\n base: 'inherit',\n hover: vars.colors.accent.primary,\n },\n};\n\nfunction resolveLinkColor(color: LinkColor): { base: string; hover: string } {\n const named = NAMED_COLOR_TOKENS[color];\n if (named) return named;\n return { base: color, hover: color };\n}\n\n/**\n * Props stripped from the rest spread when the link is disabled.\n *\n * Without this, `<Link as={RouterLink} disabled to=\"/x\" onClick={fn} />`\n * would still navigate / fire the handler — `aria-disabled` and CSS\n * pointer-events alone don't block keyboard activation or programmatic\n * triggers fired by router libraries.\n */\nconst NAV_PROPS_TO_STRIP_WHEN_DISABLED = [\n 'href',\n 'to',\n 'onClick',\n 'onClickCapture',\n 'onPointerDown',\n 'onPointerDownCapture',\n 'onMouseDown',\n 'onMouseDownCapture',\n 'onKeyDown',\n 'onKeyDownCapture',\n 'onKeyUp',\n 'onKeyUpCapture',\n 'onAuxClick',\n 'replace',\n 'reloadDocument',\n 'preventScrollReset',\n 'state',\n 'relative',\n] as const;\n\nfunction stripNavProps(\n props: Record<string, unknown>\n): Record<string, unknown> {\n const cleaned: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(props)) {\n if ((NAV_PROPS_TO_STRIP_WHEN_DISABLED as readonly string[]).includes(key)) {\n continue;\n }\n cleaned[key] = value;\n }\n return cleaned;\n}\n\n/**\n * Styled anchor primitive.\n *\n * Standardises link color, underline behavior, hover/focus states, and\n * external-link affordances. Polymorphic via `as` so it can wrap a\n * router's link component (react-router, TanStack Router, Next.js).\n *\n * Scope: **styling-only**, not router-aware. Pass your router's link\n * component via `as` for client-side navigation — the router's props\n * (`to`, `replace`, …) are type-checked automatically.\n *\n * @example\n * ```tsx\n * <Link href=\"/docs\">Documentation</Link>\n *\n * <Link href=\"https://example.com\">External</Link> // auto-detected\n *\n * <Link as={RouterLink} to=\"/profile\">\n * Profile\n * </Link>\n *\n * <Text>\n * Read the <Link variant=\"inline\" href=\"/guide\">guide</Link> first.\n * </Text>\n * ```\n */\nfunction LinkImpl<E extends React.ElementType = 'a'>(\n props: LinkProps<E>\n): React.ReactElement {\n const {\n href,\n as,\n variant,\n color,\n underline,\n size,\n external,\n disabled,\n children,\n className,\n style,\n testId,\n ref,\n 'aria-label': ariaLabel,\n ...rest\n } = props;\n\n const resolvedVariant: LinkVariant = variant ?? 'default';\n const resolvedSize = size ?? 'md';\n const isDisabled = disabled === true;\n const resolvedColor = color ?? VARIANT_DEFAULT_COLOR[resolvedVariant];\n const resolvedUnderline =\n underline ?? VARIANT_DEFAULT_UNDERLINE[resolvedVariant];\n\n // External affordances only apply when the link is actually navigable.\n // A disabled link with `external` would be misleading: no target, no\n // rel, no real navigation — but icon + \"opens in new tab\" suggest\n // otherwise. So we suppress all of it.\n const isExternal =\n !isDisabled &&\n (external ?? (typeof href === 'string' && EXTERNAL_PROTOCOL_RE.test(href)));\n\n const { base, hover } = resolveLinkColor(resolvedColor);\n const inlineVars = assignInlineVars({\n [linkColorVar]: base,\n [linkHoverColorVar]: hover,\n });\n\n // Disabled forces a non-navigating <span> regardless of `as`. If we\n // honored `as` while disabled, a router link would still respond to\n // `to` / `onClick` because pointer-events: none and aria-disabled are\n // visual hints, not functional locks for programmatic triggers.\n const Component: React.ElementType = isDisabled ? 'span' : (as ?? 'a');\n\n const cleanedRest = isDisabled\n ? stripNavProps(rest)\n : (rest as Record<string, unknown>);\n\n // Only set `href` when rendering a plain anchor and not disabled. For\n // custom `as` components (router links) the navigation prop is the\n // router's own (`to`, `href`, …), passed through `...rest`.\n const hrefProp =\n !isDisabled && Component === 'a' && href !== undefined ? { href } : {};\n\n const externalAttrs = isExternal\n ? { target: '_blank', rel: 'noopener noreferrer' }\n : {};\n\n const ariaLabelProp = ariaLabel\n ? {\n 'aria-label': isExternal\n ? `${ariaLabel} (opens in new tab)`\n : ariaLabel,\n }\n : {};\n\n const linkClassName = cx(\n linkRecipe({\n variant: resolvedVariant,\n underline: resolvedUnderline,\n size: resolvedSize,\n disabled: isDisabled || undefined,\n }),\n className\n );\n\n return (\n <Component\n {...cleanedRest}\n {...hrefProp}\n {...externalAttrs}\n {...ariaLabelProp}\n ref={ref}\n className={linkClassName}\n style={{ ...inlineVars, ...style }}\n data-testid={testId}\n data-disabled={isDisabled || undefined}\n aria-disabled={isDisabled || undefined}\n >\n {children}\n {isExternal && (\n <>\n <ExternalLinkIcon\n className={externalIconStyle}\n size=\"0.75em\"\n decorative\n />\n {!ariaLabel && (\n <span className={srOnlyStyle}> (opens in new tab)</span>\n )}\n </>\n )}\n </Component>\n );\n}\n\n/**\n * Public Link signature.\n *\n * Modelled as a callable interface so the polymorphic generic\n * (`<Link as={RouterLink} to=\"/x\" />`) survives the export. `React.memo`\n * is intentionally not applied here — wrapping a generic function in\n * `memo` collapses the call signature and forces an `as unknown as` cast,\n * which the codebase forbids. The library has precedent for non-memoised\n * primitives (e.g. `Switch`), and Link's render is cheap.\n */\ninterface LinkComponent {\n <E extends React.ElementType = 'a'>(props: LinkProps<E>): React.ReactElement;\n displayName?: string;\n}\n\nexport const Link = LinkImpl as LinkComponent;\nLink.displayName = 'Link';\n"],"names":[],"mappings":";;;;;;;;AAmBA;AAEA;;;AAGG;AACH;AACE;AACA;AACA;;AAGF;AACE;AACA;AACA;;AAGF;AACE;AACE;AACA;AACD;AACD;AACE;AACA;AACD;AACD;AACE;AACA;AACD;;AAGH;AACE;AACA;AAAW;;AAEb;AAEA;;;;;;;AAOG;AACH;;;;;;;;;;;;;;;;;;;;AAqBA;;AAIE;AACE;;;AAGA;;AAEF;AACF;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;AAyBG;AACH;AAGE;AAkBA;AACA;AACA;;;;;;;;AAWE;;;;;AAMD;;;;;AAMD;;AAGE;;;;;;;;;;AAcA;AACI;;AAEE;AACH;;AAGL;AAEI;AACA;AACA;;;AAMJ;AA4BF;AAiBO;AACP;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"Paper.js","sources":["../../../../../../src/components/primitives/Paper/Paper.tsx"],"sourcesContent":[null],"names":[],"mappings":";;;;;;AAqGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+CG;;AAgBC;AAEI;AACI;;AAGI;AACL;;;;;;;;;AAuBT;AAGF;;"}
1
+ {"version":3,"file":"Paper.js","sources":["src/components/primitives/Paper/Paper.tsx"],"sourcesContent":["'use client';\n\n// src/components/primitives/Paper/Paper.tsx\nimport React from 'react';\n\nimport { cx } from '@/utils/cx';\n\nimport { paperRecipe } from './Paper.css';\n\nimport type { Prettify } from '@/types/utilities';\n\n/**\n * Paper elevation levels (shadow intensity)\n */\nexport type PaperElevation = 0 | 1 | 2 | 3;\n\n/**\n * Paper nesting levels for automatic background adjustment\n * Higher levels get progressively lighter backgrounds\n */\nexport type PaperNestLevel = 0 | 1 | 2 | 3;\n\n/**\n * Paper spacing variants based on theme spacing tokens\n */\nexport type PaperSpacing = 'xs' | 'sm' | 'md' | 'lg' | 'xl' | 'xxl' | 'xxxl';\n\nexport interface PaperBaseProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n 'css'\n> {\n /**\n * Paper content - any React elements\n */\n children?: React.ReactNode;\n\n /**\n * Paper elevation level controlling shadow intensity\n * - `0`: No shadow (flat)\n * - `1`: Small shadow (subtle depth)\n * - `2`: Medium shadow (moderate depth)\n * - `3`: Large shadow (high depth)\n * @default 1\n */\n elevation?: PaperElevation;\n\n /**\n * Whether to show border around the paper\n * Uses theme border color with subtle opacity\n * @default false\n */\n bordered?: boolean;\n\n /**\n * Internal padding using theme spacing tokens\n * - `xs`: 2px padding\n * - `sm`: 4px padding\n * - `md`: 8px padding (default)\n * - `lg`: 12px padding\n * - `xl`: 16px padding\n * - `xxl`: 24px padding\n * - `xxxl`: 32px padding\n * @default \"md\"\n */\n padding?: PaperSpacing;\n\n /**\n * Nesting level for automatic background adjustment\n * Higher levels get progressively lighter backgrounds for better visual hierarchy\n * - `0`: Primary background (darkest)\n * - `1`: Secondary background\n * - `2`: Tertiary background\n * - `3`: Elevated background (lightest)\n * @default 0\n */\n nestLevel?: PaperNestLevel;\n\n /**\n * Whether the paper should expand to fill available space\n * Sets width and height to 100%\n * @default false\n */\n expand?: boolean;\n\n /**\n * Custom border radius override\n * Overrides default theme border radius if provided\n * @example \"8px\", \"50%\", \"0\"\n */\n customRadius?: string | number;\n\n /**\n * Test identifier for automated testing\n */\n testId?: string;\n\n ref?: React.Ref<HTMLDivElement>;\n}\n\n/**\n * Props for the Paper component with prettified type for better IntelliSense\n */\nexport type PaperProps = Prettify<PaperBaseProps>;\n\n/**\n * A versatile paper component providing surface elevation and visual hierarchy.\n *\n * Perfect for creating cards, panels, modals, and any content that needs to stand out\n * from the background. Supports elevation shadows, automatic background adjustment\n * for nested components, and flexible spacing control.\n *\n * @example\n * ```tsx\n * // Basic paper with elevation\n * <Paper elevation={2} padding=\"lg\">\n * <h3>Card Title</h3>\n * <p>Card content goes here</p>\n * </Paper>\n *\n * // Nested papers with automatic background adjustment\n * <Paper nestLevel={0} padding=\"xl\">\n * <h2>Main Container</h2>\n * <Paper nestLevel={1} padding=\"lg\">\n * <h3>Nested Section</h3>\n * <Paper nestLevel={2} padding=\"md\">\n * <p>Deeply nested content</p>\n * </Paper>\n * </Paper>\n * </Paper>\n *\n * // Bordered paper without shadow\n * <Paper elevation={0} bordered padding=\"md\">\n * <p>Subtle outlined container</p>\n * </Paper>\n *\n * // Full-width expanded paper\n * <Paper expand elevation={1} padding=\"lg\">\n * <header>Full width header</header>\n * <main>Main content area</main>\n * </Paper>\n *\n * // Custom radius paper\n * <Paper elevation={2} customRadius=\"12px\" padding=\"lg\">\n * <p>Paper with custom border radius</p>\n * </Paper>\n *\n * // Compact paper for small UI elements\n * <Paper elevation={1} padding=\"xs\">\n * <Icon name=\"settings\" />\n * </Paper>\n * ```\n */\nexport const Paper = /*#__PURE__*/ React.memo<PaperProps>(\n ({\n children,\n elevation = 1,\n bordered = false,\n padding = 'md',\n nestLevel = 0,\n expand = false,\n customRadius,\n className,\n testId,\n style,\n ref,\n ...htmlProps\n }) => {\n const customRadiusStyle =\n customRadius !== undefined\n ? {\n borderRadius:\n typeof customRadius === 'number'\n ? `${customRadius}px`\n : customRadius,\n }\n : undefined;\n\n return (\n <div\n ref={ref}\n className={cx(\n paperRecipe({\n elevation,\n bordered: bordered || undefined,\n padding,\n nestLevel,\n expand: expand || undefined,\n }),\n className\n )}\n data-testid={testId}\n style={{ ...customRadiusStyle, ...style }}\n {...htmlProps}\n >\n {children}\n </div>\n );\n }\n);\n\nPaper.displayName = 'Paper';\n"],"names":[],"mappings":";;;;;;AAwGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+CG;;AAgBC;AAEI;AACI;;AAGI;AACL;;;;;;;;;AAuBT;AAGF;;"}
@@ -1,7 +1,7 @@
1
1
  "use client";
2
2
  import { jsx } from 'react/jsx-runtime';
3
- import { useId, useRef, useState, useCallback, useMemo, createContext, useContext } from 'react';
4
3
  import { useFloating, autoUpdate, offset, flip, shift, useClick, useDismiss, useInteractions } from '@floating-ui/react';
4
+ import { useId, useRef, useState, useCallback, useMemo, createContext, useContext } from 'react';
5
5
 
6
6
  // --- Context ---
7
7
  const PopoverContext = /*#__PURE__*/ createContext(null);
@@ -1 +1 @@
1
- {"version":3,"file":"Popover.js","sources":["../../../../../../src/components/primitives/Popover/Popover.tsx"],"sourcesContent":[null],"names":[],"mappings":";;;;;AAwBA;AAEA;;AAKE;;AAEE;;AAIF;AACF;AAEA;AAEA;;;;;;;;;;;;;;;;;;AAkBG;;AAcD;AACA;AACA;;AAGA;;AAGA;;;;AAKI;AACF;AAIF;;AAEA;AAEA;;;AAGI;;AAEJ;AAEA;;AAEI;;;AAEA;;;;;AAMF;AACA;AACA;AACA;AACA;AACD;;AAGD;AACA;AACE;AACA;AACD;AAED;;;AAGC;AAED;;AAGI;AACA;;;;;;;;AAQA;;AAEA;;AAEA;;;AAGD;;;;;;;;;;;;;;;AAgBA;AAGH;AAKF;AAEA;;"}
1
+ {"version":3,"file":"Popover.js","sources":["src/components/primitives/Popover/Popover.tsx"],"sourcesContent":["'use client';\n\nimport {\n useFloating,\n offset as offsetMiddleware,\n flip,\n shift,\n autoUpdate,\n useClick,\n useDismiss,\n useInteractions,\n} from '@floating-ui/react';\nimport React, {\n createContext,\n useCallback,\n useContext,\n useId,\n useMemo,\n useRef,\n useState,\n} from 'react';\n\nimport type { PopoverContextValue, PopoverProps } from './Popover.types';\n\n// --- Context ---\n\nconst PopoverContext = /*#__PURE__*/ createContext<PopoverContextValue | null>(\n null\n);\n\nexport function usePopoverContext(): PopoverContextValue {\n const ctx = useContext(PopoverContext);\n if (!ctx) {\n throw new Error(\n 'Popover compound components must be used within <Popover>'\n );\n }\n return ctx;\n}\n\n// --- Component ---\n\n/**\n * Popover component — a floating content container for interactive content\n * anchored to a trigger element.\n *\n * Uses @floating-ui/react for robust positioning with collision detection,\n * flip/shift behavior, and scroll-aware auto-updating.\n *\n * @example\n * ```tsx\n * <Popover>\n * <PopoverTrigger>\n * <Button>Open</Button>\n * </PopoverTrigger>\n * <PopoverContent>\n * <p>Popover content</p>\n * </PopoverContent>\n * </Popover>\n * ```\n */\nexport const Popover: React.FC<PopoverProps> = ({\n open: openProp,\n defaultOpen = false,\n placement = 'bottom-start',\n offset = 8,\n closeOnClickOutside = true,\n closeOnEscape = true,\n returnFocus = true,\n portal = true,\n matchTriggerWidth = false,\n children,\n onOpenChange,\n}) => {\n const autoId = useId();\n const triggerRef = useRef<HTMLElement | null>(null);\n const contentRef = useRef<HTMLDivElement | null>(null);\n\n const [internalOpen, setInternalOpen] = useState(defaultOpen);\n const isControlled = openProp !== undefined;\n const isOpen = isControlled ? openProp : internalOpen;\n\n const handleOpenChange = useCallback(\n (nextOpen: boolean) => {\n if (!isControlled) {\n setInternalOpen(nextOpen);\n }\n onOpenChange?.(nextOpen);\n },\n [isControlled, onOpenChange]\n );\n\n const openPopover = useCallback(() => {\n handleOpenChange(true);\n }, [handleOpenChange]);\n\n const closePopover = useCallback(() => {\n handleOpenChange(false);\n if (returnFocus) {\n triggerRef.current?.focus();\n }\n }, [handleOpenChange, returnFocus]);\n\n const toggle = useCallback(() => {\n if (isOpen) {\n closePopover();\n } else {\n openPopover();\n }\n }, [isOpen, openPopover, closePopover]);\n\n // Floating UI setup\n const { refs, floatingStyles, context } = useFloating({\n open: isOpen,\n onOpenChange: handleOpenChange,\n placement: placement,\n middleware: [offsetMiddleware(offset), flip(), shift({ padding: 8 })],\n whileElementsMounted: autoUpdate,\n });\n\n // Interactions\n const click = useClick(context);\n const dismiss = useDismiss(context, {\n outsidePress: closeOnClickOutside,\n escapeKey: closeOnEscape,\n });\n\n const { getReferenceProps, getFloatingProps } = useInteractions([\n click,\n dismiss,\n ]);\n\n const contextValue: PopoverContextValue = useMemo(\n () => ({\n isOpen,\n open: openPopover,\n close: closePopover,\n toggle,\n triggerRef,\n contentRef,\n placement,\n offset,\n portal,\n matchTriggerWidth,\n popoverId: autoId,\n // Floating UI context\n floatingRefs: refs,\n floatingStyles,\n floatingContext: context,\n getReferenceProps,\n getFloatingProps,\n }),\n [\n isOpen,\n openPopover,\n closePopover,\n toggle,\n placement,\n offset,\n portal,\n matchTriggerWidth,\n autoId,\n refs,\n floatingStyles,\n context,\n getReferenceProps,\n getFloatingProps,\n ]\n );\n\n return (\n <PopoverContext.Provider value={contextValue}>\n {children}\n </PopoverContext.Provider>\n );\n};\n\nPopover.displayName = 'Popover';\n"],"names":[],"mappings":";;;;;AAwBA;AAEA;;AAKE;;AAEE;;AAIF;AACF;AAEA;AAEA;;;;;;;;;;;;;;;;;;AAkBG;;AAcD;AACA;AACA;;AAGA;;AAGA;;;;AAKI;AACF;AAIF;;AAEA;AAEA;;;AAGI;;AAEJ;AAEA;;AAEI;;;AAEA;;;;;AAMF;AACA;AACA;AACA;AACA;AACD;;AAGD;AACA;AACE;AACA;AACD;AAED;;;AAGC;AAED;;AAGI;AACA;;;;;;;;AAQA;;AAEA;;AAEA;;;AAGD;;;;;;;;;;;;;;;AAgBA;AAGH;AAKF;AAEA;;"}
@@ -2,8 +2,8 @@
2
2
  import { jsx } from 'react/jsx-runtime';
3
3
  import { useCallback } from 'react';
4
4
  import { CloseIcon } from '../../Icons/CloseIcon.js';
5
- import { usePopoverContext } from './Popover.js';
6
5
  import { cx } from '../../../utils/cx.js';
6
+ import { usePopoverContext } from './Popover.js';
7
7
  import { closeButtonStyle } from './Popover.css.js';
8
8
 
9
9
  // --- Component ---
@@ -1 +1 @@
1
- {"version":3,"file":"PopoverClose.js","sources":["../../../../../../src/components/primitives/Popover/PopoverClose.tsx"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;AASA;;AAUE;AAEA;;AAGI;AACF;;AAkBJ;AAEA;;"}
1
+ {"version":3,"file":"PopoverClose.js","sources":["src/components/primitives/Popover/PopoverClose.tsx"],"sourcesContent":["'use client';\n\nimport React, { useCallback } from 'react';\n\nimport { CloseIcon } from '@/components/Icons/CloseIcon';\nimport { cx } from '@/utils/cx';\n\nimport { usePopoverContext } from './Popover';\nimport { closeButtonStyle } from './Popover.css';\n\nimport type { PopoverCloseProps } from './Popover.types';\n\n// --- Component ---\n\nexport const PopoverClose: React.FC<PopoverCloseProps> = ({\n children,\n className,\n style,\n testId,\n ref,\n ...rest\n}) => {\n const { close } = usePopoverContext();\n\n const handleClick = useCallback(\n (e: React.MouseEvent<HTMLButtonElement>) => {\n e.stopPropagation();\n close();\n },\n [close]\n );\n\n return (\n <button\n ref={ref}\n type=\"button\"\n aria-label=\"Close\"\n onClick={handleClick}\n className={cx(closeButtonStyle, className)}\n style={style}\n data-testid={testId}\n {...rest}\n >\n {children ?? <CloseIcon size=\"sm\" decorative />}\n </button>\n );\n};\n\nPopoverClose.displayName = 'PopoverClose';\n"],"names":[],"mappings":";;;;;;;;AAYA;;AAUE;AAEA;;AAGI;AACF;;AAkBJ;AAEA;;"}
@@ -1,10 +1,10 @@
1
1
  "use client";
2
2
  import { jsx } from 'react/jsx-runtime';
3
+ import { FloatingFocusManager } from '@floating-ui/react';
3
4
  import { useState, useCallback, useEffect } from 'react';
4
5
  import { createPortal } from 'react-dom';
5
- import { FloatingFocusManager } from '@floating-ui/react';
6
- import { usePopoverContext } from './Popover.js';
7
6
  import { cx } from '../../../utils/cx.js';
7
+ import { usePopoverContext } from './Popover.js';
8
8
  import { contentPanelRecipe } from './Popover.css.js';
9
9
 
10
10
  // --- Component ---
@@ -20,8 +20,7 @@ const PopoverContent = ({ children, width, maxHeight, padding = 'md', className,
20
20
  externalRef(node);
21
21
  }
22
22
  else if (externalRef && typeof externalRef === 'object') {
23
- externalRef.current =
24
- node;
23
+ externalRef.current = node;
25
24
  }
26
25
  }, [contentRef, floatingRefs, externalRef]);
27
26
  // Trigger enter animation on next frame after open
@@ -32,6 +31,9 @@ const PopoverContent = ({ children, width, maxHeight, padding = 'md', className,
32
31
  });
33
32
  }
34
33
  else {
34
+ // Reset enter-animation state on close; gated by the `isOpen` prop, so
35
+ // this is a one-shot transition rather than continuous state sync.
36
+ // eslint-disable-next-line react-hooks/set-state-in-effect
35
37
  setVisible(false);
36
38
  }
37
39
  }, [isOpen]);
@@ -1 +1 @@
1
- {"version":3,"file":"PopoverContent.js","sources":["../../../../../../src/components/primitives/Popover/PopoverContent.tsx"],"sourcesContent":[null],"names":[],"mappings":";;;;;;;;;AAUA;AAEO;;;AAwBL;;AAGA;AAEI;AACA;AACA;;;AAEO;AACJ;AACC;;;;;;;;AAWJ;;;;;AAIJ;;AAGE;;;;AAKA;AACE;AACA;;;AAKJ;;;AAIA;AACE;AACE;;AAEJ;AACE;AACE;AACF;;AAGF;;;AAWS;AAID;AACA;AACA;;;;;AAeR;AACF;AAEA;;"}
1
+ {"version":3,"file":"PopoverContent.js","sources":["src/components/primitives/Popover/PopoverContent.tsx"],"sourcesContent":["'use client';\n\nimport { FloatingFocusManager } from '@floating-ui/react';\nimport React, { useCallback, useEffect, useState } from 'react';\nimport { createPortal } from 'react-dom';\n\nimport { cx } from '@/utils/cx';\n\nimport { usePopoverContext } from './Popover';\nimport { contentPanelRecipe } from './Popover.css';\n\nimport type { PopoverContentProps } from './Popover.types';\n\n// --- Component ---\n\nexport const PopoverContent: React.FC<PopoverContentProps> = ({\n children,\n width,\n maxHeight,\n padding = 'md',\n className,\n style,\n testId,\n ref: externalRef,\n ...rest\n}) => {\n const {\n isOpen,\n contentRef,\n portal,\n matchTriggerWidth,\n popoverId,\n floatingRefs,\n floatingStyles,\n floatingContext,\n getFloatingProps,\n } = usePopoverContext();\n\n const [visible, setVisible] = useState(false);\n const contentId = `popover-${popoverId}-content`;\n\n // Set ref\n const setRef = useCallback(\n (node: HTMLDivElement | null) => {\n contentRef.current = node;\n floatingRefs.setFloating(node);\n if (typeof externalRef === 'function') {\n externalRef(node);\n } else if (externalRef && typeof externalRef === 'object') {\n externalRef.current = node;\n }\n },\n [contentRef, floatingRefs, externalRef]\n );\n\n // Trigger enter animation on next frame after open\n useEffect(() => {\n if (isOpen) {\n requestAnimationFrame(() => {\n setVisible(true);\n });\n } else {\n // Reset enter-animation state on close; gated by the `isOpen` prop, so\n // this is a one-shot transition rather than continuous state sync.\n // eslint-disable-next-line react-hooks/set-state-in-effect\n setVisible(false);\n }\n }, [isOpen]);\n\n if (!isOpen) {\n return null;\n }\n\n // Get trigger width for matchTriggerWidth\n const triggerWidth = matchTriggerWidth\n ? floatingRefs.reference.current\n ? (floatingRefs.reference.current as HTMLElement).offsetWidth\n : undefined\n : undefined;\n\n const computedWidth = matchTriggerWidth ? triggerWidth : width;\n\n const floatingProps = getFloatingProps();\n\n // Build dimension styles\n const dimensionStyles: React.CSSProperties = {};\n if (computedWidth != null) {\n dimensionStyles.width =\n typeof computedWidth === 'number' ? `${computedWidth}px` : computedWidth;\n }\n if (maxHeight != null) {\n dimensionStyles.maxHeight =\n typeof maxHeight === 'number' ? `${maxHeight}px` : maxHeight;\n dimensionStyles.overflowY = 'auto';\n }\n\n const contentElement = (\n <FloatingFocusManager context={floatingContext} modal={false}>\n <div\n ref={setRef}\n role=\"dialog\"\n id={contentId}\n tabIndex={-1}\n className={cx(\n contentPanelRecipe({\n padding,\n visible: visible || undefined,\n }),\n className\n )}\n style={{\n ...floatingStyles,\n ...dimensionStyles,\n ...style,\n }}\n data-testid={testId}\n {...floatingProps}\n {...rest}\n >\n {children}\n </div>\n </FloatingFocusManager>\n );\n\n if (portal) {\n return createPortal(contentElement, document.body);\n }\n\n return contentElement;\n};\n\nPopoverContent.displayName = 'PopoverContent';\n"],"names":[],"mappings":";;;;;;;;;AAaA;AAEO;;;AAwBL;;AAGA;AAEI;AACA;AACA;;;AAEO;AACL;;;;;;;;AAWF;;;;;;;;AAOJ;;AAGE;;;;AAKA;AACE;AACA;;;AAKJ;;;AAIA;AACE;AACE;;AAEJ;AACE;AACE;AACF;;AAGF;;;AAWS;AAID;AACA;AACA;;;;;AAeR;AACF;AAEA;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"PopoverTrigger.js","sources":["../../../../../../src/components/primitives/Popover/PopoverTrigger.tsx"],"sourcesContent":[null],"names":[],"mappings":";;;;AAMA;;;AAGG;;AAED;AAQA;AAEA;;AAGI;AACF;AAIF;AAEI;AACA;AACF;;;AAMA;;;AAIA;AACD;AAED;AAGI;AACA;AACA;AACA;;AAED;AAEL;AAEA;;"}
1
+ {"version":3,"file":"PopoverTrigger.js","sources":["src/components/primitives/Popover/PopoverTrigger.tsx"],"sourcesContent":["'use client';\n\nimport React, { useCallback } from 'react';\n\nimport { usePopoverContext } from './Popover';\n\nimport type { PopoverTriggerProps } from './Popover.types';\n\n/**\n * Wraps the trigger element for a Popover.\n * Clicking the trigger toggles the popover open/closed.\n */\nexport const PopoverTrigger: React.FC<PopoverTriggerProps> = ({ children }) => {\n const {\n toggle,\n isOpen,\n triggerRef,\n popoverId,\n floatingRefs,\n getReferenceProps,\n } = usePopoverContext();\n const contentId = `popover-${popoverId}-content`;\n\n const handleClick = useCallback(\n (e: React.MouseEvent) => {\n e.stopPropagation();\n toggle();\n },\n [toggle]\n );\n\n const setRef = useCallback(\n (node: HTMLElement | null) => {\n triggerRef.current = node;\n floatingRefs.setReference(node);\n },\n [triggerRef, floatingRefs]\n );\n\n // Clone the child element to add props\n if (!React.isValidElement(children)) {\n return null;\n }\n\n const referenceProps = getReferenceProps({\n onClick: handleClick,\n });\n\n return React.cloneElement(\n children as React.ReactElement<Record<string, unknown>>,\n {\n ref: setRef,\n ...referenceProps,\n 'aria-haspopup': 'dialog',\n 'aria-expanded': isOpen,\n 'aria-controls': isOpen ? contentId : undefined,\n }\n );\n};\n\nPopoverTrigger.displayName = 'PopoverTrigger';\n"],"names":[],"mappings":";;;;AAQA;;;AAGG;;AAED;AAQA;AAEA;;AAGI;AACF;AAIF;AAEI;AACA;AACF;;;AAMA;;;AAIA;AACD;AAED;AAGI;AACA;AACA;AACA;;AAED;AAEL;AAEA;;"}
@@ -1,11 +1,11 @@
1
1
  "use client";
2
2
  import { jsxs, jsx } from 'react/jsx-runtime';
3
- import React, { useContext, useId, useState, useCallback } from 'react';
4
3
  import { assignInlineVars } from '@vanilla-extract/dynamic';
4
+ import React, { useContext, useId, useState, useCallback } from 'react';
5
5
  import { FormHelperText } from '../../form/FormHelperText.js';
6
6
  import { cx } from '../../../utils/cx.js';
7
- import { RadioGroupContext } from './RadioGroup.js';
8
7
  import { innerSizeVar, outerSizeVar, visuallyHiddenInputStyle, radioDotRecipe, radioOuterRecipe, radioLabelTextStyle, radioLabelRecipe, radioContainerStyle } from './Radio.css.js';
8
+ import { RadioGroupContext } from './RadioGroup.js';
9
9
 
10
10
  const OUTER_SIZES = {
11
11
  sm: 12,
@@ -87,7 +87,7 @@ const Radio = /*#__PURE__*/ React.memo(({ value, checked: checkedProp, defaultCh
87
87
  labelPosition,
88
88
  size,
89
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({
90
+ }), children: [jsx("input", { ref: ref, type: "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
91
  checked: resolvedChecked || undefined,
92
92
  disabled: disabled || undefined,
93
93
  error: error || undefined,
@@ -1 +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;;"}
1
+ {"version":3,"file":"Radio.js","sources":["src/components/primitives/Radio/Radio.tsx"],"sourcesContent":["'use client';\n\nimport { assignInlineVars } from '@vanilla-extract/dynamic';\nimport React, { useCallback, useContext, useId, useState } from 'react';\n\nimport { FormHelperText } from '@/components/form/FormHelperText';\nimport { cx } from '@/utils/cx';\n\nimport {\n innerSizeVar,\n outerSizeVar,\n radioContainerStyle,\n radioDotRecipe,\n radioLabelRecipe,\n radioLabelTextStyle,\n radioOuterRecipe,\n visuallyHiddenInputStyle,\n} from './Radio.css';\nimport { RadioGroupContext } from './RadioGroup';\n\nimport type { RadioProps, RadioSize } from './Radio.types';\n\nconst OUTER_SIZES: Record<RadioSize, number> = {\n sm: 12,\n md: 14,\n lg: 16,\n};\n\nconst INNER_SIZES: Record<RadioSize, number> = {\n sm: 6,\n md: 6,\n lg: 8,\n};\n\n/**\n * Radio component for mutually exclusive selection in property panels,\n * settings, and form interfaces.\n *\n * Works standalone (controlled or uncontrolled) or as a child of `RadioGroup`,\n * which manages exclusive selection across siblings via context. When inside\n * a `RadioGroup`, the group's `value`, `name`, `size`, `disabled`, and `error`\n * override the corresponding props on individual radios.\n *\n * @example\n * ```tsx\n * <Radio value=\"local\" label=\"Local\" />\n *\n * <RadioGroup value={space} onChange={setSpace} label=\"Coordinate space\">\n * <Radio value=\"local\" label=\"Local\" />\n * <Radio value=\"world\" label=\"World\" />\n * <Radio value=\"parent\" label=\"Parent\" />\n * </RadioGroup>\n * ```\n */\nexport const Radio = /*#__PURE__*/ React.memo<RadioProps>(\n ({\n value,\n checked: checkedProp,\n defaultChecked = false,\n label,\n labelPosition = 'right',\n size: sizeProp,\n disabled: disabledProp,\n helperText,\n error: errorProp,\n errorMessage,\n name: nameProp,\n onChange,\n className,\n style,\n testId,\n ref,\n id: idProp,\n ...rest\n }) => {\n const groupContext = useContext(RadioGroupContext);\n const autoId = useId();\n const radioId = idProp ?? autoId;\n const helperId = `${radioId}-helper`;\n\n const [internalChecked, setInternalChecked] = useState(defaultChecked);\n const isControlled = checkedProp !== undefined;\n const isGrouped = groupContext !== null;\n\n // Group context overrides individual props when present\n const size: RadioSize = isGrouped ? groupContext.size : (sizeProp ?? 'md');\n const disabled = isGrouped\n ? groupContext.disabled\n : (disabledProp ?? false);\n const error = isGrouped ? groupContext.error : (errorProp ?? false);\n const name = isGrouped ? groupContext.name : nameProp;\n\n let resolvedChecked: boolean;\n if (isGrouped) {\n resolvedChecked = groupContext.value === value;\n } else if (isControlled) {\n resolvedChecked = checkedProp;\n } else {\n resolvedChecked = internalChecked;\n }\n\n const handleChange = useCallback(\n (event: React.ChangeEvent<HTMLInputElement>) => {\n if (disabled) return;\n\n if (isGrouped) {\n groupContext.onChange(value, event);\n return;\n }\n\n if (!isControlled) {\n setInternalChecked(true);\n }\n\n onChange?.(value, event);\n },\n [disabled, isGrouped, groupContext, value, isControlled, onChange]\n );\n\n const showHelperText =\n !isGrouped && error && errorMessage\n ? errorMessage\n : !isGrouped\n ? helperText\n : undefined;\n\n const outerInlineVars = assignInlineVars({\n [outerSizeVar]: `${OUTER_SIZES[size]}px`,\n [innerSizeVar]: `${INNER_SIZES[size]}px`,\n });\n\n const labelNode = (\n <label\n className={radioLabelRecipe({\n labelPosition,\n size,\n disabled: disabled || undefined,\n })}\n >\n {/* aria-invalid surfaces the error state to assistive tech and is part\n of this component's documented/tested API; jsx-a11y's role support\n table for the implicit radio role is overly strict here. */}\n {/* eslint-disable-next-line jsx-a11y/role-supports-aria-props */}\n <input\n ref={ref}\n type=\"radio\"\n id={radioId}\n name={name}\n value={value}\n checked={resolvedChecked}\n disabled={disabled}\n aria-checked={resolvedChecked}\n aria-disabled={disabled || undefined}\n aria-invalid={error || undefined}\n aria-describedby={showHelperText ? helperId : undefined}\n onChange={handleChange}\n className={visuallyHiddenInputStyle}\n data-testid={testId}\n {...rest}\n />\n <span\n aria-hidden=\"true\"\n className={radioOuterRecipe({\n checked: resolvedChecked || undefined,\n disabled: disabled || undefined,\n error: error || undefined,\n })}\n style={outerInlineVars}\n >\n <span\n className={radioDotRecipe({\n checked: resolvedChecked || undefined,\n error: error || undefined,\n })}\n />\n </span>\n {label && <span className={radioLabelTextStyle}>{label}</span>}\n </label>\n );\n\n if (!showHelperText) {\n if (className || style) {\n return (\n <div className={cx(radioContainerStyle, className)} style={style}>\n {labelNode}\n </div>\n );\n }\n return labelNode;\n }\n\n return (\n <div className={cx(radioContainerStyle, className)} style={style}>\n {labelNode}\n <FormHelperText id={helperId} error={error}>\n {showHelperText}\n </FormHelperText>\n </div>\n );\n }\n);\n\nRadio.displayName = 'Radio';\n"],"names":[],"mappings":";;;;;;;;;AAsBA;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;;;;;;;AAoCI;;AAQP;AACE;;AAMF;;AAGF;AAQF;AAGF;;"}
@@ -1,9 +1,9 @@
1
1
  "use client";
2
2
  import { jsxs, jsx } from 'react/jsx-runtime';
3
- import React, { useId, useState, useCallback, useMemo, createContext } from 'react';
4
3
  import { assignInlineVars } from '@vanilla-extract/dynamic';
5
- import { FormLabel } from '../../form/FormLabel.js';
4
+ import React, { useId, useState, useCallback, useMemo, createContext } from 'react';
6
5
  import { FormHelperText } from '../../form/FormHelperText.js';
6
+ import { FormLabel } from '../../form/FormLabel.js';
7
7
  import { vars } from '../../../theme/contract.css.js';
8
8
  import { cx } from '../../../utils/cx.js';
9
9
  import { groupItemsStyle, groupSpacingVar, groupOrientationVar, groupContainerStyle } from './Radio.css.js';
@@ -1 +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
+ {"version":3,"file":"RadioGroup.js","sources":["src/components/primitives/Radio/RadioGroup.tsx"],"sourcesContent":["'use client';\n\nimport { assignInlineVars } from '@vanilla-extract/dynamic';\nimport React, {\n createContext,\n useCallback,\n useId,\n useMemo,\n useState,\n} from 'react';\n\nimport { FormHelperText } from '@/components/form/FormHelperText';\nimport { FormLabel } from '@/components/form/FormLabel';\nimport { vars } from '@/theme/contract.css';\nimport { cx } from '@/utils/cx';\n\nimport {\n groupContainerStyle,\n groupItemsStyle,\n groupOrientationVar,\n groupSpacingVar,\n} from './Radio.css';\n\nimport type { RadioGroupContextValue, RadioGroupProps } from './Radio.types';\n\nexport const RadioGroupContext =\n /*#__PURE__*/ createContext<RadioGroupContextValue | null>(null);\n\nconst SPACING_SCALE: readonly string[] = [\n '0',\n vars.spacing.xs,\n vars.spacing.sm,\n vars.spacing.md,\n vars.spacing.lg,\n vars.spacing.xl,\n vars.spacing.xxl,\n vars.spacing.xxxl,\n];\n\nconst resolveSpacing = (spacing: number | string): string => {\n if (typeof spacing === 'string') return spacing;\n const clamped = Math.max(0, Math.min(SPACING_SCALE.length - 1, spacing));\n const index = Math.floor(clamped);\n return SPACING_SCALE[index] ?? vars.spacing.sm;\n};\n\n/**\n * Groups multiple Radio components with shared, exclusive selection state.\n *\n * Manages a single `string` value, propagates `name`, `size`, `disabled`,\n * and `error` to children via React Context, and applies `aria-required`\n * for required fields. Supports controlled and uncontrolled modes.\n *\n * @example\n * ```tsx\n * <RadioGroup\n * label=\"Coordinate space\"\n * value={space}\n * onChange={setSpace}\n * >\n * <Radio value=\"local\" label=\"Local\" />\n * <Radio value=\"world\" label=\"World\" />\n * <Radio value=\"parent\" label=\"Parent\" />\n * </RadioGroup>\n * ```\n */\nexport const RadioGroup = /*#__PURE__*/ React.memo<RadioGroupProps>(\n ({\n value: valueProp,\n defaultValue,\n label,\n helperText,\n disabled = false,\n error = false,\n errorMessage,\n required = false,\n orientation = 'vertical',\n spacing = 2,\n name,\n size = 'md',\n onChange,\n children,\n className,\n style,\n testId,\n ref,\n id: idProp,\n ...rest\n }) => {\n const autoId = useId();\n const groupId = idProp ?? autoId;\n const labelId = `${groupId}-label`;\n const helperId = `${groupId}-helper`;\n\n const [internalValue, setInternalValue] = useState<string | undefined>(\n defaultValue\n );\n const isControlled = valueProp !== undefined;\n const currentValue = isControlled ? valueProp : internalValue;\n\n const handleChange = useCallback(\n (nextValue: string) => {\n if (!isControlled) {\n setInternalValue(nextValue);\n }\n onChange?.(nextValue);\n },\n [isControlled, onChange]\n );\n\n const contextValue = useMemo<RadioGroupContextValue>(\n () => ({\n value: currentValue,\n name,\n size,\n disabled,\n error,\n onChange: handleChange,\n }),\n [currentValue, name, size, disabled, error, handleChange]\n );\n\n const showHelperText = error && errorMessage ? errorMessage : helperText;\n\n const flexDirection = orientation === 'horizontal' ? 'row' : 'column';\n\n return (\n <div\n ref={ref}\n role=\"radiogroup\"\n aria-labelledby={label ? labelId : undefined}\n aria-describedby={showHelperText ? helperId : undefined}\n aria-required={required || undefined}\n aria-invalid={error || undefined}\n aria-disabled={disabled || undefined}\n aria-orientation={orientation}\n className={cx(groupContainerStyle, className)}\n style={style}\n data-testid={testId}\n {...rest}\n >\n {label && (\n <FormLabel id={labelId} required={required} disabled={disabled}>\n {label}\n </FormLabel>\n )}\n <RadioGroupContext.Provider value={contextValue}>\n <div\n className={groupItemsStyle}\n style={assignInlineVars({\n [groupOrientationVar]: flexDirection,\n [groupSpacingVar]: resolveSpacing(spacing),\n })}\n >\n {children}\n </div>\n </RadioGroupContext.Provider>\n {showHelperText && (\n <FormHelperText id={helperId} error={error}>\n {showHelperText}\n </FormHelperText>\n )}\n </div>\n );\n }\n);\n\nRadioGroup.displayName = 'RadioGroup';\n"],"names":[],"mappings":";;;;;;;;;;;AA0BE;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,7 +1,7 @@
1
1
  "use client";
2
2
  import { jsxs, jsx } from 'react/jsx-runtime';
3
- import { useId, useState, useCallback } from 'react';
4
3
  import { assignInlineVars } from '@vanilla-extract/dynamic';
4
+ import { useId, useState, useCallback } from 'react';
5
5
  import { FormHelperText } from '../../form/FormHelperText.js';
6
6
  import { cx } from '../../../utils/cx.js';
7
7
  import { trackHeightVar, trackWidthVar, thumbTranslateVar, thumbDiameterVar, thumbRecipe, trackRecipe, labelTextStyle, switchRowRecipe, switchContainerStyle } from './Switch.css.js';