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,461 @@
1
+ import { applyGroupResize, resolveEdgeEndpoints, getBezierControlPoints } from './nodeGraphMath.js';
2
+
3
+ /** Stroke widths in *screen* pixels — independent of zoom. */
4
+ const EDGE_STROKE_WIDTH = 1.5;
5
+ const EDGE_STROKE_WIDTH_SELECTED = 2.5;
6
+ const EDGE_STROKE_WIDTH_HOVERED = 2;
7
+ const PREVIEW_STROKE_WIDTH = 2;
8
+ const GROUP_STROKE_WIDTH = 1;
9
+ /**
10
+ * Stroke a cubic Bézier to the given context. The control points are in
11
+ * screen coordinates (already transformed by the caller).
12
+ */
13
+ function strokeBezier(ctx, cp) {
14
+ ctx.beginPath();
15
+ ctx.moveTo(cp.p0.x, cp.p0.y);
16
+ ctx.bezierCurveTo(cp.c1.x, cp.c1.y, cp.c2.x, cp.c2.y, cp.p3.x, cp.p3.y);
17
+ ctx.stroke();
18
+ }
19
+ function toScreenCp(cp, worldToScreen) {
20
+ return {
21
+ p0: worldToScreen(cp.p0),
22
+ c1: worldToScreen(cp.c1),
23
+ c2: worldToScreen(cp.c2),
24
+ p3: worldToScreen(cp.p3),
25
+ };
26
+ }
27
+ /**
28
+ * Margin (screen px) added around the viewport before culling an edge.
29
+ * Covers the stroke half-width + round line-cap overshoot for the default
30
+ * styles, plus headroom for moderately wider consumer `edgeStyle` widths.
31
+ * A curve whose control-point bbox is more than this far outside the
32
+ * viewport cannot paint a visible pixel inside it.
33
+ */
34
+ const EDGE_CULL_MARGIN_PX = 32;
35
+ /**
36
+ * True when a cubic Bézier (given by its screen-space control points)
37
+ * cannot intersect the viewport. The curve lies within the convex hull of
38
+ * its control points, so an axis-aligned bbox of the four points is a
39
+ * conservative bound — if that bbox is entirely past one viewport edge
40
+ * (plus {@link EDGE_CULL_MARGIN_PX}), the curve is off-screen.
41
+ */
42
+ function bezierOutsideViewport(cp, width, height) {
43
+ const minX = Math.min(cp.p0.x, cp.c1.x, cp.c2.x, cp.p3.x);
44
+ if (minX > width + EDGE_CULL_MARGIN_PX)
45
+ return true;
46
+ const maxX = Math.max(cp.p0.x, cp.c1.x, cp.c2.x, cp.p3.x);
47
+ if (maxX < -EDGE_CULL_MARGIN_PX)
48
+ return true;
49
+ const minY = Math.min(cp.p0.y, cp.c1.y, cp.c2.y, cp.p3.y);
50
+ if (minY > height + EDGE_CULL_MARGIN_PX)
51
+ return true;
52
+ const maxY = Math.max(cp.p0.y, cp.c1.y, cp.c2.y, cp.p3.y);
53
+ if (maxY < -EDGE_CULL_MARGIN_PX)
54
+ return true;
55
+ return false;
56
+ }
57
+ /** Draw all edges in the graph. */
58
+ function drawEdges(ctx, info, data, selection, hoveredEdgeId, interaction, getNodeById, getPortPosition, edgeStyle, theme) {
59
+ // Either a node-drag (`drag-nodes`) or a group-drag carrying contained
60
+ // nodes (`drag-groups.containedNodeIds`) shifts edge endpoints live —
61
+ // resolve to a single (ids, delta) shape so the loop below stays simple.
62
+ // The interaction state already exposes `nodeIds` / `containedNodeIds` as
63
+ // ReadonlySet, so no per-frame Set construction is needed here.
64
+ let dragSet = null;
65
+ if (interaction.kind === 'drag-nodes') {
66
+ dragSet = {
67
+ ids: interaction.nodeIds,
68
+ delta: interaction.delta,
69
+ };
70
+ }
71
+ else if (interaction.kind === 'drag-groups') {
72
+ dragSet = {
73
+ ids: interaction.containedNodeIds,
74
+ delta: interaction.delta,
75
+ };
76
+ }
77
+ // While an endpoint is being re-dragged, hide the edge from this layer so
78
+ // only the connection preview is shown (the wire "detaches" and follows
79
+ // the cursor).
80
+ const reconnectingId = interaction.kind === 'connect' ? interaction.reconnectEdgeId : undefined;
81
+ // O(1) membership for the per-edge selected check below — this layer
82
+ // redraws every frame during a drag, so a linear `selection.edges.includes`
83
+ // per edge would be O(edges × selected) each frame.
84
+ const selectedEdgeIds = new Set(selection.edges);
85
+ for (const edge of data.edges) {
86
+ if (edge.id === reconnectingId)
87
+ continue;
88
+ const endpoints = resolveEdgeEndpoints(edge, getNodeById, getPortPosition);
89
+ if (!endpoints)
90
+ continue;
91
+ // Apply the in-flight drag delta so edges follow nodes 1:1 during a drag,
92
+ // instead of snapping to the new position on pointerup.
93
+ const source = dragSet?.ids.has(edge.source.node)
94
+ ? {
95
+ x: endpoints.source.x + dragSet.delta.x,
96
+ y: endpoints.source.y + dragSet.delta.y,
97
+ }
98
+ : endpoints.source;
99
+ const target = dragSet?.ids.has(edge.target.node)
100
+ ? {
101
+ x: endpoints.target.x + dragSet.delta.x,
102
+ y: endpoints.target.y + dragSet.delta.y,
103
+ }
104
+ : endpoints.target;
105
+ const cpWorld = getBezierControlPoints(source, endpoints.srcSide, target, endpoints.tgtSide);
106
+ const cpScreen = toScreenCp(cpWorld, p => info.worldToScreen(p));
107
+ // Frustum cull: a cubic Bézier is fully contained in the convex hull of
108
+ // its four control points, so if the screen-space bbox of those points
109
+ // lies entirely outside the viewport (plus a margin) the curve can't be
110
+ // visible — skip the style callback + stroke entirely. This bounds the
111
+ // per-frame edge cost by what's on screen rather than total edge count,
112
+ // which is the dominant cost when zoomed in on a large graph.
113
+ if (bezierOutsideViewport(cpScreen, info.size.width, info.size.height)) {
114
+ continue;
115
+ }
116
+ const isSelected = selectedEdgeIds.has(edge.id);
117
+ const isHovered = hoveredEdgeId === edge.id;
118
+ // Resolve consumer override for this edge. Source/target ports
119
+ // come from the store — `dataType` and `side` are already there,
120
+ // no parallel index needed on the consumer side.
121
+ const srcPos = getPortPosition(edge.source.node, edge.source.port);
122
+ const tgtPos = getPortPosition(edge.target.node, edge.target.port);
123
+ const customStyle = edgeStyle?.(edge, {
124
+ selected: isSelected,
125
+ hovered: isHovered,
126
+ sourcePort: srcPos
127
+ ? srcPos.dataType !== undefined
128
+ ? { side: srcPos.side, dataType: srcPos.dataType }
129
+ : { side: srcPos.side }
130
+ : null,
131
+ targetPort: tgtPos
132
+ ? tgtPos.dataType !== undefined
133
+ ? { side: tgtPos.side, dataType: tgtPos.dataType }
134
+ : { side: tgtPos.side }
135
+ : null,
136
+ });
137
+ // State-driven defaults; consumer overrides via `customStyle` take
138
+ // precedence when they're not undefined. Selected / hovered still
139
+ // win over a plain `edge.color` so the interaction state stays
140
+ // visible — but consumer can override even that with `edgeStyle`.
141
+ const defaultColor = isSelected
142
+ ? theme.edgeStrokeSelected
143
+ : isHovered
144
+ ? theme.edgeStrokeHovered
145
+ : (edge.color ?? theme.edgeStroke);
146
+ const defaultWidth = isSelected
147
+ ? EDGE_STROKE_WIDTH_SELECTED
148
+ : isHovered
149
+ ? EDGE_STROKE_WIDTH_HOVERED
150
+ : EDGE_STROKE_WIDTH;
151
+ ctx.strokeStyle = customStyle?.color ?? defaultColor;
152
+ ctx.lineWidth = customStyle?.width ?? defaultWidth;
153
+ ctx.lineCap = 'round';
154
+ if (customStyle?.dash != null && customStyle.dash.length > 0) {
155
+ ctx.setLineDash(customStyle.dash);
156
+ }
157
+ else {
158
+ ctx.setLineDash([]);
159
+ }
160
+ strokeBezier(ctx, cpScreen);
161
+ }
162
+ // Reset shared state mutated above so subsequent layers (groups,
163
+ // preview) don't inherit a stale dash pattern.
164
+ ctx.setLineDash([]);
165
+ }
166
+ /** Draw group backdrops (under nodes, under edges). */
167
+ function drawGroups(ctx, info, data, selection, interaction, theme) {
168
+ // Live drag / resize support — mirror what the HTML overlay shows so the
169
+ // canvas backdrop stays glued to the user's cursor during gestures.
170
+ const dragSet = interaction.kind === 'drag-groups'
171
+ ? { ids: interaction.groupIds, delta: interaction.delta }
172
+ : null;
173
+ const resizing = interaction.kind === 'resize-group' ? interaction : null;
174
+ const selectedGroupIds = new Set(selection.groups);
175
+ for (const group of data.groups) {
176
+ let bx = group.bounds.x;
177
+ let by = group.bounds.y;
178
+ let bw = group.bounds.width;
179
+ let bh = group.bounds.height;
180
+ if (dragSet?.ids.has(group.id)) {
181
+ bx += dragSet.delta.x;
182
+ by += dragSet.delta.y;
183
+ }
184
+ else if (resizing?.groupId === group.id) {
185
+ const next = applyGroupResize(resizing.startBounds, resizing.handle, resizing.delta);
186
+ bx = next.x;
187
+ by = next.y;
188
+ bw = next.width;
189
+ bh = next.height;
190
+ }
191
+ const tl = info.worldToScreen({ x: bx, y: by });
192
+ const br = info.worldToScreen({ x: bx + bw, y: by + bh });
193
+ const width = br.x - tl.x;
194
+ const height = br.y - tl.y;
195
+ if (width <= 0 || height <= 0)
196
+ continue;
197
+ const isSelected = selectedGroupIds.has(group.id);
198
+ ctx.fillStyle =
199
+ group.color ?? (isSelected ? theme.groupFillSelected : theme.groupFill);
200
+ ctx.fillRect(tl.x, tl.y, width, height);
201
+ ctx.strokeStyle = group.color ?? theme.groupStroke;
202
+ ctx.lineWidth = GROUP_STROKE_WIDTH;
203
+ ctx.strokeRect(tl.x + 0.5, tl.y + 0.5, width - 1, height - 1);
204
+ // The label is rendered by the HTML overlay (`NodeGraphGroupView`) so
205
+ // it stays editable on click and scales with the world transform like
206
+ // the rest of the group body. Canvas no longer paints it — avoids the
207
+ // duplicate-title artefact where a screen-space canvas label and a
208
+ // world-space HTML label drifted apart at non-1 zoom.
209
+ }
210
+ }
211
+ /**
212
+ * Draw the in-flight connection preview — a Bézier from the source port to
213
+ * the current pointer position, styled to indicate validity.
214
+ */
215
+ function drawConnectionPreview(ctx, info, interaction, resolveSourcePort, theme) {
216
+ if (interaction.kind !== 'connect')
217
+ return;
218
+ const src = resolveSourcePort(interaction.source);
219
+ if (!src)
220
+ return;
221
+ // The "target" side for the preview curve mirrors the source so the curve
222
+ // pulls toward the cursor naturally even when the cursor is free-floating.
223
+ const tgtSide = oppositeSide(src.side);
224
+ const cpWorld = getBezierControlPoints(src.position, src.side, interaction.currentWorld, tgtSide);
225
+ const cpScreen = toScreenCp(cpWorld, p => info.worldToScreen(p));
226
+ ctx.strokeStyle = interaction.invalid
227
+ ? theme.previewStrokeInvalid
228
+ : theme.previewStroke;
229
+ ctx.lineWidth = PREVIEW_STROKE_WIDTH;
230
+ ctx.lineCap = 'round';
231
+ ctx.setLineDash(interaction.invalid ? [6, 4] : []);
232
+ strokeBezier(ctx, cpScreen);
233
+ ctx.setLineDash([]);
234
+ // Endpoint marker at the cursor — small circle so the user sees the
235
+ // pointer-snap target.
236
+ const cursorScreen = info.worldToScreen(interaction.currentWorld);
237
+ ctx.beginPath();
238
+ ctx.arc(cursorScreen.x, cursorScreen.y, 4, 0, Math.PI * 2);
239
+ ctx.fillStyle = interaction.invalid
240
+ ? theme.previewStrokeInvalid
241
+ : theme.previewStroke;
242
+ ctx.fill();
243
+ }
244
+ function oppositeSide(side) {
245
+ switch (side) {
246
+ case 'left':
247
+ return 'right';
248
+ case 'right':
249
+ return 'left';
250
+ case 'top':
251
+ return 'bottom';
252
+ case 'bottom':
253
+ return 'top';
254
+ default: {
255
+ const _unreached = side;
256
+ return _unreached;
257
+ }
258
+ }
259
+ }
260
+ /** Resolved canvas-drawing theme assembled from the base theme + overrides. */
261
+ function buildDrawTheme(base) {
262
+ return {
263
+ ...base,
264
+ edgeStroke: base.textMuted,
265
+ edgeStrokeSelected: base.accentPrimary,
266
+ edgeStrokeHovered: base.textSecondary,
267
+ previewStroke: base.accentPrimary,
268
+ previewStrokeInvalid: 'rgba(220, 38, 38, 0.9)',
269
+ groupFill: 'rgba(255, 255, 255, 0.03)',
270
+ groupFillSelected: 'rgba(255, 255, 255, 0.05)',
271
+ groupStroke: base.borderDefault,
272
+ groupLabel: base.textSecondary,
273
+ };
274
+ }
275
+ /**
276
+ * Minimum on-screen distance (in CSS pixels) between adjacent dots / grid
277
+ * lines. When the base `gap × zoom` falls below this, the renderer drops
278
+ * down to a coarser LOD level (effective gap × 2, × 4, …) so the screen
279
+ * never carries more than `viewportArea / (TARGET_SCREEN_GAP²)` elements.
280
+ *
281
+ * Acts like a mip-map level for the background pattern — keeps perf
282
+ * constant under zoom-out instead of scaling quadratically with the world
283
+ * area exposed.
284
+ */
285
+ const TARGET_SCREEN_GAP = 18;
286
+ /**
287
+ * Lower hard cutoff: when even the coarsest pattern would be denser than
288
+ * this on screen, skip the pattern entirely. Without this, an
289
+ * extreme-zoom-out (e.g. fitting a 100k-node graph in 800px) would still
290
+ * fire pattern-fill operations that the GPU can't sample meaningfully.
291
+ */
292
+ const MIN_VISIBLE_SCREEN_GAP = 3;
293
+ /**
294
+ * Draw a uniform background pattern across the entire visible viewport.
295
+ * Used by `NodeGraph.Background`.
296
+ *
297
+ * Performance strategy:
298
+ *
299
+ * 1. **LOD** — when zoomed out the world gap is multiplied by the
300
+ * smallest power-of-two that keeps the on-screen spacing ≥
301
+ * `TARGET_SCREEN_GAP`. The number of dots/lines drawn per frame is
302
+ * therefore bounded by `viewportArea / TARGET_SCREEN_GAP²` regardless
303
+ * of how far the user zooms out.
304
+ * 2. **Pattern fill** — a single off-screen tile is built (one dot or
305
+ * one crosshair of lines) and used as `ctx.createPattern(…, 'repeat')`.
306
+ * A single `fillRect` covers the whole viewport, replacing what was
307
+ * previously O(n) `arc()`/`stroke()` calls. The pattern's origin is
308
+ * translated so the tile aligns with the world grid.
309
+ */
310
+ function drawBackground(ctx, info, theme, options) {
311
+ const background = options.background ?? theme.backgroundSecondary;
312
+ ctx.fillStyle = background;
313
+ ctx.fillRect(0, 0, info.size.width, info.size.height);
314
+ if (options.variant === 'none' || options.gap <= 0)
315
+ return;
316
+ // Resolve the on-screen spacing the user-supplied world gap would yield
317
+ // at the current zoom, then step up the world gap in powers of two
318
+ // until each cell is at least TARGET_SCREEN_GAP pixels apart on screen.
319
+ const baseScreenGap = options.gap * info.transform.zoom;
320
+ if (baseScreenGap <= 0)
321
+ return;
322
+ let lodMultiplier = 1;
323
+ while (baseScreenGap * lodMultiplier < TARGET_SCREEN_GAP) {
324
+ lodMultiplier *= 2;
325
+ // Safety: cap LOD at a sensible upper bound so a pathological zoom
326
+ // (e.g. 1e-12) doesn't spin here forever.
327
+ if (lodMultiplier > 1 << 20)
328
+ break;
329
+ }
330
+ const screenGap = baseScreenGap * lodMultiplier;
331
+ if (screenGap < MIN_VISIBLE_SCREEN_GAP)
332
+ return;
333
+ const color = options.color ?? theme.borderDefault;
334
+ // World-space origin in screen pixels — the pattern's tile (0,0) must
335
+ // land here so the dots/lines line up with the world grid. Modulo by
336
+ // the tile size to keep the translation in `[0, tileSize)`.
337
+ const origin = info.worldToScreen({ x: 0, y: 0 });
338
+ const alignedTileSize = screenGap;
339
+ const offsetX = ((origin.x % alignedTileSize) + alignedTileSize) % alignedTileSize;
340
+ const offsetY = ((origin.y % alignedTileSize) + alignedTileSize) % alignedTileSize;
341
+ // Snap the world origin offset to keep dots crisply pixel-aligned at
342
+ // pan time. Sub-pixel pattern positions blur the rendered tile.
343
+ const tx = Math.round(offsetX);
344
+ const ty = Math.round(offsetY);
345
+ const tileSize = Math.max(1, Math.round(alignedTileSize));
346
+ if (options.variant === 'dots') {
347
+ const dotRadius = Math.max(0.75, Math.min(1.75, screenGap / 24));
348
+ const tile = getCachedTile(`dots:${tileSize}:${dotRadius}:${color}`, () => buildDotTile(alignedTileSize, dotRadius, color));
349
+ if (!tile)
350
+ return;
351
+ fillWithPattern(ctx, tile, info.size.width, info.size.height, tx, ty);
352
+ }
353
+ else {
354
+ const tile = getCachedTile(`grid:${tileSize}:${color}`, () => buildGridTile(alignedTileSize, color));
355
+ if (!tile)
356
+ return;
357
+ ctx.globalAlpha = 0.6;
358
+ fillWithPattern(ctx, tile, info.size.width, info.size.height, tx, ty);
359
+ ctx.globalAlpha = 1;
360
+ }
361
+ }
362
+ // Off-screen pattern tile cache. A pan keeps zoom (hence tile size, dot
363
+ // radius, and colour) constant, so without this every panned frame would
364
+ // allocate a fresh OffscreenCanvas and redraw the dot/grid. Keyed by every
365
+ // input that affects the rendered pixels; bounded with FIFO eviction so a
366
+ // continuous zoom (which varies the tile size per frame) can't grow it
367
+ // without limit. Colour is in the key, so a theme switch produces a new tile
368
+ // rather than a stale one.
369
+ const TILE_CACHE_LIMIT = 16;
370
+ const tileCache = new Map();
371
+ function getCachedTile(key, build) {
372
+ const cached = tileCache.get(key);
373
+ if (cached)
374
+ return cached;
375
+ const tile = build();
376
+ if (!tile)
377
+ return null;
378
+ tileCache.set(key, tile);
379
+ if (tileCache.size > TILE_CACHE_LIMIT) {
380
+ const oldest = tileCache.keys().next().value;
381
+ if (oldest !== undefined)
382
+ tileCache.delete(oldest);
383
+ }
384
+ return tile;
385
+ }
386
+ /**
387
+ * Build a single-cell repeating tile with one dot centred inside it.
388
+ * Returns `null` when the environment has no `OffscreenCanvas`/`<canvas>`
389
+ * (e.g. some SSR test runners) so the caller can bail without throwing.
390
+ */
391
+ function buildDotTile(tileSize, dotRadius, color) {
392
+ const c = createTileCanvas(tileSize);
393
+ if (!c)
394
+ return null;
395
+ const tctx = c.getContext('2d');
396
+ if (!tctx)
397
+ return null;
398
+ tctx.clearRect(0, 0, tileSize, tileSize);
399
+ tctx.fillStyle = color;
400
+ tctx.beginPath();
401
+ tctx.arc(tileSize / 2, tileSize / 2, dotRadius, 0, Math.PI * 2);
402
+ tctx.fill();
403
+ return c;
404
+ }
405
+ /**
406
+ * Build a single-cell repeating tile carrying one vertical + one
407
+ * horizontal line at the right/bottom edge — when tiled this forms a
408
+ * full grid without overlap. Lines are at `tileSize - 0.5` so they fall
409
+ * on whole pixels after the integer-snapped `setTransform` below.
410
+ */
411
+ function buildGridTile(tileSize, color) {
412
+ const c = createTileCanvas(tileSize);
413
+ if (!c)
414
+ return null;
415
+ const tctx = c.getContext('2d');
416
+ if (!tctx)
417
+ return null;
418
+ tctx.clearRect(0, 0, tileSize, tileSize);
419
+ tctx.strokeStyle = color;
420
+ tctx.lineWidth = 1;
421
+ // Right edge → vertical line; bottom edge → horizontal line.
422
+ tctx.beginPath();
423
+ tctx.moveTo(tileSize - 0.5, 0);
424
+ tctx.lineTo(tileSize - 0.5, tileSize);
425
+ tctx.moveTo(0, tileSize - 0.5);
426
+ tctx.lineTo(tileSize, tileSize - 0.5);
427
+ tctx.stroke();
428
+ return c;
429
+ }
430
+ function createTileCanvas(size) {
431
+ const rounded = Math.max(1, Math.round(size));
432
+ if (typeof OffscreenCanvas !== 'undefined') {
433
+ return new OffscreenCanvas(rounded, rounded);
434
+ }
435
+ if (typeof document === 'undefined')
436
+ return null;
437
+ const c = document.createElement('canvas');
438
+ c.width = rounded;
439
+ c.height = rounded;
440
+ return c;
441
+ }
442
+ /**
443
+ * Fill the entire viewport with a repeating pattern, translating the
444
+ * pattern origin to `(tx, ty)` so the tile aligns with the world grid.
445
+ * Single canvas call — independent of the number of dots/lines drawn.
446
+ */
447
+ function fillWithPattern(ctx, tile, width, height, tx, ty) {
448
+ const pattern = ctx.createPattern(tile, 'repeat');
449
+ if (!pattern)
450
+ return;
451
+ ctx.save();
452
+ // Move the pattern origin so the first tile starts at (tx, ty) instead
453
+ // of (0, 0). The canvas tracks pattern origin via the current transform.
454
+ ctx.translate(tx, ty);
455
+ ctx.fillStyle = pattern;
456
+ ctx.fillRect(-tx, -ty, width, height);
457
+ ctx.restore();
458
+ }
459
+
460
+ export { bezierOutsideViewport, buildDrawTheme, drawBackground, drawConnectionPreview, drawEdges, drawGroups };
461
+ //# sourceMappingURL=nodeGraphDrawing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nodeGraphDrawing.js","sources":["src/components/editor/NodeGraph/nodeGraphDrawing.ts"],"sourcesContent":["import {\n applyGroupResize,\n getBezierControlPoints,\n resolveEdgeEndpoints,\n} from './nodeGraphMath';\n\nimport type {\n NodeGraphEdgeStyleFn,\n NodeGraphPortRef,\n NodeGraphPortSide,\n NodeGraphSelection,\n} from './NodeGraph.types';\nimport type {\n BezierControlPoints,\n NodeLookup,\n PortPositionLookup,\n} from './nodeGraphMath';\nimport type {\n NodeGraphDataState,\n NodeGraphInteractionState,\n} from './NodeGraphStore';\nimport type {\n CanvasThemeColors,\n Point2D,\n} from '@/components/primitives/canvas/canvas.types';\nimport type { ViewportLayerDrawInfo } from '@/components/primitives/viewport';\n\nexport interface NodeGraphDrawTheme extends CanvasThemeColors {\n /** Colour of an unselected, non-hovered edge. */\n edgeStroke: string;\n /** Colour of a selected edge. */\n edgeStrokeSelected: string;\n /** Colour of the hovered edge. */\n edgeStrokeHovered: string;\n /** Colour of the in-flight connection preview. */\n previewStroke: string;\n /** Colour of an in-flight connection rejected by `isValidConnection`. */\n previewStrokeInvalid: string;\n /** Group backdrop fill. */\n groupFill: string;\n /** Group backdrop fill when selected. */\n groupFillSelected: string;\n /** Group outline colour. */\n groupStroke: string;\n /** Group label colour. */\n groupLabel: string;\n}\n\n/** Stroke widths in *screen* pixels — independent of zoom. */\nconst EDGE_STROKE_WIDTH = 1.5;\nconst EDGE_STROKE_WIDTH_SELECTED = 2.5;\nconst EDGE_STROKE_WIDTH_HOVERED = 2;\nconst PREVIEW_STROKE_WIDTH = 2;\nconst GROUP_STROKE_WIDTH = 1;\n\n/**\n * Stroke a cubic Bézier to the given context. The control points are in\n * screen coordinates (already transformed by the caller).\n */\nfunction strokeBezier(\n ctx: CanvasRenderingContext2D,\n cp: BezierControlPoints\n): void {\n ctx.beginPath();\n ctx.moveTo(cp.p0.x, cp.p0.y);\n ctx.bezierCurveTo(cp.c1.x, cp.c1.y, cp.c2.x, cp.c2.y, cp.p3.x, cp.p3.y);\n ctx.stroke();\n}\n\nfunction toScreenCp(\n cp: BezierControlPoints,\n worldToScreen: (p: Point2D) => Point2D\n): BezierControlPoints {\n return {\n p0: worldToScreen(cp.p0),\n c1: worldToScreen(cp.c1),\n c2: worldToScreen(cp.c2),\n p3: worldToScreen(cp.p3),\n };\n}\n\n/**\n * Margin (screen px) added around the viewport before culling an edge.\n * Covers the stroke half-width + round line-cap overshoot for the default\n * styles, plus headroom for moderately wider consumer `edgeStyle` widths.\n * A curve whose control-point bbox is more than this far outside the\n * viewport cannot paint a visible pixel inside it.\n */\nconst EDGE_CULL_MARGIN_PX = 32;\n\n/**\n * True when a cubic Bézier (given by its screen-space control points)\n * cannot intersect the viewport. The curve lies within the convex hull of\n * its control points, so an axis-aligned bbox of the four points is a\n * conservative bound — if that bbox is entirely past one viewport edge\n * (plus {@link EDGE_CULL_MARGIN_PX}), the curve is off-screen.\n */\nexport function bezierOutsideViewport(\n cp: BezierControlPoints,\n width: number,\n height: number\n): boolean {\n const minX = Math.min(cp.p0.x, cp.c1.x, cp.c2.x, cp.p3.x);\n if (minX > width + EDGE_CULL_MARGIN_PX) return true;\n const maxX = Math.max(cp.p0.x, cp.c1.x, cp.c2.x, cp.p3.x);\n if (maxX < -EDGE_CULL_MARGIN_PX) return true;\n const minY = Math.min(cp.p0.y, cp.c1.y, cp.c2.y, cp.p3.y);\n if (minY > height + EDGE_CULL_MARGIN_PX) return true;\n const maxY = Math.max(cp.p0.y, cp.c1.y, cp.c2.y, cp.p3.y);\n if (maxY < -EDGE_CULL_MARGIN_PX) return true;\n return false;\n}\n\n/** Draw all edges in the graph. */\nexport function drawEdges(\n ctx: CanvasRenderingContext2D,\n info: ViewportLayerDrawInfo,\n data: NodeGraphDataState,\n selection: NodeGraphSelection,\n hoveredEdgeId: string | null,\n interaction: NodeGraphInteractionState,\n getNodeById: NodeLookup,\n getPortPosition: PortPositionLookup,\n edgeStyle: NodeGraphEdgeStyleFn | undefined,\n theme: NodeGraphDrawTheme\n): void {\n // Either a node-drag (`drag-nodes`) or a group-drag carrying contained\n // nodes (`drag-groups.containedNodeIds`) shifts edge endpoints live —\n // resolve to a single (ids, delta) shape so the loop below stays simple.\n // The interaction state already exposes `nodeIds` / `containedNodeIds` as\n // ReadonlySet, so no per-frame Set construction is needed here.\n let dragSet: { ids: ReadonlySet<string>; delta: Point2D } | null = null;\n if (interaction.kind === 'drag-nodes') {\n dragSet = {\n ids: interaction.nodeIds,\n delta: interaction.delta,\n };\n } else if (interaction.kind === 'drag-groups') {\n dragSet = {\n ids: interaction.containedNodeIds,\n delta: interaction.delta,\n };\n }\n // While an endpoint is being re-dragged, hide the edge from this layer so\n // only the connection preview is shown (the wire \"detaches\" and follows\n // the cursor).\n const reconnectingId =\n interaction.kind === 'connect' ? interaction.reconnectEdgeId : undefined;\n // O(1) membership for the per-edge selected check below — this layer\n // redraws every frame during a drag, so a linear `selection.edges.includes`\n // per edge would be O(edges × selected) each frame.\n const selectedEdgeIds = new Set(selection.edges);\n for (const edge of data.edges) {\n if (edge.id === reconnectingId) continue;\n const endpoints = resolveEdgeEndpoints(edge, getNodeById, getPortPosition);\n if (!endpoints) continue;\n\n // Apply the in-flight drag delta so edges follow nodes 1:1 during a drag,\n // instead of snapping to the new position on pointerup.\n const source = dragSet?.ids.has(edge.source.node)\n ? {\n x: endpoints.source.x + dragSet.delta.x,\n y: endpoints.source.y + dragSet.delta.y,\n }\n : endpoints.source;\n const target = dragSet?.ids.has(edge.target.node)\n ? {\n x: endpoints.target.x + dragSet.delta.x,\n y: endpoints.target.y + dragSet.delta.y,\n }\n : endpoints.target;\n\n const cpWorld = getBezierControlPoints(\n source,\n endpoints.srcSide,\n target,\n endpoints.tgtSide\n );\n const cpScreen = toScreenCp(cpWorld, p => info.worldToScreen(p));\n\n // Frustum cull: a cubic Bézier is fully contained in the convex hull of\n // its four control points, so if the screen-space bbox of those points\n // lies entirely outside the viewport (plus a margin) the curve can't be\n // visible — skip the style callback + stroke entirely. This bounds the\n // per-frame edge cost by what's on screen rather than total edge count,\n // which is the dominant cost when zoomed in on a large graph.\n if (bezierOutsideViewport(cpScreen, info.size.width, info.size.height)) {\n continue;\n }\n\n const isSelected = selectedEdgeIds.has(edge.id);\n const isHovered = hoveredEdgeId === edge.id;\n\n // Resolve consumer override for this edge. Source/target ports\n // come from the store — `dataType` and `side` are already there,\n // no parallel index needed on the consumer side.\n const srcPos = getPortPosition(edge.source.node, edge.source.port);\n const tgtPos = getPortPosition(edge.target.node, edge.target.port);\n const customStyle = edgeStyle?.(edge, {\n selected: isSelected,\n hovered: isHovered,\n sourcePort: srcPos\n ? srcPos.dataType !== undefined\n ? { side: srcPos.side, dataType: srcPos.dataType }\n : { side: srcPos.side }\n : null,\n targetPort: tgtPos\n ? tgtPos.dataType !== undefined\n ? { side: tgtPos.side, dataType: tgtPos.dataType }\n : { side: tgtPos.side }\n : null,\n });\n\n // State-driven defaults; consumer overrides via `customStyle` take\n // precedence when they're not undefined. Selected / hovered still\n // win over a plain `edge.color` so the interaction state stays\n // visible — but consumer can override even that with `edgeStyle`.\n const defaultColor = isSelected\n ? theme.edgeStrokeSelected\n : isHovered\n ? theme.edgeStrokeHovered\n : (edge.color ?? theme.edgeStroke);\n const defaultWidth = isSelected\n ? EDGE_STROKE_WIDTH_SELECTED\n : isHovered\n ? EDGE_STROKE_WIDTH_HOVERED\n : EDGE_STROKE_WIDTH;\n\n ctx.strokeStyle = customStyle?.color ?? defaultColor;\n ctx.lineWidth = customStyle?.width ?? defaultWidth;\n ctx.lineCap = 'round';\n if (customStyle?.dash != null && customStyle.dash.length > 0) {\n ctx.setLineDash(customStyle.dash as number[]);\n } else {\n ctx.setLineDash([]);\n }\n\n strokeBezier(ctx, cpScreen);\n }\n // Reset shared state mutated above so subsequent layers (groups,\n // preview) don't inherit a stale dash pattern.\n ctx.setLineDash([]);\n}\n\n/** Draw group backdrops (under nodes, under edges). */\nexport function drawGroups(\n ctx: CanvasRenderingContext2D,\n info: ViewportLayerDrawInfo,\n data: NodeGraphDataState,\n selection: NodeGraphSelection,\n interaction: NodeGraphInteractionState,\n theme: NodeGraphDrawTheme\n): void {\n // Live drag / resize support — mirror what the HTML overlay shows so the\n // canvas backdrop stays glued to the user's cursor during gestures.\n const dragSet =\n interaction.kind === 'drag-groups'\n ? { ids: interaction.groupIds, delta: interaction.delta }\n : null;\n const resizing = interaction.kind === 'resize-group' ? interaction : null;\n const selectedGroupIds = new Set(selection.groups);\n\n for (const group of data.groups) {\n let bx = group.bounds.x;\n let by = group.bounds.y;\n let bw = group.bounds.width;\n let bh = group.bounds.height;\n if (dragSet?.ids.has(group.id)) {\n bx += dragSet.delta.x;\n by += dragSet.delta.y;\n } else if (resizing?.groupId === group.id) {\n const next = applyGroupResize(\n resizing.startBounds,\n resizing.handle,\n resizing.delta\n );\n bx = next.x;\n by = next.y;\n bw = next.width;\n bh = next.height;\n }\n\n const tl = info.worldToScreen({ x: bx, y: by });\n const br = info.worldToScreen({ x: bx + bw, y: by + bh });\n const width = br.x - tl.x;\n const height = br.y - tl.y;\n if (width <= 0 || height <= 0) continue;\n\n const isSelected = selectedGroupIds.has(group.id);\n\n ctx.fillStyle =\n group.color ?? (isSelected ? theme.groupFillSelected : theme.groupFill);\n ctx.fillRect(tl.x, tl.y, width, height);\n\n ctx.strokeStyle = group.color ?? theme.groupStroke;\n ctx.lineWidth = GROUP_STROKE_WIDTH;\n ctx.strokeRect(tl.x + 0.5, tl.y + 0.5, width - 1, height - 1);\n // The label is rendered by the HTML overlay (`NodeGraphGroupView`) so\n // it stays editable on click and scales with the world transform like\n // the rest of the group body. Canvas no longer paints it — avoids the\n // duplicate-title artefact where a screen-space canvas label and a\n // world-space HTML label drifted apart at non-1 zoom.\n }\n}\n\n/**\n * Draw the in-flight connection preview — a Bézier from the source port to\n * the current pointer position, styled to indicate validity.\n */\nexport function drawConnectionPreview(\n ctx: CanvasRenderingContext2D,\n info: ViewportLayerDrawInfo,\n interaction: NodeGraphInteractionState,\n resolveSourcePort: (\n ref: NodeGraphPortRef\n ) => { position: Point2D; side: NodeGraphPortSide } | null,\n theme: NodeGraphDrawTheme\n): void {\n if (interaction.kind !== 'connect') return;\n const src = resolveSourcePort(interaction.source);\n if (!src) return;\n\n // The \"target\" side for the preview curve mirrors the source so the curve\n // pulls toward the cursor naturally even when the cursor is free-floating.\n const tgtSide = oppositeSide(src.side);\n const cpWorld = getBezierControlPoints(\n src.position,\n src.side,\n interaction.currentWorld,\n tgtSide\n );\n const cpScreen = toScreenCp(cpWorld, p => info.worldToScreen(p));\n\n ctx.strokeStyle = interaction.invalid\n ? theme.previewStrokeInvalid\n : theme.previewStroke;\n ctx.lineWidth = PREVIEW_STROKE_WIDTH;\n ctx.lineCap = 'round';\n ctx.setLineDash(interaction.invalid ? [6, 4] : []);\n\n strokeBezier(ctx, cpScreen);\n\n ctx.setLineDash([]);\n\n // Endpoint marker at the cursor — small circle so the user sees the\n // pointer-snap target.\n const cursorScreen = info.worldToScreen(interaction.currentWorld);\n ctx.beginPath();\n ctx.arc(cursorScreen.x, cursorScreen.y, 4, 0, Math.PI * 2);\n ctx.fillStyle = interaction.invalid\n ? theme.previewStrokeInvalid\n : theme.previewStroke;\n ctx.fill();\n}\n\nfunction oppositeSide(side: NodeGraphPortSide): NodeGraphPortSide {\n switch (side) {\n case 'left':\n return 'right';\n case 'right':\n return 'left';\n case 'top':\n return 'bottom';\n case 'bottom':\n return 'top';\n default: {\n const _unreached: never = side;\n return _unreached;\n }\n }\n}\n\n/** Resolved canvas-drawing theme assembled from the base theme + overrides. */\nexport function buildDrawTheme(base: CanvasThemeColors): NodeGraphDrawTheme {\n return {\n ...base,\n edgeStroke: base.textMuted,\n edgeStrokeSelected: base.accentPrimary,\n edgeStrokeHovered: base.textSecondary,\n previewStroke: base.accentPrimary,\n previewStrokeInvalid: 'rgba(220, 38, 38, 0.9)',\n groupFill: 'rgba(255, 255, 255, 0.03)',\n groupFillSelected: 'rgba(255, 255, 255, 0.05)',\n groupStroke: base.borderDefault,\n groupLabel: base.textSecondary,\n };\n}\n\n// ─── Background pattern (dots / grid) ───\n\nexport interface BackgroundDrawOptions {\n variant: 'dots' | 'grid' | 'none';\n /** Grid spacing in world units. */\n gap: number;\n /** Override pattern colour (defaults to theme.borderDefault). */\n color?: string;\n /** Override background fill (defaults to theme.backgroundSecondary). */\n background?: string;\n}\n\n/**\n * Minimum on-screen distance (in CSS pixels) between adjacent dots / grid\n * lines. When the base `gap × zoom` falls below this, the renderer drops\n * down to a coarser LOD level (effective gap × 2, × 4, …) so the screen\n * never carries more than `viewportArea / (TARGET_SCREEN_GAP²)` elements.\n *\n * Acts like a mip-map level for the background pattern — keeps perf\n * constant under zoom-out instead of scaling quadratically with the world\n * area exposed.\n */\nconst TARGET_SCREEN_GAP = 18;\n\n/**\n * Lower hard cutoff: when even the coarsest pattern would be denser than\n * this on screen, skip the pattern entirely. Without this, an\n * extreme-zoom-out (e.g. fitting a 100k-node graph in 800px) would still\n * fire pattern-fill operations that the GPU can't sample meaningfully.\n */\nconst MIN_VISIBLE_SCREEN_GAP = 3;\n\n/**\n * Draw a uniform background pattern across the entire visible viewport.\n * Used by `NodeGraph.Background`.\n *\n * Performance strategy:\n *\n * 1. **LOD** — when zoomed out the world gap is multiplied by the\n * smallest power-of-two that keeps the on-screen spacing ≥\n * `TARGET_SCREEN_GAP`. The number of dots/lines drawn per frame is\n * therefore bounded by `viewportArea / TARGET_SCREEN_GAP²` regardless\n * of how far the user zooms out.\n * 2. **Pattern fill** — a single off-screen tile is built (one dot or\n * one crosshair of lines) and used as `ctx.createPattern(…, 'repeat')`.\n * A single `fillRect` covers the whole viewport, replacing what was\n * previously O(n) `arc()`/`stroke()` calls. The pattern's origin is\n * translated so the tile aligns with the world grid.\n */\nexport function drawBackground(\n ctx: CanvasRenderingContext2D,\n info: ViewportLayerDrawInfo,\n theme: NodeGraphDrawTheme,\n options: BackgroundDrawOptions\n): void {\n const background = options.background ?? theme.backgroundSecondary;\n ctx.fillStyle = background;\n ctx.fillRect(0, 0, info.size.width, info.size.height);\n\n if (options.variant === 'none' || options.gap <= 0) return;\n\n // Resolve the on-screen spacing the user-supplied world gap would yield\n // at the current zoom, then step up the world gap in powers of two\n // until each cell is at least TARGET_SCREEN_GAP pixels apart on screen.\n const baseScreenGap = options.gap * info.transform.zoom;\n if (baseScreenGap <= 0) return;\n let lodMultiplier = 1;\n while (baseScreenGap * lodMultiplier < TARGET_SCREEN_GAP) {\n lodMultiplier *= 2;\n // Safety: cap LOD at a sensible upper bound so a pathological zoom\n // (e.g. 1e-12) doesn't spin here forever.\n if (lodMultiplier > 1 << 20) break;\n }\n const screenGap = baseScreenGap * lodMultiplier;\n if (screenGap < MIN_VISIBLE_SCREEN_GAP) return;\n\n const color = options.color ?? theme.borderDefault;\n\n // World-space origin in screen pixels — the pattern's tile (0,0) must\n // land here so the dots/lines line up with the world grid. Modulo by\n // the tile size to keep the translation in `[0, tileSize)`.\n const origin = info.worldToScreen({ x: 0, y: 0 });\n const alignedTileSize = screenGap;\n const offsetX =\n ((origin.x % alignedTileSize) + alignedTileSize) % alignedTileSize;\n const offsetY =\n ((origin.y % alignedTileSize) + alignedTileSize) % alignedTileSize;\n\n // Snap the world origin offset to keep dots crisply pixel-aligned at\n // pan time. Sub-pixel pattern positions blur the rendered tile.\n const tx = Math.round(offsetX);\n const ty = Math.round(offsetY);\n\n const tileSize = Math.max(1, Math.round(alignedTileSize));\n if (options.variant === 'dots') {\n const dotRadius = Math.max(0.75, Math.min(1.75, screenGap / 24));\n const tile = getCachedTile(`dots:${tileSize}:${dotRadius}:${color}`, () =>\n buildDotTile(alignedTileSize, dotRadius, color)\n );\n if (!tile) return;\n fillWithPattern(ctx, tile, info.size.width, info.size.height, tx, ty);\n } else {\n const tile = getCachedTile(`grid:${tileSize}:${color}`, () =>\n buildGridTile(alignedTileSize, color)\n );\n if (!tile) return;\n ctx.globalAlpha = 0.6;\n fillWithPattern(ctx, tile, info.size.width, info.size.height, tx, ty);\n ctx.globalAlpha = 1;\n }\n}\n\n// Off-screen pattern tile cache. A pan keeps zoom (hence tile size, dot\n// radius, and colour) constant, so without this every panned frame would\n// allocate a fresh OffscreenCanvas and redraw the dot/grid. Keyed by every\n// input that affects the rendered pixels; bounded with FIFO eviction so a\n// continuous zoom (which varies the tile size per frame) can't grow it\n// without limit. Colour is in the key, so a theme switch produces a new tile\n// rather than a stale one.\nconst TILE_CACHE_LIMIT = 16;\nconst tileCache = new Map<string, HTMLCanvasElement | OffscreenCanvas>();\n\nfunction getCachedTile(\n key: string,\n build: () => HTMLCanvasElement | OffscreenCanvas | null\n): HTMLCanvasElement | OffscreenCanvas | null {\n const cached = tileCache.get(key);\n if (cached) return cached;\n const tile = build();\n if (!tile) return null;\n tileCache.set(key, tile);\n if (tileCache.size > TILE_CACHE_LIMIT) {\n const oldest = tileCache.keys().next().value;\n if (oldest !== undefined) tileCache.delete(oldest);\n }\n return tile;\n}\n\n/**\n * Build a single-cell repeating tile with one dot centred inside it.\n * Returns `null` when the environment has no `OffscreenCanvas`/`<canvas>`\n * (e.g. some SSR test runners) so the caller can bail without throwing.\n */\nfunction buildDotTile(\n tileSize: number,\n dotRadius: number,\n color: string\n): HTMLCanvasElement | OffscreenCanvas | null {\n const c = createTileCanvas(tileSize);\n if (!c) return null;\n const tctx = c.getContext('2d');\n if (!tctx) return null;\n tctx.clearRect(0, 0, tileSize, tileSize);\n tctx.fillStyle = color;\n tctx.beginPath();\n tctx.arc(tileSize / 2, tileSize / 2, dotRadius, 0, Math.PI * 2);\n tctx.fill();\n return c;\n}\n\n/**\n * Build a single-cell repeating tile carrying one vertical + one\n * horizontal line at the right/bottom edge — when tiled this forms a\n * full grid without overlap. Lines are at `tileSize - 0.5` so they fall\n * on whole pixels after the integer-snapped `setTransform` below.\n */\nfunction buildGridTile(\n tileSize: number,\n color: string\n): HTMLCanvasElement | OffscreenCanvas | null {\n const c = createTileCanvas(tileSize);\n if (!c) return null;\n const tctx = c.getContext('2d');\n if (!tctx) return null;\n tctx.clearRect(0, 0, tileSize, tileSize);\n tctx.strokeStyle = color;\n tctx.lineWidth = 1;\n // Right edge → vertical line; bottom edge → horizontal line.\n tctx.beginPath();\n tctx.moveTo(tileSize - 0.5, 0);\n tctx.lineTo(tileSize - 0.5, tileSize);\n tctx.moveTo(0, tileSize - 0.5);\n tctx.lineTo(tileSize, tileSize - 0.5);\n tctx.stroke();\n return c;\n}\n\nfunction createTileCanvas(\n size: number\n): HTMLCanvasElement | OffscreenCanvas | null {\n const rounded = Math.max(1, Math.round(size));\n if (typeof OffscreenCanvas !== 'undefined') {\n return new OffscreenCanvas(rounded, rounded);\n }\n if (typeof document === 'undefined') return null;\n const c = document.createElement('canvas');\n c.width = rounded;\n c.height = rounded;\n return c;\n}\n\n/**\n * Fill the entire viewport with a repeating pattern, translating the\n * pattern origin to `(tx, ty)` so the tile aligns with the world grid.\n * Single canvas call — independent of the number of dots/lines drawn.\n */\nfunction fillWithPattern(\n ctx: CanvasRenderingContext2D,\n tile: HTMLCanvasElement | OffscreenCanvas,\n width: number,\n height: number,\n tx: number,\n ty: number\n): void {\n const pattern = ctx.createPattern(tile, 'repeat');\n if (!pattern) return;\n ctx.save();\n // Move the pattern origin so the first tile starts at (tx, ty) instead\n // of (0, 0). The canvas tracks pattern origin via the current transform.\n ctx.translate(tx, ty);\n ctx.fillStyle = pattern;\n ctx.fillRect(-tx, -ty, width, height);\n ctx.restore();\n}\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ // Module-scoped monotonic counter — guarantees uniqueness within a single
2
+ // session even when `Date.now()` collides (tight bursts of connections,
3
+ // fake timers in tests). Combined with a short random tail it gives a
4
+ // near-zero collision risk without pulling in `crypto.randomUUID`, which
5
+ // isn't available in every browser / runtime the library targets.
6
+ let idCounter = 0;
7
+ function uniqueSuffix() {
8
+ const t = Date.now().toString(36);
9
+ const c = (idCounter++).toString(36);
10
+ const r = Math.random().toString(36).slice(2, 6);
11
+ return `${t}-${c}-${r}`;
12
+ }
13
+ /**
14
+ * Generate a unique-enough id for a freshly-spawned node from a template.
15
+ * Format: `${templateId}-${timestamp36}-${counter36}-${random36}`.
16
+ */
17
+ function generateNodeId(templateId) {
18
+ return `${templateId}-${uniqueSuffix()}`;
19
+ }
20
+ /**
21
+ * Generate a unique edge id from its endpoints. Includes source/target
22
+ * port refs in the id so it's somewhat readable in devtools, plus the
23
+ * standard timestamp + counter + random tail to guarantee uniqueness
24
+ * across rapid back-to-back connections.
25
+ */
26
+ function generateEdgeId(source, target) {
27
+ return `edge-${source.node}.${source.port}-${target.node}.${target.port}-${uniqueSuffix()}`;
28
+ }
29
+
30
+ export { generateEdgeId, generateNodeId };
31
+ //# sourceMappingURL=nodeGraphIds.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nodeGraphIds.js","sources":["src/components/editor/NodeGraph/nodeGraphIds.ts"],"sourcesContent":["import type { NodeGraphPortRef } from './NodeGraph.types';\n\n// Module-scoped monotonic counter — guarantees uniqueness within a single\n// session even when `Date.now()` collides (tight bursts of connections,\n// fake timers in tests). Combined with a short random tail it gives a\n// near-zero collision risk without pulling in `crypto.randomUUID`, which\n// isn't available in every browser / runtime the library targets.\nlet idCounter = 0;\n\nfunction uniqueSuffix(): string {\n const t = Date.now().toString(36);\n const c = (idCounter++).toString(36);\n const r = Math.random().toString(36).slice(2, 6);\n return `${t}-${c}-${r}`;\n}\n\n/**\n * Generate a unique-enough id for a freshly-spawned node from a template.\n * Format: `${templateId}-${timestamp36}-${counter36}-${random36}`.\n */\nexport function generateNodeId(templateId: string): string {\n return `${templateId}-${uniqueSuffix()}`;\n}\n\n/**\n * Generate a unique edge id from its endpoints. Includes source/target\n * port refs in the id so it's somewhat readable in devtools, plus the\n * standard timestamp + counter + random tail to guarantee uniqueness\n * across rapid back-to-back connections.\n */\nexport function generateEdgeId(\n source: NodeGraphPortRef,\n target: NodeGraphPortRef\n): string {\n return `edge-${source.node}.${source.port}-${target.node}.${target.port}-${uniqueSuffix()}`;\n}\n"],"names":[],"mappings":"AAEA;AACA;AACA;AACA;AACA;AACA,IAAI,SAAS,GAAG,CAAC;AAEjB,SAAS,YAAY,GAAA;IACnB,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;IACjC,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,EAAE,QAAQ,CAAC,EAAE,CAAC;AACpC,IAAA,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;AAChD,IAAA,OAAO,GAAG,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA,EAAI,CAAC,EAAE;AACzB;AAEA;;;AAGG;AACG,SAAU,cAAc,CAAC,UAAkB,EAAA;AAC/C,IAAA,OAAO,GAAG,UAAU,CAAA,CAAA,EAAI,YAAY,EAAE,EAAE;AAC1C;AAEA;;;;;AAKG;AACG,SAAU,cAAc,CAC5B,MAAwB,EACxB,MAAwB,EAAA;IAExB,OAAO,CAAA,KAAA,EAAQ,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,CAAA,CAAA,EAAI,MAAM,CAAC,IAAI,CAAA,CAAA,EAAI,MAAM,CAAC,IAAI,IAAI,YAAY,EAAE,EAAE;AAC7F;;;;"}