sa2kit 1.6.5 → 1.6.6

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 (39) hide show
  1. package/dist/auth/index.d.mts +11 -1
  2. package/dist/auth/index.d.ts +11 -1
  3. package/dist/auth/index.js +9 -0
  4. package/dist/auth/index.js.map +1 -1
  5. package/dist/auth/index.mjs +9 -1
  6. package/dist/auth/index.mjs.map +1 -1
  7. package/dist/calendar/index.d.mts +497 -611
  8. package/dist/calendar/index.d.ts +497 -611
  9. package/dist/calendar/index.js +4104 -4088
  10. package/dist/calendar/index.js.map +1 -1
  11. package/dist/calendar/index.mjs +4092 -4075
  12. package/dist/calendar/index.mjs.map +1 -1
  13. package/dist/calendar/routes/index.js +21 -21
  14. package/dist/calendar/routes/index.mjs +1 -1
  15. package/dist/calendar/server.d.mts +3 -8
  16. package/dist/calendar/server.d.ts +3 -8
  17. package/dist/calendar/server.js +14 -14
  18. package/dist/calendar/server.js.map +1 -1
  19. package/dist/calendar/server.mjs +3 -3
  20. package/dist/calendar/server.mjs.map +1 -1
  21. package/dist/{chunk-OCIJT5VO.mjs → chunk-6WXOA4BE.mjs} +3 -7
  22. package/dist/chunk-6WXOA4BE.mjs.map +1 -0
  23. package/dist/{chunk-FJU3NA6B.js → chunk-AXP7KROR.js} +3 -7
  24. package/dist/chunk-AXP7KROR.js.map +1 -0
  25. package/dist/{chunk-NRYHBGU6.js → chunk-IEA55H3G.js} +5 -5
  26. package/dist/chunk-IEA55H3G.js.map +1 -0
  27. package/dist/{chunk-KFDEOLDH.mjs → chunk-R2F4BXUU.mjs} +5 -5
  28. package/dist/chunk-R2F4BXUU.mjs.map +1 -0
  29. package/dist/index.d.mts +96 -103
  30. package/dist/index.d.ts +96 -103
  31. package/dist/index.js +433 -466
  32. package/dist/index.js.map +1 -1
  33. package/dist/index.mjs +371 -402
  34. package/dist/index.mjs.map +1 -1
  35. package/package.json +1 -1
  36. package/dist/chunk-FJU3NA6B.js.map +0 -1
  37. package/dist/chunk-KFDEOLDH.mjs.map +0 -1
  38. package/dist/chunk-NRYHBGU6.js.map +0 -1
  39. package/dist/chunk-OCIJT5VO.mjs.map +0 -1
package/dist/index.js CHANGED
@@ -1,12 +1,12 @@
1
1
  'use strict';
2
2
 
3
- var chunkNRYHBGU6_js = require('./chunk-NRYHBGU6.js');
3
+ var chunkIEA55H3G_js = require('./chunk-IEA55H3G.js');
4
4
  var chunk7Z5LLJ3A_js = require('./chunk-7Z5LLJ3A.js');
5
5
  var chunkLX4XX6W7_js = require('./chunk-LX4XX6W7.js');
6
6
  require('./chunk-QU5OT4DF.js');
7
7
  var chunk6PRFP5EG_js = require('./chunk-6PRFP5EG.js');
8
8
  require('./chunk-DGUM43GV.js');
9
- var React3 = require('react');
9
+ var React33 = require('react');
10
10
  var tesseract_js = require('tesseract.js');
11
11
  var lucideReact = require('lucide-react');
12
12
  var reactSlot = require('@radix-ui/react-slot');
@@ -23,9 +23,7 @@ var SelectPrimitive = require('@radix-ui/react-select');
23
23
  var SeparatorPrimitive = require('@radix-ui/react-separator');
24
24
  var TooltipPrimitive = require('@radix-ui/react-tooltip');
25
25
  var AvatarPrimitive = require('@radix-ui/react-avatar');
26
- var ReactDOM = require('react-dom');
27
-
28
- function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
26
+ var reactDom = require('react-dom');
29
27
 
30
28
  function _interopNamespace(e) {
31
29
  if (e && e.__esModule) return e;
@@ -45,7 +43,7 @@ function _interopNamespace(e) {
45
43
  return Object.freeze(n);
46
44
  }
47
45
 
48
- var React3__namespace = /*#__PURE__*/_interopNamespace(React3);
46
+ var React33__namespace = /*#__PURE__*/_interopNamespace(React33);
49
47
  var LabelPrimitive__namespace = /*#__PURE__*/_interopNamespace(LabelPrimitive);
50
48
  var TabsPrimitive__namespace = /*#__PURE__*/_interopNamespace(TabsPrimitive);
51
49
  var DialogPrimitive__namespace = /*#__PURE__*/_interopNamespace(DialogPrimitive);
@@ -58,24 +56,23 @@ var SelectPrimitive__namespace = /*#__PURE__*/_interopNamespace(SelectPrimitive)
58
56
  var SeparatorPrimitive__namespace = /*#__PURE__*/_interopNamespace(SeparatorPrimitive);
59
57
  var TooltipPrimitive__namespace = /*#__PURE__*/_interopNamespace(TooltipPrimitive);
60
58
  var AvatarPrimitive__namespace = /*#__PURE__*/_interopNamespace(AvatarPrimitive);
61
- var ReactDOM__default = /*#__PURE__*/_interopDefault(ReactDOM);
62
59
 
63
60
  var useOCR = (options = {}) => {
64
- const [state, setState] = React3.useState({
61
+ const [state, setState] = React33.useState({
65
62
  isProcessing: false,
66
63
  progress: 0,
67
64
  status: "idle",
68
65
  error: null,
69
66
  result: null
70
67
  });
71
- const workerRef = React3.useRef(null);
72
- const cleanup = React3.useCallback(async () => {
68
+ const workerRef = React33.useRef(null);
69
+ const cleanup = React33.useCallback(async () => {
73
70
  if (workerRef.current) {
74
71
  await workerRef.current.terminate();
75
72
  workerRef.current = null;
76
73
  }
77
74
  }, []);
78
- const recognize = React3.useCallback(
75
+ const recognize = React33.useCallback(
79
76
  async (image) => {
80
77
  setState((prev) => ({
81
78
  ...prev,
@@ -134,7 +131,7 @@ var useOCR = (options = {}) => {
134
131
  },
135
132
  [options]
136
133
  );
137
- React3.useEffect(() => {
134
+ React33.useEffect(() => {
138
135
  return () => {
139
136
  cleanup();
140
137
  };
@@ -150,8 +147,8 @@ var OCRScanner = ({
150
147
  className = "",
151
148
  language = "eng"
152
149
  }) => {
153
- const [imagePreview, setImagePreview] = React3.useState(null);
154
- const fileInputRef = React3.useRef(null);
150
+ const [imagePreview, setImagePreview] = React33.useState(null);
151
+ const fileInputRef = React33.useRef(null);
155
152
  const { recognize, isProcessing, progress, status, result, error } = useOCR({
156
153
  language
157
154
  });
@@ -187,43 +184,43 @@ var OCRScanner = ({
187
184
  handleFileChange(mockEvent);
188
185
  }
189
186
  };
190
- return /* @__PURE__ */ React3__namespace.default.createElement(
187
+ return /* @__PURE__ */ React33__namespace.default.createElement(
191
188
  "div",
192
189
  {
193
190
  className: `p-6 border-2 border-dashed rounded-xl transition-all ${isProcessing ? "border-blue-400 bg-blue-50/10" : "border-gray-200 hover:border-blue-400"} ${className}`,
194
191
  onDragOver: handleDragOver,
195
192
  onDrop: handleDrop
196
193
  },
197
- !imagePreview ? /* @__PURE__ */ React3__namespace.default.createElement(
194
+ !imagePreview ? /* @__PURE__ */ React33__namespace.default.createElement(
198
195
  "div",
199
196
  {
200
197
  className: "flex flex-col items-center justify-center cursor-pointer space-y-4",
201
198
  onClick: () => fileInputRef.current?.click()
202
199
  },
203
- /* @__PURE__ */ React3__namespace.default.createElement("div", { className: "p-4 bg-blue-50 rounded-full text-blue-500" }, /* @__PURE__ */ React3__namespace.default.createElement(lucideReact.Upload, { size: 32 })),
204
- /* @__PURE__ */ React3__namespace.default.createElement("div", { className: "text-center" }, /* @__PURE__ */ React3__namespace.default.createElement("p", { className: "text-lg font-medium text-gray-700" }, "\u70B9\u51FB\u6216\u62D6\u62FD\u56FE\u7247\u8FDB\u884C OCR \u8BC6\u522B"), /* @__PURE__ */ React3__namespace.default.createElement("p", { className: "text-sm text-gray-500" }, "\u652F\u6301 JPG, PNG, WebP"))
205
- ) : /* @__PURE__ */ React3__namespace.default.createElement("div", { className: "space-y-4" }, /* @__PURE__ */ React3__namespace.default.createElement("div", { className: "relative group rounded-lg overflow-hidden border border-gray-200" }, /* @__PURE__ */ React3__namespace.default.createElement(
200
+ /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "p-4 bg-blue-50 rounded-full text-blue-500" }, /* @__PURE__ */ React33__namespace.default.createElement(lucideReact.Upload, { size: 32 })),
201
+ /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "text-center" }, /* @__PURE__ */ React33__namespace.default.createElement("p", { className: "text-lg font-medium text-gray-700" }, "\u70B9\u51FB\u6216\u62D6\u62FD\u56FE\u7247\u8FDB\u884C OCR \u8BC6\u522B"), /* @__PURE__ */ React33__namespace.default.createElement("p", { className: "text-sm text-gray-500" }, "\u652F\u6301 JPG, PNG, WebP"))
202
+ ) : /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "space-y-4" }, /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "relative group rounded-lg overflow-hidden border border-gray-200" }, /* @__PURE__ */ React33__namespace.default.createElement(
206
203
  "img",
207
204
  {
208
205
  src: imagePreview,
209
206
  alt: "Preview",
210
207
  className: `max-h-64 mx-auto object-contain transition-opacity ${isProcessing ? "opacity-50" : "opacity-100"}`
211
208
  }
212
- ), !isProcessing && /* @__PURE__ */ React3__namespace.default.createElement(
209
+ ), !isProcessing && /* @__PURE__ */ React33__namespace.default.createElement(
213
210
  "button",
214
211
  {
215
212
  onClick: reset,
216
213
  className: "absolute top-2 right-2 p-1 bg-white/80 rounded-full hover:bg-white text-gray-600 shadow-sm"
217
214
  },
218
- /* @__PURE__ */ React3__namespace.default.createElement(lucideReact.X, { size: 18 })
219
- ), isProcessing && /* @__PURE__ */ React3__namespace.default.createElement("div", { className: "absolute inset-0 flex flex-col items-center justify-center bg-black/5" }, /* @__PURE__ */ React3__namespace.default.createElement(lucideReact.Loader2, { className: "animate-spin text-blue-500 mb-2", size: 32 }), /* @__PURE__ */ React3__namespace.default.createElement("div", { className: "w-48 bg-gray-200 rounded-full h-1.5 overflow-hidden" }, /* @__PURE__ */ React3__namespace.default.createElement(
215
+ /* @__PURE__ */ React33__namespace.default.createElement(lucideReact.X, { size: 18 })
216
+ ), isProcessing && /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "absolute inset-0 flex flex-col items-center justify-center bg-black/5" }, /* @__PURE__ */ React33__namespace.default.createElement(lucideReact.Loader2, { className: "animate-spin text-blue-500 mb-2", size: 32 }), /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "w-48 bg-gray-200 rounded-full h-1.5 overflow-hidden" }, /* @__PURE__ */ React33__namespace.default.createElement(
220
217
  "div",
221
218
  {
222
219
  className: "bg-blue-500 h-full transition-all duration-300",
223
220
  style: { width: `${progress * 100}%` }
224
221
  }
225
- )), /* @__PURE__ */ React3__namespace.default.createElement("p", { className: "text-xs font-medium text-blue-600 mt-2" }, status === "initializing" ? "\u6B63\u5728\u52A0\u8F7D\u5F15\u64CE..." : `\u8BC6\u522B\u4E2D ${Math.round(progress * 100)}%`))), result && !isProcessing && /* @__PURE__ */ React3__namespace.default.createElement("div", { className: "bg-gray-50 p-4 rounded-lg border border-gray-100 animate-in fade-in slide-in-from-bottom-2" }, /* @__PURE__ */ React3__namespace.default.createElement("div", { className: "flex items-center gap-2 mb-2 text-gray-600 font-medium" }, /* @__PURE__ */ React3__namespace.default.createElement(lucideReact.FileText, { size: 18 }), /* @__PURE__ */ React3__namespace.default.createElement("span", null, "\u8BC6\u522B\u7ED3\u679C (\u7F6E\u4FE1\u5EA6: ", Math.round(result.confidence), "%)")), /* @__PURE__ */ React3__namespace.default.createElement("pre", { className: "text-sm text-gray-800 whitespace-pre-wrap font-sans" }, result.text)), error && /* @__PURE__ */ React3__namespace.default.createElement("div", { className: "p-3 bg-red-50 text-red-600 text-sm rounded-lg border border-red-100" }, "\u8BC6\u522B\u5931\u8D25: ", error.message)),
226
- /* @__PURE__ */ React3__namespace.default.createElement(
222
+ )), /* @__PURE__ */ React33__namespace.default.createElement("p", { className: "text-xs font-medium text-blue-600 mt-2" }, status === "initializing" ? "\u6B63\u5728\u52A0\u8F7D\u5F15\u64CE..." : `\u8BC6\u522B\u4E2D ${Math.round(progress * 100)}%`))), result && !isProcessing && /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "bg-gray-50 p-4 rounded-lg border border-gray-100 animate-in fade-in slide-in-from-bottom-2" }, /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "flex items-center gap-2 mb-2 text-gray-600 font-medium" }, /* @__PURE__ */ React33__namespace.default.createElement(lucideReact.FileText, { size: 18 }), /* @__PURE__ */ React33__namespace.default.createElement("span", null, "\u8BC6\u522B\u7ED3\u679C (\u7F6E\u4FE1\u5EA6: ", Math.round(result.confidence), "%)")), /* @__PURE__ */ React33__namespace.default.createElement("pre", { className: "text-sm text-gray-800 whitespace-pre-wrap font-sans" }, result.text)), error && /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "p-3 bg-red-50 text-red-600 text-sm rounded-lg border border-red-100" }, "\u8BC6\u522B\u5931\u8D25: ", error.message)),
223
+ /* @__PURE__ */ React33__namespace.default.createElement(
227
224
  "input",
228
225
  {
229
226
  type: "file",
@@ -237,7 +234,7 @@ var OCRScanner = ({
237
234
  );
238
235
  };
239
236
  var useBackgroundRemoval = (options = {}) => {
240
- const [state, setState] = React3.useState({
237
+ const [state, setState] = React33.useState({
241
238
  isProcessing: false,
242
239
  progress: 0,
243
240
  status: "idle",
@@ -245,7 +242,7 @@ var useBackgroundRemoval = (options = {}) => {
245
242
  resultBlob: null,
246
243
  resultUrl: null
247
244
  });
248
- const remove = React3.useCallback(async (image) => {
245
+ const remove = React33.useCallback(async (image) => {
249
246
  setState((prev) => ({
250
247
  ...prev,
251
248
  isProcessing: true,
@@ -324,12 +321,12 @@ var useBackgroundRemoval = (options = {}) => {
324
321
  throw err;
325
322
  }
326
323
  }, [options]);
327
- const cleanup = React3.useCallback(() => {
324
+ const cleanup = React33.useCallback(() => {
328
325
  if (state.resultUrl) {
329
326
  URL.revokeObjectURL(state.resultUrl);
330
327
  }
331
328
  }, [state.resultUrl]);
332
- React3.useEffect(() => {
329
+ React33.useEffect(() => {
333
330
  return () => cleanup();
334
331
  }, [cleanup]);
335
332
  return {
@@ -342,8 +339,8 @@ var BackgroundRemover = ({
342
339
  onResult,
343
340
  className = ""
344
341
  }) => {
345
- const [imagePreview, setImagePreview] = React3.useState(null);
346
- const fileInputRef = React3.useRef(null);
342
+ const [imagePreview, setImagePreview] = React33.useState(null);
343
+ const fileInputRef = React33.useRef(null);
347
344
  const { remove, isProcessing, progress, status, resultUrl, error } = useBackgroundRemoval();
348
345
  const handleFileChange = async (e) => {
349
346
  const file = e.target.files?.[0];
@@ -371,37 +368,37 @@ var BackgroundRemover = ({
371
368
  a.download = "removed_background.png";
372
369
  a.click();
373
370
  };
374
- return /* @__PURE__ */ React3__namespace.default.createElement("div", { className: `p-6 border-2 border-dashed rounded-xl transition-all ${isProcessing ? "border-purple-400 bg-purple-50/10" : "border-gray-200 hover:border-purple-400"} ${className}` }, !imagePreview ? /* @__PURE__ */ React3__namespace.default.createElement(
371
+ return /* @__PURE__ */ React33__namespace.default.createElement("div", { className: `p-6 border-2 border-dashed rounded-xl transition-all ${isProcessing ? "border-purple-400 bg-purple-50/10" : "border-gray-200 hover:border-purple-400"} ${className}` }, !imagePreview ? /* @__PURE__ */ React33__namespace.default.createElement(
375
372
  "div",
376
373
  {
377
374
  className: "flex flex-col items-center justify-center cursor-pointer space-y-4",
378
375
  onClick: () => fileInputRef.current?.click()
379
376
  },
380
- /* @__PURE__ */ React3__namespace.default.createElement("div", { className: "p-4 bg-purple-50 rounded-full text-purple-500" }, /* @__PURE__ */ React3__namespace.default.createElement(lucideReact.Eraser, { size: 32 })),
381
- /* @__PURE__ */ React3__namespace.default.createElement("div", { className: "text-center" }, /* @__PURE__ */ React3__namespace.default.createElement("p", { className: "text-lg font-medium text-gray-700" }, "\u4E0A\u4F20\u56FE\u7247\u79FB\u9664\u80CC\u666F"), /* @__PURE__ */ React3__namespace.default.createElement("p", { className: "text-sm text-gray-500" }, "\u5EFA\u8BAE\u4F7F\u7528\u4E3B\u4F53\u660E\u786E\u7684\u56FE\u7247"))
382
- ) : /* @__PURE__ */ React3__namespace.default.createElement("div", { className: "space-y-4" }, /* @__PURE__ */ React3__namespace.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-4" }, /* @__PURE__ */ React3__namespace.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React3__namespace.default.createElement("p", { className: "text-xs font-medium text-gray-500 uppercase tracking-wider" }, "\u539F\u56FE"), /* @__PURE__ */ React3__namespace.default.createElement("div", { className: "relative rounded-lg overflow-hidden border border-gray-200 bg-gray-50" }, /* @__PURE__ */ React3__namespace.default.createElement("img", { src: imagePreview, alt: "Original", className: "max-h-64 mx-auto object-contain" }))), /* @__PURE__ */ React3__namespace.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React3__namespace.default.createElement("p", { className: "text-xs font-medium text-gray-500 uppercase tracking-wider" }, "\u5904\u7406\u7ED3\u679C"), /* @__PURE__ */ React3__namespace.default.createElement("div", { className: "relative rounded-lg overflow-hidden border border-gray-200 bg-grid-slate-100 bg-[size:20px_20px]" }, resultUrl ? /* @__PURE__ */ React3__namespace.default.createElement("img", { src: resultUrl, alt: "Result", className: "max-h-64 mx-auto object-contain animate-in fade-in zoom-in-95 duration-500" }) : /* @__PURE__ */ React3__namespace.default.createElement("div", { className: "h-64 flex flex-col items-center justify-center text-gray-400" }, isProcessing ? /* @__PURE__ */ React3__namespace.default.createElement(React3__namespace.default.Fragment, null, /* @__PURE__ */ React3__namespace.default.createElement(lucideReact.Loader2, { className: "animate-spin text-purple-500 mb-2", size: 32 }), /* @__PURE__ */ React3__namespace.default.createElement("div", { className: "w-32 bg-gray-200 rounded-full h-1.5 overflow-hidden" }, /* @__PURE__ */ React3__namespace.default.createElement(
377
+ /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "p-4 bg-purple-50 rounded-full text-purple-500" }, /* @__PURE__ */ React33__namespace.default.createElement(lucideReact.Eraser, { size: 32 })),
378
+ /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "text-center" }, /* @__PURE__ */ React33__namespace.default.createElement("p", { className: "text-lg font-medium text-gray-700" }, "\u4E0A\u4F20\u56FE\u7247\u79FB\u9664\u80CC\u666F"), /* @__PURE__ */ React33__namespace.default.createElement("p", { className: "text-sm text-gray-500" }, "\u5EFA\u8BAE\u4F7F\u7528\u4E3B\u4F53\u660E\u786E\u7684\u56FE\u7247"))
379
+ ) : /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "space-y-4" }, /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-4" }, /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React33__namespace.default.createElement("p", { className: "text-xs font-medium text-gray-500 uppercase tracking-wider" }, "\u539F\u56FE"), /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "relative rounded-lg overflow-hidden border border-gray-200 bg-gray-50" }, /* @__PURE__ */ React33__namespace.default.createElement("img", { src: imagePreview, alt: "Original", className: "max-h-64 mx-auto object-contain" }))), /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React33__namespace.default.createElement("p", { className: "text-xs font-medium text-gray-500 uppercase tracking-wider" }, "\u5904\u7406\u7ED3\u679C"), /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "relative rounded-lg overflow-hidden border border-gray-200 bg-grid-slate-100 bg-[size:20px_20px]" }, resultUrl ? /* @__PURE__ */ React33__namespace.default.createElement("img", { src: resultUrl, alt: "Result", className: "max-h-64 mx-auto object-contain animate-in fade-in zoom-in-95 duration-500" }) : /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "h-64 flex flex-col items-center justify-center text-gray-400" }, isProcessing ? /* @__PURE__ */ React33__namespace.default.createElement(React33__namespace.default.Fragment, null, /* @__PURE__ */ React33__namespace.default.createElement(lucideReact.Loader2, { className: "animate-spin text-purple-500 mb-2", size: 32 }), /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "w-32 bg-gray-200 rounded-full h-1.5 overflow-hidden" }, /* @__PURE__ */ React33__namespace.default.createElement(
383
380
  "div",
384
381
  {
385
382
  className: "bg-purple-500 h-full transition-all duration-300",
386
383
  style: { width: `${progress * 100}%` }
387
384
  }
388
- )), /* @__PURE__ */ React3__namespace.default.createElement("p", { className: "text-[10px] mt-2 font-mono uppercase" }, status.replace(/-/g, " "))) : /* @__PURE__ */ React3__namespace.default.createElement("span", { className: "text-sm italic" }, "\u7B49\u5F85\u5904\u7406..."))))), /* @__PURE__ */ React3__namespace.default.createElement("div", { className: "flex justify-between items-center pt-2" }, !isProcessing && /* @__PURE__ */ React3__namespace.default.createElement(
385
+ )), /* @__PURE__ */ React33__namespace.default.createElement("p", { className: "text-[10px] mt-2 font-mono uppercase" }, status.replace(/-/g, " "))) : /* @__PURE__ */ React33__namespace.default.createElement("span", { className: "text-sm italic" }, "\u7B49\u5F85\u5904\u7406..."))))), /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "flex justify-between items-center pt-2" }, !isProcessing && /* @__PURE__ */ React33__namespace.default.createElement(
389
386
  "button",
390
387
  {
391
388
  onClick: reset,
392
389
  className: "flex items-center gap-2 px-4 py-2 text-sm font-medium text-gray-600 hover:text-gray-900 transition-colors"
393
390
  },
394
- /* @__PURE__ */ React3__namespace.default.createElement(lucideReact.X, { size: 16 }),
391
+ /* @__PURE__ */ React33__namespace.default.createElement(lucideReact.X, { size: 16 }),
395
392
  "\u91CD\u65B0\u5F00\u59CB"
396
- ), resultUrl && !isProcessing && /* @__PURE__ */ React3__namespace.default.createElement(
393
+ ), resultUrl && !isProcessing && /* @__PURE__ */ React33__namespace.default.createElement(
397
394
  "button",
398
395
  {
399
396
  onClick: downloadResult,
400
397
  className: "flex items-center gap-2 px-6 py-2 bg-purple-600 hover:bg-purple-700 text-white rounded-lg shadow-sm transition-all"
401
398
  },
402
- /* @__PURE__ */ React3__namespace.default.createElement(lucideReact.Download, { size: 16 }),
399
+ /* @__PURE__ */ React33__namespace.default.createElement(lucideReact.Download, { size: 16 }),
403
400
  "\u4E0B\u8F7D PNG"
404
- )), error && /* @__PURE__ */ React3__namespace.default.createElement("div", { className: "p-3 bg-red-50 text-red-600 text-sm rounded-lg border border-red-100" }, "\u5904\u7406\u5931\u8D25: ", error.message)), /* @__PURE__ */ React3__namespace.default.createElement(
401
+ )), error && /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "p-3 bg-red-50 text-red-600 text-sm rounded-lg border border-red-100" }, "\u5904\u7406\u5931\u8D25: ", error.message)), /* @__PURE__ */ React33__namespace.default.createElement(
405
402
  "input",
406
403
  {
407
404
  type: "file",
@@ -414,14 +411,14 @@ var BackgroundRemover = ({
414
411
  ));
415
412
  };
416
413
  var useSentimentAnalysis = (options = {}) => {
417
- const [state, setState] = React3.useState({
414
+ const [state, setState] = React33.useState({
418
415
  isProcessing: false,
419
416
  status: "idle",
420
417
  error: null,
421
418
  result: null
422
419
  });
423
- const pipelineRef = React3.useRef(null);
424
- const analyze = React3.useCallback(async (text) => {
420
+ const pipelineRef = React33.useRef(null);
421
+ const analyze = React33.useCallback(async (text) => {
425
422
  setState((prev) => ({
426
423
  ...prev,
427
424
  isProcessing: true,
@@ -505,7 +502,7 @@ var SentimentAnalyzer = ({
505
502
  className = "",
506
503
  placeholder = "\u8F93\u5165\u4E00\u6BB5\u4E2D\u6587\u6216\u82F1\u6587\uFF0C\u5206\u6790\u5176\u60C5\u611F\u503E\u5411..."
507
504
  }) => {
508
- const [text, setText] = React3.useState("");
505
+ const [text, setText] = React33.useState("");
509
506
  const { analyze, isProcessing, status, result, error } = useSentimentAnalysis();
510
507
  const handleAnalyze = async () => {
511
508
  if (!text.trim() || isProcessing) return;
@@ -520,11 +517,11 @@ var SentimentAnalyzer = ({
520
517
  if (!result) return null;
521
518
  switch (result.sentiment) {
522
519
  case "positive":
523
- return /* @__PURE__ */ React3__namespace.default.createElement(lucideReact.Smile, { className: "text-green-500", size: 24 });
520
+ return /* @__PURE__ */ React33__namespace.default.createElement(lucideReact.Smile, { className: "text-green-500", size: 24 });
524
521
  case "negative":
525
- return /* @__PURE__ */ React3__namespace.default.createElement(lucideReact.Frown, { className: "text-red-500", size: 24 });
522
+ return /* @__PURE__ */ React33__namespace.default.createElement(lucideReact.Frown, { className: "text-red-500", size: 24 });
526
523
  default:
527
- return /* @__PURE__ */ React3__namespace.default.createElement(lucideReact.Meh, { className: "text-yellow-500", size: 24 });
524
+ return /* @__PURE__ */ React33__namespace.default.createElement(lucideReact.Meh, { className: "text-yellow-500", size: 24 });
528
525
  }
529
526
  };
530
527
  const getSentimentColor = () => {
@@ -538,7 +535,7 @@ var SentimentAnalyzer = ({
538
535
  return "bg-yellow-50 border-yellow-200 text-yellow-700";
539
536
  }
540
537
  };
541
- return /* @__PURE__ */ React3__namespace.default.createElement("div", { className: `p-6 border rounded-xl bg-white dark:bg-gray-800 shadow-sm ${className}` }, /* @__PURE__ */ React3__namespace.default.createElement("div", { className: "flex items-center gap-2 mb-4 text-gray-700 dark:text-gray-300 font-medium" }, /* @__PURE__ */ React3__namespace.default.createElement(lucideReact.MessageSquare, { size: 20 }), /* @__PURE__ */ React3__namespace.default.createElement("span", null, "\u6587\u672C\u60C5\u611F\u5206\u6790")), /* @__PURE__ */ React3__namespace.default.createElement("div", { className: "relative" }, /* @__PURE__ */ React3__namespace.default.createElement(
538
+ return /* @__PURE__ */ React33__namespace.default.createElement("div", { className: `p-6 border rounded-xl bg-white dark:bg-gray-800 shadow-sm ${className}` }, /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "flex items-center gap-2 mb-4 text-gray-700 dark:text-gray-300 font-medium" }, /* @__PURE__ */ React33__namespace.default.createElement(lucideReact.MessageSquare, { size: 20 }), /* @__PURE__ */ React33__namespace.default.createElement("span", null, "\u6587\u672C\u60C5\u611F\u5206\u6790")), /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "relative" }, /* @__PURE__ */ React33__namespace.default.createElement(
542
539
  "textarea",
543
540
  {
544
541
  value: text,
@@ -547,25 +544,25 @@ var SentimentAnalyzer = ({
547
544
  className: "w-full h-32 p-4 bg-gray-50 dark:bg-gray-900 border border-gray-200 dark:border-gray-700 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-transparent transition-all outline-none resize-none text-gray-800 dark:text-gray-200",
548
545
  disabled: isProcessing
549
546
  }
550
- ), /* @__PURE__ */ React3__namespace.default.createElement(
547
+ ), /* @__PURE__ */ React33__namespace.default.createElement(
551
548
  "button",
552
549
  {
553
550
  onClick: handleAnalyze,
554
551
  disabled: !text.trim() || isProcessing,
555
552
  className: "absolute bottom-3 right-3 p-2 bg-blue-600 hover:bg-blue-700 disabled:bg-gray-400 text-white rounded-md transition-colors shadow-sm"
556
553
  },
557
- isProcessing ? /* @__PURE__ */ React3__namespace.default.createElement(lucideReact.Loader2, { className: "animate-spin", size: 18 }) : /* @__PURE__ */ React3__namespace.default.createElement(lucideReact.Send, { size: 18 })
558
- )), isProcessing && /* @__PURE__ */ React3__namespace.default.createElement("div", { className: "mt-4 flex items-center gap-2 text-sm text-blue-600 animate-pulse" }, /* @__PURE__ */ React3__namespace.default.createElement(lucideReact.Loader2, { size: 14, className: "animate-spin" }), /* @__PURE__ */ React3__namespace.default.createElement("span", null, "\u6B63\u5728\u5206\u6790 (\u9996\u6B21\u8FD0\u884C\u5C06\u52A0\u8F7D\u6A21\u578B\u8D44\u6E90)...")), result && !isProcessing && /* @__PURE__ */ React3__namespace.default.createElement("div", { className: `mt-4 p-4 border rounded-lg flex items-center gap-4 animate-in fade-in slide-in-from-top-2 ${getSentimentColor()}` }, /* @__PURE__ */ React3__namespace.default.createElement("div", { className: "p-2 bg-white rounded-full shadow-sm" }, getSentimentIcon()), /* @__PURE__ */ React3__namespace.default.createElement("div", null, /* @__PURE__ */ React3__namespace.default.createElement("p", { className: "font-bold text-lg capitalize" }, result.sentiment), /* @__PURE__ */ React3__namespace.default.createElement("p", { className: "text-sm opacity-80" }, "\u7F6E\u4FE1\u5EA6: ", (result.score * 100).toFixed(1), "% (", result.label, ")"))), error && /* @__PURE__ */ React3__namespace.default.createElement("div", { className: "mt-4 p-3 bg-red-50 text-red-600 text-sm rounded-lg border border-red-100" }, "\u5206\u6790\u5931\u8D25: ", error.message));
554
+ isProcessing ? /* @__PURE__ */ React33__namespace.default.createElement(lucideReact.Loader2, { className: "animate-spin", size: 18 }) : /* @__PURE__ */ React33__namespace.default.createElement(lucideReact.Send, { size: 18 })
555
+ )), isProcessing && /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "mt-4 flex items-center gap-2 text-sm text-blue-600 animate-pulse" }, /* @__PURE__ */ React33__namespace.default.createElement(lucideReact.Loader2, { size: 14, className: "animate-spin" }), /* @__PURE__ */ React33__namespace.default.createElement("span", null, "\u6B63\u5728\u5206\u6790 (\u9996\u6B21\u8FD0\u884C\u5C06\u52A0\u8F7D\u6A21\u578B\u8D44\u6E90)...")), result && !isProcessing && /* @__PURE__ */ React33__namespace.default.createElement("div", { className: `mt-4 p-4 border rounded-lg flex items-center gap-4 animate-in fade-in slide-in-from-top-2 ${getSentimentColor()}` }, /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "p-2 bg-white rounded-full shadow-sm" }, getSentimentIcon()), /* @__PURE__ */ React33__namespace.default.createElement("div", null, /* @__PURE__ */ React33__namespace.default.createElement("p", { className: "font-bold text-lg capitalize" }, result.sentiment), /* @__PURE__ */ React33__namespace.default.createElement("p", { className: "text-sm opacity-80" }, "\u7F6E\u4FE1\u5EA6: ", (result.score * 100).toFixed(1), "% (", result.label, ")"))), error && /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "mt-4 p-3 bg-red-50 text-red-600 text-sm rounded-lg border border-red-100" }, "\u5206\u6790\u5931\u8D25: ", error.message));
559
556
  };
560
557
  var useTextGeneration = (options = {}) => {
561
- const [state, setState] = React3.useState({
558
+ const [state, setState] = React33.useState({
562
559
  isProcessing: false,
563
560
  status: "idle",
564
561
  error: null,
565
562
  result: null
566
563
  });
567
- const pipelineRef = React3.useRef(null);
568
- const generate = React3.useCallback(async (prompt) => {
564
+ const pipelineRef = React33.useRef(null);
565
+ const generate = React33.useCallback(async (prompt) => {
569
566
  console.log("[AI] Generating for prompt:", prompt);
570
567
  setState((prev) => ({
571
568
  ...prev,
@@ -647,11 +644,11 @@ var useTextGeneration = (options = {}) => {
647
644
  return { ...state, generate };
648
645
  };
649
646
  var SmartAssistant = ({ className = "" }) => {
650
- const [input, setInput] = React3.useState("");
651
- const [chatHistory, setChatHistory] = React3.useState([]);
652
- const scrollRef = React3.useRef(null);
647
+ const [input, setInput] = React33.useState("");
648
+ const [chatHistory, setChatHistory] = React33.useState([]);
649
+ const scrollRef = React33.useRef(null);
653
650
  const { generate, isProcessing: isGenerating, status: genStatus } = useTextGeneration();
654
- React3.useEffect(() => {
651
+ React33.useEffect(() => {
655
652
  if (scrollRef.current) {
656
653
  scrollRef.current.scrollTop = scrollRef.current.scrollHeight;
657
654
  }
@@ -695,7 +692,7 @@ AI\u56DE\u5E94\uFF1A\u201C`;
695
692
  setChatHistory((prev) => [...prev, { role: "assistant", content: "\uFF08\u672C\u5730\u6A21\u578B\u601D\u8003\u8FC7\u5EA6\uFF0C\u6682\u65F6\u4F11\u606F\u4E2D...\uFF09" }]);
696
693
  }
697
694
  };
698
- return /* @__PURE__ */ React3__namespace.default.createElement("div", { className: `flex flex-col h-[500px] bg-white dark:bg-gray-800 rounded-xl shadow-inner border border-gray-100 dark:border-gray-700 overflow-hidden ${className}` }, /* @__PURE__ */ React3__namespace.default.createElement("div", { ref: scrollRef, className: "flex-1 overflow-y-auto p-4 space-y-4 bg-gray-50/50 dark:bg-gray-900/50" }, chatHistory.length === 0 && /* @__PURE__ */ React3__namespace.default.createElement("div", { className: "h-full flex flex-col items-center justify-center text-gray-400 space-y-2" }, /* @__PURE__ */ React3__namespace.default.createElement(lucideReact.Bot, { size: 48, className: "opacity-20" }), /* @__PURE__ */ React3__namespace.default.createElement("p", { className: "text-sm italic text-center px-8 text-gray-400 font-sans" }, "\u4F60\u597D\uFF01\u6211\u662F 100% \u672C\u5730\u8FD0\u884C\u7684 AI\u3002", /* @__PURE__ */ React3__namespace.default.createElement("br", null), "\u4F60\u53EF\u4EE5\u548C\u6211\u804A\u804A\u5929\uFF0C\u6211\u4F1A\u5C1D\u8BD5\u7406\u89E3\u4F60\u7684\u610F\u601D\u3002")), chatHistory.map((msg, i) => /* @__PURE__ */ React3__namespace.default.createElement("div", { key: i, className: `flex ${msg.role === "user" ? "justify-end" : "justify-start"} animate-in fade-in slide-in-from-bottom-2` }, /* @__PURE__ */ React3__namespace.default.createElement("div", { className: `flex gap-3 max-w-[85%] ${msg.role === "user" ? "flex-row-reverse" : ""}` }, /* @__PURE__ */ React3__namespace.default.createElement("div", { className: `p-2 rounded-lg h-fit ${msg.role === "user" ? "bg-blue-100 text-blue-600" : "bg-white dark:bg-gray-700 shadow-sm border border-gray-100 dark:border-gray-600 text-gray-400"}` }, msg.role === "user" ? /* @__PURE__ */ React3__namespace.default.createElement(lucideReact.User, { size: 18 }) : /* @__PURE__ */ React3__namespace.default.createElement(lucideReact.Bot, { size: 18 })), /* @__PURE__ */ React3__namespace.default.createElement("div", { className: `p-3 rounded-2xl shadow-sm text-sm ${msg.role === "user" ? "bg-blue-600 text-white rounded-tr-none" : "bg-white dark:bg-gray-700 text-gray-800 dark:text-gray-200 rounded-tl-none border border-gray-100 dark:border-gray-600 leading-relaxed"}` }, msg.content)))), isGenerating && /* @__PURE__ */ React3__namespace.default.createElement("div", { className: "flex justify-start" }, /* @__PURE__ */ React3__namespace.default.createElement("div", { className: "flex gap-3 items-center bg-white dark:bg-gray-700 p-3 rounded-2xl rounded-tl-none border border-gray-100 dark:border-gray-600" }, /* @__PURE__ */ React3__namespace.default.createElement(lucideReact.Loader2, { className: "animate-spin text-blue-500", size: 16 }), /* @__PURE__ */ React3__namespace.default.createElement("div", { className: "flex flex-col" }, /* @__PURE__ */ React3__namespace.default.createElement("span", { className: "text-xs text-gray-500 font-medium" }, "\u601D\u8003\u4E2D..."), /* @__PURE__ */ React3__namespace.default.createElement("span", { className: "text-[10px] text-blue-400 font-mono tracking-tighter" }, genStatus))))), /* @__PURE__ */ React3__namespace.default.createElement("div", { className: "p-4 bg-white dark:bg-gray-800 border-t border-gray-100 dark:border-gray-700" }, /* @__PURE__ */ React3__namespace.default.createElement("div", { className: "relative flex items-center gap-2" }, /* @__PURE__ */ React3__namespace.default.createElement(
695
+ return /* @__PURE__ */ React33__namespace.default.createElement("div", { className: `flex flex-col h-[500px] bg-white dark:bg-gray-800 rounded-xl shadow-inner border border-gray-100 dark:border-gray-700 overflow-hidden ${className}` }, /* @__PURE__ */ React33__namespace.default.createElement("div", { ref: scrollRef, className: "flex-1 overflow-y-auto p-4 space-y-4 bg-gray-50/50 dark:bg-gray-900/50" }, chatHistory.length === 0 && /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "h-full flex flex-col items-center justify-center text-gray-400 space-y-2" }, /* @__PURE__ */ React33__namespace.default.createElement(lucideReact.Bot, { size: 48, className: "opacity-20" }), /* @__PURE__ */ React33__namespace.default.createElement("p", { className: "text-sm italic text-center px-8 text-gray-400 font-sans" }, "\u4F60\u597D\uFF01\u6211\u662F 100% \u672C\u5730\u8FD0\u884C\u7684 AI\u3002", /* @__PURE__ */ React33__namespace.default.createElement("br", null), "\u4F60\u53EF\u4EE5\u548C\u6211\u804A\u804A\u5929\uFF0C\u6211\u4F1A\u5C1D\u8BD5\u7406\u89E3\u4F60\u7684\u610F\u601D\u3002")), chatHistory.map((msg, i) => /* @__PURE__ */ React33__namespace.default.createElement("div", { key: i, className: `flex ${msg.role === "user" ? "justify-end" : "justify-start"} animate-in fade-in slide-in-from-bottom-2` }, /* @__PURE__ */ React33__namespace.default.createElement("div", { className: `flex gap-3 max-w-[85%] ${msg.role === "user" ? "flex-row-reverse" : ""}` }, /* @__PURE__ */ React33__namespace.default.createElement("div", { className: `p-2 rounded-lg h-fit ${msg.role === "user" ? "bg-blue-100 text-blue-600" : "bg-white dark:bg-gray-700 shadow-sm border border-gray-100 dark:border-gray-600 text-gray-400"}` }, msg.role === "user" ? /* @__PURE__ */ React33__namespace.default.createElement(lucideReact.User, { size: 18 }) : /* @__PURE__ */ React33__namespace.default.createElement(lucideReact.Bot, { size: 18 })), /* @__PURE__ */ React33__namespace.default.createElement("div", { className: `p-3 rounded-2xl shadow-sm text-sm ${msg.role === "user" ? "bg-blue-600 text-white rounded-tr-none" : "bg-white dark:bg-gray-700 text-gray-800 dark:text-gray-200 rounded-tl-none border border-gray-100 dark:border-gray-600 leading-relaxed"}` }, msg.content)))), isGenerating && /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "flex justify-start" }, /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "flex gap-3 items-center bg-white dark:bg-gray-700 p-3 rounded-2xl rounded-tl-none border border-gray-100 dark:border-gray-600" }, /* @__PURE__ */ React33__namespace.default.createElement(lucideReact.Loader2, { className: "animate-spin text-blue-500", size: 16 }), /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "flex flex-col" }, /* @__PURE__ */ React33__namespace.default.createElement("span", { className: "text-xs text-gray-500 font-medium" }, "\u601D\u8003\u4E2D..."), /* @__PURE__ */ React33__namespace.default.createElement("span", { className: "text-[10px] text-blue-400 font-mono tracking-tighter" }, genStatus))))), /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "p-4 bg-white dark:bg-gray-800 border-t border-gray-100 dark:border-gray-700" }, /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "relative flex items-center gap-2" }, /* @__PURE__ */ React33__namespace.default.createElement(
699
696
  "input",
700
697
  {
701
698
  type: "text",
@@ -706,14 +703,14 @@ AI\u56DE\u5E94\uFF1A\u201C`;
706
703
  className: "flex-1 bg-gray-50 dark:bg-gray-900 border-none rounded-full px-5 py-3 pr-12 text-sm focus:ring-2 focus:ring-blue-500 outline-none dark:text-white text-gray-800",
707
704
  disabled: isGenerating
708
705
  }
709
- ), /* @__PURE__ */ React3__namespace.default.createElement(
706
+ ), /* @__PURE__ */ React33__namespace.default.createElement(
710
707
  "button",
711
708
  {
712
709
  onClick: handleSend,
713
710
  disabled: !input.trim() || isGenerating,
714
711
  className: "absolute right-1 p-2.5 bg-blue-600 hover:bg-blue-700 disabled:bg-gray-400 text-white rounded-full transition-all shadow-md active:scale-95 flex items-center justify-center"
715
712
  },
716
- /* @__PURE__ */ React3__namespace.default.createElement(lucideReact.Send, { size: 18 })
713
+ /* @__PURE__ */ React33__namespace.default.createElement(lucideReact.Send, { size: 18 })
717
714
  ))));
718
715
  };
719
716
  var buttonVariants = classVarianceAuthority.cva(
@@ -741,10 +738,10 @@ var buttonVariants = classVarianceAuthority.cva(
741
738
  }
742
739
  }
743
740
  );
744
- var Button = React3__namespace.forwardRef(
741
+ var Button = React33__namespace.forwardRef(
745
742
  ({ className, variant, size, asChild = false, ...props }, ref) => {
746
743
  const Comp = asChild ? reactSlot.Slot : "button";
747
- return /* @__PURE__ */ React3__namespace.createElement(
744
+ return /* @__PURE__ */ React33__namespace.createElement(
748
745
  Comp,
749
746
  {
750
747
  className: chunk7Z5LLJ3A_js.cn(buttonVariants({ variant, size, className })),
@@ -755,7 +752,7 @@ var Button = React3__namespace.forwardRef(
755
752
  }
756
753
  );
757
754
  Button.displayName = "Button";
758
- var Card = React3__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React3__namespace.createElement(
755
+ var Card = React33__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
759
756
  "div",
760
757
  {
761
758
  ref,
@@ -767,7 +764,7 @@ var Card = React3__namespace.forwardRef(({ className, ...props }, ref) => /* @__
767
764
  }
768
765
  ));
769
766
  Card.displayName = "Card";
770
- var CardHeader = React3__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React3__namespace.createElement(
767
+ var CardHeader = React33__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
771
768
  "div",
772
769
  {
773
770
  ref,
@@ -776,7 +773,7 @@ var CardHeader = React3__namespace.forwardRef(({ className, ...props }, ref) =>
776
773
  }
777
774
  ));
778
775
  CardHeader.displayName = "CardHeader";
779
- var CardTitle = React3__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React3__namespace.createElement(
776
+ var CardTitle = React33__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
780
777
  "div",
781
778
  {
782
779
  ref,
@@ -785,7 +782,7 @@ var CardTitle = React3__namespace.forwardRef(({ className, ...props }, ref) => /
785
782
  }
786
783
  ));
787
784
  CardTitle.displayName = "CardTitle";
788
- var CardDescription = React3__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React3__namespace.createElement(
785
+ var CardDescription = React33__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
789
786
  "div",
790
787
  {
791
788
  ref,
@@ -794,9 +791,9 @@ var CardDescription = React3__namespace.forwardRef(({ className, ...props }, ref
794
791
  }
795
792
  ));
796
793
  CardDescription.displayName = "CardDescription";
797
- var CardContent = React3__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React3__namespace.createElement("div", { ref, className: chunk7Z5LLJ3A_js.cn("p-6 pt-0", className), ...props }));
794
+ var CardContent = React33__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement("div", { ref, className: chunk7Z5LLJ3A_js.cn("p-6 pt-0", className), ...props }));
798
795
  CardContent.displayName = "CardContent";
799
- var CardFooter = React3__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React3__namespace.createElement(
796
+ var CardFooter = React33__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
800
797
  "div",
801
798
  {
802
799
  ref,
@@ -822,11 +819,11 @@ var badgeVariants = classVarianceAuthority.cva(
822
819
  }
823
820
  );
824
821
  function Badge({ className, variant, ...props }) {
825
- return /* @__PURE__ */ React3__namespace.createElement("div", { className: chunk7Z5LLJ3A_js.cn(badgeVariants({ variant }), className), ...props });
822
+ return /* @__PURE__ */ React33__namespace.createElement("div", { className: chunk7Z5LLJ3A_js.cn(badgeVariants({ variant }), className), ...props });
826
823
  }
827
- var Input = React3__namespace.forwardRef(
824
+ var Input = React33__namespace.forwardRef(
828
825
  ({ className, type, ...props }, ref) => {
829
- return /* @__PURE__ */ React3__namespace.createElement(
826
+ return /* @__PURE__ */ React33__namespace.createElement(
830
827
  "input",
831
828
  {
832
829
  type,
@@ -844,7 +841,7 @@ Input.displayName = "Input";
844
841
  var labelVariants = classVarianceAuthority.cva(
845
842
  "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
846
843
  );
847
- var Label = React3__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React3__namespace.createElement(
844
+ var Label = React33__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
848
845
  LabelPrimitive__namespace.Root,
849
846
  {
850
847
  ref,
@@ -854,7 +851,7 @@ var Label = React3__namespace.forwardRef(({ className, ...props }, ref) => /* @_
854
851
  ));
855
852
  Label.displayName = LabelPrimitive__namespace.Root.displayName;
856
853
  var Tabs = TabsPrimitive__namespace.Root;
857
- var TabsList = React3__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React3__namespace.createElement(
854
+ var TabsList = React33__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
858
855
  TabsPrimitive__namespace.List,
859
856
  {
860
857
  ref,
@@ -866,7 +863,7 @@ var TabsList = React3__namespace.forwardRef(({ className, ...props }, ref) => /*
866
863
  }
867
864
  ));
868
865
  TabsList.displayName = TabsPrimitive__namespace.List.displayName;
869
- var TabsTrigger = React3__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React3__namespace.createElement(
866
+ var TabsTrigger = React33__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
870
867
  TabsPrimitive__namespace.Trigger,
871
868
  {
872
869
  ref,
@@ -878,7 +875,7 @@ var TabsTrigger = React3__namespace.forwardRef(({ className, ...props }, ref) =>
878
875
  }
879
876
  ));
880
877
  TabsTrigger.displayName = TabsPrimitive__namespace.Trigger.displayName;
881
- var TabsContent = React3__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React3__namespace.createElement(
878
+ var TabsContent = React33__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
882
879
  TabsPrimitive__namespace.Content,
883
880
  {
884
881
  ref,
@@ -894,7 +891,7 @@ var Dialog = DialogPrimitive__namespace.Root;
894
891
  var DialogTrigger = DialogPrimitive__namespace.Trigger;
895
892
  var DialogPortal = DialogPrimitive__namespace.Portal;
896
893
  var DialogClose = DialogPrimitive__namespace.Close;
897
- var DialogOverlay = React3__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React3__namespace.createElement(
894
+ var DialogOverlay = React33__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
898
895
  DialogPrimitive__namespace.Overlay,
899
896
  {
900
897
  ref,
@@ -906,7 +903,7 @@ var DialogOverlay = React3__namespace.forwardRef(({ className, ...props }, ref)
906
903
  }
907
904
  ));
908
905
  DialogOverlay.displayName = DialogPrimitive__namespace.Overlay.displayName;
909
- var DialogContent = React3__namespace.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ React3__namespace.createElement(DialogPortal, null, /* @__PURE__ */ React3__namespace.createElement(DialogOverlay, null), /* @__PURE__ */ React3__namespace.createElement(
906
+ var DialogContent = React33__namespace.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(DialogPortal, null, /* @__PURE__ */ React33__namespace.createElement(DialogOverlay, null), /* @__PURE__ */ React33__namespace.createElement(
910
907
  DialogPrimitive__namespace.Content,
911
908
  {
912
909
  ref,
@@ -917,13 +914,13 @@ var DialogContent = React3__namespace.forwardRef(({ className, children, ...prop
917
914
  ...props
918
915
  },
919
916
  children,
920
- /* @__PURE__ */ React3__namespace.createElement(DialogPrimitive__namespace.Close, { className: "absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground" }, /* @__PURE__ */ React3__namespace.createElement(lucideReact.X, { className: "h-4 w-4" }), /* @__PURE__ */ React3__namespace.createElement("span", { className: "sr-only" }, "Close"))
917
+ /* @__PURE__ */ React33__namespace.createElement(DialogPrimitive__namespace.Close, { className: "absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-accent data-[state=open]:text-muted-foreground" }, /* @__PURE__ */ React33__namespace.createElement(lucideReact.X, { className: "h-4 w-4" }), /* @__PURE__ */ React33__namespace.createElement("span", { className: "sr-only" }, "Close"))
921
918
  )));
922
919
  DialogContent.displayName = DialogPrimitive__namespace.Content.displayName;
923
920
  var DialogHeader = ({
924
921
  className,
925
922
  ...props
926
- }) => /* @__PURE__ */ React3__namespace.createElement(
923
+ }) => /* @__PURE__ */ React33__namespace.createElement(
927
924
  "div",
928
925
  {
929
926
  className: chunk7Z5LLJ3A_js.cn(
@@ -937,7 +934,7 @@ DialogHeader.displayName = "DialogHeader";
937
934
  var DialogFooter = ({
938
935
  className,
939
936
  ...props
940
- }) => /* @__PURE__ */ React3__namespace.createElement(
937
+ }) => /* @__PURE__ */ React33__namespace.createElement(
941
938
  "div",
942
939
  {
943
940
  className: chunk7Z5LLJ3A_js.cn(
@@ -948,7 +945,7 @@ var DialogFooter = ({
948
945
  }
949
946
  );
950
947
  DialogFooter.displayName = "DialogFooter";
951
- var DialogTitle = React3__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React3__namespace.createElement(
948
+ var DialogTitle = React33__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
952
949
  DialogPrimitive__namespace.Title,
953
950
  {
954
951
  ref,
@@ -960,7 +957,7 @@ var DialogTitle = React3__namespace.forwardRef(({ className, ...props }, ref) =>
960
957
  }
961
958
  ));
962
959
  DialogTitle.displayName = DialogPrimitive__namespace.Title.displayName;
963
- var DialogDescription = React3__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React3__namespace.createElement(
960
+ var DialogDescription = React33__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
964
961
  DialogPrimitive__namespace.Description,
965
962
  {
966
963
  ref,
@@ -972,7 +969,7 @@ DialogDescription.displayName = DialogPrimitive__namespace.Description.displayNa
972
969
  var AlertDialog = AlertDialogPrimitive__namespace.Root;
973
970
  var AlertDialogTrigger = AlertDialogPrimitive__namespace.Trigger;
974
971
  var AlertDialogPortal = AlertDialogPrimitive__namespace.Portal;
975
- var AlertDialogOverlay = React3__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React3__namespace.createElement(
972
+ var AlertDialogOverlay = React33__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
976
973
  AlertDialogPrimitive__namespace.Overlay,
977
974
  {
978
975
  className: chunk7Z5LLJ3A_js.cn(
@@ -984,7 +981,7 @@ var AlertDialogOverlay = React3__namespace.forwardRef(({ className, ...props },
984
981
  }
985
982
  ));
986
983
  AlertDialogOverlay.displayName = AlertDialogPrimitive__namespace.Overlay.displayName;
987
- var AlertDialogContent = React3__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React3__namespace.createElement(AlertDialogPortal, null, /* @__PURE__ */ React3__namespace.createElement(AlertDialogOverlay, null), /* @__PURE__ */ React3__namespace.createElement(
984
+ var AlertDialogContent = React33__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(AlertDialogPortal, null, /* @__PURE__ */ React33__namespace.createElement(AlertDialogOverlay, null), /* @__PURE__ */ React33__namespace.createElement(
988
985
  AlertDialogPrimitive__namespace.Content,
989
986
  {
990
987
  ref,
@@ -999,7 +996,7 @@ AlertDialogContent.displayName = AlertDialogPrimitive__namespace.Content.display
999
996
  var AlertDialogHeader = ({
1000
997
  className,
1001
998
  ...props
1002
- }) => /* @__PURE__ */ React3__namespace.createElement(
999
+ }) => /* @__PURE__ */ React33__namespace.createElement(
1003
1000
  "div",
1004
1001
  {
1005
1002
  className: chunk7Z5LLJ3A_js.cn(
@@ -1013,7 +1010,7 @@ AlertDialogHeader.displayName = "AlertDialogHeader";
1013
1010
  var AlertDialogFooter = ({
1014
1011
  className,
1015
1012
  ...props
1016
- }) => /* @__PURE__ */ React3__namespace.createElement(
1013
+ }) => /* @__PURE__ */ React33__namespace.createElement(
1017
1014
  "div",
1018
1015
  {
1019
1016
  className: chunk7Z5LLJ3A_js.cn(
@@ -1024,7 +1021,7 @@ var AlertDialogFooter = ({
1024
1021
  }
1025
1022
  );
1026
1023
  AlertDialogFooter.displayName = "AlertDialogFooter";
1027
- var AlertDialogTitle = React3__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React3__namespace.createElement(
1024
+ var AlertDialogTitle = React33__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
1028
1025
  AlertDialogPrimitive__namespace.Title,
1029
1026
  {
1030
1027
  ref,
@@ -1033,7 +1030,7 @@ var AlertDialogTitle = React3__namespace.forwardRef(({ className, ...props }, re
1033
1030
  }
1034
1031
  ));
1035
1032
  AlertDialogTitle.displayName = AlertDialogPrimitive__namespace.Title.displayName;
1036
- var AlertDialogDescription = React3__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React3__namespace.createElement(
1033
+ var AlertDialogDescription = React33__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
1037
1034
  AlertDialogPrimitive__namespace.Description,
1038
1035
  {
1039
1036
  ref,
@@ -1042,7 +1039,7 @@ var AlertDialogDescription = React3__namespace.forwardRef(({ className, ...props
1042
1039
  }
1043
1040
  ));
1044
1041
  AlertDialogDescription.displayName = AlertDialogPrimitive__namespace.Description.displayName;
1045
- var AlertDialogAction = React3__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React3__namespace.createElement(
1042
+ var AlertDialogAction = React33__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
1046
1043
  AlertDialogPrimitive__namespace.Action,
1047
1044
  {
1048
1045
  ref,
@@ -1051,7 +1048,7 @@ var AlertDialogAction = React3__namespace.forwardRef(({ className, ...props }, r
1051
1048
  }
1052
1049
  ));
1053
1050
  AlertDialogAction.displayName = AlertDialogPrimitive__namespace.Action.displayName;
1054
- var AlertDialogCancel = React3__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React3__namespace.createElement(
1051
+ var AlertDialogCancel = React33__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
1055
1052
  AlertDialogPrimitive__namespace.Cancel,
1056
1053
  {
1057
1054
  ref,
@@ -1070,7 +1067,7 @@ var DropdownMenuGroup = DropdownMenuPrimitive__namespace.Group;
1070
1067
  var DropdownMenuPortal = DropdownMenuPrimitive__namespace.Portal;
1071
1068
  var DropdownMenuSub = DropdownMenuPrimitive__namespace.Sub;
1072
1069
  var DropdownMenuRadioGroup = DropdownMenuPrimitive__namespace.RadioGroup;
1073
- var DropdownMenuSubTrigger = React3__namespace.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ React3__namespace.createElement(
1070
+ var DropdownMenuSubTrigger = React33__namespace.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
1074
1071
  DropdownMenuPrimitive__namespace.SubTrigger,
1075
1072
  {
1076
1073
  ref,
@@ -1082,10 +1079,10 @@ var DropdownMenuSubTrigger = React3__namespace.forwardRef(({ className, inset, c
1082
1079
  ...props
1083
1080
  },
1084
1081
  children,
1085
- /* @__PURE__ */ React3__namespace.createElement(lucideReact.ChevronRight, { className: "ml-auto" })
1082
+ /* @__PURE__ */ React33__namespace.createElement(lucideReact.ChevronRight, { className: "ml-auto" })
1086
1083
  ));
1087
1084
  DropdownMenuSubTrigger.displayName = DropdownMenuPrimitive__namespace.SubTrigger.displayName;
1088
- var DropdownMenuSubContent = React3__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React3__namespace.createElement(
1085
+ var DropdownMenuSubContent = React33__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
1089
1086
  DropdownMenuPrimitive__namespace.SubContent,
1090
1087
  {
1091
1088
  ref,
@@ -1097,7 +1094,7 @@ var DropdownMenuSubContent = React3__namespace.forwardRef(({ className, ...props
1097
1094
  }
1098
1095
  ));
1099
1096
  DropdownMenuSubContent.displayName = DropdownMenuPrimitive__namespace.SubContent.displayName;
1100
- var DropdownMenuContent = React3__namespace.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ React3__namespace.createElement(DropdownMenuPrimitive__namespace.Portal, null, /* @__PURE__ */ React3__namespace.createElement(
1097
+ var DropdownMenuContent = React33__namespace.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(DropdownMenuPrimitive__namespace.Portal, null, /* @__PURE__ */ React33__namespace.createElement(
1101
1098
  DropdownMenuPrimitive__namespace.Content,
1102
1099
  {
1103
1100
  ref,
@@ -1111,7 +1108,7 @@ var DropdownMenuContent = React3__namespace.forwardRef(({ className, sideOffset
1111
1108
  }
1112
1109
  )));
1113
1110
  DropdownMenuContent.displayName = DropdownMenuPrimitive__namespace.Content.displayName;
1114
- var DropdownMenuItem = React3__namespace.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ React3__namespace.createElement(
1111
+ var DropdownMenuItem = React33__namespace.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
1115
1112
  DropdownMenuPrimitive__namespace.Item,
1116
1113
  {
1117
1114
  ref,
@@ -1124,7 +1121,7 @@ var DropdownMenuItem = React3__namespace.forwardRef(({ className, inset, ...prop
1124
1121
  }
1125
1122
  ));
1126
1123
  DropdownMenuItem.displayName = DropdownMenuPrimitive__namespace.Item.displayName;
1127
- var DropdownMenuCheckboxItem = React3__namespace.forwardRef(({ className, children, checked, ...props }, ref) => /* @__PURE__ */ React3__namespace.createElement(
1124
+ var DropdownMenuCheckboxItem = React33__namespace.forwardRef(({ className, children, checked, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
1128
1125
  DropdownMenuPrimitive__namespace.CheckboxItem,
1129
1126
  {
1130
1127
  ref,
@@ -1135,11 +1132,11 @@ var DropdownMenuCheckboxItem = React3__namespace.forwardRef(({ className, childr
1135
1132
  checked,
1136
1133
  ...props
1137
1134
  },
1138
- /* @__PURE__ */ React3__namespace.createElement("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center" }, /* @__PURE__ */ React3__namespace.createElement(DropdownMenuPrimitive__namespace.ItemIndicator, null, /* @__PURE__ */ React3__namespace.createElement(lucideReact.Check, { className: "h-4 w-4" }))),
1135
+ /* @__PURE__ */ React33__namespace.createElement("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center" }, /* @__PURE__ */ React33__namespace.createElement(DropdownMenuPrimitive__namespace.ItemIndicator, null, /* @__PURE__ */ React33__namespace.createElement(lucideReact.Check, { className: "h-4 w-4" }))),
1139
1136
  children
1140
1137
  ));
1141
1138
  DropdownMenuCheckboxItem.displayName = DropdownMenuPrimitive__namespace.CheckboxItem.displayName;
1142
- var DropdownMenuRadioItem = React3__namespace.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ React3__namespace.createElement(
1139
+ var DropdownMenuRadioItem = React33__namespace.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
1143
1140
  DropdownMenuPrimitive__namespace.RadioItem,
1144
1141
  {
1145
1142
  ref,
@@ -1149,11 +1146,11 @@ var DropdownMenuRadioItem = React3__namespace.forwardRef(({ className, children,
1149
1146
  ),
1150
1147
  ...props
1151
1148
  },
1152
- /* @__PURE__ */ React3__namespace.createElement("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center" }, /* @__PURE__ */ React3__namespace.createElement(DropdownMenuPrimitive__namespace.ItemIndicator, null, /* @__PURE__ */ React3__namespace.createElement(lucideReact.Circle, { className: "h-2 w-2 fill-current" }))),
1149
+ /* @__PURE__ */ React33__namespace.createElement("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center" }, /* @__PURE__ */ React33__namespace.createElement(DropdownMenuPrimitive__namespace.ItemIndicator, null, /* @__PURE__ */ React33__namespace.createElement(lucideReact.Circle, { className: "h-2 w-2 fill-current" }))),
1153
1150
  children
1154
1151
  ));
1155
1152
  DropdownMenuRadioItem.displayName = DropdownMenuPrimitive__namespace.RadioItem.displayName;
1156
- var DropdownMenuLabel = React3__namespace.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ React3__namespace.createElement(
1153
+ var DropdownMenuLabel = React33__namespace.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
1157
1154
  DropdownMenuPrimitive__namespace.Label,
1158
1155
  {
1159
1156
  ref,
@@ -1166,7 +1163,7 @@ var DropdownMenuLabel = React3__namespace.forwardRef(({ className, inset, ...pro
1166
1163
  }
1167
1164
  ));
1168
1165
  DropdownMenuLabel.displayName = DropdownMenuPrimitive__namespace.Label.displayName;
1169
- var DropdownMenuSeparator = React3__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React3__namespace.createElement(
1166
+ var DropdownMenuSeparator = React33__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
1170
1167
  DropdownMenuPrimitive__namespace.Separator,
1171
1168
  {
1172
1169
  ref,
@@ -1179,7 +1176,7 @@ var DropdownMenuShortcut = ({
1179
1176
  className,
1180
1177
  ...props
1181
1178
  }) => {
1182
- return /* @__PURE__ */ React3__namespace.createElement(
1179
+ return /* @__PURE__ */ React33__namespace.createElement(
1183
1180
  "span",
1184
1181
  {
1185
1182
  className: chunk7Z5LLJ3A_js.cn("ml-auto text-xs tracking-widest opacity-60", className),
@@ -1191,7 +1188,7 @@ DropdownMenuShortcut.displayName = "DropdownMenuShortcut";
1191
1188
  var Popover = PopoverPrimitive__namespace.Root;
1192
1189
  var PopoverTrigger = PopoverPrimitive__namespace.Trigger;
1193
1190
  var PopoverAnchor = PopoverPrimitive__namespace.Anchor;
1194
- var PopoverContent = React3__namespace.forwardRef(({ className, align = "center", sideOffset = 4, ...props }, ref) => /* @__PURE__ */ React3__namespace.createElement(PopoverPrimitive__namespace.Portal, null, /* @__PURE__ */ React3__namespace.createElement(
1191
+ var PopoverContent = React33__namespace.forwardRef(({ className, align = "center", sideOffset = 4, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(PopoverPrimitive__namespace.Portal, null, /* @__PURE__ */ React33__namespace.createElement(
1195
1192
  PopoverPrimitive__namespace.Content,
1196
1193
  {
1197
1194
  ref,
@@ -1205,7 +1202,7 @@ var PopoverContent = React3__namespace.forwardRef(({ className, align = "center"
1205
1202
  }
1206
1203
  )));
1207
1204
  PopoverContent.displayName = PopoverPrimitive__namespace.Content.displayName;
1208
- var Progress = React3__namespace.forwardRef(({ className, value, ...props }, ref) => /* @__PURE__ */ React3__namespace.createElement(
1205
+ var Progress = React33__namespace.forwardRef(({ className, value, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
1209
1206
  ProgressPrimitive__namespace.Root,
1210
1207
  {
1211
1208
  ref,
@@ -1215,7 +1212,7 @@ var Progress = React3__namespace.forwardRef(({ className, value, ...props }, ref
1215
1212
  ),
1216
1213
  ...props
1217
1214
  },
1218
- /* @__PURE__ */ React3__namespace.createElement(
1215
+ /* @__PURE__ */ React33__namespace.createElement(
1219
1216
  ProgressPrimitive__namespace.Indicator,
1220
1217
  {
1221
1218
  className: "h-full w-full flex-1 bg-primary transition-all",
@@ -1224,19 +1221,19 @@ var Progress = React3__namespace.forwardRef(({ className, value, ...props }, ref
1224
1221
  )
1225
1222
  ));
1226
1223
  Progress.displayName = ProgressPrimitive__namespace.Root.displayName;
1227
- var ScrollArea = React3__namespace.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ React3__namespace.createElement(
1224
+ var ScrollArea = React33__namespace.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
1228
1225
  ScrollAreaPrimitive__namespace.Root,
1229
1226
  {
1230
1227
  ref,
1231
1228
  className: chunk7Z5LLJ3A_js.cn("relative overflow-hidden", className),
1232
1229
  ...props
1233
1230
  },
1234
- /* @__PURE__ */ React3__namespace.createElement(ScrollAreaPrimitive__namespace.Viewport, { className: "h-full w-full rounded-[inherit]" }, children),
1235
- /* @__PURE__ */ React3__namespace.createElement(ScrollBar, null),
1236
- /* @__PURE__ */ React3__namespace.createElement(ScrollAreaPrimitive__namespace.Corner, null)
1231
+ /* @__PURE__ */ React33__namespace.createElement(ScrollAreaPrimitive__namespace.Viewport, { className: "h-full w-full rounded-[inherit]" }, children),
1232
+ /* @__PURE__ */ React33__namespace.createElement(ScrollBar, null),
1233
+ /* @__PURE__ */ React33__namespace.createElement(ScrollAreaPrimitive__namespace.Corner, null)
1237
1234
  ));
1238
1235
  ScrollArea.displayName = ScrollAreaPrimitive__namespace.Root.displayName;
1239
- var ScrollBar = React3__namespace.forwardRef(({ className, orientation = "vertical", ...props }, ref) => /* @__PURE__ */ React3__namespace.createElement(
1236
+ var ScrollBar = React33__namespace.forwardRef(({ className, orientation = "vertical", ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
1240
1237
  ScrollAreaPrimitive__namespace.ScrollAreaScrollbar,
1241
1238
  {
1242
1239
  ref,
@@ -1249,13 +1246,13 @@ var ScrollBar = React3__namespace.forwardRef(({ className, orientation = "vertic
1249
1246
  ),
1250
1247
  ...props
1251
1248
  },
1252
- /* @__PURE__ */ React3__namespace.createElement(ScrollAreaPrimitive__namespace.ScrollAreaThumb, { className: "relative flex-1 rounded-full bg-border" })
1249
+ /* @__PURE__ */ React33__namespace.createElement(ScrollAreaPrimitive__namespace.ScrollAreaThumb, { className: "relative flex-1 rounded-full bg-border" })
1253
1250
  ));
1254
1251
  ScrollBar.displayName = ScrollAreaPrimitive__namespace.ScrollAreaScrollbar.displayName;
1255
1252
  var Select = SelectPrimitive__namespace.Root;
1256
1253
  var SelectGroup = SelectPrimitive__namespace.Group;
1257
1254
  var SelectValue = SelectPrimitive__namespace.Value;
1258
- var SelectTrigger = React3__namespace.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ React3__namespace.createElement(
1255
+ var SelectTrigger = React33__namespace.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
1259
1256
  SelectPrimitive__namespace.Trigger,
1260
1257
  {
1261
1258
  ref,
@@ -1266,10 +1263,10 @@ var SelectTrigger = React3__namespace.forwardRef(({ className, children, ...prop
1266
1263
  ...props
1267
1264
  },
1268
1265
  children,
1269
- /* @__PURE__ */ React3__namespace.createElement(SelectPrimitive__namespace.Icon, { asChild: true }, /* @__PURE__ */ React3__namespace.createElement(lucideReact.ChevronDown, { className: "h-4 w-4 opacity-50" }))
1266
+ /* @__PURE__ */ React33__namespace.createElement(SelectPrimitive__namespace.Icon, { asChild: true }, /* @__PURE__ */ React33__namespace.createElement(lucideReact.ChevronDown, { className: "h-4 w-4 opacity-50" }))
1270
1267
  ));
1271
1268
  SelectTrigger.displayName = SelectPrimitive__namespace.Trigger.displayName;
1272
- var SelectScrollUpButton = React3__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React3__namespace.createElement(
1269
+ var SelectScrollUpButton = React33__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
1273
1270
  SelectPrimitive__namespace.ScrollUpButton,
1274
1271
  {
1275
1272
  ref,
@@ -1279,10 +1276,10 @@ var SelectScrollUpButton = React3__namespace.forwardRef(({ className, ...props }
1279
1276
  ),
1280
1277
  ...props
1281
1278
  },
1282
- /* @__PURE__ */ React3__namespace.createElement(lucideReact.ChevronUp, { className: "h-4 w-4" })
1279
+ /* @__PURE__ */ React33__namespace.createElement(lucideReact.ChevronUp, { className: "h-4 w-4" })
1283
1280
  ));
1284
1281
  SelectScrollUpButton.displayName = SelectPrimitive__namespace.ScrollUpButton.displayName;
1285
- var SelectScrollDownButton = React3__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React3__namespace.createElement(
1282
+ var SelectScrollDownButton = React33__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
1286
1283
  SelectPrimitive__namespace.ScrollDownButton,
1287
1284
  {
1288
1285
  ref,
@@ -1292,10 +1289,10 @@ var SelectScrollDownButton = React3__namespace.forwardRef(({ className, ...props
1292
1289
  ),
1293
1290
  ...props
1294
1291
  },
1295
- /* @__PURE__ */ React3__namespace.createElement(lucideReact.ChevronDown, { className: "h-4 w-4" })
1292
+ /* @__PURE__ */ React33__namespace.createElement(lucideReact.ChevronDown, { className: "h-4 w-4" })
1296
1293
  ));
1297
1294
  SelectScrollDownButton.displayName = SelectPrimitive__namespace.ScrollDownButton.displayName;
1298
- var SelectContent = React3__namespace.forwardRef(({ className, children, position = "popper", ...props }, ref) => /* @__PURE__ */ React3__namespace.createElement(SelectPrimitive__namespace.Portal, null, /* @__PURE__ */ React3__namespace.createElement(
1295
+ var SelectContent = React33__namespace.forwardRef(({ className, children, position = "popper", ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(SelectPrimitive__namespace.Portal, null, /* @__PURE__ */ React33__namespace.createElement(
1299
1296
  SelectPrimitive__namespace.Content,
1300
1297
  {
1301
1298
  ref,
@@ -1307,8 +1304,8 @@ var SelectContent = React3__namespace.forwardRef(({ className, children, positio
1307
1304
  position,
1308
1305
  ...props
1309
1306
  },
1310
- /* @__PURE__ */ React3__namespace.createElement(SelectScrollUpButton, null),
1311
- /* @__PURE__ */ React3__namespace.createElement(
1307
+ /* @__PURE__ */ React33__namespace.createElement(SelectScrollUpButton, null),
1308
+ /* @__PURE__ */ React33__namespace.createElement(
1312
1309
  SelectPrimitive__namespace.Viewport,
1313
1310
  {
1314
1311
  className: chunk7Z5LLJ3A_js.cn(
@@ -1318,10 +1315,10 @@ var SelectContent = React3__namespace.forwardRef(({ className, children, positio
1318
1315
  },
1319
1316
  children
1320
1317
  ),
1321
- /* @__PURE__ */ React3__namespace.createElement(SelectScrollDownButton, null)
1318
+ /* @__PURE__ */ React33__namespace.createElement(SelectScrollDownButton, null)
1322
1319
  )));
1323
1320
  SelectContent.displayName = SelectPrimitive__namespace.Content.displayName;
1324
- var SelectLabel = React3__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React3__namespace.createElement(
1321
+ var SelectLabel = React33__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
1325
1322
  SelectPrimitive__namespace.Label,
1326
1323
  {
1327
1324
  ref,
@@ -1330,7 +1327,7 @@ var SelectLabel = React3__namespace.forwardRef(({ className, ...props }, ref) =>
1330
1327
  }
1331
1328
  ));
1332
1329
  SelectLabel.displayName = SelectPrimitive__namespace.Label.displayName;
1333
- var SelectItem = React3__namespace.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ React3__namespace.createElement(
1330
+ var SelectItem = React33__namespace.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
1334
1331
  SelectPrimitive__namespace.Item,
1335
1332
  {
1336
1333
  ref,
@@ -1340,11 +1337,11 @@ var SelectItem = React3__namespace.forwardRef(({ className, children, ...props }
1340
1337
  ),
1341
1338
  ...props
1342
1339
  },
1343
- /* @__PURE__ */ React3__namespace.createElement("span", { className: "absolute right-2 flex h-3.5 w-3.5 items-center justify-center" }, /* @__PURE__ */ React3__namespace.createElement(SelectPrimitive__namespace.ItemIndicator, null, /* @__PURE__ */ React3__namespace.createElement(lucideReact.Check, { className: "h-4 w-4" }))),
1344
- /* @__PURE__ */ React3__namespace.createElement(SelectPrimitive__namespace.ItemText, null, children)
1340
+ /* @__PURE__ */ React33__namespace.createElement("span", { className: "absolute right-2 flex h-3.5 w-3.5 items-center justify-center" }, /* @__PURE__ */ React33__namespace.createElement(SelectPrimitive__namespace.ItemIndicator, null, /* @__PURE__ */ React33__namespace.createElement(lucideReact.Check, { className: "h-4 w-4" }))),
1341
+ /* @__PURE__ */ React33__namespace.createElement(SelectPrimitive__namespace.ItemText, null, children)
1345
1342
  ));
1346
1343
  SelectItem.displayName = SelectPrimitive__namespace.Item.displayName;
1347
- var SelectSeparator = React3__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React3__namespace.createElement(
1344
+ var SelectSeparator = React33__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
1348
1345
  SelectPrimitive__namespace.Separator,
1349
1346
  {
1350
1347
  ref,
@@ -1353,8 +1350,8 @@ var SelectSeparator = React3__namespace.forwardRef(({ className, ...props }, ref
1353
1350
  }
1354
1351
  ));
1355
1352
  SelectSeparator.displayName = SelectPrimitive__namespace.Separator.displayName;
1356
- var Separator3 = React3__namespace.forwardRef(
1357
- ({ className, orientation = "horizontal", decorative = true, ...props }, ref) => /* @__PURE__ */ React3__namespace.createElement(
1353
+ var Separator3 = React33__namespace.forwardRef(
1354
+ ({ className, orientation = "horizontal", decorative = true, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
1358
1355
  SeparatorPrimitive__namespace.Root,
1359
1356
  {
1360
1357
  ref,
@@ -1374,7 +1371,7 @@ var Sheet = DialogPrimitive__namespace.Root;
1374
1371
  var SheetTrigger = DialogPrimitive__namespace.Trigger;
1375
1372
  var SheetClose = DialogPrimitive__namespace.Close;
1376
1373
  var SheetPortal = DialogPrimitive__namespace.Portal;
1377
- var SheetOverlay = React3__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React3__namespace.createElement(
1374
+ var SheetOverlay = React33__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
1378
1375
  DialogPrimitive__namespace.Overlay,
1379
1376
  {
1380
1377
  className: chunk7Z5LLJ3A_js.cn(
@@ -1402,21 +1399,21 @@ var sheetVariants = classVarianceAuthority.cva(
1402
1399
  }
1403
1400
  }
1404
1401
  );
1405
- var SheetContent = React3__namespace.forwardRef(({ side = "right", className, children, ...props }, ref) => /* @__PURE__ */ React3__namespace.createElement(SheetPortal, null, /* @__PURE__ */ React3__namespace.createElement(SheetOverlay, null), /* @__PURE__ */ React3__namespace.createElement(
1402
+ var SheetContent = React33__namespace.forwardRef(({ side = "right", className, children, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(SheetPortal, null, /* @__PURE__ */ React33__namespace.createElement(SheetOverlay, null), /* @__PURE__ */ React33__namespace.createElement(
1406
1403
  DialogPrimitive__namespace.Content,
1407
1404
  {
1408
1405
  ref,
1409
1406
  className: chunk7Z5LLJ3A_js.cn(sheetVariants({ side }), className),
1410
1407
  ...props
1411
1408
  },
1412
- /* @__PURE__ */ React3__namespace.createElement(DialogPrimitive__namespace.Close, { className: "absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-secondary" }, /* @__PURE__ */ React3__namespace.createElement(lucideReact.X, { className: "h-4 w-4" }), /* @__PURE__ */ React3__namespace.createElement("span", { className: "sr-only" }, "Close")),
1409
+ /* @__PURE__ */ React33__namespace.createElement(DialogPrimitive__namespace.Close, { className: "absolute right-4 top-4 rounded-sm opacity-70 ring-offset-background transition-opacity hover:opacity-100 focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-secondary" }, /* @__PURE__ */ React33__namespace.createElement(lucideReact.X, { className: "h-4 w-4" }), /* @__PURE__ */ React33__namespace.createElement("span", { className: "sr-only" }, "Close")),
1413
1410
  children
1414
1411
  )));
1415
1412
  SheetContent.displayName = DialogPrimitive__namespace.Content.displayName;
1416
1413
  var SheetHeader = ({
1417
1414
  className,
1418
1415
  ...props
1419
- }) => /* @__PURE__ */ React3__namespace.createElement(
1416
+ }) => /* @__PURE__ */ React33__namespace.createElement(
1420
1417
  "div",
1421
1418
  {
1422
1419
  className: chunk7Z5LLJ3A_js.cn(
@@ -1430,7 +1427,7 @@ SheetHeader.displayName = "SheetHeader";
1430
1427
  var SheetFooter = ({
1431
1428
  className,
1432
1429
  ...props
1433
- }) => /* @__PURE__ */ React3__namespace.createElement(
1430
+ }) => /* @__PURE__ */ React33__namespace.createElement(
1434
1431
  "div",
1435
1432
  {
1436
1433
  className: chunk7Z5LLJ3A_js.cn(
@@ -1441,7 +1438,7 @@ var SheetFooter = ({
1441
1438
  }
1442
1439
  );
1443
1440
  SheetFooter.displayName = "SheetFooter";
1444
- var SheetTitle = React3__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React3__namespace.createElement(
1441
+ var SheetTitle = React33__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
1445
1442
  DialogPrimitive__namespace.Title,
1446
1443
  {
1447
1444
  ref,
@@ -1450,7 +1447,7 @@ var SheetTitle = React3__namespace.forwardRef(({ className, ...props }, ref) =>
1450
1447
  }
1451
1448
  ));
1452
1449
  SheetTitle.displayName = DialogPrimitive__namespace.Title.displayName;
1453
- var SheetDescription = React3__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React3__namespace.createElement(
1450
+ var SheetDescription = React33__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
1454
1451
  DialogPrimitive__namespace.Description,
1455
1452
  {
1456
1453
  ref,
@@ -1459,8 +1456,8 @@ var SheetDescription = React3__namespace.forwardRef(({ className, ...props }, re
1459
1456
  }
1460
1457
  ));
1461
1458
  SheetDescription.displayName = DialogPrimitive__namespace.Description.displayName;
1462
- var Textarea = React3__namespace.forwardRef(({ className, ...props }, ref) => {
1463
- return /* @__PURE__ */ React3__namespace.createElement(
1459
+ var Textarea = React33__namespace.forwardRef(({ className, ...props }, ref) => {
1460
+ return /* @__PURE__ */ React33__namespace.createElement(
1464
1461
  "textarea",
1465
1462
  {
1466
1463
  className: chunk7Z5LLJ3A_js.cn(
@@ -1476,7 +1473,7 @@ Textarea.displayName = "Textarea";
1476
1473
  var TooltipProvider = TooltipPrimitive__namespace.Provider;
1477
1474
  var Tooltip = TooltipPrimitive__namespace.Root;
1478
1475
  var TooltipTrigger = TooltipPrimitive__namespace.Trigger;
1479
- var TooltipContent = React3__namespace.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ React3__namespace.createElement(TooltipPrimitive__namespace.Portal, null, /* @__PURE__ */ React3__namespace.createElement(
1476
+ var TooltipContent = React33__namespace.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(TooltipPrimitive__namespace.Portal, null, /* @__PURE__ */ React33__namespace.createElement(
1480
1477
  TooltipPrimitive__namespace.Content,
1481
1478
  {
1482
1479
  ref,
@@ -1489,7 +1486,7 @@ var TooltipContent = React3__namespace.forwardRef(({ className, sideOffset = 4,
1489
1486
  }
1490
1487
  )));
1491
1488
  TooltipContent.displayName = TooltipPrimitive__namespace.Content.displayName;
1492
- var Avatar = React3__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React3__namespace.createElement(
1489
+ var Avatar = React33__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
1493
1490
  AvatarPrimitive__namespace.Root,
1494
1491
  {
1495
1492
  ref,
@@ -1501,7 +1498,7 @@ var Avatar = React3__namespace.forwardRef(({ className, ...props }, ref) => /* @
1501
1498
  }
1502
1499
  ));
1503
1500
  Avatar.displayName = AvatarPrimitive__namespace.Root.displayName;
1504
- var AvatarImage = React3__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React3__namespace.createElement(
1501
+ var AvatarImage = React33__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
1505
1502
  AvatarPrimitive__namespace.Image,
1506
1503
  {
1507
1504
  ref,
@@ -1510,7 +1507,7 @@ var AvatarImage = React3__namespace.forwardRef(({ className, ...props }, ref) =>
1510
1507
  }
1511
1508
  ));
1512
1509
  AvatarImage.displayName = AvatarPrimitive__namespace.Image.displayName;
1513
- var AvatarFallback = React3__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React3__namespace.createElement(
1510
+ var AvatarFallback = React33__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
1514
1511
  AvatarPrimitive__namespace.Fallback,
1515
1512
  {
1516
1513
  ref,
@@ -1522,6 +1519,50 @@ var AvatarFallback = React3__namespace.forwardRef(({ className, ...props }, ref)
1522
1519
  }
1523
1520
  ));
1524
1521
  AvatarFallback.displayName = AvatarPrimitive__namespace.Fallback.displayName;
1522
+ function buildGridColsClasses(columns) {
1523
+ return [
1524
+ "grid-cols-1",
1525
+ // 默认单列
1526
+ columns.sm ? `sm:grid-cols-${columns.sm}` : "",
1527
+ columns.md ? `md:grid-cols-${columns.md}` : "md:grid-cols-2",
1528
+ columns.lg ? `lg:grid-cols-${columns.lg}` : "lg:grid-cols-3",
1529
+ columns.xl ? `xl:grid-cols-${columns.xl}` : ""
1530
+ ].filter(Boolean).join(" ");
1531
+ }
1532
+ function getGapClassName(gap) {
1533
+ const gapClasses = {
1534
+ sm: "gap-3",
1535
+ md: "gap-6",
1536
+ lg: "gap-8",
1537
+ xl: "gap-10"
1538
+ };
1539
+ return gapClasses[gap];
1540
+ }
1541
+ function Grid({
1542
+ items,
1543
+ renderItem,
1544
+ columns = { md: 2, lg: 3 },
1545
+ gap = "md",
1546
+ className = "",
1547
+ style
1548
+ }) {
1549
+ const gridColsClasses = buildGridColsClasses(columns);
1550
+ const gapClass = getGapClassName(gap);
1551
+ return /* @__PURE__ */ React33__namespace.default.createElement(
1552
+ "div",
1553
+ {
1554
+ className: `grid ${gridColsClasses} ${gapClass} ${className}`.trim(),
1555
+ style
1556
+ },
1557
+ items.map((item, index) => /* @__PURE__ */ React33__namespace.default.createElement("div", { key: item.id }, renderItem(item, index)))
1558
+ );
1559
+ }
1560
+ var Timeline = ({ items = [] }) => {
1561
+ if (!items || items.length === 0) {
1562
+ return null;
1563
+ }
1564
+ return /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "relative" }, /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "absolute left-4 top-0 bottom-0 w-0.5 bg-gray-200" }), items.map((item, index) => /* @__PURE__ */ React33__namespace.default.createElement("div", { key: index, className: "relative pl-12 pb-8" }, /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "absolute left-0 w-8 h-8 rounded-full bg-blue-500 border-4 border-white shadow-md flex items-center justify-center" }, /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "w-2 h-2 rounded-full bg-white" })), /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "bg-white rounded-lg p-4 shadow-md" }, /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "text-sm text-gray-500 mb-2" }, item.date), /* @__PURE__ */ React33__namespace.default.createElement("h4", { className: "text-lg font-semibold mb-2" }, item.title), /* @__PURE__ */ React33__namespace.default.createElement("p", { className: "text-gray-600" }, item.description)))));
1565
+ };
1525
1566
  var CollisionBalls = ({
1526
1567
  collisionBallsConfig: {
1527
1568
  balls,
@@ -1529,13 +1570,13 @@ var CollisionBalls = ({
1529
1570
  height
1530
1571
  }
1531
1572
  }) => {
1532
- const canvasRef = React3.useRef(null);
1533
- const containerRef = React3.useRef(null);
1534
- const ballsRef = React3.useRef([]);
1535
- const [isShaking, setIsShaking] = React3.useState(false);
1536
- const [draggedBall, setDraggedBall] = React3.useState(null);
1537
- const [mousePos, setMousePos] = React3.useState({ x: 0, y: 0 });
1538
- const animationRef = React3.useRef(null);
1573
+ const canvasRef = React33.useRef(null);
1574
+ const containerRef = React33.useRef(null);
1575
+ const ballsRef = React33.useRef([]);
1576
+ const [isShaking, setIsShaking] = React33.useState(false);
1577
+ const [draggedBall, setDraggedBall] = React33.useState(null);
1578
+ const [mousePos, setMousePos] = React33.useState({ x: 0, y: 0 });
1579
+ const animationRef = React33.useRef(null);
1539
1580
  const updateCanvasSize = () => {
1540
1581
  const container = containerRef.current;
1541
1582
  const canvas = canvasRef.current;
@@ -1578,7 +1619,7 @@ var CollisionBalls = ({
1578
1619
  isDragging: false
1579
1620
  }));
1580
1621
  };
1581
- React3.useEffect(() => {
1622
+ React33.useEffect(() => {
1582
1623
  const handleResize = () => {
1583
1624
  console.log("Window resized");
1584
1625
  updateCanvasSize();
@@ -1593,7 +1634,7 @@ var CollisionBalls = ({
1593
1634
  }
1594
1635
  };
1595
1636
  }, []);
1596
- React3.useEffect(() => {
1637
+ React33.useEffect(() => {
1597
1638
  const canvas = canvasRef.current;
1598
1639
  if (!canvas) {
1599
1640
  console.error("Canvas element not found");
@@ -1783,7 +1824,7 @@ var CollisionBalls = ({
1783
1824
  y: (event.clientY - rect.top) * scaleY
1784
1825
  };
1785
1826
  };
1786
- return /* @__PURE__ */ React3__namespace.default.createElement("div", { style: { width: "100%", height: "100%", position: "relative", backgroundColor: "#f9fafb", borderRadius: "0.5rem" } }, /* @__PURE__ */ React3__namespace.default.createElement("div", { ref: containerRef, style: { width: "100%", height: "100%", position: "absolute", top: 0, left: 0 } }, /* @__PURE__ */ React3__namespace.default.createElement(
1827
+ return /* @__PURE__ */ React33__namespace.default.createElement("div", { style: { width: "100%", height: "100%", position: "relative", backgroundColor: "#f9fafb", borderRadius: "0.5rem" } }, /* @__PURE__ */ React33__namespace.default.createElement("div", { ref: containerRef, style: { width: "100%", height: "100%", position: "absolute", top: 0, left: 0 } }, /* @__PURE__ */ React33__namespace.default.createElement(
1787
1828
  "canvas",
1788
1829
  {
1789
1830
  ref: canvasRef,
@@ -1798,14 +1839,14 @@ var CollisionBalls = ({
1798
1839
  onMouseUp: handleMouseUp,
1799
1840
  onMouseLeave: handleMouseUp
1800
1841
  }
1801
- )), /* @__PURE__ */ React3__namespace.default.createElement("div", { className: "absolute bottom-4 right-4 flex gap-2" }, /* @__PURE__ */ React3__namespace.default.createElement(
1842
+ )), /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "absolute bottom-4 right-4 flex gap-2" }, /* @__PURE__ */ React33__namespace.default.createElement(
1802
1843
  "button",
1803
1844
  {
1804
1845
  onClick: shake,
1805
1846
  className: `px-4 py-2 bg-blue-500 text-white rounded-lg hover:bg-blue-600 transition-colors ${isShaking ? "animate-pulse" : ""}`
1806
1847
  },
1807
1848
  "\u6447\u4E00\u6447"
1808
- ), /* @__PURE__ */ React3__namespace.default.createElement(
1849
+ ), /* @__PURE__ */ React33__namespace.default.createElement(
1809
1850
  "button",
1810
1851
  {
1811
1852
  onClick: slowdown,
@@ -1814,135 +1855,14 @@ var CollisionBalls = ({
1814
1855
  "\u51CF\u901F"
1815
1856
  )));
1816
1857
  };
1817
- var CollisionBalls_default = CollisionBalls;
1818
- var Timeline = ({ items = [] }) => {
1819
- if (!items || items.length === 0) {
1820
- return null;
1821
- }
1822
- return /* @__PURE__ */ React3__namespace.default.createElement("div", { className: "relative" }, /* @__PURE__ */ React3__namespace.default.createElement("div", { className: "absolute left-4 top-0 bottom-0 w-0.5 bg-gray-200" }), items.map((item, index) => /* @__PURE__ */ React3__namespace.default.createElement("div", { key: index, className: "relative pl-12 pb-8" }, /* @__PURE__ */ React3__namespace.default.createElement("div", { className: "absolute left-0 w-8 h-8 rounded-full bg-blue-500 border-4 border-white shadow-md flex items-center justify-center" }, /* @__PURE__ */ React3__namespace.default.createElement("div", { className: "w-2 h-2 rounded-full bg-white" })), /* @__PURE__ */ React3__namespace.default.createElement("div", { className: "bg-white rounded-lg p-4 shadow-md" }, /* @__PURE__ */ React3__namespace.default.createElement("div", { className: "text-sm text-gray-500 mb-2" }, item.date), /* @__PURE__ */ React3__namespace.default.createElement("h4", { className: "text-lg font-semibold mb-2" }, item.title), /* @__PURE__ */ React3__namespace.default.createElement("p", { className: "text-gray-600" }, item.description)))));
1823
- };
1824
- var Timeline_default = Timeline;
1825
- var Modal = ({
1826
- isOpen,
1827
- onClose,
1828
- title,
1829
- width = 400,
1830
- height = "auto",
1831
- maskClosable = true,
1832
- showCloseButton = true,
1833
- className = "",
1834
- contentClassName = "",
1835
- zIndex = 1e3,
1836
- children
1837
- }) => {
1838
- const modalRef = React3.useRef(null);
1839
- const [mounted, setMounted] = React3.useState(false);
1840
- React3.useEffect(() => {
1841
- setMounted(true);
1842
- return () => {
1843
- setMounted(false);
1844
- };
1845
- }, []);
1846
- React3.useEffect(() => {
1847
- const handleEscKey = (event) => {
1848
- if (event.key === "Escape" && isOpen) {
1849
- onClose();
1850
- }
1851
- };
1852
- if (isOpen && typeof document !== "undefined" && document.body) {
1853
- document.body.style.overflow = "hidden";
1854
- document.addEventListener("keydown", handleEscKey);
1855
- }
1856
- return () => {
1857
- try {
1858
- if (typeof document !== "undefined" && document.body) {
1859
- document.body.style.overflow = "";
1860
- document.removeEventListener("keydown", handleEscKey);
1861
- }
1862
- } catch (error) {
1863
- console.warn("\u6E05\u7406Modal\u4E8B\u4EF6\u76D1\u542C\u5668\u65F6\u51FA\u9519:", error);
1864
- }
1865
- };
1866
- }, [isOpen, onClose]);
1867
- const handleMaskClick = (e) => {
1868
- if (maskClosable && e.target === e.currentTarget) {
1869
- onClose();
1870
- }
1871
- };
1872
- const modalStyle = {
1873
- width: typeof width === "number" ? `${width}px` : width,
1874
- height: typeof height === "number" ? `${height}px` : height,
1875
- zIndex
1876
- };
1877
- if (!mounted || !isOpen) return null;
1878
- if (typeof document === "undefined" || !document.body) {
1879
- return null;
1880
- }
1881
- try {
1882
- return ReactDOM__default.default.createPortal(
1883
- /* @__PURE__ */ React3__namespace.default.createElement(
1884
- "div",
1885
- {
1886
- className: "fixed inset-0 bg-black/50 flex items-center justify-center z-[1000] animate-fade-in",
1887
- onClick: handleMaskClick
1888
- },
1889
- /* @__PURE__ */ React3__namespace.default.createElement(
1890
- "div",
1891
- {
1892
- className: chunk7Z5LLJ3A_js.cn(
1893
- "bg-white rounded-lg shadow-[0_4px_20px_rgba(0,0,0,0.15)] max-w-[90vw] max-h-[90vh] overflow-hidden flex flex-col animate-slide-up",
1894
- className
1895
- ),
1896
- style: modalStyle,
1897
- ref: modalRef
1898
- },
1899
- (title || showCloseButton) && /* @__PURE__ */ React3__namespace.default.createElement("div", { className: "flex justify-between items-center px-5 py-4 border-b border-gray-100" }, title && /* @__PURE__ */ React3__namespace.default.createElement("div", { className: "text-lg font-semibold text-gray-800 m-0" }, title), showCloseButton && /* @__PURE__ */ React3__namespace.default.createElement(
1900
- "button",
1901
- {
1902
- className: "bg-transparent border-none text-2xl leading-none text-gray-400 cursor-pointer p-0 m-0 w-6 h-6 flex items-center justify-center transition-colors hover:text-gray-800",
1903
- onClick: onClose
1904
- },
1905
- "\xD7"
1906
- )),
1907
- /* @__PURE__ */ React3__namespace.default.createElement("div", { className: chunk7Z5LLJ3A_js.cn("p-5 overflow-y-auto", contentClassName) }, children)
1908
- )
1909
- ),
1910
- document.body
1911
- );
1912
- } catch (error) {
1913
- console.error("Portal\u521B\u5EFA\u5931\u8D25:", error);
1914
- return null;
1915
- }
1916
- };
1917
- var Modal_default = Modal;
1918
- var Avatar2 = ({
1919
- src,
1920
- alt,
1921
- size = 80,
1922
- borderColor,
1923
- className = ""
1924
- }) => {
1925
- return /* @__PURE__ */ React3__namespace.default.createElement(
1926
- "div",
1927
- {
1928
- className: chunk7Z5LLJ3A_js.cn("rounded-full overflow-hidden border-[3px] border-transparent", className),
1929
- style: {
1930
- width: `${size}px`,
1931
- height: `${size}px`,
1932
- borderColor: borderColor || "transparent"
1933
- }
1934
- },
1935
- /* @__PURE__ */ React3__namespace.default.createElement("img", { src, alt, className: "w-full h-full object-cover" })
1936
- );
1937
- };
1938
-
1939
- // src/components/popover/ProfileModal.tsx
1940
1858
  var themeStyles = {
1941
1859
  light: "",
1942
- dark: "bg-[#222] text-[#eee]",
1943
- blue: "bg-[#f0f8ff]"
1860
+ dark: "bg-[#222] text-[#eee] border-[#444]",
1861
+ blue: "bg-[#f0f8ff] border-[#1890ff]/20"
1944
1862
  };
1945
1863
  var ProfileModal = ({
1864
+ isOpen,
1865
+ onClose,
1946
1866
  data,
1947
1867
  showAvatar = true,
1948
1868
  showContacts = true,
@@ -1953,16 +1873,19 @@ var ProfileModal = ({
1953
1873
  onSocialLinkClick,
1954
1874
  onContactClick,
1955
1875
  themeName = "light",
1956
- ...modalProps
1876
+ className
1957
1877
  }) => {
1958
1878
  const renderSocialLinks = () => {
1959
1879
  if (!data.socialLinks || data.socialLinks.length === 0) return null;
1960
- return /* @__PURE__ */ React3__namespace.default.createElement("div", { className: "flex gap-3 mt-2" }, data.socialLinks.map((link, index) => /* @__PURE__ */ React3__namespace.default.createElement(
1880
+ return /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "flex gap-3 mt-2" }, data.socialLinks.map((link, index) => /* @__PURE__ */ React33__namespace.default.createElement(
1961
1881
  "a",
1962
1882
  {
1963
1883
  key: index,
1964
1884
  href: link.url,
1965
- className: "w-8 h-8 flex items-center justify-center bg-gray-100 rounded-full text-gray-800 no-underline transition-all hover:bg-gray-200 hover:-translate-y-0.5",
1885
+ className: chunk7Z5LLJ3A_js.cn(
1886
+ "w-8 h-8 flex items-center justify-center rounded-full no-underline transition-all hover:-translate-y-0.5",
1887
+ themeName === "dark" ? "bg-gray-800 text-gray-200 hover:bg-gray-700" : "bg-gray-100 text-gray-800 hover:bg-gray-200"
1888
+ ),
1966
1889
  title: link.type,
1967
1890
  target: "_blank",
1968
1891
  rel: "noopener noreferrer",
@@ -1973,84 +1896,72 @@ var ProfileModal = ({
1973
1896
  }
1974
1897
  }
1975
1898
  },
1976
- link.icon ? /* @__PURE__ */ React3__namespace.default.createElement("span", { className: "text-base" }, link.icon) : /* @__PURE__ */ React3__namespace.default.createElement("span", { className: "text-[10px] font-semibold" }, link.type)
1899
+ link.icon ? /* @__PURE__ */ React33__namespace.default.createElement("span", { className: "text-base" }, link.icon) : /* @__PURE__ */ React33__namespace.default.createElement("span", { className: "text-[10px] font-semibold" }, link.type)
1977
1900
  )));
1978
1901
  };
1979
1902
  const renderContacts = () => {
1980
1903
  if (!data.contacts || Object.keys(data.contacts).length === 0) return null;
1981
- return /* @__PURE__ */ React3__namespace.default.createElement("div", { className: "mt-4 border-t border-gray-100 pt-4" }, Object.entries(data.contacts).map(([type, value], index) => /* @__PURE__ */ React3__namespace.default.createElement(
1904
+ return /* @__PURE__ */ React33__namespace.default.createElement("div", { className: chunk7Z5LLJ3A_js.cn(
1905
+ "mt-4 border-t pt-4",
1906
+ themeName === "dark" ? "border-gray-800" : "border-gray-100"
1907
+ ) }, Object.entries(data.contacts).map(([type, value], index) => /* @__PURE__ */ React33__namespace.default.createElement(
1982
1908
  "div",
1983
1909
  {
1984
1910
  key: index,
1985
- className: "flex mb-2 cursor-pointer py-1.5 hover:bg-gray-50 transition-colors",
1911
+ className: chunk7Z5LLJ3A_js.cn(
1912
+ "flex mb-2 cursor-pointer py-1.5 px-2 rounded transition-colors",
1913
+ themeName === "dark" ? "hover:bg-gray-800" : "hover:bg-gray-50"
1914
+ ),
1986
1915
  onClick: () => onContactClick && onContactClick(type, value)
1987
1916
  },
1988
- /* @__PURE__ */ React3__namespace.default.createElement("span", { className: "font-medium text-gray-500 w-[70px] shrink-0" }, type, ":"),
1989
- /* @__PURE__ */ React3__namespace.default.createElement("span", { className: "text-gray-800" }, value)
1917
+ /* @__PURE__ */ React33__namespace.default.createElement("span", { className: chunk7Z5LLJ3A_js.cn(
1918
+ "font-medium w-[70px] shrink-0",
1919
+ themeName === "dark" ? "text-gray-400" : "text-gray-500"
1920
+ ) }, type, ":"),
1921
+ /* @__PURE__ */ React33__namespace.default.createElement("span", { className: themeName === "dark" ? "text-gray-200" : "text-gray-800" }, value)
1990
1922
  )));
1991
1923
  };
1992
- return /* @__PURE__ */ React3__namespace.default.createElement(
1993
- Modal_default,
1924
+ return /* @__PURE__ */ React33__namespace.default.createElement(Dialog, { open: isOpen, onOpenChange: (open) => !open && onClose() }, /* @__PURE__ */ React33__namespace.default.createElement(DialogContent, { className: chunk7Z5LLJ3A_js.cn(
1925
+ "sm:max-w-[500px] p-0 overflow-hidden border-none shadow-2xl",
1926
+ themeStyles[themeName] || "",
1927
+ className
1928
+ ) }, /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "p-6" }, /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "flex gap-5 mb-5" }, showAvatar && /* @__PURE__ */ React33__namespace.default.createElement(
1929
+ "div",
1994
1930
  {
1995
- ...modalProps,
1996
- title: "",
1997
- className: chunk7Z5LLJ3A_js.cn("w-[500px]", themeStyles[themeName] || "")
1931
+ className: "shrink-0",
1932
+ onClick: onAvatarClick,
1933
+ style: { cursor: onAvatarClick ? "pointer" : "default" }
1998
1934
  },
1999
- /* @__PURE__ */ React3__namespace.default.createElement("div", { className: "flex gap-5 mb-5" }, showAvatar && data.avatar && /* @__PURE__ */ React3__namespace.default.createElement(
2000
- "div",
2001
- {
2002
- className: "shrink-0",
2003
- onClick: onAvatarClick,
2004
- style: { cursor: onAvatarClick ? "pointer" : "default" }
2005
- },
2006
- /* @__PURE__ */ React3__namespace.default.createElement(
2007
- Avatar2,
2008
- {
2009
- src: data.avatar,
2010
- alt: data.name,
2011
- size: avatarSize
2012
- }
2013
- )
2014
- ), /* @__PURE__ */ React3__namespace.default.createElement("div", { className: "flex-1 min-w-0" }, /* @__PURE__ */ React3__namespace.default.createElement("h2", { className: "text-2xl font-semibold m-0 mb-1 text-gray-800" }, data.name), data.title && /* @__PURE__ */ React3__namespace.default.createElement("div", { className: "text-sm text-gray-500 mb-2" }, data.title), showSocial && renderSocialLinks())),
2015
- showBio && data.bio && /* @__PURE__ */ React3__namespace.default.createElement("div", { className: "mb-5 leading-relaxed text-gray-600" }, /* @__PURE__ */ React3__namespace.default.createElement("p", null, data.bio)),
2016
- showContacts && renderContacts(),
2017
- data.customContent && /* @__PURE__ */ React3__namespace.default.createElement("div", { className: "mt-5" }, data.customContent)
2018
- );
1935
+ /* @__PURE__ */ React33__namespace.default.createElement(Avatar, { className: "border-2 border-primary/10 shadow-sm", style: { width: avatarSize, height: avatarSize } }, data.avatar && /* @__PURE__ */ React33__namespace.default.createElement(AvatarImage, { src: data.avatar, alt: data.name, className: "object-cover" }), /* @__PURE__ */ React33__namespace.default.createElement(AvatarFallback, { className: "text-xl" }, data.name.substring(0, 2).toUpperCase()))
1936
+ ), /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "flex-1 min-w-0 flex flex-col justify-center" }, /* @__PURE__ */ React33__namespace.default.createElement("h2", { className: chunk7Z5LLJ3A_js.cn(
1937
+ "text-2xl font-bold m-0 mb-1",
1938
+ themeName === "dark" ? "text-white" : "text-gray-900"
1939
+ ) }, data.name), data.title && /* @__PURE__ */ React33__namespace.default.createElement("div", { className: chunk7Z5LLJ3A_js.cn(
1940
+ "text-sm mb-2",
1941
+ themeName === "dark" ? "text-gray-400" : "text-gray-500"
1942
+ ) }, data.title), showSocial && renderSocialLinks())), showBio && data.bio && /* @__PURE__ */ React33__namespace.default.createElement("div", { className: chunk7Z5LLJ3A_js.cn(
1943
+ "mb-5 leading-relaxed text-sm",
1944
+ themeName === "dark" ? "text-gray-300" : "text-gray-600"
1945
+ ) }, /* @__PURE__ */ React33__namespace.default.createElement("p", null, data.bio)), showContacts && renderContacts(), data.customContent && /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "mt-5" }, data.customContent))));
2019
1946
  };
2020
1947
  var ProfileModal_default = ProfileModal;
2021
-
2022
- // src/components/popover/internal/Badge.tsx
2023
- var badgeTypeStyles = {
2024
- default: "bg-gray-100 text-gray-600",
2025
- primary: "bg-blue-50 text-blue-600",
2026
- success: "bg-green-50 text-green-600",
2027
- warning: "bg-yellow-50 text-yellow-600",
2028
- danger: "bg-red-50 text-red-600",
2029
- info: "bg-blue-50 text-blue-600"
2030
- };
2031
- var Badge2 = ({
2032
- label,
2033
- type = "default",
2034
- icon,
2035
- className = ""
2036
- }) => {
2037
- return /* @__PURE__ */ React.createElement("span", { className: chunk7Z5LLJ3A_js.cn(
2038
- "inline-flex items-center px-2 py-1 rounded text-xs font-medium",
2039
- badgeTypeStyles[type] || badgeTypeStyles.default,
2040
- className
2041
- ) }, icon && /* @__PURE__ */ React.createElement("span", { className: "mr-1 flex items-center" }, icon), /* @__PURE__ */ React.createElement("span", null, label));
2042
- };
2043
-
2044
- // src/components/popover/internal/BadgeList.tsx
2045
1948
  var BadgeList = ({
2046
1949
  badges,
2047
1950
  className = ""
2048
1951
  }) => {
2049
1952
  if (!badges || badges.length === 0) return null;
2050
- return /* @__PURE__ */ React.createElement("div", { className: chunk7Z5LLJ3A_js.cn("flex flex-wrap gap-2 mt-4", className) }, badges.map((badge, index) => /* @__PURE__ */ React.createElement(Badge2, { key: index, ...badge })));
1953
+ return /* @__PURE__ */ React33__namespace.default.createElement("div", { className: chunk7Z5LLJ3A_js.cn("flex flex-wrap gap-2 mt-4", className) }, badges.map((badge, index) => /* @__PURE__ */ React33__namespace.default.createElement(
1954
+ Badge,
1955
+ {
1956
+ key: index,
1957
+ variant: badge.type === "default" ? "default" : badge.type
1958
+ },
1959
+ badge.icon && /* @__PURE__ */ React33__namespace.default.createElement("span", { className: "mr-1" }, badge.icon),
1960
+ badge.label
1961
+ )));
2051
1962
  };
2052
1963
 
2053
- // src/components/popover/internal/Stat.tsx
1964
+ // src/features/profile/internal/Stat.tsx
2054
1965
  var Stat = ({
2055
1966
  label,
2056
1967
  value,
@@ -2060,7 +1971,7 @@ var Stat = ({
2060
1971
  return /* @__PURE__ */ React.createElement("div", { className: chunk7Z5LLJ3A_js.cn("flex flex-col items-center flex-1 text-center", className) }, icon && /* @__PURE__ */ React.createElement("span", { className: "mb-2 text-2xl text-gray-400" }, icon), /* @__PURE__ */ React.createElement("div", null, /* @__PURE__ */ React.createElement("div", { className: "text-lg font-semibold text-gray-800" }, value), /* @__PURE__ */ React.createElement("div", { className: "text-xs text-gray-400 mt-1" }, label)));
2061
1972
  };
2062
1973
 
2063
- // src/components/popover/internal/StatList.tsx
1974
+ // src/features/profile/internal/StatList.tsx
2064
1975
  var StatList = ({
2065
1976
  stats,
2066
1977
  className = ""
@@ -2069,7 +1980,7 @@ var StatList = ({
2069
1980
  return /* @__PURE__ */ React.createElement("div", { className: chunk7Z5LLJ3A_js.cn("flex justify-between mt-4 pt-4 border-t border-gray-100", className) }, stats.map((stat, index) => /* @__PURE__ */ React.createElement(Stat, { key: index, ...stat })));
2070
1981
  };
2071
1982
 
2072
- // src/components/popover/ProfileButton.tsx
1983
+ // src/features/profile/ProfileButton.tsx
2073
1984
  var exampleProfileData = {
2074
1985
  name: "\u5F20\u4E09",
2075
1986
  avatar: "https://randomuser.me/api/portraits/men/32.jpg",
@@ -2096,15 +2007,17 @@ var exampleProfileData = {
2096
2007
  { label: "\u7C89\u4E1D", value: 1024 },
2097
2008
  { label: "\u8BC4\u5206", value: "4.9" }
2098
2009
  ],
2099
- customContent: /* @__PURE__ */ React3__namespace.default.createElement("div", { style: { marginTop: 20, borderTop: "1px solid #eee", paddingTop: 15 } }, /* @__PURE__ */ React3__namespace.default.createElement("h3", { style: { fontSize: 16, marginBottom: 10 } }, "\u4E13\u4E1A\u6280\u80FD"), /* @__PURE__ */ React3__namespace.default.createElement("p", { style: { margin: 0, lineHeight: 1.6 } }, "\u7CBE\u901AReact\u3001Vue\u3001Angular\u7B49\u524D\u7AEF\u6846\u67B6\uFF0C\u719F\u6089TypeScript\u3001JavaScript\u3001CSS3\u3001HTML5\u7B49\u524D\u7AEF\u6280\u672F\u3002 \u6709\u4E30\u5BCC\u7684\u5927\u578B\u9879\u76EE\u5F00\u53D1\u7ECF\u9A8C\uFF0C\u80FD\u72EC\u7ACB\u8D1F\u8D23\u524D\u7AEF\u67B6\u6784\u8BBE\u8BA1\u3002"))
2010
+ customContent: /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "mt-5 border-t border-gray-100 pt-4" }, /* @__PURE__ */ React33__namespace.default.createElement("h3", { className: "text-sm font-semibold mb-2" }, "\u4E13\u4E1A\u6280\u80FD"), /* @__PURE__ */ React33__namespace.default.createElement("p", { className: "text-sm text-gray-600 leading-relaxed" }, "\u7CBE\u901AReact\u3001Vue\u3001Angular\u7B49\u524D\u7AEF\u6846\u67B6\uFF0C\u719F\u6089TypeScript\u3001JavaScript\u3001CSS3\u3001HTML5\u7B49\u524D\u7AEF\u6280\u672F\u3002 \u6709\u4E30\u5BCC\u7684\u5927\u578B\u9879\u76EE\u5F00\u53D1\u7ECF\u9A8C\uFF0C\u80FD\u72EC\u7ACB\u8D1F\u8D23\u524D\u7AEF\u67B6\u6784\u8BBE\u8BA1\u3002"))
2100
2011
  };
2101
2012
  var ProfileButton = ({
2102
2013
  data = exampleProfileData,
2103
2014
  buttonText = "\u67E5\u770B\u4E2A\u4EBA\u4FE1\u606F",
2104
- buttonClassName = "",
2015
+ variant = "default",
2016
+ size = "default",
2017
+ className = "",
2105
2018
  modalTheme = "light"
2106
2019
  }) => {
2107
- const [isModalOpen, setIsModalOpen] = React3.useState(false);
2020
+ const [isModalOpen, setIsModalOpen] = React33.useState(false);
2108
2021
  const openModal = () => setIsModalOpen(true);
2109
2022
  const closeModal = () => setIsModalOpen(false);
2110
2023
  const handleContactClick = (type, value) => {
@@ -2114,7 +2027,16 @@ var ProfileButton = ({
2114
2027
  window.open(`tel:${value}`);
2115
2028
  }
2116
2029
  };
2117
- return /* @__PURE__ */ React3__namespace.default.createElement(React3__namespace.default.Fragment, null, /* @__PURE__ */ React3__namespace.default.createElement("button", { onClick: openModal, className: buttonClassName }, buttonText), /* @__PURE__ */ React3__namespace.default.createElement(
2030
+ return /* @__PURE__ */ React33__namespace.default.createElement(React33__namespace.default.Fragment, null, /* @__PURE__ */ React33__namespace.default.createElement(
2031
+ Button,
2032
+ {
2033
+ variant,
2034
+ size,
2035
+ onClick: openModal,
2036
+ className
2037
+ },
2038
+ buttonText
2039
+ ), /* @__PURE__ */ React33__namespace.default.createElement(
2118
2040
  ProfileModal_default,
2119
2041
  {
2120
2042
  isOpen: isModalOpen,
@@ -2125,11 +2047,10 @@ var ProfileButton = ({
2125
2047
  onSocialLinkClick: (url) => window.open(url, "_blank")
2126
2048
  },
2127
2049
  data.customContent,
2128
- data.badges && /* @__PURE__ */ React3__namespace.default.createElement(BadgeList, { badges: data.badges }),
2129
- data.stats && /* @__PURE__ */ React3__namespace.default.createElement(StatList, { stats: data.stats })
2050
+ data.badges && /* @__PURE__ */ React33__namespace.default.createElement(BadgeList, { badges: data.badges }),
2051
+ data.stats && /* @__PURE__ */ React33__namespace.default.createElement(StatList, { stats: data.stats })
2130
2052
  ));
2131
2053
  };
2132
- var ProfileButton_default = ProfileButton;
2133
2054
  var AutoOpenModal = ({
2134
2055
  data,
2135
2056
  delay = 500,
@@ -2137,8 +2058,8 @@ var AutoOpenModal = ({
2137
2058
  themeName = "light",
2138
2059
  onClose
2139
2060
  }) => {
2140
- const [isModalOpen, setIsModalOpen] = React3.useState(false);
2141
- React3.useEffect(() => {
2061
+ const [isModalOpen, setIsModalOpen] = React33.useState(false);
2062
+ React33.useEffect(() => {
2142
2063
  const timer = setTimeout(() => {
2143
2064
  setIsModalOpen(true);
2144
2065
  }, delay);
@@ -2157,7 +2078,7 @@ var AutoOpenModal = ({
2157
2078
  window.open(`tel:${value}`);
2158
2079
  }
2159
2080
  };
2160
- return /* @__PURE__ */ React3__namespace.default.createElement(
2081
+ return /* @__PURE__ */ React33__namespace.default.createElement(
2161
2082
  ProfileModal_default,
2162
2083
  {
2163
2084
  isOpen: isModalOpen,
@@ -2167,11 +2088,126 @@ var AutoOpenModal = ({
2167
2088
  onContactClick: handleContactClick,
2168
2089
  onSocialLinkClick: (url) => window.open(url, "_blank")
2169
2090
  },
2170
- data.badges && /* @__PURE__ */ React3__namespace.default.createElement(BadgeList, { badges: data.badges }),
2171
- data.stats && /* @__PURE__ */ React3__namespace.default.createElement(StatList, { stats: data.stats })
2091
+ data.badges && /* @__PURE__ */ React33__namespace.default.createElement(BadgeList, { badges: data.badges }),
2092
+ data.stats && /* @__PURE__ */ React33__namespace.default.createElement(StatList, { stats: data.stats })
2172
2093
  );
2173
2094
  };
2174
- var AutoOpenModal_default = AutoOpenModal;
2095
+ var sizeMap = {
2096
+ small: "h-8 w-8",
2097
+ medium: "h-12 w-12",
2098
+ large: "h-16 w-16"
2099
+ };
2100
+ var moodColors = {
2101
+ online: "bg-green-500",
2102
+ offline: "bg-gray-500",
2103
+ away: "bg-yellow-500"
2104
+ };
2105
+ var EnhancedAvatar = ({
2106
+ src,
2107
+ name,
2108
+ size = "medium",
2109
+ mood = "online",
2110
+ statusText,
2111
+ onClick,
2112
+ className
2113
+ }) => {
2114
+ const sizeClass = typeof size === "string" ? sizeMap[size] : "";
2115
+ const customSizeStyle = typeof size === "number" ? { width: size, height: size } : {};
2116
+ return /* @__PURE__ */ React33__namespace.default.createElement("div", { className: chunk7Z5LLJ3A_js.cn("relative inline-block", className), onClick }, /* @__PURE__ */ React33__namespace.default.createElement(Avatar, { className: chunk7Z5LLJ3A_js.cn(sizeClass, onClick && "cursor-pointer hover:ring-2 hover:ring-blue-500 transition-all"), style: customSizeStyle }, src && /* @__PURE__ */ React33__namespace.default.createElement(AvatarImage, { src, alt: name || "Avatar", className: "object-cover" }), /* @__PURE__ */ React33__namespace.default.createElement(AvatarFallback, { className: "bg-primary/10 text-primary-foreground" }, name ? name.substring(0, 2).toUpperCase() : "??")), mood && /* @__PURE__ */ React33__namespace.default.createElement(
2117
+ "div",
2118
+ {
2119
+ className: chunk7Z5LLJ3A_js.cn(
2120
+ "absolute bottom-0 right-0 rounded-full border-2 border-white",
2121
+ moodColors[mood],
2122
+ typeof size === "number" ? size > 60 ? "h-4 w-4" : "h-3 w-3" : size === "large" ? "h-4 w-4" : "h-3 w-3"
2123
+ )
2124
+ }
2125
+ ), statusText && /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "absolute -bottom-6 left-1/2 transform -translate-x-1/2 whitespace-nowrap" }, /* @__PURE__ */ React33__namespace.default.createElement("span", { className: "text-xs text-muted-foreground" }, statusText)));
2126
+ };
2127
+ var About = ({
2128
+ timelineConfig,
2129
+ collisionBallsConfig
2130
+ }) => {
2131
+ return /* @__PURE__ */ React33__namespace.default.createElement("section", { id: "about", className: "py-16 bg-white" }, /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "container mx-auto px-4" }, /* @__PURE__ */ React33__namespace.default.createElement("h2", { className: "text-3xl font-bold text-center mb-12" }, "\u5173\u4E8E\u6211"), /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "grid grid-cols-1 lg:grid-cols-2 gap-12" }, /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "bg-white rounded-lg shadow-lg p-6" }, /* @__PURE__ */ React33__namespace.default.createElement("h3", { className: "text-2xl font-semibold mb-6" }, "\u4E2A\u4EBA\u7ECF\u5386"), /* @__PURE__ */ React33__namespace.default.createElement(Timeline, { items: timelineConfig.items })), /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "bg-white rounded-lg shadow-lg p-6" }, /* @__PURE__ */ React33__namespace.default.createElement("h3", { className: "text-2xl font-semibold mb-6" }, "\u6280\u80FD\u5C55\u793A"), /* @__PURE__ */ React33__namespace.default.createElement("div", { style: { height: "400px", position: "relative" } }, /* @__PURE__ */ React33__namespace.default.createElement(CollisionBalls, { collisionBallsConfig }))))));
2132
+ };
2133
+ var About_default = About;
2134
+ var Contact = () => {
2135
+ const [formData, setFormData] = React33.useState({
2136
+ name: "",
2137
+ email: "",
2138
+ message: ""
2139
+ });
2140
+ const [isSubmitting, setIsSubmitting] = React33.useState(false);
2141
+ const [submitStatus, setSubmitStatus] = React33.useState("idle");
2142
+ const handleChange = (e) => {
2143
+ const { name, value } = e.target;
2144
+ setFormData((prev) => ({
2145
+ ...prev,
2146
+ [name]: value
2147
+ }));
2148
+ };
2149
+ const handleSubmit = async (e) => {
2150
+ e.preventDefault();
2151
+ setIsSubmitting(true);
2152
+ setSubmitStatus("idle");
2153
+ try {
2154
+ await new Promise((resolve) => setTimeout(resolve, 1e3));
2155
+ setSubmitStatus("success");
2156
+ setFormData({ name: "", email: "", message: "" });
2157
+ } catch (error) {
2158
+ setSubmitStatus("error");
2159
+ } finally {
2160
+ setIsSubmitting(false);
2161
+ }
2162
+ };
2163
+ return /* @__PURE__ */ React33__namespace.default.createElement("section", { id: "contact", className: "py-16 bg-gray-50" }, /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "max-w-4xl mx-auto px-4 sm:px-6 lg:px-8" }, /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "text-center mb-12" }, /* @__PURE__ */ React33__namespace.default.createElement("h2", { className: "text-3xl font-bold text-gray-900 sm:text-4xl" }, "\u8054\u7CFB\u6211"), /* @__PURE__ */ React33__namespace.default.createElement("p", { className: "mt-4 text-lg text-gray-600" }, "\u6709\u4EFB\u4F55\u95EE\u9898\u6216\u5EFA\u8BAE\uFF1F\u8BF7\u968F\u65F6\u8054\u7CFB\u6211")), /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "bg-white rounded-lg shadow-xl p-6 sm:p-8" }, /* @__PURE__ */ React33__namespace.default.createElement("form", { onSubmit: handleSubmit, className: "space-y-6" }, /* @__PURE__ */ React33__namespace.default.createElement("div", null, /* @__PURE__ */ React33__namespace.default.createElement("label", { htmlFor: "name", className: "block text-sm font-medium text-gray-700" }, "\u59D3\u540D"), /* @__PURE__ */ React33__namespace.default.createElement(
2164
+ "input",
2165
+ {
2166
+ type: "text",
2167
+ name: "name",
2168
+ id: "name",
2169
+ value: formData.name,
2170
+ onChange: handleChange,
2171
+ required: true,
2172
+ className: "mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 sm:text-sm",
2173
+ placeholder: "\u8BF7\u8F93\u5165\u60A8\u7684\u59D3\u540D"
2174
+ }
2175
+ )), /* @__PURE__ */ React33__namespace.default.createElement("div", null, /* @__PURE__ */ React33__namespace.default.createElement("label", { htmlFor: "email", className: "block text-sm font-medium text-gray-700" }, "\u90AE\u7BB1"), /* @__PURE__ */ React33__namespace.default.createElement(
2176
+ "input",
2177
+ {
2178
+ type: "email",
2179
+ name: "email",
2180
+ id: "email",
2181
+ value: formData.email,
2182
+ onChange: handleChange,
2183
+ required: true,
2184
+ className: "mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 sm:text-sm",
2185
+ placeholder: "\u8BF7\u8F93\u5165\u60A8\u7684\u90AE\u7BB1"
2186
+ }
2187
+ )), /* @__PURE__ */ React33__namespace.default.createElement("div", null, /* @__PURE__ */ React33__namespace.default.createElement("label", { htmlFor: "message", className: "block text-sm font-medium text-gray-700" }, "\u6D88\u606F"), /* @__PURE__ */ React33__namespace.default.createElement(
2188
+ "textarea",
2189
+ {
2190
+ name: "message",
2191
+ id: "message",
2192
+ rows: 4,
2193
+ value: formData.message,
2194
+ onChange: handleChange,
2195
+ required: true,
2196
+ className: "mt-1 block w-full rounded-md border-gray-300 shadow-sm focus:border-blue-500 focus:ring-blue-500 sm:text-sm",
2197
+ placeholder: "\u8BF7\u8F93\u5165\u60A8\u7684\u6D88\u606F"
2198
+ }
2199
+ )), /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "flex items-center justify-end" }, /* @__PURE__ */ React33__namespace.default.createElement(
2200
+ "button",
2201
+ {
2202
+ type: "submit",
2203
+ disabled: isSubmitting,
2204
+ className: `inline-flex justify-center py-2 px-4 border border-transparent shadow-sm text-sm font-medium rounded-md text-white
2205
+ ${isSubmitting ? "bg-blue-400 cursor-not-allowed" : "bg-blue-600 hover:bg-blue-700 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500"}`
2206
+ },
2207
+ isSubmitting ? "\u53D1\u9001\u4E2D..." : "\u53D1\u9001\u6D88\u606F"
2208
+ )), submitStatus === "success" && /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "rounded-md bg-green-50 p-4" }, /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "flex" }, /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "flex-shrink-0" }, /* @__PURE__ */ React33__namespace.default.createElement("svg", { className: "h-5 w-5 text-green-400", viewBox: "0 0 20 20", fill: "currentColor" }, /* @__PURE__ */ React33__namespace.default.createElement("path", { fillRule: "evenodd", d: "M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z", clipRule: "evenodd" }))), /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "ml-3" }, /* @__PURE__ */ React33__namespace.default.createElement("p", { className: "text-sm font-medium text-green-800" }, "\u6D88\u606F\u5DF2\u6210\u529F\u53D1\u9001\uFF01")))), submitStatus === "error" && /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "rounded-md bg-red-50 p-4" }, /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "flex" }, /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "flex-shrink-0" }, /* @__PURE__ */ React33__namespace.default.createElement("svg", { className: "h-5 w-5 text-red-400", viewBox: "0 0 20 20", fill: "currentColor" }, /* @__PURE__ */ React33__namespace.default.createElement("path", { fillRule: "evenodd", d: "M10 18a8 8 0 100-16 8 8 0 000 16zM8.707 7.293a1 1 0 00-1.414 1.414L8.586 10l-1.293 1.293a1 1 0 101.414 1.414L10 11.414l1.293 1.293a1 1 0 001.414-1.414L11.414 10l1.293-1.293a1 1 0 00-1.414-1.414L10 8.586 8.707 7.293z", clipRule: "evenodd" }))), /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "ml-3" }, /* @__PURE__ */ React33__namespace.default.createElement("p", { className: "text-sm font-medium text-red-800" }, "\u53D1\u9001\u5931\u8D25\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5")))))), /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "mt-12 grid grid-cols-1 gap-6 sm:grid-cols-2 lg:grid-cols-3" }, /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "bg-white rounded-lg shadow-lg p-6 text-center" }, /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "text-blue-600 mb-4" }, /* @__PURE__ */ React33__namespace.default.createElement("svg", { className: "h-8 w-8 mx-auto", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React33__namespace.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: "2", d: "M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z" }))), /* @__PURE__ */ React33__namespace.default.createElement("h3", { className: "text-lg font-medium text-gray-900" }, "\u90AE\u7BB1"), /* @__PURE__ */ React33__namespace.default.createElement("p", { className: "mt-2 text-gray-600" }, "your.email@example.com")), /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "bg-white rounded-lg shadow-lg p-6 text-center" }, /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "text-blue-600 mb-4" }, /* @__PURE__ */ React33__namespace.default.createElement("svg", { className: "h-8 w-8 mx-auto", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React33__namespace.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: "2", d: "M3 5a2 2 0 012-2h3.28a1 1 0 01.948.684l1.498 4.493a1 1 0 01-.502 1.21l-2.257 1.13a11.042 11.042 0 005.516 5.516l1.13-2.257a1 1 0 011.21-.502l4.493 1.498a1 1 0 01.684.949V19a2 2 0 01-2 2h-1C9.716 21 3 14.284 3 6V5z" }))), /* @__PURE__ */ React33__namespace.default.createElement("h3", { className: "text-lg font-medium text-gray-900" }, "\u7535\u8BDD"), /* @__PURE__ */ React33__namespace.default.createElement("p", { className: "mt-2 text-gray-600" }, "+86 123 4567 8900")), /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "bg-white rounded-lg shadow-lg p-6 text-center" }, /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "text-blue-600 mb-4" }, /* @__PURE__ */ React33__namespace.default.createElement("svg", { className: "h-8 w-8 mx-auto", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React33__namespace.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: "2", d: "M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z" }), /* @__PURE__ */ React33__namespace.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: "2", d: "M15 11a3 3 0 11-6 0 3 3 0 016 0z" }))), /* @__PURE__ */ React33__namespace.default.createElement("h3", { className: "text-lg font-medium text-gray-900" }, "\u5730\u5740"), /* @__PURE__ */ React33__namespace.default.createElement("p", { className: "mt-2 text-gray-600" }, "\u4E2D\u56FD\uFF0C\u5317\u4EAC")))));
2209
+ };
2210
+ var Contact_default = Contact;
2175
2211
  var NavigationItemComponent = ({
2176
2212
  item,
2177
2213
  direction,
@@ -2193,7 +2229,7 @@ var NavigationItemComponent = ({
2193
2229
  const stateClasses = isActive ? "bg-blue-500 text-white shadow-lg" : item.isExternal ? "text-gray-700 hover:bg-purple-50 hover:text-purple-600 border border-purple-200" : "text-gray-700 hover:bg-blue-50 hover:text-blue-600";
2194
2230
  return `${baseClasses} ${directionClasses} ${stateClasses}`;
2195
2231
  };
2196
- return /* @__PURE__ */ React3__namespace.default.createElement(
2232
+ return /* @__PURE__ */ React33__namespace.default.createElement(
2197
2233
  "a",
2198
2234
  {
2199
2235
  href: item.href,
@@ -2202,9 +2238,9 @@ var NavigationItemComponent = ({
2202
2238
  rel: item.isExternal ? "noopener noreferrer" : void 0,
2203
2239
  className: getItemClasses()
2204
2240
  },
2205
- item.icon && /* @__PURE__ */ React3__namespace.default.createElement("span", { className: "flex-shrink-0" }, item.icon),
2206
- /* @__PURE__ */ React3__namespace.default.createElement("span", { className: `font-medium ${direction === "vertical" ? "text-sm" : "text-xs"}` }, item.label),
2207
- item.isExternal && /* @__PURE__ */ React3__namespace.default.createElement(
2241
+ item.icon && /* @__PURE__ */ React33__namespace.default.createElement("span", { className: "flex-shrink-0" }, item.icon),
2242
+ /* @__PURE__ */ React33__namespace.default.createElement("span", { className: `font-medium ${direction === "vertical" ? "text-sm" : "text-xs"}` }, item.label),
2243
+ item.isExternal && /* @__PURE__ */ React33__namespace.default.createElement(
2208
2244
  "svg",
2209
2245
  {
2210
2246
  className: "w-3 h-3 opacity-60 group-hover:opacity-100 transition-opacity",
@@ -2212,7 +2248,7 @@ var NavigationItemComponent = ({
2212
2248
  stroke: "currentColor",
2213
2249
  viewBox: "0 0 24 24"
2214
2250
  },
2215
- /* @__PURE__ */ React3__namespace.default.createElement(
2251
+ /* @__PURE__ */ React33__namespace.default.createElement(
2216
2252
  "path",
2217
2253
  {
2218
2254
  strokeLinecap: "round",
@@ -2222,12 +2258,12 @@ var NavigationItemComponent = ({
2222
2258
  }
2223
2259
  )
2224
2260
  ),
2225
- direction === "vertical" && isActive && /* @__PURE__ */ React3__namespace.default.createElement("div", { className: "absolute left-1 top-1/2 transform -translate-y-1/2 w-1 h-6 bg-white rounded-full" })
2261
+ direction === "vertical" && isActive && /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "absolute left-1 top-1/2 transform -translate-y-1/2 w-1 h-6 bg-white rounded-full" })
2226
2262
  );
2227
2263
  };
2228
2264
  var NavigationItem_default = NavigationItemComponent;
2229
2265
 
2230
- // src/components/navigation/Navigation.tsx
2266
+ // src/features/navigation/Navigation.tsx
2231
2267
  var Navigation = ({
2232
2268
  config,
2233
2269
  isOpen,
@@ -2282,14 +2318,14 @@ var Navigation = ({
2282
2318
  onItemClick?.(item);
2283
2319
  };
2284
2320
  if (!isOpen) return null;
2285
- return /* @__PURE__ */ React3__namespace.default.createElement("nav", { className: `${getContainerClasses()} ${className}` }, /* @__PURE__ */ React3__namespace.default.createElement("div", { className: getContentClasses() }, logo && /* @__PURE__ */ React3__namespace.default.createElement("div", { className: "flex items-center justify-center mb-4" }, /* @__PURE__ */ React3__namespace.default.createElement(
2321
+ return /* @__PURE__ */ React33__namespace.default.createElement("nav", { className: `${getContainerClasses()} ${className}` }, /* @__PURE__ */ React33__namespace.default.createElement("div", { className: getContentClasses() }, logo && /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "flex items-center justify-center mb-4" }, /* @__PURE__ */ React33__namespace.default.createElement(
2286
2322
  "img",
2287
2323
  {
2288
2324
  src: logo.src,
2289
2325
  alt: logo.alt || "Logo",
2290
2326
  className: "h-8 w-auto"
2291
2327
  }
2292
- )), direction === "vertical" && /* @__PURE__ */ React3__namespace.default.createElement("div", { className: "h-12 flex-shrink-0" }), /* @__PURE__ */ React3__namespace.default.createElement("div", { className: getItemsListClasses() }, items.map((item) => /* @__PURE__ */ React3__namespace.default.createElement(
2328
+ )), direction === "vertical" && /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "h-12 flex-shrink-0" }), /* @__PURE__ */ React33__namespace.default.createElement("div", { className: getItemsListClasses() }, items.map((item) => /* @__PURE__ */ React33__namespace.default.createElement(
2293
2329
  NavigationItem_default,
2294
2330
  {
2295
2331
  key: item.id,
@@ -2298,14 +2334,14 @@ var Navigation = ({
2298
2334
  isActive: activeItemId === item.id,
2299
2335
  onClick: handleItemClick
2300
2336
  }
2301
- ))), avatar && direction === "vertical" && /* @__PURE__ */ React3__namespace.default.createElement("div", { className: "flex items-center justify-center mt-auto pt-4" }, /* @__PURE__ */ React3__namespace.default.createElement(
2337
+ ))), avatar && direction === "vertical" && /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "flex items-center justify-center mt-auto pt-4" }, /* @__PURE__ */ React33__namespace.default.createElement(
2302
2338
  "img",
2303
2339
  {
2304
2340
  src: avatar.src,
2305
2341
  alt: avatar.alt || "Avatar",
2306
2342
  className: "w-10 h-10 rounded-full border-2 border-gray-200"
2307
2343
  }
2308
- )), avatar && direction === "horizontal" && /* @__PURE__ */ React3__namespace.default.createElement("div", { className: "flex items-center" }, /* @__PURE__ */ React3__namespace.default.createElement(
2344
+ )), avatar && direction === "horizontal" && /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "flex items-center" }, /* @__PURE__ */ React33__namespace.default.createElement(
2309
2345
  "img",
2310
2346
  {
2311
2347
  src: avatar.src,
@@ -2334,7 +2370,7 @@ var NavigationToggle = ({
2334
2370
  return "top-4 left-4";
2335
2371
  }
2336
2372
  };
2337
- return /* @__PURE__ */ React3__namespace.default.createElement(
2373
+ return /* @__PURE__ */ React33__namespace.default.createElement(
2338
2374
  "button",
2339
2375
  {
2340
2376
  onClick,
@@ -2350,7 +2386,7 @@ var NavigationToggle = ({
2350
2386
  `,
2351
2387
  "aria-label": isOpen ? "\u5173\u95ED\u5BFC\u822A\u680F" : "\u6253\u5F00\u5BFC\u822A\u680F"
2352
2388
  },
2353
- /* @__PURE__ */ React3__namespace.default.createElement("div", { className: "w-5 h-5 flex flex-col justify-center items-center" }, /* @__PURE__ */ React3__namespace.default.createElement(
2389
+ /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "w-5 h-5 flex flex-col justify-center items-center" }, /* @__PURE__ */ React33__namespace.default.createElement(
2354
2390
  "span",
2355
2391
  {
2356
2392
  className: `
@@ -2359,7 +2395,7 @@ var NavigationToggle = ({
2359
2395
  ${isOpen ? "rotate-45 translate-y-0.5" : ""}
2360
2396
  `
2361
2397
  }
2362
- ), /* @__PURE__ */ React3__namespace.default.createElement(
2398
+ ), /* @__PURE__ */ React33__namespace.default.createElement(
2363
2399
  "span",
2364
2400
  {
2365
2401
  className: `
@@ -2368,7 +2404,7 @@ var NavigationToggle = ({
2368
2404
  ${isOpen ? "opacity-0 scale-0" : "opacity-100 scale-100"}
2369
2405
  `
2370
2406
  }
2371
- ), /* @__PURE__ */ React3__namespace.default.createElement(
2407
+ ), /* @__PURE__ */ React33__namespace.default.createElement(
2372
2408
  "span",
2373
2409
  {
2374
2410
  className: `
@@ -2391,21 +2427,21 @@ var FloatingMenu = ({
2391
2427
  triggerClassName = "",
2392
2428
  zIndex = 1e3
2393
2429
  }) => {
2394
- const [position, setPosition] = React3.useState(initialPosition);
2395
- const [isMenuOpen, setIsMenuOpen] = React3.useState(defaultOpen);
2396
- const [menuDirection, setMenuDirection] = React3.useState("right");
2397
- const [isDragging, setIsDragging] = React3.useState(false);
2398
- const [dragOffset, setDragOffset] = React3.useState({ x: 0, y: 0 });
2399
- const containerRef = React3.useRef(null);
2400
- const [mounted, setMounted] = React3.useState(false);
2401
- const [hasDragged, setHasDragged] = React3.useState(false);
2402
- const dragTimerRef = React3.useRef(null);
2403
- const mouseDownPosRef = React3.useRef(null);
2404
- React3.useEffect(() => {
2430
+ const [position, setPosition] = React33.useState(initialPosition);
2431
+ const [isMenuOpen, setIsMenuOpen] = React33.useState(defaultOpen);
2432
+ const [menuDirection, setMenuDirection] = React33.useState("right");
2433
+ const [isDragging, setIsDragging] = React33.useState(false);
2434
+ const [dragOffset, setDragOffset] = React33.useState({ x: 0, y: 0 });
2435
+ const containerRef = React33.useRef(null);
2436
+ const [mounted, setMounted] = React33.useState(false);
2437
+ const [hasDragged, setHasDragged] = React33.useState(false);
2438
+ const dragTimerRef = React33.useRef(null);
2439
+ const mouseDownPosRef = React33.useRef(null);
2440
+ React33.useEffect(() => {
2405
2441
  setMounted(true);
2406
2442
  return () => setMounted(false);
2407
2443
  }, []);
2408
- React3.useEffect(() => {
2444
+ React33.useEffect(() => {
2409
2445
  if (!mounted || !containerRef.current) return;
2410
2446
  const updateMenuDirection = () => {
2411
2447
  const rect = containerRef.current?.getBoundingClientRect();
@@ -2434,7 +2470,7 @@ var FloatingMenu = ({
2434
2470
  setHasDragged(false);
2435
2471
  setIsDragging(true);
2436
2472
  };
2437
- React3.useEffect(() => {
2473
+ React33.useEffect(() => {
2438
2474
  if (!isDragging) return;
2439
2475
  const handleMouseMove = (e) => {
2440
2476
  if (mouseDownPosRef.current) {
@@ -2470,7 +2506,7 @@ var FloatingMenu = ({
2470
2506
  document.removeEventListener("mouseup", handleMouseUp);
2471
2507
  };
2472
2508
  }, [isDragging, dragOffset]);
2473
- React3.useEffect(() => {
2509
+ React33.useEffect(() => {
2474
2510
  return () => {
2475
2511
  if (dragTimerRef.current) {
2476
2512
  window.clearTimeout(dragTimerRef.current);
@@ -2484,7 +2520,7 @@ var FloatingMenu = ({
2484
2520
  }
2485
2521
  setIsMenuOpen(!isMenuOpen);
2486
2522
  };
2487
- React3.useEffect(() => {
2523
+ React33.useEffect(() => {
2488
2524
  if (!isMenuOpen) return;
2489
2525
  const handleClickOutside = (e) => {
2490
2526
  if (containerRef.current && !containerRef.current.contains(e.target)) {
@@ -2496,7 +2532,7 @@ var FloatingMenu = ({
2496
2532
  document.removeEventListener("mousedown", handleClickOutside);
2497
2533
  };
2498
2534
  }, [isMenuOpen]);
2499
- React3.useEffect(() => {
2535
+ React33.useEffect(() => {
2500
2536
  if (!mounted) return;
2501
2537
  const checkBoundaries = () => {
2502
2538
  const windowWidth = window.innerWidth;
@@ -2516,8 +2552,8 @@ var FloatingMenu = ({
2516
2552
  };
2517
2553
  }, [mounted]);
2518
2554
  if (!mounted) return null;
2519
- return ReactDOM.createPortal(
2520
- /* @__PURE__ */ React3__namespace.default.createElement(
2555
+ return reactDom.createPortal(
2556
+ /* @__PURE__ */ React33__namespace.default.createElement(
2521
2557
  "div",
2522
2558
  {
2523
2559
  ref: containerRef,
@@ -2528,7 +2564,7 @@ var FloatingMenu = ({
2528
2564
  zIndex
2529
2565
  }
2530
2566
  },
2531
- /* @__PURE__ */ React3__namespace.default.createElement(
2567
+ /* @__PURE__ */ React33__namespace.default.createElement(
2532
2568
  "div",
2533
2569
  {
2534
2570
  className: `
@@ -2546,7 +2582,7 @@ var FloatingMenu = ({
2546
2582
  },
2547
2583
  trigger
2548
2584
  ),
2549
- isMenuOpen && /* @__PURE__ */ React3__namespace.default.createElement(
2585
+ isMenuOpen && /* @__PURE__ */ React33__namespace.default.createElement(
2550
2586
  "div",
2551
2587
  {
2552
2588
  className: `
@@ -2575,80 +2611,10 @@ var FloatingMenu = ({
2575
2611
  );
2576
2612
  };
2577
2613
  var FloatingMenu_default = FloatingMenu;
2578
- function buildGridColsClasses(columns) {
2579
- return [
2580
- "grid-cols-1",
2581
- // 默认单列
2582
- columns.sm ? `sm:grid-cols-${columns.sm}` : "",
2583
- columns.md ? `md:grid-cols-${columns.md}` : "md:grid-cols-2",
2584
- columns.lg ? `lg:grid-cols-${columns.lg}` : "lg:grid-cols-3",
2585
- columns.xl ? `xl:grid-cols-${columns.xl}` : ""
2586
- ].filter(Boolean).join(" ");
2587
- }
2588
- function getGapClassName(gap) {
2589
- const gapClasses = {
2590
- sm: "gap-3",
2591
- md: "gap-6",
2592
- lg: "gap-8",
2593
- xl: "gap-10"
2594
- };
2595
- return gapClasses[gap];
2596
- }
2597
- function Grid({
2598
- items,
2599
- renderItem,
2600
- columns = { md: 2, lg: 3 },
2601
- gap = "md",
2602
- className = "",
2603
- style
2604
- }) {
2605
- const gridColsClasses = buildGridColsClasses(columns);
2606
- const gapClass = getGapClassName(gap);
2607
- return /* @__PURE__ */ React3__namespace.default.createElement(
2608
- "div",
2609
- {
2610
- className: `grid ${gridColsClasses} ${gapClass} ${className}`.trim(),
2611
- style
2612
- },
2613
- items.map((item, index) => /* @__PURE__ */ React3__namespace.default.createElement("div", { key: item.id }, renderItem(item, index)))
2614
- );
2615
- }
2616
- var Avatar3 = ({
2617
- src,
2618
- size = "medium",
2619
- mood = "online",
2620
- statusText,
2621
- onClick
2622
- }) => {
2623
- const sizeClasses = {
2624
- small: "w-8 h-8",
2625
- medium: "w-12 h-12",
2626
- large: "w-16 h-16"
2627
- };
2628
- const moodColors = {
2629
- online: "bg-green-500",
2630
- offline: "bg-gray-500",
2631
- away: "bg-yellow-500"
2632
- };
2633
- return /* @__PURE__ */ React3__namespace.default.createElement("div", { className: "relative inline-block", onClick }, /* @__PURE__ */ React3__namespace.default.createElement(
2634
- "img",
2635
- {
2636
- src: src || "/images/avatar.jpg",
2637
- alt: "User Avatar",
2638
- className: `${sizeClasses[size]} rounded-full object-cover border-2 border-white shadow-md cursor-pointer hover:ring-2 hover:ring-blue-500 transition-all duration-200`
2639
- }
2640
- ), /* @__PURE__ */ React3__namespace.default.createElement(
2641
- "div",
2642
- {
2643
- className: `absolute bottom-0 right-0 w-3 h-3 rounded-full border-2 border-white ${moodColors[mood]}`
2644
- }
2645
- ), statusText && /* @__PURE__ */ React3__namespace.default.createElement("div", { className: "absolute -bottom-6 left-1/2 transform -translate-x-1/2 whitespace-nowrap" }, /* @__PURE__ */ React3__namespace.default.createElement("span", { className: "text-xs text-gray-600" }, statusText)));
2646
- };
2647
- var Avatar_default = Avatar3;
2648
2614
 
2649
2615
  Object.defineProperty(exports, "SearchBox", {
2650
2616
  enumerable: true,
2651
- get: function () { return chunkNRYHBGU6_js.SearchBox; }
2617
+ get: function () { return chunkIEA55H3G_js.SearchBox; }
2652
2618
  });
2653
2619
  Object.defineProperty(exports, "arrayUtils", {
2654
2620
  enumerable: true,
@@ -2726,6 +2692,7 @@ Object.defineProperty(exports, "logger", {
2726
2692
  enumerable: true,
2727
2693
  get: function () { return chunk6PRFP5EG_js.logger; }
2728
2694
  });
2695
+ exports.About = About_default;
2729
2696
  exports.AlertDialog = AlertDialog;
2730
2697
  exports.AlertDialogAction = AlertDialogAction;
2731
2698
  exports.AlertDialogCancel = AlertDialogCancel;
@@ -2737,8 +2704,8 @@ exports.AlertDialogOverlay = AlertDialogOverlay;
2737
2704
  exports.AlertDialogPortal = AlertDialogPortal;
2738
2705
  exports.AlertDialogTitle = AlertDialogTitle;
2739
2706
  exports.AlertDialogTrigger = AlertDialogTrigger;
2740
- exports.AutoOpenModal = AutoOpenModal_default;
2741
- exports.Avatar = Avatar_default;
2707
+ exports.AutoOpenModal = AutoOpenModal;
2708
+ exports.Avatar = Avatar;
2742
2709
  exports.AvatarFallback = AvatarFallback;
2743
2710
  exports.AvatarImage = AvatarImage;
2744
2711
  exports.BackgroundRemover = BackgroundRemover;
@@ -2750,7 +2717,8 @@ exports.CardDescription = CardDescription;
2750
2717
  exports.CardFooter = CardFooter;
2751
2718
  exports.CardHeader = CardHeader;
2752
2719
  exports.CardTitle = CardTitle;
2753
- exports.CollisionBalls = CollisionBalls_default;
2720
+ exports.CollisionBalls = CollisionBalls;
2721
+ exports.Contact = Contact_default;
2754
2722
  exports.Dialog = Dialog;
2755
2723
  exports.DialogClose = DialogClose;
2756
2724
  exports.DialogContent = DialogContent;
@@ -2776,6 +2744,7 @@ exports.DropdownMenuSub = DropdownMenuSub;
2776
2744
  exports.DropdownMenuSubContent = DropdownMenuSubContent;
2777
2745
  exports.DropdownMenuSubTrigger = DropdownMenuSubTrigger;
2778
2746
  exports.DropdownMenuTrigger = DropdownMenuTrigger;
2747
+ exports.EnhancedAvatar = EnhancedAvatar;
2779
2748
  exports.FloatingMenu = FloatingMenu_default;
2780
2749
  exports.Grid = Grid;
2781
2750
  exports.Input = Input;
@@ -2788,8 +2757,8 @@ exports.Popover = Popover;
2788
2757
  exports.PopoverAnchor = PopoverAnchor;
2789
2758
  exports.PopoverContent = PopoverContent;
2790
2759
  exports.PopoverTrigger = PopoverTrigger;
2791
- exports.ProfileButton = ProfileButton_default;
2792
- exports.ProfileModal = ProfileModal_default;
2760
+ exports.ProfileButton = ProfileButton;
2761
+ exports.ProfileModal = ProfileModal;
2793
2762
  exports.Progress = Progress;
2794
2763
  exports.ScrollArea = ScrollArea;
2795
2764
  exports.ScrollBar = ScrollBar;
@@ -2821,15 +2790,13 @@ exports.TabsContent = TabsContent;
2821
2790
  exports.TabsList = TabsList;
2822
2791
  exports.TabsTrigger = TabsTrigger;
2823
2792
  exports.Textarea = Textarea;
2824
- exports.Timeline = Timeline_default;
2793
+ exports.Timeline = Timeline;
2825
2794
  exports.Tooltip = Tooltip;
2826
2795
  exports.TooltipContent = TooltipContent;
2827
2796
  exports.TooltipProvider = TooltipProvider;
2828
2797
  exports.TooltipTrigger = TooltipTrigger;
2829
2798
  exports.badgeVariants = badgeVariants;
2830
- exports.buildGridColsClasses = buildGridColsClasses;
2831
2799
  exports.buttonVariants = buttonVariants;
2832
- exports.getGapClassName = getGapClassName;
2833
2800
  exports.useBackgroundRemoval = useBackgroundRemoval;
2834
2801
  exports.useOCR = useOCR;
2835
2802
  exports.useSentimentAnalysis = useSentimentAnalysis;