sa2kit 1.6.3 → 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 (119) hide show
  1. package/dist/audioDetection/index.js.map +1 -1
  2. package/dist/audioDetection/index.mjs.map +1 -1
  3. package/dist/auth/index.d.mts +26 -1
  4. package/dist/auth/index.d.ts +26 -1
  5. package/dist/auth/index.js +51 -23
  6. package/dist/auth/index.js.map +1 -1
  7. package/dist/auth/index.mjs +34 -3
  8. package/dist/auth/index.mjs.map +1 -1
  9. package/dist/auth/middleware/index.js +3 -3
  10. package/dist/auth/middleware/index.mjs +2 -2
  11. package/dist/auth/routes/index.js +14 -14
  12. package/dist/auth/routes/index.mjs +2 -2
  13. package/dist/auth/services/index.d.mts +1 -0
  14. package/dist/auth/services/index.d.ts +1 -0
  15. package/dist/auth/services/index.js +7 -7
  16. package/dist/auth/services/index.mjs +1 -1
  17. package/dist/calendar/index.d.mts +1197 -0
  18. package/dist/calendar/index.d.ts +1197 -0
  19. package/dist/calendar/index.js +5376 -0
  20. package/dist/calendar/index.js.map +1 -0
  21. package/dist/calendar/index.mjs +5311 -0
  22. package/dist/calendar/index.mjs.map +1 -0
  23. package/dist/calendar/routes/index.d.mts +118 -0
  24. package/dist/calendar/routes/index.d.ts +118 -0
  25. package/dist/calendar/routes/index.js +335 -0
  26. package/dist/calendar/routes/index.js.map +1 -0
  27. package/dist/calendar/routes/index.mjs +327 -0
  28. package/dist/calendar/routes/index.mjs.map +1 -0
  29. package/dist/calendar/server.d.mts +1184 -0
  30. package/dist/calendar/server.d.ts +1184 -0
  31. package/dist/calendar/server.js +219 -0
  32. package/dist/calendar/server.js.map +1 -0
  33. package/dist/calendar/server.mjs +165 -0
  34. package/dist/calendar/server.mjs.map +1 -0
  35. package/dist/{chunk-EBP7AE6F.js → chunk-2ODO4HEI.js} +48 -20
  36. package/dist/chunk-2ODO4HEI.js.map +1 -0
  37. package/dist/{chunk-RCNNVNLT.mjs → chunk-3BGPZN4X.mjs} +8 -3
  38. package/dist/chunk-3BGPZN4X.mjs.map +1 -0
  39. package/dist/{chunk-FV3FNHQY.js → chunk-6W5BMXJG.js} +4 -4
  40. package/dist/{chunk-FV3FNHQY.js.map → chunk-6W5BMXJG.js.map} +1 -1
  41. package/dist/chunk-6WXOA4BE.mjs +302 -0
  42. package/dist/chunk-6WXOA4BE.mjs.map +1 -0
  43. package/dist/{chunk-NMF4ANIC.js → chunk-7Z5LLJ3A.js} +8 -2
  44. package/dist/chunk-7Z5LLJ3A.js.map +1 -0
  45. package/dist/chunk-AXP7KROR.js +314 -0
  46. package/dist/chunk-AXP7KROR.js.map +1 -0
  47. package/dist/{chunk-42IJ7HEI.js → chunk-CD77U7LZ.js} +5 -5
  48. package/dist/{chunk-42IJ7HEI.js.map → chunk-CD77U7LZ.js.map} +1 -1
  49. package/dist/{chunk-6BL3AZGD.js → chunk-DUHZ7VZP.js} +2 -2
  50. package/dist/chunk-DUHZ7VZP.js.map +1 -0
  51. package/dist/{chunk-6VHWOPRR.mjs → chunk-ESRCX5TQ.mjs} +3 -3
  52. package/dist/{chunk-6VHWOPRR.mjs.map → chunk-ESRCX5TQ.mjs.map} +1 -1
  53. package/dist/{chunk-QKXKXAAV.js → chunk-G4AMEDO5.js} +2 -2
  54. package/dist/{chunk-QKXKXAAV.js.map → chunk-G4AMEDO5.js.map} +1 -1
  55. package/dist/chunk-GAC4J5GX.js +228 -0
  56. package/dist/chunk-GAC4J5GX.js.map +1 -0
  57. package/dist/chunk-IEA55H3G.js +106 -0
  58. package/dist/chunk-IEA55H3G.js.map +1 -0
  59. package/dist/{chunk-U2L6V7KD.mjs → chunk-OCR5DS4C.mjs} +2 -2
  60. package/dist/chunk-OCR5DS4C.mjs.map +1 -0
  61. package/dist/{chunk-IBLB7ARJ.mjs → chunk-QAT2RWAO.mjs} +3 -3
  62. package/dist/{chunk-IBLB7ARJ.mjs.map → chunk-QAT2RWAO.mjs.map} +1 -1
  63. package/dist/chunk-R2F4BXUU.mjs +100 -0
  64. package/dist/chunk-R2F4BXUU.mjs.map +1 -0
  65. package/dist/chunk-T6TE7GTY.mjs +218 -0
  66. package/dist/chunk-T6TE7GTY.mjs.map +1 -0
  67. package/dist/{chunk-MBG4DBGP.mjs → chunk-ZCLAF3XN.mjs} +47 -19
  68. package/dist/chunk-ZCLAF3XN.mjs.map +1 -0
  69. package/dist/{chunk-6LEA37ZM.mjs → chunk-ZYXF3L6T.mjs} +2 -2
  70. package/dist/{chunk-6LEA37ZM.mjs.map → chunk-ZYXF3L6T.mjs.map} +1 -1
  71. package/dist/imageCrop/index.js.map +1 -1
  72. package/dist/imageCrop/index.mjs.map +1 -1
  73. package/dist/{index-DtLpANUB.d.mts → index-DSel44Ke.d.mts} +24 -1
  74. package/dist/{index-DtLpANUB.d.ts → index-DSel44Ke.d.ts} +24 -1
  75. package/dist/index.d.mts +426 -3
  76. package/dist/index.d.ts +426 -3
  77. package/dist/index.js +2116 -65
  78. package/dist/index.js.map +1 -1
  79. package/dist/index.mjs +1949 -33
  80. package/dist/index.mjs.map +1 -1
  81. package/dist/mmd/index.d.mts +78 -1
  82. package/dist/mmd/index.d.ts +78 -1
  83. package/dist/mmd/index.js +397 -50
  84. package/dist/mmd/index.js.map +1 -1
  85. package/dist/mmd/index.mjs +399 -53
  86. package/dist/mmd/index.mjs.map +1 -1
  87. package/dist/music/index.d.mts +54 -5
  88. package/dist/music/index.d.ts +54 -5
  89. package/dist/music/index.js +35 -435
  90. package/dist/music/index.js.map +1 -1
  91. package/dist/music/index.mjs +2 -424
  92. package/dist/music/index.mjs.map +1 -1
  93. package/dist/music/server/index.d.mts +1 -1
  94. package/dist/music/server/index.d.ts +1 -1
  95. package/dist/music/server/index.js +14 -6
  96. package/dist/music/server/index.mjs +1 -1
  97. package/dist/testYourself/admin/index.js +3 -3
  98. package/dist/testYourself/admin/index.mjs +1 -1
  99. package/dist/testYourself/index.js +7 -7
  100. package/dist/testYourself/index.js.map +1 -1
  101. package/dist/testYourself/index.mjs +2 -2
  102. package/dist/testYourself/index.mjs.map +1 -1
  103. package/dist/universalFile/index.d.mts +125 -7
  104. package/dist/universalFile/index.d.ts +125 -7
  105. package/dist/universalFile/index.js +1253 -30
  106. package/dist/universalFile/index.js.map +1 -1
  107. package/dist/universalFile/index.mjs +1244 -23
  108. package/dist/universalFile/index.mjs.map +1 -1
  109. package/dist/utils/index.d.mts +5 -1
  110. package/dist/utils/index.d.ts +5 -1
  111. package/dist/utils/index.js +13 -9
  112. package/dist/utils/index.mjs +1 -1
  113. package/package.json +18 -3
  114. package/dist/chunk-6BL3AZGD.js.map +0 -1
  115. package/dist/chunk-EBP7AE6F.js.map +0 -1
  116. package/dist/chunk-MBG4DBGP.mjs.map +0 -1
  117. package/dist/chunk-NMF4ANIC.js.map +0 -1
  118. package/dist/chunk-RCNNVNLT.mjs.map +0 -1
  119. package/dist/chunk-U2L6V7KD.mjs.map +0 -1
package/dist/index.js CHANGED
@@ -1,34 +1,78 @@
1
1
  'use strict';
2
2
 
3
- var chunkNMF4ANIC_js = require('./chunk-NMF4ANIC.js');
3
+ var chunkIEA55H3G_js = require('./chunk-IEA55H3G.js');
4
+ var chunk7Z5LLJ3A_js = require('./chunk-7Z5LLJ3A.js');
4
5
  var chunkLX4XX6W7_js = require('./chunk-LX4XX6W7.js');
5
6
  require('./chunk-QU5OT4DF.js');
6
7
  var chunk6PRFP5EG_js = require('./chunk-6PRFP5EG.js');
7
8
  require('./chunk-DGUM43GV.js');
8
- var React2 = require('react');
9
+ var React33 = require('react');
9
10
  var tesseract_js = require('tesseract.js');
10
11
  var lucideReact = require('lucide-react');
12
+ var reactSlot = require('@radix-ui/react-slot');
13
+ var classVarianceAuthority = require('class-variance-authority');
14
+ var LabelPrimitive = require('@radix-ui/react-label');
15
+ var TabsPrimitive = require('@radix-ui/react-tabs');
16
+ var DialogPrimitive = require('@radix-ui/react-dialog');
17
+ var AlertDialogPrimitive = require('@radix-ui/react-alert-dialog');
18
+ var DropdownMenuPrimitive = require('@radix-ui/react-dropdown-menu');
19
+ var PopoverPrimitive = require('@radix-ui/react-popover');
20
+ var ProgressPrimitive = require('@radix-ui/react-progress');
21
+ var ScrollAreaPrimitive = require('@radix-ui/react-scroll-area');
22
+ var SelectPrimitive = require('@radix-ui/react-select');
23
+ var SeparatorPrimitive = require('@radix-ui/react-separator');
24
+ var TooltipPrimitive = require('@radix-ui/react-tooltip');
25
+ var AvatarPrimitive = require('@radix-ui/react-avatar');
26
+ var reactDom = require('react-dom');
11
27
 
12
- function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
28
+ function _interopNamespace(e) {
29
+ if (e && e.__esModule) return e;
30
+ var n = Object.create(null);
31
+ if (e) {
32
+ Object.keys(e).forEach(function (k) {
33
+ if (k !== 'default') {
34
+ var d = Object.getOwnPropertyDescriptor(e, k);
35
+ Object.defineProperty(n, k, d.get ? d : {
36
+ enumerable: true,
37
+ get: function () { return e[k]; }
38
+ });
39
+ }
40
+ });
41
+ }
42
+ n.default = e;
43
+ return Object.freeze(n);
44
+ }
13
45
 
14
- var React2__default = /*#__PURE__*/_interopDefault(React2);
46
+ var React33__namespace = /*#__PURE__*/_interopNamespace(React33);
47
+ var LabelPrimitive__namespace = /*#__PURE__*/_interopNamespace(LabelPrimitive);
48
+ var TabsPrimitive__namespace = /*#__PURE__*/_interopNamespace(TabsPrimitive);
49
+ var DialogPrimitive__namespace = /*#__PURE__*/_interopNamespace(DialogPrimitive);
50
+ var AlertDialogPrimitive__namespace = /*#__PURE__*/_interopNamespace(AlertDialogPrimitive);
51
+ var DropdownMenuPrimitive__namespace = /*#__PURE__*/_interopNamespace(DropdownMenuPrimitive);
52
+ var PopoverPrimitive__namespace = /*#__PURE__*/_interopNamespace(PopoverPrimitive);
53
+ var ProgressPrimitive__namespace = /*#__PURE__*/_interopNamespace(ProgressPrimitive);
54
+ var ScrollAreaPrimitive__namespace = /*#__PURE__*/_interopNamespace(ScrollAreaPrimitive);
55
+ var SelectPrimitive__namespace = /*#__PURE__*/_interopNamespace(SelectPrimitive);
56
+ var SeparatorPrimitive__namespace = /*#__PURE__*/_interopNamespace(SeparatorPrimitive);
57
+ var TooltipPrimitive__namespace = /*#__PURE__*/_interopNamespace(TooltipPrimitive);
58
+ var AvatarPrimitive__namespace = /*#__PURE__*/_interopNamespace(AvatarPrimitive);
15
59
 
16
60
  var useOCR = (options = {}) => {
17
- const [state, setState] = React2.useState({
61
+ const [state, setState] = React33.useState({
18
62
  isProcessing: false,
19
63
  progress: 0,
20
64
  status: "idle",
21
65
  error: null,
22
66
  result: null
23
67
  });
24
- const workerRef = React2.useRef(null);
25
- const cleanup = React2.useCallback(async () => {
68
+ const workerRef = React33.useRef(null);
69
+ const cleanup = React33.useCallback(async () => {
26
70
  if (workerRef.current) {
27
71
  await workerRef.current.terminate();
28
72
  workerRef.current = null;
29
73
  }
30
74
  }, []);
31
- const recognize = React2.useCallback(
75
+ const recognize = React33.useCallback(
32
76
  async (image) => {
33
77
  setState((prev) => ({
34
78
  ...prev,
@@ -87,7 +131,7 @@ var useOCR = (options = {}) => {
87
131
  },
88
132
  [options]
89
133
  );
90
- React2.useEffect(() => {
134
+ React33.useEffect(() => {
91
135
  return () => {
92
136
  cleanup();
93
137
  };
@@ -103,8 +147,8 @@ var OCRScanner = ({
103
147
  className = "",
104
148
  language = "eng"
105
149
  }) => {
106
- const [imagePreview, setImagePreview] = React2.useState(null);
107
- const fileInputRef = React2.useRef(null);
150
+ const [imagePreview, setImagePreview] = React33.useState(null);
151
+ const fileInputRef = React33.useRef(null);
108
152
  const { recognize, isProcessing, progress, status, result, error } = useOCR({
109
153
  language
110
154
  });
@@ -140,43 +184,43 @@ var OCRScanner = ({
140
184
  handleFileChange(mockEvent);
141
185
  }
142
186
  };
143
- return /* @__PURE__ */ React2__default.default.createElement(
187
+ return /* @__PURE__ */ React33__namespace.default.createElement(
144
188
  "div",
145
189
  {
146
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}`,
147
191
  onDragOver: handleDragOver,
148
192
  onDrop: handleDrop
149
193
  },
150
- !imagePreview ? /* @__PURE__ */ React2__default.default.createElement(
194
+ !imagePreview ? /* @__PURE__ */ React33__namespace.default.createElement(
151
195
  "div",
152
196
  {
153
197
  className: "flex flex-col items-center justify-center cursor-pointer space-y-4",
154
198
  onClick: () => fileInputRef.current?.click()
155
199
  },
156
- /* @__PURE__ */ React2__default.default.createElement("div", { className: "p-4 bg-blue-50 rounded-full text-blue-500" }, /* @__PURE__ */ React2__default.default.createElement(lucideReact.Upload, { size: 32 })),
157
- /* @__PURE__ */ React2__default.default.createElement("div", { className: "text-center" }, /* @__PURE__ */ React2__default.default.createElement("p", { className: "text-lg font-medium text-gray-700" }, "\u70B9\u51FB\u6216\u62D6\u62FD\u56FE\u7247\u8FDB\u884C OCR \u8BC6\u522B"), /* @__PURE__ */ React2__default.default.createElement("p", { className: "text-sm text-gray-500" }, "\u652F\u6301 JPG, PNG, WebP"))
158
- ) : /* @__PURE__ */ React2__default.default.createElement("div", { className: "space-y-4" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "relative group rounded-lg overflow-hidden border border-gray-200" }, /* @__PURE__ */ React2__default.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(
159
203
  "img",
160
204
  {
161
205
  src: imagePreview,
162
206
  alt: "Preview",
163
207
  className: `max-h-64 mx-auto object-contain transition-opacity ${isProcessing ? "opacity-50" : "opacity-100"}`
164
208
  }
165
- ), !isProcessing && /* @__PURE__ */ React2__default.default.createElement(
209
+ ), !isProcessing && /* @__PURE__ */ React33__namespace.default.createElement(
166
210
  "button",
167
211
  {
168
212
  onClick: reset,
169
213
  className: "absolute top-2 right-2 p-1 bg-white/80 rounded-full hover:bg-white text-gray-600 shadow-sm"
170
214
  },
171
- /* @__PURE__ */ React2__default.default.createElement(lucideReact.X, { size: 18 })
172
- ), isProcessing && /* @__PURE__ */ React2__default.default.createElement("div", { className: "absolute inset-0 flex flex-col items-center justify-center bg-black/5" }, /* @__PURE__ */ React2__default.default.createElement(lucideReact.Loader2, { className: "animate-spin text-blue-500 mb-2", size: 32 }), /* @__PURE__ */ React2__default.default.createElement("div", { className: "w-48 bg-gray-200 rounded-full h-1.5 overflow-hidden" }, /* @__PURE__ */ React2__default.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(
173
217
  "div",
174
218
  {
175
219
  className: "bg-blue-500 h-full transition-all duration-300",
176
220
  style: { width: `${progress * 100}%` }
177
221
  }
178
- )), /* @__PURE__ */ React2__default.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__ */ React2__default.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__ */ React2__default.default.createElement("div", { className: "flex items-center gap-2 mb-2 text-gray-600 font-medium" }, /* @__PURE__ */ React2__default.default.createElement(lucideReact.FileText, { size: 18 }), /* @__PURE__ */ React2__default.default.createElement("span", null, "\u8BC6\u522B\u7ED3\u679C (\u7F6E\u4FE1\u5EA6: ", Math.round(result.confidence), "%)")), /* @__PURE__ */ React2__default.default.createElement("pre", { className: "text-sm text-gray-800 whitespace-pre-wrap font-sans" }, result.text)), error && /* @__PURE__ */ React2__default.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)),
179
- /* @__PURE__ */ React2__default.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(
180
224
  "input",
181
225
  {
182
226
  type: "file",
@@ -190,7 +234,7 @@ var OCRScanner = ({
190
234
  );
191
235
  };
192
236
  var useBackgroundRemoval = (options = {}) => {
193
- const [state, setState] = React2.useState({
237
+ const [state, setState] = React33.useState({
194
238
  isProcessing: false,
195
239
  progress: 0,
196
240
  status: "idle",
@@ -198,7 +242,7 @@ var useBackgroundRemoval = (options = {}) => {
198
242
  resultBlob: null,
199
243
  resultUrl: null
200
244
  });
201
- const remove = React2.useCallback(async (image) => {
245
+ const remove = React33.useCallback(async (image) => {
202
246
  setState((prev) => ({
203
247
  ...prev,
204
248
  isProcessing: true,
@@ -277,12 +321,12 @@ var useBackgroundRemoval = (options = {}) => {
277
321
  throw err;
278
322
  }
279
323
  }, [options]);
280
- const cleanup = React2.useCallback(() => {
324
+ const cleanup = React33.useCallback(() => {
281
325
  if (state.resultUrl) {
282
326
  URL.revokeObjectURL(state.resultUrl);
283
327
  }
284
328
  }, [state.resultUrl]);
285
- React2.useEffect(() => {
329
+ React33.useEffect(() => {
286
330
  return () => cleanup();
287
331
  }, [cleanup]);
288
332
  return {
@@ -295,8 +339,8 @@ var BackgroundRemover = ({
295
339
  onResult,
296
340
  className = ""
297
341
  }) => {
298
- const [imagePreview, setImagePreview] = React2.useState(null);
299
- const fileInputRef = React2.useRef(null);
342
+ const [imagePreview, setImagePreview] = React33.useState(null);
343
+ const fileInputRef = React33.useRef(null);
300
344
  const { remove, isProcessing, progress, status, resultUrl, error } = useBackgroundRemoval();
301
345
  const handleFileChange = async (e) => {
302
346
  const file = e.target.files?.[0];
@@ -324,37 +368,37 @@ var BackgroundRemover = ({
324
368
  a.download = "removed_background.png";
325
369
  a.click();
326
370
  };
327
- return /* @__PURE__ */ React2__default.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__ */ React2__default.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(
328
372
  "div",
329
373
  {
330
374
  className: "flex flex-col items-center justify-center cursor-pointer space-y-4",
331
375
  onClick: () => fileInputRef.current?.click()
332
376
  },
333
- /* @__PURE__ */ React2__default.default.createElement("div", { className: "p-4 bg-purple-50 rounded-full text-purple-500" }, /* @__PURE__ */ React2__default.default.createElement(lucideReact.Eraser, { size: 32 })),
334
- /* @__PURE__ */ React2__default.default.createElement("div", { className: "text-center" }, /* @__PURE__ */ React2__default.default.createElement("p", { className: "text-lg font-medium text-gray-700" }, "\u4E0A\u4F20\u56FE\u7247\u79FB\u9664\u80CC\u666F"), /* @__PURE__ */ React2__default.default.createElement("p", { className: "text-sm text-gray-500" }, "\u5EFA\u8BAE\u4F7F\u7528\u4E3B\u4F53\u660E\u786E\u7684\u56FE\u7247"))
335
- ) : /* @__PURE__ */ React2__default.default.createElement("div", { className: "space-y-4" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-4" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React2__default.default.createElement("p", { className: "text-xs font-medium text-gray-500 uppercase tracking-wider" }, "\u539F\u56FE"), /* @__PURE__ */ React2__default.default.createElement("div", { className: "relative rounded-lg overflow-hidden border border-gray-200 bg-gray-50" }, /* @__PURE__ */ React2__default.default.createElement("img", { src: imagePreview, alt: "Original", className: "max-h-64 mx-auto object-contain" }))), /* @__PURE__ */ React2__default.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React2__default.default.createElement("p", { className: "text-xs font-medium text-gray-500 uppercase tracking-wider" }, "\u5904\u7406\u7ED3\u679C"), /* @__PURE__ */ React2__default.default.createElement("div", { className: "relative rounded-lg overflow-hidden border border-gray-200 bg-grid-slate-100 bg-[size:20px_20px]" }, resultUrl ? /* @__PURE__ */ React2__default.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__ */ React2__default.default.createElement("div", { className: "h-64 flex flex-col items-center justify-center text-gray-400" }, isProcessing ? /* @__PURE__ */ React2__default.default.createElement(React2__default.default.Fragment, null, /* @__PURE__ */ React2__default.default.createElement(lucideReact.Loader2, { className: "animate-spin text-purple-500 mb-2", size: 32 }), /* @__PURE__ */ React2__default.default.createElement("div", { className: "w-32 bg-gray-200 rounded-full h-1.5 overflow-hidden" }, /* @__PURE__ */ React2__default.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(
336
380
  "div",
337
381
  {
338
382
  className: "bg-purple-500 h-full transition-all duration-300",
339
383
  style: { width: `${progress * 100}%` }
340
384
  }
341
- )), /* @__PURE__ */ React2__default.default.createElement("p", { className: "text-[10px] mt-2 font-mono uppercase" }, status.replace(/-/g, " "))) : /* @__PURE__ */ React2__default.default.createElement("span", { className: "text-sm italic" }, "\u7B49\u5F85\u5904\u7406..."))))), /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex justify-between items-center pt-2" }, !isProcessing && /* @__PURE__ */ React2__default.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(
342
386
  "button",
343
387
  {
344
388
  onClick: reset,
345
389
  className: "flex items-center gap-2 px-4 py-2 text-sm font-medium text-gray-600 hover:text-gray-900 transition-colors"
346
390
  },
347
- /* @__PURE__ */ React2__default.default.createElement(lucideReact.X, { size: 16 }),
391
+ /* @__PURE__ */ React33__namespace.default.createElement(lucideReact.X, { size: 16 }),
348
392
  "\u91CD\u65B0\u5F00\u59CB"
349
- ), resultUrl && !isProcessing && /* @__PURE__ */ React2__default.default.createElement(
393
+ ), resultUrl && !isProcessing && /* @__PURE__ */ React33__namespace.default.createElement(
350
394
  "button",
351
395
  {
352
396
  onClick: downloadResult,
353
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"
354
398
  },
355
- /* @__PURE__ */ React2__default.default.createElement(lucideReact.Download, { size: 16 }),
399
+ /* @__PURE__ */ React33__namespace.default.createElement(lucideReact.Download, { size: 16 }),
356
400
  "\u4E0B\u8F7D PNG"
357
- )), error && /* @__PURE__ */ React2__default.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__ */ React2__default.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(
358
402
  "input",
359
403
  {
360
404
  type: "file",
@@ -367,14 +411,14 @@ var BackgroundRemover = ({
367
411
  ));
368
412
  };
369
413
  var useSentimentAnalysis = (options = {}) => {
370
- const [state, setState] = React2.useState({
414
+ const [state, setState] = React33.useState({
371
415
  isProcessing: false,
372
416
  status: "idle",
373
417
  error: null,
374
418
  result: null
375
419
  });
376
- const pipelineRef = React2.useRef(null);
377
- const analyze = React2.useCallback(async (text) => {
420
+ const pipelineRef = React33.useRef(null);
421
+ const analyze = React33.useCallback(async (text) => {
378
422
  setState((prev) => ({
379
423
  ...prev,
380
424
  isProcessing: true,
@@ -458,7 +502,7 @@ var SentimentAnalyzer = ({
458
502
  className = "",
459
503
  placeholder = "\u8F93\u5165\u4E00\u6BB5\u4E2D\u6587\u6216\u82F1\u6587\uFF0C\u5206\u6790\u5176\u60C5\u611F\u503E\u5411..."
460
504
  }) => {
461
- const [text, setText] = React2.useState("");
505
+ const [text, setText] = React33.useState("");
462
506
  const { analyze, isProcessing, status, result, error } = useSentimentAnalysis();
463
507
  const handleAnalyze = async () => {
464
508
  if (!text.trim() || isProcessing) return;
@@ -473,11 +517,11 @@ var SentimentAnalyzer = ({
473
517
  if (!result) return null;
474
518
  switch (result.sentiment) {
475
519
  case "positive":
476
- return /* @__PURE__ */ React2__default.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 });
477
521
  case "negative":
478
- return /* @__PURE__ */ React2__default.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 });
479
523
  default:
480
- return /* @__PURE__ */ React2__default.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 });
481
525
  }
482
526
  };
483
527
  const getSentimentColor = () => {
@@ -491,7 +535,7 @@ var SentimentAnalyzer = ({
491
535
  return "bg-yellow-50 border-yellow-200 text-yellow-700";
492
536
  }
493
537
  };
494
- return /* @__PURE__ */ React2__default.default.createElement("div", { className: `p-6 border rounded-xl bg-white dark:bg-gray-800 shadow-sm ${className}` }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex items-center gap-2 mb-4 text-gray-700 dark:text-gray-300 font-medium" }, /* @__PURE__ */ React2__default.default.createElement(lucideReact.MessageSquare, { size: 20 }), /* @__PURE__ */ React2__default.default.createElement("span", null, "\u6587\u672C\u60C5\u611F\u5206\u6790")), /* @__PURE__ */ React2__default.default.createElement("div", { className: "relative" }, /* @__PURE__ */ React2__default.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(
495
539
  "textarea",
496
540
  {
497
541
  value: text,
@@ -500,25 +544,25 @@ var SentimentAnalyzer = ({
500
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",
501
545
  disabled: isProcessing
502
546
  }
503
- ), /* @__PURE__ */ React2__default.default.createElement(
547
+ ), /* @__PURE__ */ React33__namespace.default.createElement(
504
548
  "button",
505
549
  {
506
550
  onClick: handleAnalyze,
507
551
  disabled: !text.trim() || isProcessing,
508
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"
509
553
  },
510
- isProcessing ? /* @__PURE__ */ React2__default.default.createElement(lucideReact.Loader2, { className: "animate-spin", size: 18 }) : /* @__PURE__ */ React2__default.default.createElement(lucideReact.Send, { size: 18 })
511
- )), isProcessing && /* @__PURE__ */ React2__default.default.createElement("div", { className: "mt-4 flex items-center gap-2 text-sm text-blue-600 animate-pulse" }, /* @__PURE__ */ React2__default.default.createElement(lucideReact.Loader2, { size: 14, className: "animate-spin" }), /* @__PURE__ */ React2__default.default.createElement("span", null, "\u6B63\u5728\u5206\u6790 (\u9996\u6B21\u8FD0\u884C\u5C06\u52A0\u8F7D\u6A21\u578B\u8D44\u6E90)...")), result && !isProcessing && /* @__PURE__ */ React2__default.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__ */ React2__default.default.createElement("div", { className: "p-2 bg-white rounded-full shadow-sm" }, getSentimentIcon()), /* @__PURE__ */ React2__default.default.createElement("div", null, /* @__PURE__ */ React2__default.default.createElement("p", { className: "font-bold text-lg capitalize" }, result.sentiment), /* @__PURE__ */ React2__default.default.createElement("p", { className: "text-sm opacity-80" }, "\u7F6E\u4FE1\u5EA6: ", (result.score * 100).toFixed(1), "% (", result.label, ")"))), error && /* @__PURE__ */ React2__default.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));
512
556
  };
513
557
  var useTextGeneration = (options = {}) => {
514
- const [state, setState] = React2.useState({
558
+ const [state, setState] = React33.useState({
515
559
  isProcessing: false,
516
560
  status: "idle",
517
561
  error: null,
518
562
  result: null
519
563
  });
520
- const pipelineRef = React2.useRef(null);
521
- const generate = React2.useCallback(async (prompt) => {
564
+ const pipelineRef = React33.useRef(null);
565
+ const generate = React33.useCallback(async (prompt) => {
522
566
  console.log("[AI] Generating for prompt:", prompt);
523
567
  setState((prev) => ({
524
568
  ...prev,
@@ -600,11 +644,11 @@ var useTextGeneration = (options = {}) => {
600
644
  return { ...state, generate };
601
645
  };
602
646
  var SmartAssistant = ({ className = "" }) => {
603
- const [input, setInput] = React2.useState("");
604
- const [chatHistory, setChatHistory] = React2.useState([]);
605
- const scrollRef = React2.useRef(null);
647
+ const [input, setInput] = React33.useState("");
648
+ const [chatHistory, setChatHistory] = React33.useState([]);
649
+ const scrollRef = React33.useRef(null);
606
650
  const { generate, isProcessing: isGenerating, status: genStatus } = useTextGeneration();
607
- React2.useEffect(() => {
651
+ React33.useEffect(() => {
608
652
  if (scrollRef.current) {
609
653
  scrollRef.current.scrollTop = scrollRef.current.scrollHeight;
610
654
  }
@@ -648,7 +692,7 @@ AI\u56DE\u5E94\uFF1A\u201C`;
648
692
  setChatHistory((prev) => [...prev, { role: "assistant", content: "\uFF08\u672C\u5730\u6A21\u578B\u601D\u8003\u8FC7\u5EA6\uFF0C\u6682\u65F6\u4F11\u606F\u4E2D...\uFF09" }]);
649
693
  }
650
694
  };
651
- return /* @__PURE__ */ React2__default.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__ */ React2__default.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__ */ React2__default.default.createElement("div", { className: "h-full flex flex-col items-center justify-center text-gray-400 space-y-2" }, /* @__PURE__ */ React2__default.default.createElement(lucideReact.Bot, { size: 48, className: "opacity-20" }), /* @__PURE__ */ React2__default.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__ */ React2__default.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__ */ React2__default.default.createElement("div", { key: i, className: `flex ${msg.role === "user" ? "justify-end" : "justify-start"} animate-in fade-in slide-in-from-bottom-2` }, /* @__PURE__ */ React2__default.default.createElement("div", { className: `flex gap-3 max-w-[85%] ${msg.role === "user" ? "flex-row-reverse" : ""}` }, /* @__PURE__ */ React2__default.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__ */ React2__default.default.createElement(lucideReact.User, { size: 18 }) : /* @__PURE__ */ React2__default.default.createElement(lucideReact.Bot, { size: 18 })), /* @__PURE__ */ React2__default.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__ */ React2__default.default.createElement("div", { className: "flex justify-start" }, /* @__PURE__ */ React2__default.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__ */ React2__default.default.createElement(lucideReact.Loader2, { className: "animate-spin text-blue-500", size: 16 }), /* @__PURE__ */ React2__default.default.createElement("div", { className: "flex flex-col" }, /* @__PURE__ */ React2__default.default.createElement("span", { className: "text-xs text-gray-500 font-medium" }, "\u601D\u8003\u4E2D..."), /* @__PURE__ */ React2__default.default.createElement("span", { className: "text-[10px] text-blue-400 font-mono tracking-tighter" }, genStatus))))), /* @__PURE__ */ React2__default.default.createElement("div", { className: "p-4 bg-white dark:bg-gray-800 border-t border-gray-100 dark:border-gray-700" }, /* @__PURE__ */ React2__default.default.createElement("div", { className: "relative flex items-center gap-2" }, /* @__PURE__ */ React2__default.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(
652
696
  "input",
653
697
  {
654
698
  type: "text",
@@ -659,48 +703,1954 @@ AI\u56DE\u5E94\uFF1A\u201C`;
659
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",
660
704
  disabled: isGenerating
661
705
  }
662
- ), /* @__PURE__ */ React2__default.default.createElement(
706
+ ), /* @__PURE__ */ React33__namespace.default.createElement(
663
707
  "button",
664
708
  {
665
709
  onClick: handleSend,
666
710
  disabled: !input.trim() || isGenerating,
667
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"
668
712
  },
669
- /* @__PURE__ */ React2__default.default.createElement(lucideReact.Send, { size: 18 })
713
+ /* @__PURE__ */ React33__namespace.default.createElement(lucideReact.Send, { size: 18 })
714
+ ))));
715
+ };
716
+ var buttonVariants = classVarianceAuthority.cva(
717
+ "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
718
+ {
719
+ variants: {
720
+ variant: {
721
+ default: "bg-primary text-primary-foreground shadow hover:bg-primary/90",
722
+ destructive: "bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90",
723
+ outline: "border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground",
724
+ secondary: "bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80",
725
+ ghost: "hover:bg-accent hover:text-accent-foreground",
726
+ link: "text-primary underline-offset-4 hover:underline"
727
+ },
728
+ size: {
729
+ default: "h-9 px-4 py-2",
730
+ sm: "h-8 rounded-md px-3 text-xs",
731
+ lg: "h-10 rounded-md px-8",
732
+ icon: "h-9 w-9"
733
+ }
734
+ },
735
+ defaultVariants: {
736
+ variant: "default",
737
+ size: "default"
738
+ }
739
+ }
740
+ );
741
+ var Button = React33__namespace.forwardRef(
742
+ ({ className, variant, size, asChild = false, ...props }, ref) => {
743
+ const Comp = asChild ? reactSlot.Slot : "button";
744
+ return /* @__PURE__ */ React33__namespace.createElement(
745
+ Comp,
746
+ {
747
+ className: chunk7Z5LLJ3A_js.cn(buttonVariants({ variant, size, className })),
748
+ ref,
749
+ ...props
750
+ }
751
+ );
752
+ }
753
+ );
754
+ Button.displayName = "Button";
755
+ var Card = React33__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
756
+ "div",
757
+ {
758
+ ref,
759
+ className: chunk7Z5LLJ3A_js.cn(
760
+ "rounded-xl border bg-card text-card-foreground shadow",
761
+ className
762
+ ),
763
+ ...props
764
+ }
765
+ ));
766
+ Card.displayName = "Card";
767
+ var CardHeader = React33__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
768
+ "div",
769
+ {
770
+ ref,
771
+ className: chunk7Z5LLJ3A_js.cn("flex flex-col space-y-1.5 p-6", className),
772
+ ...props
773
+ }
774
+ ));
775
+ CardHeader.displayName = "CardHeader";
776
+ var CardTitle = React33__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
777
+ "div",
778
+ {
779
+ ref,
780
+ className: chunk7Z5LLJ3A_js.cn("font-semibold leading-none tracking-tight", className),
781
+ ...props
782
+ }
783
+ ));
784
+ CardTitle.displayName = "CardTitle";
785
+ var CardDescription = React33__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
786
+ "div",
787
+ {
788
+ ref,
789
+ className: chunk7Z5LLJ3A_js.cn("text-sm text-muted-foreground", className),
790
+ ...props
791
+ }
792
+ ));
793
+ CardDescription.displayName = "CardDescription";
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 }));
795
+ CardContent.displayName = "CardContent";
796
+ var CardFooter = React33__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
797
+ "div",
798
+ {
799
+ ref,
800
+ className: chunk7Z5LLJ3A_js.cn("flex items-center p-6 pt-0", className),
801
+ ...props
802
+ }
803
+ ));
804
+ CardFooter.displayName = "CardFooter";
805
+ var badgeVariants = classVarianceAuthority.cva(
806
+ "inline-flex items-center rounded-md border px-2.5 py-0.5 text-xs font-semibold transition-colors focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2",
807
+ {
808
+ variants: {
809
+ variant: {
810
+ default: "border-transparent bg-primary text-primary-foreground shadow hover:bg-primary/80",
811
+ secondary: "border-transparent bg-secondary text-secondary-foreground hover:bg-secondary/80",
812
+ destructive: "border-transparent bg-destructive text-destructive-foreground shadow hover:bg-destructive/80",
813
+ outline: "text-foreground"
814
+ }
815
+ },
816
+ defaultVariants: {
817
+ variant: "default"
818
+ }
819
+ }
820
+ );
821
+ function Badge({ className, variant, ...props }) {
822
+ return /* @__PURE__ */ React33__namespace.createElement("div", { className: chunk7Z5LLJ3A_js.cn(badgeVariants({ variant }), className), ...props });
823
+ }
824
+ var Input = React33__namespace.forwardRef(
825
+ ({ className, type, ...props }, ref) => {
826
+ return /* @__PURE__ */ React33__namespace.createElement(
827
+ "input",
828
+ {
829
+ type,
830
+ className: chunk7Z5LLJ3A_js.cn(
831
+ "flex h-9 w-full rounded-md border border-input bg-transparent px-3 py-1 text-base shadow-sm transition-colors file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
832
+ className
833
+ ),
834
+ ref,
835
+ ...props
836
+ }
837
+ );
838
+ }
839
+ );
840
+ Input.displayName = "Input";
841
+ var labelVariants = classVarianceAuthority.cva(
842
+ "text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
843
+ );
844
+ var Label = React33__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
845
+ LabelPrimitive__namespace.Root,
846
+ {
847
+ ref,
848
+ className: chunk7Z5LLJ3A_js.cn(labelVariants(), className),
849
+ ...props
850
+ }
851
+ ));
852
+ Label.displayName = LabelPrimitive__namespace.Root.displayName;
853
+ var Tabs = TabsPrimitive__namespace.Root;
854
+ var TabsList = React33__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
855
+ TabsPrimitive__namespace.List,
856
+ {
857
+ ref,
858
+ className: chunk7Z5LLJ3A_js.cn(
859
+ "inline-flex h-9 items-center justify-center rounded-lg bg-muted p-1 text-muted-foreground",
860
+ className
861
+ ),
862
+ ...props
863
+ }
864
+ ));
865
+ TabsList.displayName = TabsPrimitive__namespace.List.displayName;
866
+ var TabsTrigger = React33__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
867
+ TabsPrimitive__namespace.Trigger,
868
+ {
869
+ ref,
870
+ className: chunk7Z5LLJ3A_js.cn(
871
+ "inline-flex items-center justify-center whitespace-nowrap rounded-md px-3 py-1 text-sm font-medium ring-offset-background transition-all focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50 data-[state=active]:bg-background data-[state=active]:text-foreground data-[state=active]:shadow",
872
+ className
873
+ ),
874
+ ...props
875
+ }
876
+ ));
877
+ TabsTrigger.displayName = TabsPrimitive__namespace.Trigger.displayName;
878
+ var TabsContent = React33__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
879
+ TabsPrimitive__namespace.Content,
880
+ {
881
+ ref,
882
+ className: chunk7Z5LLJ3A_js.cn(
883
+ "mt-2 ring-offset-background focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
884
+ className
885
+ ),
886
+ ...props
887
+ }
888
+ ));
889
+ TabsContent.displayName = TabsPrimitive__namespace.Content.displayName;
890
+ var Dialog = DialogPrimitive__namespace.Root;
891
+ var DialogTrigger = DialogPrimitive__namespace.Trigger;
892
+ var DialogPortal = DialogPrimitive__namespace.Portal;
893
+ var DialogClose = DialogPrimitive__namespace.Close;
894
+ var DialogOverlay = React33__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
895
+ DialogPrimitive__namespace.Overlay,
896
+ {
897
+ ref,
898
+ className: chunk7Z5LLJ3A_js.cn(
899
+ "fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
900
+ className
901
+ ),
902
+ ...props
903
+ }
904
+ ));
905
+ DialogOverlay.displayName = DialogPrimitive__namespace.Overlay.displayName;
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(
907
+ DialogPrimitive__namespace.Content,
908
+ {
909
+ ref,
910
+ className: chunk7Z5LLJ3A_js.cn(
911
+ "fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg",
912
+ className
913
+ ),
914
+ ...props
915
+ },
916
+ children,
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"))
918
+ )));
919
+ DialogContent.displayName = DialogPrimitive__namespace.Content.displayName;
920
+ var DialogHeader = ({
921
+ className,
922
+ ...props
923
+ }) => /* @__PURE__ */ React33__namespace.createElement(
924
+ "div",
925
+ {
926
+ className: chunk7Z5LLJ3A_js.cn(
927
+ "flex flex-col space-y-1.5 text-center sm:text-left",
928
+ className
929
+ ),
930
+ ...props
931
+ }
932
+ );
933
+ DialogHeader.displayName = "DialogHeader";
934
+ var DialogFooter = ({
935
+ className,
936
+ ...props
937
+ }) => /* @__PURE__ */ React33__namespace.createElement(
938
+ "div",
939
+ {
940
+ className: chunk7Z5LLJ3A_js.cn(
941
+ "flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",
942
+ className
943
+ ),
944
+ ...props
945
+ }
946
+ );
947
+ DialogFooter.displayName = "DialogFooter";
948
+ var DialogTitle = React33__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
949
+ DialogPrimitive__namespace.Title,
950
+ {
951
+ ref,
952
+ className: chunk7Z5LLJ3A_js.cn(
953
+ "text-lg font-semibold leading-none tracking-tight",
954
+ className
955
+ ),
956
+ ...props
957
+ }
958
+ ));
959
+ DialogTitle.displayName = DialogPrimitive__namespace.Title.displayName;
960
+ var DialogDescription = React33__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
961
+ DialogPrimitive__namespace.Description,
962
+ {
963
+ ref,
964
+ className: chunk7Z5LLJ3A_js.cn("text-sm text-muted-foreground", className),
965
+ ...props
966
+ }
967
+ ));
968
+ DialogDescription.displayName = DialogPrimitive__namespace.Description.displayName;
969
+ var AlertDialog = AlertDialogPrimitive__namespace.Root;
970
+ var AlertDialogTrigger = AlertDialogPrimitive__namespace.Trigger;
971
+ var AlertDialogPortal = AlertDialogPrimitive__namespace.Portal;
972
+ var AlertDialogOverlay = React33__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
973
+ AlertDialogPrimitive__namespace.Overlay,
974
+ {
975
+ className: chunk7Z5LLJ3A_js.cn(
976
+ "fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
977
+ className
978
+ ),
979
+ ...props,
980
+ ref
981
+ }
982
+ ));
983
+ AlertDialogOverlay.displayName = AlertDialogPrimitive__namespace.Overlay.displayName;
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(
985
+ AlertDialogPrimitive__namespace.Content,
986
+ {
987
+ ref,
988
+ className: chunk7Z5LLJ3A_js.cn(
989
+ "fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg",
990
+ className
991
+ ),
992
+ ...props
993
+ }
994
+ )));
995
+ AlertDialogContent.displayName = AlertDialogPrimitive__namespace.Content.displayName;
996
+ var AlertDialogHeader = ({
997
+ className,
998
+ ...props
999
+ }) => /* @__PURE__ */ React33__namespace.createElement(
1000
+ "div",
1001
+ {
1002
+ className: chunk7Z5LLJ3A_js.cn(
1003
+ "flex flex-col space-y-2 text-center sm:text-left",
1004
+ className
1005
+ ),
1006
+ ...props
1007
+ }
1008
+ );
1009
+ AlertDialogHeader.displayName = "AlertDialogHeader";
1010
+ var AlertDialogFooter = ({
1011
+ className,
1012
+ ...props
1013
+ }) => /* @__PURE__ */ React33__namespace.createElement(
1014
+ "div",
1015
+ {
1016
+ className: chunk7Z5LLJ3A_js.cn(
1017
+ "flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",
1018
+ className
1019
+ ),
1020
+ ...props
1021
+ }
1022
+ );
1023
+ AlertDialogFooter.displayName = "AlertDialogFooter";
1024
+ var AlertDialogTitle = React33__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
1025
+ AlertDialogPrimitive__namespace.Title,
1026
+ {
1027
+ ref,
1028
+ className: chunk7Z5LLJ3A_js.cn("text-lg font-semibold", className),
1029
+ ...props
1030
+ }
1031
+ ));
1032
+ AlertDialogTitle.displayName = AlertDialogPrimitive__namespace.Title.displayName;
1033
+ var AlertDialogDescription = React33__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
1034
+ AlertDialogPrimitive__namespace.Description,
1035
+ {
1036
+ ref,
1037
+ className: chunk7Z5LLJ3A_js.cn("text-sm text-muted-foreground", className),
1038
+ ...props
1039
+ }
1040
+ ));
1041
+ AlertDialogDescription.displayName = AlertDialogPrimitive__namespace.Description.displayName;
1042
+ var AlertDialogAction = React33__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
1043
+ AlertDialogPrimitive__namespace.Action,
1044
+ {
1045
+ ref,
1046
+ className: chunk7Z5LLJ3A_js.cn(buttonVariants(), className),
1047
+ ...props
1048
+ }
1049
+ ));
1050
+ AlertDialogAction.displayName = AlertDialogPrimitive__namespace.Action.displayName;
1051
+ var AlertDialogCancel = React33__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
1052
+ AlertDialogPrimitive__namespace.Cancel,
1053
+ {
1054
+ ref,
1055
+ className: chunk7Z5LLJ3A_js.cn(
1056
+ buttonVariants({ variant: "outline" }),
1057
+ "mt-2 sm:mt-0",
1058
+ className
1059
+ ),
1060
+ ...props
1061
+ }
1062
+ ));
1063
+ AlertDialogCancel.displayName = AlertDialogPrimitive__namespace.Cancel.displayName;
1064
+ var DropdownMenu = DropdownMenuPrimitive__namespace.Root;
1065
+ var DropdownMenuTrigger = DropdownMenuPrimitive__namespace.Trigger;
1066
+ var DropdownMenuGroup = DropdownMenuPrimitive__namespace.Group;
1067
+ var DropdownMenuPortal = DropdownMenuPrimitive__namespace.Portal;
1068
+ var DropdownMenuSub = DropdownMenuPrimitive__namespace.Sub;
1069
+ var DropdownMenuRadioGroup = DropdownMenuPrimitive__namespace.RadioGroup;
1070
+ var DropdownMenuSubTrigger = React33__namespace.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
1071
+ DropdownMenuPrimitive__namespace.SubTrigger,
1072
+ {
1073
+ ref,
1074
+ className: chunk7Z5LLJ3A_js.cn(
1075
+ "flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none focus:bg-accent data-[state=open]:bg-accent [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0",
1076
+ inset && "pl-8",
1077
+ className
1078
+ ),
1079
+ ...props
1080
+ },
1081
+ children,
1082
+ /* @__PURE__ */ React33__namespace.createElement(lucideReact.ChevronRight, { className: "ml-auto" })
1083
+ ));
1084
+ DropdownMenuSubTrigger.displayName = DropdownMenuPrimitive__namespace.SubTrigger.displayName;
1085
+ var DropdownMenuSubContent = React33__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
1086
+ DropdownMenuPrimitive__namespace.SubContent,
1087
+ {
1088
+ ref,
1089
+ className: chunk7Z5LLJ3A_js.cn(
1090
+ "z-50 min-w-[8rem] overflow-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-lg data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-dropdown-menu-content-transform-origin]",
1091
+ className
1092
+ ),
1093
+ ...props
1094
+ }
1095
+ ));
1096
+ DropdownMenuSubContent.displayName = DropdownMenuPrimitive__namespace.SubContent.displayName;
1097
+ var DropdownMenuContent = React33__namespace.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(DropdownMenuPrimitive__namespace.Portal, null, /* @__PURE__ */ React33__namespace.createElement(
1098
+ DropdownMenuPrimitive__namespace.Content,
1099
+ {
1100
+ ref,
1101
+ sideOffset,
1102
+ className: chunk7Z5LLJ3A_js.cn(
1103
+ "z-50 max-h-[var(--radix-dropdown-menu-content-available-height)] min-w-[8rem] overflow-y-auto overflow-x-hidden rounded-md border bg-popover p-1 text-popover-foreground shadow-md",
1104
+ "data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-dropdown-menu-content-transform-origin]",
1105
+ className
1106
+ ),
1107
+ ...props
1108
+ }
1109
+ )));
1110
+ DropdownMenuContent.displayName = DropdownMenuPrimitive__namespace.Content.displayName;
1111
+ var DropdownMenuItem = React33__namespace.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
1112
+ DropdownMenuPrimitive__namespace.Item,
1113
+ {
1114
+ ref,
1115
+ className: chunk7Z5LLJ3A_js.cn(
1116
+ "relative flex cursor-default select-none items-center gap-2 rounded-sm px-2 py-1.5 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50 [&>svg]:size-4 [&>svg]:shrink-0",
1117
+ inset && "pl-8",
1118
+ className
1119
+ ),
1120
+ ...props
1121
+ }
1122
+ ));
1123
+ DropdownMenuItem.displayName = DropdownMenuPrimitive__namespace.Item.displayName;
1124
+ var DropdownMenuCheckboxItem = React33__namespace.forwardRef(({ className, children, checked, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
1125
+ DropdownMenuPrimitive__namespace.CheckboxItem,
1126
+ {
1127
+ ref,
1128
+ className: chunk7Z5LLJ3A_js.cn(
1129
+ "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
1130
+ className
1131
+ ),
1132
+ checked,
1133
+ ...props
1134
+ },
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" }))),
1136
+ children
1137
+ ));
1138
+ DropdownMenuCheckboxItem.displayName = DropdownMenuPrimitive__namespace.CheckboxItem.displayName;
1139
+ var DropdownMenuRadioItem = React33__namespace.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
1140
+ DropdownMenuPrimitive__namespace.RadioItem,
1141
+ {
1142
+ ref,
1143
+ className: chunk7Z5LLJ3A_js.cn(
1144
+ "relative flex cursor-default select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none transition-colors focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
1145
+ className
1146
+ ),
1147
+ ...props
1148
+ },
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" }))),
1150
+ children
1151
+ ));
1152
+ DropdownMenuRadioItem.displayName = DropdownMenuPrimitive__namespace.RadioItem.displayName;
1153
+ var DropdownMenuLabel = React33__namespace.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
1154
+ DropdownMenuPrimitive__namespace.Label,
1155
+ {
1156
+ ref,
1157
+ className: chunk7Z5LLJ3A_js.cn(
1158
+ "px-2 py-1.5 text-sm font-semibold",
1159
+ inset && "pl-8",
1160
+ className
1161
+ ),
1162
+ ...props
1163
+ }
1164
+ ));
1165
+ DropdownMenuLabel.displayName = DropdownMenuPrimitive__namespace.Label.displayName;
1166
+ var DropdownMenuSeparator = React33__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
1167
+ DropdownMenuPrimitive__namespace.Separator,
1168
+ {
1169
+ ref,
1170
+ className: chunk7Z5LLJ3A_js.cn("-mx-1 my-1 h-px bg-muted", className),
1171
+ ...props
1172
+ }
1173
+ ));
1174
+ DropdownMenuSeparator.displayName = DropdownMenuPrimitive__namespace.Separator.displayName;
1175
+ var DropdownMenuShortcut = ({
1176
+ className,
1177
+ ...props
1178
+ }) => {
1179
+ return /* @__PURE__ */ React33__namespace.createElement(
1180
+ "span",
1181
+ {
1182
+ className: chunk7Z5LLJ3A_js.cn("ml-auto text-xs tracking-widest opacity-60", className),
1183
+ ...props
1184
+ }
1185
+ );
1186
+ };
1187
+ DropdownMenuShortcut.displayName = "DropdownMenuShortcut";
1188
+ var Popover = PopoverPrimitive__namespace.Root;
1189
+ var PopoverTrigger = PopoverPrimitive__namespace.Trigger;
1190
+ var PopoverAnchor = PopoverPrimitive__namespace.Anchor;
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(
1192
+ PopoverPrimitive__namespace.Content,
1193
+ {
1194
+ ref,
1195
+ align,
1196
+ sideOffset,
1197
+ className: chunk7Z5LLJ3A_js.cn(
1198
+ "z-50 w-72 rounded-md border bg-popover p-4 text-popover-foreground shadow-md outline-none data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-popover-content-transform-origin]",
1199
+ className
1200
+ ),
1201
+ ...props
1202
+ }
1203
+ )));
1204
+ PopoverContent.displayName = PopoverPrimitive__namespace.Content.displayName;
1205
+ var Progress = React33__namespace.forwardRef(({ className, value, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
1206
+ ProgressPrimitive__namespace.Root,
1207
+ {
1208
+ ref,
1209
+ className: chunk7Z5LLJ3A_js.cn(
1210
+ "relative h-2 w-full overflow-hidden rounded-full bg-primary/20",
1211
+ className
1212
+ ),
1213
+ ...props
1214
+ },
1215
+ /* @__PURE__ */ React33__namespace.createElement(
1216
+ ProgressPrimitive__namespace.Indicator,
1217
+ {
1218
+ className: "h-full w-full flex-1 bg-primary transition-all",
1219
+ style: { transform: `translateX(-${100 - (value || 0)}%)` }
1220
+ }
1221
+ )
1222
+ ));
1223
+ Progress.displayName = ProgressPrimitive__namespace.Root.displayName;
1224
+ var ScrollArea = React33__namespace.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
1225
+ ScrollAreaPrimitive__namespace.Root,
1226
+ {
1227
+ ref,
1228
+ className: chunk7Z5LLJ3A_js.cn("relative overflow-hidden", className),
1229
+ ...props
1230
+ },
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)
1234
+ ));
1235
+ ScrollArea.displayName = ScrollAreaPrimitive__namespace.Root.displayName;
1236
+ var ScrollBar = React33__namespace.forwardRef(({ className, orientation = "vertical", ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
1237
+ ScrollAreaPrimitive__namespace.ScrollAreaScrollbar,
1238
+ {
1239
+ ref,
1240
+ orientation,
1241
+ className: chunk7Z5LLJ3A_js.cn(
1242
+ "flex touch-none select-none transition-colors",
1243
+ orientation === "vertical" && "h-full w-2.5 border-l border-l-transparent p-[1px]",
1244
+ orientation === "horizontal" && "h-2.5 flex-col border-t border-t-transparent p-[1px]",
1245
+ className
1246
+ ),
1247
+ ...props
1248
+ },
1249
+ /* @__PURE__ */ React33__namespace.createElement(ScrollAreaPrimitive__namespace.ScrollAreaThumb, { className: "relative flex-1 rounded-full bg-border" })
1250
+ ));
1251
+ ScrollBar.displayName = ScrollAreaPrimitive__namespace.ScrollAreaScrollbar.displayName;
1252
+ var Select = SelectPrimitive__namespace.Root;
1253
+ var SelectGroup = SelectPrimitive__namespace.Group;
1254
+ var SelectValue = SelectPrimitive__namespace.Value;
1255
+ var SelectTrigger = React33__namespace.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
1256
+ SelectPrimitive__namespace.Trigger,
1257
+ {
1258
+ ref,
1259
+ className: chunk7Z5LLJ3A_js.cn(
1260
+ "flex h-9 w-full items-center justify-between whitespace-nowrap rounded-md border border-input bg-transparent px-3 py-2 text-sm shadow-sm ring-offset-background data-[placeholder]:text-muted-foreground focus:outline-none focus:ring-1 focus:ring-ring disabled:cursor-not-allowed disabled:opacity-50 [&>span]:line-clamp-1",
1261
+ className
1262
+ ),
1263
+ ...props
1264
+ },
1265
+ children,
1266
+ /* @__PURE__ */ React33__namespace.createElement(SelectPrimitive__namespace.Icon, { asChild: true }, /* @__PURE__ */ React33__namespace.createElement(lucideReact.ChevronDown, { className: "h-4 w-4 opacity-50" }))
1267
+ ));
1268
+ SelectTrigger.displayName = SelectPrimitive__namespace.Trigger.displayName;
1269
+ var SelectScrollUpButton = React33__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
1270
+ SelectPrimitive__namespace.ScrollUpButton,
1271
+ {
1272
+ ref,
1273
+ className: chunk7Z5LLJ3A_js.cn(
1274
+ "flex cursor-default items-center justify-center py-1",
1275
+ className
1276
+ ),
1277
+ ...props
1278
+ },
1279
+ /* @__PURE__ */ React33__namespace.createElement(lucideReact.ChevronUp, { className: "h-4 w-4" })
1280
+ ));
1281
+ SelectScrollUpButton.displayName = SelectPrimitive__namespace.ScrollUpButton.displayName;
1282
+ var SelectScrollDownButton = React33__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
1283
+ SelectPrimitive__namespace.ScrollDownButton,
1284
+ {
1285
+ ref,
1286
+ className: chunk7Z5LLJ3A_js.cn(
1287
+ "flex cursor-default items-center justify-center py-1",
1288
+ className
1289
+ ),
1290
+ ...props
1291
+ },
1292
+ /* @__PURE__ */ React33__namespace.createElement(lucideReact.ChevronDown, { className: "h-4 w-4" })
1293
+ ));
1294
+ SelectScrollDownButton.displayName = SelectPrimitive__namespace.ScrollDownButton.displayName;
1295
+ var SelectContent = React33__namespace.forwardRef(({ className, children, position = "popper", ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(SelectPrimitive__namespace.Portal, null, /* @__PURE__ */ React33__namespace.createElement(
1296
+ SelectPrimitive__namespace.Content,
1297
+ {
1298
+ ref,
1299
+ className: chunk7Z5LLJ3A_js.cn(
1300
+ "relative z-50 max-h-[--radix-select-content-available-height] min-w-[8rem] overflow-y-auto overflow-x-hidden rounded-md border bg-popover text-popover-foreground shadow-md data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-select-content-transform-origin]",
1301
+ position === "popper" && "data-[side=bottom]:translate-y-1 data-[side=left]:-translate-x-1 data-[side=right]:translate-x-1 data-[side=top]:-translate-y-1",
1302
+ className
1303
+ ),
1304
+ position,
1305
+ ...props
1306
+ },
1307
+ /* @__PURE__ */ React33__namespace.createElement(SelectScrollUpButton, null),
1308
+ /* @__PURE__ */ React33__namespace.createElement(
1309
+ SelectPrimitive__namespace.Viewport,
1310
+ {
1311
+ className: chunk7Z5LLJ3A_js.cn(
1312
+ "p-1",
1313
+ position === "popper" && "h-[var(--radix-select-trigger-height)] w-full min-w-[var(--radix-select-trigger-width)]"
1314
+ )
1315
+ },
1316
+ children
1317
+ ),
1318
+ /* @__PURE__ */ React33__namespace.createElement(SelectScrollDownButton, null)
1319
+ )));
1320
+ SelectContent.displayName = SelectPrimitive__namespace.Content.displayName;
1321
+ var SelectLabel = React33__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
1322
+ SelectPrimitive__namespace.Label,
1323
+ {
1324
+ ref,
1325
+ className: chunk7Z5LLJ3A_js.cn("px-2 py-1.5 text-sm font-semibold", className),
1326
+ ...props
1327
+ }
1328
+ ));
1329
+ SelectLabel.displayName = SelectPrimitive__namespace.Label.displayName;
1330
+ var SelectItem = React33__namespace.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
1331
+ SelectPrimitive__namespace.Item,
1332
+ {
1333
+ ref,
1334
+ className: chunk7Z5LLJ3A_js.cn(
1335
+ "relative flex w-full cursor-default select-none items-center rounded-sm py-1.5 pl-2 pr-8 text-sm outline-none focus:bg-accent focus:text-accent-foreground data-[disabled]:pointer-events-none data-[disabled]:opacity-50",
1336
+ className
1337
+ ),
1338
+ ...props
1339
+ },
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)
1342
+ ));
1343
+ SelectItem.displayName = SelectPrimitive__namespace.Item.displayName;
1344
+ var SelectSeparator = React33__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
1345
+ SelectPrimitive__namespace.Separator,
1346
+ {
1347
+ ref,
1348
+ className: chunk7Z5LLJ3A_js.cn("-mx-1 my-1 h-px bg-muted", className),
1349
+ ...props
1350
+ }
1351
+ ));
1352
+ SelectSeparator.displayName = SelectPrimitive__namespace.Separator.displayName;
1353
+ var Separator3 = React33__namespace.forwardRef(
1354
+ ({ className, orientation = "horizontal", decorative = true, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
1355
+ SeparatorPrimitive__namespace.Root,
1356
+ {
1357
+ ref,
1358
+ decorative,
1359
+ orientation,
1360
+ className: chunk7Z5LLJ3A_js.cn(
1361
+ "shrink-0 bg-border",
1362
+ orientation === "horizontal" ? "h-[1px] w-full" : "h-full w-[1px]",
1363
+ className
1364
+ ),
1365
+ ...props
1366
+ }
1367
+ )
1368
+ );
1369
+ Separator3.displayName = SeparatorPrimitive__namespace.Root.displayName;
1370
+ var Sheet = DialogPrimitive__namespace.Root;
1371
+ var SheetTrigger = DialogPrimitive__namespace.Trigger;
1372
+ var SheetClose = DialogPrimitive__namespace.Close;
1373
+ var SheetPortal = DialogPrimitive__namespace.Portal;
1374
+ var SheetOverlay = React33__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
1375
+ DialogPrimitive__namespace.Overlay,
1376
+ {
1377
+ className: chunk7Z5LLJ3A_js.cn(
1378
+ "fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0",
1379
+ className
1380
+ ),
1381
+ ...props,
1382
+ ref
1383
+ }
1384
+ ));
1385
+ SheetOverlay.displayName = DialogPrimitive__namespace.Overlay.displayName;
1386
+ var sheetVariants = classVarianceAuthority.cva(
1387
+ "fixed z-50 gap-4 bg-background p-6 shadow-lg transition ease-in-out data-[state=closed]:duration-300 data-[state=open]:duration-500 data-[state=open]:animate-in data-[state=closed]:animate-out",
1388
+ {
1389
+ variants: {
1390
+ side: {
1391
+ top: "inset-x-0 top-0 border-b data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top",
1392
+ bottom: "inset-x-0 bottom-0 border-t data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom",
1393
+ left: "inset-y-0 left-0 h-full w-3/4 border-r data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left sm:max-w-sm",
1394
+ right: "inset-y-0 right-0 h-full w-3/4 border-l data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right sm:max-w-sm"
1395
+ }
1396
+ },
1397
+ defaultVariants: {
1398
+ side: "right"
1399
+ }
1400
+ }
1401
+ );
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(
1403
+ DialogPrimitive__namespace.Content,
1404
+ {
1405
+ ref,
1406
+ className: chunk7Z5LLJ3A_js.cn(sheetVariants({ side }), className),
1407
+ ...props
1408
+ },
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")),
1410
+ children
1411
+ )));
1412
+ SheetContent.displayName = DialogPrimitive__namespace.Content.displayName;
1413
+ var SheetHeader = ({
1414
+ className,
1415
+ ...props
1416
+ }) => /* @__PURE__ */ React33__namespace.createElement(
1417
+ "div",
1418
+ {
1419
+ className: chunk7Z5LLJ3A_js.cn(
1420
+ "flex flex-col space-y-2 text-center sm:text-left",
1421
+ className
1422
+ ),
1423
+ ...props
1424
+ }
1425
+ );
1426
+ SheetHeader.displayName = "SheetHeader";
1427
+ var SheetFooter = ({
1428
+ className,
1429
+ ...props
1430
+ }) => /* @__PURE__ */ React33__namespace.createElement(
1431
+ "div",
1432
+ {
1433
+ className: chunk7Z5LLJ3A_js.cn(
1434
+ "flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2",
1435
+ className
1436
+ ),
1437
+ ...props
1438
+ }
1439
+ );
1440
+ SheetFooter.displayName = "SheetFooter";
1441
+ var SheetTitle = React33__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
1442
+ DialogPrimitive__namespace.Title,
1443
+ {
1444
+ ref,
1445
+ className: chunk7Z5LLJ3A_js.cn("text-lg font-semibold text-foreground", className),
1446
+ ...props
1447
+ }
1448
+ ));
1449
+ SheetTitle.displayName = DialogPrimitive__namespace.Title.displayName;
1450
+ var SheetDescription = React33__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
1451
+ DialogPrimitive__namespace.Description,
1452
+ {
1453
+ ref,
1454
+ className: chunk7Z5LLJ3A_js.cn("text-sm text-muted-foreground", className),
1455
+ ...props
1456
+ }
1457
+ ));
1458
+ SheetDescription.displayName = DialogPrimitive__namespace.Description.displayName;
1459
+ var Textarea = React33__namespace.forwardRef(({ className, ...props }, ref) => {
1460
+ return /* @__PURE__ */ React33__namespace.createElement(
1461
+ "textarea",
1462
+ {
1463
+ className: chunk7Z5LLJ3A_js.cn(
1464
+ "flex min-h-[60px] w-full rounded-md border border-input bg-transparent px-3 py-2 text-base shadow-sm placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:cursor-not-allowed disabled:opacity-50 md:text-sm",
1465
+ className
1466
+ ),
1467
+ ref,
1468
+ ...props
1469
+ }
1470
+ );
1471
+ });
1472
+ Textarea.displayName = "Textarea";
1473
+ var TooltipProvider = TooltipPrimitive__namespace.Provider;
1474
+ var Tooltip = TooltipPrimitive__namespace.Root;
1475
+ var TooltipTrigger = TooltipPrimitive__namespace.Trigger;
1476
+ var TooltipContent = React33__namespace.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(TooltipPrimitive__namespace.Portal, null, /* @__PURE__ */ React33__namespace.createElement(
1477
+ TooltipPrimitive__namespace.Content,
1478
+ {
1479
+ ref,
1480
+ sideOffset,
1481
+ className: chunk7Z5LLJ3A_js.cn(
1482
+ "z-50 overflow-hidden rounded-md bg-primary px-3 py-1.5 text-xs text-primary-foreground animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 origin-[--radix-tooltip-content-transform-origin]",
1483
+ className
1484
+ ),
1485
+ ...props
1486
+ }
1487
+ )));
1488
+ TooltipContent.displayName = TooltipPrimitive__namespace.Content.displayName;
1489
+ var Avatar = React33__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
1490
+ AvatarPrimitive__namespace.Root,
1491
+ {
1492
+ ref,
1493
+ className: chunk7Z5LLJ3A_js.cn(
1494
+ "relative flex h-10 w-10 shrink-0 overflow-hidden rounded-full",
1495
+ className
1496
+ ),
1497
+ ...props
1498
+ }
1499
+ ));
1500
+ Avatar.displayName = AvatarPrimitive__namespace.Root.displayName;
1501
+ var AvatarImage = React33__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
1502
+ AvatarPrimitive__namespace.Image,
1503
+ {
1504
+ ref,
1505
+ className: chunk7Z5LLJ3A_js.cn("aspect-square h-full w-full", className),
1506
+ ...props
1507
+ }
1508
+ ));
1509
+ AvatarImage.displayName = AvatarPrimitive__namespace.Image.displayName;
1510
+ var AvatarFallback = React33__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React33__namespace.createElement(
1511
+ AvatarPrimitive__namespace.Fallback,
1512
+ {
1513
+ ref,
1514
+ className: chunk7Z5LLJ3A_js.cn(
1515
+ "flex h-full w-full items-center justify-center rounded-full bg-muted",
1516
+ className
1517
+ ),
1518
+ ...props
1519
+ }
1520
+ ));
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
+ };
1566
+ var CollisionBalls = ({
1567
+ collisionBallsConfig: {
1568
+ balls,
1569
+ width,
1570
+ height
1571
+ }
1572
+ }) => {
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);
1580
+ const updateCanvasSize = () => {
1581
+ const container = containerRef.current;
1582
+ const canvas = canvasRef.current;
1583
+ if (!container || !canvas) {
1584
+ console.error("Container or canvas not found");
1585
+ return;
1586
+ }
1587
+ const containerWidth = container.clientWidth;
1588
+ const containerHeight = container.clientHeight;
1589
+ console.log("Container size:", { containerWidth, containerHeight });
1590
+ canvas.width = containerWidth;
1591
+ canvas.height = containerHeight;
1592
+ canvas.style.width = `${containerWidth}px`;
1593
+ canvas.style.height = `${containerHeight}px`;
1594
+ console.log("Canvas size updated:", {
1595
+ width: canvas.width,
1596
+ height: canvas.height,
1597
+ containerWidth,
1598
+ containerHeight
1599
+ });
1600
+ };
1601
+ const initBalls = () => {
1602
+ const canvas = canvasRef.current;
1603
+ if (!canvas) {
1604
+ console.error("Canvas not found during ball initialization");
1605
+ return [];
1606
+ }
1607
+ console.log("Initializing balls with canvas size:", {
1608
+ width: canvas.width,
1609
+ height: canvas.height
1610
+ });
1611
+ return balls.map((ballConfig) => ({
1612
+ x: Math.random() * (canvas.width - 100) + 50,
1613
+ y: Math.random() * (canvas.height - 100) + 50,
1614
+ vx: (Math.random() - 0.5) * 4,
1615
+ vy: (Math.random() - 0.5) * 4,
1616
+ radius: ballConfig.size,
1617
+ color: ballConfig.color,
1618
+ text: ballConfig.label,
1619
+ isDragging: false
1620
+ }));
1621
+ };
1622
+ React33.useEffect(() => {
1623
+ const handleResize = () => {
1624
+ console.log("Window resized");
1625
+ updateCanvasSize();
1626
+ };
1627
+ if (typeof window !== "undefined") {
1628
+ window.addEventListener("resize", handleResize);
1629
+ updateCanvasSize();
1630
+ }
1631
+ return () => {
1632
+ if (typeof window !== "undefined") {
1633
+ window.removeEventListener("resize", handleResize);
1634
+ }
1635
+ };
1636
+ }, []);
1637
+ React33.useEffect(() => {
1638
+ const canvas = canvasRef.current;
1639
+ if (!canvas) {
1640
+ console.error("Canvas element not found");
1641
+ return;
1642
+ }
1643
+ const ctx = canvas.getContext("2d");
1644
+ if (!ctx) {
1645
+ console.error("Failed to get canvas context");
1646
+ return;
1647
+ }
1648
+ console.log("Starting animation setup...");
1649
+ updateCanvasSize();
1650
+ ballsRef.current = initBalls();
1651
+ console.log("Balls initialized:", ballsRef.current);
1652
+ let lastTime = performance.now();
1653
+ let frameCount = 0;
1654
+ const animate = (currentTime) => {
1655
+ try {
1656
+ frameCount++;
1657
+ if (currentTime - lastTime >= 1e3) {
1658
+ console.log(`FPS: ${frameCount}`);
1659
+ frameCount = 0;
1660
+ lastTime = currentTime;
1661
+ }
1662
+ ctx.clearRect(0, 0, canvas.width, canvas.height);
1663
+ ballsRef.current.forEach((ball) => {
1664
+ if (!ball.isDragging) {
1665
+ updatePosition(ball, canvas.width, canvas.height);
1666
+ }
1667
+ for (let i = 0; i < ballsRef.current.length; i++) {
1668
+ for (let j = i + 1; j < ballsRef.current.length; j++) {
1669
+ const ball1 = ballsRef.current[i];
1670
+ const ball2 = ballsRef.current[j];
1671
+ if (ball1 && ball2) {
1672
+ checkCollision(ball1, ball2);
1673
+ }
1674
+ }
1675
+ }
1676
+ draw(ctx, ball);
1677
+ });
1678
+ animationRef.current = requestAnimationFrame(animate);
1679
+ } catch (error) {
1680
+ console.error("Animation error:", error);
1681
+ }
1682
+ };
1683
+ console.log("Starting animation loop...");
1684
+ animationRef.current = requestAnimationFrame(animate);
1685
+ return () => {
1686
+ console.log("Cleaning up animation...");
1687
+ if (animationRef.current) {
1688
+ cancelAnimationFrame(animationRef.current);
1689
+ animationRef.current = null;
1690
+ }
1691
+ };
1692
+ }, []);
1693
+ const shake = () => {
1694
+ setIsShaking(true);
1695
+ ballsRef.current.forEach((ball) => {
1696
+ ball.vx = (Math.random() - 0.5) * 10;
1697
+ ball.vy = (Math.random() - 0.5) * 10;
1698
+ });
1699
+ setTimeout(() => setIsShaking(false), 200);
1700
+ };
1701
+ const slowdown = () => {
1702
+ setIsShaking(true);
1703
+ ballsRef.current.forEach((ball) => {
1704
+ ball.vx = ball.vx * 0.5;
1705
+ ball.vy = ball.vy * 0.5;
1706
+ });
1707
+ setTimeout(() => setIsShaking(false), 200);
1708
+ };
1709
+ const checkCollision = (ball1, ball2) => {
1710
+ const dx = ball2.x - ball1.x;
1711
+ const dy = ball2.y - ball1.y;
1712
+ const distance = Math.sqrt(dx * dx + dy * dy);
1713
+ if (distance < ball1.radius + ball2.radius) {
1714
+ const angle = Math.atan2(dy, dx);
1715
+ const overlap = (ball1.radius + ball2.radius - distance) / 2;
1716
+ if (ball1.isDragging || ball2.isDragging) {
1717
+ const draggedBall2 = ball1.isDragging ? ball1 : ball2;
1718
+ const otherBall = ball1.isDragging ? ball2 : ball1;
1719
+ otherBall.x += (draggedBall2 === ball1 ? 1 : -1) * overlap * Math.cos(angle);
1720
+ otherBall.y += (draggedBall2 === ball1 ? 1 : -1) * overlap * Math.sin(angle);
1721
+ const pushForce = 2;
1722
+ otherBall.vx = (draggedBall2 === ball1 ? -1 : 1) * Math.cos(angle) * pushForce;
1723
+ otherBall.vy = (draggedBall2 === ball1 ? -1 : 1) * Math.sin(angle) * pushForce;
1724
+ return;
1725
+ }
1726
+ const sin = Math.sin(angle);
1727
+ const cos = Math.cos(angle);
1728
+ const vx1 = ball1.vx * cos + ball1.vy * sin;
1729
+ const vy1 = ball1.vy * cos - ball1.vx * sin;
1730
+ const vx2 = ball2.vx * cos + ball2.vy * sin;
1731
+ const vy2 = ball2.vy * cos - ball2.vx * sin;
1732
+ const newVx1 = vx2;
1733
+ const newVx2 = vx1;
1734
+ ball1.vx = newVx1 * cos - vy1 * sin;
1735
+ ball1.vy = vy1 * cos + newVx1 * sin;
1736
+ ball2.vx = newVx2 * cos - vy2 * sin;
1737
+ ball2.vy = vy2 * cos + newVx2 * sin;
1738
+ ball1.x -= overlap * Math.cos(angle);
1739
+ ball1.y -= overlap * Math.sin(angle);
1740
+ ball2.x += overlap * Math.cos(angle);
1741
+ ball2.y += overlap * Math.sin(angle);
1742
+ }
1743
+ };
1744
+ const updatePosition = (ball, width2, height2) => {
1745
+ const handleBoundaryCollision = (velocity, position, boundary, radius) => {
1746
+ let newVelocity = velocity;
1747
+ let newPosition = position;
1748
+ if (position - radius < 0) {
1749
+ newPosition = radius;
1750
+ newVelocity = Math.abs(velocity);
1751
+ } else if (position + radius > boundary) {
1752
+ newPosition = boundary - radius;
1753
+ newVelocity = -Math.abs(velocity);
1754
+ }
1755
+ return [newVelocity, newPosition];
1756
+ };
1757
+ const [newVx, newX] = handleBoundaryCollision(
1758
+ ball.vx,
1759
+ ball.x,
1760
+ width2,
1761
+ ball.radius
1762
+ );
1763
+ const [newVy, newY] = handleBoundaryCollision(
1764
+ ball.vy,
1765
+ ball.y,
1766
+ height2,
1767
+ ball.radius
1768
+ );
1769
+ ball.vx = newVx;
1770
+ ball.vy = newVy;
1771
+ ball.x = newX;
1772
+ ball.y = newY;
1773
+ };
1774
+ const draw = (ctx, ball) => {
1775
+ ctx.beginPath();
1776
+ ctx.arc(ball.x, ball.y, ball.radius, 0, Math.PI * 2);
1777
+ ctx.fillStyle = ball.color;
1778
+ ctx.fill();
1779
+ ctx.closePath();
1780
+ if (ball.text) {
1781
+ ctx.font = "14px Arial";
1782
+ ctx.fillStyle = "#fff";
1783
+ ctx.textAlign = "center";
1784
+ ctx.textBaseline = "middle";
1785
+ ctx.fillText(ball.text, ball.x, ball.y);
1786
+ }
1787
+ };
1788
+ const handleMouseDown = (event) => {
1789
+ const mousePos2 = getMousePos(event);
1790
+ const ball = ballsRef.current.find((b) => {
1791
+ const dx = b.x - mousePos2.x;
1792
+ const dy = b.y - mousePos2.y;
1793
+ return Math.sqrt(dx * dx + dy * dy) < b.radius;
1794
+ });
1795
+ if (ball) {
1796
+ ball.isDragging = true;
1797
+ setDraggedBall(ball);
1798
+ }
1799
+ };
1800
+ const handleMouseMove = (event) => {
1801
+ const mousePos2 = getMousePos(event);
1802
+ setMousePos(mousePos2);
1803
+ if (draggedBall) {
1804
+ draggedBall.x = mousePos2.x;
1805
+ draggedBall.y = mousePos2.y;
1806
+ draggedBall.vx = 0;
1807
+ draggedBall.vy = 0;
1808
+ }
1809
+ };
1810
+ const handleMouseUp = () => {
1811
+ if (draggedBall) {
1812
+ draggedBall.isDragging = false;
1813
+ setDraggedBall(null);
1814
+ }
1815
+ };
1816
+ const getMousePos = (event) => {
1817
+ const canvas = canvasRef.current;
1818
+ if (!canvas) return { x: 0, y: 0 };
1819
+ const rect = canvas.getBoundingClientRect();
1820
+ const scaleX = canvas.width / rect.width;
1821
+ const scaleY = canvas.height / rect.height;
1822
+ return {
1823
+ x: (event.clientX - rect.left) * scaleX,
1824
+ y: (event.clientY - rect.top) * scaleY
1825
+ };
1826
+ };
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(
1828
+ "canvas",
1829
+ {
1830
+ ref: canvasRef,
1831
+ style: {
1832
+ width: "100%",
1833
+ height: "100%",
1834
+ display: "block"
1835
+ // 确保canvas正确显示
1836
+ },
1837
+ onMouseDown: handleMouseDown,
1838
+ onMouseMove: handleMouseMove,
1839
+ onMouseUp: handleMouseUp,
1840
+ onMouseLeave: handleMouseUp
1841
+ }
1842
+ )), /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "absolute bottom-4 right-4 flex gap-2" }, /* @__PURE__ */ React33__namespace.default.createElement(
1843
+ "button",
1844
+ {
1845
+ onClick: shake,
1846
+ className: `px-4 py-2 bg-blue-500 text-white rounded-lg hover:bg-blue-600 transition-colors ${isShaking ? "animate-pulse" : ""}`
1847
+ },
1848
+ "\u6447\u4E00\u6447"
1849
+ ), /* @__PURE__ */ React33__namespace.default.createElement(
1850
+ "button",
1851
+ {
1852
+ onClick: slowdown,
1853
+ className: `px-4 py-2 bg-green-500 text-white rounded-lg hover:bg-green-600 transition-colors ${isShaking ? "animate-pulse" : ""}`
1854
+ },
1855
+ "\u51CF\u901F"
1856
+ )));
1857
+ };
1858
+ var themeStyles = {
1859
+ light: "",
1860
+ dark: "bg-[#222] text-[#eee] border-[#444]",
1861
+ blue: "bg-[#f0f8ff] border-[#1890ff]/20"
1862
+ };
1863
+ var ProfileModal = ({
1864
+ isOpen,
1865
+ onClose,
1866
+ data,
1867
+ showAvatar = true,
1868
+ showContacts = true,
1869
+ showSocial = true,
1870
+ showBio = true,
1871
+ avatarSize = 80,
1872
+ onAvatarClick,
1873
+ onSocialLinkClick,
1874
+ onContactClick,
1875
+ themeName = "light",
1876
+ className
1877
+ }) => {
1878
+ const renderSocialLinks = () => {
1879
+ if (!data.socialLinks || data.socialLinks.length === 0) return null;
1880
+ return /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "flex gap-3 mt-2" }, data.socialLinks.map((link, index) => /* @__PURE__ */ React33__namespace.default.createElement(
1881
+ "a",
1882
+ {
1883
+ key: index,
1884
+ href: link.url,
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
+ ),
1889
+ title: link.type,
1890
+ target: "_blank",
1891
+ rel: "noopener noreferrer",
1892
+ onClick: (e) => {
1893
+ if (onSocialLinkClick) {
1894
+ e.preventDefault();
1895
+ onSocialLinkClick(link.url, link.type);
1896
+ }
1897
+ }
1898
+ },
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)
1900
+ )));
1901
+ };
1902
+ const renderContacts = () => {
1903
+ if (!data.contacts || Object.keys(data.contacts).length === 0) return null;
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(
1908
+ "div",
1909
+ {
1910
+ key: index,
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
+ ),
1915
+ onClick: () => onContactClick && onContactClick(type, value)
1916
+ },
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)
1922
+ )));
1923
+ };
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",
1930
+ {
1931
+ className: "shrink-0",
1932
+ onClick: onAvatarClick,
1933
+ style: { cursor: onAvatarClick ? "pointer" : "default" }
1934
+ },
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))));
1946
+ };
1947
+ var ProfileModal_default = ProfileModal;
1948
+ var BadgeList = ({
1949
+ badges,
1950
+ className = ""
1951
+ }) => {
1952
+ if (!badges || badges.length === 0) return null;
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
+ )));
1962
+ };
1963
+
1964
+ // src/features/profile/internal/Stat.tsx
1965
+ var Stat = ({
1966
+ label,
1967
+ value,
1968
+ icon,
1969
+ className = ""
1970
+ }) => {
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)));
1972
+ };
1973
+
1974
+ // src/features/profile/internal/StatList.tsx
1975
+ var StatList = ({
1976
+ stats,
1977
+ className = ""
1978
+ }) => {
1979
+ if (!stats || stats.length === 0) return null;
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 })));
1981
+ };
1982
+
1983
+ // src/features/profile/ProfileButton.tsx
1984
+ var exampleProfileData = {
1985
+ name: "\u5F20\u4E09",
1986
+ avatar: "https://randomuser.me/api/portraits/men/32.jpg",
1987
+ title: "\u9AD8\u7EA7\u524D\u7AEF\u5DE5\u7A0B\u5E08",
1988
+ bio: "\u4E13\u6CE8\u4E8EReact\u548CNext.js\u5F00\u53D1\u7684\u524D\u7AEF\u5DE5\u7A0B\u5E08\uFF0C\u67095\u5E74\u5DE5\u4F5C\u7ECF\u9A8C\u3002\u70ED\u7231\u5F00\u6E90\uFF0C\u559C\u6B22\u5206\u4EAB\u6280\u672F\u7ECF\u9A8C\u3002",
1989
+ contacts: {
1990
+ "\u90AE\u7BB1": "zhangsan@example.com",
1991
+ "\u7535\u8BDD": "138-8888-8888",
1992
+ "\u5730\u5740": "\u4E0A\u6D77\u5E02\u6D66\u4E1C\u65B0\u533A"
1993
+ },
1994
+ socialLinks: [
1995
+ { type: "GitHub", url: "https://github.com/zhangsan", icon: "\u2605" },
1996
+ { type: "Twitter", url: "https://twitter.com/zhangsan", icon: "\u2726" },
1997
+ { type: "LinkedIn", url: "https://linkedin.com/in/zhangsan", icon: "\u272A" }
1998
+ ],
1999
+ badges: [
2000
+ { label: "React", type: "primary" },
2001
+ { label: "Next.js", type: "success" },
2002
+ { label: "TypeScript", type: "info" },
2003
+ { label: "CSS", type: "default" }
2004
+ ],
2005
+ stats: [
2006
+ { label: "\u9879\u76EE", value: 42 },
2007
+ { label: "\u7C89\u4E1D", value: 1024 },
2008
+ { label: "\u8BC4\u5206", value: "4.9" }
2009
+ ],
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"))
2011
+ };
2012
+ var ProfileButton = ({
2013
+ data = exampleProfileData,
2014
+ buttonText = "\u67E5\u770B\u4E2A\u4EBA\u4FE1\u606F",
2015
+ variant = "default",
2016
+ size = "default",
2017
+ className = "",
2018
+ modalTheme = "light"
2019
+ }) => {
2020
+ const [isModalOpen, setIsModalOpen] = React33.useState(false);
2021
+ const openModal = () => setIsModalOpen(true);
2022
+ const closeModal = () => setIsModalOpen(false);
2023
+ const handleContactClick = (type, value) => {
2024
+ if (type === "\u90AE\u7BB1") {
2025
+ window.open(`mailto:${value}`);
2026
+ } else if (type === "\u7535\u8BDD") {
2027
+ window.open(`tel:${value}`);
2028
+ }
2029
+ };
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(
2040
+ ProfileModal_default,
2041
+ {
2042
+ isOpen: isModalOpen,
2043
+ onClose: closeModal,
2044
+ data,
2045
+ themeName: modalTheme,
2046
+ onContactClick: handleContactClick,
2047
+ onSocialLinkClick: (url) => window.open(url, "_blank")
2048
+ },
2049
+ data.customContent,
2050
+ data.badges && /* @__PURE__ */ React33__namespace.default.createElement(BadgeList, { badges: data.badges }),
2051
+ data.stats && /* @__PURE__ */ React33__namespace.default.createElement(StatList, { stats: data.stats })
2052
+ ));
2053
+ };
2054
+ var AutoOpenModal = ({
2055
+ data,
2056
+ delay = 500,
2057
+ // 默认延迟500毫秒
2058
+ themeName = "light",
2059
+ onClose
2060
+ }) => {
2061
+ const [isModalOpen, setIsModalOpen] = React33.useState(false);
2062
+ React33.useEffect(() => {
2063
+ const timer = setTimeout(() => {
2064
+ setIsModalOpen(true);
2065
+ }, delay);
2066
+ return () => clearTimeout(timer);
2067
+ }, [delay]);
2068
+ const handleClose = () => {
2069
+ setIsModalOpen(false);
2070
+ if (onClose) {
2071
+ onClose();
2072
+ }
2073
+ };
2074
+ const handleContactClick = (type, value) => {
2075
+ if (type === "\u90AE\u7BB1") {
2076
+ window.open(`mailto:${value}`);
2077
+ } else if (type === "\u7535\u8BDD") {
2078
+ window.open(`tel:${value}`);
2079
+ }
2080
+ };
2081
+ return /* @__PURE__ */ React33__namespace.default.createElement(
2082
+ ProfileModal_default,
2083
+ {
2084
+ isOpen: isModalOpen,
2085
+ onClose: handleClose,
2086
+ data,
2087
+ themeName,
2088
+ onContactClick: handleContactClick,
2089
+ onSocialLinkClick: (url) => window.open(url, "_blank")
2090
+ },
2091
+ data.badges && /* @__PURE__ */ React33__namespace.default.createElement(BadgeList, { badges: data.badges }),
2092
+ data.stats && /* @__PURE__ */ React33__namespace.default.createElement(StatList, { stats: data.stats })
2093
+ );
2094
+ };
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;
2211
+ var NavigationItemComponent = ({
2212
+ item,
2213
+ direction,
2214
+ isActive,
2215
+ onClick
2216
+ }) => {
2217
+ const handleClick = (e) => {
2218
+ e.preventDefault();
2219
+ onClick(item);
2220
+ };
2221
+ const getItemClasses = () => {
2222
+ const baseClasses = `
2223
+ group relative flex items-center gap-3
2224
+ transition-all duration-300 ease-in-out
2225
+ focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-opacity-50
2226
+ rounded-lg
2227
+ `;
2228
+ const directionClasses = direction === "vertical" ? "px-4 py-3 w-full justify-start" : "px-3 py-2 justify-center";
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";
2230
+ return `${baseClasses} ${directionClasses} ${stateClasses}`;
2231
+ };
2232
+ return /* @__PURE__ */ React33__namespace.default.createElement(
2233
+ "a",
2234
+ {
2235
+ href: item.href,
2236
+ onClick: handleClick,
2237
+ target: item.target,
2238
+ rel: item.isExternal ? "noopener noreferrer" : void 0,
2239
+ className: getItemClasses()
2240
+ },
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(
2244
+ "svg",
2245
+ {
2246
+ className: "w-3 h-3 opacity-60 group-hover:opacity-100 transition-opacity",
2247
+ fill: "none",
2248
+ stroke: "currentColor",
2249
+ viewBox: "0 0 24 24"
2250
+ },
2251
+ /* @__PURE__ */ React33__namespace.default.createElement(
2252
+ "path",
2253
+ {
2254
+ strokeLinecap: "round",
2255
+ strokeLinejoin: "round",
2256
+ strokeWidth: 2,
2257
+ d: "M10 6H6a2 2 0 00-2 2v10a2 2 0 002 2h10a2 2 0 002-2v-4M14 4h6m0 0v6m0-6L10 14"
2258
+ }
2259
+ )
2260
+ ),
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" })
2262
+ );
2263
+ };
2264
+ var NavigationItem_default = NavigationItemComponent;
2265
+
2266
+ // src/features/navigation/Navigation.tsx
2267
+ var Navigation = ({
2268
+ config,
2269
+ isOpen,
2270
+ activeItemId,
2271
+ onItemClick,
2272
+ className = ""
2273
+ }) => {
2274
+ const { direction, position, items, avatar, logo } = config;
2275
+ const getContainerClasses = () => {
2276
+ const baseClasses = `
2277
+ fixed z-[90]
2278
+ bg-white/95 backdrop-blur-lg
2279
+ border border-gray-200/50
2280
+ shadow-2xl
2281
+ transition-all duration-500 ease-in-out
2282
+ `;
2283
+ if (direction === "vertical") {
2284
+ const verticalClasses = "h-screen w-64 flex flex-col";
2285
+ const positionClasses = position === "left" ? `left-0 top-0 ${isOpen ? "translate-x-0" : "-translate-x-full"}` : `right-0 top-0 ${isOpen ? "translate-x-0" : "translate-x-full"}`;
2286
+ return `${baseClasses} ${verticalClasses} ${positionClasses}`;
2287
+ } else {
2288
+ const horizontalClasses = "w-full h-16 flex items-center";
2289
+ const positionClasses = position === "top" ? `top-0 left-0 right-0 ${isOpen ? "translate-y-0" : "-translate-y-full"}` : `bottom-0 left-0 right-0 ${isOpen ? "translate-y-0" : "translate-y-full"}`;
2290
+ return `${baseClasses} ${horizontalClasses} ${positionClasses}`;
2291
+ }
2292
+ };
2293
+ const getContentClasses = () => {
2294
+ if (direction === "vertical") {
2295
+ return "flex flex-col h-full p-4";
2296
+ } else {
2297
+ return "flex items-center justify-between w-full px-6";
2298
+ }
2299
+ };
2300
+ const getItemsListClasses = () => {
2301
+ if (direction === "vertical") {
2302
+ return "flex flex-col gap-2 flex-1 overflow-y-auto mt-4";
2303
+ } else {
2304
+ return "flex items-center gap-4";
2305
+ }
2306
+ };
2307
+ const handleItemClick = (item) => {
2308
+ if (item.isExternal) {
2309
+ window.open(item.href, item.target || "_blank");
2310
+ } else if (item.href.startsWith("#")) {
2311
+ const element = document.getElementById(item.id);
2312
+ if (element) {
2313
+ element.scrollIntoView({ behavior: "smooth" });
2314
+ }
2315
+ } else {
2316
+ window.location.href = item.href;
2317
+ }
2318
+ onItemClick?.(item);
2319
+ };
2320
+ if (!isOpen) return null;
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(
2322
+ "img",
2323
+ {
2324
+ src: logo.src,
2325
+ alt: logo.alt || "Logo",
2326
+ className: "h-8 w-auto"
2327
+ }
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(
2329
+ NavigationItem_default,
2330
+ {
2331
+ key: item.id,
2332
+ item,
2333
+ direction,
2334
+ isActive: activeItemId === item.id,
2335
+ onClick: handleItemClick
2336
+ }
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(
2338
+ "img",
2339
+ {
2340
+ src: avatar.src,
2341
+ alt: avatar.alt || "Avatar",
2342
+ className: "w-10 h-10 rounded-full border-2 border-gray-200"
2343
+ }
2344
+ )), avatar && direction === "horizontal" && /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "flex items-center" }, /* @__PURE__ */ React33__namespace.default.createElement(
2345
+ "img",
2346
+ {
2347
+ src: avatar.src,
2348
+ alt: avatar.alt || "Avatar",
2349
+ className: "w-8 h-8 rounded-full border-2 border-gray-200"
2350
+ }
670
2351
  ))));
671
2352
  };
2353
+ var Navigation_default = Navigation;
2354
+ var NavigationToggle = ({
2355
+ isOpen,
2356
+ onClick,
2357
+ position
2358
+ }) => {
2359
+ const getPositionClasses = () => {
2360
+ switch (position) {
2361
+ case "top":
2362
+ return "top-4 left-4";
2363
+ case "bottom":
2364
+ return "bottom-4 left-4";
2365
+ case "left":
2366
+ return "top-4 left-4";
2367
+ case "right":
2368
+ return "top-4 right-4";
2369
+ default:
2370
+ return "top-4 left-4";
2371
+ }
2372
+ };
2373
+ return /* @__PURE__ */ React33__namespace.default.createElement(
2374
+ "button",
2375
+ {
2376
+ onClick,
2377
+ className: `
2378
+ fixed ${getPositionClasses()} z-[100]
2379
+ p-3 rounded-xl
2380
+ bg-white/90 backdrop-blur-md
2381
+ shadow-lg hover:shadow-xl
2382
+ border border-gray-200/50
2383
+ transition-all duration-300 ease-in-out
2384
+ hover:scale-105 active:scale-95
2385
+ focus:outline-none focus:ring-2 focus:ring-blue-500 focus:ring-opacity-50
2386
+ `,
2387
+ "aria-label": isOpen ? "\u5173\u95ED\u5BFC\u822A\u680F" : "\u6253\u5F00\u5BFC\u822A\u680F"
2388
+ },
2389
+ /* @__PURE__ */ React33__namespace.default.createElement("div", { className: "w-5 h-5 flex flex-col justify-center items-center" }, /* @__PURE__ */ React33__namespace.default.createElement(
2390
+ "span",
2391
+ {
2392
+ className: `
2393
+ block w-5 h-0.5 bg-gray-600 rounded-full
2394
+ transform transition-all duration-300 ease-in-out
2395
+ ${isOpen ? "rotate-45 translate-y-0.5" : ""}
2396
+ `
2397
+ }
2398
+ ), /* @__PURE__ */ React33__namespace.default.createElement(
2399
+ "span",
2400
+ {
2401
+ className: `
2402
+ block w-5 h-0.5 bg-gray-600 rounded-full
2403
+ transform transition-all duration-300 ease-in-out mt-1
2404
+ ${isOpen ? "opacity-0 scale-0" : "opacity-100 scale-100"}
2405
+ `
2406
+ }
2407
+ ), /* @__PURE__ */ React33__namespace.default.createElement(
2408
+ "span",
2409
+ {
2410
+ className: `
2411
+ block w-5 h-0.5 bg-gray-600 rounded-full
2412
+ transform transition-all duration-300 ease-in-out mt-1
2413
+ ${isOpen ? "-rotate-45 -translate-y-2.5" : ""}
2414
+ `
2415
+ }
2416
+ ))
2417
+ );
2418
+ };
2419
+ var NavigationToggle_default = NavigationToggle;
2420
+ var FloatingMenu = ({
2421
+ trigger,
2422
+ menu,
2423
+ initialPosition = { x: 20, y: 20 },
2424
+ defaultOpen = false,
2425
+ className = "",
2426
+ menuClassName = "",
2427
+ triggerClassName = "",
2428
+ zIndex = 1e3
2429
+ }) => {
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(() => {
2441
+ setMounted(true);
2442
+ return () => setMounted(false);
2443
+ }, []);
2444
+ React33.useEffect(() => {
2445
+ if (!mounted || !containerRef.current) return;
2446
+ const updateMenuDirection = () => {
2447
+ const rect = containerRef.current?.getBoundingClientRect();
2448
+ if (!rect) return;
2449
+ const windowWidth = window.innerWidth;
2450
+ const middlePoint = windowWidth / 2;
2451
+ setMenuDirection(rect.left < middlePoint ? "right" : "left");
2452
+ };
2453
+ updateMenuDirection();
2454
+ window.addEventListener("resize", updateMenuDirection);
2455
+ window.addEventListener("scroll", updateMenuDirection);
2456
+ return () => {
2457
+ window.removeEventListener("resize", updateMenuDirection);
2458
+ window.removeEventListener("scroll", updateMenuDirection);
2459
+ };
2460
+ }, [mounted]);
2461
+ const handleMouseDown = (e) => {
2462
+ if (!containerRef.current) return;
2463
+ e.stopPropagation();
2464
+ mouseDownPosRef.current = { x: e.clientX, y: e.clientY };
2465
+ const rect = containerRef.current.getBoundingClientRect();
2466
+ setDragOffset({
2467
+ x: e.clientX - rect.left,
2468
+ y: e.clientY - rect.top
2469
+ });
2470
+ setHasDragged(false);
2471
+ setIsDragging(true);
2472
+ };
2473
+ React33.useEffect(() => {
2474
+ if (!isDragging) return;
2475
+ const handleMouseMove = (e) => {
2476
+ if (mouseDownPosRef.current) {
2477
+ const dx = Math.abs(e.clientX - mouseDownPosRef.current.x);
2478
+ const dy = Math.abs(e.clientY - mouseDownPosRef.current.y);
2479
+ if (dx > 3 || dy > 3) {
2480
+ setHasDragged(true);
2481
+ }
2482
+ }
2483
+ const newX = e.clientX - dragOffset.x;
2484
+ const newY = e.clientY - dragOffset.y;
2485
+ const windowWidth = window.innerWidth;
2486
+ const windowHeight = window.innerHeight;
2487
+ setPosition({
2488
+ x: Math.min(Math.max(newX, 0), windowWidth - 50),
2489
+ y: Math.min(Math.max(newY, 0), windowHeight - 50)
2490
+ });
2491
+ };
2492
+ const handleMouseUp = () => {
2493
+ setIsDragging(false);
2494
+ mouseDownPosRef.current = null;
2495
+ if (dragTimerRef.current) {
2496
+ window.clearTimeout(dragTimerRef.current);
2497
+ }
2498
+ dragTimerRef.current = window.setTimeout(() => {
2499
+ setHasDragged(false);
2500
+ }, 300);
2501
+ };
2502
+ document.addEventListener("mousemove", handleMouseMove);
2503
+ document.addEventListener("mouseup", handleMouseUp);
2504
+ return () => {
2505
+ document.removeEventListener("mousemove", handleMouseMove);
2506
+ document.removeEventListener("mouseup", handleMouseUp);
2507
+ };
2508
+ }, [isDragging, dragOffset]);
2509
+ React33.useEffect(() => {
2510
+ return () => {
2511
+ if (dragTimerRef.current) {
2512
+ window.clearTimeout(dragTimerRef.current);
2513
+ }
2514
+ };
2515
+ }, []);
2516
+ const toggleMenu = (e) => {
2517
+ e.stopPropagation();
2518
+ if (hasDragged) {
2519
+ return;
2520
+ }
2521
+ setIsMenuOpen(!isMenuOpen);
2522
+ };
2523
+ React33.useEffect(() => {
2524
+ if (!isMenuOpen) return;
2525
+ const handleClickOutside = (e) => {
2526
+ if (containerRef.current && !containerRef.current.contains(e.target)) {
2527
+ setIsMenuOpen(false);
2528
+ }
2529
+ };
2530
+ document.addEventListener("mousedown", handleClickOutside);
2531
+ return () => {
2532
+ document.removeEventListener("mousedown", handleClickOutside);
2533
+ };
2534
+ }, [isMenuOpen]);
2535
+ React33.useEffect(() => {
2536
+ if (!mounted) return;
2537
+ const checkBoundaries = () => {
2538
+ const windowWidth = window.innerWidth;
2539
+ const windowHeight = window.innerHeight;
2540
+ setPosition((prev) => {
2541
+ const newX = Math.min(Math.max(prev.x, 0), windowWidth - 50);
2542
+ const newY = Math.min(Math.max(prev.y, 0), windowHeight - 50);
2543
+ if (newX !== prev.x || newY !== prev.y) {
2544
+ return { x: newX, y: newY };
2545
+ }
2546
+ return prev;
2547
+ });
2548
+ };
2549
+ window.addEventListener("resize", checkBoundaries);
2550
+ return () => {
2551
+ window.removeEventListener("resize", checkBoundaries);
2552
+ };
2553
+ }, [mounted]);
2554
+ if (!mounted) return null;
2555
+ return reactDom.createPortal(
2556
+ /* @__PURE__ */ React33__namespace.default.createElement(
2557
+ "div",
2558
+ {
2559
+ ref: containerRef,
2560
+ className: `fixed select-none box-border ${className}`,
2561
+ style: {
2562
+ left: `${position.x}px`,
2563
+ top: `${position.y}px`,
2564
+ zIndex
2565
+ }
2566
+ },
2567
+ /* @__PURE__ */ React33__namespace.default.createElement(
2568
+ "div",
2569
+ {
2570
+ className: `
2571
+ flex items-center justify-center
2572
+ w-12 h-12 md:w-12 md:h-12
2573
+ bg-white rounded-full
2574
+ shadow-md hover:shadow-lg
2575
+ cursor-grab active:cursor-grabbing
2576
+ transition-all duration-200
2577
+ hover:scale-105 active:scale-95
2578
+ ${triggerClassName}
2579
+ `,
2580
+ onMouseDown: handleMouseDown,
2581
+ onClick: toggleMenu
2582
+ },
2583
+ trigger
2584
+ ),
2585
+ isMenuOpen && /* @__PURE__ */ React33__namespace.default.createElement(
2586
+ "div",
2587
+ {
2588
+ className: `
2589
+ absolute top-0
2590
+ bg-white rounded-lg shadow-xl
2591
+ p-3 min-w-[200px] md:min-w-[200px] max-w-[300px]
2592
+ z-[1000]
2593
+ transition-all duration-200
2594
+ ${isMenuOpen ? "opacity-100 scale-100" : "opacity-0 scale-95"}
2595
+ ${menuDirection === "left" ? "right-[calc(100%+10px)]" : "left-[calc(100%+10px)]"}
2596
+ ${menuClassName}
2597
+ `,
2598
+ onClick: (e) => e.stopPropagation(),
2599
+ onMouseDown: (e) => e.stopPropagation(),
2600
+ onMouseUp: (e) => e.stopPropagation(),
2601
+ onTouchStart: (e) => e.stopPropagation(),
2602
+ onTouchMove: (e) => e.stopPropagation(),
2603
+ onTouchEnd: (e) => e.stopPropagation(),
2604
+ onPointerDown: (e) => e.stopPropagation(),
2605
+ onPointerUp: (e) => e.stopPropagation()
2606
+ },
2607
+ menu
2608
+ )
2609
+ ),
2610
+ document.body
2611
+ );
2612
+ };
2613
+ var FloatingMenu_default = FloatingMenu;
672
2614
 
2615
+ Object.defineProperty(exports, "SearchBox", {
2616
+ enumerable: true,
2617
+ get: function () { return chunkIEA55H3G_js.SearchBox; }
2618
+ });
673
2619
  Object.defineProperty(exports, "arrayUtils", {
674
2620
  enumerable: true,
675
- get: function () { return chunkNMF4ANIC_js.arrayUtils; }
2621
+ get: function () { return chunk7Z5LLJ3A_js.arrayUtils; }
2622
+ });
2623
+ Object.defineProperty(exports, "cn", {
2624
+ enumerable: true,
2625
+ get: function () { return chunk7Z5LLJ3A_js.cn; }
676
2626
  });
677
2627
  Object.defineProperty(exports, "debugUtils", {
678
2628
  enumerable: true,
679
- get: function () { return chunkNMF4ANIC_js.debugUtils; }
2629
+ get: function () { return chunk7Z5LLJ3A_js.debugUtils; }
680
2630
  });
681
2631
  Object.defineProperty(exports, "errorUtils", {
682
2632
  enumerable: true,
683
- get: function () { return chunkNMF4ANIC_js.errorUtils; }
2633
+ get: function () { return chunk7Z5LLJ3A_js.errorUtils; }
684
2634
  });
685
2635
  Object.defineProperty(exports, "fileUtils", {
686
2636
  enumerable: true,
687
- get: function () { return chunkNMF4ANIC_js.fileUtils; }
2637
+ get: function () { return chunk7Z5LLJ3A_js.fileUtils; }
688
2638
  });
689
2639
  Object.defineProperty(exports, "formatTime", {
690
2640
  enumerable: true,
691
- get: function () { return chunkNMF4ANIC_js.formatTime; }
2641
+ get: function () { return chunk7Z5LLJ3A_js.formatTime; }
692
2642
  });
693
2643
  Object.defineProperty(exports, "japaneseUtils", {
694
2644
  enumerable: true,
695
- get: function () { return chunkNMF4ANIC_js.japaneseUtils; }
2645
+ get: function () { return chunk7Z5LLJ3A_js.japaneseUtils; }
696
2646
  });
697
2647
  Object.defineProperty(exports, "stringUtils", {
698
2648
  enumerable: true,
699
- get: function () { return chunkNMF4ANIC_js.stringUtils; }
2649
+ get: function () { return chunk7Z5LLJ3A_js.stringUtils; }
700
2650
  });
701
2651
  Object.defineProperty(exports, "validators", {
702
2652
  enumerable: true,
703
- get: function () { return chunkNMF4ANIC_js.validators; }
2653
+ get: function () { return chunk7Z5LLJ3A_js.validators; }
704
2654
  });
705
2655
  Object.defineProperty(exports, "useAsyncStorage", {
706
2656
  enumerable: true,
@@ -742,10 +2692,111 @@ Object.defineProperty(exports, "logger", {
742
2692
  enumerable: true,
743
2693
  get: function () { return chunk6PRFP5EG_js.logger; }
744
2694
  });
2695
+ exports.About = About_default;
2696
+ exports.AlertDialog = AlertDialog;
2697
+ exports.AlertDialogAction = AlertDialogAction;
2698
+ exports.AlertDialogCancel = AlertDialogCancel;
2699
+ exports.AlertDialogContent = AlertDialogContent;
2700
+ exports.AlertDialogDescription = AlertDialogDescription;
2701
+ exports.AlertDialogFooter = AlertDialogFooter;
2702
+ exports.AlertDialogHeader = AlertDialogHeader;
2703
+ exports.AlertDialogOverlay = AlertDialogOverlay;
2704
+ exports.AlertDialogPortal = AlertDialogPortal;
2705
+ exports.AlertDialogTitle = AlertDialogTitle;
2706
+ exports.AlertDialogTrigger = AlertDialogTrigger;
2707
+ exports.AutoOpenModal = AutoOpenModal;
2708
+ exports.Avatar = Avatar;
2709
+ exports.AvatarFallback = AvatarFallback;
2710
+ exports.AvatarImage = AvatarImage;
745
2711
  exports.BackgroundRemover = BackgroundRemover;
2712
+ exports.Badge = Badge;
2713
+ exports.Button = Button;
2714
+ exports.Card = Card;
2715
+ exports.CardContent = CardContent;
2716
+ exports.CardDescription = CardDescription;
2717
+ exports.CardFooter = CardFooter;
2718
+ exports.CardHeader = CardHeader;
2719
+ exports.CardTitle = CardTitle;
2720
+ exports.CollisionBalls = CollisionBalls;
2721
+ exports.Contact = Contact_default;
2722
+ exports.Dialog = Dialog;
2723
+ exports.DialogClose = DialogClose;
2724
+ exports.DialogContent = DialogContent;
2725
+ exports.DialogDescription = DialogDescription;
2726
+ exports.DialogFooter = DialogFooter;
2727
+ exports.DialogHeader = DialogHeader;
2728
+ exports.DialogOverlay = DialogOverlay;
2729
+ exports.DialogPortal = DialogPortal;
2730
+ exports.DialogTitle = DialogTitle;
2731
+ exports.DialogTrigger = DialogTrigger;
2732
+ exports.DropdownMenu = DropdownMenu;
2733
+ exports.DropdownMenuCheckboxItem = DropdownMenuCheckboxItem;
2734
+ exports.DropdownMenuContent = DropdownMenuContent;
2735
+ exports.DropdownMenuGroup = DropdownMenuGroup;
2736
+ exports.DropdownMenuItem = DropdownMenuItem;
2737
+ exports.DropdownMenuLabel = DropdownMenuLabel;
2738
+ exports.DropdownMenuPortal = DropdownMenuPortal;
2739
+ exports.DropdownMenuRadioGroup = DropdownMenuRadioGroup;
2740
+ exports.DropdownMenuRadioItem = DropdownMenuRadioItem;
2741
+ exports.DropdownMenuSeparator = DropdownMenuSeparator;
2742
+ exports.DropdownMenuShortcut = DropdownMenuShortcut;
2743
+ exports.DropdownMenuSub = DropdownMenuSub;
2744
+ exports.DropdownMenuSubContent = DropdownMenuSubContent;
2745
+ exports.DropdownMenuSubTrigger = DropdownMenuSubTrigger;
2746
+ exports.DropdownMenuTrigger = DropdownMenuTrigger;
2747
+ exports.EnhancedAvatar = EnhancedAvatar;
2748
+ exports.FloatingMenu = FloatingMenu_default;
2749
+ exports.Grid = Grid;
2750
+ exports.Input = Input;
2751
+ exports.Label = Label;
2752
+ exports.Navigation = Navigation_default;
2753
+ exports.NavigationItem = NavigationItem_default;
2754
+ exports.NavigationToggle = NavigationToggle_default;
746
2755
  exports.OCRScanner = OCRScanner;
2756
+ exports.Popover = Popover;
2757
+ exports.PopoverAnchor = PopoverAnchor;
2758
+ exports.PopoverContent = PopoverContent;
2759
+ exports.PopoverTrigger = PopoverTrigger;
2760
+ exports.ProfileButton = ProfileButton;
2761
+ exports.ProfileModal = ProfileModal;
2762
+ exports.Progress = Progress;
2763
+ exports.ScrollArea = ScrollArea;
2764
+ exports.ScrollBar = ScrollBar;
2765
+ exports.Select = Select;
2766
+ exports.SelectContent = SelectContent;
2767
+ exports.SelectGroup = SelectGroup;
2768
+ exports.SelectItem = SelectItem;
2769
+ exports.SelectLabel = SelectLabel;
2770
+ exports.SelectScrollDownButton = SelectScrollDownButton;
2771
+ exports.SelectScrollUpButton = SelectScrollUpButton;
2772
+ exports.SelectSeparator = SelectSeparator;
2773
+ exports.SelectTrigger = SelectTrigger;
2774
+ exports.SelectValue = SelectValue;
747
2775
  exports.SentimentAnalyzer = SentimentAnalyzer;
2776
+ exports.Separator = Separator3;
2777
+ exports.Sheet = Sheet;
2778
+ exports.SheetClose = SheetClose;
2779
+ exports.SheetContent = SheetContent;
2780
+ exports.SheetDescription = SheetDescription;
2781
+ exports.SheetFooter = SheetFooter;
2782
+ exports.SheetHeader = SheetHeader;
2783
+ exports.SheetOverlay = SheetOverlay;
2784
+ exports.SheetPortal = SheetPortal;
2785
+ exports.SheetTitle = SheetTitle;
2786
+ exports.SheetTrigger = SheetTrigger;
748
2787
  exports.SmartAssistant = SmartAssistant;
2788
+ exports.Tabs = Tabs;
2789
+ exports.TabsContent = TabsContent;
2790
+ exports.TabsList = TabsList;
2791
+ exports.TabsTrigger = TabsTrigger;
2792
+ exports.Textarea = Textarea;
2793
+ exports.Timeline = Timeline;
2794
+ exports.Tooltip = Tooltip;
2795
+ exports.TooltipContent = TooltipContent;
2796
+ exports.TooltipProvider = TooltipProvider;
2797
+ exports.TooltipTrigger = TooltipTrigger;
2798
+ exports.badgeVariants = badgeVariants;
2799
+ exports.buttonVariants = buttonVariants;
749
2800
  exports.useBackgroundRemoval = useBackgroundRemoval;
750
2801
  exports.useOCR = useOCR;
751
2802
  exports.useSentimentAnalysis = useSentimentAnalysis;