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