dishui 0.0.91 → 0.0.101

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 (156) hide show
  1. package/dist/.release-verified.json +6 -0
  2. package/dist/ai.js +24 -0
  3. package/dist/components/Card/Metric2.js +11 -11
  4. package/dist/components/Card/Metric2.js.map +1 -1
  5. package/dist/components/Card/Ticket.d.ts +52 -0
  6. package/dist/components/Card/Ticket2.js +218 -0
  7. package/dist/components/Card/Ticket2.js.map +1 -0
  8. package/dist/components/Card/index.d.ts +32 -0
  9. package/dist/components/Card/index.js +211 -203
  10. package/dist/components/Card/index.js.map +1 -1
  11. package/dist/components/GroupButton/index.js +4 -4
  12. package/dist/components/GroupButton/index.js.map +1 -1
  13. package/dist/components/GroupedTable/index.js +10 -10
  14. package/dist/components/GroupedTable/index.js.map +1 -1
  15. package/dist/components/NavigationList/index.js +9 -9
  16. package/dist/components/NavigationList/index.js.map +1 -1
  17. package/dist/components/Section/index.js +11 -11
  18. package/dist/components/Section/index.js.map +1 -1
  19. package/dist/components/Skeleton/index.js +1 -1
  20. package/dist/components/Skeleton/index.js.map +1 -1
  21. package/dist/components/Table/index.js +6 -6
  22. package/dist/components/Table/index.js.map +1 -1
  23. package/dist/components/ai/AgentChat/index.d.ts +54 -0
  24. package/dist/components/ai/AgentChat/index.js +176 -0
  25. package/dist/components/ai/AgentChat/index.js.map +1 -0
  26. package/dist/components/ai/AgentRunCard/index.d.ts +38 -0
  27. package/dist/components/ai/AgentRunCard/index.js +100 -0
  28. package/dist/components/ai/AgentRunCard/index.js.map +1 -0
  29. package/dist/components/ai/AgentScreen/index.d.ts +50 -0
  30. package/dist/components/ai/AgentScreen/index.js +233 -0
  31. package/dist/components/ai/AgentScreen/index.js.map +1 -0
  32. package/dist/components/ai/ApprovalCard/index.d.ts +26 -0
  33. package/dist/components/ai/ApprovalCard/index.js +89 -0
  34. package/dist/components/ai/ApprovalCard/index.js.map +1 -0
  35. package/dist/components/ai/CodeView/index.d.ts +30 -0
  36. package/dist/components/ai/CodeView/index.js +149 -0
  37. package/dist/components/ai/CodeView/index.js.map +1 -0
  38. package/dist/components/ai/CommandSearch/index.d.ts +39 -0
  39. package/dist/components/ai/CommandSearch/index.js +217 -0
  40. package/dist/components/ai/CommandSearch/index.js.map +1 -0
  41. package/dist/components/ai/ContextCards/index.d.ts +42 -0
  42. package/dist/components/ai/ContextCards/index.js +106 -0
  43. package/dist/components/ai/ContextCards/index.js.map +1 -0
  44. package/dist/components/ai/DiffTable/index.d.ts +70 -0
  45. package/dist/components/ai/DiffTable/index.js +235 -0
  46. package/dist/components/ai/DiffTable/index.js.map +1 -0
  47. package/dist/components/ai/FilterTable/index.d.ts +35 -0
  48. package/dist/components/ai/FilterTable/index.js +86 -0
  49. package/dist/components/ai/FilterTable/index.js.map +1 -0
  50. package/dist/components/ai/FineTuneCard/index.d.ts +24 -0
  51. package/dist/components/ai/FineTuneCard/index.js +75 -0
  52. package/dist/components/ai/FineTuneCard/index.js.map +1 -0
  53. package/dist/components/ai/InsightCards/index.d.ts +23 -0
  54. package/dist/components/ai/InsightCards/index.js +64 -0
  55. package/dist/components/ai/InsightCards/index.js.map +1 -0
  56. package/dist/components/ai/IssueCard/index.d.ts +39 -0
  57. package/dist/components/ai/IssueCard/index.js +78 -0
  58. package/dist/components/ai/IssueCard/index.js.map +1 -0
  59. package/dist/components/ai/LoadingState/index.d.ts +22 -0
  60. package/dist/components/ai/LoadingState/index.js +80 -0
  61. package/dist/components/ai/LoadingState/index.js.map +1 -0
  62. package/dist/components/ai/PromptBar/index.d.ts +26 -0
  63. package/dist/components/ai/PromptBar/index.js +117 -0
  64. package/dist/components/ai/PromptBar/index.js.map +1 -0
  65. package/dist/components/ai/RecommendationCard/index.d.ts +44 -0
  66. package/dist/components/ai/RecommendationCard/index.js +142 -0
  67. package/dist/components/ai/RecommendationCard/index.js.map +1 -0
  68. package/dist/components/ai/RecordsTable/index.d.ts +65 -0
  69. package/dist/components/ai/RecordsTable/index.js +334 -0
  70. package/dist/components/ai/RecordsTable/index.js.map +1 -0
  71. package/dist/components/ai/SelectionActions/index.d.ts +19 -0
  72. package/dist/components/ai/SelectionActions/index.js +40 -0
  73. package/dist/components/ai/SelectionActions/index.js.map +1 -0
  74. package/dist/components/ai/StateFlow/index.d.ts +24 -0
  75. package/dist/components/ai/StateFlow/index.js +50 -0
  76. package/dist/components/ai/StateFlow/index.js.map +1 -0
  77. package/dist/components/ai/StreamingText/index.d.ts +44 -0
  78. package/dist/components/ai/StreamingText/index.js +211 -0
  79. package/dist/components/ai/StreamingText/index.js.map +1 -0
  80. package/dist/components/ai/TaskRows/index.d.ts +53 -0
  81. package/dist/components/ai/TaskRows/index.js +186 -0
  82. package/dist/components/ai/TaskRows/index.js.map +1 -0
  83. package/dist/components/ai/Thinking/index.d.ts +47 -0
  84. package/dist/components/ai/Thinking/index.js +197 -0
  85. package/dist/components/ai/Thinking/index.js.map +1 -0
  86. package/dist/components/ai/ToolChips/index.d.ts +21 -0
  87. package/dist/components/ai/ToolChips/index.js +63 -0
  88. package/dist/components/ai/ToolChips/index.js.map +1 -0
  89. package/dist/components/ai/index.d.ts +54 -0
  90. package/dist/components/ai/shared.d.ts +13 -0
  91. package/dist/components/ai/shared.js +25 -0
  92. package/dist/components/ai/shared.js.map +1 -0
  93. package/dist/components/pro/DataTable/rowDetailExtension.js +1 -1
  94. package/dist/components/pro/DataTable/rowDetailExtension.js.map +1 -1
  95. package/dist/components/pro/Flow/constants.js +3 -3
  96. package/dist/components/pro/Flow/constants.js.map +1 -1
  97. package/dist/components/pro/Flow/nodes/shapes.js +3 -3
  98. package/dist/components/pro/Flow/nodes/shapes.js.map +1 -1
  99. package/dist/components/pro/Flow/utils/themeColor.d.ts +2 -2
  100. package/dist/components/pro/Flow/utils/themeColor.js +2 -2
  101. package/dist/components/pro/Flow/utils/themeColor.js.map +1 -1
  102. package/dist/components/pro/Kanban/Kanban.d.ts +3 -0
  103. package/dist/components/pro/Kanban/Kanban.js +339 -0
  104. package/dist/components/pro/Kanban/Kanban.js.map +1 -0
  105. package/dist/components/pro/Kanban/Swimlanes.d.ts +3 -0
  106. package/dist/components/pro/Kanban/Swimlanes.js +60 -0
  107. package/dist/components/pro/Kanban/Swimlanes.js.map +1 -0
  108. package/dist/components/pro/Kanban/index.d.ts +5 -0
  109. package/dist/components/pro/Kanban/types.d.ts +103 -0
  110. package/dist/components/pro/Kanban/useKanbanDrag.d.ts +17 -0
  111. package/dist/components/pro/Kanban/useKanbanDrag.js +69 -0
  112. package/dist/components/pro/Kanban/useKanbanDrag.js.map +1 -0
  113. package/dist/components/pro/Kanban/utils.d.ts +13 -0
  114. package/dist/components/pro/Kanban/utils.js +48 -0
  115. package/dist/components/pro/Kanban/utils.js.map +1 -0
  116. package/dist/components/pro/RichTextEditor/AIRewrite.js +158 -127
  117. package/dist/components/pro/RichTextEditor/AIRewrite.js.map +1 -1
  118. package/dist/components/pro/RichTextEditor/BlockHandle.d.ts +2 -0
  119. package/dist/components/pro/RichTextEditor/BlockHandle.js +156 -115
  120. package/dist/components/pro/RichTextEditor/BlockHandle.js.map +1 -1
  121. package/dist/components/pro/RichTextEditor/RichTextEditor.js +136 -159
  122. package/dist/components/pro/RichTextEditor/RichTextEditor.js.map +1 -1
  123. package/dist/components/pro/RichTextEditor/Toolbar/ColorPicker.js +44 -41
  124. package/dist/components/pro/RichTextEditor/Toolbar/ColorPicker.js.map +1 -1
  125. package/dist/components/pro/RichTextEditor/Toolbar/FloatingDialogMenu.js +59 -53
  126. package/dist/components/pro/RichTextEditor/Toolbar/FloatingDialogMenu.js.map +1 -1
  127. package/dist/components/pro/RichTextEditor/Toolbar/MarkdownTemplates.js +48 -44
  128. package/dist/components/pro/RichTextEditor/Toolbar/MarkdownTemplates.js.map +1 -1
  129. package/dist/components/pro/RichTextEditor/Toolbar/TableOpsMenu.js +67 -63
  130. package/dist/components/pro/RichTextEditor/Toolbar/TableOpsMenu.js.map +1 -1
  131. package/dist/components/pro/RichTextEditor/Toolbar/Toolbar.d.ts +1 -0
  132. package/dist/components/pro/RichTextEditor/Toolbar/Toolbar.js +182 -129
  133. package/dist/components/pro/RichTextEditor/Toolbar/Toolbar.js.map +1 -1
  134. package/dist/components/pro/RichTextEditor/Toolbar/ToolbarButton.d.ts +1 -0
  135. package/dist/components/pro/RichTextEditor/Toolbar/ToolbarButton.js +3 -3
  136. package/dist/components/pro/RichTextEditor/Toolbar/ToolbarButton.js.map +1 -1
  137. package/dist/components/pro/RichTextEditor/Toolbar/useAnchoredDropdown.d.ts +3 -0
  138. package/dist/components/pro/RichTextEditor/Toolbar/useAnchoredDropdown.js +31 -0
  139. package/dist/components/pro/RichTextEditor/Toolbar/useAnchoredDropdown.js.map +1 -0
  140. package/dist/components/pro/RichTextEditor/index.d.ts +1 -1
  141. package/dist/components/pro/RichTextEditor/types.d.ts +78 -11
  142. package/dist/components/pro/RichTextEditor/types.js +11 -0
  143. package/dist/components/pro/RichTextEditor/types.js.map +1 -1
  144. package/dist/dishui.css +1 -1
  145. package/dist/index-nostyled.d.ts +1 -1
  146. package/dist/index.d.ts +6 -3
  147. package/dist/index.js +134 -107
  148. package/dist/kanban.js +5 -0
  149. package/dist/layouts/Sidebar.d.ts +16 -0
  150. package/dist/layouts/Sidebar.js +85 -52
  151. package/dist/layouts/Sidebar.js.map +1 -1
  152. package/dist/utils/i18n.js +20 -0
  153. package/dist/utils/i18n.js.map +1 -1
  154. package/dist/utils/menu.js +1 -1
  155. package/dist/utils/menu.js.map +1 -1
  156. package/package.json +14 -3
@@ -20,36 +20,36 @@ var m = [
20
20
  size: "sm",
21
21
  weight: "normal"
22
22
  }
23
- ], h = ({ isCollapsed: h, side: g = "left", language: _, items: v, levelText: y, getMenuItems: b, onWidthChange: x, initialWidth: S = 280, collapsedWidth: C = 64, onToggle: w, minWidth: T = 160, maxWidth: E = 400 }) => {
24
- let [D, O] = c([]), [k, A] = c(""), [j, M] = c(() => Math.max(T, Math.min(S, E))), N = s(null), P = s(null), F = p({ select: (e) => e.location }), I = f();
23
+ ], h = ({ isCollapsed: h, side: g = "left", language: _, items: v, levelText: y, getMenuItems: b, onWidthChange: x, initialWidth: S = 280, collapsedWidth: C = 64, onToggle: w, minWidth: T = 160, maxWidth: E = 400, workspace: D, primaryAction: O, footer: k }) => {
24
+ let [A, j] = c([]), [M, N] = c(""), [P, F] = c(() => Math.max(T, Math.min(S, E))), I = s(null), L = s(null), R = p({ select: (e) => e.location }), z = f();
25
25
  a(() => {
26
- M(Math.max(T, Math.min(S, E)));
26
+ F(Math.max(T, Math.min(S, E)));
27
27
  }, [
28
28
  S,
29
29
  T,
30
30
  E
31
31
  ]);
32
- let L = (e) => {
32
+ let B = (e) => {
33
33
  let t = Math.max(T, Math.min(e, E));
34
- M(t), x?.(t);
34
+ F(t), x?.(t);
35
35
  };
36
36
  a(() => {
37
- O(v === void 0 ? b ? b(_) : t(_) : v);
37
+ j(v === void 0 ? b ? b(_) : t(_) : v);
38
38
  }, [
39
39
  _,
40
40
  v,
41
41
  b
42
42
  ]), a(() => {
43
- if (!k) return;
43
+ if (!M) return;
44
44
  let e = setTimeout(() => {
45
- P.current?.querySelector(h ? "[aria-current=\"page\"]" : ".tree-node-content-active")?.scrollIntoView({
45
+ L.current?.querySelector(h ? "[aria-current=\"page\"]" : ".tree-node-content-active")?.scrollIntoView({
46
46
  block: "nearest",
47
47
  behavior: window.matchMedia("(prefers-reduced-motion: reduce)").matches ? "instant" : "smooth"
48
48
  });
49
49
  }, 350);
50
50
  return () => clearTimeout(e);
51
- }, [k, h]), a(() => {
52
- let e = P.current;
51
+ }, [M, h]), a(() => {
52
+ let e = L.current;
53
53
  if (!e) return;
54
54
  let t = (t) => {
55
55
  if (e.scrollHeight <= e.clientHeight) return;
@@ -60,7 +60,7 @@ var m = [
60
60
  };
61
61
  return e.addEventListener("wheel", t, { passive: !1 }), () => e.removeEventListener("wheel", t);
62
62
  }, [h]);
63
- let R = (e, t = !0) => e.map((e) => ({
63
+ let V = (e, t = !0) => e.map((e) => ({
64
64
  id: e.id,
65
65
  label: e.label,
66
66
  icon: e.icon || (t ? void 0 : /* @__PURE__ */ l("svg", {
@@ -76,19 +76,19 @@ var m = [
76
76
  d: "M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z"
77
77
  })
78
78
  })),
79
- children: e.children ? R(e.children, !1) : void 0,
79
+ children: e.children ? V(e.children, !1) : void 0,
80
80
  meta: { path: e.path }
81
- })), z = o(() => R(D, !0), [D]), B = o(() => {
82
- if (D.length === 0) return [];
81
+ })), H = o(() => V(A, !0), [A]), U = o(() => {
82
+ if (A.length === 0) return [];
83
83
  let e = (t) => {
84
84
  let n = [];
85
85
  for (let r of t) r.children?.length && (n.push(r.id), n = [...n, ...e(r.children)]);
86
86
  return n;
87
87
  };
88
- return e(D);
89
- }, [D]);
88
+ return e(A);
89
+ }, [A]);
90
90
  a(() => {
91
- let e = F.pathname, t = (n) => {
91
+ let e = R.pathname, t = (n) => {
92
92
  for (let r of n) {
93
93
  if (r.path === e) return r.id;
94
94
  if (r.children) {
@@ -97,12 +97,12 @@ var m = [
97
97
  }
98
98
  }
99
99
  return null;
100
- }, n = t(D);
101
- A(n ?? "");
102
- }, [D, F.pathname]);
103
- let V = (e) => {
100
+ }, n = t(A);
101
+ N(n ?? "");
102
+ }, [A, R.pathname]);
103
+ let W = (e) => {
104
104
  if (e.meta?.path) {
105
- A(e.id), I({ to: e.meta.path });
105
+ N(e.id), z({ to: e.meta.path });
106
106
  return;
107
107
  }
108
108
  if (e.children && e.children.length > 0) {
@@ -116,20 +116,20 @@ var m = [
116
116
  }
117
117
  return null;
118
118
  }, n = t(e.children);
119
- n ? (A(n.id), I({ to: n.meta.path })) : A(e.id);
120
- } else A(e.id);
121
- }, H = (e, t = []) => e.flatMap((e) => {
119
+ n ? (N(n.id), z({ to: n.meta.path })) : N(e.id);
120
+ } else N(e.id);
121
+ }, G = (e, t = []) => e.flatMap((e) => {
122
122
  let n = [...t, e.label];
123
123
  return [...e.path ? [{
124
124
  item: e,
125
125
  trail: n.join(" / ")
126
- }] : [], ...H(e.children ?? [], n)];
127
- }), U = h ? /* @__PURE__ */ l("nav", {
128
- ref: P,
126
+ }] : [], ...G(e.children ?? [], n)];
127
+ }), K = h ? /* @__PURE__ */ l("nav", {
128
+ ref: L,
129
129
  className: "sidebar-rail",
130
130
  "aria-label": _ === "zh" ? "侧边导航" : "Sidebar navigation",
131
- children: D.map((e) => {
132
- let t = H([e]);
131
+ children: A.map((e) => {
132
+ let t = G([e]);
133
133
  return t.length > 0 ? /* @__PURE__ */ l("div", {
134
134
  role: "group",
135
135
  "aria-label": e.label,
@@ -139,7 +139,7 @@ var m = [
139
139
  className: "sidebar-rail-link",
140
140
  "aria-label": t,
141
141
  title: t,
142
- "aria-current": F.pathname === e.path ? "page" : void 0,
142
+ "aria-current": R.pathname === e.path ? "page" : void 0,
143
143
  children: /* @__PURE__ */ l("span", {
144
144
  "aria-hidden": "true",
145
145
  children: e.icon || /* @__PURE__ */ l("span", { children: e.label.charAt(0) })
@@ -149,10 +149,10 @@ var m = [
149
149
  })
150
150
  }) : null;
151
151
  return /* @__PURE__ */ u("div", {
152
- ref: N,
153
- className: "blade-sidebar sidebar-container h-full bg-base-200 overflow-visible flex flex-col transition-colors duration-200 ease-in-out relative",
152
+ ref: I,
153
+ className: "dishui-sidebar sidebar-container h-full bg-base-200 overflow-visible flex flex-col transition-colors duration-200 ease-in-out relative",
154
154
  style: h ? { width: C } : {
155
- width: j,
155
+ width: P,
156
156
  maxWidth: E,
157
157
  minWidth: T
158
158
  },
@@ -161,23 +161,49 @@ var m = [
161
161
  isCollapsed: h,
162
162
  side: g,
163
163
  onToggle: w,
164
- sidebarWidth: j,
164
+ sidebarWidth: P,
165
165
  collapsedWidth: C,
166
- onWidthChange: x ? L : void 0,
166
+ onWidthChange: x ? B : void 0,
167
167
  minWidth: T,
168
168
  maxWidth: E,
169
- anchorRef: N
169
+ anchorRef: I
170
170
  }),
171
- U,
171
+ (D || O) && /* @__PURE__ */ u("div", {
172
+ className: "dishui-sidebar-ai-header",
173
+ children: [D && /* @__PURE__ */ u("button", {
174
+ type: "button",
175
+ className: "dishui-sidebar-ai-workspace",
176
+ onClick: D.onClick,
177
+ title: h && typeof D.name == "string" ? D.name : void 0,
178
+ children: [/* @__PURE__ */ l("span", {
179
+ className: "dishui-sidebar-ai-avatar",
180
+ "aria-hidden": "true",
181
+ children: D.icon ?? (typeof D.name == "string" ? D.name.charAt(0).toUpperCase() : "•")
182
+ }), !h && /* @__PURE__ */ l("span", {
183
+ className: "dishui-sidebar-ai-workspace-name",
184
+ children: D.name
185
+ })]
186
+ }), O && /* @__PURE__ */ u("button", {
187
+ type: "button",
188
+ className: "dishui-sidebar-ai-action",
189
+ onClick: O.onClick,
190
+ title: h && typeof O.label == "string" ? O.label : void 0,
191
+ children: [/* @__PURE__ */ l("span", {
192
+ "aria-hidden": "true",
193
+ children: O.icon ?? "+"
194
+ }), !h && /* @__PURE__ */ l("span", { children: O.label })]
195
+ })]
196
+ }),
197
+ K,
172
198
  /* @__PURE__ */ l("div", {
173
199
  hidden: h,
174
200
  style: h ? { display: "none" } : void 0,
175
- ref: h ? void 0 : P,
201
+ ref: h ? void 0 : L,
176
202
  className: "sidebar-scroll min-h-0 flex-grow overflow-y-auto scrollbar-thin scrollbar-thumb-base-300 scrollbar-track-transparent",
177
203
  children: /* @__PURE__ */ l(r, {
178
- data: z,
179
- activeNodeId: k,
180
- defaultExpandedIds: B,
204
+ data: H,
205
+ activeNodeId: M,
206
+ defaultExpandedIds: U,
181
207
  showSearch: !1,
182
208
  showExpandAll: !1,
183
209
  showIcon: !0,
@@ -189,24 +215,31 @@ var m = [
189
215
  className: `sidebar-tree${y === void 0 ? "" : " sidebar-tree-level-text"}`,
190
216
  renderLabel: (t, n) => {
191
217
  let r = Math.min(n, 2), i = y?.[r], a = m[r];
192
- return /* @__PURE__ */ l(e, {
218
+ return /* @__PURE__ */ u(e, {
193
219
  size: i?.size ?? a.size,
194
220
  weight: i?.weight ?? a.weight,
195
- color: k === t.id ? "inherit" : i?.color ?? "inherit",
221
+ color: M === t.id ? "inherit" : i?.color ?? "inherit",
196
222
  style: {
197
223
  ...y === void 0 ? {
198
224
  fontSize: "inherit",
199
225
  lineHeight: "inherit",
200
226
  fontWeight: "inherit"
201
227
  } : {},
202
- ...r === 2 && i?.color === void 0 && k !== t.id ? { color: "var(--sidebar-level-muted)" } : {}
228
+ ...r === 2 && i?.color === void 0 && M !== t.id ? { color: "var(--sidebar-level-muted)" } : {}
203
229
  },
204
- children: t.label
230
+ children: [t.label, typeof t.id == "string" && t.id.startsWith("ai-") && /* @__PURE__ */ l("span", {
231
+ className: "dishui-sidebar-ai-native-badge",
232
+ children: "AI"
233
+ })]
205
234
  });
206
235
  },
207
- onNodeClick: V
236
+ onNodeClick: W
208
237
  })
209
238
  }),
239
+ k && !h && /* @__PURE__ */ l("div", {
240
+ className: "dishui-sidebar-ai-footer",
241
+ children: k
242
+ }),
210
243
  /* @__PURE__ */ l("style", { children: `
211
244
  .sidebar-container {
212
245
  --sidebar-level-muted: oklch(from color-mix(in oklab, var(--color-base-content) 76%, var(--color-base-200)) l 0 0);
@@ -233,8 +266,8 @@ var m = [
233
266
 
234
267
  .sidebar-tree .tree-node-content {
235
268
  padding: 0.5rem 1rem;
236
- border-radius: 0.5rem;
237
- transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
269
+ border-radius: var(--dishui-radius-sm);
270
+ transition: background-color var(--dishui-duration-normal) var(--dishui-ease-out), color var(--dishui-duration-normal) var(--dishui-ease-out), transform var(--dishui-duration-normal) var(--dishui-ease-out);
238
271
  }
239
272
 
240
273
  /* 活跃状态 - 为每个主题设置匹配的配色 */
@@ -259,8 +292,8 @@ var m = [
259
292
  min-height: auto;
260
293
  padding: 0.25rem;
261
294
  opacity: 0.6;
262
- transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);
263
- border-radius: 0.25rem;
295
+ transition: opacity var(--dishui-duration-normal) var(--dishui-ease-out), background-color var(--dishui-duration-normal) var(--dishui-ease-out);
296
+ border-radius: var(--dishui-radius-xs);
264
297
  }
265
298
 
266
299
  .sidebar-tree .tree-node-toggle-right:hover {
@@ -272,7 +305,7 @@ var m = [
272
305
  .sidebar-tree .tree-node-toggle-right svg {
273
306
  width: 1rem;
274
307
  height: 1rem;
275
- transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
308
+ transition: transform var(--dishui-duration-normal) var(--dishui-ease-out);
276
309
  }
277
310
 
278
311
  .sidebar-tree .tree-node-toggle-right.tree-node-toggle-expanded svg {
@@ -1 +1 @@
1
- {"version":3,"file":"Sidebar.js","names":[],"sources":["../../src/layouts/Sidebar.tsx"],"sourcesContent":["import React, { useState, useRef, useEffect, useMemo } from 'react';\nimport { Link, useNavigate, useRouterState } from '@tanstack/react-router';\nimport { MenuItem } from '../types/menu';\nimport { getMenuItems as defaultGetMenuItems } from '../utils/menu';\nimport { Tree, TreeNode } from '../components/Tree';\nimport { generateSidebarActiveStyles } from '../styles/themeStyles';\nimport { DesktopSidebarToggleButton } from '../components/SidebarToggleButton';\nimport Text, { type TextProps } from '../components/Text';\n\nexport type SidebarLevelText = Pick<TextProps, 'size' | 'weight' | 'color'>;\n\nconst DEFAULT_LEVEL_TEXT = [\n { size: 'base', weight: 'semibold' },\n { size: 'sm', weight: 'medium' },\n { size: 'sm', weight: 'normal' },\n] as const satisfies readonly SidebarLevelText[];\n\n// 组件属性\nexport type SidebarProps = {\n isCollapsed: boolean;\n /** 侧栏所在侧,控制内侧 pill 的位置与调宽方向。 */\n side?: 'left' | 'right';\n language: 'zh' | 'en';\n items?: MenuItem[];\n /**\n * Opt-in typography for levels 1–3; deeper nodes reuse level 3.\n * Omitted: preserve legacy Sidebar/LayoutSuite typography. When supplied,\n * missing values default to base/sm/sm and semibold/medium/normal.\n * Levels 3+ default to theme-adaptive neutral gray, even without levelText.\n * Explicit colors retain Text semantics (secondary may be a theme accent).\n * Selected labels always inherit the active row color.\n */\n levelText?: readonly [SidebarLevelText?, SidebarLevelText?, SidebarLevelText?];\n getMenuItems?: (language: 'zh' | 'en') => MenuItem[];\n onWidthChange?: (width: number) => void;\n initialWidth?: number;\n collapsedWidth?: number;\n /**\n * 折叠 / 展开切换回调。传入后,侧边栏会在其边缘渲染统一的悬浮 pill 控制条\n * (点击折叠、拖拽调节宽度),无需再在外层单独渲染 SidebarToggleButtons。\n */\n onToggle?: () => void;\n /** 拖拽调节宽度的最小值(px) */\n minWidth?: number;\n /** 拖拽调节宽度的最大值(px) */\n maxWidth?: number;\n};\n\nconst Sidebar: React.FC<SidebarProps> = ({\n isCollapsed,\n side = 'left',\n language,\n items: propItems,\n levelText,\n getMenuItems,\n onWidthChange,\n initialWidth = 280,\n collapsedWidth = 64,\n onToggle,\n minWidth = 160,\n maxWidth = 400,\n}) => {\n const [items, setItems] = useState<MenuItem[]>([]);\n const [activeNodeId, setActiveNodeId] = useState<string | number>('');\n const [sidebarWidth, setSidebarWidth] = useState(() => Math.max(minWidth, Math.min(initialWidth, maxWidth)));\n const sidebarRef = useRef<HTMLDivElement>(null);\n const scrollRef = useRef<HTMLDivElement>(null);\n const routerState = useRouterState({ select: (s: { location: { pathname: string } }) => s.location });\n const navigate = useNavigate();\n\n // 当 initialWidth 改变时,更新侧边栏宽度\n useEffect(() => {\n setSidebarWidth(Math.max(minWidth, Math.min(initialWidth, maxWidth)));\n }, [initialWidth, minWidth, maxWidth]);\n\n // 统一的宽度变更处理:同步内部状态并通知父组件。\n // pill 拖拽与外部同步都通过此入口,避免必须回传 initialWidth 才能生效。\n const handleInternalWidthChange = (width: number) => {\n const next = Math.max(minWidth, Math.min(width, maxWidth));\n setSidebarWidth(next);\n onWidthChange?.(next);\n };\n\n // 当语言改变或传入items prop时,更新菜单项\n useEffect(() => {\n if (propItems !== undefined) {\n setItems(propItems);\n } else if (getMenuItems) {\n setItems(getMenuItems(language));\n } else {\n setItems(defaultGetMenuItems(language));\n }\n }, [language, propItems, getMenuItems]);\n\n // 活跃节点变化时,自动滚动到可见区域(菜单过长时保证当前页可见)。\n // 延迟 350ms:Tree 展开动画(max-height 0.3s)期间布局仍在变化,立即\n // scrollIntoView 会计算到动画中途的位置而滚动不到位。\n useEffect(() => {\n if (!activeNodeId) return;\n const t = setTimeout(() => {\n scrollRef.current\n ?.querySelector(isCollapsed ? '[aria-current=\"page\"]' : '.tree-node-content-active')\n ?.scrollIntoView({ block: 'nearest', behavior: window.matchMedia('(prefers-reduced-motion: reduce)').matches ? 'instant' : 'smooth' });\n }, 350);\n return () => clearTimeout(t);\n }, [activeNodeId, isCollapsed]);\n\n // 兜底:确保鼠标悬停在菜单任意位置都能滚轮滚动。\n // 部分浏览器/嵌套滚动场景下原生滚轮可能不作用于该容器,这里用非被动\n // 监听手动滚动;成功滚动后 preventDefault,避免浏览器默认行为造成双重滚动。\n useEffect(() => {\n const el = scrollRef.current;\n if (!el) return;\n const onWheel = (e: WheelEvent) => {\n if (el.scrollHeight <= el.clientHeight) return;\n const dy = e.deltaMode === 1 ? e.deltaY * 16 : e.deltaY; // 行模式 → 像素\n if (dy === 0) return;\n const before = el.scrollTop;\n el.scrollTop = before + dy;\n if (el.scrollTop !== before) e.preventDefault();\n };\n el.addEventListener('wheel', onWheel, { passive: false });\n return () => el.removeEventListener('wheel', onWheel);\n }, [isCollapsed]);\n\n // 将 MenuItem 转换为 TreeNode\n const convertToTreeNodes = (menuItems: MenuItem[], isTopLevel: boolean = true): TreeNode[] => {\n return menuItems.map(item => ({\n id: item.id,\n label: item.label,\n icon: item.icon || (!isTopLevel ? (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-4 w-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z\" />\n </svg>\n ) : undefined),\n children: item.children ? convertToTreeNodes(item.children, false) : undefined,\n meta: {\n path: item.path,\n },\n }));\n };\n\n // 转换后的树形数据\n const treeData = useMemo(() => convertToTreeNodes(items, true), [items]);\n\n // 获取默认展开的节点ID(默认全部展开)\n const defaultExpandedIds = useMemo(() => {\n if (items.length === 0) return [];\n\n // 收集所有有子节点的项的ID,使其默认全展开\n const collectAllExpandableIds = (menuItems: MenuItem[]): string[] => {\n let result: string[] = [];\n for (const item of menuItems) {\n if (item.children?.length) {\n result.push(item.id);\n result = [...result, ...collectAllExpandableIds(item.children)];\n }\n }\n return result;\n };\n\n return collectAllExpandableIds(items);\n }, [items]);\n\n // 更新活跃节点ID\n useEffect(() => {\n const currentPath = routerState.pathname;\n const findNodeByPath = (menuItems: MenuItem[]): string | null => {\n for (const item of menuItems) {\n if (item.path === currentPath) {\n return item.id;\n }\n if (item.children) {\n const found = findNodeByPath(item.children);\n if (found) return found;\n }\n }\n return null;\n };\n\n const nodeId = findNodeByPath(items);\n setActiveNodeId(nodeId ?? '');\n }, [items, routerState.pathname]);\n\n\n\n // 处理节点点击\n const handleNodeClick = (node: TreeNode) => {\n // 如果节点有路径,直接导航\n if (node.meta?.path) {\n setActiveNodeId(node.id);\n navigate({ to: node.meta.path });\n return;\n }\n\n // 如果没有路径但有子节点,寻找第一个有路径的后代节点\n if (node.children && node.children.length > 0) {\n const findFirstPath = (nodes: TreeNode[]): TreeNode | null => {\n for (const n of nodes) {\n if (n.meta?.path) return n;\n if (n.children && n.children.length > 0) {\n const found = findFirstPath(n.children);\n if (found) return found;\n }\n }\n return null;\n };\n\n const firstNodeWithPath = findFirstPath(node.children);\n if (firstNodeWithPath) {\n setActiveNodeId(firstNodeWithPath.id);\n navigate({ to: firstNodeWithPath.meta!.path });\n } else {\n // 全都没有路径则激活当前节点\n setActiveNodeId(node.id);\n }\n } else {\n setActiveNodeId(node.id);\n }\n };\n\n const collectLinks = (nodes: MenuItem[], parents: string[] = []): { item: MenuItem; trail: string }[] =>\n nodes.flatMap(item => {\n const trail = [...parents, item.label];\n return [\n ...(item.path ? [{ item, trail: trail.join(' / ') }] : []),\n ...collectLinks(item.children ?? [], trail),\n ];\n });\n\n /* Keep Tree mounted so rail toggles do not reset the user's expanded branches. */\n const rail = isCollapsed ? (\n <nav ref={scrollRef} className=\"sidebar-rail\" aria-label={language === 'zh' ? '侧边导航' : 'Sidebar navigation'}>\n {items.map(group => {\n const links = collectLinks([group]);\n return links.length > 0 ? (\n <div key={group.id} role=\"group\" aria-label={group.label} className=\"sidebar-rail-group\">\n {links.map(({ item, trail }) => (\n <Link\n key={item.id}\n to={item.path!}\n className=\"sidebar-rail-link\"\n aria-label={trail}\n title={trail}\n aria-current={routerState.pathname === item.path ? 'page' : undefined}\n >\n <span aria-hidden=\"true\">{item.icon || <span>{item.label.charAt(0)}</span>}</span>\n </Link>\n ))}\n </div>\n ) : null;\n })}\n </nav>\n ) : null;\n\n return (\n <div\n ref={sidebarRef}\n className=\"blade-sidebar sidebar-container h-full bg-base-200 overflow-visible flex flex-col transition-colors duration-200 ease-in-out relative\"\n style={isCollapsed ? { width: collapsedWidth } : { width: sidebarWidth, maxWidth, minWidth }}\n >\n {onToggle && (\n <DesktopSidebarToggleButton\n isCollapsed={isCollapsed}\n side={side}\n onToggle={onToggle}\n sidebarWidth={sidebarWidth}\n collapsedWidth={collapsedWidth}\n onWidthChange={onWidthChange ? handleInternalWidthChange : undefined}\n minWidth={minWidth}\n maxWidth={maxWidth}\n anchorRef={sidebarRef}\n />\n )}\n {rail}\n <div hidden={isCollapsed} style={isCollapsed ? { display: 'none' } : undefined} ref={isCollapsed ? undefined : scrollRef} className=\"sidebar-scroll min-h-0 flex-grow overflow-y-auto scrollbar-thin scrollbar-thumb-base-300 scrollbar-track-transparent\">\n <Tree\n data={treeData}\n activeNodeId={activeNodeId}\n defaultExpandedIds={defaultExpandedIds}\n showSearch={false}\n showExpandAll={false}\n showIcon={true}\n showCount={false}\n showLine={true}\n indent={1}\n togglePosition=\"right\"\n maxHeight=\"100%\"\n className={`sidebar-tree${levelText !== undefined ? ' sidebar-tree-level-text' : ''}`}\n renderLabel={(node, depth) => {\n const level = Math.min(depth, 2);\n const text = levelText?.[level];\n const defaults = DEFAULT_LEVEL_TEXT[level];\n return (\n <Text\n size={text?.size ?? defaults.size}\n weight={text?.weight ?? defaults.weight}\n color={activeNodeId === node.id ? 'inherit' : text?.color ?? 'inherit'}\n style={{\n ...(levelText === undefined ? { fontSize: 'inherit', lineHeight: 'inherit', fontWeight: 'inherit' } : {}),\n ...(level === 2 && text?.color === undefined && activeNodeId !== node.id\n ? { color: 'var(--sidebar-level-muted)' } : {}),\n }}\n >\n {node.label}\n </Text>\n );\n }}\n onNodeClick={handleNodeClick}\n />\n </div>\n\n <style>{`\n .sidebar-container {\n --sidebar-level-muted: oklch(from color-mix(in oklab, var(--color-base-content) 76%, var(--color-base-200)) l 0 0);\n }\n /* LayoutSuite uses semantic surfaces even in colorful themes. Match its text luminance. */\n .dishui-layout-suite-sidebar > .sidebar-container {\n --sidebar-level-muted: oklch(from var(--dishui-text-tertiary) l 0 0);\n }\n .sidebar-rail { min-height: 0; height: 100%; overflow-y: auto; overflow-x: hidden; overscroll-behavior: contain; padding: 6px; }\n .sidebar-rail-group { display: flex; flex-direction: column; align-items: center; gap: 4px; padding: 4px 2px; margin-bottom: 8px; border: 1px solid var(--dishui-border-hairline, var(--color-base-300)); border-radius: 10px; }\n .sidebar-rail-link { display: flex; align-items: center; justify-content: center; width: 100%; max-width: 36px; min-height: 36px; flex-shrink: 0; border-radius: 6px; color: var(--sidebar-level-muted); text-decoration: none; transition: background-color 150ms, color 150ms; }\n .sidebar-rail-link > span { display: flex; align-items: center; justify-content: center; }\n .sidebar-rail-link svg { width: 18px; height: 18px; }\n .sidebar-rail-link:hover { background: var(--color-base-300); }\n .sidebar-rail-link[aria-current=\"page\"] { color: var(--color-primary); background: color-mix(in oklab, var(--color-primary) 12%, var(--color-base-200)); box-shadow: inset 2px 0 var(--color-primary); }\n .sidebar-rail-link:focus-visible { outline: 2px solid var(--dishui-ring, var(--color-primary)); outline-offset: -2px; }\n @media (prefers-reduced-motion: reduce) { .sidebar-rail-link { transition: none; } }\n /* Sidebar Tree 自定义样式 */\n .sidebar-tree {\n background: transparent;\n border: none;\n padding: 0.5rem;\n }\n \n .sidebar-tree .tree-node-content {\n padding: 0.5rem 1rem;\n border-radius: 0.5rem;\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n }\n \n /* 活跃状态 - 为每个主题设置匹配的配色 */\n .sidebar-tree .tree-node-content-active {\n font-weight: 600 !important;\n padding-left: calc(1rem - 4px) !important;\n }\n \n /* 主题活跃状态样式 - 从共用配置生成 */\n ${generateSidebarActiveStyles()}\n \n /* 悬停状态 */\n .sidebar-tree .tree-node-content:hover:not(.tree-node-active .tree-node-content):not(.tree-node-content-active) {\n background-color: var(--color-base-200);\n }\n \n /* 右侧展开按钮样式 */\n .sidebar-tree .tree-node-toggle-right {\n width: auto;\n height: auto;\n min-width: auto;\n min-height: auto;\n padding: 0.25rem;\n opacity: 0.6;\n transition: all 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n border-radius: 0.25rem;\n }\n \n .sidebar-tree .tree-node-toggle-right:hover {\n opacity: 1;\n background-color: var(--color-base-300);\n }\n \n /* 右侧按钮图标旋转 */\n .sidebar-tree .tree-node-toggle-right svg {\n width: 1rem;\n height: 1rem;\n transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);\n }\n \n .sidebar-tree .tree-node-toggle-right.tree-node-toggle-expanded svg {\n transform: rotate(90deg);\n }\n \n /* 图标样式 */\n .sidebar-tree .tree-node-icon {\n width: 1.25rem;\n height: 1.25rem;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n transition: color 0.2s ease;\n }\n \n .sidebar-tree .tree-node-icon svg {\n width: 1.25rem;\n height: 1.25rem;\n }\n \n /* 子节点图标稍小 */\n .sidebar-tree .tree-node-children .tree-node-icon svg {\n width: 1rem;\n height: 1rem;\n opacity: 0.8;\n }\n \n /* Preserve the legacy all-level appearance only when typography is not configured. */\n .sidebar-tree:not(.sidebar-tree-level-text) .tree-node-label {\n font-size: 1rem;\n line-height: 1.4rem;\n font-weight: 500;\n }\n \n /* 连接线样式 - 强制显示!向右移动并加粗,增加整体左边距 */\n /* 使用双重选择器增加优先级,避免被其他 Tree 组件样式覆盖 */\n .sidebar-tree.sidebar-tree .tree-show-line .tree-node-children-expanded,\n .sidebar-tree.sidebar-tree .tree-node-children.tree-node-children-expanded,\n div.sidebar-tree .tree-show-line .tree-node-children-expanded,\n div.sidebar-tree .tree-node-children.tree-node-children-expanded {\n border-left: 3px solid rgba(128, 128, 128, 0.35) !important;\n margin-left: 24px !important;\n padding-left: 8px !important;\n box-sizing: border-box !important;\n }\n \n /* 隐藏 Tree 组件的圆点装饰 - 避免与 Sidebar 样式冲突 */\n .sidebar-tree.sidebar-tree .tree-show-line .tree-node-children-expanded::before,\n div.sidebar-tree .tree-show-line .tree-node-children-expanded::before {\n display: none !important;\n }\n \n /* 隐藏 Tree 组件的标题和操作按钮 */\n .sidebar-tree .tree-header,\n .sidebar-tree .tree-search,\n .sidebar-tree .tree-actions {\n display: none;\n }\n \n /* 移除内边距 */\n .sidebar-tree > div:first-child {\n padding: 0;\n }\n \n /* 子节点动画优化 - 减小间距 */\n .sidebar-tree .tree-node-children {\n margin-top: 0.125rem !important;\n }\n \n /* 一级菜单项间距 */\n .sidebar-tree > div > .tree-nodes > .tree-node {\n margin-bottom: 0.375rem;\n }\n \n /* 二级菜单项间距 */\n .sidebar-tree .tree-node-children > .tree-node {\n margin-bottom: 0.125rem;\n }\n `}</style>\n </div>\n );\n};\n\nexport default Sidebar; "],"mappings":"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"}
1
+ {"version":3,"file":"Sidebar.js","names":[],"sources":["../../src/layouts/Sidebar.tsx"],"sourcesContent":["import React, { useState, useRef, useEffect, useMemo } from 'react';\nimport { Link, useNavigate, useRouterState } from '@tanstack/react-router';\nimport { MenuItem } from '../types/menu';\nimport { getMenuItems as defaultGetMenuItems } from '../utils/menu';\nimport { Tree, TreeNode } from '../components/Tree';\nimport { generateSidebarActiveStyles } from '../styles/themeStyles';\nimport { DesktopSidebarToggleButton } from '../components/SidebarToggleButton';\nimport Text, { type TextProps } from '../components/Text';\n\nexport type SidebarLevelText = Pick<TextProps, 'size' | 'weight' | 'color'>;\n\nexport type SidebarHeader = {\n name: React.ReactNode;\n icon?: React.ReactNode;\n onClick?: () => void;\n};\n\nexport type SidebarAction = {\n label: React.ReactNode;\n icon?: React.ReactNode;\n onClick?: () => void;\n};\n\nconst DEFAULT_LEVEL_TEXT = [\n { size: 'base', weight: 'semibold' },\n { size: 'sm', weight: 'medium' },\n { size: 'sm', weight: 'normal' },\n] as const satisfies readonly SidebarLevelText[];\n\n// 组件属性\nexport type SidebarProps = {\n isCollapsed: boolean;\n /** 侧栏所在侧,控制内侧 pill 的位置与调宽方向。 */\n side?: 'left' | 'right';\n language: 'zh' | 'en';\n items?: MenuItem[];\n /**\n * Opt-in typography for levels 1–3; deeper nodes reuse level 3.\n * Omitted: preserve legacy Sidebar/LayoutSuite typography. When supplied,\n * missing values default to base/sm/sm and semibold/medium/normal.\n * Levels 3+ default to theme-adaptive neutral gray, even without levelText.\n * Explicit colors retain Text semantics (secondary may be a theme accent).\n * Selected labels always inherit the active row color.\n */\n levelText?: readonly [SidebarLevelText?, SidebarLevelText?, SidebarLevelText?];\n getMenuItems?: (language: 'zh' | 'en') => MenuItem[];\n onWidthChange?: (width: number) => void;\n initialWidth?: number;\n collapsedWidth?: number;\n /**\n * 折叠 / 展开切换回调。传入后,侧边栏会在其边缘渲染统一的悬浮 pill 控制条\n * (点击折叠、拖拽调节宽度),无需再在外层单独渲染 SidebarToggleButtons。\n */\n onToggle?: () => void;\n /** 拖拽调节宽度的最小值(px) */\n minWidth?: number;\n /** 拖拽调节宽度的最大值(px) */\n maxWidth?: number;\n /** Optional AI-style workspace header shown above the tree. */\n workspace?: SidebarHeader;\n /** Optional primary sidebar action, such as “New chat”. */\n primaryAction?: SidebarAction;\n /** Optional footer rendered below the scrollable multi-level menu. */\n footer?: React.ReactNode;\n};\n\nconst Sidebar: React.FC<SidebarProps> = ({\n isCollapsed,\n side = 'left',\n language,\n items: propItems,\n levelText,\n getMenuItems,\n onWidthChange,\n initialWidth = 280,\n collapsedWidth = 64,\n onToggle,\n minWidth = 160,\n maxWidth = 400,\n workspace,\n primaryAction,\n footer,\n}) => {\n const [items, setItems] = useState<MenuItem[]>([]);\n const [activeNodeId, setActiveNodeId] = useState<string | number>('');\n const [sidebarWidth, setSidebarWidth] = useState(() => Math.max(minWidth, Math.min(initialWidth, maxWidth)));\n const sidebarRef = useRef<HTMLDivElement>(null);\n const scrollRef = useRef<HTMLDivElement>(null);\n const routerState = useRouterState({ select: (s: { location: { pathname: string } }) => s.location });\n const navigate = useNavigate();\n\n // 当 initialWidth 改变时,更新侧边栏宽度\n useEffect(() => {\n setSidebarWidth(Math.max(minWidth, Math.min(initialWidth, maxWidth)));\n }, [initialWidth, minWidth, maxWidth]);\n\n // 统一的宽度变更处理:同步内部状态并通知父组件。\n // pill 拖拽与外部同步都通过此入口,避免必须回传 initialWidth 才能生效。\n const handleInternalWidthChange = (width: number) => {\n const next = Math.max(minWidth, Math.min(width, maxWidth));\n setSidebarWidth(next);\n onWidthChange?.(next);\n };\n\n // 当语言改变或传入items prop时,更新菜单项\n useEffect(() => {\n if (propItems !== undefined) {\n setItems(propItems);\n } else if (getMenuItems) {\n setItems(getMenuItems(language));\n } else {\n setItems(defaultGetMenuItems(language));\n }\n }, [language, propItems, getMenuItems]);\n\n // 活跃节点变化时,自动滚动到可见区域(菜单过长时保证当前页可见)。\n // 延迟 350ms:Tree 展开动画(max-height 0.3s)期间布局仍在变化,立即\n // scrollIntoView 会计算到动画中途的位置而滚动不到位。\n useEffect(() => {\n if (!activeNodeId) return;\n const t = setTimeout(() => {\n scrollRef.current\n ?.querySelector(isCollapsed ? '[aria-current=\"page\"]' : '.tree-node-content-active')\n ?.scrollIntoView({ block: 'nearest', behavior: window.matchMedia('(prefers-reduced-motion: reduce)').matches ? 'instant' : 'smooth' });\n }, 350);\n return () => clearTimeout(t);\n }, [activeNodeId, isCollapsed]);\n\n // 兜底:确保鼠标悬停在菜单任意位置都能滚轮滚动。\n // 部分浏览器/嵌套滚动场景下原生滚轮可能不作用于该容器,这里用非被动\n // 监听手动滚动;成功滚动后 preventDefault,避免浏览器默认行为造成双重滚动。\n useEffect(() => {\n const el = scrollRef.current;\n if (!el) return;\n const onWheel = (e: WheelEvent) => {\n if (el.scrollHeight <= el.clientHeight) return;\n const dy = e.deltaMode === 1 ? e.deltaY * 16 : e.deltaY; // 行模式 → 像素\n if (dy === 0) return;\n const before = el.scrollTop;\n el.scrollTop = before + dy;\n if (el.scrollTop !== before) e.preventDefault();\n };\n el.addEventListener('wheel', onWheel, { passive: false });\n return () => el.removeEventListener('wheel', onWheel);\n }, [isCollapsed]);\n\n // 将 MenuItem 转换为 TreeNode\n const convertToTreeNodes = (menuItems: MenuItem[], isTopLevel: boolean = true): TreeNode[] => {\n return menuItems.map(item => ({\n id: item.id,\n label: item.label,\n icon: item.icon || (!isTopLevel ? (\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-4 w-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth=\"2\" d=\"M9 12h6m-6 4h6m2 5H7a2 2 0 01-2-2V5a2 2 0 012-2h5.586a1 1 0 01.707.293l5.414 5.414a1 1 0 01.293.707V19a2 2 0 01-2 2z\" />\n </svg>\n ) : undefined),\n children: item.children ? convertToTreeNodes(item.children, false) : undefined,\n meta: {\n path: item.path,\n },\n }));\n };\n\n // 转换后的树形数据\n const treeData = useMemo(() => convertToTreeNodes(items, true), [items]);\n\n // 获取默认展开的节点ID(默认全部展开)\n const defaultExpandedIds = useMemo(() => {\n if (items.length === 0) return [];\n\n // 收集所有有子节点的项的ID,使其默认全展开\n const collectAllExpandableIds = (menuItems: MenuItem[]): string[] => {\n let result: string[] = [];\n for (const item of menuItems) {\n if (item.children?.length) {\n result.push(item.id);\n result = [...result, ...collectAllExpandableIds(item.children)];\n }\n }\n return result;\n };\n\n return collectAllExpandableIds(items);\n }, [items]);\n\n // 更新活跃节点ID\n useEffect(() => {\n const currentPath = routerState.pathname;\n const findNodeByPath = (menuItems: MenuItem[]): string | null => {\n for (const item of menuItems) {\n if (item.path === currentPath) {\n return item.id;\n }\n if (item.children) {\n const found = findNodeByPath(item.children);\n if (found) return found;\n }\n }\n return null;\n };\n\n const nodeId = findNodeByPath(items);\n setActiveNodeId(nodeId ?? '');\n }, [items, routerState.pathname]);\n\n\n\n // 处理节点点击\n const handleNodeClick = (node: TreeNode) => {\n // 如果节点有路径,直接导航\n if (node.meta?.path) {\n setActiveNodeId(node.id);\n navigate({ to: node.meta.path });\n return;\n }\n\n // 如果没有路径但有子节点,寻找第一个有路径的后代节点\n if (node.children && node.children.length > 0) {\n const findFirstPath = (nodes: TreeNode[]): TreeNode | null => {\n for (const n of nodes) {\n if (n.meta?.path) return n;\n if (n.children && n.children.length > 0) {\n const found = findFirstPath(n.children);\n if (found) return found;\n }\n }\n return null;\n };\n\n const firstNodeWithPath = findFirstPath(node.children);\n if (firstNodeWithPath) {\n setActiveNodeId(firstNodeWithPath.id);\n navigate({ to: firstNodeWithPath.meta!.path });\n } else {\n // 全都没有路径则激活当前节点\n setActiveNodeId(node.id);\n }\n } else {\n setActiveNodeId(node.id);\n }\n };\n\n const collectLinks = (nodes: MenuItem[], parents: string[] = []): { item: MenuItem; trail: string }[] =>\n nodes.flatMap(item => {\n const trail = [...parents, item.label];\n return [\n ...(item.path ? [{ item, trail: trail.join(' / ') }] : []),\n ...collectLinks(item.children ?? [], trail),\n ];\n });\n\n /* Keep Tree mounted so rail toggles do not reset the user's expanded branches. */\n const rail = isCollapsed ? (\n <nav ref={scrollRef} className=\"sidebar-rail\" aria-label={language === 'zh' ? '侧边导航' : 'Sidebar navigation'}>\n {items.map(group => {\n const links = collectLinks([group]);\n return links.length > 0 ? (\n <div key={group.id} role=\"group\" aria-label={group.label} className=\"sidebar-rail-group\">\n {links.map(({ item, trail }) => (\n <Link\n key={item.id}\n to={item.path!}\n className=\"sidebar-rail-link\"\n aria-label={trail}\n title={trail}\n aria-current={routerState.pathname === item.path ? 'page' : undefined}\n >\n <span aria-hidden=\"true\">{item.icon || <span>{item.label.charAt(0)}</span>}</span>\n </Link>\n ))}\n </div>\n ) : null;\n })}\n </nav>\n ) : null;\n\n return (\n <div\n ref={sidebarRef}\n className=\"dishui-sidebar sidebar-container h-full bg-base-200 overflow-visible flex flex-col transition-colors duration-200 ease-in-out relative\"\n style={isCollapsed ? { width: collapsedWidth } : { width: sidebarWidth, maxWidth, minWidth }}\n >\n {onToggle && (\n <DesktopSidebarToggleButton\n isCollapsed={isCollapsed}\n side={side}\n onToggle={onToggle}\n sidebarWidth={sidebarWidth}\n collapsedWidth={collapsedWidth}\n onWidthChange={onWidthChange ? handleInternalWidthChange : undefined}\n minWidth={minWidth}\n maxWidth={maxWidth}\n anchorRef={sidebarRef}\n />\n )}\n {(workspace || primaryAction) && (\n <div className=\"dishui-sidebar-ai-header\">\n {workspace && (\n <button type=\"button\" className=\"dishui-sidebar-ai-workspace\" onClick={workspace.onClick} title={isCollapsed && typeof workspace.name === 'string' ? workspace.name : undefined}>\n <span className=\"dishui-sidebar-ai-avatar\" aria-hidden=\"true\">{workspace.icon ?? (typeof workspace.name === 'string' ? workspace.name.charAt(0).toUpperCase() : '•')}</span>\n {!isCollapsed && <span className=\"dishui-sidebar-ai-workspace-name\">{workspace.name}</span>}\n </button>\n )}\n {primaryAction && (\n <button type=\"button\" className=\"dishui-sidebar-ai-action\" onClick={primaryAction.onClick} title={isCollapsed && typeof primaryAction.label === 'string' ? primaryAction.label : undefined}>\n <span aria-hidden=\"true\">{primaryAction.icon ?? '+'}</span>\n {!isCollapsed && <span>{primaryAction.label}</span>}\n </button>\n )}\n </div>\n )}\n {rail}\n <div hidden={isCollapsed} style={isCollapsed ? { display: 'none' } : undefined} ref={isCollapsed ? undefined : scrollRef} className=\"sidebar-scroll min-h-0 flex-grow overflow-y-auto scrollbar-thin scrollbar-thumb-base-300 scrollbar-track-transparent\">\n <Tree\n data={treeData}\n activeNodeId={activeNodeId}\n defaultExpandedIds={defaultExpandedIds}\n showSearch={false}\n showExpandAll={false}\n showIcon={true}\n showCount={false}\n showLine={true}\n indent={1}\n togglePosition=\"right\"\n maxHeight=\"100%\"\n className={`sidebar-tree${levelText !== undefined ? ' sidebar-tree-level-text' : ''}`}\n renderLabel={(node, depth) => {\n const level = Math.min(depth, 2);\n const text = levelText?.[level];\n const defaults = DEFAULT_LEVEL_TEXT[level];\n return (\n <Text\n size={text?.size ?? defaults.size}\n weight={text?.weight ?? defaults.weight}\n color={activeNodeId === node.id ? 'inherit' : text?.color ?? 'inherit'}\n style={{\n ...(levelText === undefined ? { fontSize: 'inherit', lineHeight: 'inherit', fontWeight: 'inherit' } : {}),\n ...(level === 2 && text?.color === undefined && activeNodeId !== node.id\n ? { color: 'var(--sidebar-level-muted)' } : {}),\n }}\n >\n {node.label}\n {typeof node.id === 'string' && node.id.startsWith('ai-') && (\n <span className=\"dishui-sidebar-ai-native-badge\">AI</span>\n )}\n </Text>\n );\n }}\n onNodeClick={handleNodeClick}\n />\n </div>\n {footer && !isCollapsed && <div className=\"dishui-sidebar-ai-footer\">{footer}</div>}\n\n <style>{`\n .sidebar-container {\n --sidebar-level-muted: oklch(from color-mix(in oklab, var(--color-base-content) 76%, var(--color-base-200)) l 0 0);\n }\n /* LayoutSuite uses semantic surfaces even in colorful themes. Match its text luminance. */\n .dishui-layout-suite-sidebar > .sidebar-container {\n --sidebar-level-muted: oklch(from var(--dishui-text-tertiary) l 0 0);\n }\n .sidebar-rail { min-height: 0; height: 100%; overflow-y: auto; overflow-x: hidden; overscroll-behavior: contain; padding: 6px; }\n .sidebar-rail-group { display: flex; flex-direction: column; align-items: center; gap: 4px; padding: 4px 2px; margin-bottom: 8px; border: 1px solid var(--dishui-border-hairline, var(--color-base-300)); border-radius: 10px; }\n .sidebar-rail-link { display: flex; align-items: center; justify-content: center; width: 100%; max-width: 36px; min-height: 36px; flex-shrink: 0; border-radius: 6px; color: var(--sidebar-level-muted); text-decoration: none; transition: background-color 150ms, color 150ms; }\n .sidebar-rail-link > span { display: flex; align-items: center; justify-content: center; }\n .sidebar-rail-link svg { width: 18px; height: 18px; }\n .sidebar-rail-link:hover { background: var(--color-base-300); }\n .sidebar-rail-link[aria-current=\"page\"] { color: var(--color-primary); background: color-mix(in oklab, var(--color-primary) 12%, var(--color-base-200)); box-shadow: inset 2px 0 var(--color-primary); }\n .sidebar-rail-link:focus-visible { outline: 2px solid var(--dishui-ring, var(--color-primary)); outline-offset: -2px; }\n @media (prefers-reduced-motion: reduce) { .sidebar-rail-link { transition: none; } }\n /* Sidebar Tree 自定义样式 */\n .sidebar-tree {\n background: transparent;\n border: none;\n padding: 0.5rem;\n }\n \n .sidebar-tree .tree-node-content {\n padding: 0.5rem 1rem;\n border-radius: var(--dishui-radius-sm);\n transition: background-color var(--dishui-duration-normal) var(--dishui-ease-out), color var(--dishui-duration-normal) var(--dishui-ease-out), transform var(--dishui-duration-normal) var(--dishui-ease-out);\n }\n \n /* 活跃状态 - 为每个主题设置匹配的配色 */\n .sidebar-tree .tree-node-content-active {\n font-weight: 600 !important;\n padding-left: calc(1rem - 4px) !important;\n }\n \n /* 主题活跃状态样式 - 从共用配置生成 */\n ${generateSidebarActiveStyles()}\n \n /* 悬停状态 */\n .sidebar-tree .tree-node-content:hover:not(.tree-node-active .tree-node-content):not(.tree-node-content-active) {\n background-color: var(--color-base-200);\n }\n \n /* 右侧展开按钮样式 */\n .sidebar-tree .tree-node-toggle-right {\n width: auto;\n height: auto;\n min-width: auto;\n min-height: auto;\n padding: 0.25rem;\n opacity: 0.6;\n transition: opacity var(--dishui-duration-normal) var(--dishui-ease-out), background-color var(--dishui-duration-normal) var(--dishui-ease-out);\n border-radius: var(--dishui-radius-xs);\n }\n \n .sidebar-tree .tree-node-toggle-right:hover {\n opacity: 1;\n background-color: var(--color-base-300);\n }\n \n /* 右侧按钮图标旋转 */\n .sidebar-tree .tree-node-toggle-right svg {\n width: 1rem;\n height: 1rem;\n transition: transform var(--dishui-duration-normal) var(--dishui-ease-out);\n }\n \n .sidebar-tree .tree-node-toggle-right.tree-node-toggle-expanded svg {\n transform: rotate(90deg);\n }\n \n /* 图标样式 */\n .sidebar-tree .tree-node-icon {\n width: 1.25rem;\n height: 1.25rem;\n display: flex;\n align-items: center;\n justify-content: center;\n flex-shrink: 0;\n transition: color 0.2s ease;\n }\n \n .sidebar-tree .tree-node-icon svg {\n width: 1.25rem;\n height: 1.25rem;\n }\n \n /* 子节点图标稍小 */\n .sidebar-tree .tree-node-children .tree-node-icon svg {\n width: 1rem;\n height: 1rem;\n opacity: 0.8;\n }\n \n /* Preserve the legacy all-level appearance only when typography is not configured. */\n .sidebar-tree:not(.sidebar-tree-level-text) .tree-node-label {\n font-size: 1rem;\n line-height: 1.4rem;\n font-weight: 500;\n }\n \n /* 连接线样式 - 强制显示!向右移动并加粗,增加整体左边距 */\n /* 使用双重选择器增加优先级,避免被其他 Tree 组件样式覆盖 */\n .sidebar-tree.sidebar-tree .tree-show-line .tree-node-children-expanded,\n .sidebar-tree.sidebar-tree .tree-node-children.tree-node-children-expanded,\n div.sidebar-tree .tree-show-line .tree-node-children-expanded,\n div.sidebar-tree .tree-node-children.tree-node-children-expanded {\n border-left: 3px solid rgba(128, 128, 128, 0.35) !important;\n margin-left: 24px !important;\n padding-left: 8px !important;\n box-sizing: border-box !important;\n }\n \n /* 隐藏 Tree 组件的圆点装饰 - 避免与 Sidebar 样式冲突 */\n .sidebar-tree.sidebar-tree .tree-show-line .tree-node-children-expanded::before,\n div.sidebar-tree .tree-show-line .tree-node-children-expanded::before {\n display: none !important;\n }\n \n /* 隐藏 Tree 组件的标题和操作按钮 */\n .sidebar-tree .tree-header,\n .sidebar-tree .tree-search,\n .sidebar-tree .tree-actions {\n display: none;\n }\n \n /* 移除内边距 */\n .sidebar-tree > div:first-child {\n padding: 0;\n }\n \n /* 子节点动画优化 - 减小间距 */\n .sidebar-tree .tree-node-children {\n margin-top: 0.125rem !important;\n }\n \n /* 一级菜单项间距 */\n .sidebar-tree > div > .tree-nodes > .tree-node {\n margin-bottom: 0.375rem;\n }\n \n /* 二级菜单项间距 */\n .sidebar-tree .tree-node-children > .tree-node {\n margin-bottom: 0.125rem;\n }\n `}</style>\n </div>\n );\n};\n\nexport default Sidebar; "],"mappings":"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"}
@@ -429,6 +429,16 @@ var e = {
429
429
  id: "calendar-scenarios",
430
430
  label: "日历场景示例",
431
431
  path: "/components/calendar/scenarios"
432
+ },
433
+ kanban: {
434
+ id: "kanban",
435
+ label: "看板与泳道",
436
+ path: "/components/kanban"
437
+ },
438
+ cardTicket: {
439
+ id: "card-ticket",
440
+ label: "任务工单卡",
441
+ path: "/components/card/ticket"
432
442
  }
433
443
  }
434
444
  },
@@ -872,6 +882,16 @@ var e = {
872
882
  id: "calendar-scenarios",
873
883
  label: "Calendar Scenarios",
874
884
  path: "/components/calendar/scenarios"
885
+ },
886
+ kanban: {
887
+ id: "kanban",
888
+ label: "Kanban & Swimlanes",
889
+ path: "/components/kanban"
890
+ },
891
+ cardTicket: {
892
+ id: "card-ticket",
893
+ label: "Card.Ticket",
894
+ path: "/components/card/ticket"
875
895
  }
876
896
  }
877
897
  },
@@ -1 +1 @@
1
- {"version":3,"file":"i18n.js","names":[],"sources":["../../src/utils/i18n.tsx"],"sourcesContent":["// 导入类型\nimport { MenuItem } from '../types/menu';\n\n// 定义语言类型\nexport type Language = 'zh' | 'en';\n\n// 定义翻译类型\nexport type Translations = {\n navbar: {\n search: string;\n searchPlaceholder: string;\n searchShortcut: string;\n noResults: string;\n };\n sidebar: {\n menu: {\n home: MenuItem;\n components: Omit<MenuItem, 'children'> & {\n children: Record<string, MenuItem>;\n };\n layouts: Omit<MenuItem, 'children'> & {\n children: Record<string, MenuItem>;\n };\n advanced: Omit<MenuItem, 'children'> & {\n children: Record<string, MenuItem>;\n };\n charts: MenuItem;\n showcase: Omit<MenuItem, 'children'> & {\n children: Record<string, MenuItem>;\n };\n };\n };\n};\n\n// 中文翻译\nexport const zhTranslations: Translations = {\n navbar: {\n search: '搜索组件',\n searchPlaceholder: '搜索组件、文档、示例...',\n searchShortcut: 'Cmd+K',\n noResults: '没有找到匹配的结果',\n },\n sidebar: {\n menu: {\n home: {\n id: 'home',\n label: '主页',\n path: '/',\n },\n components: {\n id: 'components',\n label: '组件',\n children: {\n button: {\n id: 'button',\n label: '按钮',\n path: '/components/button',\n },\n badge: {\n id: 'badge',\n label: '徽章',\n path: '/components/badge',\n },\n groupbutton: {\n id: 'groupbutton',\n label: '选择按钮组',\n path: '/components/group-button',\n },\n cardinfo: {\n id: 'cardinfo',\n label: '信息卡',\n path: '/components/card/info',\n },\n cardstat: {\n id: 'cardstat',\n label: '统计卡',\n path: '/components/card/stat',\n },\n cardmetric: {\n id: 'cardmetric',\n label: '指标卡',\n path: '/components/card-metric',\n },\n groupedtable: {\n id: 'groupedtable',\n label: '分组表格',\n path: '/components/grouped-table',\n },\n navigationlist: {\n id: 'navigationlist',\n label: '导航列表',\n path: '/components/navigation-list',\n },\n skeleton: {\n id: 'skeleton',\n label: '骨架',\n path: '/components/skeleton',\n },\n input: {\n id: 'input',\n label: '输入框',\n path: '/components/input',\n },\n label: {\n id: 'label',\n label: '标签',\n path: '/components/label',\n },\n checkbox: {\n id: 'checkbox',\n label: '复选框',\n path: '/components/checkbox',\n },\n select: {\n id: 'select',\n label: '选择器',\n path: '/components/select',\n },\n card: {\n id: 'card',\n label: '卡片',\n path: '/components/card',\n },\n avatar: {\n id: 'avatar',\n label: '头像',\n path: '/components/avatar',\n },\n accordion: {\n id: 'accordion',\n label: '手风琴',\n path: '/components/accordion',\n },\n emptystate: {\n id: 'emptystate',\n label: '空状态',\n path: '/components/emptystate',\n },\n modal: {\n id: 'modal',\n label: '模态框',\n path: '/components/modal',\n },\n tabs: {\n id: 'tabs',\n label: '标签页',\n path: '/components/tabs',\n },\n list: {\n id: 'list',\n label: '列表',\n path: '/components/list',\n },\n table: {\n id: 'table',\n label: '表格',\n path: '/components/table',\n },\n markdown: {\n id: 'markdown',\n label: 'Markdown文档',\n path: '/components/markdown',\n },\n tree: {\n id: 'tree',\n label: '树形控件',\n path: '/components/tree',\n },\n fileuploader: {\n id: 'fileuploader',\n label: '文件上传',\n path: '/components/fileuploader',\n },\n text: {\n id: 'text',\n label: '文本',\n path: '/components/text',\n },\n image: {\n id: 'image',\n label: '图片',\n path: '/components/image',\n },\n icon: {\n id: 'icon',\n label: '图标',\n path: '/components/icon',\n },\n slider: {\n id: 'slider',\n label: '滑块',\n path: '/components/slider',\n },\n datetimeinput: {\n id: 'datetimeinput',\n label: '日期时间',\n path: '/components/datetime-input',\n },\n multiplechoice: {\n id: 'multiplechoice',\n label: '多选组',\n path: '/components/multiple-choice',\n },\n choicepicker: {\n id: 'choicepicker',\n label: '单选组',\n path: '/components/choice-picker',\n },\n },\n },\n layouts: {\n id: 'layouts',\n label: '布局',\n children: {\n layout: { id: 'layout', label: '布局总览', path: '/layouts/layout' },\n resizable: { id: 'resizable', label: '可调节布局', path: '/layouts/resizable' },\n container: { id: 'container', label: '容器', path: '/layouts/container' },\n grid: { id: 'grid', label: '栅格', path: '/layouts/grid' },\n flex: { id: 'flex', label: '弹性布局', path: '/layouts/flex' },\n group: { id: 'group', label: '布局组', path: '/layouts/group' },\n space: { id: 'space', label: '占位', path: '/layouts/space' },\n page: { id: 'page', label: '页面布局', path: '/layouts/page' },\n row: { id: 'row', label: '行布局', path: '/layouts/row' },\n column: { id: 'column', label: '列布局', path: '/layouts/column' },\n },\n },\n charts: {\n id: 'charts',\n label: '图表',\n path: '/components/chart',\n children: [\n { id: 'chart-line', label: '折线图', path: '/components/chart/line' },\n { id: 'chart-area', label: '面积图', path: '/components/chart/area' },\n { id: 'chart-bar', label: '柱状图', path: '/components/chart/bar' },\n { id: 'chart-pie', label: '饼图', path: '/components/chart/pie' },\n { id: 'chart-scatter', label: '散点图', path: '/components/chart/scatter' },\n { id: 'chart-combo', label: '组合图', path: '/components/chart/complex/combo' },\n { id: 'chart-stacked', label: '堆叠面积图', path: '/components/chart/complex/stacked' },\n { id: 'chart-heatmap', label: '热力图', path: '/components/chart/complex/heatmap' },\n { id: 'chart-regression', label: '回归分析', path: '/components/chart/complex/regression' },\n { id: 'chart-radar', label: '雷达图', path: '/components/chart/special/radar' },\n { id: 'chart-sankey', label: '桑基图', path: '/components/chart/special/sankey' },\n { id: 'chart-network', label: '网络图', path: '/components/chart/special/network' },\n { id: 'chart-calendar', label: '日历热力图', path: '/components/chart/special/calendar' },\n { id: 'chart-stacked-pie', label: '堆叠饼图', path: '/components/chart/special/stacked-pie' },\n { id: 'chart-funnel', label: '销售漏斗图', path: '/components/chart/special/funnel' },\n { id: 'chart-treemap', label: '矩形树图', path: '/components/chart/special/treemap' },\n { id: 'chart-globe', label: '地球', path: '/components/chart/special/globe' },\n { id: 'chart-world-map', label: '世界地图', path: '/components/chart/special/world-map' },\n ],\n },\n advanced: {\n id: 'advanced-components',\n label: '高级组件',\n children: {\n datatable: {\n id: 'datatable',\n label: '数据表格',\n path: '/components/datatable',\n },\n datatableAdvanced: {\n id: 'datatableadvanced',\n label: '高级表格',\n path: '/components/datatable/advanced',\n },\n datatableAdvancedTree: {\n id: 'datatableadvancedtree',\n label: '高级树形表格',\n path: '/components/datatable/advancedTreeTable',\n },\n datatableHooks: {\n id: 'datatablehooks',\n label: '钩子简化示例',\n path: '/components/datatable/hooks',\n },\n datatablePivot: {\n id: 'datatablepivot',\n label: '透视与扩展',\n path: '/components/datatable/pivot',\n },\n\n jukebox: {\n id: 'jukebox',\n label: '音乐播放器',\n path: '/components/jukebox',\n },\n articlecontrol: {\n id: 'articlecontrol',\n label: '文档悬浮控件',\n path: '/components/articlecontrol',\n },\n codeeditor: {\n id: 'codeeditor',\n label: '代码编辑器',\n path: '/components/codeeditor',\n },\n markdowneditor: {\n id: 'markdowneditor',\n label: '文档编辑器',\n path: '/components/markdowneditor',\n },\n sidebar: {\n id: 'sidebar-demo',\n label: '侧边栏',\n path: '/components/sidebar',\n },\n fileexplorer: {\n id: 'fileexplorer',\n label: '文件浏览器',\n path: '/components/fileexplorer',\n },\n richtexteditor: {\n id: 'richtexteditor',\n label: '富文本编辑器',\n path: '/components/richtexteditor',\n },\n richtexteditorMobile: {\n id: 'richtexteditor-mobile',\n label: '富文本编辑器移动端示例',\n path: '/components/richtexteditor/mobile',\n },\n flow: {\n id: 'flow',\n label: '流程图',\n path: '/components/flow',\n },\n flowUsage: {\n id: 'flow-usage',\n label: '流程图使用示例',\n path: '/components/flow/usage',\n },\n flowMobile: {\n id: 'flow-mobile',\n label: '流程图移动端示例',\n path: '/components/flow/mobile',\n },\n gantt: {\n id: 'gantt',\n label: '甘特图',\n path: '/components/gantt',\n },\n ganttScenarios: {\n id: 'gantt-scenarios',\n label: '甘特图场景示例',\n path: '/components/gantt/scenarios',\n },\n calendar: {\n id: 'calendar',\n label: '日历',\n path: '/components/calendar',\n },\n calendarScenarios: {\n id: 'calendar-scenarios',\n label: '日历场景示例',\n path: '/components/calendar/scenarios',\n },\n },\n },\n showcase: {\n id: 'showcase',\n label: '案例',\n children: {\n itbudget: {\n id: 'showcase-it-budget',\n label: '信息技术预算',\n path: '/showcase/it-budget',\n },\n },\n },\n },\n },\n};\n\n// 英文翻译\nexport const enTranslations: Translations = {\n navbar: {\n search: 'Search Components',\n searchPlaceholder: 'Search components, docs, examples...',\n searchShortcut: 'Cmd+K',\n noResults: 'No results found',\n },\n sidebar: {\n menu: {\n home: {\n id: 'home',\n label: 'Home',\n path: '/',\n },\n components: {\n id: 'components',\n label: 'Components',\n children: {\n button: {\n id: 'button',\n label: 'Button',\n path: '/components/button',\n },\n badge: {\n id: 'badge',\n label: 'Badge',\n path: '/components/badge',\n },\n groupbutton: {\n id: 'groupbutton',\n label: 'GroupButton',\n path: '/components/group-button',\n },\n cardinfo: {\n id: 'cardinfo',\n label: 'Card.Info',\n path: '/components/card/info',\n },\n cardstat: {\n id: 'cardstat',\n label: 'Card.Stat',\n path: '/components/card/stat',\n },\n cardmetric: {\n id: 'cardmetric',\n label: 'Card.Metric',\n path: '/components/card-metric',\n },\n groupedtable: {\n id: 'groupedtable',\n label: 'GroupedTable',\n path: '/components/grouped-table',\n },\n navigationlist: {\n id: 'navigationlist',\n label: 'NavigationList',\n path: '/components/navigation-list',\n },\n skeleton: {\n id: 'skeleton',\n label: 'Skeleton',\n path: '/components/skeleton',\n },\n input: {\n id: 'input',\n label: 'Input',\n path: '/components/input',\n },\n label: {\n id: 'label',\n label: 'Label',\n path: '/components/label',\n },\n checkbox: {\n id: 'checkbox',\n label: 'Checkbox',\n path: '/components/checkbox',\n },\n select: {\n id: 'select',\n label: 'Select',\n path: '/components/select',\n },\n card: {\n id: 'card',\n label: 'Card',\n path: '/components/card',\n },\n avatar: {\n id: 'avatar',\n label: 'Avatar',\n path: '/components/avatar',\n },\n accordion: {\n id: 'accordion',\n label: 'Accordion',\n path: '/components/accordion',\n },\n emptystate: {\n id: 'emptystate',\n label: 'EmptyState',\n path: '/components/emptystate',\n },\n modal: {\n id: 'modal',\n label: 'Modal',\n path: '/components/modal',\n },\n tabs: {\n id: 'tabs',\n label: 'Tabs',\n path: '/components/tabs',\n },\n list: {\n id: 'list',\n label: 'List',\n path: '/components/list',\n },\n table: {\n id: 'table',\n label: 'Table',\n path: '/components/table',\n },\n markdown: {\n id: 'markdown',\n label: 'Markdown',\n path: '/components/markdown',\n },\n tree: {\n id: 'tree',\n label: 'Tree',\n path: '/components/tree',\n },\n fileuploader: {\n id: 'fileuploader',\n label: 'FileUploader',\n path: '/components/fileuploader',\n },\n text: {\n id: 'text',\n label: 'Text',\n path: '/components/text',\n },\n image: {\n id: 'image',\n label: 'Image',\n path: '/components/image',\n },\n icon: {\n id: 'icon',\n label: 'Icon',\n path: '/components/icon',\n },\n slider: {\n id: 'slider',\n label: 'Slider',\n path: '/components/slider',\n },\n datetimeinput: {\n id: 'datetimeinput',\n label: 'DateTimeInput',\n path: '/components/datetime-input',\n },\n multiplechoice: {\n id: 'multiplechoice',\n label: 'MultipleChoice',\n path: '/components/multiple-choice',\n },\n choicepicker: {\n id: 'choicepicker',\n label: 'ChoicePicker',\n path: '/components/choice-picker',\n },\n },\n },\n layouts: {\n id: 'layouts',\n label: 'Layout',\n children: {\n layout: { id: 'layout', label: 'Layout Overview', path: '/layouts/layout' },\n resizable: { id: 'resizable', label: 'Resizable', path: '/layouts/resizable' },\n container: { id: 'container', label: 'Container', path: '/layouts/container' },\n grid: { id: 'grid', label: 'Grid', path: '/layouts/grid' },\n flex: { id: 'flex', label: 'Flex', path: '/layouts/flex' },\n group: { id: 'group', label: 'Group', path: '/layouts/group' },\n space: { id: 'space', label: 'Space', path: '/layouts/space' },\n page: { id: 'page', label: 'Page Layout', path: '/layouts/page' },\n row: { id: 'row', label: 'Row', path: '/layouts/row' },\n column: { id: 'column', label: 'Column', path: '/layouts/column' },\n },\n },\n charts: {\n id: 'charts',\n label: 'Charts',\n path: '/components/chart',\n children: [\n { id: 'chart-line', label: 'Line Chart', path: '/components/chart/line' },\n { id: 'chart-area', label: 'Area Chart', path: '/components/chart/area' },\n { id: 'chart-bar', label: 'Bar Chart', path: '/components/chart/bar' },\n { id: 'chart-pie', label: 'Pie Chart', path: '/components/chart/pie' },\n { id: 'chart-scatter', label: 'Scatter Chart', path: '/components/chart/scatter' },\n { id: 'chart-combo', label: 'Combo Chart', path: '/components/chart/complex/combo' },\n { id: 'chart-stacked', label: 'Stacked Area', path: '/components/chart/complex/stacked' },\n { id: 'chart-heatmap', label: 'Heatmap', path: '/components/chart/complex/heatmap' },\n { id: 'chart-regression', label: 'Regression Analysis', path: '/components/chart/complex/regression' },\n { id: 'chart-radar', label: 'Radar Chart', path: '/components/chart/special/radar' },\n { id: 'chart-sankey', label: 'Sankey Diagram', path: '/components/chart/special/sankey' },\n { id: 'chart-network', label: 'Network Graph', path: '/components/chart/special/network' },\n { id: 'chart-calendar', label: 'Calendar Heatmap', path: '/components/chart/special/calendar' },\n { id: 'chart-stacked-pie', label: 'Stacked Pie', path: '/components/chart/special/stacked-pie' },\n { id: 'chart-funnel', label: 'Sales Funnel', path: '/components/chart/special/funnel' },\n { id: 'chart-treemap', label: 'Treemap', path: '/components/chart/special/treemap' },\n { id: 'chart-globe', label: 'Globe', path: '/components/chart/special/globe' },\n { id: 'chart-world-map', label: 'World Map', path: '/components/chart/special/world-map' }\n ],\n },\n advanced: {\n id: 'advanced-components',\n label: 'Advanced Components',\n children: {\n datatable: {\n id: 'datatable',\n label: 'DataTable',\n path: '/components/datatable',\n },\n datatableAdvanced: {\n id: 'datatableadvanced',\n label: 'Advanced Table',\n path: '/components/datatable/advanced',\n },\n datatableAdvancedTree: {\n id: 'datatableadvancedtree',\n label: 'Advanced Tree Table',\n path: '/components/datatable/advancedTreeTable',\n },\n datatableHooks: {\n id: 'datatablehooks',\n label: 'Hooks Simplification',\n path: '/components/datatable/hooks',\n },\n datatablePivot: {\n id: 'datatablepivot',\n label: 'Pivot & Extensions',\n path: '/components/datatable/pivot',\n },\n\n jukebox: {\n id: 'jukebox',\n label: 'Jukebox',\n path: '/components/jukebox',\n },\n articlecontrol: {\n id: 'articlecontrol',\n label: 'ArticleControl',\n path: '/components/articlecontrol',\n },\n codeeditor: {\n id: 'codeeditor',\n label: 'CodeEditor',\n path: '/components/codeeditor',\n },\n markdowneditor: {\n id: 'markdowneditor',\n label: 'MarkdownEditor',\n path: '/components/markdowneditor',\n },\n sidebar: {\n id: 'sidebar-demo',\n label: 'Sidebar',\n path: '/components/sidebar',\n },\n fileexplorer: {\n id: 'fileexplorer',\n label: 'FileExplorer',\n path: '/components/fileexplorer',\n },\n richtexteditor: {\n id: 'richtexteditor',\n label: 'RichTextEditor',\n path: '/components/richtexteditor',\n },\n richtexteditorMobile: {\n id: 'richtexteditor-mobile',\n label: 'RichTextEditor Mobile Guide',\n path: '/components/richtexteditor/mobile',\n },\n flow: {\n id: 'flow',\n label: 'Flow Editor',\n path: '/components/flow',\n },\n flowUsage: {\n id: 'flow-usage',\n label: 'Flow Usage Guide',\n path: '/components/flow/usage',\n },\n flowMobile: {\n id: 'flow-mobile',\n label: 'Flow Mobile Guide',\n path: '/components/flow/mobile',\n },\n gantt: {\n id: 'gantt',\n label: 'Gantt Chart',\n path: '/components/gantt',\n },\n ganttScenarios: {\n id: 'gantt-scenarios',\n label: 'Gantt Scenarios',\n path: '/components/gantt/scenarios',\n },\n calendar: {\n id: 'calendar',\n label: 'Calendar',\n path: '/components/calendar',\n },\n calendarScenarios: {\n id: 'calendar-scenarios',\n label: 'Calendar Scenarios',\n path: '/components/calendar/scenarios',\n },\n },\n },\n showcase: {\n id: 'showcase',\n label: 'Showcase',\n children: {\n itbudget: {\n id: 'showcase-it-budget',\n label: 'IT Budget',\n path: '/showcase/it-budget',\n },\n },\n },\n },\n },\n};\n\n// 根据语言获取翻译\nexport const getTranslations = (language: Language): Translations => {\n return language === 'zh' ? zhTranslations : enTranslations;\n};\n"],"mappings":"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"}
1
+ {"version":3,"file":"i18n.js","names":[],"sources":["../../src/utils/i18n.tsx"],"sourcesContent":["// 导入类型\nimport { MenuItem } from '../types/menu';\n\n// 定义语言类型\nexport type Language = 'zh' | 'en';\n\n// 定义翻译类型\nexport type Translations = {\n navbar: {\n search: string;\n searchPlaceholder: string;\n searchShortcut: string;\n noResults: string;\n };\n sidebar: {\n menu: {\n home: MenuItem;\n components: Omit<MenuItem, 'children'> & {\n children: Record<string, MenuItem>;\n };\n layouts: Omit<MenuItem, 'children'> & {\n children: Record<string, MenuItem>;\n };\n advanced: Omit<MenuItem, 'children'> & {\n children: Record<string, MenuItem>;\n };\n charts: MenuItem;\n showcase: Omit<MenuItem, 'children'> & {\n children: Record<string, MenuItem>;\n };\n };\n };\n};\n\n// 中文翻译\nexport const zhTranslations: Translations = {\n navbar: {\n search: '搜索组件',\n searchPlaceholder: '搜索组件、文档、示例...',\n searchShortcut: 'Cmd+K',\n noResults: '没有找到匹配的结果',\n },\n sidebar: {\n menu: {\n home: {\n id: 'home',\n label: '主页',\n path: '/',\n },\n components: {\n id: 'components',\n label: '组件',\n children: {\n button: {\n id: 'button',\n label: '按钮',\n path: '/components/button',\n },\n badge: {\n id: 'badge',\n label: '徽章',\n path: '/components/badge',\n },\n groupbutton: {\n id: 'groupbutton',\n label: '选择按钮组',\n path: '/components/group-button',\n },\n cardinfo: {\n id: 'cardinfo',\n label: '信息卡',\n path: '/components/card/info',\n },\n cardstat: {\n id: 'cardstat',\n label: '统计卡',\n path: '/components/card/stat',\n },\n cardmetric: {\n id: 'cardmetric',\n label: '指标卡',\n path: '/components/card-metric',\n },\n groupedtable: {\n id: 'groupedtable',\n label: '分组表格',\n path: '/components/grouped-table',\n },\n navigationlist: {\n id: 'navigationlist',\n label: '导航列表',\n path: '/components/navigation-list',\n },\n skeleton: {\n id: 'skeleton',\n label: '骨架',\n path: '/components/skeleton',\n },\n input: {\n id: 'input',\n label: '输入框',\n path: '/components/input',\n },\n label: {\n id: 'label',\n label: '标签',\n path: '/components/label',\n },\n checkbox: {\n id: 'checkbox',\n label: '复选框',\n path: '/components/checkbox',\n },\n select: {\n id: 'select',\n label: '选择器',\n path: '/components/select',\n },\n card: {\n id: 'card',\n label: '卡片',\n path: '/components/card',\n },\n avatar: {\n id: 'avatar',\n label: '头像',\n path: '/components/avatar',\n },\n accordion: {\n id: 'accordion',\n label: '手风琴',\n path: '/components/accordion',\n },\n emptystate: {\n id: 'emptystate',\n label: '空状态',\n path: '/components/emptystate',\n },\n modal: {\n id: 'modal',\n label: '模态框',\n path: '/components/modal',\n },\n tabs: {\n id: 'tabs',\n label: '标签页',\n path: '/components/tabs',\n },\n list: {\n id: 'list',\n label: '列表',\n path: '/components/list',\n },\n table: {\n id: 'table',\n label: '表格',\n path: '/components/table',\n },\n markdown: {\n id: 'markdown',\n label: 'Markdown文档',\n path: '/components/markdown',\n },\n tree: {\n id: 'tree',\n label: '树形控件',\n path: '/components/tree',\n },\n fileuploader: {\n id: 'fileuploader',\n label: '文件上传',\n path: '/components/fileuploader',\n },\n text: {\n id: 'text',\n label: '文本',\n path: '/components/text',\n },\n image: {\n id: 'image',\n label: '图片',\n path: '/components/image',\n },\n icon: {\n id: 'icon',\n label: '图标',\n path: '/components/icon',\n },\n slider: {\n id: 'slider',\n label: '滑块',\n path: '/components/slider',\n },\n datetimeinput: {\n id: 'datetimeinput',\n label: '日期时间',\n path: '/components/datetime-input',\n },\n multiplechoice: {\n id: 'multiplechoice',\n label: '多选组',\n path: '/components/multiple-choice',\n },\n choicepicker: {\n id: 'choicepicker',\n label: '单选组',\n path: '/components/choice-picker',\n },\n },\n },\n layouts: {\n id: 'layouts',\n label: '布局',\n children: {\n layout: { id: 'layout', label: '布局总览', path: '/layouts/layout' },\n resizable: { id: 'resizable', label: '可调节布局', path: '/layouts/resizable' },\n container: { id: 'container', label: '容器', path: '/layouts/container' },\n grid: { id: 'grid', label: '栅格', path: '/layouts/grid' },\n flex: { id: 'flex', label: '弹性布局', path: '/layouts/flex' },\n group: { id: 'group', label: '布局组', path: '/layouts/group' },\n space: { id: 'space', label: '占位', path: '/layouts/space' },\n page: { id: 'page', label: '页面布局', path: '/layouts/page' },\n row: { id: 'row', label: '行布局', path: '/layouts/row' },\n column: { id: 'column', label: '列布局', path: '/layouts/column' },\n },\n },\n charts: {\n id: 'charts',\n label: '图表',\n path: '/components/chart',\n children: [\n { id: 'chart-line', label: '折线图', path: '/components/chart/line' },\n { id: 'chart-area', label: '面积图', path: '/components/chart/area' },\n { id: 'chart-bar', label: '柱状图', path: '/components/chart/bar' },\n { id: 'chart-pie', label: '饼图', path: '/components/chart/pie' },\n { id: 'chart-scatter', label: '散点图', path: '/components/chart/scatter' },\n { id: 'chart-combo', label: '组合图', path: '/components/chart/complex/combo' },\n { id: 'chart-stacked', label: '堆叠面积图', path: '/components/chart/complex/stacked' },\n { id: 'chart-heatmap', label: '热力图', path: '/components/chart/complex/heatmap' },\n { id: 'chart-regression', label: '回归分析', path: '/components/chart/complex/regression' },\n { id: 'chart-radar', label: '雷达图', path: '/components/chart/special/radar' },\n { id: 'chart-sankey', label: '桑基图', path: '/components/chart/special/sankey' },\n { id: 'chart-network', label: '网络图', path: '/components/chart/special/network' },\n { id: 'chart-calendar', label: '日历热力图', path: '/components/chart/special/calendar' },\n { id: 'chart-stacked-pie', label: '堆叠饼图', path: '/components/chart/special/stacked-pie' },\n { id: 'chart-funnel', label: '销售漏斗图', path: '/components/chart/special/funnel' },\n { id: 'chart-treemap', label: '矩形树图', path: '/components/chart/special/treemap' },\n { id: 'chart-globe', label: '地球', path: '/components/chart/special/globe' },\n { id: 'chart-world-map', label: '世界地图', path: '/components/chart/special/world-map' },\n ],\n },\n advanced: {\n id: 'advanced-components',\n label: '高级组件',\n children: {\n datatable: {\n id: 'datatable',\n label: '数据表格',\n path: '/components/datatable',\n },\n datatableAdvanced: {\n id: 'datatableadvanced',\n label: '高级表格',\n path: '/components/datatable/advanced',\n },\n datatableAdvancedTree: {\n id: 'datatableadvancedtree',\n label: '高级树形表格',\n path: '/components/datatable/advancedTreeTable',\n },\n datatableHooks: {\n id: 'datatablehooks',\n label: '钩子简化示例',\n path: '/components/datatable/hooks',\n },\n datatablePivot: {\n id: 'datatablepivot',\n label: '透视与扩展',\n path: '/components/datatable/pivot',\n },\n\n jukebox: {\n id: 'jukebox',\n label: '音乐播放器',\n path: '/components/jukebox',\n },\n articlecontrol: {\n id: 'articlecontrol',\n label: '文档悬浮控件',\n path: '/components/articlecontrol',\n },\n codeeditor: {\n id: 'codeeditor',\n label: '代码编辑器',\n path: '/components/codeeditor',\n },\n markdowneditor: {\n id: 'markdowneditor',\n label: '文档编辑器',\n path: '/components/markdowneditor',\n },\n sidebar: {\n id: 'sidebar-demo',\n label: '侧边栏',\n path: '/components/sidebar',\n },\n fileexplorer: {\n id: 'fileexplorer',\n label: '文件浏览器',\n path: '/components/fileexplorer',\n },\n richtexteditor: {\n id: 'richtexteditor',\n label: '富文本编辑器',\n path: '/components/richtexteditor',\n },\n richtexteditorMobile: {\n id: 'richtexteditor-mobile',\n label: '富文本编辑器移动端示例',\n path: '/components/richtexteditor/mobile',\n },\n flow: {\n id: 'flow',\n label: '流程图',\n path: '/components/flow',\n },\n flowUsage: {\n id: 'flow-usage',\n label: '流程图使用示例',\n path: '/components/flow/usage',\n },\n flowMobile: {\n id: 'flow-mobile',\n label: '流程图移动端示例',\n path: '/components/flow/mobile',\n },\n gantt: {\n id: 'gantt',\n label: '甘特图',\n path: '/components/gantt',\n },\n ganttScenarios: {\n id: 'gantt-scenarios',\n label: '甘特图场景示例',\n path: '/components/gantt/scenarios',\n },\n calendar: {\n id: 'calendar',\n label: '日历',\n path: '/components/calendar',\n },\n calendarScenarios: {\n id: 'calendar-scenarios',\n label: '日历场景示例',\n path: '/components/calendar/scenarios',\n },\n kanban: {\n id: 'kanban',\n label: '看板与泳道',\n path: '/components/kanban',\n },\n cardTicket: {\n id: 'card-ticket',\n label: '任务工单卡',\n path: '/components/card/ticket',\n },\n },\n },\n showcase: {\n id: 'showcase',\n label: '案例',\n children: {\n itbudget: {\n id: 'showcase-it-budget',\n label: '信息技术预算',\n path: '/showcase/it-budget',\n },\n },\n },\n },\n },\n};\n\n// 英文翻译\nexport const enTranslations: Translations = {\n navbar: {\n search: 'Search Components',\n searchPlaceholder: 'Search components, docs, examples...',\n searchShortcut: 'Cmd+K',\n noResults: 'No results found',\n },\n sidebar: {\n menu: {\n home: {\n id: 'home',\n label: 'Home',\n path: '/',\n },\n components: {\n id: 'components',\n label: 'Components',\n children: {\n button: {\n id: 'button',\n label: 'Button',\n path: '/components/button',\n },\n badge: {\n id: 'badge',\n label: 'Badge',\n path: '/components/badge',\n },\n groupbutton: {\n id: 'groupbutton',\n label: 'GroupButton',\n path: '/components/group-button',\n },\n cardinfo: {\n id: 'cardinfo',\n label: 'Card.Info',\n path: '/components/card/info',\n },\n cardstat: {\n id: 'cardstat',\n label: 'Card.Stat',\n path: '/components/card/stat',\n },\n cardmetric: {\n id: 'cardmetric',\n label: 'Card.Metric',\n path: '/components/card-metric',\n },\n groupedtable: {\n id: 'groupedtable',\n label: 'GroupedTable',\n path: '/components/grouped-table',\n },\n navigationlist: {\n id: 'navigationlist',\n label: 'NavigationList',\n path: '/components/navigation-list',\n },\n skeleton: {\n id: 'skeleton',\n label: 'Skeleton',\n path: '/components/skeleton',\n },\n input: {\n id: 'input',\n label: 'Input',\n path: '/components/input',\n },\n label: {\n id: 'label',\n label: 'Label',\n path: '/components/label',\n },\n checkbox: {\n id: 'checkbox',\n label: 'Checkbox',\n path: '/components/checkbox',\n },\n select: {\n id: 'select',\n label: 'Select',\n path: '/components/select',\n },\n card: {\n id: 'card',\n label: 'Card',\n path: '/components/card',\n },\n avatar: {\n id: 'avatar',\n label: 'Avatar',\n path: '/components/avatar',\n },\n accordion: {\n id: 'accordion',\n label: 'Accordion',\n path: '/components/accordion',\n },\n emptystate: {\n id: 'emptystate',\n label: 'EmptyState',\n path: '/components/emptystate',\n },\n modal: {\n id: 'modal',\n label: 'Modal',\n path: '/components/modal',\n },\n tabs: {\n id: 'tabs',\n label: 'Tabs',\n path: '/components/tabs',\n },\n list: {\n id: 'list',\n label: 'List',\n path: '/components/list',\n },\n table: {\n id: 'table',\n label: 'Table',\n path: '/components/table',\n },\n markdown: {\n id: 'markdown',\n label: 'Markdown',\n path: '/components/markdown',\n },\n tree: {\n id: 'tree',\n label: 'Tree',\n path: '/components/tree',\n },\n fileuploader: {\n id: 'fileuploader',\n label: 'FileUploader',\n path: '/components/fileuploader',\n },\n text: {\n id: 'text',\n label: 'Text',\n path: '/components/text',\n },\n image: {\n id: 'image',\n label: 'Image',\n path: '/components/image',\n },\n icon: {\n id: 'icon',\n label: 'Icon',\n path: '/components/icon',\n },\n slider: {\n id: 'slider',\n label: 'Slider',\n path: '/components/slider',\n },\n datetimeinput: {\n id: 'datetimeinput',\n label: 'DateTimeInput',\n path: '/components/datetime-input',\n },\n multiplechoice: {\n id: 'multiplechoice',\n label: 'MultipleChoice',\n path: '/components/multiple-choice',\n },\n choicepicker: {\n id: 'choicepicker',\n label: 'ChoicePicker',\n path: '/components/choice-picker',\n },\n },\n },\n layouts: {\n id: 'layouts',\n label: 'Layout',\n children: {\n layout: { id: 'layout', label: 'Layout Overview', path: '/layouts/layout' },\n resizable: { id: 'resizable', label: 'Resizable', path: '/layouts/resizable' },\n container: { id: 'container', label: 'Container', path: '/layouts/container' },\n grid: { id: 'grid', label: 'Grid', path: '/layouts/grid' },\n flex: { id: 'flex', label: 'Flex', path: '/layouts/flex' },\n group: { id: 'group', label: 'Group', path: '/layouts/group' },\n space: { id: 'space', label: 'Space', path: '/layouts/space' },\n page: { id: 'page', label: 'Page Layout', path: '/layouts/page' },\n row: { id: 'row', label: 'Row', path: '/layouts/row' },\n column: { id: 'column', label: 'Column', path: '/layouts/column' },\n },\n },\n charts: {\n id: 'charts',\n label: 'Charts',\n path: '/components/chart',\n children: [\n { id: 'chart-line', label: 'Line Chart', path: '/components/chart/line' },\n { id: 'chart-area', label: 'Area Chart', path: '/components/chart/area' },\n { id: 'chart-bar', label: 'Bar Chart', path: '/components/chart/bar' },\n { id: 'chart-pie', label: 'Pie Chart', path: '/components/chart/pie' },\n { id: 'chart-scatter', label: 'Scatter Chart', path: '/components/chart/scatter' },\n { id: 'chart-combo', label: 'Combo Chart', path: '/components/chart/complex/combo' },\n { id: 'chart-stacked', label: 'Stacked Area', path: '/components/chart/complex/stacked' },\n { id: 'chart-heatmap', label: 'Heatmap', path: '/components/chart/complex/heatmap' },\n { id: 'chart-regression', label: 'Regression Analysis', path: '/components/chart/complex/regression' },\n { id: 'chart-radar', label: 'Radar Chart', path: '/components/chart/special/radar' },\n { id: 'chart-sankey', label: 'Sankey Diagram', path: '/components/chart/special/sankey' },\n { id: 'chart-network', label: 'Network Graph', path: '/components/chart/special/network' },\n { id: 'chart-calendar', label: 'Calendar Heatmap', path: '/components/chart/special/calendar' },\n { id: 'chart-stacked-pie', label: 'Stacked Pie', path: '/components/chart/special/stacked-pie' },\n { id: 'chart-funnel', label: 'Sales Funnel', path: '/components/chart/special/funnel' },\n { id: 'chart-treemap', label: 'Treemap', path: '/components/chart/special/treemap' },\n { id: 'chart-globe', label: 'Globe', path: '/components/chart/special/globe' },\n { id: 'chart-world-map', label: 'World Map', path: '/components/chart/special/world-map' }\n ],\n },\n advanced: {\n id: 'advanced-components',\n label: 'Advanced Components',\n children: {\n datatable: {\n id: 'datatable',\n label: 'DataTable',\n path: '/components/datatable',\n },\n datatableAdvanced: {\n id: 'datatableadvanced',\n label: 'Advanced Table',\n path: '/components/datatable/advanced',\n },\n datatableAdvancedTree: {\n id: 'datatableadvancedtree',\n label: 'Advanced Tree Table',\n path: '/components/datatable/advancedTreeTable',\n },\n datatableHooks: {\n id: 'datatablehooks',\n label: 'Hooks Simplification',\n path: '/components/datatable/hooks',\n },\n datatablePivot: {\n id: 'datatablepivot',\n label: 'Pivot & Extensions',\n path: '/components/datatable/pivot',\n },\n\n jukebox: {\n id: 'jukebox',\n label: 'Jukebox',\n path: '/components/jukebox',\n },\n articlecontrol: {\n id: 'articlecontrol',\n label: 'ArticleControl',\n path: '/components/articlecontrol',\n },\n codeeditor: {\n id: 'codeeditor',\n label: 'CodeEditor',\n path: '/components/codeeditor',\n },\n markdowneditor: {\n id: 'markdowneditor',\n label: 'MarkdownEditor',\n path: '/components/markdowneditor',\n },\n sidebar: {\n id: 'sidebar-demo',\n label: 'Sidebar',\n path: '/components/sidebar',\n },\n fileexplorer: {\n id: 'fileexplorer',\n label: 'FileExplorer',\n path: '/components/fileexplorer',\n },\n richtexteditor: {\n id: 'richtexteditor',\n label: 'RichTextEditor',\n path: '/components/richtexteditor',\n },\n richtexteditorMobile: {\n id: 'richtexteditor-mobile',\n label: 'RichTextEditor Mobile Guide',\n path: '/components/richtexteditor/mobile',\n },\n flow: {\n id: 'flow',\n label: 'Flow Editor',\n path: '/components/flow',\n },\n flowUsage: {\n id: 'flow-usage',\n label: 'Flow Usage Guide',\n path: '/components/flow/usage',\n },\n flowMobile: {\n id: 'flow-mobile',\n label: 'Flow Mobile Guide',\n path: '/components/flow/mobile',\n },\n gantt: {\n id: 'gantt',\n label: 'Gantt Chart',\n path: '/components/gantt',\n },\n ganttScenarios: {\n id: 'gantt-scenarios',\n label: 'Gantt Scenarios',\n path: '/components/gantt/scenarios',\n },\n calendar: {\n id: 'calendar',\n label: 'Calendar',\n path: '/components/calendar',\n },\n calendarScenarios: {\n id: 'calendar-scenarios',\n label: 'Calendar Scenarios',\n path: '/components/calendar/scenarios',\n },\n kanban: {\n id: 'kanban',\n label: 'Kanban & Swimlanes',\n path: '/components/kanban',\n },\n cardTicket: {\n id: 'card-ticket',\n label: 'Card.Ticket',\n path: '/components/card/ticket',\n },\n },\n },\n showcase: {\n id: 'showcase',\n label: 'Showcase',\n children: {\n itbudget: {\n id: 'showcase-it-budget',\n label: 'IT Budget',\n path: '/showcase/it-budget',\n },\n },\n },\n },\n },\n};\n\n// 根据语言获取翻译\nexport const getTranslations = (language: Language): Translations => {\n return language === 'zh' ? zhTranslations : enTranslations;\n};\n"],"mappings":";AAmCA,IAAa,IAA+B;CAC1C,QAAQ;EACN,QAAQ;EACR,mBAAmB;EACnB,gBAAgB;EAChB,WAAW;CACb;CACA,SAAS,EACP,MAAM;EACJ,MAAM;GACJ,IAAI;GACJ,OAAO;GACP,MAAM;EACR;EACA,YAAY;GACV,IAAI;GACJ,OAAO;GACP,UAAU;IACR,QAAQ;KACN,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,OAAO;KACL,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,aAAa;KACX,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,UAAU;KACR,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,UAAU;KACR,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,YAAY;KACV,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,cAAc;KACZ,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,gBAAgB;KACd,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,UAAU;KACR,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,OAAO;KACL,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,OAAO;KACL,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,UAAU;KACR,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,QAAQ;KACN,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,MAAM;KACJ,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,QAAQ;KACN,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,WAAW;KACT,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,YAAY;KACV,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,OAAO;KACL,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,MAAM;KACJ,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,MAAM;KACJ,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,OAAO;KACL,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,UAAU;KACR,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,MAAM;KACJ,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,cAAc;KACZ,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,MAAM;KACJ,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,OAAO;KACL,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,MAAM;KACJ,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,QAAQ;KACN,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,eAAe;KACb,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,gBAAgB;KACd,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,cAAc;KACZ,IAAI;KACJ,OAAO;KACP,MAAM;IACR;GACF;EACF;EACA,SAAS;GACP,IAAI;GACJ,OAAO;GACP,UAAU;IACR,QAAQ;KAAE,IAAI;KAAU,OAAO;KAAQ,MAAM;IAAkB;IACrD,WAAW;KAAE,IAAI;KAAa,OAAO;KAAS,MAAM;IAAqB;IACnF,WAAW;KAAE,IAAI;KAAa,OAAO;KAAM,MAAM;IAAqB;IACtE,MAAM;KAAE,IAAI;KAAQ,OAAO;KAAM,MAAM;IAAgB;IACvD,MAAM;KAAE,IAAI;KAAQ,OAAO;KAAQ,MAAM;IAAgB;IACzD,OAAO;KAAE,IAAI;KAAS,OAAO;KAAO,MAAM;IAAiB;IAC3D,OAAO;KAAE,IAAI;KAAS,OAAO;KAAM,MAAM;IAAiB;IAC1D,MAAM;KAAE,IAAI;KAAQ,OAAO;KAAQ,MAAM;IAAgB;IACzD,KAAK;KAAE,IAAI;KAAO,OAAO;KAAO,MAAM;IAAe;IACrD,QAAQ;KAAE,IAAI;KAAU,OAAO;KAAO,MAAM;IAAkB;GAChE;EACF;EACA,QAAQ;GACN,IAAI;GACJ,OAAO;GACP,MAAM;GACN,UAAU;IACR;KAAE,IAAI;KAAc,OAAO;KAAO,MAAM;IAAyB;IACjE;KAAE,IAAI;KAAc,OAAO;KAAO,MAAM;IAAyB;IACjE;KAAE,IAAI;KAAa,OAAO;KAAO,MAAM;IAAwB;IAC/D;KAAE,IAAI;KAAa,OAAO;KAAM,MAAM;IAAwB;IAC9D;KAAE,IAAI;KAAiB,OAAO;KAAO,MAAM;IAA4B;IACvE;KAAE,IAAI;KAAe,OAAO;KAAO,MAAM;IAAkC;IAC3E;KAAE,IAAI;KAAiB,OAAO;KAAS,MAAM;IAAoC;IACjF;KAAE,IAAI;KAAiB,OAAO;KAAO,MAAM;IAAoC;IAC/E;KAAE,IAAI;KAAoB,OAAO;KAAQ,MAAM;IAAuC;IACtF;KAAE,IAAI;KAAe,OAAO;KAAO,MAAM;IAAkC;IAC3E;KAAE,IAAI;KAAgB,OAAO;KAAO,MAAM;IAAmC;IAC7E;KAAE,IAAI;KAAiB,OAAO;KAAO,MAAM;IAAoC;IAC/E;KAAE,IAAI;KAAkB,OAAO;KAAS,MAAM;IAAqC;IACnF;KAAE,IAAI;KAAqB,OAAO;KAAQ,MAAM;IAAwC;IACxF;KAAE,IAAI;KAAgB,OAAO;KAAS,MAAM;IAAmC;IAC/E;KAAE,IAAI;KAAiB,OAAO;KAAQ,MAAM;IAAoC;IAChF;KAAE,IAAI;KAAe,OAAO;KAAM,MAAM;IAAkC;IAC1E;KAAE,IAAI;KAAmB,OAAO;KAAQ,MAAM;IAAsC;GACtF;EACF;EACA,UAAU;GACR,IAAI;GACJ,OAAO;GACP,UAAU;IACR,WAAW;KACT,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,mBAAmB;KACjB,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,uBAAuB;KACrB,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,gBAAgB;KACd,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,gBAAgB;KACd,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IAEA,SAAS;KACP,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,gBAAgB;KACd,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,YAAY;KACV,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,gBAAgB;KACd,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,SAAS;KACP,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,cAAc;KACZ,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,gBAAgB;KACd,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,sBAAsB;KACpB,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,MAAM;KACJ,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,WAAW;KACT,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,YAAY;KACV,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,OAAO;KACL,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,gBAAgB;KACd,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,UAAU;KACR,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,mBAAmB;KACjB,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,QAAQ;KACN,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,YAAY;KACV,IAAI;KACJ,OAAO;KACP,MAAM;IACR;GACF;EACF;EACA,UAAU;GACR,IAAI;GACJ,OAAO;GACP,UAAU,EACR,UAAU;IACR,IAAI;IACJ,OAAO;IACP,MAAM;GACR,EACF;EACF;CACF,EACF;AACF,GAGa,IAA+B;CAC1C,QAAQ;EACN,QAAQ;EACR,mBAAmB;EACnB,gBAAgB;EAChB,WAAW;CACb;CACA,SAAS,EACP,MAAM;EACJ,MAAM;GACJ,IAAI;GACJ,OAAO;GACP,MAAM;EACR;EACA,YAAY;GACV,IAAI;GACJ,OAAO;GACP,UAAU;IACR,QAAQ;KACN,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,OAAO;KACL,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,aAAa;KACX,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,UAAU;KACR,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,UAAU;KACR,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,YAAY;KACV,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,cAAc;KACZ,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,gBAAgB;KACd,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,UAAU;KACR,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,OAAO;KACL,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,OAAO;KACL,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,UAAU;KACR,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,QAAQ;KACN,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,MAAM;KACJ,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,QAAQ;KACN,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,WAAW;KACT,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,YAAY;KACV,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,OAAO;KACL,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,MAAM;KACJ,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,MAAM;KACJ,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,OAAO;KACL,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,UAAU;KACR,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,MAAM;KACJ,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,cAAc;KACZ,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,MAAM;KACJ,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,OAAO;KACL,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,MAAM;KACJ,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,QAAQ;KACN,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,eAAe;KACb,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,gBAAgB;KACd,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,cAAc;KACZ,IAAI;KACJ,OAAO;KACP,MAAM;IACR;GACF;EACF;EACA,SAAS;GACP,IAAI;GACJ,OAAO;GACP,UAAU;IACR,QAAQ;KAAE,IAAI;KAAU,OAAO;KAAmB,MAAM;IAAkB;IAChE,WAAW;KAAE,IAAI;KAAa,OAAO;KAAa,MAAM;IAAqB;IACvF,WAAW;KAAE,IAAI;KAAa,OAAO;KAAa,MAAM;IAAqB;IAC7E,MAAM;KAAE,IAAI;KAAQ,OAAO;KAAQ,MAAM;IAAgB;IACzD,MAAM;KAAE,IAAI;KAAQ,OAAO;KAAQ,MAAM;IAAgB;IACzD,OAAO;KAAE,IAAI;KAAS,OAAO;KAAS,MAAM;IAAiB;IAC7D,OAAO;KAAE,IAAI;KAAS,OAAO;KAAS,MAAM;IAAiB;IAC7D,MAAM;KAAE,IAAI;KAAQ,OAAO;KAAe,MAAM;IAAgB;IAChE,KAAK;KAAE,IAAI;KAAO,OAAO;KAAO,MAAM;IAAe;IACrD,QAAQ;KAAE,IAAI;KAAU,OAAO;KAAU,MAAM;IAAkB;GACnE;EACF;EACA,QAAQ;GACN,IAAI;GACJ,OAAO;GACP,MAAM;GACN,UAAU;IACR;KAAE,IAAI;KAAc,OAAO;KAAc,MAAM;IAAyB;IACxE;KAAE,IAAI;KAAc,OAAO;KAAc,MAAM;IAAyB;IACxE;KAAE,IAAI;KAAa,OAAO;KAAa,MAAM;IAAwB;IACrE;KAAE,IAAI;KAAa,OAAO;KAAa,MAAM;IAAwB;IACrE;KAAE,IAAI;KAAiB,OAAO;KAAiB,MAAM;IAA4B;IACjF;KAAE,IAAI;KAAe,OAAO;KAAe,MAAM;IAAkC;IACnF;KAAE,IAAI;KAAiB,OAAO;KAAgB,MAAM;IAAoC;IACxF;KAAE,IAAI;KAAiB,OAAO;KAAW,MAAM;IAAoC;IACnF;KAAE,IAAI;KAAoB,OAAO;KAAuB,MAAM;IAAuC;IACrG;KAAE,IAAI;KAAe,OAAO;KAAe,MAAM;IAAkC;IACnF;KAAE,IAAI;KAAgB,OAAO;KAAkB,MAAM;IAAmC;IACxF;KAAE,IAAI;KAAiB,OAAO;KAAiB,MAAM;IAAoC;IACzF;KAAE,IAAI;KAAkB,OAAO;KAAoB,MAAM;IAAqC;IAC9F;KAAE,IAAI;KAAqB,OAAO;KAAe,MAAM;IAAwC;IAC/F;KAAE,IAAI;KAAgB,OAAO;KAAgB,MAAM;IAAmC;IACtF;KAAE,IAAI;KAAiB,OAAO;KAAW,MAAM;IAAoC;IACnF;KAAE,IAAI;KAAe,OAAO;KAAS,MAAM;IAAkC;IAC7E;KAAE,IAAI;KAAmB,OAAO;KAAa,MAAM;IAAsC;GAC3F;EACF;EACA,UAAU;GACR,IAAI;GACJ,OAAO;GACP,UAAU;IACR,WAAW;KACT,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,mBAAmB;KACjB,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,uBAAuB;KACrB,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,gBAAgB;KACd,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,gBAAgB;KACd,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IAEA,SAAS;KACP,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,gBAAgB;KACd,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,YAAY;KACV,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,gBAAgB;KACd,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,SAAS;KACP,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,cAAc;KACZ,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,gBAAgB;KACd,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,sBAAsB;KACpB,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,MAAM;KACJ,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,WAAW;KACT,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,YAAY;KACV,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,OAAO;KACL,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,gBAAgB;KACd,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,UAAU;KACR,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,mBAAmB;KACjB,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,QAAQ;KACN,IAAI;KACJ,OAAO;KACP,MAAM;IACR;IACA,YAAY;KACV,IAAI;KACJ,OAAO;KACP,MAAM;IACR;GACF;EACF;EACA,UAAU;GACR,IAAI;GACJ,OAAO;GACP,UAAU,EACR,UAAU;IACR,IAAI;IACJ,OAAO;IACP,MAAM;GACR,EACF;EACF;CACF,EACF;AACF,GAGa,KAAmB,MACvB,MAAa,OAAO,IAAiB"}
@@ -14,7 +14,7 @@ var n = (n) => {
14
14
  "datatablehooks",
15
15
  "datatablepivot",
16
16
  "list"
17
- ].includes(t.id) || e.id === "card" && t.id === "cardmetric"));
17
+ ].includes(t.id) || e.id === "card" && ["cardmetric", "card-ticket"].includes(t.id)));
18
18
  t.length && (f.add(e.id), t.forEach((e) => f.add(e.id)), p.set(e.id, {
19
19
  id: `${e.id}-docs`,
20
20
  label: e.label,