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,122 @@
1
+ "use client";
2
+ import { jsx } from 'react/jsx-runtime';
3
+ import { useSyncExternalStore, useMemo } from 'react';
4
+ import { Minimap } from '../Minimap/index.js';
5
+ import { ViewportMinimap } from '../Minimap/ViewportMinimap.js';
6
+ import { cx } from '../../../utils/cx.js';
7
+ import { minimapSlotStyle } from './NodeGraph.css.js';
8
+ import { useNodeGraphData, useNodeGraphSelection, useNodeGraphStore } from './NodeGraphContext.js';
9
+ import { getNodeBox, computeNodesBounds } from './nodeGraphMath.js';
10
+ export { NodeGraphBackground, NodeGraphMinimap } from './NodeGraphSlots.js';
11
+
12
+ /**
13
+ * Live renderer for `<NodeGraph.Minimap>`. Mounted inside the `<Viewport>`
14
+ * subtree by the main `NodeGraph` component when the user supplies a
15
+ * minimap slot child.
16
+ */
17
+ /**
18
+ * Draw a two-tone "header strip + body" mini-node into the minimap canvas,
19
+ * converting the node's world rect to minimap pixels via the draw helpers.
20
+ */
21
+ function drawMiniNode(ctx, info, rect, bodyColor, headerColor) {
22
+ const tl = info.worldToMinimap({ x: rect.x, y: rect.y });
23
+ const br = info.worldToMinimap({
24
+ x: rect.x + rect.width,
25
+ y: rect.y + rect.height,
26
+ });
27
+ const x = Math.min(tl.x, br.x);
28
+ const y = Math.min(tl.y, br.y);
29
+ const w = Math.abs(br.x - tl.x);
30
+ const h = Math.abs(br.y - tl.y);
31
+ ctx.fillStyle = bodyColor ?? 'rgba(180, 190, 210, 0.5)';
32
+ ctx.fillRect(x, y, w, h);
33
+ const headerH = Math.min(h, Math.max(2, h * 0.32));
34
+ ctx.fillStyle = headerColor;
35
+ ctx.fillRect(x, y, w, headerH);
36
+ }
37
+ function NodeGraphMinimapInner({ placement = 'bottom-right', margin = 12, width = 200, title, className, selectedColor, nodeStyle, }) {
38
+ const data = useNodeGraphData();
39
+ const selection = useNodeGraphSelection();
40
+ const store = useNodeGraphStore();
41
+ // Subscribe to measured-size updates so the minimap rect for each node
42
+ // grows/shrinks as its DOM body changes height (auto-sized nodes). The
43
+ // version snapshot doubles as a `useMemo` dep below, so the item /
44
+ // bounds caches invalidate on every real size change.
45
+ const measuredSizesVersion = useSyncExternalStore(store.subscribeMeasuredSizes, store.getMeasuredSizesVersion);
46
+ const items = useMemo(() => {
47
+ return data.nodes.map(node => {
48
+ const box = getNodeBox(node, store.getMeasuredSize(node.id), data.defaultNodeSize);
49
+ const isSelected = selection.nodes.includes(node.id);
50
+ const style = nodeStyle?.(node);
51
+ // Selection tint wins over the per-node body colour so the highlight
52
+ // stays visible.
53
+ const bodyColor = isSelected && selectedColor ? selectedColor : style?.color;
54
+ const headerColor = style?.headerColor;
55
+ if (headerColor) {
56
+ const rect = {
57
+ x: box.x,
58
+ y: box.y,
59
+ width: box.width,
60
+ height: box.height,
61
+ };
62
+ const item = {
63
+ id: node.id,
64
+ type: 'custom',
65
+ bounds: rect,
66
+ draw: (ctx, info) => {
67
+ drawMiniNode(ctx, info, rect, bodyColor, headerColor);
68
+ },
69
+ };
70
+ return item;
71
+ }
72
+ const item = {
73
+ id: node.id,
74
+ type: 'rect',
75
+ x: box.x,
76
+ y: box.y,
77
+ width: box.width,
78
+ height: box.height,
79
+ };
80
+ if (bodyColor)
81
+ item.color = bodyColor;
82
+ return item;
83
+ });
84
+ // `measuredSizesVersion` is an intentional invalidation key: the body reads
85
+ // `store.getMeasuredSize(...)` — mutable state React can't track — so the
86
+ // memo must recompute whenever a node's measured size changes. The linter
87
+ // flags it as unused because it isn't referenced directly.
88
+ // eslint-disable-next-line react-hooks/exhaustive-deps
89
+ }, [
90
+ data.nodes,
91
+ data.defaultNodeSize,
92
+ selection.nodes,
93
+ selectedColor,
94
+ nodeStyle,
95
+ store,
96
+ measuredSizesVersion,
97
+ ]);
98
+ const worldBounds = useMemo(() => {
99
+ const bounds = computeNodesBounds(data.nodes, store.getMeasuredSize, data.defaultNodeSize);
100
+ if (bounds.width === 0 && bounds.height === 0) {
101
+ // Provide a sensible default world rect so the minimap renders even
102
+ // when the graph is empty.
103
+ return { x: -200, y: -150, width: 400, height: 300 };
104
+ }
105
+ // Add 10% padding around content for nicer framing.
106
+ const padX = bounds.width * 0.1;
107
+ const padY = bounds.height * 0.1;
108
+ return {
109
+ x: bounds.x - padX,
110
+ y: bounds.y - padY,
111
+ width: bounds.width + padX * 2,
112
+ height: bounds.height + padY * 2,
113
+ };
114
+ // See note above: `measuredSizesVersion` keys the cache off mutable measured
115
+ // sizes that `computeNodesBounds` reads via `store.getMeasuredSize`.
116
+ // eslint-disable-next-line react-hooks/exhaustive-deps
117
+ }, [data.nodes, data.defaultNodeSize, store, measuredSizesVersion]);
118
+ return (jsx(ViewportMinimap, { placement: placement, margin: margin, width: width, items: items, worldBounds: worldBounds, className: cx(minimapSlotStyle, className), children: title ? jsx(Minimap.Title, { children: title }) : null }));
119
+ }
120
+
121
+ export { NodeGraphMinimapInner };
122
+ //# sourceMappingURL=NodeGraphMinimap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NodeGraphMinimap.js","sources":["src/components/editor/NodeGraph/NodeGraphMinimap.tsx"],"sourcesContent":["'use client';\n\nimport React, { useMemo, useSyncExternalStore } from 'react';\n\nimport { Minimap } from '@/components/editor/Minimap';\nimport { ViewportMinimap } from '@/components/editor/Minimap/ViewportMinimap';\nimport { cx } from '@/utils/cx';\n\nimport { minimapSlotStyle } from './NodeGraph.css';\nimport {\n useNodeGraphData,\n useNodeGraphSelection,\n useNodeGraphStore,\n} from './NodeGraphContext';\nimport { computeNodesBounds, getNodeBox } from './nodeGraphMath';\n\nimport type { NodeGraphMinimapSlotProps } from './NodeGraph.types';\nimport type {\n MinimapCustomItem,\n MinimapDrawInfo,\n MinimapItem,\n MinimapRectItem,\n} from '@/components/editor/Minimap';\nimport type { WorldRect } from '@/components/primitives/viewport';\n\n/**\n * Live renderer for `<NodeGraph.Minimap>`. Mounted inside the `<Viewport>`\n * subtree by the main `NodeGraph` component when the user supplies a\n * minimap slot child.\n */\n/**\n * Draw a two-tone \"header strip + body\" mini-node into the minimap canvas,\n * converting the node's world rect to minimap pixels via the draw helpers.\n */\nfunction drawMiniNode(\n ctx: CanvasRenderingContext2D,\n info: MinimapDrawInfo,\n rect: WorldRect,\n bodyColor: string | undefined,\n headerColor: string\n): void {\n const tl = info.worldToMinimap({ x: rect.x, y: rect.y });\n const br = info.worldToMinimap({\n x: rect.x + rect.width,\n y: rect.y + rect.height,\n });\n const x = Math.min(tl.x, br.x);\n const y = Math.min(tl.y, br.y);\n const w = Math.abs(br.x - tl.x);\n const h = Math.abs(br.y - tl.y);\n ctx.fillStyle = bodyColor ?? 'rgba(180, 190, 210, 0.5)';\n ctx.fillRect(x, y, w, h);\n const headerH = Math.min(h, Math.max(2, h * 0.32));\n ctx.fillStyle = headerColor;\n ctx.fillRect(x, y, w, headerH);\n}\n\nexport function NodeGraphMinimapInner({\n placement = 'bottom-right',\n margin = 12,\n width = 200,\n title,\n className,\n selectedColor,\n nodeStyle,\n}: NodeGraphMinimapSlotProps): React.ReactElement {\n const data = useNodeGraphData();\n const selection = useNodeGraphSelection();\n const store = useNodeGraphStore();\n // Subscribe to measured-size updates so the minimap rect for each node\n // grows/shrinks as its DOM body changes height (auto-sized nodes). The\n // version snapshot doubles as a `useMemo` dep below, so the item /\n // bounds caches invalidate on every real size change.\n const measuredSizesVersion = useSyncExternalStore(\n store.subscribeMeasuredSizes,\n store.getMeasuredSizesVersion\n );\n\n const items = useMemo<MinimapItem[]>(() => {\n return data.nodes.map<MinimapItem>(node => {\n const box = getNodeBox(\n node,\n store.getMeasuredSize(node.id),\n data.defaultNodeSize\n );\n const isSelected = selection.nodes.includes(node.id);\n const style = nodeStyle?.(node);\n // Selection tint wins over the per-node body colour so the highlight\n // stays visible.\n const bodyColor =\n isSelected && selectedColor ? selectedColor : style?.color;\n const headerColor = style?.headerColor;\n\n if (headerColor) {\n const rect: WorldRect = {\n x: box.x,\n y: box.y,\n width: box.width,\n height: box.height,\n };\n const item: MinimapCustomItem = {\n id: node.id,\n type: 'custom',\n bounds: rect,\n draw: (ctx, info) => {\n drawMiniNode(ctx, info, rect, bodyColor, headerColor);\n },\n };\n return item;\n }\n\n const item: MinimapRectItem = {\n id: node.id,\n type: 'rect',\n x: box.x,\n y: box.y,\n width: box.width,\n height: box.height,\n };\n if (bodyColor) item.color = bodyColor;\n return item;\n });\n // `measuredSizesVersion` is an intentional invalidation key: the body reads\n // `store.getMeasuredSize(...)` — mutable state React can't track — so the\n // memo must recompute whenever a node's measured size changes. The linter\n // flags it as unused because it isn't referenced directly.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n data.nodes,\n data.defaultNodeSize,\n selection.nodes,\n selectedColor,\n nodeStyle,\n store,\n measuredSizesVersion,\n ]);\n\n const worldBounds = useMemo(() => {\n const bounds = computeNodesBounds(\n data.nodes,\n store.getMeasuredSize,\n data.defaultNodeSize\n );\n if (bounds.width === 0 && bounds.height === 0) {\n // Provide a sensible default world rect so the minimap renders even\n // when the graph is empty.\n return { x: -200, y: -150, width: 400, height: 300 };\n }\n // Add 10% padding around content for nicer framing.\n const padX = bounds.width * 0.1;\n const padY = bounds.height * 0.1;\n return {\n x: bounds.x - padX,\n y: bounds.y - padY,\n width: bounds.width + padX * 2,\n height: bounds.height + padY * 2,\n };\n // See note above: `measuredSizesVersion` keys the cache off mutable measured\n // sizes that `computeNodesBounds` reads via `store.getMeasuredSize`.\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [data.nodes, data.defaultNodeSize, store, measuredSizesVersion]);\n\n return (\n <ViewportMinimap\n placement={placement}\n margin={margin}\n width={width}\n items={items}\n worldBounds={worldBounds}\n className={cx(minimapSlotStyle, className)}\n >\n {title ? <Minimap.Title>{title}</Minimap.Title> : null}\n </ViewportMinimap>\n );\n}\n\nexport { NodeGraphMinimap, NodeGraphBackground } from './NodeGraphSlots';\n"],"names":[],"mappings":";;;;;;;;;;;AAyBA;;;;AAIG;AACH;;;AAGG;AACH;;AAQE;AACE;AACA;AACD;AACD;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEF;AAEM;AASJ;AACA;AACA;;;;;AAKA;AAKA;;AAEI;AAKA;AACA;;;AAGA;AAEA;;AAGE;;;;;;AAMA;;AAEE;AACA;AACA;;;;AAIF;;AAGF;;AAEE;;;;;;AAMF;AAAe;AACf;AACF;;;;;;AAMF;AACE;AACA;AACA;;;;;AAKD;AAED;AACE;AAKA;;;AAGE;;;AAGF;AACA;;AAEE;AACA;AACA;AACA;;;;;AAKJ;;AAcF;;"}
@@ -0,0 +1,170 @@
1
+ "use client";
2
+ import { jsx } from 'react/jsx-runtime';
3
+ import { assignInlineVars } from '@vanilla-extract/dynamic';
4
+ import React, { useRef, useCallback, useDeferredValue, useMemo } from 'react';
5
+ import { useViewportStore } from '../../primitives/viewport/ViewportContext.js';
6
+ import '../../../utils/devWarn.js';
7
+ import { useResizeObserver } from '../../../hooks/useResizeObserver/useResizeObserver.js';
8
+ import '../../../hooks/useBreakpoint/useBreakpoint.js';
9
+ import './../../../assets/src/theme/lightTheme.css.ts.vanilla-Ct6f9Iym.css';
10
+ import '@vanilla-extract/css';
11
+ import './../../../assets/src/theme/darkTheme.css.ts.vanilla-BHZ3ecRn.css';
12
+ import './../../../assets/src/theme/globalScrollbars.css.ts.vanilla-BAJwnUEJ.css';
13
+ import '../../../hooks/useNavigationHistory/useNavigationHistory.js';
14
+ import { cx } from '../../../utils/cx.js';
15
+ import { nodeWrapperRecipe, defaultNodeBodyRecipe, nodeWidthVar, nodeHeightVar } from './NodeGraph.css.js';
16
+ import { useNodeGraphStore } from './NodeGraphContext.js';
17
+ import { NodeGraphNodeContext } from './NodeGraphNodeContext.js';
18
+ import { useStoreSlice } from './useStoreSlice.js';
19
+
20
+ function DefaultNodeBody({ node, selected, }) {
21
+ let label = node.id;
22
+ if (node.data !== null &&
23
+ typeof node.data === 'object' &&
24
+ 'label' in node.data) {
25
+ const candidate = node.data.label;
26
+ if (typeof candidate === 'string')
27
+ label = candidate;
28
+ }
29
+ return (jsx("div", { className: defaultNodeBodyRecipe({ selected }), children: jsx("span", { children: label }) }));
30
+ }
31
+ function pointEqualNullable(a, b) {
32
+ if (a === b)
33
+ return true;
34
+ if (a === null || b === null)
35
+ return false;
36
+ return a.x === b.x && a.y === b.y;
37
+ }
38
+ /**
39
+ * Internal — render a single node as an HTML element positioned in world
40
+ * space. Connection endpoints live inside the consumer's `renderNode`
41
+ * tree as `<NodeGraph.Port>` slots; this view just provides the wrapper,
42
+ * the `NodeGraphNodeContext`, and the ResizeObserver that feeds the
43
+ * node's measured size back to the store.
44
+ *
45
+ * Subscribes to per-id slices via `useStoreSlice` so each node re-renders
46
+ * only when its own selection / drag delta / hover state changes — not on
47
+ * every pointermove tick of an unrelated drag.
48
+ *
49
+ * Wrapped in `React.memo` so a parent re-render (e.g. caused by an
50
+ * unrelated controlled-state update) doesn't cascade through every
51
+ * mounted node. Stable identity for the parent-provided handlers
52
+ * (`onBodyPointerDown`, etc.) is ensured by `useCallback` in
53
+ * `NodeGraphImpl`; `node` identity is preserved by consumer immutability.
54
+ */
55
+ function NodeGraphNodeViewImpl(props) {
56
+ const { node, renderNode, onBodyPointerDown, onBodyPointerUp, onPortPointerDown, onBodyContextMenu, } = props;
57
+ const store = useNodeGraphStore();
58
+ const viewportStore = useViewportStore();
59
+ const wrapperRef = useRef(null);
60
+ const selected = useStoreSlice(store.subscribeSelection, store.getSelection, sel => sel.nodes.includes(node.id));
61
+ // Subscribe to the per-node interaction channel rather than the global
62
+ // one. The store fans notifications out only to ids in the prev ∪ next
63
+ // drag set, so an unrelated drag of another node never wakes this
64
+ // subscriber. The selector itself is unchanged — `useStoreSlice` still
65
+ // reads from the global getInteraction snapshot to decide whether *this*
66
+ // id has a delta to apply.
67
+ const subscribeNodeInteraction = useCallback((cb) => store.subscribeNodeInteraction(node.id, cb), [store, node.id]);
68
+ const dragDelta = useStoreSlice(subscribeNodeInteraction, store.getInteraction, interaction => {
69
+ if (interaction.kind === 'drag-nodes' &&
70
+ interaction.nodeIds.has(node.id)) {
71
+ return interaction.delta;
72
+ }
73
+ // Nodes fully contained inside a dragged group move with the group.
74
+ if (interaction.kind === 'drag-groups' &&
75
+ interaction.containedNodeIds.has(node.id)) {
76
+ return interaction.delta;
77
+ }
78
+ return null;
79
+ }, pointEqualNullable);
80
+ const dragging = dragDelta !== null;
81
+ const hovered = useStoreSlice(store.subscribeHover, store.getHover, hover => hover.hoveredNodeId === node.id);
82
+ const liveZoom = useStoreSlice(viewportStore.subscribeTransform, viewportStore.getTransform, transform => transform.zoom);
83
+ // Defer the zoom value passed into consumer renderNode so heavy node
84
+ // bodies don't block the pointer gesture loop during a zoom-while-drag.
85
+ const zoom = useDeferredValue(liveZoom);
86
+ // ── Auto-size: feed measured wrapper size back to the store ──
87
+ //
88
+ // When the consumer omits `node.width`/`height`, the library reads the
89
+ // measured DOM size for hit-testing, marquee, and fitToContent. Explicit
90
+ // overrides on the node still win — this just records the rendered size.
91
+ useResizeObserver(wrapperRef, entry => {
92
+ store.setMeasuredSize(node.id, {
93
+ width: entry.contentRect.width,
94
+ height: entry.contentRect.height,
95
+ });
96
+ });
97
+ const explicitWidth = node.width;
98
+ const explicitHeight = node.height;
99
+ const autoSize = explicitWidth === undefined && explicitHeight === undefined;
100
+ const draggable = node.draggable !== false;
101
+ const selectable = node.selectable !== false;
102
+ const wrapperStyle = useMemo(() => {
103
+ const x = node.position.x + (dragDelta?.x ?? 0);
104
+ const y = node.position.y + (dragDelta?.y ?? 0);
105
+ // assignInlineVars only emits the keys it's given — when explicit
106
+ // dimensions are absent the auto-sized recipe variant kicks in.
107
+ const dimensionVars = {};
108
+ if (explicitWidth !== undefined) {
109
+ dimensionVars[nodeWidthVar] = `${explicitWidth}px`;
110
+ }
111
+ if (explicitHeight !== undefined) {
112
+ dimensionVars[nodeHeightVar] = `${explicitHeight}px`;
113
+ }
114
+ return {
115
+ transform: `translate(${x}px, ${y}px)`,
116
+ ...assignInlineVars(dimensionVars),
117
+ };
118
+ }, [
119
+ node.position.x,
120
+ node.position.y,
121
+ dragDelta?.x,
122
+ dragDelta?.y,
123
+ explicitWidth,
124
+ explicitHeight,
125
+ ]);
126
+ const renderCtx = {
127
+ selected,
128
+ dragging,
129
+ hovered,
130
+ zoom,
131
+ };
132
+ const body = renderNode ? (renderNode(node, renderCtx)) : (jsx(DefaultNodeBody, { node: node, selected: selected }));
133
+ // ── Hover wiring ──
134
+ const onPointerEnter = useCallback(() => {
135
+ const current = store.getHover();
136
+ if (current.hoveredNodeId === node.id)
137
+ return;
138
+ store.setHover({ ...current, hoveredNodeId: node.id });
139
+ }, [store, node.id]);
140
+ const onPointerLeave = useCallback(() => {
141
+ const current = store.getHover();
142
+ if (current.hoveredNodeId !== node.id)
143
+ return;
144
+ store.setHover({ ...current, hoveredNodeId: null });
145
+ }, [store, node.id]);
146
+ // ── Per-node context for `<NodeGraph.Port>` slots ──
147
+ const nodeContext = useMemo(() => ({
148
+ nodeId: node.id,
149
+ onPortPointerDown: (event, portId) => {
150
+ onPortPointerDown(event, node.id, portId);
151
+ },
152
+ }), [node.id, onPortPointerDown]);
153
+ return (jsx("div", { ref: wrapperRef, className: cx(nodeWrapperRecipe({
154
+ draggable,
155
+ selectable,
156
+ dragging,
157
+ autoSize,
158
+ })), style: wrapperStyle, "data-node-id": node.id, "data-hovered": hovered ? 'true' : undefined, "data-selected": selected ? 'true' : undefined, "data-dragging": dragging ? 'true' : undefined, onPointerDown: e => {
159
+ onBodyPointerDown(e, node);
160
+ }, onPointerUp: e => {
161
+ onBodyPointerUp(e, node);
162
+ }, onPointerEnter: onPointerEnter, onPointerLeave: onPointerLeave, onContextMenu: e => {
163
+ onBodyContextMenu(e, node);
164
+ }, children: jsx(NodeGraphNodeContext.Provider, { value: nodeContext, children: body }) }));
165
+ }
166
+ const NodeGraphNodeView = React.memo(NodeGraphNodeViewImpl);
167
+ NodeGraphNodeView.displayName = 'NodeGraphNodeView';
168
+
169
+ export { NodeGraphNodeView };
170
+ //# sourceMappingURL=NodeGraphNode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NodeGraphNode.js","sources":["src/components/editor/NodeGraph/NodeGraphNode.tsx"],"sourcesContent":["'use client';\n\nimport { assignInlineVars } from '@vanilla-extract/dynamic';\nimport React, { useCallback, useDeferredValue, useMemo, useRef } from 'react';\n\nimport { useViewportStore } from '@/components/primitives/viewport/ViewportContext';\nimport { useResizeObserver } from '@/hooks';\nimport { cx } from '@/utils/cx';\n\nimport {\n defaultNodeBodyRecipe,\n nodeHeightVar,\n nodeWidthVar,\n nodeWrapperRecipe,\n} from './NodeGraph.css';\nimport { useNodeGraphStore } from './NodeGraphContext';\nimport { NodeGraphNodeContext } from './NodeGraphNodeContext';\nimport { useStoreSlice } from './useStoreSlice';\n\nimport type { NodeGraphNode, NodeGraphRenderCtx } from './NodeGraph.types';\nimport type { NodeGraphNodeContextValue } from './NodeGraphNodeContext';\nimport type { Point2D } from '@/components/primitives/canvas/canvas.types';\n\ninterface NodeGraphNodeViewProps {\n node: NodeGraphNode;\n renderNode?: (\n node: NodeGraphNode,\n ctx: NodeGraphRenderCtx\n ) => React.ReactNode;\n /** Pointer-down on the node body (drag / select). */\n onBodyPointerDown: (\n event: React.PointerEvent<HTMLDivElement>,\n node: NodeGraphNode\n ) => void;\n /** Pointer-up on the node body (used to detect plain clicks for selection). */\n onBodyPointerUp: (\n event: React.PointerEvent<HTMLDivElement>,\n node: NodeGraphNode\n ) => void;\n /** Pointer-down on a port (starts a connection drag). */\n onPortPointerDown: (\n event: React.PointerEvent<HTMLElement>,\n nodeId: string,\n portId: string\n ) => void;\n /** Native context menu (right-click) — dispatched up to the main component. */\n onBodyContextMenu: (\n event: React.MouseEvent<HTMLDivElement>,\n node: NodeGraphNode\n ) => void;\n}\n\nfunction DefaultNodeBody({\n node,\n selected,\n}: {\n node: NodeGraphNode;\n selected: boolean;\n}): React.ReactElement {\n let label = node.id;\n if (\n node.data !== null &&\n typeof node.data === 'object' &&\n 'label' in node.data\n ) {\n const candidate = (node.data as { label?: unknown }).label;\n if (typeof candidate === 'string') label = candidate;\n }\n return (\n <div className={defaultNodeBodyRecipe({ selected })}>\n <span>{label}</span>\n </div>\n );\n}\n\nfunction pointEqualNullable(a: Point2D | null, b: Point2D | null): boolean {\n if (a === b) return true;\n if (a === null || b === null) return false;\n return a.x === b.x && a.y === b.y;\n}\n\n/**\n * Internal — render a single node as an HTML element positioned in world\n * space. Connection endpoints live inside the consumer's `renderNode`\n * tree as `<NodeGraph.Port>` slots; this view just provides the wrapper,\n * the `NodeGraphNodeContext`, and the ResizeObserver that feeds the\n * node's measured size back to the store.\n *\n * Subscribes to per-id slices via `useStoreSlice` so each node re-renders\n * only when its own selection / drag delta / hover state changes — not on\n * every pointermove tick of an unrelated drag.\n *\n * Wrapped in `React.memo` so a parent re-render (e.g. caused by an\n * unrelated controlled-state update) doesn't cascade through every\n * mounted node. Stable identity for the parent-provided handlers\n * (`onBodyPointerDown`, etc.) is ensured by `useCallback` in\n * `NodeGraphImpl`; `node` identity is preserved by consumer immutability.\n */\nfunction NodeGraphNodeViewImpl(\n props: NodeGraphNodeViewProps\n): React.ReactElement {\n const {\n node,\n renderNode,\n onBodyPointerDown,\n onBodyPointerUp,\n onPortPointerDown,\n onBodyContextMenu,\n } = props;\n const store = useNodeGraphStore();\n const viewportStore = useViewportStore();\n const wrapperRef = useRef<HTMLDivElement>(null);\n\n const selected = useStoreSlice(\n store.subscribeSelection,\n store.getSelection,\n sel => sel.nodes.includes(node.id)\n );\n\n // Subscribe to the per-node interaction channel rather than the global\n // one. The store fans notifications out only to ids in the prev ∪ next\n // drag set, so an unrelated drag of another node never wakes this\n // subscriber. The selector itself is unchanged — `useStoreSlice` still\n // reads from the global getInteraction snapshot to decide whether *this*\n // id has a delta to apply.\n const subscribeNodeInteraction = useCallback(\n (cb: () => void) => store.subscribeNodeInteraction(node.id, cb),\n [store, node.id]\n );\n const dragDelta = useStoreSlice<\n ReturnType<typeof store.getInteraction>,\n Point2D | null\n >(\n subscribeNodeInteraction,\n store.getInteraction,\n interaction => {\n if (\n interaction.kind === 'drag-nodes' &&\n interaction.nodeIds.has(node.id)\n ) {\n return interaction.delta;\n }\n // Nodes fully contained inside a dragged group move with the group.\n if (\n interaction.kind === 'drag-groups' &&\n interaction.containedNodeIds.has(node.id)\n ) {\n return interaction.delta;\n }\n return null;\n },\n pointEqualNullable\n );\n const dragging = dragDelta !== null;\n\n const hovered = useStoreSlice(\n store.subscribeHover,\n store.getHover,\n hover => hover.hoveredNodeId === node.id\n );\n\n const liveZoom = useStoreSlice(\n viewportStore.subscribeTransform,\n viewportStore.getTransform,\n transform => transform.zoom\n );\n // Defer the zoom value passed into consumer renderNode so heavy node\n // bodies don't block the pointer gesture loop during a zoom-while-drag.\n const zoom = useDeferredValue(liveZoom);\n\n // ── Auto-size: feed measured wrapper size back to the store ──\n //\n // When the consumer omits `node.width`/`height`, the library reads the\n // measured DOM size for hit-testing, marquee, and fitToContent. Explicit\n // overrides on the node still win — this just records the rendered size.\n useResizeObserver(wrapperRef, entry => {\n store.setMeasuredSize(node.id, {\n width: entry.contentRect.width,\n height: entry.contentRect.height,\n });\n });\n\n const explicitWidth = node.width;\n const explicitHeight = node.height;\n const autoSize = explicitWidth === undefined && explicitHeight === undefined;\n const draggable = node.draggable !== false;\n const selectable = node.selectable !== false;\n\n const wrapperStyle = useMemo<React.CSSProperties>(() => {\n const x = node.position.x + (dragDelta?.x ?? 0);\n const y = node.position.y + (dragDelta?.y ?? 0);\n // assignInlineVars only emits the keys it's given — when explicit\n // dimensions are absent the auto-sized recipe variant kicks in.\n const dimensionVars: Record<string, string> = {};\n if (explicitWidth !== undefined) {\n dimensionVars[nodeWidthVar] = `${explicitWidth}px`;\n }\n if (explicitHeight !== undefined) {\n dimensionVars[nodeHeightVar] = `${explicitHeight}px`;\n }\n return {\n transform: `translate(${x}px, ${y}px)`,\n ...assignInlineVars(dimensionVars),\n };\n }, [\n node.position.x,\n node.position.y,\n dragDelta?.x,\n dragDelta?.y,\n explicitWidth,\n explicitHeight,\n ]);\n\n const renderCtx: NodeGraphRenderCtx = {\n selected,\n dragging,\n hovered,\n zoom,\n };\n\n const body = renderNode ? (\n renderNode(node, renderCtx)\n ) : (\n <DefaultNodeBody node={node} selected={selected} />\n );\n\n // ── Hover wiring ──\n const onPointerEnter = useCallback((): void => {\n const current = store.getHover();\n if (current.hoveredNodeId === node.id) return;\n store.setHover({ ...current, hoveredNodeId: node.id });\n }, [store, node.id]);\n\n const onPointerLeave = useCallback((): void => {\n const current = store.getHover();\n if (current.hoveredNodeId !== node.id) return;\n store.setHover({ ...current, hoveredNodeId: null });\n }, [store, node.id]);\n\n // ── Per-node context for `<NodeGraph.Port>` slots ──\n const nodeContext = useMemo<NodeGraphNodeContextValue>(\n () => ({\n nodeId: node.id,\n onPortPointerDown: (event, portId) => {\n onPortPointerDown(event, node.id, portId);\n },\n }),\n [node.id, onPortPointerDown]\n );\n\n return (\n <div\n ref={wrapperRef}\n className={cx(\n nodeWrapperRecipe({\n draggable,\n selectable,\n dragging,\n autoSize,\n })\n )}\n style={wrapperStyle}\n data-node-id={node.id}\n data-hovered={hovered ? 'true' : undefined}\n data-selected={selected ? 'true' : undefined}\n data-dragging={dragging ? 'true' : undefined}\n onPointerDown={e => {\n onBodyPointerDown(e, node);\n }}\n onPointerUp={e => {\n onBodyPointerUp(e, node);\n }}\n onPointerEnter={onPointerEnter}\n onPointerLeave={onPointerLeave}\n onContextMenu={e => {\n onBodyContextMenu(e, node);\n }}\n >\n <NodeGraphNodeContext.Provider value={nodeContext}>\n {body}\n </NodeGraphNodeContext.Provider>\n </div>\n );\n}\n\nexport const NodeGraphNodeView = React.memo(NodeGraphNodeViewImpl);\nNodeGraphNodeView.displayName = 'NodeGraphNodeView';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AAoDA;AAOE;AACA;AAEE;AACA;AAEA;;;;AAGF;AAKF;AAEA;;AACe;AACb;AAA8B;AAC9B;AACF;AAEA;;;;;;;;;;;;;;;;AAgBG;AACH;AAGE;AAQA;AACA;AACA;;;;;;;;AAcA;AAIA;AAOI;;;;;AAOA;;;;AAMA;;AAIJ;;;;;AAeA;;;;;;AAOA;AACE;AACE;AACA;AACD;AACH;AAEA;AACA;;AAEA;AACA;AAEA;AACE;AACA;;;;AAIA;AACE;;AAEF;AACE;;;AAGA;;;AAGJ;;;AAGE;AACA;;;AAGD;AAED;;;;;;AAOA;;AAOA;AACE;AACA;;AACA;;AAGF;AACE;AACA;;AACA;;;AAIF;;AAGI;;;;;;;;;;AAwBE;AACF;AAEE;AACF;AAIE;AACF;AAON;AAEO;AACP;;"}
@@ -0,0 +1,21 @@
1
+ "use client";
2
+ import { createContext, useContext } from 'react';
3
+
4
+ const NodeGraphNodeContext =
5
+ /*#__PURE__*/ createContext(null);
6
+ /**
7
+ * Read the active per-node context. Throws when used outside a node body
8
+ * (i.e. outside `renderNode`) — the throw is intentional, since the
9
+ * library guarantees the context is provided when the consumer's
10
+ * `renderNode` is invoked.
11
+ */
12
+ function useNodeGraphNodeContext() {
13
+ const ctx = useContext(NodeGraphNodeContext);
14
+ if (!ctx) {
15
+ throw new Error('<NodeGraph.Port> must be rendered inside the renderNode body of a <NodeGraph>');
16
+ }
17
+ return ctx;
18
+ }
19
+
20
+ export { NodeGraphNodeContext, useNodeGraphNodeContext };
21
+ //# sourceMappingURL=NodeGraphNodeContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NodeGraphNodeContext.js","sources":["src/components/editor/NodeGraph/NodeGraphNodeContext.ts"],"sourcesContent":["'use client';\n\nimport { createContext, useContext } from 'react';\n\nimport type React from 'react';\n\n/**\n * Per-node context wired by `NodeGraphNodeView` so `<NodeGraph.Port>` slots\n * rendered inside `renderNode` can identify their owning node and start a\n * connection drag without the consumer threading any IDs through manually.\n */\nexport interface NodeGraphNodeContextValue {\n /** Owning node id. */\n nodeId: string;\n /**\n * Start a connection drag from the given port. Wired by the parent to\n * the shared `useNodeGraphConnection` controller.\n */\n onPortPointerDown: (\n event: React.PointerEvent<HTMLElement>,\n portId: string\n ) => void;\n}\n\nexport const NodeGraphNodeContext =\n /*#__PURE__*/ createContext<NodeGraphNodeContextValue | null>(null);\n\n/**\n * Read the active per-node context. Throws when used outside a node body\n * (i.e. outside `renderNode`) — the throw is intentional, since the\n * library guarantees the context is provided when the consumer's\n * `renderNode` is invoked.\n */\nexport function useNodeGraphNodeContext(): NodeGraphNodeContextValue {\n const ctx = useContext(NodeGraphNodeContext);\n if (!ctx) {\n throw new Error(\n '<NodeGraph.Port> must be rendered inside the renderNode body of a <NodeGraph>'\n );\n }\n return ctx;\n}\n"],"names":[],"mappings":";;;;AAyBE;AAEF;;;;;AAKG;;AAED;;AAEE;;AAIF;AACF;;"}
@@ -0,0 +1,56 @@
1
+ "use client";
2
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
3
+ import React from 'react';
4
+ import { cx } from '../../../utils/cx.js';
5
+ import { pinRowRecipe, nodeBodyRecipe, nodeHeaderIconStyle, nodeHeaderTextStyle, nodeHeaderTitleStyle, nodeHeaderSubtitleStyle, nodeHeaderStyle, pinListColumnStyle, pinListStyle } from './NodeGraph.css.js';
6
+ import { useNodeGraphStore } from './NodeGraphContext.js';
7
+ import { useNodeGraphNodeContext } from './NodeGraphNodeContext.js';
8
+ import { useStoreSlice } from './useStoreSlice.js';
9
+
10
+ function NodeGraphNodeBody({ accent, selected: selectedProp, hovered: hoveredProp, variant = 'panel', className, style, children, }) {
11
+ const { nodeId } = useNodeGraphNodeContext();
12
+ const store = useNodeGraphStore();
13
+ const autoSelected = useStoreSlice(store.subscribeSelection, store.getSelection, sel => sel.nodes.includes(nodeId));
14
+ const autoHovered = useStoreSlice(store.subscribeHover, store.getHover, hover => hover.hoveredNodeId === nodeId);
15
+ const selected = selectedProp ?? autoSelected;
16
+ const hovered = hoveredProp ?? autoHovered;
17
+ // Accent drives both the selected border and a soft glow. CSS vars
18
+ // let recipe variants pick up the consumer's value without us
19
+ // pre-baking a token contract for every possible colour.
20
+ const accentStyle = accent
21
+ ? { ['--etui-ng-accent']: accent }
22
+ : undefined;
23
+ return (jsx("div", { className: cx(nodeBodyRecipe({ selected, hovered, variant }), className), style: { ...accentStyle, ...style }, children: children }));
24
+ }
25
+ function NodeGraphNodeHeader({ title, subtitle, icon, background, className, style, children, }) {
26
+ const styleOverride = {
27
+ ...(background ? { background } : null),
28
+ ...style,
29
+ };
30
+ return (jsx("div", { className: cx(nodeHeaderStyle, className), style: styleOverride, children: children ?? (jsxs(Fragment, { children: [icon != null ? (jsx("span", { className: nodeHeaderIconStyle, children: icon })) : null, jsxs("div", { className: nodeHeaderTextStyle, children: [title != null ? (jsx("div", { className: nodeHeaderTitleStyle, children: title })) : null, subtitle != null ? (jsx("div", { className: nodeHeaderSubtitleStyle, children: subtitle })) : null] })] })) }));
31
+ }
32
+ function NodeGraphPinList({ className, style, columnGap = 16, children, }) {
33
+ const left = [];
34
+ const right = [];
35
+ const loose = [];
36
+ React.Children.forEach(children, child => {
37
+ if (!React.isValidElement(child)) {
38
+ loose.push(child);
39
+ return;
40
+ }
41
+ const side = child.props?.side ?? null;
42
+ if (side === 'left')
43
+ left.push(child);
44
+ else if (side === 'right')
45
+ right.push(child);
46
+ else
47
+ loose.push(child);
48
+ });
49
+ return (jsxs("div", { className: cx(pinListStyle, className), style: { columnGap, ...style }, children: [jsx("div", { className: pinListColumnStyle, children: left }), jsx("div", { className: pinListColumnStyle, children: right }), loose.length > 0 ? (jsx("div", { style: { gridColumn: '1 / -1' }, children: loose })) : null] }));
50
+ }
51
+ function NodeGraphPinRow({ side, height = 22, className, style, children, }) {
52
+ return (jsx("div", { className: cx(pinRowRecipe({ side }), className), style: { height, ...style }, "data-pin-side": side, children: children }));
53
+ }
54
+
55
+ export { NodeGraphNodeBody, NodeGraphNodeHeader, NodeGraphPinList, NodeGraphPinRow };
56
+ //# sourceMappingURL=NodeGraphNodeParts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NodeGraphNodeParts.js","sources":["src/components/editor/NodeGraph/NodeGraphNodeParts.tsx"],"sourcesContent":["'use client';\n\nimport React from 'react';\n\nimport { cx } from '@/utils/cx';\n\nimport {\n nodeBodyRecipe,\n nodeHeaderStyle,\n nodeHeaderIconStyle,\n nodeHeaderTextStyle,\n nodeHeaderTitleStyle,\n nodeHeaderSubtitleStyle,\n pinListStyle,\n pinListColumnStyle,\n pinRowRecipe,\n} from './NodeGraph.css';\nimport { useNodeGraphStore } from './NodeGraphContext';\nimport { useNodeGraphNodeContext } from './NodeGraphNodeContext';\nimport { useStoreSlice } from './useStoreSlice';\n\nimport type { NodeGraphPortSide } from './NodeGraph.types';\n\n/**\n * Default node body wrapper — a themed panel with the standard\n * selected/hovered visual states the library provides out of the box.\n * Drop it inside your `renderNode` and you get a node that looks at\n * home next to the rest of the library; override `className` / `style`\n * to take over.\n *\n * Selection / hover / drag state is read from the store via the\n * per-node context so the body re-themes itself without the consumer\n * threading state in from `renderNode`'s `ctx`. Pass `selected` /\n * `hovered` explicitly to drive the visual from outside (e.g. running\n * a node-state machine in your own React tree).\n */\nexport interface NodeGraphNodeBodyProps {\n /** Override the accent colour (default border / shadow when selected). */\n accent?: string;\n /** Override the auto-derived `selected` state. */\n selected?: boolean;\n /** Override the auto-derived `hovered` state. */\n hovered?: boolean;\n /** Visual variant — affects default chrome density. */\n variant?: 'panel' | 'flat' | 'minimal';\n /** Extra classes applied to the body wrapper. */\n className?: string;\n /** Inline style override (lower priority than CSS classes). */\n style?: React.CSSProperties;\n /** Body content — typically `<NodeGraph.NodeHeader>` + `<NodeGraph.PinList>`. */\n children?: React.ReactNode;\n}\n\nexport function NodeGraphNodeBody({\n accent,\n selected: selectedProp,\n hovered: hoveredProp,\n variant = 'panel',\n className,\n style,\n children,\n}: NodeGraphNodeBodyProps): React.ReactElement {\n const { nodeId } = useNodeGraphNodeContext();\n const store = useNodeGraphStore();\n\n const autoSelected = useStoreSlice(\n store.subscribeSelection,\n store.getSelection,\n sel => sel.nodes.includes(nodeId)\n );\n const autoHovered = useStoreSlice(\n store.subscribeHover,\n store.getHover,\n hover => hover.hoveredNodeId === nodeId\n );\n\n const selected = selectedProp ?? autoSelected;\n const hovered = hoveredProp ?? autoHovered;\n\n // Accent drives both the selected border and a soft glow. CSS vars\n // let recipe variants pick up the consumer's value without us\n // pre-baking a token contract for every possible colour.\n const accentStyle = accent\n ? ({ ['--etui-ng-accent' as string]: accent } as React.CSSProperties)\n : undefined;\n\n return (\n <div\n className={cx(nodeBodyRecipe({ selected, hovered, variant }), className)}\n style={{ ...accentStyle, ...style }}\n >\n {children}\n </div>\n );\n}\n\n/**\n * Header bar for a node — gradient strip + optional icon, title and\n * subtitle. Pass `children` to take full control of the header layout.\n */\nexport interface NodeGraphNodeHeaderProps {\n title?: React.ReactNode;\n subtitle?: React.ReactNode;\n /** Small leading icon (typically 14-18 px). */\n icon?: React.ReactNode;\n /** Override the header background — defaults to theme accent gradient. */\n background?: string;\n className?: string;\n style?: React.CSSProperties;\n children?: React.ReactNode;\n}\n\nexport function NodeGraphNodeHeader({\n title,\n subtitle,\n icon,\n background,\n className,\n style,\n children,\n}: NodeGraphNodeHeaderProps): React.ReactElement {\n const styleOverride: React.CSSProperties = {\n ...(background ? { background } : null),\n ...style,\n };\n return (\n <div className={cx(nodeHeaderStyle, className)} style={styleOverride}>\n {children ?? (\n <>\n {icon != null ? (\n <span className={nodeHeaderIconStyle}>{icon}</span>\n ) : null}\n <div className={nodeHeaderTextStyle}>\n {title != null ? (\n <div className={nodeHeaderTitleStyle}>{title}</div>\n ) : null}\n {subtitle != null ? (\n <div className={nodeHeaderSubtitleStyle}>{subtitle}</div>\n ) : null}\n </div>\n </>\n )}\n </div>\n );\n}\n\n/**\n * Two-column pin container — children are routed into the left or right\n * column based on each `<NodeGraph.PinRow side>`. Anything that isn't a\n * `<NodeGraph.PinRow>` falls through into a center \"loose\" slot below\n * the columns (so you can drop inline editors / body content next to\n * your pin rows without breaking layout).\n */\nexport interface NodeGraphPinListProps {\n className?: string;\n style?: React.CSSProperties;\n /** Gap between left and right columns, in CSS px. Default 16. */\n columnGap?: number;\n children?: React.ReactNode;\n}\n\nexport function NodeGraphPinList({\n className,\n style,\n columnGap = 16,\n children,\n}: NodeGraphPinListProps): React.ReactElement {\n const left: React.ReactNode[] = [];\n const right: React.ReactNode[] = [];\n const loose: React.ReactNode[] = [];\n\n React.Children.forEach(children, child => {\n if (!React.isValidElement(child)) {\n loose.push(child);\n return;\n }\n const side =\n (child.props as { side?: NodeGraphPortSide } | undefined)?.side ?? null;\n if (side === 'left') left.push(child);\n else if (side === 'right') right.push(child);\n else loose.push(child);\n });\n\n return (\n <div\n className={cx(pinListStyle, className)}\n style={{ columnGap, ...style }}\n >\n <div className={pinListColumnStyle}>{left}</div>\n <div className={pinListColumnStyle}>{right}</div>\n {loose.length > 0 ? (\n <div style={{ gridColumn: '1 / -1' }}>{loose}</div>\n ) : null}\n </div>\n );\n}\n\n/**\n * Single pin row — typically holds a `<NodeGraph.Port>` plus a label.\n * Side determines which end of the row the port sits at: `left` puts\n * the port first (left edge), `right` puts it last (right edge).\n *\n * The row is layout-only — pin position math comes from the slot's DOM\n * measurement, not from where in the row it lives. You can rearrange\n * the order inside the row without breaking edges.\n */\nexport interface NodeGraphPinRowProps {\n /** Which side this pin anchors to. Drives the layout / justification. */\n side: NodeGraphPortSide;\n /** Optional row height (CSS px). Default 22. */\n height?: number;\n className?: string;\n style?: React.CSSProperties;\n children?: React.ReactNode;\n}\n\nexport function NodeGraphPinRow({\n side,\n height = 22,\n className,\n style,\n children,\n}: NodeGraphPinRowProps): React.ReactElement {\n return (\n <div\n className={cx(pinRowRecipe({ side }), className)}\n style={{ height, ...style }}\n data-pin-side={side}\n >\n {children}\n </div>\n );\n}\n"],"names":[],"mappings":";;;;;;;;;AAqDM;AASJ;AACA;;;AAaA;AACA;;;;;AAME;;AAGF;AAQF;;AA2BE;AACE;AACA;;AAEF;AAmBF;AAiBM;;;;;;AAYA;;;;;AAKmB;;AACM;;AACtB;AACP;AAEA;AAYF;AAqBM;AAOJ;AASF;;"}
@@ -0,0 +1,59 @@
1
+ "use client";
2
+ import { jsxs, jsx } from 'react/jsx-runtime';
3
+ import { useCallback, useMemo } from 'react';
4
+ import '../../../utils/devWarn.js';
5
+ import { useControlledState } from '../../../hooks/useControlledState/useControlledState.js';
6
+ import '../../../hooks/useBreakpoint/useBreakpoint.js';
7
+ import './../../../assets/src/theme/lightTheme.css.ts.vanilla-Ct6f9Iym.css';
8
+ import '@vanilla-extract/css';
9
+ import './../../../assets/src/theme/darkTheme.css.ts.vanilla-BHZ3ecRn.css';
10
+ import './../../../assets/src/theme/globalScrollbars.css.ts.vanilla-BAJwnUEJ.css';
11
+ import '../../../hooks/useNavigationHistory/useNavigationHistory.js';
12
+ import { cx } from '../../../utils/cx.js';
13
+ import { nodeSectionHeaderStyle, nodeSectionChevronRecipe, nodeSectionTitleStyle, nodeSectionContentStyle, nodeSectionStyle } from './NodeGraph.css.js';
14
+ import { NodeGraphNodeSectionContext } from './NodeGraphNodeSectionContext.js';
15
+
16
+ /**
17
+ * A collapsible section inside a node body — the place to tuck "advanced" /
18
+ * overflow pins so the node stays compact. The collapse is **purely visual**:
19
+ * the children never unmount, so their state is preserved and there's no
20
+ * remount cost. `<NodeGraph.Port>` slots inside a collapsed section
21
+ * unregister their position while hidden, so the pins' edges hide with them
22
+ * and reappear on expand — no dangling wires, no manual re-anchoring.
23
+ *
24
+ * @example
25
+ * ```tsx
26
+ * <NodeGraph.NodeBody>
27
+ * <NodeGraph.NodeHeader title="Make Transform" />
28
+ * <NodeGraph.PinList>{mainPins}</NodeGraph.PinList>
29
+ * <NodeGraph.NodeSection title="Advanced" defaultCollapsed>
30
+ * <NodeGraph.PinList>{advancedPins}</NodeGraph.PinList>
31
+ * </NodeGraph.NodeSection>
32
+ * </NodeGraph.NodeBody>
33
+ * ```
34
+ */
35
+ function NodeGraphNodeSection({ title, collapsible = true, collapsed: collapsedProp, defaultCollapsed, onCollapsedChange, className, style, children, }) {
36
+ const [collapsedState, setCollapsed] = useControlledState({
37
+ value: collapsedProp,
38
+ defaultValue: defaultCollapsed,
39
+ onChange: onCollapsedChange,
40
+ fallback: false,
41
+ });
42
+ // A non-collapsible section is always expanded regardless of state.
43
+ const collapsed = collapsible ? collapsedState : false;
44
+ const toggle = useCallback(() => {
45
+ if (!collapsible)
46
+ return;
47
+ setCollapsed(prev => !prev);
48
+ }, [collapsible, setCollapsed]);
49
+ // Toggling the section must not start a node drag / selection.
50
+ const stopPointer = useCallback((event) => {
51
+ event.stopPropagation();
52
+ }, []);
53
+ const ctxValue = useMemo(() => ({ collapsed }), [collapsed]);
54
+ return (jsxs("div", { className: cx(nodeSectionStyle, className), style: style, children: [jsxs("button", { type: "button", className: nodeSectionHeaderStyle, onClick: toggle, onPointerDown: stopPointer, disabled: !collapsible, "aria-expanded": collapsible ? !collapsed : undefined, children: [collapsible ? (jsx("span", { className: nodeSectionChevronRecipe({ collapsed }), "aria-hidden": "true" })) : null, title != null ? (jsx("span", { className: nodeSectionTitleStyle, children: title })) : null] }), jsx("div", { className: nodeSectionContentStyle, style: collapsed ? { display: 'none' } : undefined, children: jsx(NodeGraphNodeSectionContext.Provider, { value: ctxValue, children: children }) })] }));
55
+ }
56
+ NodeGraphNodeSection.displayName = 'NodeGraphNodeSection';
57
+
58
+ export { NodeGraphNodeSection };
59
+ //# sourceMappingURL=NodeGraphNodeSection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NodeGraphNodeSection.js","sources":["src/components/editor/NodeGraph/NodeGraphNodeSection.tsx"],"sourcesContent":["'use client';\n\nimport React, { useCallback, useMemo } from 'react';\n\nimport { useControlledState } from '@/hooks';\nimport { cx } from '@/utils/cx';\n\nimport {\n nodeSectionStyle,\n nodeSectionHeaderStyle,\n nodeSectionChevronRecipe,\n nodeSectionTitleStyle,\n nodeSectionContentStyle,\n} from './NodeGraph.css';\nimport { NodeGraphNodeSectionContext } from './NodeGraphNodeSectionContext';\n\nimport type { NodeGraphNodeSectionContextValue } from './NodeGraphNodeSectionContext';\n\nexport interface NodeGraphNodeSectionProps {\n /** Header label shown next to the collapse toggle. */\n title?: React.ReactNode;\n /**\n * Whether the header toggles the section. When false the section is a\n * static labelled group (no chevron, always shown). @default true\n */\n collapsible?: boolean;\n /** Controlled collapsed state. Pair with `onCollapsedChange`. */\n collapsed?: boolean;\n /** Initial collapsed state when uncontrolled. @default false */\n defaultCollapsed?: boolean;\n /** Fires when the user toggles the section. */\n onCollapsedChange?: (collapsed: boolean) => void;\n className?: string;\n style?: React.CSSProperties;\n /** Section body — typically a `<NodeGraph.PinList>` of the extra pins. */\n children?: React.ReactNode;\n}\n\n/**\n * A collapsible section inside a node body — the place to tuck \"advanced\" /\n * overflow pins so the node stays compact. The collapse is **purely visual**:\n * the children never unmount, so their state is preserved and there's no\n * remount cost. `<NodeGraph.Port>` slots inside a collapsed section\n * unregister their position while hidden, so the pins' edges hide with them\n * and reappear on expand — no dangling wires, no manual re-anchoring.\n *\n * @example\n * ```tsx\n * <NodeGraph.NodeBody>\n * <NodeGraph.NodeHeader title=\"Make Transform\" />\n * <NodeGraph.PinList>{mainPins}</NodeGraph.PinList>\n * <NodeGraph.NodeSection title=\"Advanced\" defaultCollapsed>\n * <NodeGraph.PinList>{advancedPins}</NodeGraph.PinList>\n * </NodeGraph.NodeSection>\n * </NodeGraph.NodeBody>\n * ```\n */\nexport function NodeGraphNodeSection({\n title,\n collapsible = true,\n collapsed: collapsedProp,\n defaultCollapsed,\n onCollapsedChange,\n className,\n style,\n children,\n}: NodeGraphNodeSectionProps): React.ReactElement {\n const [collapsedState, setCollapsed] = useControlledState<boolean>({\n value: collapsedProp,\n defaultValue: defaultCollapsed,\n onChange: onCollapsedChange,\n fallback: false,\n });\n // A non-collapsible section is always expanded regardless of state.\n const collapsed = collapsible ? collapsedState : false;\n\n const toggle = useCallback(() => {\n if (!collapsible) return;\n setCollapsed(prev => !prev);\n }, [collapsible, setCollapsed]);\n\n // Toggling the section must not start a node drag / selection.\n const stopPointer = useCallback(\n (event: React.PointerEvent<HTMLButtonElement>) => {\n event.stopPropagation();\n },\n []\n );\n\n const ctxValue = useMemo<NodeGraphNodeSectionContextValue>(\n () => ({ collapsed }),\n [collapsed]\n );\n\n return (\n <div className={cx(nodeSectionStyle, className)} style={style}>\n <button\n type=\"button\"\n className={nodeSectionHeaderStyle}\n onClick={toggle}\n onPointerDown={stopPointer}\n disabled={!collapsible}\n aria-expanded={collapsible ? !collapsed : undefined}\n >\n {collapsible ? (\n <span\n className={nodeSectionChevronRecipe({ collapsed })}\n aria-hidden=\"true\"\n />\n ) : null}\n {title != null ? (\n <span className={nodeSectionTitleStyle}>{title}</span>\n ) : null}\n </button>\n <div\n className={nodeSectionContentStyle}\n style={collapsed ? { display: 'none' } : undefined}\n >\n <NodeGraphNodeSectionContext.Provider value={ctxValue}>\n {children}\n </NodeGraphNodeSectionContext.Provider>\n </div>\n </div>\n );\n}\n\nNodeGraphNodeSection.displayName = 'NodeGraphNodeSection';\n"],"names":[],"mappings":";;;;;;;;;;;;;;;AAsCA;;;;;;;;;;;;;;;;;;AAkBG;AACG;AAUJ;AACE;AACA;AACA;AACA;AACD;;;AAID;AACE;;;AAEF;;AAGA;;;AAOA;AAKA;AA8BF;AAEA;;"}
@@ -0,0 +1,17 @@
1
+ "use client";
2
+ import { useContext, createContext } from 'react';
3
+
4
+ const DEFAULT = { collapsed: false };
5
+ const NodeGraphNodeSectionContext =
6
+ /*#__PURE__*/ createContext(DEFAULT);
7
+ /**
8
+ * Read the enclosing section's collapsed state. Returns `{ collapsed: false }`
9
+ * when the port isn't inside a `<NodeGraph.NodeSection>`, so ports outside a
10
+ * section behave exactly as before.
11
+ */
12
+ function useNodeGraphNodeSection() {
13
+ return useContext(NodeGraphNodeSectionContext);
14
+ }
15
+
16
+ export { NodeGraphNodeSectionContext, useNodeGraphNodeSection };
17
+ //# sourceMappingURL=NodeGraphNodeSectionContext.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NodeGraphNodeSectionContext.js","sources":["src/components/editor/NodeGraph/NodeGraphNodeSectionContext.ts"],"sourcesContent":["'use client';\n\nimport { createContext, useContext } from 'react';\n\n/**\n * Context published by `<NodeGraph.NodeSection>` so the `<NodeGraph.Port>`\n * slots rendered inside it know whether they're currently collapsed. The\n * section never unmounts its children (a collapse is purely visual), so a\n * collapsed port stays in the React tree but unregisters its measured\n * position — which hides its edges until the section is expanded again,\n * without any remount cost or re-anchor bookkeeping.\n */\nexport interface NodeGraphNodeSectionContextValue {\n collapsed: boolean;\n}\n\nconst DEFAULT: NodeGraphNodeSectionContextValue = { collapsed: false };\n\nexport const NodeGraphNodeSectionContext =\n /*#__PURE__*/ createContext<NodeGraphNodeSectionContextValue>(DEFAULT);\n\n/**\n * Read the enclosing section's collapsed state. Returns `{ collapsed: false }`\n * when the port isn't inside a `<NodeGraph.NodeSection>`, so ports outside a\n * section behave exactly as before.\n */\nexport function useNodeGraphNodeSection(): NodeGraphNodeSectionContextValue {\n return useContext(NodeGraphNodeSectionContext);\n}\n"],"names":[],"mappings":";;;AAgBA;;AAGE;AAEF;;;;AAIG;;AAED;AACF;;"}
@@ -0,0 +1,35 @@
1
+ "use client";
2
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
3
+ import { cx } from '../../../utils/cx.js';
4
+ import { pinLabelStyle } from './NodeGraph.css.js';
5
+ import { NodeGraphPinRow } from './NodeGraphNodeParts.js';
6
+ import { NodeGraphPort } from './NodeGraphPort.js';
7
+
8
+ /**
9
+ * `<NodeGraph.Pin>` — the one-liner for the common "handle + label" row.
10
+ * Renders a `<NodeGraph.PinRow>` containing a `<NodeGraph.Port>` and a
11
+ * label, ordered so the handle always sits flush against the node edge
12
+ * (port → label on the left/top, label → port on the right). Reach for
13
+ * `<NodeGraph.PinRow>` + `<NodeGraph.Port>` directly only when you need a
14
+ * layout this doesn't cover (multiple controls in a row, inline editors).
15
+ *
16
+ * @example
17
+ * ```tsx
18
+ * <NodeGraph.PinList>
19
+ * <NodeGraph.Pin id="exec" side="left" shape="triangle" color="#fff" />
20
+ * <NodeGraph.Pin id="value" side="right" dataType="float" color="#9ee65a" label="Value" />
21
+ * </NodeGraph.PinList>
22
+ * ```
23
+ */
24
+ function NodeGraphPin({ id, side, dataType, label, color, shape, filled, height, portLabel, className, style, labelClassName, labelStyle, }) {
25
+ const port = (jsx(NodeGraphPort, { id: id, side: side, ...(dataType !== undefined ? { dataType } : {}), ...(color !== undefined ? { color } : {}), ...(shape !== undefined ? { shape } : {}), ...(filled !== undefined ? { filled } : {}), ...(portLabel !== undefined ? { label: portLabel } : {}) }));
26
+ const labelEl = label != null && label !== '' ? (jsx("span", { className: cx(pinLabelStyle, labelClassName), style: labelStyle, children: label })) : null;
27
+ // Port leads the row on the left / top so the handle hugs the node edge;
28
+ // on the right the label leads and the handle trails.
29
+ const portFirst = side === 'left' || side === 'top';
30
+ return (jsx(NodeGraphPinRow, { side: side, ...(height !== undefined ? { height } : {}), ...(className !== undefined ? { className } : {}), ...(style !== undefined ? { style } : {}), children: portFirst ? (jsxs(Fragment, { children: [port, labelEl] })) : (jsxs(Fragment, { children: [labelEl, port] })) }));
31
+ }
32
+ NodeGraphPin.displayName = 'NodeGraphPin';
33
+
34
+ export { NodeGraphPin };
35
+ //# sourceMappingURL=NodeGraphPin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"NodeGraphPin.js","sources":["src/components/editor/NodeGraph/NodeGraphPin.tsx"],"sourcesContent":["'use client';\n\nimport React from 'react';\n\nimport { cx } from '@/utils/cx';\n\nimport { pinLabelStyle } from './NodeGraph.css';\nimport { NodeGraphPinRow } from './NodeGraphNodeParts';\nimport { NodeGraphPort } from './NodeGraphPort';\n\nimport type { NodeGraphPortShape, NodeGraphPortSide } from './NodeGraph.types';\n\nexport interface NodeGraphPinProps {\n /** Port id — referenced by `NodeGraphEdge.source` / `.target`. */\n id: string;\n /** Which side the pin anchors to. Drives row layout and edge tangent. */\n side: NodeGraphPortSide;\n /** Opaque type token forwarded to `isValidConnection` and edge styling. */\n dataType?: string;\n /** Row label shown next to the handle. */\n label?: React.ReactNode;\n /** Handle colour (any CSS colour). Defaults to the theme focus colour. */\n color?: string;\n /** Built-in handle shape. @default 'circle' */\n shape?: NodeGraphPortShape;\n /**\n * Force the handle filled / hollow. When omitted, the handle fills\n * automatically while the pin is connected to an edge.\n */\n filled?: boolean;\n /** Row height in CSS px. @default 22 */\n height?: number;\n /** Accessible label for the port handle. Falls back to the port default. */\n portLabel?: string;\n /** Class applied to the row wrapper. */\n className?: string;\n /** Inline style applied to the row wrapper. */\n style?: React.CSSProperties;\n /** Class applied to the label span. */\n labelClassName?: string;\n /** Inline style applied to the label span. */\n labelStyle?: React.CSSProperties;\n}\n\n/**\n * `<NodeGraph.Pin>` — the one-liner for the common \"handle + label\" row.\n * Renders a `<NodeGraph.PinRow>` containing a `<NodeGraph.Port>` and a\n * label, ordered so the handle always sits flush against the node edge\n * (port → label on the left/top, label → port on the right). Reach for\n * `<NodeGraph.PinRow>` + `<NodeGraph.Port>` directly only when you need a\n * layout this doesn't cover (multiple controls in a row, inline editors).\n *\n * @example\n * ```tsx\n * <NodeGraph.PinList>\n * <NodeGraph.Pin id=\"exec\" side=\"left\" shape=\"triangle\" color=\"#fff\" />\n * <NodeGraph.Pin id=\"value\" side=\"right\" dataType=\"float\" color=\"#9ee65a\" label=\"Value\" />\n * </NodeGraph.PinList>\n * ```\n */\nexport function NodeGraphPin({\n id,\n side,\n dataType,\n label,\n color,\n shape,\n filled,\n height,\n portLabel,\n className,\n style,\n labelClassName,\n labelStyle,\n}: NodeGraphPinProps): React.ReactElement {\n const port = (\n <NodeGraphPort\n id={id}\n side={side}\n {...(dataType !== undefined ? { dataType } : {})}\n {...(color !== undefined ? { color } : {})}\n {...(shape !== undefined ? { shape } : {})}\n {...(filled !== undefined ? { filled } : {})}\n {...(portLabel !== undefined ? { label: portLabel } : {})}\n />\n );\n const labelEl =\n label != null && label !== '' ? (\n <span className={cx(pinLabelStyle, labelClassName)} style={labelStyle}>\n {label}\n </span>\n ) : null;\n // Port leads the row on the left / top so the handle hugs the node edge;\n // on the right the label leads and the handle trails.\n const portFirst = side === 'left' || side === 'top';\n return (\n <NodeGraphPinRow\n side={side}\n {...(height !== undefined ? { height } : {})}\n {...(className !== undefined ? { className } : {})}\n {...(style !== undefined ? { style } : {})}\n >\n {portFirst ? (\n <>\n {port}\n {labelEl}\n </>\n ) : (\n <>\n {labelEl}\n {port}\n </>\n )}\n </NodeGraphPinRow>\n );\n}\n\nNodeGraphPin.displayName = 'NodeGraphPin';\n"],"names":[],"mappings":";;;;;;;AA4CA;;;;;;;;;;;;;;;AAeG;AACG;;AA0BJ;;;;AASA;AAoBF;AAEA;;"}