entangle-ui 0.8.2 → 0.10.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 (1032) hide show
  1. package/CHANGELOG.md +771 -0
  2. package/README.md +1 -1
  3. package/dist/esm/assets/src/components/controls/Combobox/Combobox.css.ts.vanilla-B7B5ttkq.css +210 -0
  4. package/dist/esm/assets/src/components/controls/FileTree/FileTree.css.ts.vanilla-YmktPvnr.css +48 -0
  5. package/dist/esm/assets/src/components/controls/FileUploader/FileUploader.css.ts.vanilla-T4nRiI7s.css +194 -0
  6. package/dist/esm/assets/src/components/controls/MultiSelect/MultiSelect.css.ts.vanilla-CdYayqaF.css +311 -0
  7. package/dist/esm/assets/src/components/controls/TagInput/TagInput.css.ts.vanilla-hnkMOPp1.css +141 -0
  8. package/dist/esm/assets/src/components/controls/TreeView/{TreeNode.css.ts.vanilla-B_f8pUb8.css → TreeNode.css.ts.vanilla-DXPJRWZZ.css} +31 -24
  9. package/dist/esm/assets/src/components/data/DataTable/DataTable.css.ts.vanilla-CmRgtjIW.css +231 -0
  10. package/dist/esm/assets/src/components/editor/AssetBrowser/AssetBrowser.css.ts.vanilla-B2S4cEiY.css +262 -0
  11. package/dist/esm/assets/src/components/editor/Minimap/Minimap.css.ts.vanilla--rNdWQwy.css +133 -0
  12. package/dist/esm/assets/src/components/editor/NodeGraph/NodeGraph.css.ts.vanilla-ClF4YZvl.css +401 -0
  13. package/dist/esm/assets/src/components/editor/Timeline/Timeline.css.ts.vanilla-DDX6Zalo.css +203 -0
  14. package/dist/esm/assets/src/components/feedback/Alert/{Alert.css.ts.vanilla-CRAI-xHx.css → Alert.css.ts.vanilla-CfCDsIEg.css} +2 -0
  15. package/dist/esm/assets/src/components/feedback/CommandPalette/CommandPalette.css.ts.vanilla-DGdrLKYZ.css +160 -0
  16. package/dist/esm/assets/src/components/feedback/Drawer/Drawer.css.ts.vanilla-CLPTOUrA.css +247 -0
  17. package/dist/esm/assets/src/components/feedback/LogView/LogView.css.ts.vanilla-nB5ENOpw.css +312 -0
  18. package/dist/esm/assets/src/components/feedback/Skeleton/SkeletonLayout.css.ts.vanilla-Db7bpqiI.css +75 -0
  19. package/dist/esm/assets/src/components/feedback/Stat/Stat.css.ts.vanilla-GBk3JAMB.css +69 -0
  20. package/dist/esm/assets/src/components/layout/Card/Card.css.ts.vanilla-Ducn1gUX.css +124 -0
  21. package/dist/esm/assets/src/components/navigation/Menu/Menu.css.ts.vanilla-B5iVe5S2.css +88 -0
  22. package/dist/esm/assets/src/components/navigation/Pagination/Pagination.css.ts.vanilla-CmlFyyjh.css +103 -0
  23. package/dist/esm/assets/src/components/navigation/PathBar/PathBar.css.ts.vanilla-BIEzQQOf.css +10 -0
  24. package/dist/esm/assets/src/components/primitives/HoverCard/HoverCard.css.ts.vanilla-BYT0qbLp.css +41 -0
  25. package/dist/esm/assets/src/components/primitives/viewport/Viewport.css.ts.vanilla-CkFBJ7Vo.css +65 -0
  26. package/dist/esm/assets/src/components/shell/FloatingPanel/{FloatingPanel.css.ts.vanilla-1rIAXEFp.css → FloatingPanel.css.ts.vanilla-CRaeYJ2b.css} +20 -13
  27. package/dist/esm/assets/src/theme/{darkTheme.css.ts.vanilla-ab1WD4dr.css → darkTheme.css.ts.vanilla-BHZ3ecRn.css} +3 -3
  28. package/dist/esm/assets/src/theme/{lightTheme.css.ts.vanilla-OaRI_wIc.css → lightTheme.css.ts.vanilla-Ct6f9Iym.css} +3 -3
  29. package/dist/esm/components/Icons/AddIcon.js.map +1 -1
  30. package/dist/esm/components/Icons/AiChatIcon.js.map +1 -1
  31. package/dist/esm/components/Icons/AiSparklesIcon.js.map +1 -1
  32. package/dist/esm/components/Icons/ArchiveIcon.js.map +1 -1
  33. package/dist/esm/components/Icons/ArrowDownIcon.js.map +1 -1
  34. package/dist/esm/components/Icons/ArrowLeftIcon.js.map +1 -1
  35. package/dist/esm/components/Icons/ArrowRightIcon.js.map +1 -1
  36. package/dist/esm/components/Icons/ArrowUpIcon.js.map +1 -1
  37. package/dist/esm/components/Icons/BookmarkIcon.js.map +1 -1
  38. package/dist/esm/components/Icons/BugIcon.js.map +1 -1
  39. package/dist/esm/components/Icons/BuildingIcon.js.map +1 -1
  40. package/dist/esm/components/Icons/CalendarIcon.js.map +1 -1
  41. package/dist/esm/components/Icons/CheckIcon.js.map +1 -1
  42. package/dist/esm/components/Icons/ChevronDownIcon.js.map +1 -1
  43. package/dist/esm/components/Icons/ChevronLeftIcon.js.map +1 -1
  44. package/dist/esm/components/Icons/ChevronRightIcon.js.map +1 -1
  45. package/dist/esm/components/Icons/ChevronUpIcon.js.map +1 -1
  46. package/dist/esm/components/Icons/CircleIcon.js.map +1 -1
  47. package/dist/esm/components/Icons/ClockIcon.js.map +1 -1
  48. package/dist/esm/components/Icons/CloseIcon.js.map +1 -1
  49. package/dist/esm/components/Icons/CloudUploadIcon.js +24 -0
  50. package/dist/esm/components/Icons/CloudUploadIcon.js.map +1 -0
  51. package/dist/esm/components/Icons/CodeIcon.js.map +1 -1
  52. package/dist/esm/components/Icons/CopyIcon.js.map +1 -1
  53. package/dist/esm/components/Icons/CutIcon.js.map +1 -1
  54. package/dist/esm/components/Icons/DotsHorizontalIcon.js.map +1 -1
  55. package/dist/esm/components/Icons/DotsVerticalIcon.js.map +1 -1
  56. package/dist/esm/components/Icons/DownloadIcon.js.map +1 -1
  57. package/dist/esm/components/Icons/EditIcon.js.map +1 -1
  58. package/dist/esm/components/Icons/ErrorIcon.js.map +1 -1
  59. package/dist/esm/components/Icons/ExternalLinkIcon.js +26 -0
  60. package/dist/esm/components/Icons/ExternalLinkIcon.js.map +1 -0
  61. package/dist/esm/components/Icons/EyeDropperIcon.js.map +1 -1
  62. package/dist/esm/components/Icons/EyeIcon.js.map +1 -1
  63. package/dist/esm/components/Icons/FileTextIcon.js.map +1 -1
  64. package/dist/esm/components/Icons/FilterIcon.js.map +1 -1
  65. package/dist/esm/components/Icons/FirstIcon.js +23 -0
  66. package/dist/esm/components/Icons/FirstIcon.js.map +1 -0
  67. package/dist/esm/components/Icons/FolderCogIcon.js.map +1 -1
  68. package/dist/esm/components/Icons/FolderIcon.js.map +1 -1
  69. package/dist/esm/components/Icons/FolderOpenIcon.js +2 -2
  70. package/dist/esm/components/Icons/FolderOpenIcon.js.map +1 -1
  71. package/dist/esm/components/Icons/FullscreenIcon.js.map +1 -1
  72. package/dist/esm/components/Icons/GitBranchIcon.js.map +1 -1
  73. package/dist/esm/components/Icons/GridIcon.js.map +1 -1
  74. package/dist/esm/components/Icons/HeartIcon.js.map +1 -1
  75. package/dist/esm/components/Icons/HelpIcon.js.map +1 -1
  76. package/dist/esm/components/Icons/HomeIcon.js.map +1 -1
  77. package/dist/esm/components/Icons/ImageIcon.js +31 -0
  78. package/dist/esm/components/Icons/ImageIcon.js.map +1 -0
  79. package/dist/esm/components/Icons/InfoIcon.js.map +1 -1
  80. package/dist/esm/components/Icons/LastIcon.js +23 -0
  81. package/dist/esm/components/Icons/LastIcon.js.map +1 -0
  82. package/dist/esm/components/Icons/LinkIcon.js.map +1 -1
  83. package/dist/esm/components/Icons/ListIcon.js.map +1 -1
  84. package/dist/esm/components/Icons/LockIcon.js.map +1 -1
  85. package/dist/esm/components/Icons/MaximizeIcon.js.map +1 -1
  86. package/dist/esm/components/Icons/MenuIcon.js.map +1 -1
  87. package/dist/esm/components/Icons/MinimizeIcon.js.map +1 -1
  88. package/dist/esm/components/Icons/MinusIcon.js.map +1 -1
  89. package/dist/esm/components/Icons/PasteIcon.js.map +1 -1
  90. package/dist/esm/components/Icons/PauseIcon.js +2 -2
  91. package/dist/esm/components/Icons/PauseIcon.js.map +1 -1
  92. package/dist/esm/components/Icons/PinIcon.js.map +1 -1
  93. package/dist/esm/components/Icons/PlayIcon.js.map +1 -1
  94. package/dist/esm/components/Icons/RedoIcon.js.map +1 -1
  95. package/dist/esm/components/Icons/RefreshIcon.js.map +1 -1
  96. package/dist/esm/components/Icons/RobotIcon.js.map +1 -1
  97. package/dist/esm/components/Icons/SaveIcon.js.map +1 -1
  98. package/dist/esm/components/Icons/SearchIcon.js.map +1 -1
  99. package/dist/esm/components/Icons/SendIcon.js.map +1 -1
  100. package/dist/esm/components/Icons/SettingsIcon.js.map +1 -1
  101. package/dist/esm/components/Icons/SortIcon.js.map +1 -1
  102. package/dist/esm/components/Icons/StarIcon.js.map +1 -1
  103. package/dist/esm/components/Icons/StopIcon.js.map +1 -1
  104. package/dist/esm/components/Icons/SuccessIcon.js.map +1 -1
  105. package/dist/esm/components/Icons/TagIcon.js.map +1 -1
  106. package/dist/esm/components/Icons/TangentAlignedIcon.js.map +1 -1
  107. package/dist/esm/components/Icons/TangentAutoIcon.js.map +1 -1
  108. package/dist/esm/components/Icons/TangentFreeIcon.js.map +1 -1
  109. package/dist/esm/components/Icons/TangentLinearIcon.js.map +1 -1
  110. package/dist/esm/components/Icons/TangentMirroredIcon.js.map +1 -1
  111. package/dist/esm/components/Icons/TangentStepIcon.js.map +1 -1
  112. package/dist/esm/components/Icons/TerminalIcon.js.map +1 -1
  113. package/dist/esm/components/Icons/TrashIcon.js.map +1 -1
  114. package/dist/esm/components/Icons/UndoIcon.js.map +1 -1
  115. package/dist/esm/components/Icons/UnlinkIcon.js +26 -0
  116. package/dist/esm/components/Icons/UnlinkIcon.js.map +1 -0
  117. package/dist/esm/components/Icons/UnlockIcon.js.map +1 -1
  118. package/dist/esm/components/Icons/UploadIcon.js.map +1 -1
  119. package/dist/esm/components/Icons/UserIcon.js.map +1 -1
  120. package/dist/esm/components/Icons/UsersIcon.js.map +1 -1
  121. package/dist/esm/components/Icons/WarningIcon.js.map +1 -1
  122. package/dist/esm/components/Icons/ZoomInIcon.js.map +1 -1
  123. package/dist/esm/components/Icons/ZoomOutIcon.js.map +1 -1
  124. package/dist/esm/components/controls/CartesianPicker/CartesianPicker.js +3 -3
  125. package/dist/esm/components/controls/CartesianPicker/CartesianPicker.js.map +1 -1
  126. package/dist/esm/components/controls/CartesianPicker/useCartesianInteraction.js +7 -5
  127. package/dist/esm/components/controls/CartesianPicker/useCartesianInteraction.js.map +1 -1
  128. package/dist/esm/components/controls/CartesianPicker/useCartesianRenderer.js.map +1 -1
  129. package/dist/esm/components/controls/ColorPicker/AlphaSlider.js.map +1 -1
  130. package/dist/esm/components/controls/ColorPicker/ColorArea.js +2 -2
  131. package/dist/esm/components/controls/ColorPicker/ColorArea.js.map +1 -1
  132. package/dist/esm/components/controls/ColorPicker/ColorInputs.js +16 -2
  133. package/dist/esm/components/controls/ColorPicker/ColorInputs.js.map +1 -1
  134. package/dist/esm/components/controls/ColorPicker/ColorPalette.js +3 -1
  135. package/dist/esm/components/controls/ColorPicker/ColorPalette.js.map +1 -1
  136. package/dist/esm/components/controls/ColorPicker/ColorPicker.js +6 -6
  137. package/dist/esm/components/controls/ColorPicker/ColorPicker.js.map +1 -1
  138. package/dist/esm/components/controls/ColorPicker/ColorPresets.js +3 -1
  139. package/dist/esm/components/controls/ColorPicker/ColorPresets.js.map +1 -1
  140. package/dist/esm/components/controls/ColorPicker/ColorSwatch.js.map +1 -1
  141. package/dist/esm/components/controls/ColorPicker/EyeDropper.js.map +1 -1
  142. package/dist/esm/components/controls/ColorPicker/HueSlider.js.map +1 -1
  143. package/dist/esm/components/controls/ColorPicker/useColor.js.map +1 -1
  144. package/dist/esm/components/controls/Combobox/Combobox.css.js +20 -0
  145. package/dist/esm/components/controls/Combobox/Combobox.css.js.map +1 -0
  146. package/dist/esm/components/controls/Combobox/Combobox.js +377 -0
  147. package/dist/esm/components/controls/Combobox/Combobox.js.map +1 -0
  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 +246 -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.css.js +20 -0
  172. package/dist/esm/components/controls/FileUploader/FileUploader.css.js.map +1 -0
  173. package/dist/esm/components/controls/FileUploader/FileUploader.js +261 -0
  174. package/dist/esm/components/controls/FileUploader/FileUploader.js.map +1 -0
  175. package/dist/esm/components/controls/MultiSelect/MultiSelect.css.js +23 -0
  176. package/dist/esm/components/controls/MultiSelect/MultiSelect.css.js.map +1 -0
  177. package/dist/esm/components/controls/MultiSelect/MultiSelect.js +300 -0
  178. package/dist/esm/components/controls/MultiSelect/MultiSelect.js.map +1 -0
  179. package/dist/esm/components/controls/NumberInput/NumberInput.js +11 -4
  180. package/dist/esm/components/controls/NumberInput/NumberInput.js.map +1 -1
  181. package/dist/esm/components/controls/NumberInput/useNumberInput.js +6 -2
  182. package/dist/esm/components/controls/NumberInput/useNumberInput.js.map +1 -1
  183. package/dist/esm/components/controls/Select/Select.js +34 -13
  184. package/dist/esm/components/controls/Select/Select.js.map +1 -1
  185. package/dist/esm/components/controls/Slider/Slider.js +6 -8
  186. package/dist/esm/components/controls/Slider/Slider.js.map +1 -1
  187. package/dist/esm/components/controls/TagInput/TagInput.css.js +12 -0
  188. package/dist/esm/components/controls/TagInput/TagInput.css.js.map +1 -0
  189. package/dist/esm/components/controls/TagInput/TagInput.js +191 -0
  190. package/dist/esm/components/controls/TagInput/TagInput.js.map +1 -0
  191. package/dist/esm/components/controls/TreeView/TreeNode.css.js +9 -8
  192. package/dist/esm/components/controls/TreeView/TreeNode.css.js.map +1 -1
  193. package/dist/esm/components/controls/TreeView/TreeNode.js +123 -8
  194. package/dist/esm/components/controls/TreeView/TreeNode.js.map +1 -1
  195. package/dist/esm/components/controls/TreeView/TreeView.js +18 -6
  196. package/dist/esm/components/controls/TreeView/TreeView.js.map +1 -1
  197. package/dist/esm/components/controls/TreeView/useTreeState.js +2 -6
  198. package/dist/esm/components/controls/TreeView/useTreeState.js.map +1 -1
  199. package/dist/esm/components/controls/VectorInput/VectorInput.js +94 -8
  200. package/dist/esm/components/controls/VectorInput/VectorInput.js.map +1 -1
  201. package/dist/esm/components/data/DataTable/DataTable.css.js +25 -0
  202. package/dist/esm/components/data/DataTable/DataTable.css.js.map +1 -0
  203. package/dist/esm/components/data/DataTable/DataTable.js +519 -0
  204. package/dist/esm/components/data/DataTable/DataTable.js.map +1 -0
  205. package/dist/esm/components/editor/AssetBrowser/AssetBrowser.css.js +46 -0
  206. package/dist/esm/components/editor/AssetBrowser/AssetBrowser.css.js.map +1 -0
  207. package/dist/esm/components/editor/AssetBrowser/AssetBrowser.js +254 -0
  208. package/dist/esm/components/editor/AssetBrowser/AssetBrowser.js.map +1 -0
  209. package/dist/esm/components/editor/AssetBrowser/AssetBrowserAnnouncementLive.js +17 -0
  210. package/dist/esm/components/editor/AssetBrowser/AssetBrowserAnnouncementLive.js.map +1 -0
  211. package/dist/esm/components/editor/AssetBrowser/AssetBrowserBreadcrumbs.js +25 -0
  212. package/dist/esm/components/editor/AssetBrowser/AssetBrowserBreadcrumbs.js.map +1 -0
  213. package/dist/esm/components/editor/AssetBrowser/AssetBrowserContent.js +134 -0
  214. package/dist/esm/components/editor/AssetBrowser/AssetBrowserContent.js.map +1 -0
  215. package/dist/esm/components/editor/AssetBrowser/AssetBrowserContext.js +81 -0
  216. package/dist/esm/components/editor/AssetBrowser/AssetBrowserContext.js.map +1 -0
  217. package/dist/esm/components/editor/AssetBrowser/AssetBrowserContextMenu.js +123 -0
  218. package/dist/esm/components/editor/AssetBrowser/AssetBrowserContextMenu.js.map +1 -0
  219. package/dist/esm/components/editor/AssetBrowser/AssetBrowserDefaultMenus.js +130 -0
  220. package/dist/esm/components/editor/AssetBrowser/AssetBrowserDefaultMenus.js.map +1 -0
  221. package/dist/esm/components/editor/AssetBrowser/AssetBrowserGrid.js +137 -0
  222. package/dist/esm/components/editor/AssetBrowser/AssetBrowserGrid.js.map +1 -0
  223. package/dist/esm/components/editor/AssetBrowser/AssetBrowserGridItem.js +220 -0
  224. package/dist/esm/components/editor/AssetBrowser/AssetBrowserGridItem.js.map +1 -0
  225. package/dist/esm/components/editor/AssetBrowser/AssetBrowserList.js +183 -0
  226. package/dist/esm/components/editor/AssetBrowser/AssetBrowserList.js.map +1 -0
  227. package/dist/esm/components/editor/AssetBrowser/AssetBrowserRenameField.js +63 -0
  228. package/dist/esm/components/editor/AssetBrowser/AssetBrowserRenameField.js.map +1 -0
  229. package/dist/esm/components/editor/AssetBrowser/AssetBrowserSidebar.js +19 -0
  230. package/dist/esm/components/editor/AssetBrowser/AssetBrowserSidebar.js.map +1 -0
  231. package/dist/esm/components/editor/AssetBrowser/AssetBrowserStatusBar.js +24 -0
  232. package/dist/esm/components/editor/AssetBrowser/AssetBrowserStatusBar.js.map +1 -0
  233. package/dist/esm/components/editor/AssetBrowser/AssetBrowserStore.js +176 -0
  234. package/dist/esm/components/editor/AssetBrowser/AssetBrowserStore.js.map +1 -0
  235. package/dist/esm/components/editor/AssetBrowser/AssetBrowserSurface.js +114 -0
  236. package/dist/esm/components/editor/AssetBrowser/AssetBrowserSurface.js.map +1 -0
  237. package/dist/esm/components/editor/AssetBrowser/AssetBrowserToolbar.js +128 -0
  238. package/dist/esm/components/editor/AssetBrowser/AssetBrowserToolbar.js.map +1 -0
  239. package/dist/esm/components/editor/AssetBrowser/assetBrowserFilter.js +90 -0
  240. package/dist/esm/components/editor/AssetBrowser/assetBrowserFilter.js.map +1 -0
  241. package/dist/esm/components/editor/AssetBrowser/assetBrowserFormat.js +32 -0
  242. package/dist/esm/components/editor/AssetBrowser/assetBrowserFormat.js.map +1 -0
  243. package/dist/esm/components/editor/AssetBrowser/assetBrowserGeometry.js +70 -0
  244. package/dist/esm/components/editor/AssetBrowser/assetBrowserGeometry.js.map +1 -0
  245. package/dist/esm/components/editor/AssetBrowser/assetBrowserKeyboard.js +62 -0
  246. package/dist/esm/components/editor/AssetBrowser/assetBrowserKeyboard.js.map +1 -0
  247. package/dist/esm/components/editor/AssetBrowser/assetBrowserLabels.js +52 -0
  248. package/dist/esm/components/editor/AssetBrowser/assetBrowserLabels.js.map +1 -0
  249. package/dist/esm/components/editor/AssetBrowser/slots.js +18 -0
  250. package/dist/esm/components/editor/AssetBrowser/slots.js.map +1 -0
  251. package/dist/esm/components/editor/AssetBrowser/useAssetBrowserAnnouncement.js +19 -0
  252. package/dist/esm/components/editor/AssetBrowser/useAssetBrowserAnnouncement.js.map +1 -0
  253. package/dist/esm/components/editor/AssetBrowser/useAssetBrowserHandle.js +70 -0
  254. package/dist/esm/components/editor/AssetBrowser/useAssetBrowserHandle.js.map +1 -0
  255. package/dist/esm/components/editor/AssetBrowser/useAssetBrowserViewState.js +108 -0
  256. package/dist/esm/components/editor/AssetBrowser/useAssetBrowserViewState.js.map +1 -0
  257. package/dist/esm/components/editor/AssetBrowser/useAssetDnd.js +192 -0
  258. package/dist/esm/components/editor/AssetBrowser/useAssetDnd.js.map +1 -0
  259. package/dist/esm/components/editor/AssetBrowser/useAssetGridKeyboardNav.js +91 -0
  260. package/dist/esm/components/editor/AssetBrowser/useAssetGridKeyboardNav.js.map +1 -0
  261. package/dist/esm/components/editor/AssetBrowser/useAssetGridVirtualizer.js +91 -0
  262. package/dist/esm/components/editor/AssetBrowser/useAssetGridVirtualizer.js.map +1 -0
  263. package/dist/esm/components/editor/AssetBrowser/useAssetMarqueeGesture.js +128 -0
  264. package/dist/esm/components/editor/AssetBrowser/useAssetMarqueeGesture.js.map +1 -0
  265. package/dist/esm/components/editor/AssetBrowser/useAssetMutationKeyboard.js +72 -0
  266. package/dist/esm/components/editor/AssetBrowser/useAssetMutationKeyboard.js.map +1 -0
  267. package/dist/esm/components/editor/AssetBrowser/useAssetMutations.js +141 -0
  268. package/dist/esm/components/editor/AssetBrowser/useAssetMutations.js.map +1 -0
  269. package/dist/esm/components/editor/AssetBrowser/useAssetNavigation.js +113 -0
  270. package/dist/esm/components/editor/AssetBrowser/useAssetNavigation.js.map +1 -0
  271. package/dist/esm/components/editor/AssetBrowser/useAssetSelectionController.js +174 -0
  272. package/dist/esm/components/editor/AssetBrowser/useAssetSelectionController.js.map +1 -0
  273. package/dist/esm/components/editor/ChatPanel/ChatActionBar.js.map +1 -1
  274. package/dist/esm/components/editor/ChatPanel/ChatAttachment.js +8 -2
  275. package/dist/esm/components/editor/ChatPanel/ChatAttachment.js.map +1 -1
  276. package/dist/esm/components/editor/ChatPanel/ChatBubble.js.map +1 -1
  277. package/dist/esm/components/editor/ChatPanel/ChatCodeBlock.js +100 -8
  278. package/dist/esm/components/editor/ChatPanel/ChatCodeBlock.js.map +1 -1
  279. package/dist/esm/components/editor/ChatPanel/ChatContextChip.js +1 -1
  280. package/dist/esm/components/editor/ChatPanel/ChatContextChip.js.map +1 -1
  281. package/dist/esm/components/editor/ChatPanel/ChatEmptyState.js +3 -1
  282. package/dist/esm/components/editor/ChatPanel/ChatEmptyState.js.map +1 -1
  283. package/dist/esm/components/editor/ChatPanel/ChatInput.js +90 -7
  284. package/dist/esm/components/editor/ChatPanel/ChatInput.js.map +1 -1
  285. package/dist/esm/components/editor/ChatPanel/ChatInputToolbar.js.map +1 -1
  286. package/dist/esm/components/editor/ChatPanel/ChatMarkdownRenderer.js +1 -1
  287. package/dist/esm/components/editor/ChatPanel/ChatMarkdownRenderer.js.map +1 -1
  288. package/dist/esm/components/editor/ChatPanel/ChatMessage.js +89 -3
  289. package/dist/esm/components/editor/ChatPanel/ChatMessage.js.map +1 -1
  290. package/dist/esm/components/editor/ChatPanel/ChatMessageList.js +5 -3
  291. package/dist/esm/components/editor/ChatPanel/ChatMessageList.js.map +1 -1
  292. package/dist/esm/components/editor/ChatPanel/ChatPanel.js.map +1 -1
  293. package/dist/esm/components/editor/ChatPanel/ChatToolCall.js +1 -1
  294. package/dist/esm/components/editor/ChatPanel/ChatToolCall.js.map +1 -1
  295. package/dist/esm/components/editor/ChatPanel/ChatTypingIndicator.js.map +1 -1
  296. package/dist/esm/components/editor/ChatPanel/useChatInput.js.map +1 -1
  297. package/dist/esm/components/editor/ChatPanel/useChatMessages.js +7 -4
  298. package/dist/esm/components/editor/ChatPanel/useChatMessages.js.map +1 -1
  299. package/dist/esm/components/editor/ChatPanel/useChatScroll.js +6 -1
  300. package/dist/esm/components/editor/ChatPanel/useChatScroll.js.map +1 -1
  301. package/dist/esm/components/editor/Minimap/Minimap.css.js +18 -0
  302. package/dist/esm/components/editor/Minimap/Minimap.css.js.map +1 -0
  303. package/dist/esm/components/editor/Minimap/Minimap.js +257 -0
  304. package/dist/esm/components/editor/Minimap/Minimap.js.map +1 -0
  305. package/dist/esm/components/editor/Minimap/Minimap.types.js +11 -0
  306. package/dist/esm/components/editor/Minimap/Minimap.types.js.map +1 -0
  307. package/dist/esm/components/editor/Minimap/MinimapContext.js +48 -0
  308. package/dist/esm/components/editor/Minimap/MinimapContext.js.map +1 -0
  309. package/dist/esm/components/editor/Minimap/MinimapCorner.js +16 -0
  310. package/dist/esm/components/editor/Minimap/MinimapCorner.js.map +1 -0
  311. package/dist/esm/components/editor/Minimap/MinimapFooter.js +16 -0
  312. package/dist/esm/components/editor/Minimap/MinimapFooter.js.map +1 -0
  313. package/dist/esm/components/editor/Minimap/MinimapStore.js +166 -0
  314. package/dist/esm/components/editor/Minimap/MinimapStore.js.map +1 -0
  315. package/dist/esm/components/editor/Minimap/MinimapTitle.js +16 -0
  316. package/dist/esm/components/editor/Minimap/MinimapTitle.js.map +1 -0
  317. package/dist/esm/components/editor/Minimap/ViewportMinimap.js +69 -0
  318. package/dist/esm/components/editor/Minimap/ViewportMinimap.js.map +1 -0
  319. package/dist/esm/components/editor/Minimap/computeBoundsFromItems.js +65 -0
  320. package/dist/esm/components/editor/Minimap/computeBoundsFromItems.js.map +1 -0
  321. package/dist/esm/components/editor/Minimap/index.js +15 -0
  322. package/dist/esm/components/editor/Minimap/index.js.map +1 -0
  323. package/dist/esm/components/editor/Minimap/minimapCoords.js +105 -0
  324. package/dist/esm/components/editor/Minimap/minimapCoords.js.map +1 -0
  325. package/dist/esm/components/editor/Minimap/minimapDrawing.js +93 -0
  326. package/dist/esm/components/editor/Minimap/minimapDrawing.js.map +1 -0
  327. package/dist/esm/components/editor/Minimap/minimapHitTest.js +59 -0
  328. package/dist/esm/components/editor/Minimap/minimapHitTest.js.map +1 -0
  329. package/dist/esm/components/editor/Minimap/useMinimapGestures.js +299 -0
  330. package/dist/esm/components/editor/Minimap/useMinimapGestures.js.map +1 -0
  331. package/dist/esm/components/editor/NodeGraph/NodeGraph.css.js +36 -0
  332. package/dist/esm/components/editor/NodeGraph/NodeGraph.css.js.map +1 -0
  333. package/dist/esm/components/editor/NodeGraph/NodeGraph.js +627 -0
  334. package/dist/esm/components/editor/NodeGraph/NodeGraph.js.map +1 -0
  335. package/dist/esm/components/editor/NodeGraph/NodeGraph.types.js +10 -0
  336. package/dist/esm/components/editor/NodeGraph/NodeGraph.types.js.map +1 -0
  337. package/dist/esm/components/editor/NodeGraph/NodeGraphContext.js +54 -0
  338. package/dist/esm/components/editor/NodeGraph/NodeGraphContext.js.map +1 -0
  339. package/dist/esm/components/editor/NodeGraph/NodeGraphEdgeLabels.js +137 -0
  340. package/dist/esm/components/editor/NodeGraph/NodeGraphEdgeLabels.js.map +1 -0
  341. package/dist/esm/components/editor/NodeGraph/NodeGraphGroup.js +211 -0
  342. package/dist/esm/components/editor/NodeGraph/NodeGraphGroup.js.map +1 -0
  343. package/dist/esm/components/editor/NodeGraph/NodeGraphMinimap.js +122 -0
  344. package/dist/esm/components/editor/NodeGraph/NodeGraphMinimap.js.map +1 -0
  345. package/dist/esm/components/editor/NodeGraph/NodeGraphNode.js +170 -0
  346. package/dist/esm/components/editor/NodeGraph/NodeGraphNode.js.map +1 -0
  347. package/dist/esm/components/editor/NodeGraph/NodeGraphNodeContext.js +21 -0
  348. package/dist/esm/components/editor/NodeGraph/NodeGraphNodeContext.js.map +1 -0
  349. package/dist/esm/components/editor/NodeGraph/NodeGraphNodeParts.js +56 -0
  350. package/dist/esm/components/editor/NodeGraph/NodeGraphNodeParts.js.map +1 -0
  351. package/dist/esm/components/editor/NodeGraph/NodeGraphNodeSection.js +59 -0
  352. package/dist/esm/components/editor/NodeGraph/NodeGraphNodeSection.js.map +1 -0
  353. package/dist/esm/components/editor/NodeGraph/NodeGraphNodeSectionContext.js +17 -0
  354. package/dist/esm/components/editor/NodeGraph/NodeGraphNodeSectionContext.js.map +1 -0
  355. package/dist/esm/components/editor/NodeGraph/NodeGraphPin.js +35 -0
  356. package/dist/esm/components/editor/NodeGraph/NodeGraphPin.js.map +1 -0
  357. package/dist/esm/components/editor/NodeGraph/NodeGraphPort.js +191 -0
  358. package/dist/esm/components/editor/NodeGraph/NodeGraphPort.js.map +1 -0
  359. package/dist/esm/components/editor/NodeGraph/NodeGraphPortVisual.js +46 -0
  360. package/dist/esm/components/editor/NodeGraph/NodeGraphPortVisual.js.map +1 -0
  361. package/dist/esm/components/editor/NodeGraph/NodeGraphSlots.js +50 -0
  362. package/dist/esm/components/editor/NodeGraph/NodeGraphSlots.js.map +1 -0
  363. package/dist/esm/components/editor/NodeGraph/NodeGraphSpawnPalette.js +70 -0
  364. package/dist/esm/components/editor/NodeGraph/NodeGraphSpawnPalette.js.map +1 -0
  365. package/dist/esm/components/editor/NodeGraph/NodeGraphStore.js +543 -0
  366. package/dist/esm/components/editor/NodeGraph/NodeGraphStore.js.map +1 -0
  367. package/dist/esm/components/editor/NodeGraph/NodeGraphToolbar.js +100 -0
  368. package/dist/esm/components/editor/NodeGraph/NodeGraphToolbar.js.map +1 -0
  369. package/dist/esm/components/editor/NodeGraph/createTypeMatchValidator.js +37 -0
  370. package/dist/esm/components/editor/NodeGraph/createTypeMatchValidator.js.map +1 -0
  371. package/dist/esm/components/editor/NodeGraph/nodeGraphActions.js +53 -0
  372. package/dist/esm/components/editor/NodeGraph/nodeGraphActions.js.map +1 -0
  373. package/dist/esm/components/editor/NodeGraph/nodeGraphDrawing.js +461 -0
  374. package/dist/esm/components/editor/NodeGraph/nodeGraphDrawing.js.map +1 -0
  375. package/dist/esm/components/editor/NodeGraph/nodeGraphIds.js +31 -0
  376. package/dist/esm/components/editor/NodeGraph/nodeGraphIds.js.map +1 -0
  377. package/dist/esm/components/editor/NodeGraph/nodeGraphMath.js +350 -0
  378. package/dist/esm/components/editor/NodeGraph/nodeGraphMath.js.map +1 -0
  379. package/dist/esm/components/editor/NodeGraph/sortSlots.js +69 -0
  380. package/dist/esm/components/editor/NodeGraph/sortSlots.js.map +1 -0
  381. package/dist/esm/components/editor/NodeGraph/useDragGesture.js +63 -0
  382. package/dist/esm/components/editor/NodeGraph/useDragGesture.js.map +1 -0
  383. package/dist/esm/components/editor/NodeGraph/useNodeGraph.js +207 -0
  384. package/dist/esm/components/editor/NodeGraph/useNodeGraph.js.map +1 -0
  385. package/dist/esm/components/editor/NodeGraph/useNodeGraphConnection.js +334 -0
  386. package/dist/esm/components/editor/NodeGraph/useNodeGraphConnection.js.map +1 -0
  387. package/dist/esm/components/editor/NodeGraph/useNodeGraphEdgeInteraction.js +137 -0
  388. package/dist/esm/components/editor/NodeGraph/useNodeGraphEdgeInteraction.js.map +1 -0
  389. package/dist/esm/components/editor/NodeGraph/useNodeGraphGroupDrag.js +392 -0
  390. package/dist/esm/components/editor/NodeGraph/useNodeGraphGroupDrag.js.map +1 -0
  391. package/dist/esm/components/editor/NodeGraph/useNodeGraphKeyboard.js +164 -0
  392. package/dist/esm/components/editor/NodeGraph/useNodeGraphKeyboard.js.map +1 -0
  393. package/dist/esm/components/editor/NodeGraph/useNodeGraphNodeDrag.js +234 -0
  394. package/dist/esm/components/editor/NodeGraph/useNodeGraphNodeDrag.js.map +1 -0
  395. package/dist/esm/components/editor/NodeGraph/useStoreSlice.js +49 -0
  396. package/dist/esm/components/editor/NodeGraph/useStoreSlice.js.map +1 -0
  397. package/dist/esm/components/editor/PropertyInspector/PropertyGroup.js +1 -1
  398. package/dist/esm/components/editor/PropertyInspector/PropertyGroup.js.map +1 -1
  399. package/dist/esm/components/editor/PropertyInspector/PropertyPanel.js +8 -4
  400. package/dist/esm/components/editor/PropertyInspector/PropertyPanel.js.map +1 -1
  401. package/dist/esm/components/editor/PropertyInspector/PropertyRow.js +90 -5
  402. package/dist/esm/components/editor/PropertyInspector/PropertyRow.js.map +1 -1
  403. package/dist/esm/components/editor/PropertyInspector/PropertySection.js +100 -3
  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.css.js +1 -1
  457. package/dist/esm/components/feedback/Alert/Alert.js +11 -10
  458. package/dist/esm/components/feedback/Alert/Alert.js.map +1 -1
  459. package/dist/esm/components/feedback/Alert/AlertActions.js.map +1 -1
  460. package/dist/esm/components/feedback/Alert/AlertDescription.js.map +1 -1
  461. package/dist/esm/components/feedback/Alert/AlertTitle.js.map +1 -1
  462. package/dist/esm/components/feedback/CommandPalette/CommandPalette.css.js +20 -0
  463. package/dist/esm/components/feedback/CommandPalette/CommandPalette.css.js.map +1 -0
  464. package/dist/esm/components/feedback/CommandPalette/CommandPalette.js +271 -0
  465. package/dist/esm/components/feedback/CommandPalette/CommandPalette.js.map +1 -0
  466. package/dist/esm/components/feedback/CommandPalette/fuzzySearch.js +86 -0
  467. package/dist/esm/components/feedback/CommandPalette/fuzzySearch.js.map +1 -0
  468. package/dist/esm/components/feedback/CommandPalette/useRecentItems.js +65 -0
  469. package/dist/esm/components/feedback/CommandPalette/useRecentItems.js.map +1 -0
  470. package/dist/esm/components/feedback/Dialog/Dialog.js +6 -3
  471. package/dist/esm/components/feedback/Dialog/Dialog.js.map +1 -1
  472. package/dist/esm/components/feedback/Dialog/DialogBody.js.map +1 -1
  473. package/dist/esm/components/feedback/Dialog/DialogClose.js.map +1 -1
  474. package/dist/esm/components/feedback/Dialog/DialogFooter.js.map +1 -1
  475. package/dist/esm/components/feedback/Dialog/DialogHeader.js +3 -2
  476. package/dist/esm/components/feedback/Dialog/DialogHeader.js.map +1 -1
  477. package/dist/esm/components/feedback/Dialog/useDialogAnimation.js +10 -2
  478. package/dist/esm/components/feedback/Dialog/useDialogAnimation.js.map +1 -1
  479. package/dist/esm/components/feedback/Drawer/Drawer.css.js +17 -0
  480. package/dist/esm/components/feedback/Drawer/Drawer.css.js.map +1 -0
  481. package/dist/esm/components/feedback/Drawer/Drawer.js +123 -0
  482. package/dist/esm/components/feedback/Drawer/Drawer.js.map +1 -0
  483. package/dist/esm/components/feedback/Drawer/useDrawerAnimation.js +78 -0
  484. package/dist/esm/components/feedback/Drawer/useDrawerAnimation.js.map +1 -0
  485. package/dist/esm/components/feedback/EmptyState/EmptyState.js +1 -1
  486. package/dist/esm/components/feedback/EmptyState/EmptyState.js.map +1 -1
  487. package/dist/esm/components/feedback/LogView/LogView.css.js +35 -0
  488. package/dist/esm/components/feedback/LogView/LogView.css.js.map +1 -0
  489. package/dist/esm/components/feedback/LogView/LogView.js +297 -0
  490. package/dist/esm/components/feedback/LogView/LogView.js.map +1 -0
  491. package/dist/esm/components/feedback/LogView/LogViewBody.js +205 -0
  492. package/dist/esm/components/feedback/LogView/LogViewBody.js.map +1 -0
  493. package/dist/esm/components/feedback/LogView/LogViewContext.js +31 -0
  494. package/dist/esm/components/feedback/LogView/LogViewContext.js.map +1 -0
  495. package/dist/esm/components/feedback/LogView/LogViewParts.js +73 -0
  496. package/dist/esm/components/feedback/LogView/LogViewParts.js.map +1 -0
  497. package/dist/esm/components/feedback/LogView/LogViewStore.js +240 -0
  498. package/dist/esm/components/feedback/LogView/LogViewStore.js.map +1 -0
  499. package/dist/esm/components/feedback/LogView/logViewLabels.js +25 -0
  500. package/dist/esm/components/feedback/LogView/logViewLabels.js.map +1 -0
  501. package/dist/esm/components/feedback/LogView/logViewLevels.js +74 -0
  502. package/dist/esm/components/feedback/LogView/logViewLevels.js.map +1 -0
  503. package/dist/esm/components/feedback/LogView/logViewUtils.js +128 -0
  504. package/dist/esm/components/feedback/LogView/logViewUtils.js.map +1 -0
  505. package/dist/esm/components/feedback/LogView/useFollowTail.js +95 -0
  506. package/dist/esm/components/feedback/LogView/useFollowTail.js.map +1 -0
  507. package/dist/esm/components/feedback/LogView/useLogSelection.js +113 -0
  508. package/dist/esm/components/feedback/LogView/useLogSelection.js.map +1 -0
  509. package/dist/esm/components/feedback/ProgressBar/CircularProgress.js +1 -1
  510. package/dist/esm/components/feedback/ProgressBar/CircularProgress.js.map +1 -1
  511. package/dist/esm/components/feedback/ProgressBar/ProgressBar.js +1 -1
  512. package/dist/esm/components/feedback/ProgressBar/ProgressBar.js.map +1 -1
  513. package/dist/esm/components/feedback/Skeleton/Skeleton.js +1 -1
  514. package/dist/esm/components/feedback/Skeleton/Skeleton.js.map +1 -1
  515. package/dist/esm/components/feedback/Skeleton/SkeletonGroup.js +1 -1
  516. package/dist/esm/components/feedback/Skeleton/SkeletonGroup.js.map +1 -1
  517. package/dist/esm/components/feedback/Skeleton/SkeletonLayout.css.js +18 -0
  518. package/dist/esm/components/feedback/Skeleton/SkeletonLayout.css.js.map +1 -0
  519. package/dist/esm/components/feedback/Skeleton/SkeletonLayout.js +95 -0
  520. package/dist/esm/components/feedback/Skeleton/SkeletonLayout.js.map +1 -0
  521. package/dist/esm/components/feedback/Spinner/Spinner.js +1 -1
  522. package/dist/esm/components/feedback/Spinner/Spinner.js.map +1 -1
  523. package/dist/esm/components/feedback/Stat/Stat.css.js +15 -0
  524. package/dist/esm/components/feedback/Stat/Stat.css.js.map +1 -0
  525. package/dist/esm/components/feedback/Stat/Stat.js +55 -0
  526. package/dist/esm/components/feedback/Stat/Stat.js.map +1 -0
  527. package/dist/esm/components/feedback/Toast/ToastContainer.js +1 -1
  528. package/dist/esm/components/feedback/Toast/ToastContainer.js.map +1 -1
  529. package/dist/esm/components/feedback/Toast/ToastItem.js +18 -17
  530. package/dist/esm/components/feedback/Toast/ToastItem.js.map +1 -1
  531. package/dist/esm/components/feedback/Toast/ToastProvider.js.map +1 -1
  532. package/dist/esm/components/feedback/Toast/useToast.js.map +1 -1
  533. package/dist/esm/components/form/FormHelperText.js.map +1 -1
  534. package/dist/esm/components/form/FormLabel.js.map +1 -1
  535. package/dist/esm/components/form/InputWrapper.js.map +1 -1
  536. package/dist/esm/components/layout/Accordion/Accordion.js +3 -2
  537. package/dist/esm/components/layout/Accordion/Accordion.js.map +1 -1
  538. package/dist/esm/components/layout/Accordion/AccordionContent.js +1 -1
  539. package/dist/esm/components/layout/Accordion/AccordionContent.js.map +1 -1
  540. package/dist/esm/components/layout/Accordion/AccordionItem.js +1 -1
  541. package/dist/esm/components/layout/Accordion/AccordionItem.js.map +1 -1
  542. package/dist/esm/components/layout/Accordion/AccordionTrigger.js +8 -4
  543. package/dist/esm/components/layout/Accordion/AccordionTrigger.js.map +1 -1
  544. package/dist/esm/components/layout/Card/Card.css.js +18 -0
  545. package/dist/esm/components/layout/Card/Card.css.js.map +1 -0
  546. package/dist/esm/components/layout/Card/Card.js +66 -0
  547. package/dist/esm/components/layout/Card/Card.js.map +1 -0
  548. package/dist/esm/components/layout/Divider/Divider.js.map +1 -1
  549. package/dist/esm/components/layout/Flex/Flex.js +1 -1
  550. package/dist/esm/components/layout/Flex/Flex.js.map +1 -1
  551. package/dist/esm/components/layout/Grid/Grid.js +1 -1
  552. package/dist/esm/components/layout/ListItem/ListItem.js +1 -1
  553. package/dist/esm/components/layout/ListItem/ListItem.js.map +1 -1
  554. package/dist/esm/components/layout/PageHeader/PageHeader.js.map +1 -1
  555. package/dist/esm/components/layout/PanelSurface/PanelSurface.js +3 -3
  556. package/dist/esm/components/layout/PanelSurface/PanelSurface.js.map +1 -1
  557. package/dist/esm/components/layout/ScrollArea/ScrollArea.js +91 -23
  558. package/dist/esm/components/layout/ScrollArea/ScrollArea.js.map +1 -1
  559. package/dist/esm/components/layout/SplitPane/SplitPane.js +29 -16
  560. package/dist/esm/components/layout/SplitPane/SplitPane.js.map +1 -1
  561. package/dist/esm/components/layout/SplitPane/SplitPanePanel.js.map +1 -1
  562. package/dist/esm/components/layout/Stack/Stack.js +1 -1
  563. package/dist/esm/components/navigation/Breadcrumbs/BreadcrumbEllipsis.js +5 -0
  564. package/dist/esm/components/navigation/Breadcrumbs/BreadcrumbEllipsis.js.map +1 -1
  565. package/dist/esm/components/navigation/Breadcrumbs/BreadcrumbItem.js +7 -2
  566. package/dist/esm/components/navigation/Breadcrumbs/BreadcrumbItem.js.map +1 -1
  567. package/dist/esm/components/navigation/Breadcrumbs/BreadcrumbSeparator.js.map +1 -1
  568. package/dist/esm/components/navigation/Breadcrumbs/Breadcrumbs.js +12 -2
  569. package/dist/esm/components/navigation/Breadcrumbs/Breadcrumbs.js.map +1 -1
  570. package/dist/esm/components/navigation/ContextMenu/ContextMenu.js +45 -39
  571. package/dist/esm/components/navigation/ContextMenu/ContextMenu.js.map +1 -1
  572. package/dist/esm/components/navigation/Menu/Menu.css.js +9 -12
  573. package/dist/esm/components/navigation/Menu/Menu.css.js.map +1 -1
  574. package/dist/esm/components/navigation/Menu/Menu.js +97 -63
  575. package/dist/esm/components/navigation/Menu/Menu.js.map +1 -1
  576. package/dist/esm/components/navigation/Menu/MenuGapContext.js +19 -0
  577. package/dist/esm/components/navigation/Menu/MenuGapContext.js.map +1 -0
  578. package/dist/esm/components/navigation/Pagination/Pagination.css.js +12 -0
  579. package/dist/esm/components/navigation/Pagination/Pagination.css.js.map +1 -0
  580. package/dist/esm/components/navigation/Pagination/Pagination.js +107 -0
  581. package/dist/esm/components/navigation/Pagination/Pagination.js.map +1 -0
  582. package/dist/esm/components/navigation/Pagination/usePagination.js +143 -0
  583. package/dist/esm/components/navigation/Pagination/usePagination.js.map +1 -0
  584. package/dist/esm/components/navigation/PathBar/PathBar.css.js +6 -0
  585. package/dist/esm/components/navigation/PathBar/PathBar.css.js.map +1 -0
  586. package/dist/esm/components/navigation/PathBar/PathBar.js +178 -0
  587. package/dist/esm/components/navigation/PathBar/PathBar.js.map +1 -0
  588. package/dist/esm/components/navigation/PathBar/PathBarSiblingMenu.js +145 -0
  589. package/dist/esm/components/navigation/PathBar/PathBarSiblingMenu.js.map +1 -0
  590. package/dist/esm/components/navigation/PathBar/pathUtils.js +118 -0
  591. package/dist/esm/components/navigation/PathBar/pathUtils.js.map +1 -0
  592. package/dist/esm/components/navigation/SegmentedControl/SegmentedControl.js +16 -6
  593. package/dist/esm/components/navigation/SegmentedControl/SegmentedControl.js.map +1 -1
  594. package/dist/esm/components/navigation/SegmentedControl/SegmentedControlItem.js +1 -1
  595. package/dist/esm/components/navigation/SegmentedControl/SegmentedControlItem.js.map +1 -1
  596. package/dist/esm/components/navigation/Tabs/Tab.js +10 -3
  597. package/dist/esm/components/navigation/Tabs/Tab.js.map +1 -1
  598. package/dist/esm/components/navigation/Tabs/TabList.js +5 -2
  599. package/dist/esm/components/navigation/Tabs/TabList.js.map +1 -1
  600. package/dist/esm/components/navigation/Tabs/TabPanel.js +1 -1
  601. package/dist/esm/components/navigation/Tabs/TabPanel.js.map +1 -1
  602. package/dist/esm/components/navigation/Tabs/Tabs.js.map +1 -1
  603. package/dist/esm/components/primitives/Avatar/Avatar.js +90 -3
  604. package/dist/esm/components/primitives/Avatar/Avatar.js.map +1 -1
  605. package/dist/esm/components/primitives/Avatar/AvatarGroup.js +2 -2
  606. package/dist/esm/components/primitives/Avatar/AvatarGroup.js.map +1 -1
  607. package/dist/esm/components/primitives/Badge/Badge.js +89 -2
  608. package/dist/esm/components/primitives/Badge/Badge.js.map +1 -1
  609. package/dist/esm/components/primitives/Button/Button.js.map +1 -1
  610. package/dist/esm/components/primitives/Checkbox/Checkbox.js +10 -5
  611. package/dist/esm/components/primitives/Checkbox/Checkbox.js.map +1 -1
  612. package/dist/esm/components/primitives/Checkbox/CheckboxGroup.js +2 -2
  613. package/dist/esm/components/primitives/Checkbox/CheckboxGroup.js.map +1 -1
  614. package/dist/esm/components/primitives/Code/Code.js.map +1 -1
  615. package/dist/esm/components/primitives/Collapsible/Collapsible.js +4 -5
  616. package/dist/esm/components/primitives/Collapsible/Collapsible.js.map +1 -1
  617. package/dist/esm/components/primitives/HoverCard/HoverCard.css.js +7 -0
  618. package/dist/esm/components/primitives/HoverCard/HoverCard.css.js.map +1 -0
  619. package/dist/esm/components/primitives/HoverCard/HoverCard.js +171 -0
  620. package/dist/esm/components/primitives/HoverCard/HoverCard.js.map +1 -0
  621. package/dist/esm/components/primitives/Icon/Icon.js +16 -2
  622. package/dist/esm/components/primitives/Icon/Icon.js.map +1 -1
  623. package/dist/esm/components/primitives/IconButton/IconButton.js.map +1 -1
  624. package/dist/esm/components/primitives/Input/Input.js +1 -1
  625. package/dist/esm/components/primitives/Input/Input.js.map +1 -1
  626. package/dist/esm/components/primitives/Kbd/Kbd.js +1 -1
  627. package/dist/esm/components/primitives/Kbd/Kbd.js.map +1 -1
  628. package/dist/esm/components/primitives/Link/Link.js +3 -3
  629. package/dist/esm/components/primitives/Link/Link.js.map +1 -1
  630. package/dist/esm/components/primitives/Paper/Paper.js.map +1 -1
  631. package/dist/esm/components/primitives/Popover/Popover.js +1 -1
  632. package/dist/esm/components/primitives/Popover/PopoverClose.js +3 -4
  633. package/dist/esm/components/primitives/Popover/PopoverClose.js.map +1 -1
  634. package/dist/esm/components/primitives/Popover/PopoverContent.js +6 -4
  635. package/dist/esm/components/primitives/Popover/PopoverContent.js.map +1 -1
  636. package/dist/esm/components/primitives/Popover/PopoverTrigger.js.map +1 -1
  637. package/dist/esm/components/primitives/Radio/Radio.js +4 -4
  638. package/dist/esm/components/primitives/Radio/Radio.js.map +1 -1
  639. package/dist/esm/components/primitives/Radio/RadioGroup.js +2 -2
  640. package/dist/esm/components/primitives/Radio/RadioGroup.js.map +1 -1
  641. package/dist/esm/components/primitives/Switch/Switch.js +1 -1
  642. package/dist/esm/components/primitives/Switch/Switch.js.map +1 -1
  643. package/dist/esm/components/primitives/Text/Text.js.map +1 -1
  644. package/dist/esm/components/primitives/TextArea/TextArea.js +3 -4
  645. package/dist/esm/components/primitives/TextArea/TextArea.js.map +1 -1
  646. package/dist/esm/components/primitives/Tooltip/Arrow.js +1 -1
  647. package/dist/esm/components/primitives/Tooltip/Arrow.js.map +1 -1
  648. package/dist/esm/components/primitives/Tooltip/Tooltip.js +9 -7
  649. package/dist/esm/components/primitives/Tooltip/Tooltip.js.map +1 -1
  650. package/dist/esm/components/primitives/Tooltip/utils.js +1 -1
  651. package/dist/esm/components/primitives/Tooltip/utils.js.map +1 -1
  652. package/dist/esm/components/primitives/VisuallyHidden/VisuallyHidden.js.map +1 -1
  653. package/dist/esm/components/primitives/canvas/CanvasContainer.js +1 -1
  654. package/dist/esm/components/primitives/canvas/CanvasContainer.js.map +1 -1
  655. package/dist/esm/components/primitives/canvas/canvasDrawing.js +1 -1
  656. package/dist/esm/components/primitives/canvas/canvasDrawing.js.map +1 -1
  657. package/dist/esm/components/primitives/canvas/canvasTheme.js.map +1 -1
  658. package/dist/esm/components/primitives/canvas/useCanvasRenderer.js +8 -2
  659. package/dist/esm/components/primitives/canvas/useCanvasRenderer.js.map +1 -1
  660. package/dist/esm/components/primitives/viewport/Viewport.css.js +12 -0
  661. package/dist/esm/components/primitives/viewport/Viewport.css.js.map +1 -0
  662. package/dist/esm/components/primitives/viewport/Viewport.js +189 -0
  663. package/dist/esm/components/primitives/viewport/Viewport.js.map +1 -0
  664. package/dist/esm/components/primitives/viewport/ViewportContext.js +47 -0
  665. package/dist/esm/components/primitives/viewport/ViewportContext.js.map +1 -0
  666. package/dist/esm/components/primitives/viewport/ViewportLayer.js +113 -0
  667. package/dist/esm/components/primitives/viewport/ViewportLayer.js.map +1 -0
  668. package/dist/esm/components/primitives/viewport/ViewportOverlay.js +47 -0
  669. package/dist/esm/components/primitives/viewport/ViewportOverlay.js.map +1 -0
  670. package/dist/esm/components/primitives/viewport/ViewportStore.js +210 -0
  671. package/dist/esm/components/primitives/viewport/ViewportStore.js.map +1 -0
  672. package/dist/esm/components/primitives/viewport/ViewportWorld.js +38 -0
  673. package/dist/esm/components/primitives/viewport/ViewportWorld.js.map +1 -0
  674. package/dist/esm/components/primitives/viewport/useViewportGestures.js +333 -0
  675. package/dist/esm/components/primitives/viewport/useViewportGestures.js.map +1 -0
  676. package/dist/esm/components/primitives/viewport/viewportCoords.js +37 -0
  677. package/dist/esm/components/primitives/viewport/viewportCoords.js.map +1 -0
  678. package/dist/esm/components/primitives/viewport/viewportMath.js +77 -0
  679. package/dist/esm/components/primitives/viewport/viewportMath.js.map +1 -0
  680. package/dist/esm/components/shell/AppShell/AppShell.js +1 -1
  681. package/dist/esm/components/shell/AppShell/AppShell.js.map +1 -1
  682. package/dist/esm/components/shell/FloatingPanel/FloatingPanel.css.js +11 -10
  683. package/dist/esm/components/shell/FloatingPanel/FloatingPanel.css.js.map +1 -1
  684. package/dist/esm/components/shell/FloatingPanel/FloatingPanel.js +60 -24
  685. package/dist/esm/components/shell/FloatingPanel/FloatingPanel.js.map +1 -1
  686. package/dist/esm/components/shell/MenuBar/MenuBar.js +23 -16
  687. package/dist/esm/components/shell/MenuBar/MenuBar.js.map +1 -1
  688. package/dist/esm/components/shell/StatusBar/StatusBar.js.map +1 -1
  689. package/dist/esm/components/shell/Toolbar/Toolbar.js +4 -3
  690. package/dist/esm/components/shell/Toolbar/Toolbar.js.map +1 -1
  691. package/dist/esm/context/KeyboardContext.js.map +1 -1
  692. package/dist/esm/hooks/useBreakpoint/useBreakpoint.js +44 -0
  693. package/dist/esm/hooks/useBreakpoint/useBreakpoint.js.map +1 -0
  694. package/dist/esm/hooks/useClickOutside/useClickOutside.js +9 -9
  695. package/dist/esm/hooks/useClickOutside/useClickOutside.js.map +1 -1
  696. package/dist/esm/hooks/useClipboard/useClipboard.js +4 -0
  697. package/dist/esm/hooks/useClipboard/useClipboard.js.map +1 -1
  698. package/dist/esm/hooks/useControlledState/useControlledState.js.map +1 -1
  699. package/dist/esm/hooks/useDebounced/useDebouncedCallback.js +102 -0
  700. package/dist/esm/hooks/useDebounced/useDebouncedCallback.js.map +1 -0
  701. package/dist/esm/hooks/useDebounced/useDebouncedValue.js +47 -0
  702. package/dist/esm/hooks/useDebounced/useDebouncedValue.js.map +1 -0
  703. package/dist/esm/hooks/useDisclosure/useDisclosure.js.map +1 -1
  704. package/dist/esm/hooks/useEventCallback/useEventCallback.js +49 -0
  705. package/dist/esm/hooks/useEventCallback/useEventCallback.js.map +1 -0
  706. package/dist/esm/hooks/useFocusTrap/useFocusTrap.js.map +1 -1
  707. package/dist/esm/hooks/useHotkey/useHotkey.js +7 -12
  708. package/dist/esm/hooks/useHotkey/useHotkey.js.map +1 -1
  709. package/dist/esm/hooks/useIntersectionObserver/useIntersectionObserver.js +75 -0
  710. package/dist/esm/hooks/useIntersectionObserver/useIntersectionObserver.js.map +1 -0
  711. package/dist/esm/hooks/useIsMounted/useIsMounted.js +43 -0
  712. package/dist/esm/hooks/useIsMounted/useIsMounted.js.map +1 -0
  713. package/dist/esm/hooks/useKeyboard/useKeyboard.js.map +1 -1
  714. package/dist/esm/hooks/useKeyboard/utils.js.map +1 -1
  715. package/dist/esm/hooks/useLatest/useLatest.js +31 -0
  716. package/dist/esm/hooks/useLatest/useLatest.js.map +1 -0
  717. package/dist/esm/hooks/useListboxNav/useListboxNav.js +197 -0
  718. package/dist/esm/hooks/useListboxNav/useListboxNav.js.map +1 -0
  719. package/dist/esm/hooks/useMediaQuery/useMediaQuery.js +60 -0
  720. package/dist/esm/hooks/useMediaQuery/useMediaQuery.js.map +1 -0
  721. package/dist/esm/hooks/useMergedRef/useMergedRef.js +6 -1
  722. package/dist/esm/hooks/useMergedRef/useMergedRef.js.map +1 -1
  723. package/dist/esm/hooks/useNavigationHistory/useNavigationHistory.js +146 -0
  724. package/dist/esm/hooks/useNavigationHistory/useNavigationHistory.js.map +1 -0
  725. package/dist/esm/hooks/useResizeObserver/useResizeObserver.js +6 -8
  726. package/dist/esm/hooks/useResizeObserver/useResizeObserver.js.map +1 -1
  727. package/dist/esm/hooks/useTheme/useTheme.js +5 -2
  728. package/dist/esm/hooks/useTheme/useTheme.js.map +1 -1
  729. package/dist/esm/hooks/useThrottledCallback/useThrottledCallback.js +83 -0
  730. package/dist/esm/hooks/useThrottledCallback/useThrottledCallback.js.map +1 -0
  731. package/dist/esm/index.js +82 -4
  732. package/dist/esm/index.js.map +1 -1
  733. package/dist/esm/node_modules/tslib/tslib.es6.js +37 -0
  734. package/dist/esm/node_modules/tslib/tslib.es6.js.map +1 -0
  735. package/dist/esm/theme/ThemeProvider.js +1 -1
  736. package/dist/esm/theme/ThemeProvider.js.map +1 -1
  737. package/dist/esm/theme/breakpoints.js +27 -0
  738. package/dist/esm/theme/breakpoints.js.map +1 -0
  739. package/dist/esm/theme/contract.css.js +1 -1
  740. package/dist/esm/theme/createCustomTheme.js +1 -1
  741. package/dist/esm/theme/createCustomTheme.js.map +1 -1
  742. package/dist/esm/theme/darkTheme.css.js +2 -2
  743. package/dist/esm/theme/darkThemeValues.js +1 -1
  744. package/dist/esm/theme/darkThemeValues.js.map +1 -1
  745. package/dist/esm/theme/index.js +1 -0
  746. package/dist/esm/theme/index.js.map +1 -1
  747. package/dist/esm/theme/lightTheme.css.js +1 -1
  748. package/dist/esm/theme/lightThemeValues.js +1 -1
  749. package/dist/esm/theme/lightThemeValues.js.map +1 -1
  750. package/dist/esm/theme/themeContractData.js +4 -4
  751. package/dist/esm/theme/themeContractData.js.map +1 -1
  752. package/dist/esm/utils/devWarn.js +1 -1
  753. package/dist/esm/utils/mathExpression.js +1 -1
  754. package/dist/esm/utils/mathExpression.js.map +1 -1
  755. package/dist/tokens/tokens.dark.css +1 -1
  756. package/dist/tokens/tokens.json +1 -1
  757. package/dist/tokens/tokens.light.css +1 -1
  758. package/dist/types/components/Icons/AddIcon.d.ts +1 -1
  759. package/dist/types/components/Icons/AiChatIcon.d.ts +1 -1
  760. package/dist/types/components/Icons/AiSparklesIcon.d.ts +1 -1
  761. package/dist/types/components/Icons/ArchiveIcon.d.ts +1 -1
  762. package/dist/types/components/Icons/ArrowDownIcon.d.ts +1 -1
  763. package/dist/types/components/Icons/ArrowLeftIcon.d.ts +1 -1
  764. package/dist/types/components/Icons/ArrowRightIcon.d.ts +1 -1
  765. package/dist/types/components/Icons/ArrowUpIcon.d.ts +1 -1
  766. package/dist/types/components/Icons/BookmarkIcon.d.ts +1 -1
  767. package/dist/types/components/Icons/BugIcon.d.ts +1 -1
  768. package/dist/types/components/Icons/BuildingIcon.d.ts +1 -1
  769. package/dist/types/components/Icons/CalendarIcon.d.ts +1 -1
  770. package/dist/types/components/Icons/CheckIcon.d.ts +1 -1
  771. package/dist/types/components/Icons/ChevronDownIcon.d.ts +1 -1
  772. package/dist/types/components/Icons/ChevronLeftIcon.d.ts +1 -1
  773. package/dist/types/components/Icons/ChevronRightIcon.d.ts +1 -1
  774. package/dist/types/components/Icons/ChevronUpIcon.d.ts +1 -1
  775. package/dist/types/components/Icons/CircleIcon.d.ts +1 -1
  776. package/dist/types/components/Icons/ClockIcon.d.ts +1 -1
  777. package/dist/types/components/Icons/CloseIcon.d.ts +1 -1
  778. package/dist/types/components/Icons/CloudUploadIcon.d.ts +27 -0
  779. package/dist/types/components/Icons/CodeIcon.d.ts +1 -1
  780. package/dist/types/components/Icons/CopyIcon.d.ts +1 -1
  781. package/dist/types/components/Icons/CutIcon.d.ts +1 -1
  782. package/dist/types/components/Icons/DotsHorizontalIcon.d.ts +1 -1
  783. package/dist/types/components/Icons/DotsVerticalIcon.d.ts +1 -1
  784. package/dist/types/components/Icons/DownloadIcon.d.ts +1 -1
  785. package/dist/types/components/Icons/EditIcon.d.ts +1 -1
  786. package/dist/types/components/Icons/ErrorIcon.d.ts +1 -1
  787. package/dist/types/components/Icons/ExternalLinkIcon.d.ts +29 -0
  788. package/dist/types/components/Icons/EyeDropperIcon.d.ts +1 -1
  789. package/dist/types/components/Icons/EyeIcon.d.ts +1 -1
  790. package/dist/types/components/Icons/FileTextIcon.d.ts +1 -1
  791. package/dist/types/components/Icons/FilterIcon.d.ts +1 -1
  792. package/dist/types/components/Icons/FirstIcon.d.ts +26 -0
  793. package/dist/types/components/Icons/FolderCogIcon.d.ts +1 -1
  794. package/dist/types/components/Icons/FolderIcon.d.ts +1 -1
  795. package/dist/types/components/Icons/FolderOpenIcon.d.ts +1 -1
  796. package/dist/types/components/Icons/FullscreenIcon.d.ts +1 -1
  797. package/dist/types/components/Icons/GitBranchIcon.d.ts +1 -1
  798. package/dist/types/components/Icons/GridIcon.d.ts +1 -1
  799. package/dist/types/components/Icons/HeartIcon.d.ts +1 -1
  800. package/dist/types/components/Icons/HelpIcon.d.ts +1 -1
  801. package/dist/types/components/Icons/HomeIcon.d.ts +1 -1
  802. package/dist/types/components/Icons/ImageIcon.d.ts +34 -0
  803. package/dist/types/components/Icons/InfoIcon.d.ts +1 -1
  804. package/dist/types/components/Icons/LastIcon.d.ts +26 -0
  805. package/dist/types/components/Icons/LinkIcon.d.ts +1 -1
  806. package/dist/types/components/Icons/ListIcon.d.ts +1 -1
  807. package/dist/types/components/Icons/LockIcon.d.ts +1 -1
  808. package/dist/types/components/Icons/MaximizeIcon.d.ts +1 -1
  809. package/dist/types/components/Icons/MenuIcon.d.ts +1 -1
  810. package/dist/types/components/Icons/MinimizeIcon.d.ts +1 -1
  811. package/dist/types/components/Icons/MinusIcon.d.ts +1 -1
  812. package/dist/types/components/Icons/PasteIcon.d.ts +1 -1
  813. package/dist/types/components/Icons/PauseIcon.d.ts +1 -1
  814. package/dist/types/components/Icons/PinIcon.d.ts +1 -1
  815. package/dist/types/components/Icons/PlayIcon.d.ts +1 -1
  816. package/dist/types/components/Icons/RedoIcon.d.ts +1 -1
  817. package/dist/types/components/Icons/RefreshIcon.d.ts +1 -1
  818. package/dist/types/components/Icons/RobotIcon.d.ts +1 -1
  819. package/dist/types/components/Icons/SaveIcon.d.ts +1 -1
  820. package/dist/types/components/Icons/SearchIcon.d.ts +1 -1
  821. package/dist/types/components/Icons/SendIcon.d.ts +1 -1
  822. package/dist/types/components/Icons/SettingsIcon.d.ts +1 -1
  823. package/dist/types/components/Icons/SortIcon.d.ts +1 -1
  824. package/dist/types/components/Icons/StarIcon.d.ts +1 -1
  825. package/dist/types/components/Icons/StopIcon.d.ts +1 -1
  826. package/dist/types/components/Icons/SuccessIcon.d.ts +1 -1
  827. package/dist/types/components/Icons/TagIcon.d.ts +1 -1
  828. package/dist/types/components/Icons/TangentAlignedIcon.d.ts +1 -1
  829. package/dist/types/components/Icons/TangentAutoIcon.d.ts +1 -1
  830. package/dist/types/components/Icons/TangentFreeIcon.d.ts +1 -1
  831. package/dist/types/components/Icons/TangentLinearIcon.d.ts +1 -1
  832. package/dist/types/components/Icons/TangentMirroredIcon.d.ts +1 -1
  833. package/dist/types/components/Icons/TangentStepIcon.d.ts +1 -1
  834. package/dist/types/components/Icons/TerminalIcon.d.ts +1 -1
  835. package/dist/types/components/Icons/TrashIcon.d.ts +1 -1
  836. package/dist/types/components/Icons/UndoIcon.d.ts +1 -1
  837. package/dist/types/components/Icons/UnlinkIcon.d.ts +29 -0
  838. package/dist/types/components/Icons/UnlockIcon.d.ts +1 -1
  839. package/dist/types/components/Icons/UploadIcon.d.ts +1 -1
  840. package/dist/types/components/Icons/UserIcon.d.ts +1 -1
  841. package/dist/types/components/Icons/UsersIcon.d.ts +1 -1
  842. package/dist/types/components/Icons/WarningIcon.d.ts +1 -1
  843. package/dist/types/components/Icons/ZoomInIcon.d.ts +1 -1
  844. package/dist/types/components/Icons/ZoomOutIcon.d.ts +1 -1
  845. package/dist/types/components/controls/CartesianPicker/CartesianPicker.types.d.ts +3 -3
  846. package/dist/types/components/controls/ColorPicker/ColorPicker.types.d.ts +2 -2
  847. package/dist/types/components/controls/ColorPicker/EyeDropper.d.ts +1 -1
  848. package/dist/types/components/controls/Combobox/Combobox.d.ts +29 -0
  849. package/dist/types/components/controls/Combobox/Combobox.types.d.ts +109 -0
  850. package/dist/types/components/controls/CurveEditor/CurveEditor.types.d.ts +8 -58
  851. package/dist/types/components/controls/CurveEditor/curveUtils.d.ts +2 -1
  852. package/dist/types/components/controls/FileTree/FileTree.d.ts +34 -0
  853. package/dist/types/components/controls/FileTree/FileTree.types.d.ts +133 -0
  854. package/dist/types/components/controls/FileTree/fileTreeIcons.d.ts +29 -0
  855. package/dist/types/components/controls/FileTree/fileTreeLabels.d.ts +19 -0
  856. package/dist/types/components/controls/FileUploader/FileUploader.d.ts +34 -0
  857. package/dist/types/components/controls/FileUploader/FileUploader.types.d.ts +94 -0
  858. package/dist/types/components/controls/MultiSelect/MultiSelect.d.ts +31 -0
  859. package/dist/types/components/controls/MultiSelect/MultiSelect.types.d.ts +85 -0
  860. package/dist/types/components/controls/NumberInput/NumberInput.d.ts +2 -2
  861. package/dist/types/components/controls/Select/Select.types.d.ts +2 -2
  862. package/dist/types/components/controls/Slider/Slider.d.ts +1 -1
  863. package/dist/types/components/controls/TagInput/TagInput.d.ts +24 -0
  864. package/dist/types/components/controls/TagInput/TagInput.types.d.ts +100 -0
  865. package/dist/types/components/controls/TreeView/TreeView.d.ts +1 -1
  866. package/dist/types/components/controls/TreeView/TreeView.types.d.ts +24 -2
  867. package/dist/types/components/controls/VectorInput/VectorInput.types.d.ts +1 -1
  868. package/dist/types/components/data/DataTable/DataTable.d.ts +8 -0
  869. package/dist/types/components/data/DataTable/DataTable.types.d.ts +159 -0
  870. package/dist/types/components/editor/AssetBrowser/AssetBrowser.d.ts +13 -0
  871. package/dist/types/components/editor/AssetBrowser/AssetBrowser.types.d.ts +241 -0
  872. package/dist/types/components/editor/AssetBrowser/assetBrowserLabels.d.ts +70 -0
  873. package/dist/types/components/editor/ChatPanel/ChatMarkdownRenderer.types.d.ts +1 -1
  874. package/dist/types/components/editor/ChatPanel/ChatPanel.types.d.ts +2 -2
  875. package/dist/types/components/editor/Minimap/Minimap.d.ts +26 -0
  876. package/dist/types/components/editor/Minimap/Minimap.types.d.ts +249 -0
  877. package/dist/types/components/editor/Minimap/MinimapContext.d.ts +27 -0
  878. package/dist/types/components/editor/Minimap/MinimapCorner.d.ts +8 -0
  879. package/dist/types/components/editor/Minimap/MinimapFooter.d.ts +8 -0
  880. package/dist/types/components/editor/Minimap/MinimapStore.d.ts +17 -0
  881. package/dist/types/components/editor/Minimap/MinimapTitle.d.ts +8 -0
  882. package/dist/types/components/editor/Minimap/ViewportMinimap.d.ts +52 -0
  883. package/dist/types/components/editor/Minimap/computeBoundsFromItems.d.ts +13 -0
  884. package/dist/types/components/editor/Minimap/index.d.ts +13 -0
  885. package/dist/types/components/editor/NodeGraph/NodeGraph.d.ts +63 -0
  886. package/dist/types/components/editor/NodeGraph/NodeGraph.types.d.ts +568 -0
  887. package/dist/types/components/editor/NodeGraph/NodeGraphContext.d.ts +30 -0
  888. package/dist/types/components/editor/NodeGraph/NodeGraphNodeParts.d.ts +86 -0
  889. package/dist/types/components/editor/NodeGraph/NodeGraphNodeSection.d.ts +47 -0
  890. package/dist/types/components/editor/NodeGraph/NodeGraphPin.d.ts +57 -0
  891. package/dist/types/components/editor/NodeGraph/NodeGraphPort.d.ts +30 -0
  892. package/dist/types/components/editor/NodeGraph/NodeGraphPortVisual.d.ts +46 -0
  893. package/dist/types/components/editor/NodeGraph/NodeGraphSlots.d.ts +16 -0
  894. package/dist/types/components/editor/NodeGraph/NodeGraphStore.d.ts +256 -0
  895. package/dist/types/components/editor/NodeGraph/NodeGraphToolbar.d.ts +54 -0
  896. package/dist/types/components/editor/NodeGraph/createTypeMatchValidator.d.ts +43 -0
  897. package/dist/types/components/editor/NodeGraph/nodeGraphActions.d.ts +39 -0
  898. package/dist/types/components/editor/NodeGraph/nodeGraphIds.d.ts +16 -0
  899. package/dist/types/components/editor/NodeGraph/useNodeGraph.d.ts +103 -0
  900. package/dist/types/components/editor/PropertyInspector/PropertyInspector.types.d.ts +2 -2
  901. package/dist/types/components/editor/Timeline/Timeline.d.ts +18 -0
  902. package/dist/types/components/editor/Timeline/Timeline.types.d.ts +348 -0
  903. package/dist/types/components/editor/Timeline/TimelineContext.d.ts +51 -0
  904. package/dist/types/components/editor/Timeline/TimelineFooter.d.ts +8 -0
  905. package/dist/types/components/editor/Timeline/TimelineMinimap.d.ts +21 -0
  906. package/dist/types/components/editor/Timeline/TimelineStore.d.ts +41 -0
  907. package/dist/types/components/editor/Timeline/TimelineToolbar.d.ts +8 -0
  908. package/dist/types/components/editor/Timeline/TimelineTrackScale.d.ts +8 -0
  909. package/dist/types/components/editor/Timeline/index.d.ts +15 -0
  910. package/dist/types/components/editor/Timeline/timelineCoords.d.ts +7 -0
  911. package/dist/types/components/editor/Timeline/timelineEdits.d.ts +18 -0
  912. package/dist/types/components/editor/TransformControl/TransformControl.types.d.ts +2 -2
  913. package/dist/types/components/editor/ViewportGizmo/ViewportGizmo.types.d.ts +1 -1
  914. package/dist/types/components/feedback/Alert/Alert.d.ts +3 -2
  915. package/dist/types/components/feedback/Alert/Alert.types.d.ts +12 -5
  916. package/dist/types/components/feedback/CommandPalette/CommandPalette.d.ts +29 -0
  917. package/dist/types/components/feedback/CommandPalette/CommandPalette.types.d.ts +59 -0
  918. package/dist/types/components/feedback/CommandPalette/fuzzySearch.d.ts +6 -0
  919. package/dist/types/components/feedback/Dialog/Dialog.types.d.ts +2 -2
  920. package/dist/types/components/feedback/Drawer/Drawer.d.ts +12 -0
  921. package/dist/types/components/feedback/Drawer/Drawer.types.d.ts +70 -0
  922. package/dist/types/components/feedback/EmptyState/EmptyState.types.d.ts +2 -2
  923. package/dist/types/components/feedback/LogView/LogView.d.ts +58 -0
  924. package/dist/types/components/feedback/LogView/LogView.types.d.ts +333 -0
  925. package/dist/types/components/feedback/LogView/LogViewBody.d.ts +15 -0
  926. package/dist/types/components/feedback/LogView/LogViewContext.d.ts +9 -0
  927. package/dist/types/components/feedback/LogView/LogViewParts.d.ts +35 -0
  928. package/dist/types/components/feedback/LogView/LogViewStore.d.ts +4 -0
  929. package/dist/types/components/feedback/LogView/logViewLabels.d.ts +9 -0
  930. package/dist/types/components/feedback/LogView/logViewUtils.d.ts +41 -0
  931. package/dist/types/components/feedback/ProgressBar/ProgressBar.types.d.ts +3 -3
  932. package/dist/types/components/feedback/Skeleton/Skeleton.types.d.ts +47 -4
  933. package/dist/types/components/feedback/Skeleton/SkeletonLayout.d.ts +314 -0
  934. package/dist/types/components/feedback/Stat/Stat.d.ts +23 -0
  935. package/dist/types/components/feedback/Stat/Stat.types.d.ts +38 -0
  936. package/dist/types/components/feedback/Toast/Toast.types.d.ts +1 -1
  937. package/dist/types/components/form/FormHelperText.d.ts +2 -2
  938. package/dist/types/components/form/FormLabel.d.ts +1 -1
  939. package/dist/types/components/form/InputWrapper.d.ts +2 -2
  940. package/dist/types/components/layout/Accordion/Accordion.types.d.ts +9 -2
  941. package/dist/types/components/layout/Card/Card.d.ts +12 -0
  942. package/dist/types/components/layout/Card/Card.types.d.ts +54 -0
  943. package/dist/types/components/layout/Divider/Divider.types.d.ts +2 -2
  944. package/dist/types/components/layout/Flex/Flex.d.ts +1 -1
  945. package/dist/types/components/layout/Grid/Grid.d.ts +1 -1
  946. package/dist/types/components/layout/ListItem/ListItem.types.d.ts +2 -2
  947. package/dist/types/components/layout/PageHeader/PageHeader.types.d.ts +1 -1
  948. package/dist/types/components/layout/PanelSurface/PanelSurface.types.d.ts +6 -6
  949. package/dist/types/components/layout/ScrollArea/ScrollArea.types.d.ts +2 -2
  950. package/dist/types/components/layout/Stack/Stack.d.ts +1 -1
  951. package/dist/types/components/navigation/Breadcrumbs/BreadcrumbItem.d.ts +1 -0
  952. package/dist/types/components/navigation/Breadcrumbs/Breadcrumbs.types.d.ts +7 -0
  953. package/dist/types/components/navigation/ContextMenu/ContextMenu.d.ts +18 -3
  954. package/dist/types/components/navigation/ContextMenu/ContextMenu.types.d.ts +55 -63
  955. package/dist/types/components/navigation/Menu/Menu.d.ts +38 -35
  956. package/dist/types/components/navigation/Menu/Menu.types.d.ts +190 -71
  957. package/dist/types/components/navigation/Pagination/Pagination.d.ts +22 -0
  958. package/dist/types/components/navigation/Pagination/Pagination.types.d.ts +49 -0
  959. package/dist/types/components/navigation/PathBar/PathBar.d.ts +31 -0
  960. package/dist/types/components/navigation/PathBar/PathBar.types.d.ts +79 -0
  961. package/dist/types/components/navigation/SegmentedControl/SegmentedControl.types.d.ts +3 -3
  962. package/dist/types/components/navigation/Tabs/Tabs.types.d.ts +2 -2
  963. package/dist/types/components/primitives/Avatar/Avatar.types.d.ts +2 -2
  964. package/dist/types/components/primitives/Badge/Badge.types.d.ts +1 -1
  965. package/dist/types/components/primitives/Button/Button.d.ts +2 -2
  966. package/dist/types/components/primitives/Checkbox/Checkbox.types.d.ts +2 -2
  967. package/dist/types/components/primitives/Code/Code.types.d.ts +1 -1
  968. package/dist/types/components/primitives/Collapsible/Collapsible.types.d.ts +2 -2
  969. package/dist/types/components/primitives/HoverCard/HoverCard.d.ts +10 -0
  970. package/dist/types/components/primitives/HoverCard/HoverCard.types.d.ts +64 -0
  971. package/dist/types/components/primitives/Icon/Icon.d.ts +15 -2
  972. package/dist/types/components/primitives/IconButton/IconButton.d.ts +1 -1
  973. package/dist/types/components/primitives/Input/Input.d.ts +1 -1
  974. package/dist/types/components/primitives/Kbd/Kbd.types.d.ts +1 -1
  975. package/dist/types/components/primitives/Link/Link.types.d.ts +1 -1
  976. package/dist/types/components/primitives/Popover/Popover.types.d.ts +2 -2
  977. package/dist/types/components/primitives/Radio/Radio.types.d.ts +3 -3
  978. package/dist/types/components/primitives/Switch/Switch.d.ts +1 -1
  979. package/dist/types/components/primitives/TextArea/TextArea.types.d.ts +1 -1
  980. package/dist/types/components/primitives/Tooltip/Tooltip.d.ts +1 -1
  981. package/dist/types/components/primitives/VisuallyHidden/VisuallyHidden.types.d.ts +1 -1
  982. package/dist/types/components/primitives/canvas/canvas.types.d.ts +16 -1
  983. package/dist/types/components/primitives/viewport/Viewport.d.ts +38 -0
  984. package/dist/types/components/primitives/viewport/Viewport.types.d.ts +257 -0
  985. package/dist/types/components/primitives/viewport/ViewportContext.d.ts +23 -0
  986. package/dist/types/components/primitives/viewport/ViewportLayer.d.ts +26 -0
  987. package/dist/types/components/primitives/viewport/ViewportOverlay.d.ts +27 -0
  988. package/dist/types/components/primitives/viewport/ViewportWorld.d.ts +25 -0
  989. package/dist/types/components/primitives/viewport/viewportCoords.d.ts +25 -0
  990. package/dist/types/components/primitives/viewport/viewportMath.d.ts +35 -0
  991. package/dist/types/components/shell/AppShell/AppShell.types.d.ts +2 -2
  992. package/dist/types/components/shell/FloatingPanel/FloatingPanel.types.d.ts +2 -2
  993. package/dist/types/components/shell/MenuBar/MenuBar.types.d.ts +5 -5
  994. package/dist/types/components/shell/StatusBar/StatusBar.types.d.ts +3 -3
  995. package/dist/types/components/shell/Toolbar/Toolbar.types.d.ts +5 -5
  996. package/dist/types/hooks/useBreakpoint/useBreakpoint.d.ts +19 -0
  997. package/dist/types/hooks/useBreakpoint/useBreakpoint.types.d.ts +20 -0
  998. package/dist/types/hooks/useDebounced/useDebounced.types.d.ts +15 -0
  999. package/dist/types/hooks/useDebounced/useDebouncedCallback.d.ts +22 -0
  1000. package/dist/types/hooks/useDebounced/useDebouncedValue.d.ts +25 -0
  1001. package/dist/types/hooks/useEventCallback/useEventCallback.d.ts +32 -0
  1002. package/dist/types/hooks/useIntersectionObserver/useIntersectionObserver.d.ts +22 -0
  1003. package/dist/types/hooks/useIntersectionObserver/useIntersectionObserver.types.d.ts +22 -0
  1004. package/dist/types/hooks/useIsMounted/useIsMounted.d.ts +28 -0
  1005. package/dist/types/hooks/useKeyboard/types.d.ts +1 -1
  1006. package/dist/types/hooks/useLatest/useLatest.d.ts +23 -0
  1007. package/dist/types/hooks/useListboxNav/useListboxNav.d.ts +75 -0
  1008. package/dist/types/hooks/useMediaQuery/useMediaQuery.d.ts +19 -0
  1009. package/dist/types/hooks/useMediaQuery/useMediaQuery.types.d.ts +6 -0
  1010. package/dist/types/hooks/useResizeObserver/useResizeObserver.d.ts +3 -3
  1011. package/dist/types/hooks/useThrottledCallback/useThrottledCallback.d.ts +23 -0
  1012. package/dist/types/hooks/useThrottledCallback/useThrottledCallback.types.d.ts +13 -0
  1013. package/dist/types/index.d.ts +108 -7
  1014. package/dist/types/theme/breakpoints.d.ts +22 -0
  1015. package/dist/types/theme/contract.css.d.ts +1 -1
  1016. package/dist/types/theme/createCustomTheme.d.ts +1 -1
  1017. package/dist/types/theme/darkThemeValues.d.ts +1 -1
  1018. package/dist/types/theme/index.d.ts +1 -0
  1019. package/dist/types/theme/lightThemeValues.d.ts +1 -1
  1020. package/dist/types/theme/themeContractData.d.ts +4 -4
  1021. package/dist/types/theme-values.d.ts +1 -1
  1022. package/dist/types/types/keyframe.d.ts +64 -0
  1023. package/package.json +31 -17
  1024. package/dist/esm/assets/src/components/navigation/Menu/Menu.css.ts.vanilla-DD0c5D10.css +0 -67
  1025. package/dist/esm/components/navigation/ContextMenu/useContextMenuTarget.js +0 -53
  1026. package/dist/esm/components/navigation/ContextMenu/useContextMenuTarget.js.map +0 -1
  1027. package/dist/esm/components/navigation/Menu/Menu.helpers.js +0 -53
  1028. package/dist/esm/components/navigation/Menu/Menu.helpers.js.map +0 -1
  1029. package/dist/esm/components/navigation/Menu/useMenu.js +0 -88
  1030. package/dist/esm/components/navigation/Menu/useMenu.js.map +0 -1
  1031. package/dist/types/components/navigation/ContextMenu/useContextMenuTarget.d.ts +0 -5
  1032. package/dist/types/components/navigation/Menu/useMenu.d.ts +0 -16
package/CHANGELOG.md CHANGED
@@ -1,5 +1,776 @@
1
1
  # entangle-ui
2
2
 
3
+ ## 0.10.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [#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
8
+ files and folders. Toggle between a virtualized thumbnail grid and a
9
+ `DataTable`-backed list, navigate folders via a breadcrumb bar and a `TreeView`
10
+ sidebar, and search, filter, sort, and select assets. Supports single/multiple
11
+ selection with marquee and keyboard navigation, drag-to-folder move, external
12
+ file import, and drag-out payloads, plus `renderThumbnail` / `renderItem` /
13
+ context-menu render props.
14
+
15
+ - [#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
16
+ now-stable `useEffectEvent` and `<Activity>` APIs. Internal AssetBrowser
17
+ refactor lands on top:
18
+ - Replace `useLatest + useCallback` pairs in `useAssetNavigation`,
19
+ `useAssetSelectionController`, `useAssetDnd`, `useAssetMarqueeGesture`, and
20
+ `useAssetBrowserHandle` with `useEffectEvent`. Handlers keep stable
21
+ identity but always see the latest closures, with significantly less code.
22
+ - Stabilize `renderThumbnail` / `renderItem` / `renderItemContextMenu` /
23
+ `renderEmptyContextMenu` through a new internal `useStableRenderFn`
24
+ helper, so a consumer passing an inline render-prop no longer busts the
25
+ item context (which would re-render every grid cell).
26
+ - Extract grid keyboard navigation into a new `useAssetGridKeyboardNav`
27
+ hook (mirrors the gesture / virtualizer hooks).
28
+ - `AssetBrowserStatusBar` now takes `view` as a prop instead of reading the
29
+ chrome context, and an `AssetBrowserAnnouncementLive` subcomponent reads
30
+ the polite-live announcement directly via a new
31
+ `useAssetBrowserAnnouncement` slice hook — the root no longer computes
32
+ it.
33
+ - Memoize the `useAssetBrowserViewState` return so callers that capture it
34
+ whole keep a stable identity across renders.
35
+
36
+ - [#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,
37
+ and duplicate.
38
+
39
+ AssetBrowser stays controlled and presentational: each operation provides the
40
+ affordance (inline editor, keyboard shortcut, menu action) and reports **intent**
41
+ through a callback — you apply the change and pass back fresh `items`. Presence
42
+ of a callback enables its affordance.
43
+
44
+ New props:
45
+ - `onItemRename(item, newName)` — inline rename. Enables an inline label editor
46
+ (swap the cell label for a text field), the `F2` shortcut, the `Rename`
47
+ default action, and `handle.beginRename(id)`. Commits on Enter / blur with a
48
+ changed, non-empty value; cancels on Escape. Return / resolve `false` to
49
+ reject the name and keep the editor open (e.g. failed validation).
50
+ - `onItemsDelete(items)` — delete the acted-on items. Enables the `Delete` key
51
+ (and `⌘⌫` on macOS; plain `Backspace` stays reserved for parent-nav) and the
52
+ `Delete` action. Roving focus moves to a survivor before deletion.
53
+ - `onCreateFolder(parentFolderId)` — enables the empty-area `New folder` action.
54
+ Pair with `handle.beginRename(newId)` for the create-then-rename flow.
55
+ - `onItemsDuplicate(items)` — enables `Ctrl/⌘ + D` and the `Duplicate` action.
56
+ - `defaultItemActions` — auto-populate the item / empty-area context menus with
57
+ Rename / Duplicate / Delete / New-folder entries for whichever callbacks are
58
+ present (labels come from the `labels` prop, so they localize).
59
+
60
+ API additions:
61
+ - `renderItemContextMenu(items, actions)` now receives an `actions` object
62
+ (`rename` / `delete` / `duplicate`, bound to the acted-on items) so a custom
63
+ menu can wire the built-in flows without a ref.
64
+ - `AssetBrowserHandle.beginRename(id)` enters inline-rename imperatively
65
+ (scrolls the item into view first).
66
+ - New exported types `AssetItemActions` and `AssetRenameResult`; new `labels`
67
+ keys `rename` / `delete` / `duplicate` / `newFolder`.
68
+
69
+ Notes:
70
+ - All mutation affordances work in **both** the grid and list views: inline
71
+ rename, the `F2` / `Delete` / `Ctrl+D` shortcuts, and the right-click menus.
72
+ A single view-agnostic context-menu layer detects the target item from
73
+ `data-asset-id` (grid cells) / `data-row-key` (list rows), and the mutation
74
+ keyboard handler is shared by both scrollers — DataTable itself is unchanged.
75
+ - The "is editing" flag lives in the store as a per-id slice
76
+ (`useAssetEditing`), so a rename re-renders only the affected cell/row and can
77
+ be started from the keyboard, a menu, or the imperative handle. In the list,
78
+ `F2` targets the sole selected row (the list has no roving focus).
79
+
80
+ Docs: new Mutations section + a live demo (rename / duplicate / delete / new
81
+ folder); the Context menus, Keyboard reference, and API tables are updated.
82
+
83
+ - [#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
84
+ controlled-history and store identity.
85
+
86
+ New features:
87
+ - **Context menus now work.** `renderItemContextMenu` / `renderEmptyContextMenu`
88
+ were typed, documented, and demoed but never rendered — right-click only
89
+ updated selection. Cells (and the empty surface) are now real `ContextMenu`
90
+ triggers. The item callback receives the whole selection when you right-click
91
+ a selected item, otherwise just the item under the cursor. Opt-in, so unused
92
+ menus add zero cost.
93
+ - **Loading skeletons.** `loadingItemCount` is no longer dead: grid-view loading
94
+ renders that many skeleton cells (sized to the current thumbnail) instead of a
95
+ lone spinner.
96
+ - **Error state.** New `error` (`true` → built-in message, or a custom node) and
97
+ `onErrorRetry` (adds a Retry button) props. Takes precedence over loading/empty.
98
+ - **Internationalization.** New `labels` prop overrides every built-in UI string
99
+ (search, sort/filter menus, view tooltips, empty/loading/error, list headers,
100
+ the live announcement). Merged onto English defaults, exported as
101
+ `DEFAULT_ASSET_BROWSER_LABELS` / `AssetBrowserLabels`.
102
+ - **Type-aware fallback icons** for files without a thumbnail (material/audio/
103
+ video/scene/text), and a **broken-image fallback** — a failed `thumbnailUrl`
104
+ now shows the type icon instead of the browser's broken-image glyph.
105
+
106
+ Fixes:
107
+ - **Controlled `currentFolderId` now stays in sync with the back/forward stack.**
108
+ An out-of-band change (deep link, "reveal in browser") is pushed onto history,
109
+ so `canGoBack`/Back resolve correctly instead of going stale.
110
+ - **Store identity** is created with `useState(() => …)` instead of `useMemo`,
111
+ guaranteeing stable slice subscriptions for the component's lifetime.
112
+ - **Marquee** gains an `onPointerCancel` handler so an interrupted/touch-cancelled
113
+ drag no longer leaves the rubber-band rect stuck active.
114
+
115
+ Accessibility:
116
+ - The virtualized grid now exposes true `aria-rowcount`/`aria-colcount` and
117
+ per-cell 1-based `aria-rowindex`/`aria-colindex`, and announces roving focus
118
+ via `aria-activedescendant` (works under windowing without moving DOM focus).
119
+
120
+ Docs: new Context menus, History, Internationalization, Error-state, Recipes, and
121
+ Tips & gotchas sections, plus four new live demos.
122
+
123
+ - [#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
124
+ deprecate `useDebouncedValue`.
125
+ - **New hook `useEventCallback`** — a stable callback identity for the
126
+ component lifetime that always invokes the most recently rendered version
127
+ (the `useEffectEvent` pattern). Backed by `useInsertionEffect`, so the
128
+ freshness guarantee holds even for consumers that read it during the same
129
+ commit — a child's `useLayoutEffect`, a synchronous store subscription, an
130
+ imperative handle. Now used internally by `useResizeObserver`,
131
+ `useDebouncedCallback`, `useThrottledCallback`, and `useListboxNav`.
132
+ - **New hook `useIsMounted`** — a stable getter reporting whether the
133
+ component is still mounted, for guarding state writes inside async
134
+ continuations that may resolve after unmount.
135
+ - **`useDeferredValue` pass** on the filter-heavy components: `CommandPalette`,
136
+ `Combobox`, `MultiSelect`, and `PropertyPanel` defer the query that drives
137
+ filtering, so the inputs stay controlled and responsive while large lists
138
+ re-filter.
139
+ - **`Combobox` fix:** the "create" row and exact-match detection now run off
140
+ the same deferred query as the filtered list, so editing toward an exact
141
+ match no longer briefly flashes a stray create row or skews the keyboard
142
+ navigation / `aria-activedescendant` indices.
143
+
144
+ **Breaking:** `CommandPalette` no longer accepts the `debounceMs` prop. Query
145
+ filtering is deferred through React's `useDeferredValue` instead of a fixed
146
+ debounce window — better interactivity on large command lists, with no tuning
147
+ needed. Remove any `debounceMs={…}` from `<CommandPalette>` usages.
148
+
149
+ **Deprecated:** `useDebouncedValue` is deprecated in favour of
150
+ `useDeferredValue` for keeping an input responsive while an expensive
151
+ derivation (filtering, search) lags behind it. It remains exported; use
152
+ `useDebouncedCallback` to debounce a _side effect_ rather than a rendered value.
153
+
154
+ - [#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
155
+ file-type icons and drag-and-drop import of OS files.
156
+
157
+ `FileTree` renders a `TreeView` internally and feeds it derived nodes — it does
158
+ **not** reimplement expansion, selection, or keyboard navigation. It takes a
159
+ nested `FileTreeNode[]` (`{ id, name, kind: 'file' | 'folder', ext?, path?,
160
+ children?, … }`), auto-assigns file-type icons by extension (image / media /
161
+ code / archive / text) plus open/closed folder glyphs, and exposes the same
162
+ controlled/uncontrolled expansion + selection model as `TreeView`.
163
+
164
+ New component + API:
165
+ - `<FileTree nodes={…} />` — `expandedIds` / `defaultExpandedIds` /
166
+ `onExpandedChange`, `selectedIds` / `defaultSelectedIds` / `selectionMode` /
167
+ `onSelectionChange`, `size`, `indent`, `showChevrons`, `showGuideLines`,
168
+ `maxHeight`, `emptyContent`, and `onNodeClick` / `onNodeDoubleClick` /
169
+ `onNodeContextMenu` (all mapped to `FileTreeNode`).
170
+ - `onImport({ files, targetFolder })` — fired when OS files are dropped onto a
171
+ folder (or the root, `targetFolder: null`). Presence enables the import drop
172
+ zone; the active target folder is highlighted while dragging. `FileTree`
173
+ reports intent only — apply the change and pass back fresh `nodes`.
174
+ - `resolveIcon(node, { expanded })` — per-node icon override; return `undefined`
175
+ to fall back to the built-in extension map. `renderNode` / `renderActions`
176
+ give full content control. Built-in icons follow the theme, and any icon takes
177
+ a `color` prop, so icons are fully colorable.
178
+ - `expandOnClick` (default `true`) — clicking anywhere on a folder row toggles
179
+ it open/closed, not just the chevron. Set `false` to require the chevron.
180
+ - `labels` (`Partial<FileTreeLabels>`) + exported `DEFAULT_FILE_TREE_LABELS` —
181
+ full i18n for the two built-in strings (`treeLabel` → the `role="tree"`
182
+ accessible name; `emptyLabel` → empty-state text). An explicit `aria-label` /
183
+ `emptyContent` still wins. `aria-label` / `aria-labelledby` are forwarded to
184
+ the tree element.
185
+ - Exported helpers `getFileIconKind` / `classifyExtension` / `getFileExtension`
186
+ and types `FileTreeNode`, `FileTreeNodeKind`, `FileTreeNodeState`,
187
+ `FileTreeImportPayload`, `FileTreeLabels`, `FileIconKind`.
188
+
189
+ Internal move / reorder is intentionally deferred for v1 (external import only);
190
+ the heavyweight internal-move case is covered by `AssetBrowser`.
191
+
192
+ TreeView (additive, backwards-compatible): new generic drop-target props
193
+ `dropTargetId` and `onNodeDragOver` / `onNodeDragLeave` / `onNodeDrop` (these
194
+ finally wire up the long-declared-but-unused `droppable` field on
195
+ `TreeNodeData`), plus `expandOnClick` (toggle a parent node on row click). All
196
+ usable on a plain `TreeView`, not just `FileTree`.
197
+
198
+ Icons: add `ImageIcon` (no image glyph existed; `AssetBrowser` relied on
199
+ thumbnails, but a tree has none). Fix `FolderOpenIcon` geometry — it occupied a
200
+ smaller area of the 24×24 viewBox than `FolderIcon`, so the open folder rendered
201
+ visibly smaller than the closed one; it now shares the closed folder's footprint.
202
+
203
+ Docs: new FileTree page with live demos (project tree, drag-and-drop import,
204
+ icon resolution, colored icons, selection, sizes, token re-skin, localized
205
+ labels) plus `## Styling` (theme-token + targeting-hook tables) and
206
+ `## Internationalization` sections.
207
+
208
+ - [#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
209
+ for editor and IDE-style apps. Renders a large, append-only entry stream
210
+ efficiently via `@tanstack/react-virtual`, with per-level coloring (built-in
211
+ `debug | info | warn | error` plus an extensible `levelConfig`), level filter
212
+ chips with live counts, text search with `useDeferredValue` and match
213
+ highlighting, follow-tail auto-scroll with a jump-to-bottom affordance,
214
+ optional timestamps and source tags, and per-line / copy-all support. Optional
215
+ row selection (`selectionMode="multiple"`) with click / Cmd-click / Shift-click,
216
+ keyboard shortcuts (Cmd/Ctrl+A, Cmd/Ctrl+C, Escape), and selection-aware copy.
217
+
218
+ Supports two data-flow models: a controlled `entries` prop, or an uncontrolled
219
+ imperative handle (`ref.append` / `appendMany` / `clear`) whose writes are
220
+ rAF-batched so high-frequency streaming collapses to one render per frame.
221
+ Use it batteries-included with the default toolbar, or compose the slots
222
+ (`LogView.Toolbar`, `LogView.Search`, `LogView.LevelFilter`, `LogView.Copy`,
223
+ `LogView.Clear`, `LogView.Body`). Single-line rows by default with an opt-in
224
+ `wrap` mode for measured variable-height lines.
225
+
226
+ - [#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
227
+ — the search placeholder and label, the level-filter group label, the clear /
228
+ copy / per-line copy labels, the jump-to-bottom button, the new-line counter,
229
+ the empty state, and the region label — is now overridable via `labels`, a
230
+ `Partial<LogViewLabels>`, so omitted keys keep their English default. The
231
+ new-line counter is a function (`(count) => string`) for per-locale
232
+ pluralization and word order. Explicit per-slot props (a slot's `aria-label`,
233
+ the search `placeholder`, `emptyState`, the root `aria-label`) still take
234
+ precedence. The English defaults are exported as `DEFAULT_LOG_VIEW_LABELS`.
235
+
236
+ - [#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
237
+ (`toolbar`, `search`, `levelFilter`, `copy`, `clear`, `body`, `footer`) to
238
+ restyle or reconfigure a single slot of the batteries-included layout without
239
+ rebuilding it from `children` — each entry is typed as that slot's props and its
240
+ `className` / `style` merge with the slot's own styles. Ignored when you provide
241
+ your own `children`. Establishes the library-wide `slotProps` convention
242
+ documented in `docs/component-patterns.md` (§15).
243
+
244
+ - [#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.
245
+
246
+ **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.
247
+ - **Menu** — `Menu.Trigger`, `Menu.Content`, `Menu.Item`, `Menu.Group`, `Menu.Separator`, `Menu.RadioGroup`, `Menu.RadioItem`, `Menu.CheckboxItem`, `Menu.Sub`, `Menu.SubTrigger`, `Menu.SubContent`.
248
+ - **Menu.Item** lays out as icon (left) · label (center) · `shortcut` / `endContent` (right), like MUI's `MenuItem`.
249
+ - **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.
250
+
251
+ ```tsx
252
+ <Menu>
253
+ <Menu.Trigger>Options</Menu.Trigger>
254
+ <Menu.Content>
255
+ <Menu.Item icon={<CopyIcon />} shortcut="⌘C" onClick={copy}>
256
+ Copy
257
+ </Menu.Item>
258
+ </Menu.Content>
259
+ </Menu>
260
+
261
+ <ContextMenu>
262
+ <ContextMenu.Trigger>
263
+ <Canvas />
264
+ </ContextMenu.Trigger>
265
+ <ContextMenu.Content>
266
+ <Menu.Item onClick={addNode}>Add Node</Menu.Item>
267
+ </ContextMenu.Content>
268
+ </ContextMenu>
269
+ ```
270
+
271
+ - [#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.
272
+ - 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).
273
+ - Type the item components against `HTMLElement` and drop the four `ref as React.Ref<HTMLElement>` casts, restoring ref type-safety.
274
+ - Enforce `closeOnClick` defaults (`Menu.Item` `true`, `Menu.RadioItem` / `Menu.CheckboxItem` `false`) in the components so the documented defaults are authoritative rather than inherited.
275
+ - Add an `onSelect` activation alias to `Menu.Item`, `Menu.RadioItem` and `Menu.CheckboxItem` (runs alongside `onClick` via one stable handler).
276
+ - Expose an imperative `ref` handle (`MenuHandle`) on the `Menu` / `ContextMenu` root with a `close()` method.
277
+ - Add a `render` prop to `ContextMenu.Trigger` so the trigger can render as your own element instead of a `display: contents` wrapper.
278
+ - Animate the popup on open/close (opacity + scale via Base UI's `data-starting-style` / `data-ending-style`).
279
+ - Render `Menu.Group` labels with typography on the label element itself, removing the extra `Text` wrapper.
280
+ - Wrap the row components (`Item`, `RadioItem`, `CheckboxItem`, `SubTrigger`, `Separator`) in `React.memo` to avoid re-rendering every row when the parent re-renders.
281
+ - 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.
282
+
283
+ - [#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).
284
+
285
+ **Core primitive (`<Minimap>`)** — fully controlled:
286
+ - Controlled API: pass `items`, `worldBounds`, current `transform`, and `viewportSize` from your `<Viewport>`; translate `onNavigate.worldPoint` into a `viewport.centerOn(...)` call.
287
+ - Item shapes: `rect`, `circle`, `line`, plus `custom` for caller-drawn shapes (each with per-item color and hover hit-testing).
288
+ - 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.
289
+ - Three pointer gestures (click, drag from empty, drag the rect) + tab-focusable keyboard navigation with arrow keys (Shift × 5 step). Each gesture independently toggleable.
290
+ - Single `onNavigate` callback with phase metadata (`'click' | 'drag-start' | 'drag' | 'drag-end'`) — enough to drive undo groups, smooth-follow, or analytics without multiple handlers.
291
+ - `renderOverlay(ctx, info)` escape hatch for global canvas annotations (playheads, selection regions, debug markers) drawn after items and before the viewport-rect shroud.
292
+
293
+ **Slot subcomponents** for chrome around the canvas body:
294
+ - `<Minimap.Title>` — `'top-outside'` or `'top-inside'` placement.
295
+ - `<Minimap.Footer>` — `'bottom-outside'` or `'bottom-inside'` placement.
296
+ - `<Minimap.Corner side="…">` — anchored in any of the four corners.
297
+
298
+ 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.
299
+
300
+ **Compound `<ViewportMinimap>`** — drop-in inside a `<Viewport>`:
301
+ - Reads live `transform` / `size` from `useViewportContext()`.
302
+ - Default `onNavigate` wires to the viewport handle's `centerOn`.
303
+ - `placement` accepts four corner presets or a custom anchor object.
304
+ - `responsive` prop tracks wrapper width via `ResizeObserver`.
305
+ - Recognized by `<Viewport>` as an overlay slot — no explicit `<ViewportOverlay>` wrapper needed.
306
+
307
+ **Helpers exported**:
308
+ - `computeBoundsFromItems(items, padding?)` — tight bbox of an items array.
309
+ - `useMinimapContext()` — children of `<Minimap>` read live state without re-implementing hit-testing.
310
+
311
+ Plus a comprehensive docs page with interactive demo composing all of the above.
312
+
313
+ - [#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.
314
+
315
+ **Core component (`<NodeGraph>`)** — fully controlled or uncontrolled across four data dimensions:
316
+ - `nodes`, `edges`, `groups`, and `selection` each emit the full next array via dedicated `onXChange` callbacks — no patches, no reducers, plain-`useState` compatible.
317
+ - 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.
318
+ - 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.
319
+ - Marquee selection on empty drag, click selects, Shift/Cmd/Ctrl + click toggles, marquee with the additive modifier unions.
320
+ - 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.
321
+ - 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.
322
+ - `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.
323
+ - Visual `groups` rendered as backdrop rectangles with optional labels under nodes and edges.
324
+
325
+ **Keyboard** — tab-focusable surface with:
326
+
327
+ | Keys | Action |
328
+ | ---------------------- | ---------------------------------------------------- |
329
+ | `←` `↑` `↓` `→` | Nudge selected nodes by 1 grid step (or 1 unit) |
330
+ | `Shift` + arrows | Nudge by 10× step |
331
+ | `Delete` / `Backspace` | Emit `onDelete(selection)` |
332
+ | `Enter` | Emit `onActivate(node)` for a single selection |
333
+ | `Cmd/Ctrl + A` | Select all nodes |
334
+ | `Esc` | Cancel an in-flight connection, else clear selection |
335
+
336
+ Focus inside editable descendants (`<input>`, `<textarea>`, `contentEditable`) bypasses the graph handler so typing in custom node bodies works as expected.
337
+
338
+ **Slot subcomponents** identified by a unique Symbol marker (`NODE_GRAPH_SLOT`) so they survive `React.memo`, HOCs, and minification:
339
+ - `<NodeGraph.Background variant="dots" | "grid" gap={...} />` — adaptive background canvas layer.
340
+ - `<NodeGraph.Minimap placement={...} width={...} title={...} />` — pre-wired overview, mirrors nodes into rect items, wires `centerOn` automatically.
341
+
342
+ **Imperative handle** (`NodeGraphHandle`):
343
+ - `fitToContent(padding?)`, `fitToSelection(padding?)`, `focusNode(id)`
344
+ - Viewport delegation: `centerOn`, `zoomToRect`, `getTransform`, `getSize`, `worldToScreen`, `screenToWorld`, `invalidate(layerName?)`
345
+
346
+ **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.
347
+
348
+ **Helpers exported**:
349
+ - `computeNodeGraphBounds`, `getNodeBox`, `getPortPosition`, `getBezierControlPoints`, `evaluateBezier`, `isPointNearBezier`, `resolvePortRef`, `resolveEdgeEndpoints`, `sideVector`, `snapDelta` — the same math used internally.
350
+
351
+ 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.
352
+
353
+ - [#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.
354
+
355
+ **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>`.
356
+
357
+ **`<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.
358
+
359
+ **`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.
360
+
361
+ **`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.
362
+
363
+ The Blueprint demo now uses all four, dropping its hand-rolled pin visual, connected-ports `useMemo`, manual delete/duplicate handlers, and four `useState` calls.
364
+
365
+ - [#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.
366
+
367
+ **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`.
368
+
369
+ **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.
370
+
371
+ **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.
372
+
373
+ **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.
374
+
375
+ - [#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.
376
+
377
+ Connection endpoints are now declared inline inside the node body via a new
378
+ `<NodeGraph.Port>` compound, not as a data field on the node. The library
379
+ measures the slot's DOM position and registers it as the anchor for any
380
+ edge that references the port id — the same DOM element the user clicks
381
+ is the exact point edges connect to, eliminating the previous "fake label
382
+ dot + outer port handle" double rendering.
383
+
384
+ **New**
385
+ - `<NodeGraph.Port id side dataType>` — slot rendered anywhere inside
386
+ `renderNode`. Mounts an inline `<span>` (default UE-style 12 px circle
387
+ / exec triangle), measures its center on mount + every layout shift,
388
+ feeds the position to the store, and wires connection-drag pointer
389
+ events. Pass `children` to replace the default chrome — `data-port-*`
390
+ attributes carry the live state (`source` / `candidate` / `invalid` /
391
+ `hovered`) for consumer CSS.
392
+ - Hover state is now actually wired: `<NodeGraph.Port>` emits
393
+ `hoveredPort` on enter/leave; `NodeGraphNodeView` emits `hoveredNodeId`.
394
+ Previously these fields existed on `NodeGraphHoverState` but no code
395
+ dispatched them, so `ctx.hovered` / `ctx.isHovered` were always
396
+ `false`.
397
+ - Node auto-sizing: when `node.width`/`height` are omitted, the library
398
+ reads the rendered DOM size for hit-testing, marquee, fitToContent,
399
+ and minimap geometry. Override per-node by setting `width`/`height`
400
+ explicitly.
401
+ - `NodeGraphConnectionValidationInfo` now exposes `sourceDataType` and
402
+ `targetDataType` populated from the registered slot metadata — no
403
+ consumer-side port index needed for type-matched validation.
404
+ - `NodeGraphStore` adds two new slices with subscribe/get APIs:
405
+ `portPositions` (`getPortPosition`, `setPortPosition`,
406
+ `removePortPosition`, `subscribePortPositions`) and `measuredSizes`
407
+ (`getMeasuredSize`, `setMeasuredSize`, `clearMeasuredSize`,
408
+ `subscribeMeasuredSizes`). Both auto-GC on `setData` when the
409
+ corresponding node is removed.
410
+
411
+ **Removed**
412
+ - `NodeGraphNode.ports` field. Declare ports as `<NodeGraph.Port>`
413
+ children inside `renderNode` instead.
414
+ - `NodeGraphPort` type, `NodeGraphRenderPort`, `NodeGraphPortRenderCtx`,
415
+ and the `renderPort` prop. Replaced by the slot — `children` of
416
+ `<NodeGraph.Port>` are the consumer-supplied visual.
417
+ - `resolvePortOffsets` and the offset-based `getPortPosition` math
418
+ helpers. Port positions are now DOM-measured.
419
+
420
+ **Migration**
421
+
422
+ ```diff
423
+ - const nodes = [{
424
+ - id: 'a', position: { x: 0, y: 0 },
425
+ - ports: [
426
+ - { id: 'in', side: 'left', dataType: 'exec', offset: 0.3 },
427
+ - { id: 'out', side: 'right', dataType: 'float' },
428
+ - ],
429
+ - }];
430
+
431
+ - <NodeGraph
432
+ - nodes={nodes}
433
+ - renderPort={(port, node, ctx) => <MyPin port={port} ctx={ctx} />}
434
+ - />
435
+
436
+ + const nodes = [{ id: 'a', position: { x: 0, y: 0 } }];
437
+
438
+ + <NodeGraph
439
+ + nodes={nodes}
440
+ + renderNode={(node, ctx) => (
441
+ + <MyBody>
442
+ + <Row>
443
+ + <NodeGraph.Port id="in" side="left" dataType="exec" />
444
+ + Execute
445
+ + </Row>
446
+ + <Row reverse>
447
+ + Result
448
+ + <NodeGraph.Port id="out" side="right" dataType="float" />
449
+ + </Row>
450
+ + </MyBody>
451
+ + )}
452
+ + />
453
+ ```
454
+
455
+ `NodeGraphEdge` shape is unchanged (`{ id, source: { node, port }, target }`).
456
+
457
+ - [#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.
458
+
459
+ **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.
460
+
461
+ **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.
462
+
463
+ - [#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
464
+ editor bar. It specializes `Breadcrumbs`: pass a delimited string or a
465
+ structured `PathSegment[]` and it renders clickable segments, leaning on
466
+ Breadcrumbs for separators, overflow collapsing, and accessibility. Folder
467
+ crumbs navigate via `onNavigate(path, segment, index)` and the final segment is
468
+ the current location (`aria-current`). The current path is controllable
469
+ (`value` / `defaultValue`); uncontrolled, clicking an ancestor truncates the
470
+ trail. Provide `getSiblings` to add a VS-Code-style dropdown that swaps a
471
+ segment for one of its siblings, plus `rootIcon`, per-segment icons, and a
472
+ `delimiter` for non-`/` paths. Path splitting/joining lives in a pure,
473
+ unit-tested `pathUtils` module.
474
+
475
+ Extend `BreadcrumbItem` with an `endContent` slot — content rendered after the
476
+ label, outside the navigable link/button, so a trailing affordance (such as
477
+ PathBar's sibling-dropdown caret) can attach without breaking the crumb's
478
+ click target or the Breadcrumbs collapse logic.
479
+
480
+ - [#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.
481
+ - 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.
482
+ - 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.
483
+ - Canvas-rendered keyframes with DOM chrome, drawn from a per-slice `useSyncExternalStore` store with the theme resolved per frame.
484
+ - 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.
485
+ - 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.
486
+ - 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).
487
+ - 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`).
488
+ - 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).
489
+ - Also exports `framesToTimecode`, the `TimelineGroup` type, and the `useTimelineContext` / `useTimelineGeometry` / `useTimelinePlayhead` / `useTimelineSelection` hooks.
490
+
491
+ - [#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.
492
+ - 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.
493
+ - `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).
494
+ - Consolidate keyframe-key helpers into one `timelineSelection` module (`selectionKey` / `selectionKeySet` / `sameRef`) — removes three near-duplicate implementations across `Timeline`, `timelineEdits`, and `TimelineStore`.
495
+ - 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.
496
+ - 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.
497
+ - Drop dead exports: `framesPerPixel`, `trackTop`, `yToTrackIndex` (`timelineCoords`), `rowIndexAtY` (`timelineLayout`), and the unimplemented `minKeyframeDistance` prop on `TimelineProps`.
498
+ - 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.
499
+ - 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.
500
+
501
+ - [#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
502
+ by `useSyncExternalStore`. Tracks a concurrent-safe cursor over an arbitrary
503
+ entry type, exposes `canGoBack` / `canGoForward` flags, mirrors browser
504
+ semantics (push truncates the forward branch), and supports an `enabled`
505
+ toggle for opt-in history UIs. `AssetBrowser`'s `history` feature is now
506
+ composed on top of it through an internal `useAssetNavigation` hook that
507
+ encapsulates the parent-folder keyboard shortcut and the `onNavigate` /
508
+ `onItemOpen` plumbing.
509
+
510
+ - [#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).
511
+ - `Viewport` with controlled/uncontrolled transform (`{ x, y, zoom }`), configurable pan (button + space-key), wheel/pinch zoom-toward-cursor, and optional marquee selection.
512
+ - `ViewportLayer` — perf-isolated canvas layers with per-layer `invalidateOn` deps and `handle.invalidate(name)`.
513
+ - `ViewportWorld` — HTML children positioned in world coordinates (follow pan/zoom).
514
+ - `ViewportOverlay` — HTML children pinned to the viewport (toolbars, minimap slot).
515
+ - `useViewportContext()` for live `transform` / `size` / `handle` access from any child.
516
+ - Imperative `ViewportHandle` — `fitToContent`, `zoomToRect`, `centerOn`, `getTransform`, `getSize`, `invalidate`.
517
+ - Pure helpers: `worldToScreen`, `screenToWorld`, `getViewportPointerPosition`, `computeFitTransform`, `computeCenterTransform`, `computeZoomTowardPivot`, `normalizeRect`.
518
+ - Pan lifecycle events (`onPanStart`, `onPanEnd` with end velocity) and zoom lifecycle events for inertia/idle recipes.
519
+ - Docs include recipes for snap-to-zoom, minimap, and inertia on top of the v1 surface.
520
+
521
+ ### Patch Changes
522
+
523
+ - [#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
524
+ root file goes from ~470 → ~370 lines and the grid from ~300 → ~225, with no
525
+ public API changes:
526
+ - `useAssetMarqueeGesture` — pointer-down/move/up + RAF throttling + hit-test
527
+ for rubber-band selection (lifted out of `AssetBrowserGrid`).
528
+ - `useAssetBrowserViewState` — owns the five `useControlledState` pairs plus
529
+ derived `displayed` / `filterableTypes` / `thumbnailSizePx` / `marqueeEnabled`.
530
+ - `useAssetBrowserHandle` — wires `useImperativeHandle` and folds in the
531
+ `scrollToItem` fallback logic.
532
+ - `AssetBrowserContent` — loading / empty / grid / list switch.
533
+ - `AssetBrowserStatusBar` — the optional bottom bar with the thumbnail-size
534
+ control.
535
+ - `DEFAULT_LIST_COLUMNS` is now a module-level constant in `AssetBrowserList`
536
+ instead of a function rebuilt inside `useMemo`.
537
+
538
+ - [#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
539
+ drop-target state now flow through per-id store slices, so selecting an item or
540
+ moving focus re-renders only the affected cells instead of the whole grid, and
541
+ search/sort/filter chrome no longer re-renders cells on every keystroke. Wire up
542
+ the previously inert `marquee` and `history` props (Back/Forward controls plus
543
+ `Backspace` / `Alt+ArrowUp` to navigate to the parent folder), keep grid cells
544
+ interactive when a custom `renderItem` is supplied, make `scrollToItem` work
545
+ under virtualization, track shift-range anchors by id so ranges survive a
546
+ re-sort, and honour `prefers-reduced-motion`.
547
+
548
+ - [#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,
549
+ strict-type-checked, import-x, jsx-a11y) introduced in #87.
550
+ - The selection, navigation, drag-and-drop, marquee, grid-keyboard and
551
+ imperative-handle hooks built their stable handlers with `useEffectEvent`
552
+ and then returned them / listed them in dependency arrays — both forbidden
553
+ by the Compiler-aware rule set. They now read live props/state through
554
+ `useLatest` refs and expose genuinely stable `useCallback`s, matching
555
+ `component-patterns.md` rules #3/#11 and the Timeline migration.
556
+ - Removed the `useStableRenderFn` helper: its render-phase ref write violated
557
+ `react-hooks/refs`. Render-props are forwarded through the item context as-is
558
+ (memoize them, like `TreeView`, to avoid per-cell re-renders).
559
+ - The root carries `role="region"` and grid cells keep `role="gridcell"`;
560
+ keyboard interaction stays centralized at the grid level.
561
+
562
+ No public API or behavior change.
563
+
564
+ - [#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.
565
+
566
+ Tooling: enabled `eslint-plugin-react-hooks` v7 (full Compiler-aware
567
+ `recommended`), `typescript-eslint` `strict-type-checked`,
568
+ `eslint-plugin-import-x` (no-cycle, order, no-duplicates, type-specifier
569
+ style), `eslint-plugin-jsx-a11y`, and enforcement of the mandated `@/` import
570
+ alias. `restrict-template-expressions` is tuned with `allowNumber: true`. Rules
571
+ apply to `src` only; test files keep the prior type-checked baseline. See
572
+ `docs/component-patterns.md` §14.
573
+
574
+ Behavior-affecting fixes (no public API changes):
575
+ - Refs read during render are now reactive state, so values driven by them
576
+ update correctly: `ScrollArea` scrollbar `aria-valuenow` and thumb dragging
577
+ state, `CartesianPicker` / `ViewportGizmo` / `CurveEditor` `isDragging`,
578
+ `Combobox` filtering while editing, `MenuBar` registered-menu tracking, and
579
+ `useListboxNav` navigable indices.
580
+ - `Tooltip` no longer mutates the caller-provided `rootProps` object.
581
+ - Accessibility: interactive elements that had only pointer handlers now expose
582
+ keyboard handlers, focusability, and valid ARIA across controls, editor,
583
+ navigation, feedback, layout, and primitive components.
584
+ - Removed dead conditional branches and redundant optional chaining flagged by
585
+ `no-unnecessary-condition`, and replaced deprecated APIs.
586
+
587
+ - [#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.
588
+ - **ViewportGizmo `upAxis="z-up"`** now actually renders the z-up convention
589
+ (Blender/Unreal/CAD): the Z arm points up and Y points into the scene.
590
+ Previously `upAxis` only affected which preset view an axis click snapped to,
591
+ so `y-up` and `z-up` looked identical.
592
+ - **FloatingPanel** is now positioned `absolute` within its `FloatingManager`
593
+ region instead of `fixed` to the viewport. `FloatingManager` renders a
594
+ relative, full-size, pointer-events-pass-through container, and dragging is
595
+ delta-based and clamped to that container. This fixes panels from multiple
596
+ managers stacking at the same viewport coordinates and escaping their
597
+ container.
598
+
599
+ - [#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
600
+ icon, and source tag render as fixed-width columns so the message starts at the
601
+ same x on every row instead of shifting with the source-tag width — it reads
602
+ like a table / terminal log.
603
+
604
+ A column is only reserved when its field is actually present in the data: if
605
+ nothing has a timestamp or source there is no column at all (the message sits
606
+ right after the icon, as before), but once at least one entry uses the field
607
+ every row reserves it — including rows that omit it — so they stay aligned. The
608
+ timestamp and source column widths default to `88px` and `52px` and are
609
+ overridable via the `--etui-logview-timestamp-col-width` /
610
+ `--etui-logview-source-col-width` CSS custom properties on the root.
611
+
612
+ - [#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:
613
+ - **Stable auto-assigned ids.** Id-less entries now keep their key across a
614
+ controlled `entries` re-mirror — the store caches an id per entry object
615
+ instead of minting a fresh monotonic id on every `setEntries`. Rows no longer
616
+ remount and id-based selection survives updates. Removed the unused `seq`
617
+ field from `ResolvedLogEntry`.
618
+ - **Levels added at runtime are visible by default.** Visibility is tracked as
619
+ the set of _hidden_ levels, so a level introduced later via `levelConfig`
620
+ shows up active, while an explicit toggle-off persists across `levelOrder`
621
+ changes.
622
+ - **Cheaper rows.** Per-level definitions are resolved through a memoized cache
623
+ so the memoized `LogRow` is no longer invalidated by a fresh definition object
624
+ each render.
625
+ - **Scoped text-selection guard.** A row click / copy shortcut is only
626
+ suppressed by a text selection inside the log body, not one elsewhere on the
627
+ page.
628
+ - **Internal cleanup.** Row selection + keyboard handling moved into a
629
+ `useLogSelection` hook; the shared recipe `level` variant is derived via a
630
+ single `levelVariant` helper.
631
+
632
+ - [#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.
633
+
634
+ - [#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).
635
+
636
+ **Performance**
637
+ - 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.
638
+ - 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).
639
+ - 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.
640
+ - 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.
641
+
642
+ **Refactor**
643
+ - 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.
644
+ - Extracted edge hover + endpoint-grab handling out of `NodeGraph` into `useNodeGraphEdgeInteraction`.
645
+ - 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.
646
+
647
+ - [#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`
648
+ pattern. Effect Events are only valid when called from inside an Effect; the
649
+ Timeline was using them as DOM/JSX event handlers and store callbacks, relying
650
+ on a stable identity that `useEffectEvent` does not guarantee (its identity
651
+ intentionally changes every render). Gesture handlers, the minimap pointer/draw
652
+ handlers, and the `Timeline` track/seek/zoom callbacks now read live state
653
+ through `useLatest` refs and expose genuinely stable `useCallback`s, matching
654
+ `component-patterns.md` rules #3/#11 and the `useViewportGestures` reference.
655
+ The playback rAF loop keeps `useEffectEvent` — the one place it is correct
656
+ (called only from inside the effect's timer). Also reuse the shared `clamp` and
657
+ `valueInset` helpers instead of duplicated inline math, and align the minimap
658
+ wrapper with the library's `cx` + `role="region"` conventions. No public API
659
+ change.
660
+
661
+ - [#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`:
662
+ - 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.
663
+ - 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.
664
+
665
+ - [#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:
666
+ - The **playhead line is now grabbable along its whole height**. Previously a
667
+ grab landed as `group` over a group-header row and was swallowed by the
668
+ `loop-body` region on the ruler; the hit-test now returns `playhead` on its
669
+ thin pick band over group rows and on the ruler (it beats the wide loop body,
670
+ while loop edges still win). The head also glows + shows an `ew-resize`
671
+ cursor on hover there.
672
+ - **Loop region edges and body highlight on hover** — the hovered edge thickens
673
+ with a glow (cursor `ew-resize`), the body brightens (cursor `grab`), so the
674
+ draggable affordances are discoverable. Backed by a new `hoverLoop` store
675
+ slice. Alt+drag on the ruler keeps creating / re-drawing the loop (now also
676
+ when the drag starts on the playhead line).
677
+ - `trackScale` gains **`minLaneHeight`** (default `48`): lanes shorter than this
678
+ skip the scale entirely, so a collapsed graph-mode track no longer renders
679
+ overlapping min/mid/max labels.
680
+
681
+ - [#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:
682
+ - **`loopStrip`** (default `false`) — adds a thin dedicated band directly
683
+ under the time ruler. A plain drag on the strip creates / re-draws the
684
+ loop region, no Alt needed. The main ruler keeps its scrub behaviour, so
685
+ scrub vs loop-create stop fighting on a single zone.
686
+ - **`loopHandles`** (default `'edges'`) — `'edges'` keeps the existing
687
+ full-height vertical bars on each loop edge; `'brackets'` draws compact
688
+ `[ ]` markers with serifs in the chrome (ruler + strip) area instead. No
689
+ full-height bars across the track area, and the edge pick zone widens so
690
+ the markers are easier to grab.
691
+
692
+ Both compose: the Animation Editor showcase enables them together. Drawing
693
+ and hit-test now resolve a unified `chromeHeight = rulerHeight +
694
+ loopStripHeight` so screen↔content Y conversions stay correct for marquee
695
+ selection, double-click add, tangent drags and scrolling.
696
+
697
+ ## 0.9.0
698
+
699
+ ### Minor Changes
700
+
701
+ - [#70](https://github.com/SebastianWebdev/entangle-ui/pull/70) [`729f863`](https://github.com/SebastianWebdev/entangle-ui/commit/729f8638f9f53ed268489d564302c6c6743f6103) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - Add `Combobox` component (`@/components/controls/Combobox`). Single-value select with an editable input — filters the option list as the user types using the built-in fuzzy matcher (`fuzzyScore` from CommandPalette), configurable via `filterFn`. Supports controlled and uncontrolled modes, optional `freeSolo` for accepting arbitrary input, optional `creatable` mode that surfaces a `Create "<query>"` row and invokes `onCreate`, an async-friendly `loading` state, optional `openOnFocus`, optional `clearable` button, and shares keyboard navigation with MultiSelect through `useListboxNav`.
702
+
703
+ - [#70](https://github.com/SebastianWebdev/entangle-ui/pull/70) [`729f863`](https://github.com/SebastianWebdev/entangle-ui/commit/729f8638f9f53ed268489d564302c6c6743f6103) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - Add `CommandPalette` component (`@/components/feedback/CommandPalette`). Search-driven command list shown as a centred floating dialog. Type to fuzzy-filter (subsequence + word-boundary scoring), ArrowUp/Down to navigate, Enter to run, Escape to close. Hover mirrors keyboard selection. Groups, descriptions, leading icons, and `<Kbd>`-rendered shortcuts; supports a custom `renderItem` for full layout overrides. Recent selections are tracked in localStorage when `recentKey` is provided (graceful fallback when unavailable). Component does not bind a global hotkey — wire `useHotkey('Mod+K', open)` in the consumer. Also exports the underlying `fuzzyScore` and `fuzzyFilter` helpers.
704
+
705
+ - [#70](https://github.com/SebastianWebdev/entangle-ui/pull/70) [`729f863`](https://github.com/SebastianWebdev/entangle-ui/commit/729f8638f9f53ed268489d564302c6c6743f6103) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - Add `DataTable` component (`@/components/data/DataTable`) — a new `data` category. Sortable columns (three-state cycle asc → desc → none, controllable via `sort` / `onSortChange` / `manualSort`), single or multiple row selection with controlled and uncontrolled modes, custom `rowKey`, three densities (`comfortable` / `compact` / `dense`), sticky header, optional sticky-left columns via per-column `sticky`, optional column resizing via `resizableColumns`, custom row renderer, empty state slot, loading state with skeleton rows, and row virtualization auto-enabled above 100 rows (opt-in / opt-out via `virtualized`). Built on `@tanstack/react-virtual` (added as a peer dependency) and uses CSS grid under `role="grid"` so columns line up across the sticky header and individual virtualized rows. Keyboard navigation supports ArrowUp/Down, Home/End, PageUp/PageDown, Space (toggle in multi mode) and Enter (activate, toggle in single mode).
706
+
707
+ - [#70](https://github.com/SebastianWebdev/entangle-ui/pull/70) [`729f863`](https://github.com/SebastianWebdev/entangle-ui/commit/729f8638f9f53ed268489d564302c6c6743f6103) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - Add `Drawer` component (`@/components/feedback/Drawer`). Anchored sliding panel for filters, navigation, or detail views. Compound API (`Drawer.Header`, `Drawer.Body`, `Drawer.Footer`, `Drawer.CloseButton`), four anchors (left/right/top/bottom), modal and non-modal modes, focus trap when modal, optional close on overlay click and Escape, slide-in/out animations honoring `prefers-reduced-motion`, portal by default, size presets plus arbitrary CSS values.
708
+
709
+ - [#70](https://github.com/SebastianWebdev/entangle-ui/pull/70) [`729f863`](https://github.com/SebastianWebdev/entangle-ui/commit/729f8638f9f53ed268489d564302c6c6743f6103) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - Add `FileUploader` component (`@/components/controls/FileUploader`). Drag-and-drop file uploader with click-to-browse fallback, MIME type and extension matching via `accept`, `maxSize`/`minSize`/`maxFiles` enforcement with reasoned rejections through `onReject`, custom synchronous `validate`, controlled and uncontrolled item lists, optional single-file mode, and a per-row UI showing file name, size, status badge (`pending` / `uploading` / `done` / `error`), and an animated progress bar. The component is presentational around the file list — the consumer drives the actual upload via `onFilesAdd` and reflects progress back through `value`.
710
+
711
+ - [#70](https://github.com/SebastianWebdev/entangle-ui/pull/70) [`729f863`](https://github.com/SebastianWebdev/entangle-ui/commit/729f8638f9f53ed268489d564302c6c6743f6103) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - Add `HoverCard` component (`@/components/primitives/HoverCard`). Hover- and focus-driven floating panel for previews. `HoverCard.Trigger` + `HoverCard.Content` compound, configurable `openDelay` (400ms) and `closeDelay` (150ms), safe-polygon based cursor handover from trigger to content (toggle with `disableSafePolygon`), portal by default, controlled and uncontrolled modes, `disabled` flag.
712
+
713
+ - [#70](https://github.com/SebastianWebdev/entangle-ui/pull/70) [`729f863`](https://github.com/SebastianWebdev/entangle-ui/commit/729f8638f9f53ed268489d564302c6c6743f6103) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - Add `MultiSelect` component (`@/components/controls/MultiSelect`). Multi-value select that renders chosen options as inline chips inside the trigger, with a `+N more` overflow badge once `maxInlineChips` is exceeded. Supports flat or grouped options, optional searchable mode with custom `filterFn`, controlled and uncontrolled modes, keyboard navigation through `useListboxNav`, configurable `max` cap, optional `clearable` button, and `closeOnSelect` to dismiss the dropdown after each pick. Three sizes, three variants, full label/helper/error wiring, and form-friendly hidden input via `name`.
714
+
715
+ - [#70](https://github.com/SebastianWebdev/entangle-ui/pull/70) [`729f863`](https://github.com/SebastianWebdev/entangle-ui/commit/729f8638f9f53ed268489d564302c6c6743f6103) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - Add `Pagination` component (`@/components/navigation/Pagination`). Page navigator with sibling/boundary ellipsis logic (MUI-style), 1-based pages, controlled and uncontrolled modes, optional first/last jump buttons, optional prev/next, three sizes, customisable aria labels.
716
+
717
+ - [#70](https://github.com/SebastianWebdev/entangle-ui/pull/70) [`729f863`](https://github.com/SebastianWebdev/entangle-ui/commit/729f8638f9f53ed268489d564302c6c6743f6103) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - Add `TagInput` component (`@/components/controls/TagInput`). Multi-value text input that captures a list of strings as removable chips. Controlled and uncontrolled modes via `value`/`defaultValue`/`onChange`, configurable commit keys (`Enter`, `Comma`, `Space`, `Tab`), optional `addOnBlur`, duplicate handling, `max` cap, custom `validate`/`normalize` callbacks with reason reporting through `onValidate`, custom chip rendering via `renderTag`, `Backspace` removes the trailing tag when the draft is empty, paste with separators is split into multiple tags, three sizes, three variants, and full label/helper/error wiring.
718
+
719
+ - [#70](https://github.com/SebastianWebdev/entangle-ui/pull/70) [`729f863`](https://github.com/SebastianWebdev/entangle-ui/commit/729f8638f9f53ed268489d564302c6c6743f6103) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - Add `useListboxNav` hook (`@/hooks/useListboxNav`). Generic keyboard navigation primitive for listbox-like surfaces (Select, MultiSelect, Combobox, CommandPalette). Tracks an `activeIndex`, skips disabled items, and exposes a single `handleKeyDown` covering ArrowUp/ArrowDown/Home/End/Enter/Escape with optional looping. The hook is purely logical — consumers render the list and bind the handler to an input or the listbox container. Resets the active index when the items array changes by reference.
720
+
721
+ - [#70](https://github.com/SebastianWebdev/entangle-ui/pull/70) [`729f863`](https://github.com/SebastianWebdev/entangle-ui/commit/729f8638f9f53ed268489d564302c6c6743f6103) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - Fixes and additions for the 0.9 release:
722
+ - `Radio` — inner dot at `size="md"` is now 6 px instead of 7 px so the dot stays pixel-centered inside the 14 px outer ring.
723
+ - `Accordion` — new `width` prop (defaults to `"100%"`); the accordion now keeps a stable width regardless of which item is expanded.
724
+ - `Alert` — new `width` prop (defaults to `"100%"`); long unbreakable content now wraps via `overflow-wrap: anywhere` instead of stretching the alert.
725
+ - `SkeletonLayout` — new component (`@/components/feedback/Skeleton`) with pre-built loading patterns: `card`, `list`, `table`, `grid`, `chat`. Each variant composes the existing `Skeleton` primitive with sensible defaults; configurable `count`, `columns`, `animation`, and `width`. Grid defaults to `animation="none"` for dense surfaces.
726
+
727
+ - [#70](https://github.com/SebastianWebdev/entangle-ui/pull/70) [`729f863`](https://github.com/SebastianWebdev/entangle-ui/commit/729f8638f9f53ed268489d564302c6c6743f6103) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - Centralise every icon through the shared `Icon` primitive — no component defines SVGs inline anymore.
728
+
729
+ **`Icon` primitive — custom size support**
730
+
731
+ `size` now accepts any number (interpreted as pixels) or any CSS length string (`'1.5em'`, `'24px'`, …) in addition to the `'sm' | 'md' | 'lg'` tokens. Custom color via any CSS string was already supported. This unlocks reuse of library icons in chip-sized and inline-text contexts that previously needed bespoke SVGs.
732
+
733
+ **New icons**
734
+ - `FirstIcon`, `LastIcon` — skip-to-edge chevrons for paginators
735
+ - `CloudUploadIcon` — cloud with up-arrow for upload drop zones
736
+ - `ExternalLinkIcon` — box with arrow leaving the top-right corner
737
+ - `UnlinkIcon` — broken chain (pair with `LinkIcon` for coupled-value toggles)
738
+
739
+ **Inline SVG removal**
740
+
741
+ Every component that drew its own X / chevron / check / upload / unlink icon now imports the matching `*Icon` from `@/components/Icons` and forwards the appropriate `size` and `decorative` props:
742
+ - Form controls — `Combobox`, `Select`, `MultiSelect` (chevron + check)
743
+ - Primitives — `Checkbox` (check + minus), `Collapsible` (chevron), `Link` (external link)
744
+ - Layout — `Accordion` trigger (chevron)
745
+ - Controls — `VectorInput` (link + unlink), `FileUploader` (cloud upload), `Pagination` (first / last / prev / next)
746
+ - Feedback — `Toast` (info / success / warning / error)
747
+ - Editor — `PropertyInspector` (chevron + undo)
748
+
749
+ Left intact: `Stat` delta arrows (no library match for the bar + chunky-arrow set), `Tooltip` arrow tail (not a typical icon shape), `CircularProgress` ring, and the `Mini*Icon` family in `ChatPanel/ChatIcons.tsx` whose usage sites live in unowned files — all flagged for a separate follow-up.
750
+
751
+ ### Patch Changes
752
+
753
+ - [#70](https://github.com/SebastianWebdev/entangle-ui/pull/70) [`729f863`](https://github.com/SebastianWebdev/entangle-ui/commit/729f8638f9f53ed268489d564302c6c6743f6103) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - Three follow-up fixes/additions for the 0.9 release based on review feedback:
754
+ - `Combobox` — the open/close trigger rotated the entire button instead of just the chevron icon. The rotation is now scoped to a span wrapping the icon, so the click target stays stable.
755
+ - `Combobox` — the clear button now uses the shared `CloseIcon` primitive instead of a hand-rolled inline SVG, which rendered with a noticeable seam at the cross point.
756
+ - `DataTable` — multi-select tables now support range selection. Hold `Shift` while clicking a row's checkbox (or pressing `Space` on a focused row) to toggle every row between the last anchor and the target. Disabled rows are skipped. Behavior is on by default for `selectionMode="multiple"`.
757
+
758
+ - [#70](https://github.com/SebastianWebdev/entangle-ui/pull/70) [`729f863`](https://github.com/SebastianWebdev/entangle-ui/commit/729f8638f9f53ed268489d564302c6c6743f6103) Thanks [@SebastianWebdev](https://github.com/SebastianWebdev)! - Replace inline X / close icon SVGs across the library with the shared `CloseIcon` primitive.
759
+
760
+ The hand-rolled SVGs used a single `M…L…M…L…` path for the cross stroke, which rendered with a visible seam at the center on most platforms (same root cause as the earlier Combobox fix). The library `CloseIcon` uses two separate `<line>` elements through the `Icon` primitive, so the cross is clean and stays consistent across components.
761
+
762
+ Touched components:
763
+ - `MultiSelect` — chip remove button and clear-all button
764
+ - `Select` — clear-all button
765
+ - `TagInput` — chip remove button
766
+ - `Drawer` — header close button and `Drawer.CloseButton`
767
+ - `Dialog` — header close button
768
+ - `Popover` — `PopoverClose`
769
+ - `Toast` — dismiss button
770
+ - `FileUploader` — the inline `TrashIcon` now uses the shared `TrashIcon` primitive
771
+
772
+ No public-API changes — only the rendered glyph differs.
773
+
3
774
  ## 0.8.2
4
775
 
5
776
  ### Patch Changes