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
@@ -0,0 +1,192 @@
1
+ "use client";
2
+ import { useCallback, useMemo } from 'react';
3
+ import '../../../utils/devWarn.js';
4
+ import { useLatest } from '../../../hooks/useLatest/useLatest.js';
5
+ import '../../../hooks/useBreakpoint/useBreakpoint.js';
6
+ import './../../../assets/src/theme/lightTheme.css.ts.vanilla-Ct6f9Iym.css';
7
+ import '@vanilla-extract/css';
8
+ import './../../../assets/src/theme/darkTheme.css.ts.vanilla-BHZ3ecRn.css';
9
+ import 'react/jsx-runtime';
10
+ import './../../../assets/src/theme/globalScrollbars.css.ts.vanilla-BAJwnUEJ.css';
11
+ import '../../../hooks/useNavigationHistory/useNavigationHistory.js';
12
+
13
+ function hasFiles(event) {
14
+ return Array.from(event.dataTransfer.types).includes('Files');
15
+ }
16
+ /** True when the drag is leaving the element entirely (not into a child). */
17
+ function leftElement(event) {
18
+ const related = event.relatedTarget;
19
+ return !(related && event.currentTarget.contains(related));
20
+ }
21
+ /**
22
+ * Drag-and-drop wiring for the AssetBrowser: internal item moves (gated by
23
+ * `onItemsMove`) and external file import (gated by `onFilesImport`). Every
24
+ * handler has a stable identity (`useCallback`) and reads the latest props
25
+ * through `useLatest` refs, matching `component-patterns.md` rules #3/#11.
26
+ */
27
+ function useAssetDnd(options) {
28
+ const { store, mime, items, selection, currentFolderId, getDragData, onItemDragStart: cbItemDragStart, onItemDragEnd: cbItemDragEnd, onItemsMove, onFilesImport, } = options;
29
+ const internalEnabled = onItemsMove !== undefined;
30
+ const externalEnabled = onFilesImport !== undefined;
31
+ const mimeRef = useLatest(mime);
32
+ const itemsRef = useLatest(items);
33
+ const selectionRef = useLatest(selection);
34
+ const currentFolderIdRef = useLatest(currentFolderId);
35
+ const getDragDataRef = useLatest(getDragData);
36
+ const cbItemDragStartRef = useLatest(cbItemDragStart);
37
+ const cbItemDragEndRef = useLatest(cbItemDragEnd);
38
+ const onItemsMoveRef = useLatest(onItemsMove);
39
+ const onFilesImportRef = useLatest(onFilesImport);
40
+ const resolveItems = useCallback((ids) => {
41
+ const map = new Map(itemsRef.current.map(item => [item.id, item]));
42
+ return ids
43
+ .map(id => map.get(id))
44
+ .filter((item) => item !== undefined);
45
+ }, [itemsRef]);
46
+ const onItemDragStart = useCallback((item, event) => {
47
+ const sel = selectionRef.current;
48
+ const ids = sel.has(item.id) ? Array.from(sel) : [item.id];
49
+ const dragged = resolveItems(ids);
50
+ const payload = getDragDataRef.current?.(dragged) ?? {
51
+ [mimeRef.current]: JSON.stringify(ids),
52
+ };
53
+ for (const [type, value] of Object.entries(payload)) {
54
+ event.dataTransfer.setData(type, value);
55
+ }
56
+ event.dataTransfer.effectAllowed = 'copyMove';
57
+ store.setDrag({
58
+ active: true,
59
+ draggingIds: ids,
60
+ dropTargetId: null,
61
+ externalOver: false,
62
+ });
63
+ cbItemDragStartRef.current?.(dragged, event);
64
+ }, [
65
+ store,
66
+ resolveItems,
67
+ selectionRef,
68
+ getDragDataRef,
69
+ mimeRef,
70
+ cbItemDragStartRef,
71
+ ]);
72
+ const onItemDragEnd = useCallback((item, event) => {
73
+ const ids = store.getDrag().draggingIds;
74
+ const dragged = resolveItems(ids.length > 0 ? ids : [item.id]);
75
+ store.clearDrag();
76
+ cbItemDragEndRef.current?.(dragged, event);
77
+ }, [store, resolveItems, cbItemDragEndRef]);
78
+ const onFolderDragOver = useCallback((folderId, event) => {
79
+ const drag = store.getDrag();
80
+ const external = onFilesImportRef.current !== undefined && hasFiles(event);
81
+ const internal = onItemsMoveRef.current !== undefined && drag.active;
82
+ if (!external && !internal)
83
+ return;
84
+ event.preventDefault();
85
+ event.dataTransfer.dropEffect = external ? 'copy' : 'move';
86
+ store.setDrag({
87
+ active: true,
88
+ draggingIds: drag.draggingIds,
89
+ dropTargetId: folderId,
90
+ externalOver: external,
91
+ });
92
+ }, [store, onFilesImportRef, onItemsMoveRef]);
93
+ const onFolderDragLeave = useCallback((folderId, event) => {
94
+ if (!leftElement(event))
95
+ return;
96
+ const drag = store.getDrag();
97
+ if (drag.dropTargetId !== folderId)
98
+ return;
99
+ store.setDrag({ ...drag, dropTargetId: null });
100
+ }, [store]);
101
+ const onFolderDrop = useCallback((folderId, event) => {
102
+ event.preventDefault();
103
+ const files = Array.from(event.dataTransfer.files);
104
+ const filesImport = onFilesImportRef.current;
105
+ const itemsMove = onItemsMoveRef.current;
106
+ if (files.length > 0 && filesImport) {
107
+ filesImport({ files, targetFolderId: folderId });
108
+ }
109
+ else if (itemsMove) {
110
+ const drag = store.getDrag();
111
+ let ids = drag.draggingIds;
112
+ if (ids.length === 0) {
113
+ const raw = event.dataTransfer.getData(mimeRef.current);
114
+ if (raw) {
115
+ try {
116
+ ids = JSON.parse(raw);
117
+ }
118
+ catch {
119
+ ids = [];
120
+ }
121
+ }
122
+ }
123
+ if (ids.length > 0) {
124
+ itemsMove({ itemIds: ids, targetFolderId: folderId });
125
+ }
126
+ }
127
+ store.clearDrag();
128
+ }, [store, onFilesImportRef, onItemsMoveRef, mimeRef]);
129
+ const onSurfaceDragOver = useCallback((event) => {
130
+ if (onFilesImportRef.current === undefined || !hasFiles(event))
131
+ return;
132
+ event.preventDefault();
133
+ event.dataTransfer.dropEffect = 'copy';
134
+ const drag = store.getDrag();
135
+ store.setDrag({
136
+ active: true,
137
+ draggingIds: drag.draggingIds,
138
+ dropTargetId: null,
139
+ externalOver: true,
140
+ });
141
+ }, [store, onFilesImportRef]);
142
+ const onSurfaceDragLeave = useCallback((event) => {
143
+ if (!leftElement(event))
144
+ return;
145
+ const drag = store.getDrag();
146
+ if (!drag.externalOver)
147
+ return;
148
+ store.setDrag({ ...drag, externalOver: false });
149
+ }, [store]);
150
+ const onSurfaceDrop = useCallback((event) => {
151
+ const filesImport = onFilesImportRef.current;
152
+ if (!filesImport)
153
+ return;
154
+ const files = Array.from(event.dataTransfer.files);
155
+ if (files.length === 0) {
156
+ store.clearDrag();
157
+ return;
158
+ }
159
+ event.preventDefault();
160
+ filesImport({
161
+ files,
162
+ targetFolderId: currentFolderIdRef.current ?? null,
163
+ });
164
+ store.clearDrag();
165
+ }, [store, onFilesImportRef, currentFolderIdRef]);
166
+ return useMemo(() => ({
167
+ internalEnabled,
168
+ externalEnabled,
169
+ onItemDragStart,
170
+ onItemDragEnd,
171
+ onFolderDragOver,
172
+ onFolderDragLeave,
173
+ onFolderDrop,
174
+ onSurfaceDragOver,
175
+ onSurfaceDragLeave,
176
+ onSurfaceDrop,
177
+ }), [
178
+ internalEnabled,
179
+ externalEnabled,
180
+ onItemDragStart,
181
+ onItemDragEnd,
182
+ onFolderDragOver,
183
+ onFolderDragLeave,
184
+ onFolderDrop,
185
+ onSurfaceDragOver,
186
+ onSurfaceDragLeave,
187
+ onSurfaceDrop,
188
+ ]);
189
+ }
190
+
191
+ export { useAssetDnd };
192
+ //# sourceMappingURL=useAssetDnd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAssetDnd.js","sources":["src/components/editor/AssetBrowser/useAssetDnd.ts"],"sourcesContent":["'use client';\n\nimport { useCallback, useMemo } from 'react';\n\nimport { useLatest } from '@/hooks';\n\nimport type { AssetItem } from './AssetBrowser.types';\nimport type { AssetDndContext } from './AssetBrowserContext';\nimport type { AssetBrowserStore } from './AssetBrowserStore';\nimport type { DragEvent } from 'react';\n\nexport interface UseAssetDndOptions {\n store: AssetBrowserStore;\n mime: string;\n items: readonly AssetItem[];\n selection: ReadonlySet<string>;\n currentFolderId: string | undefined;\n getDragData?: (items: AssetItem[]) => Record<string, string>;\n onItemDragStart?: (items: AssetItem[], event: DragEvent) => void;\n onItemDragEnd?: (items: AssetItem[], event: DragEvent) => void;\n onItemsMove?: (payload: {\n itemIds: string[];\n targetFolderId: string;\n }) => void;\n onFilesImport?: (payload: {\n files: File[];\n targetFolderId: string | null;\n }) => void;\n}\n\nfunction hasFiles(event: DragEvent): boolean {\n return Array.from(event.dataTransfer.types).includes('Files');\n}\n\n/** True when the drag is leaving the element entirely (not into a child). */\nfunction leftElement(event: DragEvent): boolean {\n const related = event.relatedTarget as Node | null;\n return !(related && event.currentTarget.contains(related));\n}\n\n/**\n * Drag-and-drop wiring for the AssetBrowser: internal item moves (gated by\n * `onItemsMove`) and external file import (gated by `onFilesImport`). Every\n * handler has a stable identity (`useCallback`) and reads the latest props\n * through `useLatest` refs, matching `component-patterns.md` rules #3/#11.\n */\nexport function useAssetDnd(options: UseAssetDndOptions): AssetDndContext {\n const {\n store,\n mime,\n items,\n selection,\n currentFolderId,\n getDragData,\n onItemDragStart: cbItemDragStart,\n onItemDragEnd: cbItemDragEnd,\n onItemsMove,\n onFilesImport,\n } = options;\n\n const internalEnabled = onItemsMove !== undefined;\n const externalEnabled = onFilesImport !== undefined;\n\n const mimeRef = useLatest(mime);\n const itemsRef = useLatest(items);\n const selectionRef = useLatest(selection);\n const currentFolderIdRef = useLatest(currentFolderId);\n const getDragDataRef = useLatest(getDragData);\n const cbItemDragStartRef = useLatest(cbItemDragStart);\n const cbItemDragEndRef = useLatest(cbItemDragEnd);\n const onItemsMoveRef = useLatest(onItemsMove);\n const onFilesImportRef = useLatest(onFilesImport);\n\n const resolveItems = useCallback(\n (ids: string[]): AssetItem[] => {\n const map = new Map(itemsRef.current.map(item => [item.id, item]));\n return ids\n .map(id => map.get(id))\n .filter((item): item is AssetItem => item !== undefined);\n },\n [itemsRef]\n );\n\n const onItemDragStart = useCallback(\n (item: AssetItem, event: DragEvent): void => {\n const sel = selectionRef.current;\n const ids = sel.has(item.id) ? Array.from(sel) : [item.id];\n const dragged = resolveItems(ids);\n const payload = getDragDataRef.current?.(dragged) ?? {\n [mimeRef.current]: JSON.stringify(ids),\n };\n for (const [type, value] of Object.entries(payload)) {\n event.dataTransfer.setData(type, value);\n }\n event.dataTransfer.effectAllowed = 'copyMove';\n store.setDrag({\n active: true,\n draggingIds: ids,\n dropTargetId: null,\n externalOver: false,\n });\n cbItemDragStartRef.current?.(dragged, event);\n },\n [\n store,\n resolveItems,\n selectionRef,\n getDragDataRef,\n mimeRef,\n cbItemDragStartRef,\n ]\n );\n\n const onItemDragEnd = useCallback(\n (item: AssetItem, event: DragEvent): void => {\n const ids = store.getDrag().draggingIds;\n const dragged = resolveItems(ids.length > 0 ? ids : [item.id]);\n store.clearDrag();\n cbItemDragEndRef.current?.(dragged, event);\n },\n [store, resolveItems, cbItemDragEndRef]\n );\n\n const onFolderDragOver = useCallback(\n (folderId: string, event: DragEvent): void => {\n const drag = store.getDrag();\n const external =\n onFilesImportRef.current !== undefined && hasFiles(event);\n const internal = onItemsMoveRef.current !== undefined && drag.active;\n if (!external && !internal) return;\n event.preventDefault();\n event.dataTransfer.dropEffect = external ? 'copy' : 'move';\n store.setDrag({\n active: true,\n draggingIds: drag.draggingIds,\n dropTargetId: folderId,\n externalOver: external,\n });\n },\n [store, onFilesImportRef, onItemsMoveRef]\n );\n\n const onFolderDragLeave = useCallback(\n (folderId: string, event: DragEvent): void => {\n if (!leftElement(event)) return;\n const drag = store.getDrag();\n if (drag.dropTargetId !== folderId) return;\n store.setDrag({ ...drag, dropTargetId: null });\n },\n [store]\n );\n\n const onFolderDrop = useCallback(\n (folderId: string, event: DragEvent): void => {\n event.preventDefault();\n const files = Array.from(event.dataTransfer.files);\n const filesImport = onFilesImportRef.current;\n const itemsMove = onItemsMoveRef.current;\n if (files.length > 0 && filesImport) {\n filesImport({ files, targetFolderId: folderId });\n } else if (itemsMove) {\n const drag = store.getDrag();\n let ids = drag.draggingIds;\n if (ids.length === 0) {\n const raw = event.dataTransfer.getData(mimeRef.current);\n if (raw) {\n try {\n ids = JSON.parse(raw) as string[];\n } catch {\n ids = [];\n }\n }\n }\n if (ids.length > 0) {\n itemsMove({ itemIds: ids, targetFolderId: folderId });\n }\n }\n store.clearDrag();\n },\n [store, onFilesImportRef, onItemsMoveRef, mimeRef]\n );\n\n const onSurfaceDragOver = useCallback(\n (event: DragEvent): void => {\n if (onFilesImportRef.current === undefined || !hasFiles(event)) return;\n event.preventDefault();\n event.dataTransfer.dropEffect = 'copy';\n const drag = store.getDrag();\n store.setDrag({\n active: true,\n draggingIds: drag.draggingIds,\n dropTargetId: null,\n externalOver: true,\n });\n },\n [store, onFilesImportRef]\n );\n\n const onSurfaceDragLeave = useCallback(\n (event: DragEvent): void => {\n if (!leftElement(event)) return;\n const drag = store.getDrag();\n if (!drag.externalOver) return;\n store.setDrag({ ...drag, externalOver: false });\n },\n [store]\n );\n\n const onSurfaceDrop = useCallback(\n (event: DragEvent): void => {\n const filesImport = onFilesImportRef.current;\n if (!filesImport) return;\n const files = Array.from(event.dataTransfer.files);\n if (files.length === 0) {\n store.clearDrag();\n return;\n }\n event.preventDefault();\n filesImport({\n files,\n targetFolderId: currentFolderIdRef.current ?? null,\n });\n store.clearDrag();\n },\n [store, onFilesImportRef, currentFolderIdRef]\n );\n\n return useMemo<AssetDndContext>(\n () => ({\n internalEnabled,\n externalEnabled,\n onItemDragStart,\n onItemDragEnd,\n onFolderDragOver,\n onFolderDragLeave,\n onFolderDrop,\n onSurfaceDragOver,\n onSurfaceDragLeave,\n onSurfaceDrop,\n }),\n [\n internalEnabled,\n externalEnabled,\n onItemDragStart,\n onItemDragEnd,\n onFolderDragOver,\n onFolderDragLeave,\n onFolderDrop,\n onSurfaceDragOver,\n onSurfaceDragLeave,\n onSurfaceDrop,\n ]\n );\n}\n"],"names":[],"mappings":";;;;;;;;;;;;AA8BA;AACE;AACF;AAEA;AACA;AACE;AACA;AACF;AAEA;;;;;AAKG;AACG;;AAcJ;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAEA;;AAGI;;;AAGF;;AAME;;AAEA;;;;AAIA;;;AAGA;;AAEE;AACA;AACA;AACA;AACD;;AAEH;;;;;;;AAQC;;;;;;;;AAeC;AACA;;AAGA;;;AAEA;;AAEE;;AAEA;AACA;AACD;;;AAOD;;AACA;AACA;;AACA;AACF;;;AAOE;AACA;AACA;;;;;AAIE;AACA;AACA;AACE;;AAEE;AACE;;AACA;;;;;AAKN;;;;;;AASN;;;;AAII;AACA;;AAEE;;AAEA;AACA;AACD;AACH;AAIF;AAEI;;AACA;;;AAEA;AACF;AAIF;AAEI;AACA;;AACA;AACA;;;;;AAKA;;AAEE;AACD;;;AAML;;;;;;;;;;;AAYG;;;;;;;;;;;AAYA;AAEL;;"}
@@ -0,0 +1,91 @@
1
+ "use client";
2
+ import { useMemo, useCallback } from 'react';
3
+ import { nextGridIndex } from './assetBrowserKeyboard.js';
4
+
5
+ /**
6
+ * 2D grid keyboard navigation for `AssetBrowserGrid`. Handles arrows, Home/End,
7
+ * PageUp/PageDown, Enter (activate), Space (toggle), Ctrl/Cmd+A (select all),
8
+ * Escape (clear). `onKeyDown` is a `useCallback` — the selection/navigation
9
+ * callbacks it depends on are themselves stable, and the handler is only spread
10
+ * onto the grid `onKeyDown` so re-attaching on layout changes is free.
11
+ *
12
+ * Alt+ArrowUp is intentionally **not** handled here — it bubbles to the root's
13
+ * "go to parent" handler when `history` is on.
14
+ */
15
+ function useAssetGridKeyboardNav(options) {
16
+ const { store, items, win, scrollerRef, selectionMode, selectAll, clearSelection, activateItem, toggleSelectId, selectByKeyboard, scrollIndexIntoView, } = options;
17
+ const indexById = useMemo(() => {
18
+ const map = new Map();
19
+ items.forEach((item, i) => map.set(item.id, i));
20
+ return map;
21
+ }, [items]);
22
+ const onKeyDown = useCallback((event) => {
23
+ const count = items.length;
24
+ if (count === 0)
25
+ return;
26
+ const key = event.key;
27
+ // Let Alt+ArrowUp bubble to the root's "go to parent" handler.
28
+ if (event.altKey && key === 'ArrowUp')
29
+ return;
30
+ const focusedId = store.getFocusedId();
31
+ const current = focusedId ? (indexById.get(focusedId) ?? -1) : -1;
32
+ const multiple = selectionMode === 'multiple';
33
+ if ((event.ctrlKey || event.metaKey) && (key === 'a' || key === 'A')) {
34
+ event.preventDefault();
35
+ selectAll();
36
+ return;
37
+ }
38
+ if (key === 'Escape') {
39
+ clearSelection();
40
+ return;
41
+ }
42
+ if (key === 'Enter') {
43
+ const item = current >= 0 ? items[current] : undefined;
44
+ if (item) {
45
+ event.preventDefault();
46
+ activateItem(item);
47
+ }
48
+ return;
49
+ }
50
+ if (key === ' ') {
51
+ const item = current >= 0 ? items[current] : undefined;
52
+ if (item) {
53
+ event.preventDefault();
54
+ toggleSelectId(item.id);
55
+ }
56
+ return;
57
+ }
58
+ const rowsPerPage = Math.max(1, Math.floor((scrollerRef.current?.clientHeight ?? win.rowHeight) / win.rowHeight));
59
+ const next = nextGridIndex(current, key, {
60
+ columns: win.columns,
61
+ count,
62
+ rowsPerPage,
63
+ });
64
+ const target = next >= 0 ? items[next] : undefined;
65
+ if (next !== current && target) {
66
+ event.preventDefault();
67
+ store.setFocusedId(target.id);
68
+ scrollIndexIntoView(next, win);
69
+ if (selectionMode !== false) {
70
+ selectByKeyboard(next, multiple && event.shiftKey);
71
+ }
72
+ }
73
+ }, [
74
+ store,
75
+ items,
76
+ win,
77
+ scrollerRef,
78
+ selectionMode,
79
+ indexById,
80
+ selectAll,
81
+ clearSelection,
82
+ activateItem,
83
+ toggleSelectId,
84
+ selectByKeyboard,
85
+ scrollIndexIntoView,
86
+ ]);
87
+ return { onKeyDown };
88
+ }
89
+
90
+ export { useAssetGridKeyboardNav };
91
+ //# sourceMappingURL=useAssetGridKeyboardNav.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAssetGridKeyboardNav.js","sources":["src/components/editor/AssetBrowser/useAssetGridKeyboardNav.ts"],"sourcesContent":["'use client';\n\nimport { useCallback, useMemo } from 'react';\n\nimport { nextGridIndex } from './assetBrowserKeyboard';\n\nimport type { AssetItem } from './AssetBrowser.types';\nimport type { AssetBrowserStore } from './AssetBrowserStore';\nimport type { AssetGridWindow } from './useAssetGridVirtualizer';\nimport type { KeyboardEvent, RefObject } from 'react';\n\nexport interface UseAssetGridKeyboardNavOptions {\n store: AssetBrowserStore;\n items: readonly AssetItem[];\n /** Current windowed layout (columns, rowHeight). */\n win: AssetGridWindow;\n /** The grid scroller — used to derive `rowsPerPage` from clientHeight. */\n scrollerRef: RefObject<HTMLElement | null>;\n selectionMode: 'single' | 'multiple' | false;\n selectAll: () => void;\n clearSelection: () => void;\n activateItem: (item: AssetItem) => void;\n toggleSelectId: (id: string) => void;\n selectByKeyboard: (index: number, extend: boolean) => void;\n /** Bring the row containing the given item index into view. */\n scrollIndexIntoView: (index: number, w: AssetGridWindow) => void;\n}\n\nexport interface AssetGridKeyboardNav {\n onKeyDown: (event: KeyboardEvent) => void;\n}\n\n/**\n * 2D grid keyboard navigation for `AssetBrowserGrid`. Handles arrows, Home/End,\n * PageUp/PageDown, Enter (activate), Space (toggle), Ctrl/Cmd+A (select all),\n * Escape (clear). `onKeyDown` is a `useCallback` — the selection/navigation\n * callbacks it depends on are themselves stable, and the handler is only spread\n * onto the grid `onKeyDown` so re-attaching on layout changes is free.\n *\n * Alt+ArrowUp is intentionally **not** handled here — it bubbles to the root's\n * \"go to parent\" handler when `history` is on.\n */\nexport function useAssetGridKeyboardNav(\n options: UseAssetGridKeyboardNavOptions\n): AssetGridKeyboardNav {\n const {\n store,\n items,\n win,\n scrollerRef,\n selectionMode,\n selectAll,\n clearSelection,\n activateItem,\n toggleSelectId,\n selectByKeyboard,\n scrollIndexIntoView,\n } = options;\n\n const indexById = useMemo(() => {\n const map = new Map<string, number>();\n items.forEach((item, i) => map.set(item.id, i));\n return map;\n }, [items]);\n\n const onKeyDown = useCallback(\n (event: KeyboardEvent): void => {\n const count = items.length;\n if (count === 0) return;\n const key = event.key;\n // Let Alt+ArrowUp bubble to the root's \"go to parent\" handler.\n if (event.altKey && key === 'ArrowUp') return;\n const focusedId = store.getFocusedId();\n const current = focusedId ? (indexById.get(focusedId) ?? -1) : -1;\n const multiple = selectionMode === 'multiple';\n\n if ((event.ctrlKey || event.metaKey) && (key === 'a' || key === 'A')) {\n event.preventDefault();\n selectAll();\n return;\n }\n if (key === 'Escape') {\n clearSelection();\n return;\n }\n if (key === 'Enter') {\n const item = current >= 0 ? items[current] : undefined;\n if (item) {\n event.preventDefault();\n activateItem(item);\n }\n return;\n }\n if (key === ' ') {\n const item = current >= 0 ? items[current] : undefined;\n if (item) {\n event.preventDefault();\n toggleSelectId(item.id);\n }\n return;\n }\n\n const rowsPerPage = Math.max(\n 1,\n Math.floor(\n (scrollerRef.current?.clientHeight ?? win.rowHeight) / win.rowHeight\n )\n );\n const next = nextGridIndex(current, key, {\n columns: win.columns,\n count,\n rowsPerPage,\n });\n const target = next >= 0 ? items[next] : undefined;\n if (next !== current && target) {\n event.preventDefault();\n store.setFocusedId(target.id);\n scrollIndexIntoView(next, win);\n if (selectionMode !== false) {\n selectByKeyboard(next, multiple && event.shiftKey);\n }\n }\n },\n [\n store,\n items,\n win,\n scrollerRef,\n selectionMode,\n indexById,\n selectAll,\n clearSelection,\n activateItem,\n toggleSelectId,\n selectByKeyboard,\n scrollIndexIntoView,\n ]\n );\n\n return { onKeyDown };\n}\n"],"names":[],"mappings":";;;;AAgCA;;;;;;;;;AASG;AACG;;AAiBJ;AACE;;AAEA;AACF;AAEA;AAEI;;;AAEA;;AAEA;;AACA;;AAEA;;;AAIE;;;AAGF;AACE;;;AAGF;AACE;;;;;;;AAOF;AACE;;;AAGE;;;;AAKJ;AAMA;;;;AAIC;AACD;AACA;;AAEE;AACA;AACA;;;;AAIJ;;;;;;;;;;;;;AAcC;;AAIL;;"}
@@ -0,0 +1,91 @@
1
+ "use client";
2
+ import { useState, useEffect, useMemo } from 'react';
3
+ import '../../../utils/devWarn.js';
4
+ import { useResizeObserver } from '../../../hooks/useResizeObserver/useResizeObserver.js';
5
+ import '../../../hooks/useBreakpoint/useBreakpoint.js';
6
+ import './../../../assets/src/theme/lightTheme.css.ts.vanilla-Ct6f9Iym.css';
7
+ import '@vanilla-extract/css';
8
+ import './../../../assets/src/theme/darkTheme.css.ts.vanilla-BHZ3ecRn.css';
9
+ import 'react/jsx-runtime';
10
+ import './../../../assets/src/theme/globalScrollbars.css.ts.vanilla-BAJwnUEJ.css';
11
+ import '../../../hooks/useNavigationHistory/useNavigationHistory.js';
12
+ import { columnsFor, rowHeight } from './assetBrowserGeometry.js';
13
+
14
+ /**
15
+ * Windowed grid math. Tracks container width + height via `useResizeObserver`
16
+ * and scroll position via a throttled (rAF) scroll listener, then derives the
17
+ * row-aligned slice of items to render.
18
+ *
19
+ * When `enabled` is false it still reports `columns`/`rowHeight` (needed for
20
+ * keyboard navigation) but renders the whole list.
21
+ */
22
+ function useAssetGridVirtualizer(options) {
23
+ const { containerRef, count, thumbPx, overscanRows, enabled } = options;
24
+ const [size, setSize] = useState({ width: 0, height: 0 });
25
+ const [scrollTop, setScrollTop] = useState(0);
26
+ useResizeObserver(containerRef, entry => {
27
+ setSize({
28
+ width: entry.contentRect.width,
29
+ height: entry.contentRect.height,
30
+ });
31
+ });
32
+ useEffect(() => {
33
+ const el = containerRef.current;
34
+ if (!el || !enabled)
35
+ return;
36
+ let raf = 0;
37
+ const onScroll = () => {
38
+ cancelAnimationFrame(raf);
39
+ raf = requestAnimationFrame(() => {
40
+ setScrollTop(el.scrollTop);
41
+ });
42
+ };
43
+ el.addEventListener('scroll', onScroll, { passive: true });
44
+ return () => {
45
+ el.removeEventListener('scroll', onScroll);
46
+ cancelAnimationFrame(raf);
47
+ };
48
+ }, [containerRef, enabled]);
49
+ return useMemo(() => {
50
+ const columns = columnsFor(size.width, thumbPx);
51
+ const rh = rowHeight(thumbPx);
52
+ const totalRows = Math.ceil(count / columns);
53
+ const totalHeight = totalRows * rh;
54
+ if (!enabled) {
55
+ return {
56
+ columns,
57
+ rowHeight: rh,
58
+ totalRows,
59
+ totalHeight,
60
+ startIndex: 0,
61
+ endIndex: count,
62
+ offsetY: 0,
63
+ windowed: false,
64
+ };
65
+ }
66
+ const startRow = Math.max(0, Math.floor(scrollTop / rh) - overscanRows);
67
+ const viewportRows = Math.ceil((size.height || rh) / rh);
68
+ const endRow = Math.min(totalRows, startRow + viewportRows + overscanRows * 2);
69
+ return {
70
+ columns,
71
+ rowHeight: rh,
72
+ totalRows,
73
+ totalHeight,
74
+ startIndex: startRow * columns,
75
+ endIndex: Math.min(count, endRow * columns),
76
+ offsetY: startRow * rh,
77
+ windowed: true,
78
+ };
79
+ }, [
80
+ size.width,
81
+ size.height,
82
+ scrollTop,
83
+ count,
84
+ thumbPx,
85
+ overscanRows,
86
+ enabled,
87
+ ]);
88
+ }
89
+
90
+ export { useAssetGridVirtualizer };
91
+ //# sourceMappingURL=useAssetGridVirtualizer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAssetGridVirtualizer.js","sources":["src/components/editor/AssetBrowser/useAssetGridVirtualizer.ts"],"sourcesContent":["'use client';\n\nimport { useEffect, useMemo, useState } from 'react';\n\nimport { useResizeObserver } from '@/hooks';\n\nimport { columnsFor, rowHeight as rowHeightFor } from './assetBrowserGeometry';\n\nimport type { RefObject } from 'react';\n\nexport interface UseAssetGridVirtualizerOptions {\n containerRef: RefObject<HTMLElement | null>;\n count: number;\n thumbPx: number;\n overscanRows: number;\n /** When false, the window spans the whole list (no virtualization). */\n enabled: boolean;\n}\n\nexport interface AssetGridWindow {\n columns: number;\n rowHeight: number;\n totalRows: number;\n totalHeight: number;\n /** First rendered item index (row-aligned). */\n startIndex: number;\n /** One past the last rendered item index. */\n endIndex: number;\n /** Pixel offset of the rendered window from the top. */\n offsetY: number;\n /** Whether windowing is currently active. */\n windowed: boolean;\n}\n\n/**\n * Windowed grid math. Tracks container width + height via `useResizeObserver`\n * and scroll position via a throttled (rAF) scroll listener, then derives the\n * row-aligned slice of items to render.\n *\n * When `enabled` is false it still reports `columns`/`rowHeight` (needed for\n * keyboard navigation) but renders the whole list.\n */\nexport function useAssetGridVirtualizer(\n options: UseAssetGridVirtualizerOptions\n): AssetGridWindow {\n const { containerRef, count, thumbPx, overscanRows, enabled } = options;\n const [size, setSize] = useState({ width: 0, height: 0 });\n const [scrollTop, setScrollTop] = useState(0);\n\n useResizeObserver(containerRef, entry => {\n setSize({\n width: entry.contentRect.width,\n height: entry.contentRect.height,\n });\n });\n\n useEffect(() => {\n const el = containerRef.current;\n if (!el || !enabled) return;\n let raf = 0;\n const onScroll = (): void => {\n cancelAnimationFrame(raf);\n raf = requestAnimationFrame(() => {\n setScrollTop(el.scrollTop);\n });\n };\n el.addEventListener('scroll', onScroll, { passive: true });\n return () => {\n el.removeEventListener('scroll', onScroll);\n cancelAnimationFrame(raf);\n };\n }, [containerRef, enabled]);\n\n return useMemo<AssetGridWindow>(() => {\n const columns = columnsFor(size.width, thumbPx);\n const rh = rowHeightFor(thumbPx);\n const totalRows = Math.ceil(count / columns);\n const totalHeight = totalRows * rh;\n\n if (!enabled) {\n return {\n columns,\n rowHeight: rh,\n totalRows,\n totalHeight,\n startIndex: 0,\n endIndex: count,\n offsetY: 0,\n windowed: false,\n };\n }\n\n const startRow = Math.max(0, Math.floor(scrollTop / rh) - overscanRows);\n const viewportRows = Math.ceil((size.height || rh) / rh);\n const endRow = Math.min(\n totalRows,\n startRow + viewportRows + overscanRows * 2\n );\n\n return {\n columns,\n rowHeight: rh,\n totalRows,\n totalHeight,\n startIndex: startRow * columns,\n endIndex: Math.min(count, endRow * columns),\n offsetY: startRow * rh,\n windowed: true,\n };\n }, [\n size.width,\n size.height,\n scrollTop,\n count,\n thumbPx,\n overscanRows,\n enabled,\n ]);\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;AAkCA;;;;;;;AAOG;AACG;AAGJ;AACA;;AAGA;AACE;AACE;AACA;AACD;AACH;;AAGE;AACA;;;;;AAIE;AACE;AACF;AACF;AACA;AACA;AACE;;AAEF;AACF;;;AAIE;;AAEA;;;;AAKI;;;AAGA;AACA;AACA;AACA;;;AAIJ;AACA;AACA;;;AAOE;;;;;;AAMA;;AAEJ;AACE;AACA;;;;;;AAMD;AACH;;"}
@@ -0,0 +1,128 @@
1
+ "use client";
2
+ import { useRef, useCallback, useEffect } from 'react';
3
+ import '../../../utils/devWarn.js';
4
+ import { useLatest } from '../../../hooks/useLatest/useLatest.js';
5
+ import '../../../hooks/useBreakpoint/useBreakpoint.js';
6
+ import './../../../assets/src/theme/lightTheme.css.ts.vanilla-Ct6f9Iym.css';
7
+ import '@vanilla-extract/css';
8
+ import './../../../assets/src/theme/darkTheme.css.ts.vanilla-BHZ3ecRn.css';
9
+ import 'react/jsx-runtime';
10
+ import './../../../assets/src/theme/globalScrollbars.css.ts.vanilla-BAJwnUEJ.css';
11
+ import '../../../hooks/useNavigationHistory/useNavigationHistory.js';
12
+ import { useAssetBrowserStore } from './AssetBrowserContext.js';
13
+ import { rectFromPoints, rectsIntersect, itemRect } from './assetBrowserGeometry.js';
14
+
15
+ /**
16
+ * Pointer-driven rubber-band selection for the grid. The active rect lives in
17
+ * the AssetBrowser store (so the marquee overlay can subscribe via its own
18
+ * slice), while pointer-move updates are RAF-throttled. The hit-test runs once
19
+ * on pointer-up and reports through `commitMarquee`.
20
+ *
21
+ * Handlers have stable identities (`useCallback`) and read the latest props
22
+ * through `useLatest` refs, matching `component-patterns.md` rules #3/#11.
23
+ */
24
+ function useAssetMarqueeGesture(options) {
25
+ const { scrollerRef, enabled, items, columns, thumbPx, commitMarquee } = options;
26
+ const store = useAssetBrowserStore();
27
+ const dragRef = useRef(null);
28
+ const rafRef = useRef(0);
29
+ const enabledRef = useLatest(enabled);
30
+ const itemsRef = useLatest(items);
31
+ const columnsRef = useLatest(columns);
32
+ const thumbPxRef = useLatest(thumbPx);
33
+ const commitMarqueeRef = useLatest(commitMarquee);
34
+ const contentPoint = useCallback((event) => {
35
+ const el = scrollerRef.current;
36
+ if (!el)
37
+ return { x: 0, y: 0 };
38
+ const rect = el.getBoundingClientRect();
39
+ return {
40
+ x: event.clientX - rect.left + el.scrollLeft,
41
+ y: event.clientY - rect.top + el.scrollTop,
42
+ };
43
+ }, [scrollerRef]);
44
+ const onPointerDown = useCallback((event) => {
45
+ if (event.button !== 0 || !enabledRef.current)
46
+ return;
47
+ // Started on an item, not empty space — let the item handle the click.
48
+ if (event.target !== event.currentTarget)
49
+ return;
50
+ const p = contentPoint(event);
51
+ dragRef.current = {
52
+ startX: p.x,
53
+ startY: p.y,
54
+ additive: event.ctrlKey || event.metaKey,
55
+ moved: false,
56
+ };
57
+ scrollerRef.current?.setPointerCapture(event.pointerId);
58
+ store.setMarquee({
59
+ active: true,
60
+ rect: { x: p.x, y: p.y, width: 0, height: 0 },
61
+ additive: dragRef.current.additive,
62
+ });
63
+ }, [store, scrollerRef, contentPoint, enabledRef]);
64
+ const onPointerMove = useCallback((event) => {
65
+ const drag = dragRef.current;
66
+ if (!drag)
67
+ return;
68
+ drag.moved = true;
69
+ cancelAnimationFrame(rafRef.current);
70
+ const p = contentPoint(event);
71
+ rafRef.current = requestAnimationFrame(() => {
72
+ store.setMarquee({
73
+ active: true,
74
+ rect: rectFromPoints(drag.startX, drag.startY, p.x, p.y),
75
+ additive: drag.additive,
76
+ });
77
+ });
78
+ }, [store, contentPoint]);
79
+ const onPointerUp = useCallback((event) => {
80
+ const drag = dragRef.current;
81
+ if (!drag)
82
+ return;
83
+ cancelAnimationFrame(rafRef.current);
84
+ dragRef.current = null;
85
+ scrollerRef.current?.releasePointerCapture(event.pointerId);
86
+ const p = contentPoint(event);
87
+ const rect = rectFromPoints(drag.startX, drag.startY, p.x, p.y);
88
+ const ids = [];
89
+ const currentItems = itemsRef.current;
90
+ for (let i = 0; i < currentItems.length; i += 1) {
91
+ const item = currentItems[i];
92
+ if (!item || item.selectable === false)
93
+ continue;
94
+ if (rectsIntersect(rect, itemRect(i, columnsRef.current, thumbPxRef.current))) {
95
+ ids.push(item.id);
96
+ }
97
+ }
98
+ commitMarqueeRef.current(ids, drag.additive);
99
+ store.clearMarquee();
100
+ }, [
101
+ store,
102
+ scrollerRef,
103
+ contentPoint,
104
+ itemsRef,
105
+ columnsRef,
106
+ thumbPxRef,
107
+ commitMarqueeRef,
108
+ ]);
109
+ // Abort an in-flight marquee without committing a selection. Fires on a
110
+ // system/touch `pointercancel`, which would otherwise leave `dragRef` set and
111
+ // the marquee rect stuck active in the store until the next pointer-down.
112
+ const onPointerCancel = useCallback((event) => {
113
+ if (!dragRef.current)
114
+ return;
115
+ cancelAnimationFrame(rafRef.current);
116
+ dragRef.current = null;
117
+ scrollerRef.current?.releasePointerCapture(event.pointerId);
118
+ store.clearMarquee();
119
+ }, [store, scrollerRef]);
120
+ // Cancel any in-flight RAF on unmount.
121
+ useEffect(() => () => {
122
+ cancelAnimationFrame(rafRef.current);
123
+ }, []);
124
+ return { onPointerDown, onPointerMove, onPointerUp, onPointerCancel };
125
+ }
126
+
127
+ export { useAssetMarqueeGesture };
128
+ //# sourceMappingURL=useAssetMarqueeGesture.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAssetMarqueeGesture.js","sources":["src/components/editor/AssetBrowser/useAssetMarqueeGesture.ts"],"sourcesContent":["'use client';\n\nimport { useCallback, useEffect, useRef } from 'react';\n\nimport { useLatest } from '@/hooks';\n\nimport { useAssetBrowserStore } from './AssetBrowserContext';\nimport {\n itemRect,\n rectFromPoints,\n rectsIntersect,\n} from './assetBrowserGeometry';\n\nimport type { AssetItem } from './AssetBrowser.types';\nimport type { PointerEvent, RefObject } from 'react';\n\nexport interface UseAssetMarqueeGestureOptions {\n /** The scroll container — also the pointer-capture target and coordinate origin. */\n scrollerRef: RefObject<HTMLElement | null>;\n /** When false, pointer-down is ignored. */\n enabled: boolean;\n /** Currently displayed items, in display order. */\n items: readonly AssetItem[];\n /** Current grid column count (from the virtualizer). */\n columns: number;\n /** Current thumbnail pixel size. */\n thumbPx: number;\n /** Called once on pointer-up with the items that intersect the marquee rect. */\n commitMarquee: (ids: string[], additive: boolean) => void;\n}\n\nexport interface AssetMarqueeGestureHandlers {\n onPointerDown: (event: PointerEvent) => void;\n onPointerMove: (event: PointerEvent) => void;\n onPointerUp: (event: PointerEvent) => void;\n /** Abort an in-flight marquee (system gesture cancel, touch interruption). */\n onPointerCancel: (event: PointerEvent) => void;\n}\n\ninterface MarqueeDrag {\n startX: number;\n startY: number;\n additive: boolean;\n moved: boolean;\n}\n\n/**\n * Pointer-driven rubber-band selection for the grid. The active rect lives in\n * the AssetBrowser store (so the marquee overlay can subscribe via its own\n * slice), while pointer-move updates are RAF-throttled. The hit-test runs once\n * on pointer-up and reports through `commitMarquee`.\n *\n * Handlers have stable identities (`useCallback`) and read the latest props\n * through `useLatest` refs, matching `component-patterns.md` rules #3/#11.\n */\nexport function useAssetMarqueeGesture(\n options: UseAssetMarqueeGestureOptions\n): AssetMarqueeGestureHandlers {\n const { scrollerRef, enabled, items, columns, thumbPx, commitMarquee } =\n options;\n const store = useAssetBrowserStore();\n\n const dragRef = useRef<MarqueeDrag | null>(null);\n const rafRef = useRef(0);\n\n const enabledRef = useLatest(enabled);\n const itemsRef = useLatest(items);\n const columnsRef = useLatest(columns);\n const thumbPxRef = useLatest(thumbPx);\n const commitMarqueeRef = useLatest(commitMarquee);\n\n const contentPoint = useCallback(\n (event: PointerEvent): { x: number; y: number } => {\n const el = scrollerRef.current;\n if (!el) return { x: 0, y: 0 };\n const rect = el.getBoundingClientRect();\n return {\n x: event.clientX - rect.left + el.scrollLeft,\n y: event.clientY - rect.top + el.scrollTop,\n };\n },\n [scrollerRef]\n );\n\n const onPointerDown = useCallback(\n (event: PointerEvent): void => {\n if (event.button !== 0 || !enabledRef.current) return;\n // Started on an item, not empty space — let the item handle the click.\n if (event.target !== event.currentTarget) return;\n const p = contentPoint(event);\n dragRef.current = {\n startX: p.x,\n startY: p.y,\n additive: event.ctrlKey || event.metaKey,\n moved: false,\n };\n scrollerRef.current?.setPointerCapture(event.pointerId);\n store.setMarquee({\n active: true,\n rect: { x: p.x, y: p.y, width: 0, height: 0 },\n additive: dragRef.current.additive,\n });\n },\n [store, scrollerRef, contentPoint, enabledRef]\n );\n\n const onPointerMove = useCallback(\n (event: PointerEvent): void => {\n const drag = dragRef.current;\n if (!drag) return;\n drag.moved = true;\n cancelAnimationFrame(rafRef.current);\n const p = contentPoint(event);\n rafRef.current = requestAnimationFrame(() => {\n store.setMarquee({\n active: true,\n rect: rectFromPoints(drag.startX, drag.startY, p.x, p.y),\n additive: drag.additive,\n });\n });\n },\n [store, contentPoint]\n );\n\n const onPointerUp = useCallback(\n (event: PointerEvent): void => {\n const drag = dragRef.current;\n if (!drag) return;\n cancelAnimationFrame(rafRef.current);\n dragRef.current = null;\n scrollerRef.current?.releasePointerCapture(event.pointerId);\n const p = contentPoint(event);\n const rect = rectFromPoints(drag.startX, drag.startY, p.x, p.y);\n const ids: string[] = [];\n const currentItems = itemsRef.current;\n for (let i = 0; i < currentItems.length; i += 1) {\n const item = currentItems[i];\n if (!item || item.selectable === false) continue;\n if (\n rectsIntersect(\n rect,\n itemRect(i, columnsRef.current, thumbPxRef.current)\n )\n ) {\n ids.push(item.id);\n }\n }\n commitMarqueeRef.current(ids, drag.additive);\n store.clearMarquee();\n },\n [\n store,\n scrollerRef,\n contentPoint,\n itemsRef,\n columnsRef,\n thumbPxRef,\n commitMarqueeRef,\n ]\n );\n\n // Abort an in-flight marquee without committing a selection. Fires on a\n // system/touch `pointercancel`, which would otherwise leave `dragRef` set and\n // the marquee rect stuck active in the store until the next pointer-down.\n const onPointerCancel = useCallback(\n (event: PointerEvent): void => {\n if (!dragRef.current) return;\n cancelAnimationFrame(rafRef.current);\n dragRef.current = null;\n scrollerRef.current?.releasePointerCapture(event.pointerId);\n store.clearMarquee();\n },\n [store, scrollerRef]\n );\n\n // Cancel any in-flight RAF on unmount.\n useEffect(\n () => () => {\n cancelAnimationFrame(rafRef.current);\n },\n []\n );\n\n return { onPointerDown, onPointerMove, onPointerUp, onPointerCancel };\n}\n"],"names":[],"mappings":";;;;;;;;;;;;;;AA8CA;;;;;;;;AAQG;AACG;AAGJ;AAEA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AAEI;AACA;;AACA;;;;;AAKF;AAIF;;;;AAII;;AACA;;;;AAIE;AACA;;;;AAIA;;AAEA;AACD;;AAKL;AAEI;AACA;;AACA;AACA;AACA;AACA;;AAEI;AACA;;AAED;AACH;AACF;AAIF;AAEI;AACA;;AACA;AACA;;AAEA;;;AAGA;AACA;AACE;AACA;;AACA;AAME;;;;;AAKN;;;;;;;;AASC;;;;AAMH;;;AAGI;AACA;;;AAGF;;AAKF;AAEI;;;AAMN;;"}
@@ -0,0 +1,72 @@
1
+ "use client";
2
+ import { useCallback } from 'react';
3
+ import '../../../utils/devWarn.js';
4
+ import { useLatest } from '../../../hooks/useLatest/useLatest.js';
5
+ import '../../../hooks/useBreakpoint/useBreakpoint.js';
6
+ import './../../../assets/src/theme/lightTheme.css.ts.vanilla-Ct6f9Iym.css';
7
+ import '@vanilla-extract/css';
8
+ import './../../../assets/src/theme/darkTheme.css.ts.vanilla-BHZ3ecRn.css';
9
+ import 'react/jsx-runtime';
10
+ import './../../../assets/src/theme/globalScrollbars.css.ts.vanilla-BAJwnUEJ.css';
11
+ import '../../../hooks/useNavigationHistory/useNavigationHistory.js';
12
+
13
+ function isEditableTarget(target) {
14
+ if (!(target instanceof HTMLElement))
15
+ return false;
16
+ return (target.tagName === 'INPUT' ||
17
+ target.tagName === 'TEXTAREA' ||
18
+ target.isContentEditable);
19
+ }
20
+ /**
21
+ * View-agnostic mutation keyboard shortcuts. The same handler is exposed through
22
+ * context (`mutationKeyDown`) and attached by each view to its own scroller —
23
+ * the grid (merged with its 2D nav) and the list wrapper — so the shortcuts
24
+ * work identically in both without relying on event bubbling to the root.
25
+ *
26
+ * - **F2** — inline-rename the focused item, or the sole selected item (the list
27
+ * has no store roving-focus, so it falls back to a single selection).
28
+ * - **Delete** (and **⌘⌫** on macOS) — delete the selection. Plain `Backspace`
29
+ * stays reserved for the root's "go to parent" shortcut.
30
+ * - **Ctrl/⌘+D** — duplicate the selection.
31
+ *
32
+ * Each shortcut is a no-op unless its mutation callback is wired, and all are
33
+ * skipped while the focus is in an editable element (search box, rename field).
34
+ * The handler is `useCallback`-stable; live state is read through `useLatest`.
35
+ */
36
+ function useAssetMutationKeyboard(options) {
37
+ const { store, mutations } = options;
38
+ const mutationsRef = useLatest(mutations);
39
+ const selectionRef = useLatest(options.selection);
40
+ const onKeyDown = useCallback((event) => {
41
+ if (isEditableTarget(event.target))
42
+ return;
43
+ const key = event.key;
44
+ const m = mutationsRef.current;
45
+ if ((event.ctrlKey || event.metaKey) &&
46
+ (key === 'd' || key === 'D') &&
47
+ m.canDuplicate) {
48
+ event.preventDefault();
49
+ m.duplicateItems();
50
+ return;
51
+ }
52
+ if (key === 'F2' && m.canRename) {
53
+ const focusedId = store.getFocusedId();
54
+ const sel = selectionRef.current;
55
+ const targetId = focusedId ?? (sel.size === 1 ? [...sel][0] : undefined);
56
+ if (targetId !== undefined) {
57
+ event.preventDefault();
58
+ m.beginRename(targetId);
59
+ }
60
+ return;
61
+ }
62
+ if ((key === 'Delete' || (event.metaKey && key === 'Backspace')) &&
63
+ m.canDelete) {
64
+ event.preventDefault();
65
+ m.deleteItems();
66
+ }
67
+ }, [store, mutationsRef, selectionRef]);
68
+ return { onKeyDown };
69
+ }
70
+
71
+ export { useAssetMutationKeyboard };
72
+ //# sourceMappingURL=useAssetMutationKeyboard.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAssetMutationKeyboard.js","sources":["src/components/editor/AssetBrowser/useAssetMutationKeyboard.ts"],"sourcesContent":["'use client';\n\nimport { useCallback } from 'react';\n\nimport { useLatest } from '@/hooks';\n\nimport type { AssetBrowserStore } from './AssetBrowserStore';\nimport type { AssetMutationsApi } from './useAssetMutations';\nimport type { KeyboardEvent } from 'react';\n\nexport interface UseAssetMutationKeyboardOptions {\n store: AssetBrowserStore;\n mutations: AssetMutationsApi;\n /** Live selection set — the F2 rename target falls back to a single selection. */\n selection: ReadonlySet<string>;\n}\n\nexport interface AssetMutationKeyboard {\n /** Attach to the AssetBrowser root: F2 / Delete / Ctrl+D, view-agnostic. */\n onKeyDown: (event: KeyboardEvent) => void;\n}\n\nfunction isEditableTarget(target: EventTarget | null): boolean {\n if (!(target instanceof HTMLElement)) return false;\n return (\n target.tagName === 'INPUT' ||\n target.tagName === 'TEXTAREA' ||\n target.isContentEditable\n );\n}\n\n/**\n * View-agnostic mutation keyboard shortcuts. The same handler is exposed through\n * context (`mutationKeyDown`) and attached by each view to its own scroller —\n * the grid (merged with its 2D nav) and the list wrapper — so the shortcuts\n * work identically in both without relying on event bubbling to the root.\n *\n * - **F2** — inline-rename the focused item, or the sole selected item (the list\n * has no store roving-focus, so it falls back to a single selection).\n * - **Delete** (and **⌘⌫** on macOS) — delete the selection. Plain `Backspace`\n * stays reserved for the root's \"go to parent\" shortcut.\n * - **Ctrl/⌘+D** — duplicate the selection.\n *\n * Each shortcut is a no-op unless its mutation callback is wired, and all are\n * skipped while the focus is in an editable element (search box, rename field).\n * The handler is `useCallback`-stable; live state is read through `useLatest`.\n */\nexport function useAssetMutationKeyboard(\n options: UseAssetMutationKeyboardOptions\n): AssetMutationKeyboard {\n const { store, mutations } = options;\n const mutationsRef = useLatest(mutations);\n const selectionRef = useLatest(options.selection);\n\n const onKeyDown = useCallback(\n (event: KeyboardEvent): void => {\n if (isEditableTarget(event.target)) return;\n const key = event.key;\n const m = mutationsRef.current;\n\n if (\n (event.ctrlKey || event.metaKey) &&\n (key === 'd' || key === 'D') &&\n m.canDuplicate\n ) {\n event.preventDefault();\n m.duplicateItems();\n return;\n }\n if (key === 'F2' && m.canRename) {\n const focusedId = store.getFocusedId();\n const sel = selectionRef.current;\n const targetId =\n focusedId ?? (sel.size === 1 ? [...sel][0] : undefined);\n if (targetId !== undefined) {\n event.preventDefault();\n m.beginRename(targetId);\n }\n return;\n }\n if (\n (key === 'Delete' || (event.metaKey && key === 'Backspace')) &&\n m.canDelete\n ) {\n event.preventDefault();\n m.deleteItems();\n }\n },\n [store, mutationsRef, selectionRef]\n );\n\n return { onKeyDown };\n}\n"],"names":[],"mappings":";;;;;;;;;;;;AAsBA;AACE;AAAsC;AACtC;;;AAKF;AAEA;;;;;;;;;;;;;;;AAeG;AACG;AAGJ;AACA;;AAGA;AAEI;;AACA;AACA;;AAIE;;;;;;;AAQA;AACA;;AAGA;;AAEE;;;;AAIJ;;;;;;;AAYN;;"}