@vuer-ai/vuer-uikit 0.0.88 → 0.0.89

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 (263) hide show
  1. package/dist/SyncScroll/SyncScroll.cjs +3 -3
  2. package/dist/SyncScroll/SyncScroll.mjs +3 -3
  3. package/dist/SyncScroll/index.cjs +3 -3
  4. package/dist/SyncScroll/index.mjs +3 -3
  5. package/dist/{chunk-DKDXGIOU.cjs → chunk-2LIAVSDV.cjs} +2 -2
  6. package/dist/{chunk-VI67LD6E.mjs → chunk-3HUKXFD4.mjs} +1 -1
  7. package/dist/chunk-43ZAEQYD.cjs +564 -0
  8. package/dist/chunk-5PDZWPUI.cjs +208 -0
  9. package/dist/chunk-6FY4AL6N.mjs +15 -0
  10. package/dist/{chunk-XIAVCKC3.mjs → chunk-7YRIF5K4.mjs} +1 -1
  11. package/dist/chunk-AFJ6DMZW.cjs +54 -0
  12. package/dist/{chunk-UKSD5GPI.cjs → chunk-AI2OGSMP.cjs} +2 -2
  13. package/dist/{chunk-URUEOOWI.cjs → chunk-AUCWPDXH.cjs} +2 -2
  14. package/dist/chunk-AUENXQXS.mjs +206 -0
  15. package/dist/{chunk-I2UIJ23T.mjs → chunk-AXTZ2RY6.mjs} +1 -1
  16. package/dist/chunk-C4VVMAPU.cjs +285 -0
  17. package/dist/chunk-CGNTK3WP.cjs +494 -0
  18. package/dist/{chunk-IWS7VNJQ.mjs → chunk-D3U5PLHK.mjs} +1 -1
  19. package/dist/chunk-DG3DDLXZ.mjs +599 -0
  20. package/dist/chunk-E4AGCYEF.mjs +545 -0
  21. package/dist/chunk-EAQAIANE.mjs +20 -0
  22. package/dist/{chunk-BGYHKHMQ.mjs → chunk-FBPAIVBH.mjs} +1 -1
  23. package/dist/{chunk-TKV4YQPL.cjs → chunk-FR6JWEU4.cjs} +1 -1
  24. package/dist/chunk-G5JZGNKY.cjs +308 -0
  25. package/dist/{chunk-YSUCUNBJ.mjs → chunk-GMGAUN57.mjs} +1 -1
  26. package/dist/{chunk-LY5RLGFY.cjs → chunk-GPSSQ7XQ.cjs} +2 -2
  27. package/dist/chunk-H5LP5KMB.cjs +624 -0
  28. package/dist/{chunk-ALQIRJAV.mjs → chunk-HOF7YOYS.mjs} +1 -1
  29. package/dist/{chunk-NQVD3ZW4.cjs → chunk-I22QSUB7.cjs} +1 -1
  30. package/dist/{chunk-ZQNV64BB.cjs → chunk-IBSCKXGA.cjs} +2 -2
  31. package/dist/{chunk-6K3HTR4W.cjs → chunk-IPBOH3RD.cjs} +2 -2
  32. package/dist/chunk-ISLTDEPI.cjs +99 -0
  33. package/dist/{chunk-X3RZDN2C.cjs → chunk-IZNQXFZ6.cjs} +2 -2
  34. package/dist/{chunk-JWS7MZGX.mjs → chunk-J2RFARFN.mjs} +1 -1
  35. package/dist/{chunk-6NUAFTM5.cjs → chunk-JO5TYMHM.cjs} +2 -2
  36. package/dist/{chunk-7WS53WEO.cjs → chunk-JSUB7URV.cjs} +2 -2
  37. package/dist/chunk-KVRUJWH2.mjs +283 -0
  38. package/dist/chunk-KZP7AY75.cjs +22 -0
  39. package/dist/{chunk-4V5DMSTZ.mjs → chunk-LQWJ34PD.mjs} +1 -1
  40. package/dist/{chunk-7CP6EUTM.mjs → chunk-M7CWV3WR.mjs} +1 -1
  41. package/dist/{chunk-OLCFDXGF.mjs → chunk-OBYDDCUD.mjs} +1 -1
  42. package/dist/chunk-PDOFOJ4P.mjs +300 -0
  43. package/dist/{chunk-IV3CZ27Q.cjs → chunk-PHRBUOTG.cjs} +2 -2
  44. package/dist/{chunk-ZE7BMGJN.mjs → chunk-PXVFCVUE.mjs} +1 -1
  45. package/dist/{chunk-QN5Q5OCZ.mjs → chunk-QAERXYKR.mjs} +28 -4
  46. package/dist/{chunk-HMGDXKPW.cjs → chunk-QGGJXDBC.cjs} +2 -2
  47. package/dist/chunk-QKQFSQ6A.mjs +489 -0
  48. package/dist/{chunk-I7NPMMUG.cjs → chunk-RBKCE3N7.cjs} +28 -4
  49. package/dist/{chunk-VWPT77VT.mjs → chunk-SGYNKN5X.mjs} +1 -1
  50. package/dist/chunk-SH4FDQTB.mjs +94 -0
  51. package/dist/{chunk-U2CXSVXD.cjs → chunk-SJPXQV2G.cjs} +2 -2
  52. package/dist/{chunk-SCQQZUQV.mjs → chunk-SQBCVWEA.mjs} +1 -1
  53. package/dist/{chunk-72Q6YVID.cjs → chunk-TG4B5Y3I.cjs} +2 -2
  54. package/dist/chunk-VE3XLQLO.cjs +21 -0
  55. package/dist/chunk-WHRN67N6.mjs +51 -0
  56. package/dist/{chunk-4JAPZTNY.mjs → chunk-XTE66VZ3.mjs} +1 -1
  57. package/dist/dial/DialPanel.cjs +121 -0
  58. package/dist/dial/DialPanel.d.cts +9 -0
  59. package/dist/dial/DialPanel.d.ts +9 -0
  60. package/dist/dial/DialPanel.mjs +112 -0
  61. package/dist/dial/DialProvider.cjs +14 -0
  62. package/dist/dial/DialProvider.d.cts +48 -0
  63. package/dist/dial/DialProvider.d.ts +48 -0
  64. package/dist/dial/DialProvider.mjs +1 -0
  65. package/dist/dial/index.cjs +193 -0
  66. package/dist/dial/index.d.cts +5 -0
  67. package/dist/dial/index.d.ts +5 -0
  68. package/dist/dial/index.mjs +112 -0
  69. package/dist/dial/wrapped-inputs/ControlledInputs.cjs +137 -0
  70. package/dist/dial/wrapped-inputs/ControlledInputs.d.cts +21 -0
  71. package/dist/dial/wrapped-inputs/ControlledInputs.d.ts +21 -0
  72. package/dist/dial/wrapped-inputs/ControlledInputs.mjs +112 -0
  73. package/dist/dial/wrapped-inputs/DialVectorNInput.cjs +121 -0
  74. package/dist/dial/wrapped-inputs/DialVectorNInput.d.cts +15 -0
  75. package/dist/dial/wrapped-inputs/DialVectorNInput.d.ts +15 -0
  76. package/dist/dial/wrapped-inputs/DialVectorNInput.mjs +112 -0
  77. package/dist/dial/wrapped-inputs/DialWrappedInputs.cjs +161 -0
  78. package/dist/dial/wrapped-inputs/DialWrappedInputs.d.cts +24 -0
  79. package/dist/dial/wrapped-inputs/DialWrappedInputs.d.ts +24 -0
  80. package/dist/dial/wrapped-inputs/DialWrappedInputs.mjs +112 -0
  81. package/dist/dial/wrapped-inputs/index.cjs +185 -0
  82. package/dist/dial/wrapped-inputs/index.d.cts +4 -0
  83. package/dist/dial/wrapped-inputs/index.d.ts +4 -0
  84. package/dist/dial/wrapped-inputs/index.mjs +112 -0
  85. package/dist/highlight-cursor/enhanced-components.cjs +10 -10
  86. package/dist/highlight-cursor/enhanced-components.mjs +5 -5
  87. package/dist/highlight-cursor/index.cjs +10 -10
  88. package/dist/highlight-cursor/index.mjs +5 -5
  89. package/dist/hooks/index.cjs +12 -12
  90. package/dist/hooks/index.mjs +3 -3
  91. package/dist/hooks/useQueryParams.cjs +3 -3
  92. package/dist/hooks/useQueryParams.mjs +2 -2
  93. package/dist/index.cjs +475 -397
  94. package/dist/index.d.cts +4 -0
  95. package/dist/index.d.ts +4 -0
  96. package/dist/index.mjs +55 -53
  97. package/dist/ui/UIKitBadge.cjs +8 -8
  98. package/dist/ui/UIKitBadge.mjs +4 -4
  99. package/dist/ui/avatar.cjs +3 -3
  100. package/dist/ui/avatar.mjs +3 -3
  101. package/dist/ui/badge.cjs +3 -3
  102. package/dist/ui/badge.d.cts +1 -1
  103. package/dist/ui/badge.d.ts +1 -1
  104. package/dist/ui/badge.mjs +3 -3
  105. package/dist/ui/button.cjs +3 -3
  106. package/dist/ui/button.mjs +3 -3
  107. package/dist/ui/card.cjs +3 -3
  108. package/dist/ui/card.mjs +3 -3
  109. package/dist/ui/checkbox.cjs +3 -3
  110. package/dist/ui/checkbox.mjs +3 -3
  111. package/dist/ui/collapsible.cjs +3 -3
  112. package/dist/ui/collapsible.mjs +3 -3
  113. package/dist/ui/drawer.cjs +3 -3
  114. package/dist/ui/drawer.mjs +3 -3
  115. package/dist/ui/dropdown.cjs +3 -3
  116. package/dist/ui/dropdown.mjs +3 -3
  117. package/dist/ui/index.cjs +390 -390
  118. package/dist/ui/index.mjs +52 -52
  119. package/dist/ui/inputs/color-input.cjs +3 -3
  120. package/dist/ui/inputs/color-input.mjs +3 -3
  121. package/dist/ui/inputs/index.cjs +39 -39
  122. package/dist/ui/inputs/index.mjs +18 -18
  123. package/dist/ui/inputs/input-numbers.cjs +5 -5
  124. package/dist/ui/inputs/input-numbers.d.cts +7 -2
  125. package/dist/ui/inputs/input-numbers.d.ts +7 -2
  126. package/dist/ui/inputs/input-numbers.mjs +4 -4
  127. package/dist/ui/inputs/input.cjs +3 -3
  128. package/dist/ui/inputs/input.d.cts +1 -1
  129. package/dist/ui/inputs/input.d.ts +1 -1
  130. package/dist/ui/inputs/input.mjs +3 -3
  131. package/dist/ui/inputs/number-inputs/CmInput.cjs +6 -6
  132. package/dist/ui/inputs/number-inputs/CmInput.mjs +5 -5
  133. package/dist/ui/inputs/number-inputs/DegInput.cjs +6 -6
  134. package/dist/ui/inputs/number-inputs/DegInput.mjs +5 -5
  135. package/dist/ui/inputs/number-inputs/EulerDegInput.cjs +8 -8
  136. package/dist/ui/inputs/number-inputs/EulerDegInput.mjs +7 -7
  137. package/dist/ui/inputs/number-inputs/EulerInput.cjs +7 -7
  138. package/dist/ui/inputs/number-inputs/EulerInput.mjs +6 -6
  139. package/dist/ui/inputs/number-inputs/EulerRadInput.cjs +8 -8
  140. package/dist/ui/inputs/number-inputs/EulerRadInput.mjs +7 -7
  141. package/dist/ui/inputs/number-inputs/InchInput.cjs +6 -6
  142. package/dist/ui/inputs/number-inputs/InchInput.mjs +5 -5
  143. package/dist/ui/inputs/number-inputs/IntInput.cjs +6 -6
  144. package/dist/ui/inputs/number-inputs/IntInput.mjs +5 -5
  145. package/dist/ui/inputs/number-inputs/KVectorInput.cjs +7 -7
  146. package/dist/ui/inputs/number-inputs/KVectorInput.mjs +6 -6
  147. package/dist/ui/inputs/number-inputs/QuaternionInput.cjs +7 -7
  148. package/dist/ui/inputs/number-inputs/QuaternionInput.mjs +6 -6
  149. package/dist/ui/inputs/number-inputs/RadInput.cjs +6 -6
  150. package/dist/ui/inputs/number-inputs/RadInput.mjs +5 -5
  151. package/dist/ui/inputs/number-inputs/TimeInput.cjs +6 -6
  152. package/dist/ui/inputs/number-inputs/TimeInput.mjs +5 -5
  153. package/dist/ui/inputs/number-inputs/Vec3Input.cjs +7 -7
  154. package/dist/ui/inputs/number-inputs/Vec3Input.mjs +6 -6
  155. package/dist/ui/inputs/number-inputs/VectorInput.cjs +6 -6
  156. package/dist/ui/inputs/number-inputs/VectorInput.d.cts +6 -0
  157. package/dist/ui/inputs/number-inputs/VectorInput.d.ts +6 -0
  158. package/dist/ui/inputs/number-inputs/VectorInput.mjs +5 -5
  159. package/dist/ui/inputs/number-inputs/index.cjs +36 -36
  160. package/dist/ui/inputs/number-inputs/index.mjs +17 -17
  161. package/dist/ui/inputs/presets-input.cjs +6 -6
  162. package/dist/ui/inputs/presets-input.mjs +5 -5
  163. package/dist/ui/label.cjs +3 -3
  164. package/dist/ui/label.mjs +3 -3
  165. package/dist/ui/layout.cjs +5 -5
  166. package/dist/ui/layout.mjs +4 -4
  167. package/dist/ui/layouts/dock-layout/DockLayoutView.cjs +3 -3
  168. package/dist/ui/layouts/dock-layout/DockLayoutView.mjs +3 -3
  169. package/dist/ui/layouts/dock-layout/LayoutSlots.cjs +3 -3
  170. package/dist/ui/layouts/dock-layout/LayoutSlots.mjs +3 -3
  171. package/dist/ui/layouts/dock-layout/index.cjs +3 -3
  172. package/dist/ui/layouts/dock-layout/index.mjs +3 -3
  173. package/dist/ui/layouts/index.cjs +9 -9
  174. package/dist/ui/layouts/index.mjs +5 -5
  175. package/dist/ui/layouts/liquid-layout/LayoutSlots.cjs +3 -3
  176. package/dist/ui/layouts/liquid-layout/LayoutSlots.mjs +3 -3
  177. package/dist/ui/layouts/liquid-layout/LiquidLayoutView.cjs +3 -3
  178. package/dist/ui/layouts/liquid-layout/LiquidLayoutView.mjs +3 -3
  179. package/dist/ui/layouts/liquid-layout/index.cjs +3 -3
  180. package/dist/ui/layouts/liquid-layout/index.mjs +3 -3
  181. package/dist/ui/modal.cjs +3 -3
  182. package/dist/ui/modal.mjs +3 -3
  183. package/dist/ui/navigation.cjs +3 -3
  184. package/dist/ui/navigation.mjs +3 -3
  185. package/dist/ui/pagination.cjs +3 -3
  186. package/dist/ui/pagination.mjs +3 -3
  187. package/dist/ui/panel.cjs +3 -3
  188. package/dist/ui/panel.mjs +3 -3
  189. package/dist/ui/popover.cjs +3 -3
  190. package/dist/ui/popover.mjs +3 -3
  191. package/dist/ui/radio-group.cjs +3 -3
  192. package/dist/ui/radio-group.mjs +3 -3
  193. package/dist/ui/resizable.cjs +3 -3
  194. package/dist/ui/resizable.mjs +3 -3
  195. package/dist/ui/select.cjs +3 -3
  196. package/dist/ui/select.d.cts +1 -1
  197. package/dist/ui/select.d.ts +1 -1
  198. package/dist/ui/select.mjs +3 -3
  199. package/dist/ui/separator.cjs +3 -3
  200. package/dist/ui/separator.mjs +3 -3
  201. package/dist/ui/sheet.cjs +3 -3
  202. package/dist/ui/sheet.mjs +3 -3
  203. package/dist/ui/sidebar.cjs +29 -29
  204. package/dist/ui/sidebar.mjs +5 -5
  205. package/dist/ui/simple-tree-view.cjs +3 -3
  206. package/dist/ui/simple-tree-view.mjs +3 -3
  207. package/dist/ui/skeleton.cjs +3 -3
  208. package/dist/ui/skeleton.mjs +3 -3
  209. package/dist/ui/slider.cjs +3 -3
  210. package/dist/ui/slider.mjs +3 -3
  211. package/dist/ui/switch.cjs +3 -3
  212. package/dist/ui/switch.mjs +3 -3
  213. package/dist/ui/table.cjs +3 -3
  214. package/dist/ui/table.mjs +3 -3
  215. package/dist/ui/tabs.cjs +3 -3
  216. package/dist/ui/tabs.mjs +3 -3
  217. package/dist/ui/textarea.cjs +3 -3
  218. package/dist/ui/textarea.d.cts +1 -1
  219. package/dist/ui/textarea.d.ts +1 -1
  220. package/dist/ui/textarea.mjs +3 -3
  221. package/dist/ui/theme/ThemeToggles.cjs +3 -3
  222. package/dist/ui/theme/ThemeToggles.mjs +3 -3
  223. package/dist/ui/theme/index.cjs +3 -3
  224. package/dist/ui/theme/index.mjs +3 -3
  225. package/dist/ui/toggle-buttons.cjs +3 -3
  226. package/dist/ui/toggle-buttons.mjs +3 -3
  227. package/dist/ui/toggle-group.cjs +3 -3
  228. package/dist/ui/toggle-group.mjs +3 -3
  229. package/dist/ui/toggle.cjs +3 -3
  230. package/dist/ui/toggle.mjs +3 -3
  231. package/dist/ui/toolbar.cjs +3 -3
  232. package/dist/ui/toolbar.mjs +3 -3
  233. package/dist/ui/tooltip.cjs +3 -3
  234. package/dist/ui/tooltip.mjs +3 -3
  235. package/dist/ui/tree-view/TreeSearchBar.cjs +3 -3
  236. package/dist/ui/tree-view/TreeSearchBar.mjs +3 -3
  237. package/dist/ui/tree-view/TreeView.cjs +3 -3
  238. package/dist/ui/tree-view/TreeView.mjs +3 -3
  239. package/dist/ui/tree-view/index.cjs +4 -4
  240. package/dist/ui/tree-view/index.mjs +4 -4
  241. package/dist/ui/tree-view-legacy.cjs +3 -3
  242. package/dist/ui/tree-view-legacy.mjs +3 -3
  243. package/dist/ui/waterfall/CursorOverlay.cjs +3 -3
  244. package/dist/ui/waterfall/CursorOverlay.mjs +3 -3
  245. package/dist/ui/waterfall/TimelineEvent.cjs +3 -3
  246. package/dist/ui/waterfall/TimelineEvent.mjs +3 -3
  247. package/dist/ui/waterfall/TimelineProcessBar.cjs +3 -3
  248. package/dist/ui/waterfall/TimelineProcessBar.mjs +3 -3
  249. package/dist/ui/waterfall/Wedges.cjs +3 -3
  250. package/dist/ui/waterfall/Wedges.mjs +3 -3
  251. package/dist/ui/waterfall/index.cjs +11 -11
  252. package/dist/ui/waterfall/index.mjs +10 -10
  253. package/package.json +1 -1
  254. package/dist/chunk-VFSVU357.cjs +0 -11
  255. package/dist/chunk-XOZ6S53T.mjs +0 -9
  256. package/dist/{chunk-6U6BHFK4.cjs → chunk-245M2MZD.cjs} +4 -4
  257. package/dist/{chunk-A2PCEL5S.mjs → chunk-4AOAH77D.mjs} +2 -2
  258. package/dist/{chunk-K6FXUV3A.mjs → chunk-4EGKBNF2.mjs} +1 -1
  259. package/dist/{chunk-7QRSUUA2.cjs → chunk-74ETKEMH.cjs} +2 -2
  260. package/dist/{chunk-N22BVDJM.mjs → chunk-K4DBU34E.mjs} +4 -4
  261. package/dist/{chunk-Q4XH2Z5M.cjs → chunk-LYZJNEOR.cjs} +1 -1
  262. package/dist/{chunk-U3LN5NB6.mjs → chunk-OEIF3JCH.mjs} +1 -1
  263. package/dist/{chunk-QUFZWF4E.cjs → chunk-POGM4FXC.cjs} +1 -1
@@ -0,0 +1,494 @@
1
+ 'use strict';
2
+
3
+ var chunkLCCNBVKZ_cjs = require('./chunk-LCCNBVKZ.cjs');
4
+ var chunk3UEVUYFQ_cjs = require('./chunk-3UEVUYFQ.cjs');
5
+ var chunkG5JZGNKY_cjs = require('./chunk-G5JZGNKY.cjs');
6
+ var chunkOHIB3TEN_cjs = require('./chunk-OHIB3TEN.cjs');
7
+ var lucideReact = require('lucide-react');
8
+ var react = require('react');
9
+ var jsxRuntime = require('react/jsx-runtime');
10
+
11
+ function TreeView({
12
+ data,
13
+ getIcon,
14
+ onVisibleDataChange,
15
+ onItemHover,
16
+ className,
17
+ hoveredId,
18
+ isSelectable = false,
19
+ selectedItemId,
20
+ onSelectChange,
21
+ isSearchable = true,
22
+ alwaysShowExpand = false,
23
+ useSyncScroll = false,
24
+ // External search state props
25
+ searchQuery: externalSearchQuery,
26
+ onSearchQueryChange: externalOnSearchQueryChange,
27
+ isCaseSensitive: externalIsCaseSensitive,
28
+ onIsCaseSensitiveChange: externalOnIsCaseSensitiveChange,
29
+ isRegex: externalIsRegex,
30
+ onIsRegexChange: externalOnIsRegexChange
31
+ }) {
32
+ const [expandedItems, setExpandedItems] = react.useState(() => {
33
+ const initial = /* @__PURE__ */ new Set();
34
+ data.forEach((item) => {
35
+ if (item.isCollapsible) initial.add(item.id);
36
+ });
37
+ return initial;
38
+ });
39
+ const [internalSearchQuery, setInternalSearchQuery] = react.useState("");
40
+ const [internalIsCaseSensitive, setInternalIsCaseSensitive] = react.useState(false);
41
+ const [internalIsRegex, setInternalIsRegex] = react.useState(false);
42
+ const [isRegexValid, setIsRegexValid] = react.useState(true);
43
+ const searchQuery = externalSearchQuery ?? internalSearchQuery;
44
+ const setSearchQuery = externalOnSearchQueryChange ?? setInternalSearchQuery;
45
+ const isCaseSensitive = externalIsCaseSensitive ?? internalIsCaseSensitive;
46
+ const isRegex = externalIsRegex ?? internalIsRegex;
47
+ const setIsCaseSensitive = (value) => {
48
+ if (externalOnIsCaseSensitiveChange) {
49
+ externalOnIsCaseSensitiveChange(value);
50
+ } else {
51
+ setInternalIsCaseSensitive(value);
52
+ }
53
+ };
54
+ const setIsRegex = (value) => {
55
+ if (externalOnIsRegexChange) {
56
+ externalOnIsRegexChange(value);
57
+ } else {
58
+ setInternalIsRegex(value);
59
+ }
60
+ };
61
+ const toggleItem = (id) => {
62
+ setExpandedItems((prev) => {
63
+ const newSet = new Set(prev);
64
+ if (newSet.has(id)) {
65
+ newSet.delete(id);
66
+ } else {
67
+ newSet.add(id);
68
+ }
69
+ return newSet;
70
+ });
71
+ };
72
+ const handleItemSelect = (id) => {
73
+ if (isSelectable && onSelectChange) {
74
+ onSelectChange(selectedItemId === id ? null : id);
75
+ }
76
+ };
77
+ const hasDescendants = (itemId) => {
78
+ return (childrenMap.get(itemId) || []).length > 0;
79
+ };
80
+ const childrenMap = react.useMemo(() => {
81
+ const map = /* @__PURE__ */ new Map();
82
+ data.forEach((item) => {
83
+ if (!map.has(item.parentId)) {
84
+ map.set(item.parentId, []);
85
+ }
86
+ map.get(item.parentId).push(item);
87
+ });
88
+ return map;
89
+ }, [data]);
90
+ const dataWithMeta = react.useMemo(() => {
91
+ const dataMap = new Map(data.map((item) => [item.id, item]));
92
+ const getAncestors = (item) => {
93
+ const ancestors = [];
94
+ let current = item.parentId;
95
+ while (current) {
96
+ const parent = dataMap.get(current);
97
+ if (parent) {
98
+ ancestors.unshift(parent);
99
+ current = parent.parentId;
100
+ } else {
101
+ break;
102
+ }
103
+ }
104
+ return ancestors;
105
+ };
106
+ const sortedData = [];
107
+ const visited = /* @__PURE__ */ new Set();
108
+ const traverseNode = (nodeId, depth = 0) => {
109
+ const children = childrenMap.get(nodeId) || [];
110
+ children.forEach((child) => {
111
+ if (!visited.has(child.id)) {
112
+ visited.add(child.id);
113
+ sortedData.push(child);
114
+ traverseNode(child.id, depth + 1);
115
+ }
116
+ });
117
+ };
118
+ traverseNode(null);
119
+ return sortedData.map((item) => {
120
+ const siblings = childrenMap.get(item.parentId) || [];
121
+ const isLast = siblings.length > 0 && siblings[siblings.length - 1].id === item.id;
122
+ const ancestors = getAncestors(item);
123
+ const indent = ancestors.length;
124
+ return { ...item, indent, isLast, ancestors };
125
+ });
126
+ }, [data, childrenMap]);
127
+ const visibleData = react.useMemo(() => {
128
+ const dataMap = new Map(data.map((item) => [item.id, item]));
129
+ if (!searchQuery) {
130
+ const isVisible = (item) => {
131
+ return item.ancestors.every((ancestor) => expandedItems.has(ancestor.id));
132
+ };
133
+ return dataWithMeta.filter(isVisible);
134
+ }
135
+ const matchingAndAncestorIds = /* @__PURE__ */ new Set();
136
+ let regex = null;
137
+ if (isRegex) {
138
+ try {
139
+ regex = new RegExp(searchQuery, isCaseSensitive ? "" : "i");
140
+ if (!isRegexValid) setIsRegexValid(true);
141
+ } catch {
142
+ if (isRegexValid) setIsRegexValid(false);
143
+ return [];
144
+ }
145
+ }
146
+ data.forEach((item) => {
147
+ let labelMatches = false;
148
+ if (regex) {
149
+ labelMatches = regex.test(item.label);
150
+ } else {
151
+ const source = isCaseSensitive ? item.label : item.label.toLowerCase();
152
+ const query = isCaseSensitive ? searchQuery : searchQuery.toLowerCase();
153
+ labelMatches = source.includes(query);
154
+ }
155
+ if (labelMatches) {
156
+ matchingAndAncestorIds.add(item.id);
157
+ let current = item.parentId;
158
+ while (current) {
159
+ const parent = dataMap.get(current);
160
+ if (parent) {
161
+ matchingAndAncestorIds.add(parent.id);
162
+ current = parent.parentId;
163
+ } else {
164
+ break;
165
+ }
166
+ }
167
+ }
168
+ });
169
+ return dataWithMeta.filter((item) => matchingAndAncestorIds.has(item.id));
170
+ }, [searchQuery, dataWithMeta, expandedItems, isCaseSensitive, isRegex, isRegexValid, data]);
171
+ const searchResultsCount = react.useMemo(() => {
172
+ if (!searchQuery || !isRegexValid) return 0;
173
+ let count = 0;
174
+ let regex = null;
175
+ if (isRegex) {
176
+ try {
177
+ regex = new RegExp(searchQuery, isCaseSensitive ? "" : "i");
178
+ } catch {
179
+ return 0;
180
+ }
181
+ }
182
+ data.forEach((item) => {
183
+ let labelMatches = false;
184
+ if (regex) {
185
+ labelMatches = regex.test(item.label);
186
+ } else {
187
+ const source = isCaseSensitive ? item.label : item.label.toLowerCase();
188
+ const query = isCaseSensitive ? searchQuery : searchQuery.toLowerCase();
189
+ labelMatches = source.includes(query);
190
+ }
191
+ if (labelMatches) {
192
+ count++;
193
+ }
194
+ });
195
+ return count;
196
+ }, [searchQuery, data, isCaseSensitive, isRegex, isRegexValid]);
197
+ react.useEffect(() => {
198
+ onVisibleDataChange?.(visibleData);
199
+ }, [visibleData, onVisibleDataChange]);
200
+ const renderLabel = (label) => {
201
+ if (!searchQuery || !isRegexValid) {
202
+ return label;
203
+ }
204
+ let regex;
205
+ try {
206
+ regex = new RegExp(`(${searchQuery})`, isCaseSensitive ? "g" : "gi");
207
+ } catch {
208
+ return label;
209
+ }
210
+ const parts = label.split(regex);
211
+ return /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: parts.map(
212
+ (part, i) => i % 2 === 1 ? /* @__PURE__ */ jsxRuntime.jsx("span", { className: "rounded-uk-xs bg-accent-warning", children: part }, i) : part
213
+ ) });
214
+ };
215
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: chunkOHIB3TEN_cjs.cn("flex flex-col", className), children: [
216
+ isSearchable && /* @__PURE__ */ jsxRuntime.jsx(
217
+ TreeSearchBar,
218
+ {
219
+ searchQuery,
220
+ setSearchQuery,
221
+ isCaseSensitive,
222
+ setIsCaseSensitive,
223
+ isRegex,
224
+ setIsRegex,
225
+ isRegexValid,
226
+ searchResultsCount
227
+ }
228
+ ),
229
+ /* @__PURE__ */ jsxRuntime.jsx(
230
+ TreeEntries,
231
+ {
232
+ visibleData,
233
+ hoveredId,
234
+ onItemHover,
235
+ isSelectable,
236
+ selectedItemId,
237
+ handleItemSelect,
238
+ expandedItems,
239
+ toggleItem,
240
+ alwaysShowExpand,
241
+ hasDescendants,
242
+ getIcon,
243
+ renderLabel,
244
+ dataWithMeta,
245
+ useSyncScroll
246
+ }
247
+ )
248
+ ] });
249
+ }
250
+ function TreeSearchBar({
251
+ searchQuery,
252
+ setSearchQuery,
253
+ isCaseSensitive,
254
+ setIsCaseSensitive,
255
+ isRegex,
256
+ setIsRegex,
257
+ isRegexValid,
258
+ searchResultsCount
259
+ }) {
260
+ return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "shrink-0", children: [
261
+ /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-1 py-1", children: /* @__PURE__ */ jsxRuntime.jsxs(
262
+ chunk3UEVUYFQ_cjs.InputRoot,
263
+ {
264
+ type: "text",
265
+ placeholder: "Search...",
266
+ size: "md",
267
+ className: "flex-1",
268
+ inputClassName: chunkOHIB3TEN_cjs.cn(!isRegexValid && "text-red-500"),
269
+ value: searchQuery,
270
+ onChange: (e) => setSearchQuery(e.target.value),
271
+ children: [
272
+ /* @__PURE__ */ jsxRuntime.jsx(chunk3UEVUYFQ_cjs.InputSlot, { side: "left", children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Search, { className: "text-text-secondary size-4 stroke-1" }) }),
273
+ /* @__PURE__ */ jsxRuntime.jsx(chunk3UEVUYFQ_cjs.InputSlot, { side: "right", children: /* @__PURE__ */ jsxRuntime.jsxs(chunkLCCNBVKZ_cjs.TooltipProvider, { delayDuration: 200, children: [
274
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkLCCNBVKZ_cjs.Tooltip, { children: [
275
+ /* @__PURE__ */ jsxRuntime.jsx(chunkLCCNBVKZ_cjs.TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
276
+ "button",
277
+ {
278
+ onClick: () => setIsCaseSensitive((prev) => !prev),
279
+ className: chunkOHIB3TEN_cjs.cn(
280
+ "rounded-uk-sm mr-1 p-1",
281
+ isCaseSensitive ? "bg-shadow-secondary" : ""
282
+ ),
283
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.CaseSensitive, { className: "size-4" })
284
+ }
285
+ ) }),
286
+ /* @__PURE__ */ jsxRuntime.jsx(chunkLCCNBVKZ_cjs.TooltipContent, { children: /* @__PURE__ */ jsxRuntime.jsx("p", { children: "Case Sensitive" }) })
287
+ ] }),
288
+ /* @__PURE__ */ jsxRuntime.jsxs(chunkLCCNBVKZ_cjs.Tooltip, { children: [
289
+ /* @__PURE__ */ jsxRuntime.jsx(chunkLCCNBVKZ_cjs.TooltipTrigger, { asChild: true, children: /* @__PURE__ */ jsxRuntime.jsx(
290
+ "button",
291
+ {
292
+ onClick: () => setIsRegex((prev) => !prev),
293
+ className: chunkOHIB3TEN_cjs.cn("rounded-uk-sm p-1", isRegex && "bg-shadow-secondary"),
294
+ children: /* @__PURE__ */ jsxRuntime.jsx(lucideReact.Regex, { className: "size-4" })
295
+ }
296
+ ) }),
297
+ /* @__PURE__ */ jsxRuntime.jsx(chunkLCCNBVKZ_cjs.TooltipContent, { children: /* @__PURE__ */ jsxRuntime.jsx("p", { children: "Use Regular Expression" }) })
298
+ ] })
299
+ ] }) })
300
+ ]
301
+ }
302
+ ) }),
303
+ searchQuery && isRegexValid && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex justify-end px-2 pb-1", children: /* @__PURE__ */ jsxRuntime.jsxs("span", { className: "text-uk-xs text-text-secondary", children: [
304
+ searchResultsCount,
305
+ " result",
306
+ searchResultsCount !== 1 ? "s" : ""
307
+ ] }) })
308
+ ] });
309
+ }
310
+ function TreeEntryItem({
311
+ item,
312
+ hoveredId,
313
+ onItemHover,
314
+ isSelectable,
315
+ selectedItemId,
316
+ handleItemSelect,
317
+ expandedItems,
318
+ toggleItem,
319
+ alwaysShowExpand,
320
+ hasDescendants,
321
+ getIcon,
322
+ renderLabel,
323
+ dataWithMeta
324
+ }) {
325
+ return /* @__PURE__ */ jsxRuntime.jsxs(
326
+ "div",
327
+ {
328
+ className: chunkOHIB3TEN_cjs.cn(
329
+ "group relative flex h-[32px] items-center",
330
+ isSelectable && "rounded-uk-md",
331
+ !item.disable && "cursor-pointer",
332
+ hoveredId === item.id && !item.disable && "bg-bg-secondary",
333
+ isSelectable && selectedItemId === item.id && "bg-brand-primary text-text-withbg"
334
+ ),
335
+ onMouseEnter: () => onItemHover?.(item.id),
336
+ onMouseLeave: () => onItemHover?.(null),
337
+ onClick: () => !item.disable && handleItemSelect(item.id),
338
+ children: [
339
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "absolute top-0 left-[-0.28rem] z-0 flex h-full items-center", children: [
340
+ item.ancestors.map((ancestor, index) => {
341
+ const parentIsLast = dataWithMeta.find((d) => d.id === ancestor.id)?.isLast;
342
+ return /* @__PURE__ */ jsxRuntime.jsx(
343
+ "div",
344
+ {
345
+ className: chunkOHIB3TEN_cjs.cn(
346
+ "h-full w-[1.25rem]",
347
+ parentIsLast ? "" : "border-l",
348
+ "border-line-primary"
349
+ )
350
+ },
351
+ index
352
+ );
353
+ }),
354
+ item.indent > 0 && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative h-full w-[1.24rem]", children: [
355
+ /* @__PURE__ */ jsxRuntime.jsx(
356
+ "div",
357
+ {
358
+ className: chunkOHIB3TEN_cjs.cn(
359
+ "absolute top-0 left-0 h-1/2 w-1/2 border-b border-l",
360
+ item.isLast ? "rounded-bl-md" : "",
361
+ "border-line-primary"
362
+ )
363
+ }
364
+ ),
365
+ !item.isLast && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "border-line-primary absolute top-1/2 left-0 h-1/2 w-1/2 border-l" })
366
+ ] })
367
+ ] }),
368
+ /* @__PURE__ */ jsxRuntime.jsxs(
369
+ "div",
370
+ {
371
+ className: "text-uk-md z-10 flex w-full items-center justify-between gap-2 px-2 whitespace-nowrap",
372
+ style: { paddingLeft: `${item.indent * 1.25 + 0.5}rem` },
373
+ children: [
374
+ /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex min-w-0 flex-1 items-center gap-2", children: [
375
+ alwaysShowExpand && hasDescendants(item.id) && !expandedItems.has(item.id) ? /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
376
+ /* @__PURE__ */ jsxRuntime.jsx(
377
+ "button",
378
+ {
379
+ onClick: (e) => {
380
+ e.stopPropagation();
381
+ toggleItem(item.id);
382
+ },
383
+ className: "flex size-4 cursor-pointer items-center justify-center",
384
+ children: /* @__PURE__ */ jsxRuntime.jsx(
385
+ lucideReact.ChevronDown,
386
+ {
387
+ className: chunkOHIB3TEN_cjs.cn(
388
+ "size-4 -rotate-90 transition-transform",
389
+ item.disable && "text-icon-tertiary"
390
+ )
391
+ }
392
+ )
393
+ }
394
+ ),
395
+ /* @__PURE__ */ jsxRuntime.jsx(
396
+ "div",
397
+ {
398
+ className: chunkOHIB3TEN_cjs.cn(
399
+ "flex size-4 items-center justify-center",
400
+ item.disable && "text-icon-tertiary"
401
+ ),
402
+ children: getIcon(item)
403
+ }
404
+ )
405
+ ] }) : /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "relative flex size-4 items-center justify-center", children: [
406
+ item.isCollapsible && /* @__PURE__ */ jsxRuntime.jsx(
407
+ "button",
408
+ {
409
+ onClick: (e) => {
410
+ e.stopPropagation();
411
+ toggleItem(item.id);
412
+ },
413
+ className: "absolute z-20 flex cursor-pointer items-center justify-center opacity-0 transition-opacity group-hover:opacity-100",
414
+ children: /* @__PURE__ */ jsxRuntime.jsx(
415
+ lucideReact.ChevronDown,
416
+ {
417
+ className: chunkOHIB3TEN_cjs.cn(
418
+ "size-4 transition-transform",
419
+ !expandedItems.has(item.id) && "-rotate-90",
420
+ item.disable && "text-icon-tertiary"
421
+ )
422
+ }
423
+ )
424
+ }
425
+ ),
426
+ /* @__PURE__ */ jsxRuntime.jsx(
427
+ "div",
428
+ {
429
+ className: chunkOHIB3TEN_cjs.cn(
430
+ "cursor-pointer transition-opacity",
431
+ item.isCollapsible && "group-hover:opacity-0",
432
+ item.disable && "text-icon-tertiary"
433
+ ),
434
+ children: getIcon(item)
435
+ }
436
+ )
437
+ ] }),
438
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: chunkOHIB3TEN_cjs.cn("truncate", item.disable && "text-text-tertiary"), children: renderLabel(item.label) })
439
+ ] }),
440
+ item.actions && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center gap-1", onClick: (e) => e.stopPropagation(), children: item.actions })
441
+ ]
442
+ }
443
+ )
444
+ ]
445
+ },
446
+ item.id
447
+ );
448
+ }
449
+ function TreeEntries({
450
+ visibleData,
451
+ hoveredId,
452
+ onItemHover,
453
+ isSelectable,
454
+ selectedItemId,
455
+ handleItemSelect,
456
+ expandedItems,
457
+ toggleItem,
458
+ alwaysShowExpand,
459
+ hasDescendants,
460
+ getIcon,
461
+ renderLabel,
462
+ dataWithMeta,
463
+ useSyncScroll = false,
464
+ className
465
+ }) {
466
+ const content = visibleData.map((item) => /* @__PURE__ */ jsxRuntime.jsx(
467
+ TreeEntryItem,
468
+ {
469
+ item,
470
+ hoveredId,
471
+ onItemHover,
472
+ isSelectable,
473
+ selectedItemId,
474
+ handleItemSelect,
475
+ expandedItems,
476
+ toggleItem,
477
+ alwaysShowExpand,
478
+ hasDescendants,
479
+ getIcon,
480
+ renderLabel,
481
+ dataWithMeta
482
+ },
483
+ item.id
484
+ ));
485
+ if (useSyncScroll) {
486
+ return /* @__PURE__ */ jsxRuntime.jsx(chunkG5JZGNKY_cjs.SyncScroll, { className: chunkOHIB3TEN_cjs.cn("scrollbar-track-transparent flex-1", className), children: content });
487
+ }
488
+ return /* @__PURE__ */ jsxRuntime.jsx("div", { className: chunkOHIB3TEN_cjs.cn("flex-1 overflow-y-auto", className), children: content });
489
+ }
490
+
491
+ exports.TreeEntries = TreeEntries;
492
+ exports.TreeEntryItem = TreeEntryItem;
493
+ exports.TreeSearchBar = TreeSearchBar;
494
+ exports.TreeView = TreeView;
@@ -1,4 +1,4 @@
1
- import { InputNumbers } from './chunk-QN5Q5OCZ.mjs';
1
+ import { InputNumbers } from './chunk-QAERXYKR.mjs';
2
2
  import { Button } from './chunk-INHZ5D7P.mjs';
3
3
  import { cn } from './chunk-HMN4IKTG.mjs';
4
4
  import { forwardRef, useState } from 'react';