entangle-ui 0.8.1 → 0.9.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 (260) hide show
  1. package/CHANGELOG.md +83 -0
  2. package/dist/esm/assets/src/components/controls/Combobox/Combobox.css.ts.vanilla-B7B5ttkq.css +210 -0
  3. package/dist/esm/assets/src/components/controls/FileUploader/FileUploader.css.ts.vanilla-T4nRiI7s.css +194 -0
  4. package/dist/esm/assets/src/components/controls/MultiSelect/MultiSelect.css.ts.vanilla-CdYayqaF.css +311 -0
  5. package/dist/esm/assets/src/components/controls/TagInput/TagInput.css.ts.vanilla-hnkMOPp1.css +141 -0
  6. package/dist/esm/assets/src/components/data/DataTable/DataTable.css.ts.vanilla-CmRgtjIW.css +231 -0
  7. package/dist/esm/assets/src/components/feedback/Alert/{Alert.css.ts.vanilla-CRAI-xHx.css → Alert.css.ts.vanilla-CfCDsIEg.css} +2 -0
  8. package/dist/esm/assets/src/components/feedback/CommandPalette/CommandPalette.css.ts.vanilla-DGdrLKYZ.css +160 -0
  9. package/dist/esm/assets/src/components/feedback/Drawer/Drawer.css.ts.vanilla-CLPTOUrA.css +247 -0
  10. package/dist/esm/assets/src/components/feedback/Skeleton/SkeletonLayout.css.ts.vanilla-Db7bpqiI.css +75 -0
  11. package/dist/esm/assets/src/components/feedback/Stat/Stat.css.ts.vanilla-GBk3JAMB.css +69 -0
  12. package/dist/esm/assets/src/components/layout/Card/Card.css.ts.vanilla-Ducn1gUX.css +124 -0
  13. package/dist/esm/assets/src/components/navigation/Pagination/Pagination.css.ts.vanilla-CmlFyyjh.css +103 -0
  14. package/dist/esm/assets/src/components/primitives/HoverCard/HoverCard.css.ts.vanilla-BYT0qbLp.css +41 -0
  15. package/dist/esm/components/Icons/ArchiveIcon.js +30 -0
  16. package/dist/esm/components/Icons/ArchiveIcon.js.map +1 -0
  17. package/dist/esm/components/Icons/BugIcon.js +30 -0
  18. package/dist/esm/components/Icons/BugIcon.js.map +1 -0
  19. package/dist/esm/components/Icons/BuildingIcon.js +30 -0
  20. package/dist/esm/components/Icons/BuildingIcon.js.map +1 -0
  21. package/dist/esm/components/Icons/ChevronLeftIcon.js +30 -0
  22. package/dist/esm/components/Icons/ChevronLeftIcon.js.map +1 -0
  23. package/dist/esm/components/Icons/ChevronRightIcon.js +30 -0
  24. package/dist/esm/components/Icons/ChevronRightIcon.js.map +1 -0
  25. package/dist/esm/components/Icons/CloudUploadIcon.js +24 -0
  26. package/dist/esm/components/Icons/CloudUploadIcon.js.map +1 -0
  27. package/dist/esm/components/Icons/DotsHorizontalIcon.js +30 -0
  28. package/dist/esm/components/Icons/DotsHorizontalIcon.js.map +1 -0
  29. package/dist/esm/components/Icons/DotsVerticalIcon.js +30 -0
  30. package/dist/esm/components/Icons/DotsVerticalIcon.js.map +1 -0
  31. package/dist/esm/components/Icons/ExternalLinkIcon.js +26 -0
  32. package/dist/esm/components/Icons/ExternalLinkIcon.js.map +1 -0
  33. package/dist/esm/components/Icons/FileTextIcon.js +30 -0
  34. package/dist/esm/components/Icons/FileTextIcon.js.map +1 -0
  35. package/dist/esm/components/Icons/FirstIcon.js +23 -0
  36. package/dist/esm/components/Icons/FirstIcon.js.map +1 -0
  37. package/dist/esm/components/Icons/FolderCogIcon.js +30 -0
  38. package/dist/esm/components/Icons/FolderCogIcon.js.map +1 -0
  39. package/dist/esm/components/Icons/FolderOpenIcon.js +30 -0
  40. package/dist/esm/components/Icons/FolderOpenIcon.js.map +1 -0
  41. package/dist/esm/components/Icons/GitBranchIcon.js +30 -0
  42. package/dist/esm/components/Icons/GitBranchIcon.js.map +1 -0
  43. package/dist/esm/components/Icons/LastIcon.js +23 -0
  44. package/dist/esm/components/Icons/LastIcon.js.map +1 -0
  45. package/dist/esm/components/Icons/MinusIcon.js +30 -0
  46. package/dist/esm/components/Icons/MinusIcon.js.map +1 -0
  47. package/dist/esm/components/Icons/PauseIcon.js +30 -0
  48. package/dist/esm/components/Icons/PauseIcon.js.map +1 -0
  49. package/dist/esm/components/Icons/PinIcon.js +31 -0
  50. package/dist/esm/components/Icons/PinIcon.js.map +1 -0
  51. package/dist/esm/components/Icons/SendIcon.js +30 -0
  52. package/dist/esm/components/Icons/SendIcon.js.map +1 -0
  53. package/dist/esm/components/Icons/StopIcon.js +30 -0
  54. package/dist/esm/components/Icons/StopIcon.js.map +1 -0
  55. package/dist/esm/components/Icons/TerminalIcon.js +30 -0
  56. package/dist/esm/components/Icons/TerminalIcon.js.map +1 -0
  57. package/dist/esm/components/Icons/UnlinkIcon.js +26 -0
  58. package/dist/esm/components/Icons/UnlinkIcon.js.map +1 -0
  59. package/dist/esm/components/Icons/UsersIcon.js +31 -0
  60. package/dist/esm/components/Icons/UsersIcon.js.map +1 -0
  61. package/dist/esm/components/controls/Combobox/Combobox.css.js +20 -0
  62. package/dist/esm/components/controls/Combobox/Combobox.css.js.map +1 -0
  63. package/dist/esm/components/controls/Combobox/Combobox.js +354 -0
  64. package/dist/esm/components/controls/Combobox/Combobox.js.map +1 -0
  65. package/dist/esm/components/controls/FileUploader/FileUploader.css.js +20 -0
  66. package/dist/esm/components/controls/FileUploader/FileUploader.css.js.map +1 -0
  67. package/dist/esm/components/controls/FileUploader/FileUploader.js +264 -0
  68. package/dist/esm/components/controls/FileUploader/FileUploader.js.map +1 -0
  69. package/dist/esm/components/controls/MultiSelect/MultiSelect.css.js +23 -0
  70. package/dist/esm/components/controls/MultiSelect/MultiSelect.css.js.map +1 -0
  71. package/dist/esm/components/controls/MultiSelect/MultiSelect.js +269 -0
  72. package/dist/esm/components/controls/MultiSelect/MultiSelect.js.map +1 -0
  73. package/dist/esm/components/controls/Select/Select.js +5 -4
  74. package/dist/esm/components/controls/Select/Select.js.map +1 -1
  75. package/dist/esm/components/controls/TagInput/TagInput.css.js +12 -0
  76. package/dist/esm/components/controls/TagInput/TagInput.css.js.map +1 -0
  77. package/dist/esm/components/controls/TagInput/TagInput.js +189 -0
  78. package/dist/esm/components/controls/TagInput/TagInput.js.map +1 -0
  79. package/dist/esm/components/controls/TreeView/TreeNode.js +87 -1
  80. package/dist/esm/components/controls/TreeView/TreeNode.js.map +1 -1
  81. package/dist/esm/components/controls/VectorInput/VectorInput.js +87 -4
  82. package/dist/esm/components/controls/VectorInput/VectorInput.js.map +1 -1
  83. package/dist/esm/components/data/DataTable/DataTable.css.js +25 -0
  84. package/dist/esm/components/data/DataTable/DataTable.css.js.map +1 -0
  85. package/dist/esm/components/data/DataTable/DataTable.js +502 -0
  86. package/dist/esm/components/data/DataTable/DataTable.js.map +1 -0
  87. package/dist/esm/components/editor/ChatPanel/ChatCodeBlock.js +87 -5
  88. package/dist/esm/components/editor/ChatPanel/ChatCodeBlock.js.map +1 -1
  89. package/dist/esm/components/editor/ChatPanel/ChatInput.js +87 -5
  90. package/dist/esm/components/editor/ChatPanel/ChatInput.js.map +1 -1
  91. package/dist/esm/components/editor/ChatPanel/ChatMessage.js +87 -2
  92. package/dist/esm/components/editor/ChatPanel/ChatMessage.js.map +1 -1
  93. package/dist/esm/components/editor/PropertyInspector/PropertyRow.js +87 -3
  94. package/dist/esm/components/editor/PropertyInspector/PropertyRow.js.map +1 -1
  95. package/dist/esm/components/editor/PropertyInspector/PropertySection.js +87 -3
  96. package/dist/esm/components/editor/PropertyInspector/PropertySection.js.map +1 -1
  97. package/dist/esm/components/feedback/Alert/Alert.css.js +1 -1
  98. package/dist/esm/components/feedback/Alert/Alert.js +3 -2
  99. package/dist/esm/components/feedback/Alert/Alert.js.map +1 -1
  100. package/dist/esm/components/feedback/CommandPalette/CommandPalette.css.js +20 -0
  101. package/dist/esm/components/feedback/CommandPalette/CommandPalette.css.js.map +1 -0
  102. package/dist/esm/components/feedback/CommandPalette/CommandPalette.js +261 -0
  103. package/dist/esm/components/feedback/CommandPalette/CommandPalette.js.map +1 -0
  104. package/dist/esm/components/feedback/CommandPalette/fuzzySearch.js +86 -0
  105. package/dist/esm/components/feedback/CommandPalette/fuzzySearch.js.map +1 -0
  106. package/dist/esm/components/feedback/CommandPalette/useRecentItems.js +63 -0
  107. package/dist/esm/components/feedback/CommandPalette/useRecentItems.js.map +1 -0
  108. package/dist/esm/components/feedback/Dialog/DialogHeader.js +2 -1
  109. package/dist/esm/components/feedback/Dialog/DialogHeader.js.map +1 -1
  110. package/dist/esm/components/feedback/Drawer/Drawer.css.js +17 -0
  111. package/dist/esm/components/feedback/Drawer/Drawer.css.js.map +1 -0
  112. package/dist/esm/components/feedback/Drawer/Drawer.js +120 -0
  113. package/dist/esm/components/feedback/Drawer/Drawer.js.map +1 -0
  114. package/dist/esm/components/feedback/Drawer/useDrawerAnimation.js +74 -0
  115. package/dist/esm/components/feedback/Drawer/useDrawerAnimation.js.map +1 -0
  116. package/dist/esm/components/feedback/Skeleton/SkeletonLayout.css.js +18 -0
  117. package/dist/esm/components/feedback/Skeleton/SkeletonLayout.css.js.map +1 -0
  118. package/dist/esm/components/feedback/Skeleton/SkeletonLayout.js +95 -0
  119. package/dist/esm/components/feedback/Skeleton/SkeletonLayout.js.map +1 -0
  120. package/dist/esm/components/feedback/Stat/Stat.css.js +15 -0
  121. package/dist/esm/components/feedback/Stat/Stat.css.js.map +1 -0
  122. package/dist/esm/components/feedback/Stat/Stat.js +55 -0
  123. package/dist/esm/components/feedback/Stat/Stat.js.map +1 -0
  124. package/dist/esm/components/feedback/Toast/ToastItem.js +12 -15
  125. package/dist/esm/components/feedback/Toast/ToastItem.js.map +1 -1
  126. package/dist/esm/components/layout/Accordion/Accordion.js +2 -1
  127. package/dist/esm/components/layout/Accordion/Accordion.js.map +1 -1
  128. package/dist/esm/components/layout/Accordion/AccordionTrigger.js +2 -3
  129. package/dist/esm/components/layout/Accordion/AccordionTrigger.js.map +1 -1
  130. package/dist/esm/components/layout/Card/Card.css.js +18 -0
  131. package/dist/esm/components/layout/Card/Card.css.js.map +1 -0
  132. package/dist/esm/components/layout/Card/Card.js +66 -0
  133. package/dist/esm/components/layout/Card/Card.js.map +1 -0
  134. package/dist/esm/components/navigation/Breadcrumbs/BreadcrumbEllipsis.js +1 -0
  135. package/dist/esm/components/navigation/Breadcrumbs/BreadcrumbEllipsis.js.map +1 -1
  136. package/dist/esm/components/navigation/Breadcrumbs/BreadcrumbItem.js +1 -0
  137. package/dist/esm/components/navigation/Breadcrumbs/BreadcrumbItem.js.map +1 -1
  138. package/dist/esm/components/navigation/Breadcrumbs/Breadcrumbs.js +23 -0
  139. package/dist/esm/components/navigation/Breadcrumbs/Breadcrumbs.js.map +1 -1
  140. package/dist/esm/components/navigation/Pagination/Pagination.css.js +12 -0
  141. package/dist/esm/components/navigation/Pagination/Pagination.css.js.map +1 -0
  142. package/dist/esm/components/navigation/Pagination/Pagination.js +107 -0
  143. package/dist/esm/components/navigation/Pagination/Pagination.js.map +1 -0
  144. package/dist/esm/components/navigation/Pagination/usePagination.js +143 -0
  145. package/dist/esm/components/navigation/Pagination/usePagination.js.map +1 -0
  146. package/dist/esm/components/primitives/Avatar/Avatar.js +87 -1
  147. package/dist/esm/components/primitives/Avatar/Avatar.js.map +1 -1
  148. package/dist/esm/components/primitives/Badge/Badge.js +87 -1
  149. package/dist/esm/components/primitives/Badge/Badge.js.map +1 -1
  150. package/dist/esm/components/primitives/Checkbox/Checkbox.js +5 -2
  151. package/dist/esm/components/primitives/Checkbox/Checkbox.js.map +1 -1
  152. package/dist/esm/components/primitives/Collapsible/Collapsible.js +2 -3
  153. package/dist/esm/components/primitives/Collapsible/Collapsible.js.map +1 -1
  154. package/dist/esm/components/primitives/HoverCard/HoverCard.css.js +7 -0
  155. package/dist/esm/components/primitives/HoverCard/HoverCard.css.js.map +1 -0
  156. package/dist/esm/components/primitives/HoverCard/HoverCard.js +169 -0
  157. package/dist/esm/components/primitives/HoverCard/HoverCard.js.map +1 -0
  158. package/dist/esm/components/primitives/Icon/Icon.js +16 -2
  159. package/dist/esm/components/primitives/Icon/Icon.js.map +1 -1
  160. package/dist/esm/components/primitives/Link/Link.js +3 -3
  161. package/dist/esm/components/primitives/Link/Link.js.map +1 -1
  162. package/dist/esm/components/primitives/Popover/PopoverClose.js +2 -3
  163. package/dist/esm/components/primitives/Popover/PopoverClose.js.map +1 -1
  164. package/dist/esm/components/primitives/Radio/Radio.js +1 -1
  165. package/dist/esm/hooks/useBreakpoint/useBreakpoint.js +44 -0
  166. package/dist/esm/hooks/useBreakpoint/useBreakpoint.js.map +1 -0
  167. package/dist/esm/hooks/useDebounced/useDebouncedCallback.js +97 -0
  168. package/dist/esm/hooks/useDebounced/useDebouncedCallback.js.map +1 -0
  169. package/dist/esm/hooks/useDebounced/useDebouncedValue.js +35 -0
  170. package/dist/esm/hooks/useDebounced/useDebouncedValue.js.map +1 -0
  171. package/dist/esm/hooks/useIntersectionObserver/useIntersectionObserver.js +73 -0
  172. package/dist/esm/hooks/useIntersectionObserver/useIntersectionObserver.js.map +1 -0
  173. package/dist/esm/hooks/useListboxNav/useListboxNav.js +181 -0
  174. package/dist/esm/hooks/useListboxNav/useListboxNav.js.map +1 -0
  175. package/dist/esm/hooks/useMediaQuery/useMediaQuery.js +54 -0
  176. package/dist/esm/hooks/useMediaQuery/useMediaQuery.js.map +1 -0
  177. package/dist/esm/hooks/useThrottledCallback/useThrottledCallback.js +78 -0
  178. package/dist/esm/hooks/useThrottledCallback/useThrottledCallback.js.map +1 -0
  179. package/dist/esm/index.js +43 -0
  180. package/dist/esm/index.js.map +1 -1
  181. package/dist/esm/theme/breakpoints.js +27 -0
  182. package/dist/esm/theme/breakpoints.js.map +1 -0
  183. package/dist/esm/theme/index.js +1 -0
  184. package/dist/esm/theme/index.js.map +1 -1
  185. package/dist/tokens/tokens.dark.css +1 -1
  186. package/dist/tokens/tokens.json +1 -1
  187. package/dist/tokens/tokens.light.css +1 -1
  188. package/dist/types/components/Icons/ArchiveIcon.d.ts +33 -0
  189. package/dist/types/components/Icons/BugIcon.d.ts +33 -0
  190. package/dist/types/components/Icons/BuildingIcon.d.ts +33 -0
  191. package/dist/types/components/Icons/ChevronLeftIcon.d.ts +33 -0
  192. package/dist/types/components/Icons/ChevronRightIcon.d.ts +33 -0
  193. package/dist/types/components/Icons/CloudUploadIcon.d.ts +27 -0
  194. package/dist/types/components/Icons/DotsHorizontalIcon.d.ts +33 -0
  195. package/dist/types/components/Icons/DotsVerticalIcon.d.ts +33 -0
  196. package/dist/types/components/Icons/ExternalLinkIcon.d.ts +29 -0
  197. package/dist/types/components/Icons/FileTextIcon.d.ts +33 -0
  198. package/dist/types/components/Icons/FirstIcon.d.ts +26 -0
  199. package/dist/types/components/Icons/FolderCogIcon.d.ts +33 -0
  200. package/dist/types/components/Icons/FolderOpenIcon.d.ts +33 -0
  201. package/dist/types/components/Icons/GitBranchIcon.d.ts +33 -0
  202. package/dist/types/components/Icons/LastIcon.d.ts +26 -0
  203. package/dist/types/components/Icons/MinusIcon.d.ts +33 -0
  204. package/dist/types/components/Icons/PauseIcon.d.ts +33 -0
  205. package/dist/types/components/Icons/PinIcon.d.ts +34 -0
  206. package/dist/types/components/Icons/SendIcon.d.ts +33 -0
  207. package/dist/types/components/Icons/StopIcon.d.ts +33 -0
  208. package/dist/types/components/Icons/TerminalIcon.d.ts +33 -0
  209. package/dist/types/components/Icons/UnlinkIcon.d.ts +29 -0
  210. package/dist/types/components/Icons/UsersIcon.d.ts +34 -0
  211. package/dist/types/components/controls/Combobox/Combobox.d.ts +29 -0
  212. package/dist/types/components/controls/Combobox/Combobox.types.d.ts +109 -0
  213. package/dist/types/components/controls/FileUploader/FileUploader.d.ts +34 -0
  214. package/dist/types/components/controls/FileUploader/FileUploader.types.d.ts +94 -0
  215. package/dist/types/components/controls/MultiSelect/MultiSelect.d.ts +31 -0
  216. package/dist/types/components/controls/MultiSelect/MultiSelect.types.d.ts +85 -0
  217. package/dist/types/components/controls/TagInput/TagInput.d.ts +24 -0
  218. package/dist/types/components/controls/TagInput/TagInput.types.d.ts +100 -0
  219. package/dist/types/components/data/DataTable/DataTable.d.ts +8 -0
  220. package/dist/types/components/data/DataTable/DataTable.types.d.ts +159 -0
  221. package/dist/types/components/editor/ChatPanel/ChatAttachment.d.ts +1 -1
  222. package/dist/types/components/editor/ChatPanel/ChatInput.d.ts +1 -1
  223. package/dist/types/components/feedback/Alert/Alert.d.ts +1 -0
  224. package/dist/types/components/feedback/Alert/Alert.types.d.ts +7 -0
  225. package/dist/types/components/feedback/CommandPalette/CommandPalette.d.ts +29 -0
  226. package/dist/types/components/feedback/CommandPalette/CommandPalette.types.d.ts +61 -0
  227. package/dist/types/components/feedback/CommandPalette/fuzzySearch.d.ts +6 -0
  228. package/dist/types/components/feedback/Drawer/Drawer.d.ts +12 -0
  229. package/dist/types/components/feedback/Drawer/Drawer.types.d.ts +70 -0
  230. package/dist/types/components/feedback/EmptyState/EmptyState.d.ts +1 -1
  231. package/dist/types/components/feedback/Skeleton/Skeleton.types.d.ts +44 -1
  232. package/dist/types/components/feedback/Skeleton/SkeletonLayout.d.ts +314 -0
  233. package/dist/types/components/feedback/Stat/Stat.d.ts +23 -0
  234. package/dist/types/components/feedback/Stat/Stat.types.d.ts +38 -0
  235. package/dist/types/components/layout/Accordion/Accordion.types.d.ts +7 -0
  236. package/dist/types/components/layout/Card/Card.d.ts +12 -0
  237. package/dist/types/components/layout/Card/Card.types.d.ts +54 -0
  238. package/dist/types/components/layout/PageHeader/PageHeader.d.ts +1 -1
  239. package/dist/types/components/navigation/Pagination/Pagination.d.ts +22 -0
  240. package/dist/types/components/navigation/Pagination/Pagination.types.d.ts +49 -0
  241. package/dist/types/components/primitives/HoverCard/HoverCard.d.ts +10 -0
  242. package/dist/types/components/primitives/HoverCard/HoverCard.types.d.ts +64 -0
  243. package/dist/types/components/primitives/Icon/Icon.d.ts +14 -1
  244. package/dist/types/components/primitives/Radio/Radio.d.ts +1 -1
  245. package/dist/types/hooks/useBreakpoint/useBreakpoint.d.ts +19 -0
  246. package/dist/types/hooks/useBreakpoint/useBreakpoint.types.d.ts +20 -0
  247. package/dist/types/hooks/useDebounced/useDebounced.types.d.ts +15 -0
  248. package/dist/types/hooks/useDebounced/useDebouncedCallback.d.ts +22 -0
  249. package/dist/types/hooks/useDebounced/useDebouncedValue.d.ts +16 -0
  250. package/dist/types/hooks/useIntersectionObserver/useIntersectionObserver.d.ts +22 -0
  251. package/dist/types/hooks/useIntersectionObserver/useIntersectionObserver.types.d.ts +22 -0
  252. package/dist/types/hooks/useListboxNav/useListboxNav.d.ts +75 -0
  253. package/dist/types/hooks/useMediaQuery/useMediaQuery.d.ts +19 -0
  254. package/dist/types/hooks/useMediaQuery/useMediaQuery.types.d.ts +6 -0
  255. package/dist/types/hooks/useThrottledCallback/useThrottledCallback.d.ts +23 -0
  256. package/dist/types/hooks/useThrottledCallback/useThrottledCallback.types.d.ts +13 -0
  257. package/dist/types/index.d.ts +61 -1
  258. package/dist/types/theme/breakpoints.d.ts +22 -0
  259. package/dist/types/theme/index.d.ts +1 -0
  260. package/package.json +3 -1
@@ -0,0 +1,181 @@
1
+ "use client";
2
+ import { useState, useRef, useEffect, useCallback } from 'react';
3
+
4
+ /**
5
+ * Shared keyboard navigation for listbox-like surfaces (Select, MultiSelect,
6
+ * Combobox, CommandPalette). Tracks an `activeIndex`, skips disabled items,
7
+ * and exposes a single `handleKeyDown` covering Arrow / Home / End / Enter /
8
+ * Escape semantics.
9
+ *
10
+ * The hook is purely logical — consumers render the list and bind the handler
11
+ * to an input or the listbox container. Scroll-into-view is the consumer's
12
+ * concern.
13
+ *
14
+ * @example
15
+ * ```tsx
16
+ * const { activeIndex, handleKeyDown } = useListboxNav({
17
+ * items: filtered,
18
+ * isItemDisabled: o => o.disabled ?? false,
19
+ * onSelect: (item) => commit(item),
20
+ * onEscape: () => close(),
21
+ * });
22
+ * ```
23
+ */
24
+ function useListboxNav(options) {
25
+ const { items, isItemDisabled, defaultActiveIndex = -1, loop = true, resetOnItemsChange = true, onSelect, onEscape, } = options;
26
+ const [activeIndex, setActiveIndex] = useState(defaultActiveIndex);
27
+ // Stable refs so handlers don't churn when callers pass inline closures.
28
+ const itemsRef = useRef(items);
29
+ const isItemDisabledRef = useRef(isItemDisabled);
30
+ const onSelectRef = useRef(onSelect);
31
+ const onEscapeRef = useRef(onEscape);
32
+ const loopRef = useRef(loop);
33
+ useEffect(() => {
34
+ itemsRef.current = items;
35
+ }, [items]);
36
+ useEffect(() => {
37
+ isItemDisabledRef.current = isItemDisabled;
38
+ }, [isItemDisabled]);
39
+ useEffect(() => {
40
+ onSelectRef.current = onSelect;
41
+ }, [onSelect]);
42
+ useEffect(() => {
43
+ onEscapeRef.current = onEscape;
44
+ }, [onEscape]);
45
+ useEffect(() => {
46
+ loopRef.current = loop;
47
+ }, [loop]);
48
+ // Reset active index when items reference changes (e.g. filter).
49
+ const prevItemsRef = useRef(items);
50
+ useEffect(() => {
51
+ if (!resetOnItemsChange)
52
+ return;
53
+ if (prevItemsRef.current !== items) {
54
+ setActiveIndex(defaultActiveIndex);
55
+ prevItemsRef.current = items;
56
+ }
57
+ }, [items, resetOnItemsChange, defaultActiveIndex]);
58
+ const getNavigableIndices = useCallback(() => {
59
+ const list = itemsRef.current;
60
+ const disabled = isItemDisabledRef.current;
61
+ if (!disabled)
62
+ return list.map((_, i) => i);
63
+ const out = [];
64
+ for (let i = 0; i < list.length; i += 1) {
65
+ const item = list[i];
66
+ if (!disabled(item, i))
67
+ out.push(i);
68
+ }
69
+ return out;
70
+ }, []);
71
+ const move = useCallback((direction) => {
72
+ const navigable = getNavigableIndices();
73
+ if (navigable.length === 0) {
74
+ setActiveIndex(-1);
75
+ return;
76
+ }
77
+ setActiveIndex(current => {
78
+ const currentNavIdx = navigable.indexOf(current);
79
+ switch (direction) {
80
+ case 'first':
81
+ return navigable[0] ?? -1;
82
+ case 'last':
83
+ return navigable[navigable.length - 1] ?? -1;
84
+ case 'next': {
85
+ if (currentNavIdx === -1)
86
+ return navigable[0] ?? -1;
87
+ const nextIdx = currentNavIdx + 1;
88
+ if (nextIdx >= navigable.length) {
89
+ return loopRef.current
90
+ ? (navigable[0] ?? -1)
91
+ : (navigable[navigable.length - 1] ?? -1);
92
+ }
93
+ return navigable[nextIdx] ?? -1;
94
+ }
95
+ case 'prev': {
96
+ if (currentNavIdx === -1)
97
+ return navigable[navigable.length - 1] ?? -1;
98
+ const prevIdx = currentNavIdx - 1;
99
+ if (prevIdx < 0) {
100
+ return loopRef.current
101
+ ? (navigable[navigable.length - 1] ?? -1)
102
+ : (navigable[0] ?? -1);
103
+ }
104
+ return navigable[prevIdx] ?? -1;
105
+ }
106
+ }
107
+ });
108
+ }, [getNavigableIndices]);
109
+ const next = useCallback(() => {
110
+ move('next');
111
+ }, [move]);
112
+ const prev = useCallback(() => {
113
+ move('prev');
114
+ }, [move]);
115
+ const first = useCallback(() => {
116
+ move('first');
117
+ }, [move]);
118
+ const last = useCallback(() => {
119
+ move('last');
120
+ }, [move]);
121
+ const selectActive = useCallback(() => {
122
+ const list = itemsRef.current;
123
+ const disabled = isItemDisabledRef.current;
124
+ setActiveIndex(current => {
125
+ if (current < 0 || current >= list.length)
126
+ return current;
127
+ const item = list[current];
128
+ if (disabled?.(item, current))
129
+ return current;
130
+ onSelectRef.current?.(item, current);
131
+ return current;
132
+ });
133
+ }, []);
134
+ const handleKeyDown = useCallback((event) => {
135
+ switch (event.key) {
136
+ case 'ArrowDown':
137
+ event.preventDefault();
138
+ next();
139
+ return true;
140
+ case 'ArrowUp':
141
+ event.preventDefault();
142
+ prev();
143
+ return true;
144
+ case 'Home':
145
+ event.preventDefault();
146
+ first();
147
+ return true;
148
+ case 'End':
149
+ event.preventDefault();
150
+ last();
151
+ return true;
152
+ case 'Enter':
153
+ event.preventDefault();
154
+ selectActive();
155
+ return true;
156
+ case 'Escape':
157
+ if (onEscapeRef.current) {
158
+ event.preventDefault();
159
+ onEscapeRef.current();
160
+ return true;
161
+ }
162
+ return false;
163
+ default:
164
+ return false;
165
+ }
166
+ }, [next, prev, first, last, selectActive]);
167
+ return {
168
+ activeIndex,
169
+ setActiveIndex,
170
+ next,
171
+ prev,
172
+ first,
173
+ last,
174
+ selectActive,
175
+ handleKeyDown,
176
+ navigableIndices: getNavigableIndices(),
177
+ };
178
+ }
179
+
180
+ export { useListboxNav };
181
+ //# sourceMappingURL=useListboxNav.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useListboxNav.js","sources":["../../../../../src/hooks/useListboxNav/useListboxNav.ts"],"sourcesContent":[null],"names":[],"mappings":";;;AA8DA;;;;;;;;;;;;;;;;;;;AAmBG;AACG;;;;AAgBJ;AACA;AACA;AACA;AACA;;AAGE;AACF;;AAEE;AACF;;AAEE;AACF;;AAEE;AACF;;AAEE;AACF;;AAGA;;AAEE;;AACA;;AAEE;;;AAIJ;AACE;AACA;AACA;AAAe;;AAEf;AACE;AACA;AAAwB;;AAE1B;;AAGF;AAEI;AACA;AACE;;;;;;AAOE;AACE;AACF;;;;AAG4B;AAC1B;AACA;;;AAGI;;AAEJ;;;;;AAKA;AACA;;AAEI;;;AAGJ;;;AAGN;AACF;AAIF;;AAEA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;AAEA;AACE;AACA;;;AAE6C;AAC3C;AACA;AAA+B;;AAE/B;AACF;;AAGF;AAEI;AACE;;AAEE;AACA;AACF;;AAEE;AACA;AACF;;AAEE;AACA;AACF;;AAEE;AACA;AACF;;AAEE;AACA;AACF;AACE;;;AAGE;;AAEF;AACF;AACE;;AAEN;;;;;;;;;;;;AAeJ;;"}
@@ -0,0 +1,54 @@
1
+ "use client";
2
+ import { useState, useEffect } from 'react';
3
+
4
+ function getInitialMatch(query, fallback) {
5
+ if (typeof window === 'undefined' ||
6
+ typeof window.matchMedia !== 'function') {
7
+ return fallback;
8
+ }
9
+ return window.matchMedia(query).matches;
10
+ }
11
+ /**
12
+ * Reactive media query matching.
13
+ *
14
+ * Returns `true` when the current viewport matches the query and updates as
15
+ * the viewport changes. SSR-safe — returns `defaultMatches` when `matchMedia`
16
+ * is unavailable. Uses the modern `addEventListener('change')` API with a
17
+ * fallback to the legacy `addListener` for older browsers.
18
+ *
19
+ * @example
20
+ * ```tsx
21
+ * const isWide = useMediaQuery('(min-width: 768px)');
22
+ * return isWide ? <DesktopLayout /> : <MobileLayout />;
23
+ * ```
24
+ */
25
+ function useMediaQuery(query, options = {}) {
26
+ const { defaultMatches = false } = options;
27
+ const [matches, setMatches] = useState(() => getInitialMatch(query, defaultMatches));
28
+ useEffect(() => {
29
+ if (typeof window === 'undefined' ||
30
+ typeof window.matchMedia !== 'function') {
31
+ return;
32
+ }
33
+ const mql = window.matchMedia(query);
34
+ setMatches(mql.matches);
35
+ const handler = (event) => {
36
+ setMatches(event.matches);
37
+ };
38
+ if (typeof mql.addEventListener === 'function') {
39
+ mql.addEventListener('change', handler);
40
+ return () => {
41
+ mql.removeEventListener('change', handler);
42
+ };
43
+ }
44
+ // Legacy Safari fallback.
45
+ mql.addListener(handler);
46
+ return () => {
47
+ mql.removeListener(handler);
48
+ };
49
+ }, [query]);
50
+ return matches;
51
+ }
52
+
53
+ export { useMediaQuery };
54
+ //# sourceMappingURL=useMediaQuery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useMediaQuery.js","sources":["../../../../../src/hooks/useMediaQuery/useMediaQuery.ts"],"sourcesContent":[null],"names":[],"mappings":";;;AAKA;;AAGI;AAEA;;;AAGJ;AAEA;;;;;;;;;;;;;AAaG;;AAKD;AAEA;;;AAOI;;;;AAMF;AAEA;AACE;AACF;AAEA;AACE;AACA;AACE;AACF;;;AAIF;AACA;AACE;AACF;AACF;AAEA;AACF;;"}
@@ -0,0 +1,78 @@
1
+ "use client";
2
+ import { useRef, useMemo, useEffect } from 'react';
3
+
4
+ /**
5
+ * Wrap a function so it fires at most once per `delay` ms. With both
6
+ * `leading` and `trailing` enabled (the default), the first call fires
7
+ * immediately and the most recent call inside the window fires at its
8
+ * end. Set `leading: false` to defer the first call; set
9
+ * `trailing: false` to drop calls inside the window.
10
+ *
11
+ * Typical use: drag handlers, scroll listeners, resize observers — places
12
+ * where the input rate exceeds the work rate and you want to bound the
13
+ * latter.
14
+ *
15
+ * The wrapper identity is stable across renders.
16
+ *
17
+ * @example
18
+ * ```tsx
19
+ * const onPointerMove = useThrottledCallback(updateGuide, 16);
20
+ * ```
21
+ */
22
+ function useThrottledCallback(fn, delay, options = {}) {
23
+ const { leading = true, trailing = true } = options;
24
+ const fnRef = useRef(fn);
25
+ fnRef.current = fn;
26
+ const lastCallRef = useRef(0);
27
+ const timerRef = useRef(null);
28
+ const lastArgsRef = useRef(null);
29
+ const throttled = useMemo(() => {
30
+ const invoke = (now) => {
31
+ lastCallRef.current = now;
32
+ const args = lastArgsRef.current;
33
+ lastArgsRef.current = null;
34
+ if (args)
35
+ fnRef.current(...args);
36
+ };
37
+ const wrapper = (...args) => {
38
+ const now = Date.now();
39
+ if (lastCallRef.current === 0 && !leading) {
40
+ // Skip the leading fire by anchoring the window to "now".
41
+ lastCallRef.current = now;
42
+ }
43
+ const elapsed = now - lastCallRef.current;
44
+ lastArgsRef.current = args;
45
+ if (elapsed >= delay) {
46
+ if (timerRef.current !== null) {
47
+ clearTimeout(timerRef.current);
48
+ timerRef.current = null;
49
+ }
50
+ invoke(now);
51
+ return;
52
+ }
53
+ if (trailing && timerRef.current === null) {
54
+ timerRef.current = setTimeout(() => {
55
+ timerRef.current = null;
56
+ invoke(Date.now());
57
+ }, delay - elapsed);
58
+ }
59
+ };
60
+ wrapper.cancel = () => {
61
+ if (timerRef.current !== null) {
62
+ clearTimeout(timerRef.current);
63
+ timerRef.current = null;
64
+ }
65
+ lastArgsRef.current = null;
66
+ lastCallRef.current = 0;
67
+ };
68
+ return wrapper;
69
+ }, [delay, leading, trailing]);
70
+ useEffect(() => () => {
71
+ if (timerRef.current !== null)
72
+ clearTimeout(timerRef.current);
73
+ }, []);
74
+ return throttled;
75
+ }
76
+
77
+ export { useThrottledCallback };
78
+ //# sourceMappingURL=useThrottledCallback.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useThrottledCallback.js","sources":["../../../../../src/hooks/useThrottledCallback/useThrottledCallback.ts"],"sourcesContent":[null],"names":[],"mappings":";;;AAQA;;;;;;;;;;;;;;;;;AAiBG;AACG;;AAOJ;AACA;AAEA;AACA;AACA;AAEA;AACE;AACE;AACA;AACA;AACA;AAAU;AACZ;AAEA;AACE;;;AAGE;;AAGF;AACA;AAEA;AACE;AACE;AACA;;;;;;AAOF;AACE;AACA;AACF;;AAEJ;AAEA;AACE;AACE;AACA;;AAEF;AACA;AACF;AAEA;;AAGF;AAEI;AAA+B;;AAKnC;AACF;;"}
package/dist/esm/index.js CHANGED
@@ -7,10 +7,12 @@ export { createLightTheme } from './theme/createLightTheme.js';
7
7
  export { VanillaThemeProvider } from './theme/VanillaThemeProvider.js';
8
8
  export { ThemeProvider } from './theme/ThemeProvider.js';
9
9
  import './assets/src/theme/globalScrollbars.css.ts.vanilla-BAJwnUEJ.css';
10
+ export { BREAKPOINT_ORDER, breakpoints } from './theme/breakpoints.js';
10
11
  export { Accordion } from './components/layout/Accordion/Accordion.js';
11
12
  export { AccordionItem } from './components/layout/Accordion/AccordionItem.js';
12
13
  export { AccordionTrigger } from './components/layout/Accordion/AccordionTrigger.js';
13
14
  export { AccordionContent } from './components/layout/Accordion/AccordionContent.js';
15
+ export { Card } from './components/layout/Card/Card.js';
14
16
  export { Divider } from './components/layout/Divider/Divider.js';
15
17
  export { Flex } from './components/layout/Flex/Flex.js';
16
18
  export { Grid } from './components/layout/Grid/Grid.js';
@@ -30,6 +32,7 @@ export { Checkbox } from './components/primitives/Checkbox/Checkbox.js';
30
32
  export { CheckboxGroup } from './components/primitives/Checkbox/CheckboxGroup.js';
31
33
  export { Code } from './components/primitives/Code/Code.js';
32
34
  export { Collapsible } from './components/primitives/Collapsible/Collapsible.js';
35
+ export { HoverCard } from './components/primitives/HoverCard/HoverCard.js';
33
36
  export { Icon } from './components/primitives/Icon/Icon.js';
34
37
  export { IconButton } from './components/primitives/IconButton/IconButton.js';
35
38
  export { Input } from './components/primitives/Input/Input.js';
@@ -56,12 +59,16 @@ export { ColorPalette } from './components/controls/ColorPicker/ColorPalette.js'
56
59
  export { MATERIAL_PALETTE } from './components/controls/ColorPicker/palettes/material.js';
57
60
  export { TAILWIND_PALETTE } from './components/controls/ColorPicker/palettes/tailwind.js';
58
61
  export { EARTH_PALETTE, MONOCHROME_PALETTE, NEON_PALETTE, PASTEL_PALETTE, PROFESSIONAL_PALETTES, SKIN_TONES_PALETTE, VINTAGE_PALETTE } from './components/controls/ColorPicker/palettes/professional.js';
62
+ export { Combobox } from './components/controls/Combobox/Combobox.js';
63
+ export { FileUploader } from './components/controls/FileUploader/FileUploader.js';
64
+ export { MultiSelect } from './components/controls/MultiSelect/MultiSelect.js';
59
65
  export { NumberInput } from './components/controls/NumberInput/NumberInput.js';
60
66
  export { KeyboardContextProvider, useEffectsOnKeyboard, useKeyboardContext } from './context/KeyboardContext.js';
61
67
  import './utils/mathExpression.js';
62
68
  import './utils/devWarn.js';
63
69
  export { Select } from './components/controls/Select/Select.js';
64
70
  export { Slider } from './components/controls/Slider/Slider.js';
71
+ export { TagInput } from './components/controls/TagInput/TagInput.js';
65
72
  export { VectorInput } from './components/controls/VectorInput/VectorInput.js';
66
73
  export { TreeView } from './components/controls/TreeView/TreeView.js';
67
74
  export { CurveEditor } from './components/controls/CurveEditor/CurveEditor.js';
@@ -76,12 +83,14 @@ export { ContextMenu } from './components/navigation/ContextMenu/ContextMenu.js'
76
83
  export { useContextMenuTarget } from './components/navigation/ContextMenu/useContextMenuTarget.js';
77
84
  export { Menu } from './components/navigation/Menu/Menu.js';
78
85
  export { useMenu } from './components/navigation/Menu/useMenu.js';
86
+ export { Pagination } from './components/navigation/Pagination/Pagination.js';
79
87
  export { SegmentedControl } from './components/navigation/SegmentedControl/SegmentedControl.js';
80
88
  export { SegmentedControlItem } from './components/navigation/SegmentedControl/SegmentedControlItem.js';
81
89
  export { Tabs } from './components/navigation/Tabs/Tabs.js';
82
90
  export { TabList } from './components/navigation/Tabs/TabList.js';
83
91
  export { Tab } from './components/navigation/Tabs/Tab.js';
84
92
  export { TabPanel } from './components/navigation/Tabs/TabPanel.js';
93
+ export { DataTable } from './components/data/DataTable/DataTable.js';
85
94
  export { FormLabel } from './components/form/FormLabel.js';
86
95
  export { FormHelperText } from './components/form/FormHelperText.js';
87
96
  export { InputWrapper } from './components/form/InputWrapper.js';
@@ -94,12 +103,16 @@ export { DialogHeader } from './components/feedback/Dialog/DialogHeader.js';
94
103
  export { DialogBody } from './components/feedback/Dialog/DialogBody.js';
95
104
  export { DialogFooter } from './components/feedback/Dialog/DialogFooter.js';
96
105
  export { DialogClose } from './components/feedback/Dialog/DialogClose.js';
106
+ export { CommandPalette } from './components/feedback/CommandPalette/CommandPalette.js';
107
+ export { Drawer } from './components/feedback/Drawer/Drawer.js';
97
108
  export { EmptyState } from './components/feedback/EmptyState/EmptyState.js';
98
109
  export { ProgressBar } from './components/feedback/ProgressBar/ProgressBar.js';
99
110
  export { CircularProgress } from './components/feedback/ProgressBar/CircularProgress.js';
100
111
  export { Skeleton } from './components/feedback/Skeleton/Skeleton.js';
101
112
  export { SkeletonGroup } from './components/feedback/Skeleton/SkeletonGroup.js';
113
+ export { SkeletonLayout } from './components/feedback/Skeleton/SkeletonLayout.js';
102
114
  export { Spinner } from './components/feedback/Spinner/Spinner.js';
115
+ export { Stat } from './components/feedback/Stat/Stat.js';
103
116
  export { ToastProvider } from './components/feedback/Toast/ToastProvider.js';
104
117
  export { useToast } from './components/feedback/Toast/useToast.js';
105
118
  export { PropertyPanel } from './components/editor/PropertyInspector/PropertyPanel.js';
@@ -145,15 +158,18 @@ export { ChevronDownIcon } from './components/Icons/ChevronDownIcon.js';
145
158
  export { ChevronUpIcon } from './components/Icons/ChevronUpIcon.js';
146
159
  export { ClockIcon } from './components/Icons/ClockIcon.js';
147
160
  export { CloseIcon } from './components/Icons/CloseIcon.js';
161
+ export { CloudUploadIcon } from './components/Icons/CloudUploadIcon.js';
148
162
  export { CodeIcon } from './components/Icons/CodeIcon.js';
149
163
  export { CopyIcon } from './components/Icons/CopyIcon.js';
150
164
  export { CutIcon } from './components/Icons/CutIcon.js';
151
165
  export { DownloadIcon } from './components/Icons/DownloadIcon.js';
152
166
  export { EditIcon } from './components/Icons/EditIcon.js';
153
167
  export { ErrorIcon } from './components/Icons/ErrorIcon.js';
168
+ export { ExternalLinkIcon } from './components/Icons/ExternalLinkIcon.js';
154
169
  export { EyeDropperIcon } from './components/Icons/EyeDropperIcon.js';
155
170
  export { EyeIcon } from './components/Icons/EyeIcon.js';
156
171
  export { FilterIcon } from './components/Icons/FilterIcon.js';
172
+ export { FirstIcon } from './components/Icons/FirstIcon.js';
157
173
  export { FolderIcon } from './components/Icons/FolderIcon.js';
158
174
  export { FullscreenIcon } from './components/Icons/FullscreenIcon.js';
159
175
  export { GridIcon } from './components/Icons/GridIcon.js';
@@ -161,6 +177,7 @@ export { HeartIcon } from './components/Icons/HeartIcon.js';
161
177
  export { HelpIcon } from './components/Icons/HelpIcon.js';
162
178
  export { HomeIcon } from './components/Icons/HomeIcon.js';
163
179
  export { InfoIcon } from './components/Icons/InfoIcon.js';
180
+ export { LastIcon } from './components/Icons/LastIcon.js';
164
181
  export { LinkIcon } from './components/Icons/LinkIcon.js';
165
182
  export { ListIcon } from './components/Icons/ListIcon.js';
166
183
  export { LockIcon } from './components/Icons/LockIcon.js';
@@ -181,6 +198,7 @@ export { SuccessIcon } from './components/Icons/SuccessIcon.js';
181
198
  export { TagIcon } from './components/Icons/TagIcon.js';
182
199
  export { TrashIcon } from './components/Icons/TrashIcon.js';
183
200
  export { UndoIcon } from './components/Icons/UndoIcon.js';
201
+ export { UnlinkIcon } from './components/Icons/UnlinkIcon.js';
184
202
  export { UnlockIcon } from './components/Icons/UnlockIcon.js';
185
203
  export { UploadIcon } from './components/Icons/UploadIcon.js';
186
204
  export { UserIcon } from './components/Icons/UserIcon.js';
@@ -195,6 +213,24 @@ export { TangentMirroredIcon } from './components/Icons/TangentMirroredIcon.js';
195
213
  export { TangentAutoIcon } from './components/Icons/TangentAutoIcon.js';
196
214
  export { TangentLinearIcon } from './components/Icons/TangentLinearIcon.js';
197
215
  export { TangentStepIcon } from './components/Icons/TangentStepIcon.js';
216
+ export { ArchiveIcon } from './components/Icons/ArchiveIcon.js';
217
+ export { DotsVerticalIcon } from './components/Icons/DotsVerticalIcon.js';
218
+ export { DotsHorizontalIcon } from './components/Icons/DotsHorizontalIcon.js';
219
+ export { ChevronLeftIcon } from './components/Icons/ChevronLeftIcon.js';
220
+ export { ChevronRightIcon } from './components/Icons/ChevronRightIcon.js';
221
+ export { FolderOpenIcon } from './components/Icons/FolderOpenIcon.js';
222
+ export { FolderCogIcon } from './components/Icons/FolderCogIcon.js';
223
+ export { UsersIcon } from './components/Icons/UsersIcon.js';
224
+ export { BuildingIcon } from './components/Icons/BuildingIcon.js';
225
+ export { FileTextIcon } from './components/Icons/FileTextIcon.js';
226
+ export { PauseIcon } from './components/Icons/PauseIcon.js';
227
+ export { StopIcon } from './components/Icons/StopIcon.js';
228
+ export { SendIcon } from './components/Icons/SendIcon.js';
229
+ export { TerminalIcon } from './components/Icons/TerminalIcon.js';
230
+ export { GitBranchIcon } from './components/Icons/GitBranchIcon.js';
231
+ export { BugIcon } from './components/Icons/BugIcon.js';
232
+ export { MinusIcon } from './components/Icons/MinusIcon.js';
233
+ export { PinIcon } from './components/Icons/PinIcon.js';
198
234
  export { useKeyboard } from './hooks/useKeyboard/useKeyboard.js';
199
235
  export { useControlledState } from './hooks/useControlledState/useControlledState.js';
200
236
  export { useFocusTrap } from './hooks/useFocusTrap/useFocusTrap.js';
@@ -204,6 +240,13 @@ export { useDisclosure } from './hooks/useDisclosure/useDisclosure.js';
204
240
  export { useClipboard } from './hooks/useClipboard/useClipboard.js';
205
241
  export { useClickOutside } from './hooks/useClickOutside/useClickOutside.js';
206
242
  export { useHotkey } from './hooks/useHotkey/useHotkey.js';
243
+ export { useMediaQuery } from './hooks/useMediaQuery/useMediaQuery.js';
244
+ export { useBreakpoint } from './hooks/useBreakpoint/useBreakpoint.js';
245
+ export { useDebouncedValue } from './hooks/useDebounced/useDebouncedValue.js';
246
+ export { useDebouncedCallback } from './hooks/useDebounced/useDebouncedCallback.js';
247
+ export { useThrottledCallback } from './hooks/useThrottledCallback/useThrottledCallback.js';
248
+ export { useIntersectionObserver } from './hooks/useIntersectionObserver/useIntersectionObserver.js';
249
+ export { useListboxNav } from './hooks/useListboxNav/useListboxNav.js';
207
250
  export { useTheme } from './hooks/useTheme/useTheme.js';
208
251
  export { cx as cn, cx } from './utils/cx.js';
209
252
  export { getKeyGlyph, getPlatform, parseShortcut } from './utils/platform.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * Library breakpoint values (px) — used by responsive components like
3
+ * `Stack` and exposed via `useBreakpoint`.
4
+ *
5
+ * Values follow the same scale Stack already uses (576/768/992/1200) and
6
+ * are part of the public API.
7
+ *
8
+ * `xs` is always `0` and effectively means "no minimum"; every viewport
9
+ * matches `xs`.
10
+ */
11
+ const breakpoints = {
12
+ xs: 0,
13
+ sm: 576,
14
+ md: 768,
15
+ lg: 992,
16
+ xl: 1200,
17
+ };
18
+ const BREAKPOINT_ORDER = [
19
+ 'xs',
20
+ 'sm',
21
+ 'md',
22
+ 'lg',
23
+ 'xl',
24
+ ];
25
+
26
+ export { BREAKPOINT_ORDER, breakpoints };
27
+ //# sourceMappingURL=breakpoints.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"breakpoints.js","sources":["../../../../src/theme/breakpoints.ts"],"sourcesContent":[null],"names":[],"mappings":"AAAA;;;;;;;;;AASG;AACI,MAAM,WAAW,GAAG;AACzB,IAAA,EAAE,EAAE,CAAC;AACL,IAAA,EAAE,EAAE,GAAG;AACP,IAAA,EAAE,EAAE,GAAG;AACP,IAAA,EAAE,EAAE,GAAG;AACP,IAAA,EAAE,EAAE,IAAI;;AAKH,MAAM,gBAAgB,GAA8B;IACzD,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;IACJ,IAAI;;;;;"}
@@ -7,4 +7,5 @@ export { createLightTheme } from './createLightTheme.js';
7
7
  export { VanillaThemeProvider } from './VanillaThemeProvider.js';
8
8
  export { ThemeProvider } from './ThemeProvider.js';
9
9
  export { GLOBAL_SCROLLBARS_CLASS } from './globalScrollbars.css.js';
10
+ export { BREAKPOINT_ORDER, breakpoints } from './breakpoints.js';
10
11
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;"}
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;"}
@@ -1,4 +1,4 @@
1
- /* Entangle UI dark theme — token export (v0.8.1) */
1
+ /* Entangle UI dark theme — token export (v0.9.0) */
2
2
  /* Generated by scripts/export-tokens.ts — do not edit by hand. */
3
3
  :root {
4
4
  --etui-color-accent-error: #f44336;
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://design-tokens.org/schema.json",
3
3
  "$description": "Entangle UI design tokens",
4
- "$version": "0.8.1",
4
+ "$version": "0.9.0",
5
5
  "themes": {
6
6
  "dark": {
7
7
  "colors": {
@@ -1,4 +1,4 @@
1
- /* Entangle UI light theme — token export (v0.8.1) */
1
+ /* Entangle UI light theme — token export (v0.9.0) */
2
2
  /* Generated by scripts/export-tokens.ts — do not edit by hand. */
3
3
  .etui-theme-light {
4
4
  --etui-color-accent-error: #d32f2f;
@@ -0,0 +1,33 @@
1
+ import React from 'react';
2
+ import { IconSize, IconColor } from '../primitives/Icon/Icon.js';
3
+
4
+ /**
5
+ * Archive icon component for archiving and storing items.
6
+ *
7
+ * A box with a lid commonly used for archiving content,
8
+ * moving items out of active views, and long-term storage actions.
9
+ *
10
+ * @example
11
+ * ```tsx
12
+ * // Basic usage
13
+ * <ArchiveIcon />
14
+ *
15
+ * // With custom size and color
16
+ * <ArchiveIcon size="md" color="muted" />
17
+ *
18
+ * // In an archive action
19
+ * <Button icon={<ArchiveIcon />}>Archive</Button>
20
+ * ```
21
+ */
22
+ declare const ArchiveIcon: React.NamedExoticComponent<Omit<{
23
+ children: React.ReactNode;
24
+ size?: IconSize | undefined;
25
+ color?: IconColor | undefined;
26
+ className?: string | undefined;
27
+ title?: string | undefined;
28
+ decorative?: boolean | undefined;
29
+ testId?: string | undefined;
30
+ ref?: React.Ref<SVGSVGElement> | undefined;
31
+ }, "children">>;
32
+
33
+ export { ArchiveIcon };
@@ -0,0 +1,33 @@
1
+ import React from 'react';
2
+ import { IconSize, IconColor } from '../primitives/Icon/Icon.js';
3
+
4
+ /**
5
+ * Bug icon component for debugging and issue reporting.
6
+ *
7
+ * A symmetrical insect silhouette commonly used for debugger panels,
8
+ * "Report bug" actions, and error severity indicators.
9
+ *
10
+ * @example
11
+ * ```tsx
12
+ * // Basic usage
13
+ * <BugIcon />
14
+ *
15
+ * // With custom size and color
16
+ * <BugIcon size="md" color="error" />
17
+ *
18
+ * // In a debugger panel toggle
19
+ * <IconButton icon={<BugIcon />} label="Toggle debugger" />
20
+ * ```
21
+ */
22
+ declare const BugIcon: React.NamedExoticComponent<Omit<{
23
+ children: React.ReactNode;
24
+ size?: IconSize | undefined;
25
+ color?: IconColor | undefined;
26
+ className?: string | undefined;
27
+ title?: string | undefined;
28
+ decorative?: boolean | undefined;
29
+ testId?: string | undefined;
30
+ ref?: React.Ref<SVGSVGElement> | undefined;
31
+ }, "children">>;
32
+
33
+ export { BugIcon };
@@ -0,0 +1,33 @@
1
+ import React from 'react';
2
+ import { IconSize, IconColor } from '../primitives/Icon/Icon.js';
3
+
4
+ /**
5
+ * Building icon component for organizations and architectural contexts.
6
+ *
7
+ * A multi-story building with windows, commonly used for company entries,
8
+ * workspaces, and architecture-related personas or sections.
9
+ *
10
+ * @example
11
+ * ```tsx
12
+ * // Basic usage
13
+ * <BuildingIcon />
14
+ *
15
+ * // With custom size and color
16
+ * <BuildingIcon size="md" color="secondary" />
17
+ *
18
+ * // In a company picker
19
+ * <Button icon={<BuildingIcon />}>Organization</Button>
20
+ * ```
21
+ */
22
+ declare const BuildingIcon: React.NamedExoticComponent<Omit<{
23
+ children: React.ReactNode;
24
+ size?: IconSize | undefined;
25
+ color?: IconColor | undefined;
26
+ className?: string | undefined;
27
+ title?: string | undefined;
28
+ decorative?: boolean | undefined;
29
+ testId?: string | undefined;
30
+ ref?: React.Ref<SVGSVGElement> | undefined;
31
+ }, "children">>;
32
+
33
+ export { BuildingIcon };