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
package/CHANGELOG.md CHANGED
@@ -1,5 +1,771 @@
1
1
  # entangle-ui
2
2
 
3
+ ## 0.11.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#103](https://github.com/SebastianWebdev/entangle-ui/pull/103) [`9fd2dbd`](https://github.com/SebastianWebdev/entangle-ui/commit/9fd2dbdd86a24c776b5b188582eec3c7ceb584b9) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - Fix browser white-screen caused by a Node build of `picocolors` being inlined into the shipped ESM.
8
+
9
+ `@vanilla-extract/css` was reachable from the runtime barrel (via `createCustomTheme`) but was **not** a Rollup external, so its entire runtime — including the Node build of `picocolors` (`let p = process || {}` at module init) and `lru-cache` — was inlined into `dist/esm`. Any `entangle-ui` import then crashed with `process is not defined` in the browser (most visibly in `vite dev`, where nothing is tree-shaken).
10
+
11
+ **What changed:**
12
+ - `@vanilla-extract/css` is now a Rollup external, so it is no longer inlined. The consumer's bundler resolves it and honours each dependency's `browser` field, so no Node-only globals reach the browser.
13
+ - A regression guard (`scripts/check-browser-safe.ts`, wired into `prepublishOnly` via `npm run check:browser-safe`) fails the publish if any `dist/esm/**/*.js` references a Node-only global (`process`, `require(`) outside the bundler-replaceable `process.env.NODE_ENV` guard.
14
+
15
+ **Action required (peer dependency):** `@vanilla-extract/css` (`^1.18.0`) is now declared as a `peerDependency`. It is already pulled in transitively by the existing required peers `@vanilla-extract/dynamic` and `@vanilla-extract/recipes`, so npm/yarn users are unaffected; pnpm users (strict resolution) should ensure it is installed.
16
+
17
+ - [#105](https://github.com/SebastianWebdev/entangle-ui/pull/105) [`55b94aa`](https://github.com/SebastianWebdev/entangle-ui/commit/55b94aa3cf90690c5e32a6c61d88e2f3c55e6277) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - Add a canonical stylesheet entry and fix published sourcemaps.
18
+
19
+ **`entangle-ui/styles.css` (new, canonical theme import).** The documented CSS imports (`entangle-ui/styles.css`, `entangle-ui/darkTheme.css`) did not resolve, and the dark theme `:root` variables (`--etui-*`) were not reachable from a normal component import — so a fresh app rendered unstyled. There is now a single canonical entry:
20
+
21
+ ```ts
22
+ // once, at your app root
23
+ import 'entangle-ui/styles.css';
24
+ ```
25
+
26
+ It registers every `--etui-*` token on `:root` (default dark theme) plus the opt-in global-scrollbar rules, so components render correctly **without** a `ThemeProvider` wrapper. Component CSS still ships per component, so the entry stays tiny. A packaging test asserts the `:root` tokens are present.
27
+
28
+ **Package-relative sourcemaps.** Published `.js.map` files pointed `sources` at an unshipped `node_modules/entangle-ui/src/...` and shipped no `sourcesContent`, producing "source file outside its package" warnings in consumers. Sourcemaps now use package-relative `src/...` paths with embedded `sourcesContent` (`inlineSources` in `tsconfig.build.json` + a `sourcemapPathTransform` in `rollup.config.js`). A regression guard (`scripts/check-sourcemaps.ts`, wired into `prepublishOnly` via `npm run check:sourcemaps`) fails the publish if a sourcemap escapes the package or drops its source content.
29
+
30
+ - [#107](https://github.com/SebastianWebdev/entangle-ui/pull/107) [`2c96ea1`](https://github.com/SebastianWebdev/entangle-ui/commit/2c96ea1e149b73c55d41f6ab1347d9cf8f6c60bf) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - `PropertyPanel`: add fill-height scrolling, row density, and a small control-padding fix.
31
+ - **`fillHeight` (new prop).** Fills the parent's height and scrolls the content on overflow without needing a fixed `maxHeight`, reserving a scrollbar gutter so controls don't sit under the overlay scrollbar. Ignored when `maxHeight` is set.
32
+ - **`density` (new prop).** `compact` / `normal` / `spacious` tunes the vertical rhythm (min-height + vertical padding) of all nested `PropertyRow`s via panel context. Default `normal` is unchanged from before.
33
+ - **Control right padding.** `PropertyRow`'s control column right padding was bumped from `xs` (2px) to `sm` (4px) so controls no longer sit flush against the row's right edge. This is a small default visual change.
34
+
35
+ - [#107](https://github.com/SebastianWebdev/entangle-ui/pull/107) [`2c96ea1`](https://github.com/SebastianWebdev/entangle-ui/commit/2c96ea1e149b73c55d41f6ab1347d9cf8f6c60bf) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - `PropertyRow`: fix the label tooltip and allow a `ReactNode` label.
36
+ - **Tooltip fix.** The label tooltip never appeared because the tooltip trigger wrapped its content in a `display: contents` element, which generates no box and therefore no hover/focus target (the `Tooltip` primitive disables pointer events on the trigger and re-enables them only on its direct child). The wrapper is now a real `inline-flex` box, so hovering or focusing the label shows the tooltip.
37
+ - **`label: ReactNode`.** `PropertyRow.label` was typed `string` but already rendered any node. It is now typed `React.ReactNode`, so an icon + text (or any custom markup) can be used as a label without a cast. This is a widening, so existing string labels are unaffected.
38
+
39
+ - [#107](https://github.com/SebastianWebdev/entangle-ui/pull/107) [`2c96ea1`](https://github.com/SebastianWebdev/entangle-ui/commit/2c96ea1e149b73c55d41f6ab1347d9cf8f6c60bf) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - `PropertySection`: add a first-class checkable section.
40
+
41
+ Set `checkable` to render a managed enable/disable toggle in the section header (built on the `Switch` primitive). When the toggle is off, the section body is dimmed and made non-interactive (`pointer-events: none`) but **stays mounted**, so its state is preserved. The toggle is independent of the collapse state and supports controlled and uncontrolled use via `checked` / `defaultChecked` / `onCheckedChange`. The toggle's accessible name defaults to the section `title` and can be overridden with `checkLabel`. All additive — sections without `checkable` are unchanged.
42
+
43
+ - [#107](https://github.com/SebastianWebdev/entangle-ui/pull/107) [`2c96ea1`](https://github.com/SebastianWebdev/entangle-ui/commit/2c96ea1e149b73c55d41f6ab1347d9cf8f6c60bf) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - `Select`: add `fullWidth` and size the open dropdown to its content.
44
+ - **`fullWidth` (new prop).** When set, the select stretches the container and trigger to fill the available width instead of shrinking to the selected label. This fixes selects collapsing when placed inside a flex row or property panel. Default `false` preserves the previous content-width behavior.
45
+ - **Content-sized dropdown.** The open dropdown now sizes to its widest option (`width: max-content`), with a minimum of the trigger width (and `minDropdownWidth` when set) and a maximum clamped to the viewport. Long option labels are no longer clipped by a narrow trigger. `minDropdownWidth` continues to act as a floor.
46
+
47
+ - [#107](https://github.com/SebastianWebdev/entangle-ui/pull/107) [`2c96ea1`](https://github.com/SebastianWebdev/entangle-ui/commit/2c96ea1e149b73c55d41f6ab1347d9cf8f6c60bf) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - `Select`: type `onChange` per `clearable` so the value is only nullable when it can actually be cleared.
48
+
49
+ `SelectProps` is now a discriminated union on `clearable`:
50
+ - Without `clearable`, `onChange` is `(value: T) => void` — it never receives `null`, so consumers no longer need a spurious null check.
51
+ - With `clearable`, `onChange` is `(value: T | null) => void` — `null` is emitted by the clear button.
52
+
53
+ Type-only change (runtime behavior is unchanged). This is stricter than before: an inline `onChange` handler on a non-clearable select now infers `T` instead of `T | null`. Handlers already written to accept `T | null` remain assignable, so most code is unaffected; a handler that explicitly compared the value to `null` on a non-clearable select should drop that dead branch.
54
+
55
+ - [#108](https://github.com/SebastianWebdev/entangle-ui/pull/108) [`67edb59`](https://github.com/SebastianWebdev/entangle-ui/commit/67edb59caeadb6798318774e725a061f567f4a8f) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - Add viewport / 3D icon glyphs: `OrbitIcon`, `RotateIcon`, `SpinIcon`, `CameraIcon`, `CubeIcon`, and `ZoomFitIcon`.
56
+
57
+ The icon set previously lacked rotate/orbit, camera, cube/axis, and zoom-to-fit glyphs, so editor viewports had to reuse `RefreshIcon`/`HomeIcon` for unrelated meanings. These six additions match the existing 24×24 / 2px-stroke style, are exported from the root barrel, and are tree-shakeable like every other icon. Purely additive — no existing icon changed.
58
+
59
+ ### Patch Changes
60
+
61
+ - [#106](https://github.com/SebastianWebdev/entangle-ui/pull/106) [`7c68e13`](https://github.com/SebastianWebdev/entangle-ui/commit/7c68e133d93a35287d82b3d1036ca0c3eac70521) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - Fix the install and getting-started documentation across every surface so a new consumer can install and run the package.
62
+
63
+ The README (shipped on npm), the `docs/` quickstart and theming guides, the docs-site getting-started and theming pages, and the bundled skill all carried a stale install story:
64
+ - **Install tag.** `npm install entangle-ui@alpha` resolved to an ancient `0.1.0-alpha.0`; the documented command is now `npm install entangle-ui`.
65
+ - **React floor.** The `react`/`react-dom` peer requirement is `>=19.2.0`, not the documented `>=19.1.0`.
66
+ - **Peer dependencies.** The docs omitted `@tanstack/react-virtual` and `@vanilla-extract/css`; all peers are now listed with their real version ranges.
67
+ - **Theme import.** The documented `entangle-ui/darkTheme.css` and side-effect `entangle-ui/theme` imports did not register the `--etui-*` variables. Everything now uses the canonical `import 'entangle-ui/styles.css'`, and the default-theme examples no longer imply a `ThemeProvider` wrapper is required.
68
+
69
+ Documentation only — no runtime or API change.
70
+
71
+ - [#107](https://github.com/SebastianWebdev/entangle-ui/pull/107) [`2c96ea1`](https://github.com/SebastianWebdev/entangle-ui/commit/2c96ea1e149b73c55d41f6ab1347d9cf8f6c60bf) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - `PropertySection`: render header controls as siblings of the collapse trigger instead of nested inside it.
72
+
73
+ The enable toggle (`checkable`) and the `actions` slot were rendered inside the section header's trigger `<button>`, which produced invalid HTML (`<button>` cannot contain another `<button>`/interactive control) and a React DOM warning. The header is now a flex strip containing the trigger button and a separate controls group as siblings, so toggles and actions are never nested in a button. The collapse behavior, sizing, and the expanded separator are unchanged; the trigger's hover highlight now covers the trigger area rather than the full strip width.
74
+
75
+ ## 0.10.0
76
+
77
+ ### Minor Changes
78
+
79
+ - [#85](https://github.com/SebastianWebdev/entangle-ui/pull/85) [`9eabab7`](https://github.com/SebastianWebdev/entangle-ui/commit/9eabab77e2a1dc95a6c4a66cbf556a68b1365ff1) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - Add the `AssetBrowser` flagship component — a controlled content browser for
80
+ files and folders. Toggle between a virtualized thumbnail grid and a
81
+ `DataTable`-backed list, navigate folders via a breadcrumb bar and a `TreeView`
82
+ sidebar, and search, filter, sort, and select assets. Supports single/multiple
83
+ selection with marquee and keyboard navigation, drag-to-folder move, external
84
+ file import, and drag-out payloads, plus `renderThumbnail` / `renderItem` /
85
+ context-menu render props.
86
+
87
+ - [#85](https://github.com/SebastianWebdev/entangle-ui/pull/85) [`9eabab7`](https://github.com/SebastianWebdev/entangle-ui/commit/9eabab77e2a1dc95a6c4a66cbf556a68b1365ff1) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - Tighten the React peer dependency to `>=19.2.0` so the library can use the
88
+ now-stable `useEffectEvent` and `<Activity>` APIs. Internal AssetBrowser
89
+ refactor lands on top:
90
+ - Replace `useLatest + useCallback` pairs in `useAssetNavigation`,
91
+ `useAssetSelectionController`, `useAssetDnd`, `useAssetMarqueeGesture`, and
92
+ `useAssetBrowserHandle` with `useEffectEvent`. Handlers keep stable
93
+ identity but always see the latest closures, with significantly less code.
94
+ - Stabilize `renderThumbnail` / `renderItem` / `renderItemContextMenu` /
95
+ `renderEmptyContextMenu` through a new internal `useStableRenderFn`
96
+ helper, so a consumer passing an inline render-prop no longer busts the
97
+ item context (which would re-render every grid cell).
98
+ - Extract grid keyboard navigation into a new `useAssetGridKeyboardNav`
99
+ hook (mirrors the gesture / virtualizer hooks).
100
+ - `AssetBrowserStatusBar` now takes `view` as a prop instead of reading the
101
+ chrome context, and an `AssetBrowserAnnouncementLive` subcomponent reads
102
+ the polite-live announcement directly via a new
103
+ `useAssetBrowserAnnouncement` slice hook — the root no longer computes
104
+ it.
105
+ - Memoize the `useAssetBrowserViewState` return so callers that capture it
106
+ whole keep a stable identity across renders.
107
+
108
+ - [#85](https://github.com/SebastianWebdev/entangle-ui/pull/85) [`9eabab7`](https://github.com/SebastianWebdev/entangle-ui/commit/9eabab77e2a1dc95a6c4a66cbf556a68b1365ff1) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - AssetBrowser: add mutation operations — inline rename, delete, create-folder,
109
+ and duplicate.
110
+
111
+ AssetBrowser stays controlled and presentational: each operation provides the
112
+ affordance (inline editor, keyboard shortcut, menu action) and reports **intent**
113
+ through a callback — you apply the change and pass back fresh `items`. Presence
114
+ of a callback enables its affordance.
115
+
116
+ New props:
117
+ - `onItemRename(item, newName)` — inline rename. Enables an inline label editor
118
+ (swap the cell label for a text field), the `F2` shortcut, the `Rename`
119
+ default action, and `handle.beginRename(id)`. Commits on Enter / blur with a
120
+ changed, non-empty value; cancels on Escape. Return / resolve `false` to
121
+ reject the name and keep the editor open (e.g. failed validation).
122
+ - `onItemsDelete(items)` — delete the acted-on items. Enables the `Delete` key
123
+ (and `⌘⌫` on macOS; plain `Backspace` stays reserved for parent-nav) and the
124
+ `Delete` action. Roving focus moves to a survivor before deletion.
125
+ - `onCreateFolder(parentFolderId)` — enables the empty-area `New folder` action.
126
+ Pair with `handle.beginRename(newId)` for the create-then-rename flow.
127
+ - `onItemsDuplicate(items)` — enables `Ctrl/⌘ + D` and the `Duplicate` action.
128
+ - `defaultItemActions` — auto-populate the item / empty-area context menus with
129
+ Rename / Duplicate / Delete / New-folder entries for whichever callbacks are
130
+ present (labels come from the `labels` prop, so they localize).
131
+
132
+ API additions:
133
+ - `renderItemContextMenu(items, actions)` now receives an `actions` object
134
+ (`rename` / `delete` / `duplicate`, bound to the acted-on items) so a custom
135
+ menu can wire the built-in flows without a ref.
136
+ - `AssetBrowserHandle.beginRename(id)` enters inline-rename imperatively
137
+ (scrolls the item into view first).
138
+ - New exported types `AssetItemActions` and `AssetRenameResult`; new `labels`
139
+ keys `rename` / `delete` / `duplicate` / `newFolder`.
140
+
141
+ Notes:
142
+ - All mutation affordances work in **both** the grid and list views: inline
143
+ rename, the `F2` / `Delete` / `Ctrl+D` shortcuts, and the right-click menus.
144
+ A single view-agnostic context-menu layer detects the target item from
145
+ `data-asset-id` (grid cells) / `data-row-key` (list rows), and the mutation
146
+ keyboard handler is shared by both scrollers — DataTable itself is unchanged.
147
+ - The "is editing" flag lives in the store as a per-id slice
148
+ (`useAssetEditing`), so a rename re-renders only the affected cell/row and can
149
+ be started from the keyboard, a menu, or the imperative handle. In the list,
150
+ `F2` targets the sole selected row (the list has no roving focus).
151
+
152
+ Docs: new Mutations section + a live demo (rename / duplicate / delete / new
153
+ folder); the Context menus, Keyboard reference, and API tables are updated.
154
+
155
+ - [#85](https://github.com/SebastianWebdev/entangle-ui/pull/85) [`9eabab7`](https://github.com/SebastianWebdev/entangle-ui/commit/9eabab77e2a1dc95a6c4a66cbf556a68b1365ff1) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - AssetBrowser: production hardening — wire up dead APIs, add error/i18n/a11y, fix
156
+ controlled-history and store identity.
157
+
158
+ New features:
159
+ - **Context menus now work.** `renderItemContextMenu` / `renderEmptyContextMenu`
160
+ were typed, documented, and demoed but never rendered — right-click only
161
+ updated selection. Cells (and the empty surface) are now real `ContextMenu`
162
+ triggers. The item callback receives the whole selection when you right-click
163
+ a selected item, otherwise just the item under the cursor. Opt-in, so unused
164
+ menus add zero cost.
165
+ - **Loading skeletons.** `loadingItemCount` is no longer dead: grid-view loading
166
+ renders that many skeleton cells (sized to the current thumbnail) instead of a
167
+ lone spinner.
168
+ - **Error state.** New `error` (`true` → built-in message, or a custom node) and
169
+ `onErrorRetry` (adds a Retry button) props. Takes precedence over loading/empty.
170
+ - **Internationalization.** New `labels` prop overrides every built-in UI string
171
+ (search, sort/filter menus, view tooltips, empty/loading/error, list headers,
172
+ the live announcement). Merged onto English defaults, exported as
173
+ `DEFAULT_ASSET_BROWSER_LABELS` / `AssetBrowserLabels`.
174
+ - **Type-aware fallback icons** for files without a thumbnail (material/audio/
175
+ video/scene/text), and a **broken-image fallback** — a failed `thumbnailUrl`
176
+ now shows the type icon instead of the browser's broken-image glyph.
177
+
178
+ Fixes:
179
+ - **Controlled `currentFolderId` now stays in sync with the back/forward stack.**
180
+ An out-of-band change (deep link, "reveal in browser") is pushed onto history,
181
+ so `canGoBack`/Back resolve correctly instead of going stale.
182
+ - **Store identity** is created with `useState(() => …)` instead of `useMemo`,
183
+ guaranteeing stable slice subscriptions for the component's lifetime.
184
+ - **Marquee** gains an `onPointerCancel` handler so an interrupted/touch-cancelled
185
+ drag no longer leaves the rubber-band rect stuck active.
186
+
187
+ Accessibility:
188
+ - The virtualized grid now exposes true `aria-rowcount`/`aria-colcount` and
189
+ per-cell 1-based `aria-rowindex`/`aria-colindex`, and announces roving focus
190
+ via `aria-activedescendant` (works under windowing without moving DOM focus).
191
+
192
+ Docs: new Context menus, History, Internationalization, Error-state, Recipes, and
193
+ Tips & gotchas sections, plus four new live demos.
194
+
195
+ - [#100](https://github.com/SebastianWebdev/entangle-ui/pull/100) [`3ff903f`](https://github.com/SebastianWebdev/entangle-ui/commit/3ff903f5e8603e6bc763daac73c789945afa383a) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - Add two public hooks, move filter-heavy components to `useDeferredValue`, and
196
+ deprecate `useDebouncedValue`.
197
+ - **New hook `useEventCallback`** — a stable callback identity for the
198
+ component lifetime that always invokes the most recently rendered version
199
+ (the `useEffectEvent` pattern). Backed by `useInsertionEffect`, so the
200
+ freshness guarantee holds even for consumers that read it during the same
201
+ commit — a child's `useLayoutEffect`, a synchronous store subscription, an
202
+ imperative handle. Now used internally by `useResizeObserver`,
203
+ `useDebouncedCallback`, `useThrottledCallback`, and `useListboxNav`.
204
+ - **New hook `useIsMounted`** — a stable getter reporting whether the
205
+ component is still mounted, for guarding state writes inside async
206
+ continuations that may resolve after unmount.
207
+ - **`useDeferredValue` pass** on the filter-heavy components: `CommandPalette`,
208
+ `Combobox`, `MultiSelect`, and `PropertyPanel` defer the query that drives
209
+ filtering, so the inputs stay controlled and responsive while large lists
210
+ re-filter.
211
+ - **`Combobox` fix:** the "create" row and exact-match detection now run off
212
+ the same deferred query as the filtered list, so editing toward an exact
213
+ match no longer briefly flashes a stray create row or skews the keyboard
214
+ navigation / `aria-activedescendant` indices.
215
+
216
+ **Breaking:** `CommandPalette` no longer accepts the `debounceMs` prop. Query
217
+ filtering is deferred through React's `useDeferredValue` instead of a fixed
218
+ debounce window — better interactivity on large command lists, with no tuning
219
+ needed. Remove any `debounceMs={…}` from `<CommandPalette>` usages.
220
+
221
+ **Deprecated:** `useDebouncedValue` is deprecated in favour of
222
+ `useDeferredValue` for keeping an input responsive while an expensive
223
+ derivation (filtering, search) lags behind it. It remains exported; use
224
+ `useDebouncedCallback` to debounce a _side effect_ rather than a rendered value.
225
+
226
+ - [#90](https://github.com/SebastianWebdev/entangle-ui/pull/90) [`1cdce9c`](https://github.com/SebastianWebdev/entangle-ui/commit/1cdce9c92cb3bf6aa3705d814178045bf14951d4) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - FileTree: a file-system-flavored specialization of `TreeView` with automatic
227
+ file-type icons and drag-and-drop import of OS files.
228
+
229
+ `FileTree` renders a `TreeView` internally and feeds it derived nodes — it does
230
+ **not** reimplement expansion, selection, or keyboard navigation. It takes a
231
+ nested `FileTreeNode[]` (`{ id, name, kind: 'file' | 'folder', ext?, path?,
232
+ children?, … }`), auto-assigns file-type icons by extension (image / media /
233
+ code / archive / text) plus open/closed folder glyphs, and exposes the same
234
+ controlled/uncontrolled expansion + selection model as `TreeView`.
235
+
236
+ New component + API:
237
+ - `<FileTree nodes={…} />` — `expandedIds` / `defaultExpandedIds` /
238
+ `onExpandedChange`, `selectedIds` / `defaultSelectedIds` / `selectionMode` /
239
+ `onSelectionChange`, `size`, `indent`, `showChevrons`, `showGuideLines`,
240
+ `maxHeight`, `emptyContent`, and `onNodeClick` / `onNodeDoubleClick` /
241
+ `onNodeContextMenu` (all mapped to `FileTreeNode`).
242
+ - `onImport({ files, targetFolder })` — fired when OS files are dropped onto a
243
+ folder (or the root, `targetFolder: null`). Presence enables the import drop
244
+ zone; the active target folder is highlighted while dragging. `FileTree`
245
+ reports intent only — apply the change and pass back fresh `nodes`.
246
+ - `resolveIcon(node, { expanded })` — per-node icon override; return `undefined`
247
+ to fall back to the built-in extension map. `renderNode` / `renderActions`
248
+ give full content control. Built-in icons follow the theme, and any icon takes
249
+ a `color` prop, so icons are fully colorable.
250
+ - `expandOnClick` (default `true`) — clicking anywhere on a folder row toggles
251
+ it open/closed, not just the chevron. Set `false` to require the chevron.
252
+ - `labels` (`Partial<FileTreeLabels>`) + exported `DEFAULT_FILE_TREE_LABELS` —
253
+ full i18n for the two built-in strings (`treeLabel` → the `role="tree"`
254
+ accessible name; `emptyLabel` → empty-state text). An explicit `aria-label` /
255
+ `emptyContent` still wins. `aria-label` / `aria-labelledby` are forwarded to
256
+ the tree element.
257
+ - Exported helpers `getFileIconKind` / `classifyExtension` / `getFileExtension`
258
+ and types `FileTreeNode`, `FileTreeNodeKind`, `FileTreeNodeState`,
259
+ `FileTreeImportPayload`, `FileTreeLabels`, `FileIconKind`.
260
+
261
+ Internal move / reorder is intentionally deferred for v1 (external import only);
262
+ the heavyweight internal-move case is covered by `AssetBrowser`.
263
+
264
+ TreeView (additive, backwards-compatible): new generic drop-target props
265
+ `dropTargetId` and `onNodeDragOver` / `onNodeDragLeave` / `onNodeDrop` (these
266
+ finally wire up the long-declared-but-unused `droppable` field on
267
+ `TreeNodeData`), plus `expandOnClick` (toggle a parent node on row click). All
268
+ usable on a plain `TreeView`, not just `FileTree`.
269
+
270
+ Icons: add `ImageIcon` (no image glyph existed; `AssetBrowser` relied on
271
+ thumbnails, but a tree has none). Fix `FolderOpenIcon` geometry — it occupied a
272
+ smaller area of the 24×24 viewBox than `FolderIcon`, so the open folder rendered
273
+ visibly smaller than the closed one; it now shares the closed folder's footprint.
274
+
275
+ Docs: new FileTree page with live demos (project tree, drag-and-drop import,
276
+ icon resolution, colored icons, selection, sizes, token re-skin, localized
277
+ labels) plus `## Styling` (theme-token + targeting-hook tables) and
278
+ `## Internationalization` sections.
279
+
280
+ - [#92](https://github.com/SebastianWebdev/entangle-ui/pull/92) [`98cbbfd`](https://github.com/SebastianWebdev/entangle-ui/commit/98cbbfdb9fa2658568822ef8a49a0f409ccb40f4) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - Add the `LogView` flagship component — a virtualized console / log output panel
281
+ for editor and IDE-style apps. Renders a large, append-only entry stream
282
+ efficiently via `@tanstack/react-virtual`, with per-level coloring (built-in
283
+ `debug | info | warn | error` plus an extensible `levelConfig`), level filter
284
+ chips with live counts, text search with `useDeferredValue` and match
285
+ highlighting, follow-tail auto-scroll with a jump-to-bottom affordance,
286
+ optional timestamps and source tags, and per-line / copy-all support. Optional
287
+ row selection (`selectionMode="multiple"`) with click / Cmd-click / Shift-click,
288
+ keyboard shortcuts (Cmd/Ctrl+A, Cmd/Ctrl+C, Escape), and selection-aware copy.
289
+
290
+ Supports two data-flow models: a controlled `entries` prop, or an uncontrolled
291
+ imperative handle (`ref.append` / `appendMany` / `clear`) whose writes are
292
+ rAF-batched so high-frequency streaming collapses to one render per frame.
293
+ Use it batteries-included with the default toolbar, or compose the slots
294
+ (`LogView.Toolbar`, `LogView.Search`, `LogView.LevelFilter`, `LogView.Copy`,
295
+ `LogView.Clear`, `LogView.Body`). Single-line rows by default with an opt-in
296
+ `wrap` mode for measured variable-height lines.
297
+
298
+ - [#92](https://github.com/SebastianWebdev/entangle-ui/pull/92) [`98cbbfd`](https://github.com/SebastianWebdev/entangle-ui/commit/98cbbfdb9fa2658568822ef8a49a0f409ccb40f4) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - LogView: add a `labels` prop for internationalization. Every built-in UI string
299
+ — the search placeholder and label, the level-filter group label, the clear /
300
+ copy / per-line copy labels, the jump-to-bottom button, the new-line counter,
301
+ the empty state, and the region label — is now overridable via `labels`, a
302
+ `Partial<LogViewLabels>`, so omitted keys keep their English default. The
303
+ new-line counter is a function (`(count) => string`) for per-locale
304
+ pluralization and word order. Explicit per-slot props (a slot's `aria-label`,
305
+ the search `placeholder`, `emptyState`, the root `aria-label`) still take
306
+ precedence. The English defaults are exported as `DEFAULT_LOG_VIEW_LABELS`.
307
+
308
+ - [#92](https://github.com/SebastianWebdev/entangle-ui/pull/92) [`98cbbfd`](https://github.com/SebastianWebdev/entangle-ui/commit/98cbbfdb9fa2658568822ef8a49a0f409ccb40f4) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - LogView: add `slotProps` for the default composition. Pass per-slot props
309
+ (`toolbar`, `search`, `levelFilter`, `copy`, `clear`, `body`, `footer`) to
310
+ restyle or reconfigure a single slot of the batteries-included layout without
311
+ rebuilding it from `children` — each entry is typed as that slot's props and its
312
+ `className` / `style` merge with the slot's own styles. Ignored when you provide
313
+ your own `children`. Establishes the library-wide `slotProps` convention
314
+ documented in `docs/component-patterns.md` (§15).
315
+
316
+ - [#81](https://github.com/SebastianWebdev/entangle-ui/pull/81) [`36b7f72`](https://github.com/SebastianWebdev/entangle-ui/commit/36b7f72968049aff57189f093bd7d892368fa7f1) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - Migrate `Menu` and `ContextMenu` from a configuration object to a composition API.
317
+
318
+ **Breaking change.** The `config`, `selectedItems`, `onChange`, `checkboxIcon`, `radioIcon` props (and the `useMenu` / `useContextMenuTarget` hooks, plus the `MenuConfig` / `MenuItem` / `MenuSelection` / `ContextMenuConfig` / `ContextMenuTargetDetails` types) are removed. Menus are now built by composing child components.
319
+ - **Menu** — `Menu.Trigger`, `Menu.Content`, `Menu.Item`, `Menu.Group`, `Menu.Separator`, `Menu.RadioGroup`, `Menu.RadioItem`, `Menu.CheckboxItem`, `Menu.Sub`, `Menu.SubTrigger`, `Menu.SubContent`.
320
+ - **Menu.Item** lays out as icon (left) · label (center) · `shortcut` / `endContent` (right), like MUI's `MenuItem`.
321
+ - **ContextMenu** — `ContextMenu`, `ContextMenu.Trigger`, `ContextMenu.Content`. The dynamic `config(context)` resolver and `payload` are gone: scope menus by giving each area its own `ContextMenu`, and pass any custom node (tabs, search, custom panels) into `ContextMenu.Content`. Items reuse the shared `Menu.*` primitives.
322
+
323
+ ```tsx
324
+ <Menu>
325
+ <Menu.Trigger>Options</Menu.Trigger>
326
+ <Menu.Content>
327
+ <Menu.Item icon={<CopyIcon />} shortcut="⌘C" onClick={copy}>
328
+ Copy
329
+ </Menu.Item>
330
+ </Menu.Content>
331
+ </Menu>
332
+
333
+ <ContextMenu>
334
+ <ContextMenu.Trigger>
335
+ <Canvas />
336
+ </ContextMenu.Trigger>
337
+ <ContextMenu.Content>
338
+ <Menu.Item onClick={addNode}>Add Node</Menu.Item>
339
+ </ContextMenu.Content>
340
+ </ContextMenu>
341
+ ```
342
+
343
+ - [#82](https://github.com/SebastianWebdev/entangle-ui/pull/82) [`d5c1c65`](https://github.com/SebastianWebdev/entangle-ui/commit/d5c1c651c159e07fe2d0d90f536c702743478404) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - Polish `Menu` and `ContextMenu` after code review.
344
+ - Pass `onOpenChange`, `onValueChange` and `onCheckedChange` straight through to Base UI instead of wrapping them in inline arrows, so Base UI can keep its subscribers memoized (the `value as string` cast was pure overhead — Base UI already provides the value).
345
+ - Type the item components against `HTMLElement` and drop the four `ref as React.Ref<HTMLElement>` casts, restoring ref type-safety.
346
+ - Enforce `closeOnClick` defaults (`Menu.Item` `true`, `Menu.RadioItem` / `Menu.CheckboxItem` `false`) in the components so the documented defaults are authoritative rather than inherited.
347
+ - Add an `onSelect` activation alias to `Menu.Item`, `Menu.RadioItem` and `Menu.CheckboxItem` (runs alongside `onClick` via one stable handler).
348
+ - Expose an imperative `ref` handle (`MenuHandle`) on the `Menu` / `ContextMenu` root with a `close()` method.
349
+ - Add a `render` prop to `ContextMenu.Trigger` so the trigger can render as your own element instead of a `display: contents` wrapper.
350
+ - Animate the popup on open/close (opacity + scale via Base UI's `data-starting-style` / `data-ending-style`).
351
+ - Render `Menu.Group` labels with typography on the label element itself, removing the extra `Text` wrapper.
352
+ - Wrap the row components (`Item`, `RadioItem`, `CheckboxItem`, `SubTrigger`, `Separator`) in `React.memo` to avoid re-rendering every row when the parent re-renders.
353
+ - Document why `ContextMenu.Content` exposes no `side` / `align` / `sideOffset` (it anchors to the pointer), and add integration tests that exercise the real Base UI primitives.
354
+
355
+ - [#76](https://github.com/SebastianWebdev/entangle-ui/pull/76) [`676658b`](https://github.com/SebastianWebdev/entangle-ui/commit/676658b4e9b06a754ac24aff9ffdc446dc6b5b90) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - Add `Minimap` component — shared navigation widget for editor viewports (NodeGraph, Timeline, custom 2D editor surfaces).
356
+
357
+ **Core primitive (`<Minimap>`)** — fully controlled:
358
+ - Controlled API: pass `items`, `worldBounds`, current `transform`, and `viewportSize` from your `<Viewport>`; translate `onNavigate.worldPoint` into a `viewport.centerOn(...)` call.
359
+ - Item shapes: `rect`, `circle`, `line`, plus `custom` for caller-drawn shapes (each with per-item color and hover hit-testing).
360
+ - Aspect-driven sizing: explicit `width`, height auto-derived from `worldBounds` aspect ratio and clamped — wide-thin bounds give a Timeline strip, square bounds give a NodeGraph box.
361
+ - Three pointer gestures (click, drag from empty, drag the rect) + tab-focusable keyboard navigation with arrow keys (Shift × 5 step). Each gesture independently toggleable.
362
+ - Single `onNavigate` callback with phase metadata (`'click' | 'drag-start' | 'drag' | 'drag-end'`) — enough to drive undo groups, smooth-follow, or analytics without multiple handlers.
363
+ - `renderOverlay(ctx, info)` escape hatch for global canvas annotations (playheads, selection regions, debug markers) drawn after items and before the viewport-rect shroud.
364
+
365
+ **Slot subcomponents** for chrome around the canvas body:
366
+ - `<Minimap.Title>` — `'top-outside'` or `'top-inside'` placement.
367
+ - `<Minimap.Footer>` — `'bottom-outside'` or `'bottom-inside'` placement.
368
+ - `<Minimap.Corner side="…">` — anchored in any of the four corners.
369
+
370
+ Non-marker children render as a free-form absolute overlay above the canvas. All children have access to live state via `useMinimapContext()` — exposes hover world point, hovered item id, transform, drag state — enabling coordinate readouts, zoom chips, tooltips with built-in hit-testing.
371
+
372
+ **Compound `<ViewportMinimap>`** — drop-in inside a `<Viewport>`:
373
+ - Reads live `transform` / `size` from `useViewportContext()`.
374
+ - Default `onNavigate` wires to the viewport handle's `centerOn`.
375
+ - `placement` accepts four corner presets or a custom anchor object.
376
+ - `responsive` prop tracks wrapper width via `ResizeObserver`.
377
+ - Recognized by `<Viewport>` as an overlay slot — no explicit `<ViewportOverlay>` wrapper needed.
378
+
379
+ **Helpers exported**:
380
+ - `computeBoundsFromItems(items, padding?)` — tight bbox of an items array.
381
+ - `useMinimapContext()` — children of `<Minimap>` read live state without re-implementing hit-testing.
382
+
383
+ Plus a comprehensive docs page with interactive demo composing all of the above.
384
+
385
+ - [#79](https://github.com/SebastianWebdev/entangle-ui/pull/79) [`64cc7a0`](https://github.com/SebastianWebdev/entangle-ui/commit/64cc7a06ddbb57b12d0ae9bc28677ada627c4f85) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - Add `NodeGraph` component — flagship data-driven node editor surface for building visual programming, signal processing, shader, ML pipeline, and similar interactive graph UIs. Composes the `Viewport` primitive for pan/zoom plus perf-isolated canvas layers, and `Minimap` for the optional overview slot.
386
+
387
+ **Core component (`<NodeGraph>`)** — fully controlled or uncontrolled across four data dimensions:
388
+ - `nodes`, `edges`, `groups`, and `selection` each emit the full next array via dedicated `onXChange` callbacks — no patches, no reducers, plain-`useState` compatible.
389
+ - HTML node bodies positioned in world space via `renderNode(node, ctx)`. The render context exposes `selected`, `dragging`, `hovered`, and the current `zoom` for LOD swaps.
390
+ - Bézier edges drawn on a perf-isolated canvas layer with control points oriented by port side. Each port resolves its position evenly across its side when no explicit `offset` is set.
391
+ - Marquee selection on empty drag, click selects, Shift/Cmd/Ctrl + click toggles, marquee with the additive modifier unions.
392
+ - Drag-to-move (single + multi). The clicked node defines the drag set: if it's in the current selection, all selected nodes move together; otherwise just the clicked node. Optional `snapToGrid={N}` snaps drag deltas and keyboard nudges to a world-unit grid.
393
+ - Connection drag from a port: live preview Bézier follows the cursor, candidates highlight, `isValidConnection(source, target, info)` rejects invalid drops (preview goes dashed + red). Default policy refuses same-node connections when no validator is supplied.
394
+ - `onContextMenu(info)` emits a discriminated `target` (`node` / `edge` / `port` / `group` / `empty`) plus screen / world points — drop in any popover or Menu component as the consumer prefers.
395
+ - Visual `groups` rendered as backdrop rectangles with optional labels under nodes and edges.
396
+
397
+ **Keyboard** — tab-focusable surface with:
398
+
399
+ | Keys | Action |
400
+ | ---------------------- | ---------------------------------------------------- |
401
+ | `←` `↑` `↓` `→` | Nudge selected nodes by 1 grid step (or 1 unit) |
402
+ | `Shift` + arrows | Nudge by 10× step |
403
+ | `Delete` / `Backspace` | Emit `onDelete(selection)` |
404
+ | `Enter` | Emit `onActivate(node)` for a single selection |
405
+ | `Cmd/Ctrl + A` | Select all nodes |
406
+ | `Esc` | Cancel an in-flight connection, else clear selection |
407
+
408
+ Focus inside editable descendants (`<input>`, `<textarea>`, `contentEditable`) bypasses the graph handler so typing in custom node bodies works as expected.
409
+
410
+ **Slot subcomponents** identified by a unique Symbol marker (`NODE_GRAPH_SLOT`) so they survive `React.memo`, HOCs, and minification:
411
+ - `<NodeGraph.Background variant="dots" | "grid" gap={...} />` — adaptive background canvas layer.
412
+ - `<NodeGraph.Minimap placement={...} width={...} title={...} />` — pre-wired overview, mirrors nodes into rect items, wires `centerOn` automatically.
413
+
414
+ **Imperative handle** (`NodeGraphHandle`):
415
+ - `fitToContent(padding?)`, `fitToSelection(padding?)`, `focusNode(id)`
416
+ - Viewport delegation: `centerOn`, `zoomToRect`, `getTransform`, `getSize`, `worldToScreen`, `screenToWorld`, `invalidate(layerName?)`
417
+
418
+ **Slice subscription hooks** for advanced consumers inside the `<NodeGraph>` subtree — `useNodeGraphData`, `useNodeGraphSelection`, `useNodeGraphInteraction`, `useNodeGraphHover`, and the raw `useNodeGraphStore` escape hatch. Hot-path state (drag deltas, connection preview, hover, marquee) lives in a class-based store consumed via `useSyncExternalStore` with shallow-equal no-op guards — each node body only re-renders when its own state changes, and canvas layers are invalidated independently per slice.
419
+
420
+ **Helpers exported**:
421
+ - `computeNodeGraphBounds`, `getNodeBox`, `getPortPosition`, `getBezierControlPoints`, `evaluateBezier`, `isPointNearBezier`, `resolvePortRef`, `resolveEdgeEndpoints`, `sideVector`, `snapDelta` — the same math used internally.
422
+
423
+ Ships with a comprehensive docs page including a multi-node signal-processing demo, the data model, connection validation recipes, slot integrations, keyboard shortcuts, and the full props table.
424
+
425
+ - [#79](https://github.com/SebastianWebdev/entangle-ui/pull/79) [`64cc7a0`](https://github.com/SebastianWebdev/entangle-ui/commit/64cc7a06ddbb57b12d0ae9bc28677ada627c4f85) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - Add out-of-the-box defaults and ergonomics helpers for `NodeGraph`, so consumers stop re-implementing the same boilerplate the demo used to carry.
426
+
427
+ **Typed port handles + auto-connected state** — `<NodeGraph.Port>` now renders a built-in handle from `shape` (`'circle' | 'triangle' | 'diamond' | 'square'`) and `color` props when no `children` are supplied, so the common "coloured ring for data pins, exec arrow for flow pins" no longer needs a hand-rolled SVG. The handle fills automatically while the port is referenced by an edge (the library derives the connected set in the store and exposes it via `data-port-connected`), removing the consumer-side "which ports are wired" index. The shape is also exported standalone as `<NodeGraph.PortVisual>`.
428
+
429
+ **`<NodeGraph.Pin>`** — a one-liner for the ubiquitous "handle + label" row. Renders a `<NodeGraph.PinRow>` containing a `<NodeGraph.Port>` and a label, ordered so the handle hugs the node edge (port → label on the left, label → port on the right). `<NodeGraph.PinRow>` + `<NodeGraph.Port>` remain available for custom layouts.
430
+
431
+ **`useNodeGraph()`** — owns nodes / edges / groups / selection plus the mutations every editor re-implements: `addNode`, `connect` (de-duped), `removeNodes` / `removeSelection` (with edge cascade + selection pruning), `duplicateNodes`, `addGroup`, `removeGroups`, `clearSelection`. Spread the returned `bind` onto `<NodeGraph>` to wire all four controlled props at once. Uncontrolled by design; for external stores keep wiring the `onChange` props yourself. The pure helpers `duplicateNodes(nodes, ids)`, `generateNodeId`, and `generateEdgeId` are now exported too.
432
+
433
+ **`createTypeMatchValidator()`** — a factory for the common `isValidConnection` rule (match `dataType`, in an allowed direction, with a configurable `anyType` wildcard and `allowSameNode`). Override `match` for richer subtype rules.
434
+
435
+ The Blueprint demo now uses all four, dropping its hand-rolled pin visual, connected-ports `useMemo`, manual delete/duplicate handlers, and four `useState` calls.
436
+
437
+ - [#79](https://github.com/SebastianWebdev/entangle-ui/pull/79) [`64cc7a0`](https://github.com/SebastianWebdev/entangle-ui/commit/64cc7a06ddbb57b12d0ae9bc28677ada627c4f85) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - Round out `NodeGraph` interaction and node-authoring ergonomics, from a second pass over the demo's friction.
438
+
439
+ **Interactive edges** — edges are drawn on a canvas, so they used to be inert. They now hit-test against the pointer: hovering paints the hover accent (`useNodeGraphHover().hoveredEdgeId`), clicking selects the edge, and right-clicking reports a `{ kind: 'edge' }` target via `onContextMenu`. A selected edge is removed by Delete like any other selection. Adds the `findEdgeAtPoint` helper and a `removeEdges` action on `useNodeGraph`.
440
+
441
+ **Reconnect & detach** — grab an existing edge near one of its endpoints and drag it: drop on a valid port to move that endpoint, or drop on empty space to detach (delete) the edge. The fixed end stays anchored and the dragged end runs through `isValidConnection`; the edge being re-dragged is hidden from the edge layer so only the preview shows. A click on an endpoint (no drag) selects the edge instead, so a click never deletes a wire. Built in — no new props.
442
+
443
+ **Colourable minimap mini-nodes** — `<NodeGraph.Minimap>` gains a `nodeStyle` prop. Return `{ color }` to tint a node's rect, or `{ color, headerColor }` to draw a two-tone "header strip + body" mini-node that mirrors the real node at a glance. Selection tint still wins.
444
+
445
+ **Collapsible node sections** — `<NodeGraph.NodeSection>` is a collapsible section inside a node body for hiding advanced / overflow pins. The collapse is purely visual: children never unmount (state preserved, no remount cost), and `<NodeGraph.Port>` slots inside a collapsed section unregister their position so the pins' edges hide with them and snap back on expand — no dangling wires. Controlled or uncontrolled (`collapsed` / `defaultCollapsed` / `onCollapsedChange`); `collapsible={false}` gives a static labelled group.
446
+
447
+ - [#79](https://github.com/SebastianWebdev/entangle-ui/pull/79) [`64cc7a0`](https://github.com/SebastianWebdev/entangle-ui/commit/64cc7a06ddbb57b12d0ae9bc28677ada627c4f85) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - **Breaking:** redesign `NodeGraph` port API to slot-based composition.
448
+
449
+ Connection endpoints are now declared inline inside the node body via a new
450
+ `<NodeGraph.Port>` compound, not as a data field on the node. The library
451
+ measures the slot's DOM position and registers it as the anchor for any
452
+ edge that references the port id — the same DOM element the user clicks
453
+ is the exact point edges connect to, eliminating the previous "fake label
454
+ dot + outer port handle" double rendering.
455
+
456
+ **New**
457
+ - `<NodeGraph.Port id side dataType>` — slot rendered anywhere inside
458
+ `renderNode`. Mounts an inline `<span>` (default UE-style 12 px circle
459
+ / exec triangle), measures its center on mount + every layout shift,
460
+ feeds the position to the store, and wires connection-drag pointer
461
+ events. Pass `children` to replace the default chrome — `data-port-*`
462
+ attributes carry the live state (`source` / `candidate` / `invalid` /
463
+ `hovered`) for consumer CSS.
464
+ - Hover state is now actually wired: `<NodeGraph.Port>` emits
465
+ `hoveredPort` on enter/leave; `NodeGraphNodeView` emits `hoveredNodeId`.
466
+ Previously these fields existed on `NodeGraphHoverState` but no code
467
+ dispatched them, so `ctx.hovered` / `ctx.isHovered` were always
468
+ `false`.
469
+ - Node auto-sizing: when `node.width`/`height` are omitted, the library
470
+ reads the rendered DOM size for hit-testing, marquee, fitToContent,
471
+ and minimap geometry. Override per-node by setting `width`/`height`
472
+ explicitly.
473
+ - `NodeGraphConnectionValidationInfo` now exposes `sourceDataType` and
474
+ `targetDataType` populated from the registered slot metadata — no
475
+ consumer-side port index needed for type-matched validation.
476
+ - `NodeGraphStore` adds two new slices with subscribe/get APIs:
477
+ `portPositions` (`getPortPosition`, `setPortPosition`,
478
+ `removePortPosition`, `subscribePortPositions`) and `measuredSizes`
479
+ (`getMeasuredSize`, `setMeasuredSize`, `clearMeasuredSize`,
480
+ `subscribeMeasuredSizes`). Both auto-GC on `setData` when the
481
+ corresponding node is removed.
482
+
483
+ **Removed**
484
+ - `NodeGraphNode.ports` field. Declare ports as `<NodeGraph.Port>`
485
+ children inside `renderNode` instead.
486
+ - `NodeGraphPort` type, `NodeGraphRenderPort`, `NodeGraphPortRenderCtx`,
487
+ and the `renderPort` prop. Replaced by the slot — `children` of
488
+ `<NodeGraph.Port>` are the consumer-supplied visual.
489
+ - `resolvePortOffsets` and the offset-based `getPortPosition` math
490
+ helpers. Port positions are now DOM-measured.
491
+
492
+ **Migration**
493
+
494
+ ```diff
495
+ - const nodes = [{
496
+ - id: 'a', position: { x: 0, y: 0 },
497
+ - ports: [
498
+ - { id: 'in', side: 'left', dataType: 'exec', offset: 0.3 },
499
+ - { id: 'out', side: 'right', dataType: 'float' },
500
+ - ],
501
+ - }];
502
+
503
+ - <NodeGraph
504
+ - nodes={nodes}
505
+ - renderPort={(port, node, ctx) => <MyPin port={port} ctx={ctx} />}
506
+ - />
507
+
508
+ + const nodes = [{ id: 'a', position: { x: 0, y: 0 } }];
509
+
510
+ + <NodeGraph
511
+ + nodes={nodes}
512
+ + renderNode={(node, ctx) => (
513
+ + <MyBody>
514
+ + <Row>
515
+ + <NodeGraph.Port id="in" side="left" dataType="exec" />
516
+ + Execute
517
+ + </Row>
518
+ + <Row reverse>
519
+ + Result
520
+ + <NodeGraph.Port id="out" side="right" dataType="float" />
521
+ + </Row>
522
+ + </MyBody>
523
+ + )}
524
+ + />
525
+ ```
526
+
527
+ `NodeGraphEdge` shape is unchanged (`{ id, source: { node, port }, target }`).
528
+
529
+ - [#79](https://github.com/SebastianWebdev/entangle-ui/pull/79) [`64cc7a0`](https://github.com/SebastianWebdev/entangle-ui/commit/64cc7a06ddbb57b12d0ae9bc28677ada627c4f85) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - `NodeGraph` socket-level edge actions and a drop point on the connection event.
530
+
531
+ **Socket actions** — right-clicking a port already reported a `{ kind: 'port' }` context target; now there are batch helpers to act on a socket's wires: a pure `edgesConnectedToPort(edges, ref)` (ids of every edge on a socket) and a `disconnectPort(node, port)` action on `useNodeGraph` (detach them all, pruning the selection). The demo gives sockets a "Select connected edges" context menu.
532
+
533
+ **Drop point on `onConnectEnd`** — the event now carries `worldPoint` and `screenPoint` (the release position). A drop on empty space (`cancelled` + `target === null`) is the hook for the classic "drag a wire onto the canvas → open a create-node menu there → wire the new node straight up" flow; the consumer positions the menu at `screenPoint`, spawns at `worldPoint`, and `connect`s to `source`. The demo wires this end to end.
534
+
535
+ - [#94](https://github.com/SebastianWebdev/entangle-ui/pull/94) [`eb35203`](https://github.com/SebastianWebdev/entangle-ui/commit/eb35203d7bb00a85ca0fb7d32b35339411250320) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - Add the `PathBar` flagship component — file-path breadcrumbs like the VS Code
536
+ editor bar. It specializes `Breadcrumbs`: pass a delimited string or a
537
+ structured `PathSegment[]` and it renders clickable segments, leaning on
538
+ Breadcrumbs for separators, overflow collapsing, and accessibility. Folder
539
+ crumbs navigate via `onNavigate(path, segment, index)` and the final segment is
540
+ the current location (`aria-current`). The current path is controllable
541
+ (`value` / `defaultValue`); uncontrolled, clicking an ancestor truncates the
542
+ trail. Provide `getSiblings` to add a VS-Code-style dropdown that swaps a
543
+ segment for one of its siblings, plus `rootIcon`, per-segment icons, and a
544
+ `delimiter` for non-`/` paths. Path splitting/joining lives in a pure,
545
+ unit-tested `pathUtils` module.
546
+
547
+ Extend `BreadcrumbItem` with an `endContent` slot — content rendered after the
548
+ label, outside the navigable link/button, so a trailing affordance (such as
549
+ PathBar's sibling-dropdown caret) can attach without breaking the crumb's
550
+ click target or the Breadcrumbs collapse logic.
551
+
552
+ - [#84](https://github.com/SebastianWebdev/entangle-ui/pull/84) [`6683aa6`](https://github.com/SebastianWebdev/entangle-ui/commit/6683aa69850d269fad2af638a813f5c9049fc1a7) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - Add the `Timeline` flagship component — a horizontal, multi-track animation timeline / dope sheet for editor UIs.
553
+ - Frame-based time axis with an `fps`-driven `HH:MM:SS:FF` ruler and snap-to-frame. `frame` (playhead), `view` (zoom/pan window), `selection`, `mode`, and `playing` are each controlled or uncontrolled.
554
+ - Tracks hold keyframes using the shared `CurveKeyframe` model — promoted to `@/types/keyframe` and re-exported from `CurveEditor` unchanged — so Timeline and CurveEditor speak the same language.
555
+ - Canvas-rendered keyframes with DOM chrome, drawn from a per-slice `useSyncExternalStore` store with the theme resolved per frame.
556
+ - Interactions: scrub (ruler/playhead drag + click), wheel zoom-at-cursor, shift-wheel / middle-drag pan, click / shift-click / box-select, drag-move (snapped + clamped), double-click add, Delete remove, copy/paste (Ctrl/Cmd + C / V at the playhead), and arrow / Home / End keyboard scrubbing.
557
+ - Dope-sheet and graph (value-curve) modes; graph mode reuses CurveEditor's curve evaluation and edits keyframes in both time and value, with draggable bezier tangent handles. Individual tracks can expand to an in-place graph lane (`track.expanded`) without leaving the dope sheet.
558
+ - Collapsible track groups (a flat `groupId` on tracks + a controlled/uncontrolled `groups` prop), header-drag track reorder, vertical scrolling for overflowing tracks, and a draggable loop region (edges + body).
559
+ - Optional built-in playback loop (rAF advancing `frame` at `fps`, with `loop`), driven via the imperative handle (`seek` / `play` / `pause` / `toggle` / `zoomToFit` / `zoomToSelection` / `frameToX` / `xToFrame`).
560
+ - Data-driven track-header column with a `renderTrackHeader` override, `Timeline.Toolbar` / `Timeline.Footer` slots, a `renderOverlay` canvas pass, and an accessibility baseline (focusable `role="group"`, keyboard equivalents, polite live region).
561
+ - Also exports `framesToTimecode`, the `TimelineGroup` type, and the `useTimelineContext` / `useTimelineGeometry` / `useTimelinePlayhead` / `useTimelineSelection` hooks.
562
+
563
+ - [#84](https://github.com/SebastianWebdev/entangle-ui/pull/84) [`6683aa6`](https://github.com/SebastianWebdev/entangle-ui/commit/6683aa69850d269fad2af638a813f5c9049fc1a7) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - Refactor `Timeline` for React 19.2 — performance, dead-code cleanup, API tweaks.
564
+ - Bump peer `react` / `react-dom` to `>=19.2.0`. Internal `useLatest`-ref swarms in `useTimelineGestures`, `useTimelinePlayback`, `useTimelineDraw` (new) and `TimelineMinimap` are replaced with `useEffectEvent`. Handler identities are stable for the component's lifetime; the rAF playback loop now only re-runs when `playing` flips.
565
+ - `TimelineMinimap` subscribes to the geometry + playhead slices instead of the full `useTimelineContext()` snapshot, so it stops re-rendering on unrelated store changes (selection / hover / drag / mode).
566
+ - Consolidate keyframe-key helpers into one `timelineSelection` module (`selectionKey` / `selectionKeySet` / `sameRef`) — removes three near-duplicate implementations across `Timeline`, `timelineEdits`, and `TimelineStore`.
567
+ - Cache each track's resolved value range on `TrackGeometry` / `TimelineTrackRow` (`row.range`) so drawing, hit-testing and graph-mode edits stop recomputing `autoValueRange` per call.
568
+ - Extract `useTimelineDraw` from `Timeline.tsx` — encapsulates canvas DPR setup, theme-token resolution and the scheduled draw, and reads consumer `renderOverlay` / `formatTime` through `useEffectEvent` so inline functions no longer invalidate the schedule.
569
+ - Drop dead exports: `framesPerPixel`, `trackTop`, `yToTrackIndex` (`timelineCoords`), `rowIndexAtY` (`timelineLayout`), and the unimplemented `minKeyframeDistance` prop on `TimelineProps`.
570
+ - Replace `Math.hypot` in the hit-test hot path with squared-distance comparisons; replace `Math.min(...spread)` in copy with a reduce loop; rewrite `zoomToSelection` to walk the selection (O(|selection|)) instead of every keyframe in every track.
571
+ - New `trackScale` prop on `<Timeline>` — pass `{ position, format, showMidpoint, gridlines, color }` directly. The `<Timeline.TrackScale />` slot still works as a deprecated alias; the new prop wins when both are provided.
572
+
573
+ - [#85](https://github.com/SebastianWebdev/entangle-ui/pull/85) [`9eabab7`](https://github.com/SebastianWebdev/entangle-ui/commit/9eabab77e2a1dc95a6c4a66cbf556a68b1365ff1) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - Add `useNavigationHistory<T>` — a generic back/forward stack primitive backed
574
+ by `useSyncExternalStore`. Tracks a concurrent-safe cursor over an arbitrary
575
+ entry type, exposes `canGoBack` / `canGoForward` flags, mirrors browser
576
+ semantics (push truncates the forward branch), and supports an `enabled`
577
+ toggle for opt-in history UIs. `AssetBrowser`'s `history` feature is now
578
+ composed on top of it through an internal `useAssetNavigation` hook that
579
+ encapsulates the parent-folder keyboard shortcut and the `onNavigate` /
580
+ `onItemOpen` plumbing.
581
+
582
+ - [#73](https://github.com/SebastianWebdev/entangle-ui/pull/73) [`9dd25ae`](https://github.com/SebastianWebdev/entangle-ui/commit/9dd25ae9821cd943025f90a9c1b9bc751cd7329c) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - Add `Viewport` primitive — pan/zoom canvas + HTML container for editor-style surfaces (node graphs, timelines, 2D world editors).
583
+ - `Viewport` with controlled/uncontrolled transform (`{ x, y, zoom }`), configurable pan (button + space-key), wheel/pinch zoom-toward-cursor, and optional marquee selection.
584
+ - `ViewportLayer` — perf-isolated canvas layers with per-layer `invalidateOn` deps and `handle.invalidate(name)`.
585
+ - `ViewportWorld` — HTML children positioned in world coordinates (follow pan/zoom).
586
+ - `ViewportOverlay` — HTML children pinned to the viewport (toolbars, minimap slot).
587
+ - `useViewportContext()` for live `transform` / `size` / `handle` access from any child.
588
+ - Imperative `ViewportHandle` — `fitToContent`, `zoomToRect`, `centerOn`, `getTransform`, `getSize`, `invalidate`.
589
+ - Pure helpers: `worldToScreen`, `screenToWorld`, `getViewportPointerPosition`, `computeFitTransform`, `computeCenterTransform`, `computeZoomTowardPivot`, `normalizeRect`.
590
+ - Pan lifecycle events (`onPanStart`, `onPanEnd` with end velocity) and zoom lifecycle events for inertia/idle recipes.
591
+ - Docs include recipes for snap-to-zoom, minimap, and inertia on top of the v1 surface.
592
+
593
+ ### Patch Changes
594
+
595
+ - [#85](https://github.com/SebastianWebdev/entangle-ui/pull/85) [`9eabab7`](https://github.com/SebastianWebdev/entangle-ui/commit/9eabab77e2a1dc95a6c4a66cbf556a68b1365ff1) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - Refactor `AssetBrowser` internals into focused hooks and subcomponents. The
596
+ root file goes from ~470 → ~370 lines and the grid from ~300 → ~225, with no
597
+ public API changes:
598
+ - `useAssetMarqueeGesture` — pointer-down/move/up + RAF throttling + hit-test
599
+ for rubber-band selection (lifted out of `AssetBrowserGrid`).
600
+ - `useAssetBrowserViewState` — owns the five `useControlledState` pairs plus
601
+ derived `displayed` / `filterableTypes` / `thumbnailSizePx` / `marqueeEnabled`.
602
+ - `useAssetBrowserHandle` — wires `useImperativeHandle` and folds in the
603
+ `scrollToItem` fallback logic.
604
+ - `AssetBrowserContent` — loading / empty / grid / list switch.
605
+ - `AssetBrowserStatusBar` — the optional bottom bar with the thumbnail-size
606
+ control.
607
+ - `DEFAULT_LIST_COLUMNS` is now a module-level constant in `AssetBrowserList`
608
+ instead of a function rebuilt inside `useMemo`.
609
+
610
+ - [#85](https://github.com/SebastianWebdev/entangle-ui/pull/85) [`9eabab7`](https://github.com/SebastianWebdev/entangle-ui/commit/9eabab77e2a1dc95a6c4a66cbf556a68b1365ff1) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - Refine the `AssetBrowser` component. Live selection, roving focus, and
611
+ drop-target state now flow through per-id store slices, so selecting an item or
612
+ moving focus re-renders only the affected cells instead of the whole grid, and
613
+ search/sort/filter chrome no longer re-renders cells on every keystroke. Wire up
614
+ the previously inert `marquee` and `history` props (Back/Forward controls plus
615
+ `Backspace` / `Alt+ArrowUp` to navigate to the parent folder), keep grid cells
616
+ interactive when a custom `renderItem` is supplied, make `scrollToItem` work
617
+ under virtualization, track shift-range anchors by id so ranges survive a
618
+ re-sort, and honour `prefers-reduced-motion`.
619
+
620
+ - [#85](https://github.com/SebastianWebdev/entangle-ui/pull/85) [`9eabab7`](https://github.com/SebastianWebdev/entangle-ui/commit/9eabab77e2a1dc95a6c4a66cbf556a68b1365ff1) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - AssetBrowser: conform to the hardened ESLint setup (react-hooks v7,
621
+ strict-type-checked, import-x, jsx-a11y) introduced in #87.
622
+ - The selection, navigation, drag-and-drop, marquee, grid-keyboard and
623
+ imperative-handle hooks built their stable handlers with `useEffectEvent`
624
+ and then returned them / listed them in dependency arrays — both forbidden
625
+ by the Compiler-aware rule set. They now read live props/state through
626
+ `useLatest` refs and expose genuinely stable `useCallback`s, matching
627
+ `component-patterns.md` rules #3/#11 and the Timeline migration.
628
+ - Removed the `useStableRenderFn` helper: its render-phase ref write violated
629
+ `react-hooks/refs`. Render-props are forwarded through the item context as-is
630
+ (memoize them, like `TreeView`, to avoid per-cell re-renders).
631
+ - The root carries `role="region"` and grid cells keep `role="gridcell"`;
632
+ keyboard interaction stays centralized at the grid level.
633
+
634
+ No public API or behavior change.
635
+
636
+ - [#87](https://github.com/SebastianWebdev/entangle-ui/pull/87) [`9445dfc`](https://github.com/SebastianWebdev/entangle-ui/commit/9445dfc6689baceed1c552579cd0eebed0427619) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - ESLint hardening across the library and the correctness fixes it surfaced.
637
+
638
+ Tooling: enabled `eslint-plugin-react-hooks` v7 (full Compiler-aware
639
+ `recommended`), `typescript-eslint` `strict-type-checked`,
640
+ `eslint-plugin-import-x` (no-cycle, order, no-duplicates, type-specifier
641
+ style), `eslint-plugin-jsx-a11y`, and enforcement of the mandated `@/` import
642
+ alias. `restrict-template-expressions` is tuned with `allowNumber: true`. Rules
643
+ apply to `src` only; test files keep the prior type-checked baseline. See
644
+ `docs/component-patterns.md` §14.
645
+
646
+ Behavior-affecting fixes (no public API changes):
647
+ - Refs read during render are now reactive state, so values driven by them
648
+ update correctly: `ScrollArea` scrollbar `aria-valuenow` and thumb dragging
649
+ state, `CartesianPicker` / `ViewportGizmo` / `CurveEditor` `isDragging`,
650
+ `Combobox` filtering while editing, `MenuBar` registered-menu tracking, and
651
+ `useListboxNav` navigable indices.
652
+ - `Tooltip` no longer mutates the caller-provided `rootProps` object.
653
+ - Accessibility: interactive elements that had only pointer handlers now expose
654
+ keyboard handlers, focusability, and valid ARIA across controls, editor,
655
+ navigation, feedback, layout, and primitive components.
656
+ - Removed dead conditional branches and redundant optional chaining flagged by
657
+ `no-unnecessary-condition`, and replaced deprecated APIs.
658
+
659
+ - [#87](https://github.com/SebastianWebdev/entangle-ui/pull/87) [`9445dfc`](https://github.com/SebastianWebdev/entangle-ui/commit/9445dfc6689baceed1c552579cd0eebed0427619) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - Fix ViewportGizmo z-up rendering and FloatingPanel positioning.
660
+ - **ViewportGizmo `upAxis="z-up"`** now actually renders the z-up convention
661
+ (Blender/Unreal/CAD): the Z arm points up and Y points into the scene.
662
+ Previously `upAxis` only affected which preset view an axis click snapped to,
663
+ so `y-up` and `z-up` looked identical.
664
+ - **FloatingPanel** is now positioned `absolute` within its `FloatingManager`
665
+ region instead of `fixed` to the viewport. `FloatingManager` renders a
666
+ relative, full-size, pointer-events-pass-through container, and dragging is
667
+ delta-based and clamped to that container. This fixes panels from multiple
668
+ managers stacking at the same viewport coordinates and escaping their
669
+ container.
670
+
671
+ - [#92](https://github.com/SebastianWebdev/entangle-ui/pull/92) [`98cbbfd`](https://github.com/SebastianWebdev/entangle-ui/commit/98cbbfdb9fa2658568822ef8a49a0f409ccb40f4) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - LogView: align the message text into a fixed gutter. The timestamp, level
672
+ icon, and source tag render as fixed-width columns so the message starts at the
673
+ same x on every row instead of shifting with the source-tag width — it reads
674
+ like a table / terminal log.
675
+
676
+ A column is only reserved when its field is actually present in the data: if
677
+ nothing has a timestamp or source there is no column at all (the message sits
678
+ right after the icon, as before), but once at least one entry uses the field
679
+ every row reserves it — including rows that omit it — so they stay aligned. The
680
+ timestamp and source column widths default to `88px` and `52px` and are
681
+ overridable via the `--etui-logview-timestamp-col-width` /
682
+ `--etui-logview-source-col-width` CSS custom properties on the root.
683
+
684
+ - [#92](https://github.com/SebastianWebdev/entangle-ui/pull/92) [`98cbbfd`](https://github.com/SebastianWebdev/entangle-ui/commit/98cbbfdb9fa2658568822ef8a49a0f409ccb40f4) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - LogView code-review fixes:
685
+ - **Stable auto-assigned ids.** Id-less entries now keep their key across a
686
+ controlled `entries` re-mirror — the store caches an id per entry object
687
+ instead of minting a fresh monotonic id on every `setEntries`. Rows no longer
688
+ remount and id-based selection survives updates. Removed the unused `seq`
689
+ field from `ResolvedLogEntry`.
690
+ - **Levels added at runtime are visible by default.** Visibility is tracked as
691
+ the set of _hidden_ levels, so a level introduced later via `levelConfig`
692
+ shows up active, while an explicit toggle-off persists across `levelOrder`
693
+ changes.
694
+ - **Cheaper rows.** Per-level definitions are resolved through a memoized cache
695
+ so the memoized `LogRow` is no longer invalidated by a fresh definition object
696
+ each render.
697
+ - **Scoped text-selection guard.** A row click / copy shortcut is only
698
+ suppressed by a text selection inside the log body, not one elsewhere on the
699
+ page.
700
+ - **Internal cleanup.** Row selection + keyboard handling moved into a
701
+ `useLogSelection` hook; the shared recipe `level` variant is derived via a
702
+ single `levelVariant` helper.
703
+
704
+ - [#79](https://github.com/SebastianWebdev/entangle-ui/pull/79) [`64cc7a0`](https://github.com/SebastianWebdev/entangle-ui/commit/64cc7a06ddbb57b12d0ae9bc28677ada627c4f85) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - Fix `<NodeGraph.Minimap>` rendering off-screen. The slot applied `position: absolute` to the inner `<Minimap>`, but `ViewportMinimap` already pins it via its own absolutely-positioned wrapper. The duplicate positioning pulled the minimap out of the wrapper's flow, collapsing the wrapper to a zero-size box at the viewport's bottom-right corner and pushing the minimap off-screen. The slot class now only re-enables pointer events.
705
+
706
+ - [#79](https://github.com/SebastianWebdev/entangle-ui/pull/79) [`64cc7a0`](https://github.com/SebastianWebdev/entangle-ui/commit/64cc7a06ddbb57b12d0ae9bc28677ada627c4f85) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - `NodeGraph` internal performance + refactor pass (no public API change).
707
+
708
+ **Performance**
709
+ - Edge labels now subscribe to the interaction slice through a per-edge selector + equality (the same pattern node bodies use), so a drag only re-renders the labels whose endpoints actually move instead of every label on every gesture tick.
710
+ - Edge / group canvas layers build a `Set` of the selected ids once per frame instead of a linear `selection.includes` per item — the per-frame selected check is now O(1).
711
+ - Edge hit-testing (`findEdgeAtPoint`) rejects edges with a control-point bounding-box test before the 24-sample Bézier distance test, so hover / click / right-click stay cheap on large graphs.
712
+ - The background dots/grid pattern tile is cached across frames (keyed by size + radius + colour, bounded with FIFO eviction), so a pan no longer rebuilds an off-screen canvas every frame.
713
+
714
+ **Refactor**
715
+ - Extracted a shared `useDragGesture` primitive (pointer capture, document listener attach/detach, per-pointer guard, unmount cleanup) used by both the node-drag and group-drag controllers, removing the duplicated gesture lifecycle.
716
+ - Extracted edge hover + endpoint-grab handling out of `NodeGraph` into `useNodeGraphEdgeInteraction`.
717
+ - De-duplicated the additive-selection toggle (`toggleSelected`) across the node / group / edge click paths and the connection accept/reject check across the hover + both drop paths.
718
+
719
+ - [#84](https://github.com/SebastianWebdev/entangle-ui/pull/84) [`6683aa6`](https://github.com/SebastianWebdev/entangle-ui/commit/6683aa69850d269fad2af638a813f5c9049fc1a7) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - Timeline: replace `useEffectEvent` misuse with the `useLatest` + `useCallback`
720
+ pattern. Effect Events are only valid when called from inside an Effect; the
721
+ Timeline was using them as DOM/JSX event handlers and store callbacks, relying
722
+ on a stable identity that `useEffectEvent` does not guarantee (its identity
723
+ intentionally changes every render). Gesture handlers, the minimap pointer/draw
724
+ handlers, and the `Timeline` track/seek/zoom callbacks now read live state
725
+ through `useLatest` refs and expose genuinely stable `useCallback`s, matching
726
+ `component-patterns.md` rules #3/#11 and the `useViewportGestures` reference.
727
+ The playback rAF loop keeps `useEffectEvent` — the one place it is correct
728
+ (called only from inside the effect's timer). Also reuse the shared `clamp` and
729
+ `valueInset` helpers instead of duplicated inline math, and align the minimap
730
+ wrapper with the library's `cx` + `role="region"` conventions. No public API
731
+ change.
732
+
733
+ - [#84](https://github.com/SebastianWebdev/entangle-ui/pull/84) [`6683aa6`](https://github.com/SebastianWebdev/entangle-ui/commit/6683aa69850d269fad2af638a813f5c9049fc1a7) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - `Timeline`:
734
+ - The expand-track caret in the track-header column now shows in graph mode too. In dope-sheet mode it still expands the track into an in-place graph lane; in graph mode it just makes the lane taller (`expandedTrackHeight`), so you can spotlight one curve without leaving graph view.
735
+ - Alt + drag on the ruler creates / narrows the loop region (works even when looping was previously off — the drag turns it on). A bare Alt-click without dragging clears the loop. Existing loop-edge / body drags are unchanged.
736
+
737
+ - [#84](https://github.com/SebastianWebdev/entangle-ui/pull/84) [`6683aa6`](https://github.com/SebastianWebdev/entangle-ui/commit/6683aa69850d269fad2af638a813f5c9049fc1a7) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - `Timeline` — loop / playhead / track-scale UX fixes:
738
+ - The **playhead line is now grabbable along its whole height**. Previously a
739
+ grab landed as `group` over a group-header row and was swallowed by the
740
+ `loop-body` region on the ruler; the hit-test now returns `playhead` on its
741
+ thin pick band over group rows and on the ruler (it beats the wide loop body,
742
+ while loop edges still win). The head also glows + shows an `ew-resize`
743
+ cursor on hover there.
744
+ - **Loop region edges and body highlight on hover** — the hovered edge thickens
745
+ with a glow (cursor `ew-resize`), the body brightens (cursor `grab`), so the
746
+ draggable affordances are discoverable. Backed by a new `hoverLoop` store
747
+ slice. Alt+drag on the ruler keeps creating / re-drawing the loop (now also
748
+ when the drag starts on the playhead line).
749
+ - `trackScale` gains **`minLaneHeight`** (default `48`): lanes shorter than this
750
+ skip the scale entirely, so a collapsed graph-mode track no longer renders
751
+ overlapping min/mid/max labels.
752
+
753
+ - [#84](https://github.com/SebastianWebdev/entangle-ui/pull/84) [`6683aa6`](https://github.com/SebastianWebdev/entangle-ui/commit/6683aa69850d269fad2af638a813f5c9049fc1a7) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - `Timeline` — two new opt-in props that tune the loop region's chrome:
754
+ - **`loopStrip`** (default `false`) — adds a thin dedicated band directly
755
+ under the time ruler. A plain drag on the strip creates / re-draws the
756
+ loop region, no Alt needed. The main ruler keeps its scrub behaviour, so
757
+ scrub vs loop-create stop fighting on a single zone.
758
+ - **`loopHandles`** (default `'edges'`) — `'edges'` keeps the existing
759
+ full-height vertical bars on each loop edge; `'brackets'` draws compact
760
+ `[ ]` markers with serifs in the chrome (ruler + strip) area instead. No
761
+ full-height bars across the track area, and the edge pick zone widens so
762
+ the markers are easier to grab.
763
+
764
+ Both compose: the Animation Editor showcase enables them together. Drawing
765
+ and hit-test now resolve a unified `chromeHeight = rulerHeight +
766
+ loopStripHeight` so screen↔content Y conversions stay correct for marquee
767
+ selection, double-click add, tangent drags and scrolling.
768
+
3
769
  ## 0.9.0
4
770
 
5
771
  ### Minor Changes