@vuer-ai/vuer-uikit 0.0.75 → 0.0.76

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 (94) hide show
  1. package/dist/chunk-2DA6GE5K.mjs +184 -0
  2. package/dist/{chunk-VNYP2IVJ.cjs → chunk-AHNVEAOM.cjs} +2 -2
  3. package/dist/chunk-BWBBQCG2.mjs +217 -0
  4. package/dist/chunk-D4W2G6CY.cjs +494 -0
  5. package/dist/{chunk-2274XZ2C.cjs → chunk-E6D3BSYY.cjs} +6 -6
  6. package/dist/chunk-HTAFERCZ.mjs +1 -0
  7. package/dist/chunk-HVVT3D2T.mjs +1 -0
  8. package/dist/chunk-IMN6FIOY.cjs +187 -0
  9. package/dist/{chunk-P27TWGME.cjs → chunk-IQAZZPJD.cjs} +2 -2
  10. package/dist/chunk-KFPS5CCR.cjs +2 -0
  11. package/dist/{chunk-P5T6EVSQ.mjs → chunk-LBENVTO2.mjs} +1 -1
  12. package/dist/{chunk-NS2P4CPA.mjs → chunk-MMT74K7A.mjs} +5 -5
  13. package/dist/chunk-OEM5OJDP.mjs +489 -0
  14. package/dist/chunk-RM7E3WGH.cjs +71 -0
  15. package/dist/chunk-SYXRPCBO.cjs +220 -0
  16. package/dist/{chunk-IZFHHQ6S.mjs → chunk-TSHZODTT.mjs} +2 -2
  17. package/dist/chunk-VOTZLQ6J.cjs +2 -0
  18. package/dist/chunk-W4CDQ2RJ.mjs +69 -0
  19. package/dist/index.cjs +75 -50
  20. package/dist/index.d.cts +6 -2
  21. package/dist/index.d.ts +6 -2
  22. package/dist/index.mjs +21 -16
  23. package/dist/ui/UIKitBadge.cjs +5 -5
  24. package/dist/ui/UIKitBadge.mjs +1 -1
  25. package/dist/ui/index.cjs +75 -50
  26. package/dist/ui/index.d.cts +6 -2
  27. package/dist/ui/index.d.ts +6 -2
  28. package/dist/ui/index.mjs +21 -16
  29. package/dist/ui/inputs/index.cjs +15 -15
  30. package/dist/ui/inputs/index.mjs +3 -3
  31. package/dist/ui/inputs/number-inputs/index.cjs +15 -15
  32. package/dist/ui/inputs/number-inputs/index.mjs +3 -3
  33. package/dist/ui/layouts/index.cjs +6 -6
  34. package/dist/ui/layouts/index.mjs +2 -2
  35. package/dist/ui/{tree-view.cjs → simple-tree-view.cjs} +3 -3
  36. package/dist/ui/{tree-view.d.cts → simple-tree-view.d.cts} +1 -1
  37. package/dist/ui/{tree-view.d.ts → simple-tree-view.d.ts} +1 -1
  38. package/dist/ui/{tree-view.mjs → simple-tree-view.mjs} +1 -1
  39. package/dist/ui/timeline.cjs +3 -3
  40. package/dist/ui/timeline.d.cts +1 -1
  41. package/dist/ui/timeline.d.ts +1 -1
  42. package/dist/ui/timeline.mjs +2 -2
  43. package/dist/ui/tree-view/TreeSearchBar.cjs +22 -0
  44. package/dist/ui/tree-view/TreeSearchBar.d.cts +16 -0
  45. package/dist/ui/tree-view/TreeSearchBar.d.ts +16 -0
  46. package/dist/ui/tree-view/TreeSearchBar.mjs +13 -0
  47. package/dist/ui/tree-view/TreeView.cjs +24 -0
  48. package/dist/ui/tree-view/TreeView.d.cts +48 -0
  49. package/dist/ui/tree-view/TreeView.d.ts +48 -0
  50. package/dist/ui/tree-view/TreeView.mjs +11 -0
  51. package/dist/ui/tree-view/hooks.cjs +14 -0
  52. package/dist/ui/tree-view/hooks.d.cts +38 -0
  53. package/dist/ui/tree-view/hooks.d.ts +38 -0
  54. package/dist/ui/tree-view/hooks.mjs +1 -0
  55. package/dist/ui/tree-view/index.cjs +42 -0
  56. package/dist/ui/tree-view/index.d.cts +6 -0
  57. package/dist/ui/tree-view/index.d.ts +6 -0
  58. package/dist/ui/tree-view/index.mjs +17 -0
  59. package/dist/ui/tree-view/types.cjs +4 -0
  60. package/dist/ui/tree-view/types.d.cts +24 -0
  61. package/dist/ui/tree-view/types.d.ts +24 -0
  62. package/dist/ui/tree-view/types.mjs +1 -0
  63. package/dist/ui/tree-view-legacy.cjs +37 -0
  64. package/dist/ui/tree-view-legacy.d.cts +108 -0
  65. package/dist/ui/tree-view-legacy.d.ts +108 -0
  66. package/dist/ui/{tree-view-v2.mjs → tree-view-legacy.mjs} +1 -1
  67. package/dist/ui/waterfall/TimelineEvent.d.cts +1 -1
  68. package/dist/ui/waterfall/TimelineEvent.d.ts +1 -1
  69. package/dist/ui/waterfall/TimelineProcessBar.d.cts +1 -1
  70. package/dist/ui/waterfall/TimelineProcessBar.d.ts +1 -1
  71. package/dist/ui/waterfall/Wedges.d.cts +1 -1
  72. package/dist/ui/waterfall/Wedges.d.ts +1 -1
  73. package/dist/ui/waterfall/hooks/useTimelineState.d.cts +1 -2
  74. package/dist/ui/waterfall/hooks/useTimelineState.d.ts +1 -2
  75. package/dist/ui/waterfall/hooks/useViewport.d.cts +1 -2
  76. package/dist/ui/waterfall/hooks/useViewport.d.ts +1 -2
  77. package/dist/ui/waterfall/index.cjs +7 -7
  78. package/dist/ui/waterfall/index.d.cts +1 -1
  79. package/dist/ui/waterfall/index.d.ts +1 -1
  80. package/dist/ui/waterfall/index.mjs +6 -6
  81. package/dist/ui/waterfall/types.d.cts +1 -2
  82. package/dist/ui/waterfall/types.d.ts +1 -2
  83. package/package.json +1 -1
  84. package/dist/chunk-5432JOTN.mjs +0 -94
  85. package/dist/chunk-FD5AAGON.cjs +0 -487
  86. package/dist/chunk-ILGNKXK2.mjs +0 -485
  87. package/dist/chunk-Z5P6VCGR.cjs +0 -99
  88. package/dist/ui/tree-view-v2.cjs +0 -25
  89. package/dist/ui/tree-view-v2.d.cts +0 -43
  90. package/dist/ui/tree-view-v2.d.ts +0 -43
  91. /package/dist/{chunk-SUABRIFA.mjs → chunk-2SWBXWLK.mjs} +0 -0
  92. /package/dist/{chunk-XMUP5MIM.mjs → chunk-G3EIVAVR.mjs} +0 -0
  93. /package/dist/{chunk-OX2U5RAG.cjs → chunk-G5NT42YF.cjs} +0 -0
  94. /package/dist/{chunk-J5DLIKNB.cjs → chunk-X2A7TKER.cjs} +0 -0
@@ -0,0 +1,184 @@
1
+ import { cn } from './chunk-HMN4IKTG.mjs';
2
+ import { ChevronDown } from 'lucide-react';
3
+ import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
4
+
5
+ function TreeView({
6
+ data,
7
+ getIcon,
8
+ expandedItems,
9
+ onToggleItem,
10
+ onItemHover,
11
+ hoveredId,
12
+ isSelectable = false,
13
+ selectedItemId,
14
+ onSelectChange,
15
+ alwaysShowExpand = false,
16
+ hasDescendants = () => false,
17
+ renderLabel = (label) => label,
18
+ className
19
+ }) {
20
+ return /* @__PURE__ */ jsx("div", { className: cn("flex-1 overflow-y-auto", className), children: data.map((item) => /* @__PURE__ */ jsx(
21
+ TreeEntryItem,
22
+ {
23
+ item,
24
+ hoveredId,
25
+ onItemHover,
26
+ isSelectable,
27
+ selectedItemId,
28
+ onSelectChange,
29
+ expandedItems,
30
+ toggleItem: onToggleItem,
31
+ alwaysShowExpand,
32
+ hasDescendants,
33
+ getIcon,
34
+ renderLabel,
35
+ dataWithMeta: data
36
+ },
37
+ item.id
38
+ )) });
39
+ }
40
+ function TreeEntryItem({
41
+ item,
42
+ hoveredId,
43
+ onItemHover,
44
+ isSelectable,
45
+ selectedItemId,
46
+ onSelectChange,
47
+ expandedItems,
48
+ toggleItem,
49
+ alwaysShowExpand,
50
+ hasDescendants,
51
+ getIcon,
52
+ renderLabel,
53
+ dataWithMeta
54
+ }) {
55
+ const handleItemSelect = () => {
56
+ if (!item.disable && isSelectable && onSelectChange) {
57
+ onSelectChange(selectedItemId === item.id ? null : item.id);
58
+ }
59
+ };
60
+ return /* @__PURE__ */ jsxs(
61
+ "div",
62
+ {
63
+ className: cn(
64
+ "group relative flex h-[32px] items-center",
65
+ isSelectable && "rounded-uk-md",
66
+ !item.disable && "cursor-pointer",
67
+ hoveredId === item.id && !item.disable && "bg-bg-secondary",
68
+ isSelectable && selectedItemId === item.id && "bg-brand-primary text-text-withbg"
69
+ ),
70
+ onMouseEnter: () => onItemHover?.(item.id),
71
+ onMouseLeave: () => onItemHover?.(null),
72
+ onClick: handleItemSelect,
73
+ children: [
74
+ /* @__PURE__ */ jsxs("div", { className: "absolute top-0 left-[-0.28rem] z-0 flex h-full items-center", children: [
75
+ item.ancestors.map((ancestor, index) => {
76
+ const parentIsLast = dataWithMeta.find((d) => d.id === ancestor.id)?.isLast;
77
+ return /* @__PURE__ */ jsx(
78
+ "div",
79
+ {
80
+ className: cn(
81
+ "h-full w-[1.25rem]",
82
+ parentIsLast ? "" : "border-l",
83
+ "border-line-primary"
84
+ )
85
+ },
86
+ index
87
+ );
88
+ }),
89
+ item.indent > 0 && /* @__PURE__ */ jsxs("div", { className: "relative h-full w-[1.24rem]", children: [
90
+ /* @__PURE__ */ jsx(
91
+ "div",
92
+ {
93
+ className: cn(
94
+ "absolute top-0 left-0 h-1/2 w-1/2 border-b border-l",
95
+ item.isLast ? "rounded-bl-md" : "",
96
+ "border-line-primary"
97
+ )
98
+ }
99
+ ),
100
+ !item.isLast && /* @__PURE__ */ jsx("div", { className: "border-line-primary absolute top-1/2 left-0 h-1/2 w-1/2 border-l" })
101
+ ] })
102
+ ] }),
103
+ /* @__PURE__ */ jsxs(
104
+ "div",
105
+ {
106
+ className: "text-uk-md z-10 flex w-full items-center justify-between gap-2 px-2 whitespace-nowrap",
107
+ style: { paddingLeft: `${item.indent * 1.25 + 0.5}rem` },
108
+ children: [
109
+ /* @__PURE__ */ jsxs("div", { className: "flex min-w-0 flex-1 items-center gap-2", children: [
110
+ alwaysShowExpand && hasDescendants(item.id) && !expandedItems.has(item.id) ? /* @__PURE__ */ jsxs(Fragment, { children: [
111
+ /* @__PURE__ */ jsx(
112
+ "button",
113
+ {
114
+ onClick: (e) => {
115
+ e.stopPropagation();
116
+ toggleItem(item.id);
117
+ },
118
+ className: "flex size-4 cursor-pointer items-center justify-center",
119
+ children: /* @__PURE__ */ jsx(
120
+ ChevronDown,
121
+ {
122
+ className: cn(
123
+ "size-4 -rotate-90 transition-transform",
124
+ item.disable && "text-icon-tertiary"
125
+ )
126
+ }
127
+ )
128
+ }
129
+ ),
130
+ /* @__PURE__ */ jsx(
131
+ "div",
132
+ {
133
+ className: cn(
134
+ "flex size-4 items-center justify-center",
135
+ item.disable && "text-icon-tertiary"
136
+ ),
137
+ children: getIcon(item)
138
+ }
139
+ )
140
+ ] }) : /* @__PURE__ */ jsxs("div", { className: "relative flex size-4 items-center justify-center", children: [
141
+ item.isCollapsible && /* @__PURE__ */ jsx(
142
+ "button",
143
+ {
144
+ onClick: (e) => {
145
+ e.stopPropagation();
146
+ toggleItem(item.id);
147
+ },
148
+ className: "absolute z-20 flex cursor-pointer items-center justify-center opacity-0 transition-opacity group-hover:opacity-100",
149
+ children: /* @__PURE__ */ jsx(
150
+ ChevronDown,
151
+ {
152
+ className: cn(
153
+ "size-4 transition-transform",
154
+ !expandedItems.has(item.id) && "-rotate-90",
155
+ item.disable && "text-icon-tertiary"
156
+ )
157
+ }
158
+ )
159
+ }
160
+ ),
161
+ /* @__PURE__ */ jsx(
162
+ "div",
163
+ {
164
+ className: cn(
165
+ "cursor-pointer transition-opacity",
166
+ item.isCollapsible && "group-hover:opacity-0",
167
+ item.disable && "text-icon-tertiary"
168
+ ),
169
+ children: getIcon(item)
170
+ }
171
+ )
172
+ ] }),
173
+ /* @__PURE__ */ jsx("span", { className: cn("truncate", item.disable && "text-text-tertiary"), children: renderLabel(item.label, item.id) })
174
+ ] }),
175
+ item.actions && /* @__PURE__ */ jsx("div", { className: "flex items-center gap-1", onClick: (e) => e.stopPropagation(), children: item.actions })
176
+ ]
177
+ }
178
+ )
179
+ ]
180
+ }
181
+ );
182
+ }
183
+
184
+ export { TreeEntryItem, TreeView };
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkFD5AAGON_cjs = require('./chunk-FD5AAGON.cjs');
3
+ var chunkD4W2G6CY_cjs = require('./chunk-D4W2G6CY.cjs');
4
4
  var chunkLCCNBVKZ_cjs = require('./chunk-LCCNBVKZ.cjs');
5
5
  var chunkOHIB3TEN_cjs = require('./chunk-OHIB3TEN.cjs');
6
6
  var lucideReact = require('lucide-react');
@@ -507,7 +507,7 @@ function Timeline({
507
507
  }, [viewStart, viewDuration, updateCursor]);
508
508
  return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "bg-bg-primary text-text-primary border-line-primary/50 rounded-uk-md mx-auto w-full overflow-hidden border font-sans shadow-[0_4px_16px_0_var(--color-shadow-secondary)]", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "grid grid-cols-[minmax(300px,30%)_1fr]", children: [
509
509
  /* @__PURE__ */ jsxRuntime.jsx(
510
- chunkFD5AAGON_cjs.TreeView,
510
+ chunkD4W2G6CY_cjs.TreeView,
511
511
  {
512
512
  data,
513
513
  getIcon,
@@ -0,0 +1,217 @@
1
+ import { useState, useMemo, useCallback } from 'react';
2
+ import { jsx, Fragment } from 'react/jsx-runtime';
3
+
4
+ // src/ui/tree-view/hooks.tsx
5
+ function useTreeSearch({
6
+ data,
7
+ searchQuery,
8
+ isCaseSensitive = false,
9
+ isRegex = false
10
+ }) {
11
+ const [isRegexValid, setIsRegexValid] = useState(true);
12
+ const { filteredData, matchingIds, searchResultsCount } = useMemo(() => {
13
+ const dataMap = new Map(data.map((item) => [item.id, item]));
14
+ if (!searchQuery) {
15
+ return {
16
+ filteredData: data,
17
+ matchingIds: /* @__PURE__ */ new Set(),
18
+ searchResultsCount: 0
19
+ };
20
+ }
21
+ const matchingAndAncestorIds = /* @__PURE__ */ new Set();
22
+ const directMatchIds = /* @__PURE__ */ new Set();
23
+ let regex = null;
24
+ if (isRegex) {
25
+ try {
26
+ regex = new RegExp(searchQuery, isCaseSensitive ? "" : "i");
27
+ if (!isRegexValid) setIsRegexValid(true);
28
+ } catch {
29
+ if (isRegexValid) setIsRegexValid(false);
30
+ return {
31
+ filteredData: [],
32
+ matchingIds: /* @__PURE__ */ new Set(),
33
+ searchResultsCount: 0
34
+ };
35
+ }
36
+ }
37
+ data.forEach((item) => {
38
+ let labelMatches = false;
39
+ if (regex) {
40
+ labelMatches = regex.test(item.label);
41
+ } else {
42
+ const source = isCaseSensitive ? item.label : item.label.toLowerCase();
43
+ const query = isCaseSensitive ? searchQuery : searchQuery.toLowerCase();
44
+ labelMatches = source.includes(query);
45
+ }
46
+ if (labelMatches) {
47
+ directMatchIds.add(item.id);
48
+ matchingAndAncestorIds.add(item.id);
49
+ let current = item.parentId;
50
+ while (current) {
51
+ const parent = dataMap.get(current);
52
+ if (parent) {
53
+ matchingAndAncestorIds.add(parent.id);
54
+ current = parent.parentId;
55
+ } else {
56
+ break;
57
+ }
58
+ }
59
+ }
60
+ });
61
+ const filtered = data.filter((item) => matchingAndAncestorIds.has(item.id));
62
+ return {
63
+ filteredData: filtered,
64
+ matchingIds: directMatchIds,
65
+ searchResultsCount: directMatchIds.size
66
+ };
67
+ }, [searchQuery, data, isCaseSensitive, isRegex, isRegexValid]);
68
+ const renderLabel = useCallback((label, itemId) => {
69
+ if (!searchQuery || !isRegexValid || !matchingIds.has(itemId)) {
70
+ return label;
71
+ }
72
+ let regex;
73
+ try {
74
+ regex = new RegExp(`(${searchQuery})`, isCaseSensitive ? "g" : "gi");
75
+ } catch {
76
+ return label;
77
+ }
78
+ const parts = label.split(regex);
79
+ return /* @__PURE__ */ jsx(Fragment, { children: parts.map(
80
+ (part, i) => i % 2 === 1 ? /* @__PURE__ */ jsx("span", { className: "rounded-uk-xs bg-accent-warning", children: part }, i) : part
81
+ ) });
82
+ }, [searchQuery, isCaseSensitive, isRegexValid, matchingIds]);
83
+ return {
84
+ filteredData,
85
+ searchResultsCount,
86
+ isRegexValid,
87
+ renderLabel,
88
+ hasActiveSearch: !!searchQuery
89
+ };
90
+ }
91
+ function useTreeState({
92
+ data,
93
+ defaultExpanded = true,
94
+ expandedItems: externalExpandedItems,
95
+ onToggleItem: externalOnToggleItem
96
+ }) {
97
+ const [internalExpandedItems, setInternalExpandedItems] = useState(() => {
98
+ const initial = /* @__PURE__ */ new Set();
99
+ if (defaultExpanded) {
100
+ data.forEach((item) => {
101
+ if (item.isCollapsible) initial.add(item.id);
102
+ });
103
+ }
104
+ return initial;
105
+ });
106
+ const expandedItems = externalExpandedItems ?? internalExpandedItems;
107
+ const toggleItem = useCallback((id) => {
108
+ if (externalOnToggleItem) {
109
+ externalOnToggleItem(id);
110
+ } else {
111
+ setInternalExpandedItems((prev) => {
112
+ const newSet = new Set(prev);
113
+ if (newSet.has(id)) {
114
+ newSet.delete(id);
115
+ } else {
116
+ newSet.add(id);
117
+ }
118
+ return newSet;
119
+ });
120
+ }
121
+ }, [externalOnToggleItem]);
122
+ const expandAll = useCallback(() => {
123
+ const allCollapsible = /* @__PURE__ */ new Set();
124
+ data.forEach((item) => {
125
+ if (item.isCollapsible) allCollapsible.add(item.id);
126
+ });
127
+ if (externalExpandedItems) {
128
+ allCollapsible.forEach((id) => {
129
+ if (!expandedItems.has(id) && externalOnToggleItem) {
130
+ externalOnToggleItem(id);
131
+ }
132
+ });
133
+ } else {
134
+ setInternalExpandedItems(allCollapsible);
135
+ }
136
+ }, [data, expandedItems, externalExpandedItems, externalOnToggleItem]);
137
+ const collapseAll = useCallback(() => {
138
+ if (externalExpandedItems) {
139
+ expandedItems.forEach((id) => {
140
+ if (externalOnToggleItem) {
141
+ externalOnToggleItem(id);
142
+ }
143
+ });
144
+ } else {
145
+ setInternalExpandedItems(/* @__PURE__ */ new Set());
146
+ }
147
+ }, [expandedItems, externalExpandedItems, externalOnToggleItem]);
148
+ const childrenMap = useMemo(() => {
149
+ const map = /* @__PURE__ */ new Map();
150
+ data.forEach((item) => {
151
+ if (!map.has(item.parentId)) {
152
+ map.set(item.parentId, []);
153
+ }
154
+ map.get(item.parentId).push(item);
155
+ });
156
+ return map;
157
+ }, [data]);
158
+ const hasDescendants = useCallback((itemId) => {
159
+ return (childrenMap.get(itemId) || []).length > 0;
160
+ }, [childrenMap]);
161
+ const dataWithMeta = useMemo(() => {
162
+ const dataMap = new Map(data.map((item) => [item.id, item]));
163
+ const getAncestors = (item) => {
164
+ const ancestors = [];
165
+ let current = item.parentId;
166
+ while (current) {
167
+ const parent = dataMap.get(current);
168
+ if (parent) {
169
+ ancestors.unshift(parent);
170
+ current = parent.parentId;
171
+ } else {
172
+ break;
173
+ }
174
+ }
175
+ return ancestors;
176
+ };
177
+ const sortedData = [];
178
+ const visited = /* @__PURE__ */ new Set();
179
+ const traverseNode = (nodeId) => {
180
+ const children = childrenMap.get(nodeId) || [];
181
+ children.forEach((child) => {
182
+ if (!visited.has(child.id)) {
183
+ visited.add(child.id);
184
+ sortedData.push(child);
185
+ traverseNode(child.id);
186
+ }
187
+ });
188
+ };
189
+ traverseNode(null);
190
+ return sortedData.map((item) => {
191
+ const siblings = childrenMap.get(item.parentId) || [];
192
+ const isLast = siblings.length > 0 && siblings[siblings.length - 1].id === item.id;
193
+ const ancestors = getAncestors(item);
194
+ const indent = ancestors.length;
195
+ return { ...item, indent, isLast, ancestors };
196
+ });
197
+ }, [data, childrenMap]);
198
+ const visibleData = useMemo(() => {
199
+ const isVisible = (item) => {
200
+ return item.ancestors.every(
201
+ (ancestor) => !ancestor.isCollapsible || expandedItems.has(ancestor.id)
202
+ );
203
+ };
204
+ return dataWithMeta.filter(isVisible);
205
+ }, [dataWithMeta, expandedItems]);
206
+ return {
207
+ visibleData,
208
+ expandedItems,
209
+ toggleItem,
210
+ expandAll,
211
+ collapseAll,
212
+ hasDescendants,
213
+ dataWithMeta
214
+ };
215
+ }
216
+
217
+ export { useTreeSearch, useTreeState };