sa2kit 1.6.6 → 1.6.7
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/index.d.mts +106 -1
- package/dist/index.d.ts +106 -1
- package/dist/index.js +738 -221
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +674 -168
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -6,7 +6,7 @@ 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 React37 = 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,8 +23,12 @@ 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 navigation = require('next/navigation');
|
|
27
|
+
var Link = require('next/link');
|
|
26
28
|
var reactDom = require('react-dom');
|
|
27
29
|
|
|
30
|
+
function _interopDefault (e) { return e && e.__esModule ? e : { default: e }; }
|
|
31
|
+
|
|
28
32
|
function _interopNamespace(e) {
|
|
29
33
|
if (e && e.__esModule) return e;
|
|
30
34
|
var n = Object.create(null);
|
|
@@ -43,7 +47,7 @@ function _interopNamespace(e) {
|
|
|
43
47
|
return Object.freeze(n);
|
|
44
48
|
}
|
|
45
49
|
|
|
46
|
-
var
|
|
50
|
+
var React37__namespace = /*#__PURE__*/_interopNamespace(React37);
|
|
47
51
|
var LabelPrimitive__namespace = /*#__PURE__*/_interopNamespace(LabelPrimitive);
|
|
48
52
|
var TabsPrimitive__namespace = /*#__PURE__*/_interopNamespace(TabsPrimitive);
|
|
49
53
|
var DialogPrimitive__namespace = /*#__PURE__*/_interopNamespace(DialogPrimitive);
|
|
@@ -56,23 +60,24 @@ var SelectPrimitive__namespace = /*#__PURE__*/_interopNamespace(SelectPrimitive)
|
|
|
56
60
|
var SeparatorPrimitive__namespace = /*#__PURE__*/_interopNamespace(SeparatorPrimitive);
|
|
57
61
|
var TooltipPrimitive__namespace = /*#__PURE__*/_interopNamespace(TooltipPrimitive);
|
|
58
62
|
var AvatarPrimitive__namespace = /*#__PURE__*/_interopNamespace(AvatarPrimitive);
|
|
63
|
+
var Link__default = /*#__PURE__*/_interopDefault(Link);
|
|
59
64
|
|
|
60
65
|
var useOCR = (options = {}) => {
|
|
61
|
-
const [state, setState] =
|
|
66
|
+
const [state, setState] = React37.useState({
|
|
62
67
|
isProcessing: false,
|
|
63
68
|
progress: 0,
|
|
64
69
|
status: "idle",
|
|
65
70
|
error: null,
|
|
66
71
|
result: null
|
|
67
72
|
});
|
|
68
|
-
const workerRef =
|
|
69
|
-
const cleanup =
|
|
73
|
+
const workerRef = React37.useRef(null);
|
|
74
|
+
const cleanup = React37.useCallback(async () => {
|
|
70
75
|
if (workerRef.current) {
|
|
71
76
|
await workerRef.current.terminate();
|
|
72
77
|
workerRef.current = null;
|
|
73
78
|
}
|
|
74
79
|
}, []);
|
|
75
|
-
const recognize =
|
|
80
|
+
const recognize = React37.useCallback(
|
|
76
81
|
async (image) => {
|
|
77
82
|
setState((prev) => ({
|
|
78
83
|
...prev,
|
|
@@ -131,7 +136,7 @@ var useOCR = (options = {}) => {
|
|
|
131
136
|
},
|
|
132
137
|
[options]
|
|
133
138
|
);
|
|
134
|
-
|
|
139
|
+
React37.useEffect(() => {
|
|
135
140
|
return () => {
|
|
136
141
|
cleanup();
|
|
137
142
|
};
|
|
@@ -147,8 +152,8 @@ var OCRScanner = ({
|
|
|
147
152
|
className = "",
|
|
148
153
|
language = "eng"
|
|
149
154
|
}) => {
|
|
150
|
-
const [imagePreview, setImagePreview] =
|
|
151
|
-
const fileInputRef =
|
|
155
|
+
const [imagePreview, setImagePreview] = React37.useState(null);
|
|
156
|
+
const fileInputRef = React37.useRef(null);
|
|
152
157
|
const { recognize, isProcessing, progress, status, result, error } = useOCR({
|
|
153
158
|
language
|
|
154
159
|
});
|
|
@@ -184,43 +189,43 @@ var OCRScanner = ({
|
|
|
184
189
|
handleFileChange(mockEvent);
|
|
185
190
|
}
|
|
186
191
|
};
|
|
187
|
-
return /* @__PURE__ */
|
|
192
|
+
return /* @__PURE__ */ React37__namespace.default.createElement(
|
|
188
193
|
"div",
|
|
189
194
|
{
|
|
190
195
|
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}`,
|
|
191
196
|
onDragOver: handleDragOver,
|
|
192
197
|
onDrop: handleDrop
|
|
193
198
|
},
|
|
194
|
-
!imagePreview ? /* @__PURE__ */
|
|
199
|
+
!imagePreview ? /* @__PURE__ */ React37__namespace.default.createElement(
|
|
195
200
|
"div",
|
|
196
201
|
{
|
|
197
202
|
className: "flex flex-col items-center justify-center cursor-pointer space-y-4",
|
|
198
203
|
onClick: () => fileInputRef.current?.click()
|
|
199
204
|
},
|
|
200
|
-
/* @__PURE__ */
|
|
201
|
-
/* @__PURE__ */
|
|
202
|
-
) : /* @__PURE__ */
|
|
205
|
+
/* @__PURE__ */ React37__namespace.default.createElement("div", { className: "p-4 bg-blue-50 rounded-full text-blue-500" }, /* @__PURE__ */ React37__namespace.default.createElement(lucideReact.Upload, { size: 32 })),
|
|
206
|
+
/* @__PURE__ */ React37__namespace.default.createElement("div", { className: "text-center" }, /* @__PURE__ */ React37__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__ */ React37__namespace.default.createElement("p", { className: "text-sm text-gray-500" }, "\u652F\u6301 JPG, PNG, WebP"))
|
|
207
|
+
) : /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "space-y-4" }, /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "relative group rounded-lg overflow-hidden border border-gray-200" }, /* @__PURE__ */ React37__namespace.default.createElement(
|
|
203
208
|
"img",
|
|
204
209
|
{
|
|
205
210
|
src: imagePreview,
|
|
206
211
|
alt: "Preview",
|
|
207
212
|
className: `max-h-64 mx-auto object-contain transition-opacity ${isProcessing ? "opacity-50" : "opacity-100"}`
|
|
208
213
|
}
|
|
209
|
-
), !isProcessing && /* @__PURE__ */
|
|
214
|
+
), !isProcessing && /* @__PURE__ */ React37__namespace.default.createElement(
|
|
210
215
|
"button",
|
|
211
216
|
{
|
|
212
217
|
onClick: reset,
|
|
213
218
|
className: "absolute top-2 right-2 p-1 bg-white/80 rounded-full hover:bg-white text-gray-600 shadow-sm"
|
|
214
219
|
},
|
|
215
|
-
/* @__PURE__ */
|
|
216
|
-
), isProcessing && /* @__PURE__ */
|
|
220
|
+
/* @__PURE__ */ React37__namespace.default.createElement(lucideReact.X, { size: 18 })
|
|
221
|
+
), isProcessing && /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "absolute inset-0 flex flex-col items-center justify-center bg-black/5" }, /* @__PURE__ */ React37__namespace.default.createElement(lucideReact.Loader2, { className: "animate-spin text-blue-500 mb-2", size: 32 }), /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "w-48 bg-gray-200 rounded-full h-1.5 overflow-hidden" }, /* @__PURE__ */ React37__namespace.default.createElement(
|
|
217
222
|
"div",
|
|
218
223
|
{
|
|
219
224
|
className: "bg-blue-500 h-full transition-all duration-300",
|
|
220
225
|
style: { width: `${progress * 100}%` }
|
|
221
226
|
}
|
|
222
|
-
)), /* @__PURE__ */
|
|
223
|
-
/* @__PURE__ */
|
|
227
|
+
)), /* @__PURE__ */ React37__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__ */ React37__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__ */ React37__namespace.default.createElement("div", { className: "flex items-center gap-2 mb-2 text-gray-600 font-medium" }, /* @__PURE__ */ React37__namespace.default.createElement(lucideReact.FileText, { size: 18 }), /* @__PURE__ */ React37__namespace.default.createElement("span", null, "\u8BC6\u522B\u7ED3\u679C (\u7F6E\u4FE1\u5EA6: ", Math.round(result.confidence), "%)")), /* @__PURE__ */ React37__namespace.default.createElement("pre", { className: "text-sm text-gray-800 whitespace-pre-wrap font-sans" }, result.text)), error && /* @__PURE__ */ React37__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)),
|
|
228
|
+
/* @__PURE__ */ React37__namespace.default.createElement(
|
|
224
229
|
"input",
|
|
225
230
|
{
|
|
226
231
|
type: "file",
|
|
@@ -234,7 +239,7 @@ var OCRScanner = ({
|
|
|
234
239
|
);
|
|
235
240
|
};
|
|
236
241
|
var useBackgroundRemoval = (options = {}) => {
|
|
237
|
-
const [state, setState] =
|
|
242
|
+
const [state, setState] = React37.useState({
|
|
238
243
|
isProcessing: false,
|
|
239
244
|
progress: 0,
|
|
240
245
|
status: "idle",
|
|
@@ -242,7 +247,7 @@ var useBackgroundRemoval = (options = {}) => {
|
|
|
242
247
|
resultBlob: null,
|
|
243
248
|
resultUrl: null
|
|
244
249
|
});
|
|
245
|
-
const remove =
|
|
250
|
+
const remove = React37.useCallback(async (image) => {
|
|
246
251
|
setState((prev) => ({
|
|
247
252
|
...prev,
|
|
248
253
|
isProcessing: true,
|
|
@@ -321,12 +326,12 @@ var useBackgroundRemoval = (options = {}) => {
|
|
|
321
326
|
throw err;
|
|
322
327
|
}
|
|
323
328
|
}, [options]);
|
|
324
|
-
const cleanup =
|
|
329
|
+
const cleanup = React37.useCallback(() => {
|
|
325
330
|
if (state.resultUrl) {
|
|
326
331
|
URL.revokeObjectURL(state.resultUrl);
|
|
327
332
|
}
|
|
328
333
|
}, [state.resultUrl]);
|
|
329
|
-
|
|
334
|
+
React37.useEffect(() => {
|
|
330
335
|
return () => cleanup();
|
|
331
336
|
}, [cleanup]);
|
|
332
337
|
return {
|
|
@@ -339,8 +344,8 @@ var BackgroundRemover = ({
|
|
|
339
344
|
onResult,
|
|
340
345
|
className = ""
|
|
341
346
|
}) => {
|
|
342
|
-
const [imagePreview, setImagePreview] =
|
|
343
|
-
const fileInputRef =
|
|
347
|
+
const [imagePreview, setImagePreview] = React37.useState(null);
|
|
348
|
+
const fileInputRef = React37.useRef(null);
|
|
344
349
|
const { remove, isProcessing, progress, status, resultUrl, error } = useBackgroundRemoval();
|
|
345
350
|
const handleFileChange = async (e) => {
|
|
346
351
|
const file = e.target.files?.[0];
|
|
@@ -368,37 +373,37 @@ var BackgroundRemover = ({
|
|
|
368
373
|
a.download = "removed_background.png";
|
|
369
374
|
a.click();
|
|
370
375
|
};
|
|
371
|
-
return /* @__PURE__ */
|
|
376
|
+
return /* @__PURE__ */ React37__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__ */ React37__namespace.default.createElement(
|
|
372
377
|
"div",
|
|
373
378
|
{
|
|
374
379
|
className: "flex flex-col items-center justify-center cursor-pointer space-y-4",
|
|
375
380
|
onClick: () => fileInputRef.current?.click()
|
|
376
381
|
},
|
|
377
|
-
/* @__PURE__ */
|
|
378
|
-
/* @__PURE__ */
|
|
379
|
-
) : /* @__PURE__ */
|
|
382
|
+
/* @__PURE__ */ React37__namespace.default.createElement("div", { className: "p-4 bg-purple-50 rounded-full text-purple-500" }, /* @__PURE__ */ React37__namespace.default.createElement(lucideReact.Eraser, { size: 32 })),
|
|
383
|
+
/* @__PURE__ */ React37__namespace.default.createElement("div", { className: "text-center" }, /* @__PURE__ */ React37__namespace.default.createElement("p", { className: "text-lg font-medium text-gray-700" }, "\u4E0A\u4F20\u56FE\u7247\u79FB\u9664\u80CC\u666F"), /* @__PURE__ */ React37__namespace.default.createElement("p", { className: "text-sm text-gray-500" }, "\u5EFA\u8BAE\u4F7F\u7528\u4E3B\u4F53\u660E\u786E\u7684\u56FE\u7247"))
|
|
384
|
+
) : /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "space-y-4" }, /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "grid grid-cols-1 md:grid-cols-2 gap-4" }, /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React37__namespace.default.createElement("p", { className: "text-xs font-medium text-gray-500 uppercase tracking-wider" }, "\u539F\u56FE"), /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "relative rounded-lg overflow-hidden border border-gray-200 bg-gray-50" }, /* @__PURE__ */ React37__namespace.default.createElement("img", { src: imagePreview, alt: "Original", className: "max-h-64 mx-auto object-contain" }))), /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "space-y-2" }, /* @__PURE__ */ React37__namespace.default.createElement("p", { className: "text-xs font-medium text-gray-500 uppercase tracking-wider" }, "\u5904\u7406\u7ED3\u679C"), /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "relative rounded-lg overflow-hidden border border-gray-200 bg-grid-slate-100 bg-[size:20px_20px]" }, resultUrl ? /* @__PURE__ */ React37__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__ */ React37__namespace.default.createElement("div", { className: "h-64 flex flex-col items-center justify-center text-gray-400" }, isProcessing ? /* @__PURE__ */ React37__namespace.default.createElement(React37__namespace.default.Fragment, null, /* @__PURE__ */ React37__namespace.default.createElement(lucideReact.Loader2, { className: "animate-spin text-purple-500 mb-2", size: 32 }), /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "w-32 bg-gray-200 rounded-full h-1.5 overflow-hidden" }, /* @__PURE__ */ React37__namespace.default.createElement(
|
|
380
385
|
"div",
|
|
381
386
|
{
|
|
382
387
|
className: "bg-purple-500 h-full transition-all duration-300",
|
|
383
388
|
style: { width: `${progress * 100}%` }
|
|
384
389
|
}
|
|
385
|
-
)), /* @__PURE__ */
|
|
390
|
+
)), /* @__PURE__ */ React37__namespace.default.createElement("p", { className: "text-[10px] mt-2 font-mono uppercase" }, status.replace(/-/g, " "))) : /* @__PURE__ */ React37__namespace.default.createElement("span", { className: "text-sm italic" }, "\u7B49\u5F85\u5904\u7406..."))))), /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "flex justify-between items-center pt-2" }, !isProcessing && /* @__PURE__ */ React37__namespace.default.createElement(
|
|
386
391
|
"button",
|
|
387
392
|
{
|
|
388
393
|
onClick: reset,
|
|
389
394
|
className: "flex items-center gap-2 px-4 py-2 text-sm font-medium text-gray-600 hover:text-gray-900 transition-colors"
|
|
390
395
|
},
|
|
391
|
-
/* @__PURE__ */
|
|
396
|
+
/* @__PURE__ */ React37__namespace.default.createElement(lucideReact.X, { size: 16 }),
|
|
392
397
|
"\u91CD\u65B0\u5F00\u59CB"
|
|
393
|
-
), resultUrl && !isProcessing && /* @__PURE__ */
|
|
398
|
+
), resultUrl && !isProcessing && /* @__PURE__ */ React37__namespace.default.createElement(
|
|
394
399
|
"button",
|
|
395
400
|
{
|
|
396
401
|
onClick: downloadResult,
|
|
397
402
|
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"
|
|
398
403
|
},
|
|
399
|
-
/* @__PURE__ */
|
|
404
|
+
/* @__PURE__ */ React37__namespace.default.createElement(lucideReact.Download, { size: 16 }),
|
|
400
405
|
"\u4E0B\u8F7D PNG"
|
|
401
|
-
)), error && /* @__PURE__ */
|
|
406
|
+
)), error && /* @__PURE__ */ React37__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__ */ React37__namespace.default.createElement(
|
|
402
407
|
"input",
|
|
403
408
|
{
|
|
404
409
|
type: "file",
|
|
@@ -411,14 +416,14 @@ var BackgroundRemover = ({
|
|
|
411
416
|
));
|
|
412
417
|
};
|
|
413
418
|
var useSentimentAnalysis = (options = {}) => {
|
|
414
|
-
const [state, setState] =
|
|
419
|
+
const [state, setState] = React37.useState({
|
|
415
420
|
isProcessing: false,
|
|
416
421
|
status: "idle",
|
|
417
422
|
error: null,
|
|
418
423
|
result: null
|
|
419
424
|
});
|
|
420
|
-
const pipelineRef =
|
|
421
|
-
const analyze =
|
|
425
|
+
const pipelineRef = React37.useRef(null);
|
|
426
|
+
const analyze = React37.useCallback(async (text) => {
|
|
422
427
|
setState((prev) => ({
|
|
423
428
|
...prev,
|
|
424
429
|
isProcessing: true,
|
|
@@ -502,7 +507,7 @@ var SentimentAnalyzer = ({
|
|
|
502
507
|
className = "",
|
|
503
508
|
placeholder = "\u8F93\u5165\u4E00\u6BB5\u4E2D\u6587\u6216\u82F1\u6587\uFF0C\u5206\u6790\u5176\u60C5\u611F\u503E\u5411..."
|
|
504
509
|
}) => {
|
|
505
|
-
const [text, setText] =
|
|
510
|
+
const [text, setText] = React37.useState("");
|
|
506
511
|
const { analyze, isProcessing, status, result, error } = useSentimentAnalysis();
|
|
507
512
|
const handleAnalyze = async () => {
|
|
508
513
|
if (!text.trim() || isProcessing) return;
|
|
@@ -517,11 +522,11 @@ var SentimentAnalyzer = ({
|
|
|
517
522
|
if (!result) return null;
|
|
518
523
|
switch (result.sentiment) {
|
|
519
524
|
case "positive":
|
|
520
|
-
return /* @__PURE__ */
|
|
525
|
+
return /* @__PURE__ */ React37__namespace.default.createElement(lucideReact.Smile, { className: "text-green-500", size: 24 });
|
|
521
526
|
case "negative":
|
|
522
|
-
return /* @__PURE__ */
|
|
527
|
+
return /* @__PURE__ */ React37__namespace.default.createElement(lucideReact.Frown, { className: "text-red-500", size: 24 });
|
|
523
528
|
default:
|
|
524
|
-
return /* @__PURE__ */
|
|
529
|
+
return /* @__PURE__ */ React37__namespace.default.createElement(lucideReact.Meh, { className: "text-yellow-500", size: 24 });
|
|
525
530
|
}
|
|
526
531
|
};
|
|
527
532
|
const getSentimentColor = () => {
|
|
@@ -535,7 +540,7 @@ var SentimentAnalyzer = ({
|
|
|
535
540
|
return "bg-yellow-50 border-yellow-200 text-yellow-700";
|
|
536
541
|
}
|
|
537
542
|
};
|
|
538
|
-
return /* @__PURE__ */
|
|
543
|
+
return /* @__PURE__ */ React37__namespace.default.createElement("div", { className: `p-6 border rounded-xl bg-white dark:bg-gray-800 shadow-sm ${className}` }, /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "flex items-center gap-2 mb-4 text-gray-700 dark:text-gray-300 font-medium" }, /* @__PURE__ */ React37__namespace.default.createElement(lucideReact.MessageSquare, { size: 20 }), /* @__PURE__ */ React37__namespace.default.createElement("span", null, "\u6587\u672C\u60C5\u611F\u5206\u6790")), /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "relative" }, /* @__PURE__ */ React37__namespace.default.createElement(
|
|
539
544
|
"textarea",
|
|
540
545
|
{
|
|
541
546
|
value: text,
|
|
@@ -544,25 +549,25 @@ var SentimentAnalyzer = ({
|
|
|
544
549
|
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",
|
|
545
550
|
disabled: isProcessing
|
|
546
551
|
}
|
|
547
|
-
), /* @__PURE__ */
|
|
552
|
+
), /* @__PURE__ */ React37__namespace.default.createElement(
|
|
548
553
|
"button",
|
|
549
554
|
{
|
|
550
555
|
onClick: handleAnalyze,
|
|
551
556
|
disabled: !text.trim() || isProcessing,
|
|
552
557
|
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"
|
|
553
558
|
},
|
|
554
|
-
isProcessing ? /* @__PURE__ */
|
|
555
|
-
)), isProcessing && /* @__PURE__ */
|
|
559
|
+
isProcessing ? /* @__PURE__ */ React37__namespace.default.createElement(lucideReact.Loader2, { className: "animate-spin", size: 18 }) : /* @__PURE__ */ React37__namespace.default.createElement(lucideReact.Send, { size: 18 })
|
|
560
|
+
)), isProcessing && /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "mt-4 flex items-center gap-2 text-sm text-blue-600 animate-pulse" }, /* @__PURE__ */ React37__namespace.default.createElement(lucideReact.Loader2, { size: 14, className: "animate-spin" }), /* @__PURE__ */ React37__namespace.default.createElement("span", null, "\u6B63\u5728\u5206\u6790 (\u9996\u6B21\u8FD0\u884C\u5C06\u52A0\u8F7D\u6A21\u578B\u8D44\u6E90)...")), result && !isProcessing && /* @__PURE__ */ React37__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__ */ React37__namespace.default.createElement("div", { className: "p-2 bg-white rounded-full shadow-sm" }, getSentimentIcon()), /* @__PURE__ */ React37__namespace.default.createElement("div", null, /* @__PURE__ */ React37__namespace.default.createElement("p", { className: "font-bold text-lg capitalize" }, result.sentiment), /* @__PURE__ */ React37__namespace.default.createElement("p", { className: "text-sm opacity-80" }, "\u7F6E\u4FE1\u5EA6: ", (result.score * 100).toFixed(1), "% (", result.label, ")"))), error && /* @__PURE__ */ React37__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));
|
|
556
561
|
};
|
|
557
562
|
var useTextGeneration = (options = {}) => {
|
|
558
|
-
const [state, setState] =
|
|
563
|
+
const [state, setState] = React37.useState({
|
|
559
564
|
isProcessing: false,
|
|
560
565
|
status: "idle",
|
|
561
566
|
error: null,
|
|
562
567
|
result: null
|
|
563
568
|
});
|
|
564
|
-
const pipelineRef =
|
|
565
|
-
const generate =
|
|
569
|
+
const pipelineRef = React37.useRef(null);
|
|
570
|
+
const generate = React37.useCallback(async (prompt) => {
|
|
566
571
|
console.log("[AI] Generating for prompt:", prompt);
|
|
567
572
|
setState((prev) => ({
|
|
568
573
|
...prev,
|
|
@@ -644,11 +649,11 @@ var useTextGeneration = (options = {}) => {
|
|
|
644
649
|
return { ...state, generate };
|
|
645
650
|
};
|
|
646
651
|
var SmartAssistant = ({ className = "" }) => {
|
|
647
|
-
const [input, setInput] =
|
|
648
|
-
const [chatHistory, setChatHistory] =
|
|
649
|
-
const scrollRef =
|
|
652
|
+
const [input, setInput] = React37.useState("");
|
|
653
|
+
const [chatHistory, setChatHistory] = React37.useState([]);
|
|
654
|
+
const scrollRef = React37.useRef(null);
|
|
650
655
|
const { generate, isProcessing: isGenerating, status: genStatus } = useTextGeneration();
|
|
651
|
-
|
|
656
|
+
React37.useEffect(() => {
|
|
652
657
|
if (scrollRef.current) {
|
|
653
658
|
scrollRef.current.scrollTop = scrollRef.current.scrollHeight;
|
|
654
659
|
}
|
|
@@ -692,7 +697,7 @@ AI\u56DE\u5E94\uFF1A\u201C`;
|
|
|
692
697
|
setChatHistory((prev) => [...prev, { role: "assistant", content: "\uFF08\u672C\u5730\u6A21\u578B\u601D\u8003\u8FC7\u5EA6\uFF0C\u6682\u65F6\u4F11\u606F\u4E2D...\uFF09" }]);
|
|
693
698
|
}
|
|
694
699
|
};
|
|
695
|
-
return /* @__PURE__ */
|
|
700
|
+
return /* @__PURE__ */ React37__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__ */ React37__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__ */ React37__namespace.default.createElement("div", { className: "h-full flex flex-col items-center justify-center text-gray-400 space-y-2" }, /* @__PURE__ */ React37__namespace.default.createElement(lucideReact.Bot, { size: 48, className: "opacity-20" }), /* @__PURE__ */ React37__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__ */ React37__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__ */ React37__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__ */ React37__namespace.default.createElement("div", { className: `flex gap-3 max-w-[85%] ${msg.role === "user" ? "flex-row-reverse" : ""}` }, /* @__PURE__ */ React37__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__ */ React37__namespace.default.createElement(lucideReact.User, { size: 18 }) : /* @__PURE__ */ React37__namespace.default.createElement(lucideReact.Bot, { size: 18 })), /* @__PURE__ */ React37__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__ */ React37__namespace.default.createElement("div", { className: "flex justify-start" }, /* @__PURE__ */ React37__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__ */ React37__namespace.default.createElement(lucideReact.Loader2, { className: "animate-spin text-blue-500", size: 16 }), /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "flex flex-col" }, /* @__PURE__ */ React37__namespace.default.createElement("span", { className: "text-xs text-gray-500 font-medium" }, "\u601D\u8003\u4E2D..."), /* @__PURE__ */ React37__namespace.default.createElement("span", { className: "text-[10px] text-blue-400 font-mono tracking-tighter" }, genStatus))))), /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "p-4 bg-white dark:bg-gray-800 border-t border-gray-100 dark:border-gray-700" }, /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "relative flex items-center gap-2" }, /* @__PURE__ */ React37__namespace.default.createElement(
|
|
696
701
|
"input",
|
|
697
702
|
{
|
|
698
703
|
type: "text",
|
|
@@ -703,14 +708,14 @@ AI\u56DE\u5E94\uFF1A\u201C`;
|
|
|
703
708
|
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",
|
|
704
709
|
disabled: isGenerating
|
|
705
710
|
}
|
|
706
|
-
), /* @__PURE__ */
|
|
711
|
+
), /* @__PURE__ */ React37__namespace.default.createElement(
|
|
707
712
|
"button",
|
|
708
713
|
{
|
|
709
714
|
onClick: handleSend,
|
|
710
715
|
disabled: !input.trim() || isGenerating,
|
|
711
716
|
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"
|
|
712
717
|
},
|
|
713
|
-
/* @__PURE__ */
|
|
718
|
+
/* @__PURE__ */ React37__namespace.default.createElement(lucideReact.Send, { size: 18 })
|
|
714
719
|
))));
|
|
715
720
|
};
|
|
716
721
|
var buttonVariants = classVarianceAuthority.cva(
|
|
@@ -738,10 +743,10 @@ var buttonVariants = classVarianceAuthority.cva(
|
|
|
738
743
|
}
|
|
739
744
|
}
|
|
740
745
|
);
|
|
741
|
-
var Button =
|
|
746
|
+
var Button = React37__namespace.forwardRef(
|
|
742
747
|
({ className, variant, size, asChild = false, ...props }, ref) => {
|
|
743
748
|
const Comp = asChild ? reactSlot.Slot : "button";
|
|
744
|
-
return /* @__PURE__ */
|
|
749
|
+
return /* @__PURE__ */ React37__namespace.createElement(
|
|
745
750
|
Comp,
|
|
746
751
|
{
|
|
747
752
|
className: chunk7Z5LLJ3A_js.cn(buttonVariants({ variant, size, className })),
|
|
@@ -752,7 +757,7 @@ var Button = React33__namespace.forwardRef(
|
|
|
752
757
|
}
|
|
753
758
|
);
|
|
754
759
|
Button.displayName = "Button";
|
|
755
|
-
var Card =
|
|
760
|
+
var Card = React37__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React37__namespace.createElement(
|
|
756
761
|
"div",
|
|
757
762
|
{
|
|
758
763
|
ref,
|
|
@@ -764,7 +769,7 @@ var Card = React33__namespace.forwardRef(({ className, ...props }, ref) => /* @_
|
|
|
764
769
|
}
|
|
765
770
|
));
|
|
766
771
|
Card.displayName = "Card";
|
|
767
|
-
var CardHeader =
|
|
772
|
+
var CardHeader = React37__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React37__namespace.createElement(
|
|
768
773
|
"div",
|
|
769
774
|
{
|
|
770
775
|
ref,
|
|
@@ -773,7 +778,7 @@ var CardHeader = React33__namespace.forwardRef(({ className, ...props }, ref) =>
|
|
|
773
778
|
}
|
|
774
779
|
));
|
|
775
780
|
CardHeader.displayName = "CardHeader";
|
|
776
|
-
var CardTitle =
|
|
781
|
+
var CardTitle = React37__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React37__namespace.createElement(
|
|
777
782
|
"div",
|
|
778
783
|
{
|
|
779
784
|
ref,
|
|
@@ -782,7 +787,7 @@ var CardTitle = React33__namespace.forwardRef(({ className, ...props }, ref) =>
|
|
|
782
787
|
}
|
|
783
788
|
));
|
|
784
789
|
CardTitle.displayName = "CardTitle";
|
|
785
|
-
var CardDescription =
|
|
790
|
+
var CardDescription = React37__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React37__namespace.createElement(
|
|
786
791
|
"div",
|
|
787
792
|
{
|
|
788
793
|
ref,
|
|
@@ -791,9 +796,9 @@ var CardDescription = React33__namespace.forwardRef(({ className, ...props }, re
|
|
|
791
796
|
}
|
|
792
797
|
));
|
|
793
798
|
CardDescription.displayName = "CardDescription";
|
|
794
|
-
var CardContent =
|
|
799
|
+
var CardContent = React37__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React37__namespace.createElement("div", { ref, className: chunk7Z5LLJ3A_js.cn("p-6 pt-0", className), ...props }));
|
|
795
800
|
CardContent.displayName = "CardContent";
|
|
796
|
-
var CardFooter =
|
|
801
|
+
var CardFooter = React37__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React37__namespace.createElement(
|
|
797
802
|
"div",
|
|
798
803
|
{
|
|
799
804
|
ref,
|
|
@@ -819,11 +824,11 @@ var badgeVariants = classVarianceAuthority.cva(
|
|
|
819
824
|
}
|
|
820
825
|
);
|
|
821
826
|
function Badge({ className, variant, ...props }) {
|
|
822
|
-
return /* @__PURE__ */
|
|
827
|
+
return /* @__PURE__ */ React37__namespace.createElement("div", { className: chunk7Z5LLJ3A_js.cn(badgeVariants({ variant }), className), ...props });
|
|
823
828
|
}
|
|
824
|
-
var Input =
|
|
829
|
+
var Input = React37__namespace.forwardRef(
|
|
825
830
|
({ className, type, ...props }, ref) => {
|
|
826
|
-
return /* @__PURE__ */
|
|
831
|
+
return /* @__PURE__ */ React37__namespace.createElement(
|
|
827
832
|
"input",
|
|
828
833
|
{
|
|
829
834
|
type,
|
|
@@ -841,7 +846,7 @@ Input.displayName = "Input";
|
|
|
841
846
|
var labelVariants = classVarianceAuthority.cva(
|
|
842
847
|
"text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70"
|
|
843
848
|
);
|
|
844
|
-
var Label =
|
|
849
|
+
var Label = React37__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React37__namespace.createElement(
|
|
845
850
|
LabelPrimitive__namespace.Root,
|
|
846
851
|
{
|
|
847
852
|
ref,
|
|
@@ -851,7 +856,7 @@ var Label = React33__namespace.forwardRef(({ className, ...props }, ref) => /* @
|
|
|
851
856
|
));
|
|
852
857
|
Label.displayName = LabelPrimitive__namespace.Root.displayName;
|
|
853
858
|
var Tabs = TabsPrimitive__namespace.Root;
|
|
854
|
-
var TabsList =
|
|
859
|
+
var TabsList = React37__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React37__namespace.createElement(
|
|
855
860
|
TabsPrimitive__namespace.List,
|
|
856
861
|
{
|
|
857
862
|
ref,
|
|
@@ -863,7 +868,7 @@ var TabsList = React33__namespace.forwardRef(({ className, ...props }, ref) => /
|
|
|
863
868
|
}
|
|
864
869
|
));
|
|
865
870
|
TabsList.displayName = TabsPrimitive__namespace.List.displayName;
|
|
866
|
-
var TabsTrigger =
|
|
871
|
+
var TabsTrigger = React37__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React37__namespace.createElement(
|
|
867
872
|
TabsPrimitive__namespace.Trigger,
|
|
868
873
|
{
|
|
869
874
|
ref,
|
|
@@ -875,7 +880,7 @@ var TabsTrigger = React33__namespace.forwardRef(({ className, ...props }, ref) =
|
|
|
875
880
|
}
|
|
876
881
|
));
|
|
877
882
|
TabsTrigger.displayName = TabsPrimitive__namespace.Trigger.displayName;
|
|
878
|
-
var TabsContent =
|
|
883
|
+
var TabsContent = React37__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React37__namespace.createElement(
|
|
879
884
|
TabsPrimitive__namespace.Content,
|
|
880
885
|
{
|
|
881
886
|
ref,
|
|
@@ -891,7 +896,7 @@ var Dialog = DialogPrimitive__namespace.Root;
|
|
|
891
896
|
var DialogTrigger = DialogPrimitive__namespace.Trigger;
|
|
892
897
|
var DialogPortal = DialogPrimitive__namespace.Portal;
|
|
893
898
|
var DialogClose = DialogPrimitive__namespace.Close;
|
|
894
|
-
var DialogOverlay =
|
|
899
|
+
var DialogOverlay = React37__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React37__namespace.createElement(
|
|
895
900
|
DialogPrimitive__namespace.Overlay,
|
|
896
901
|
{
|
|
897
902
|
ref,
|
|
@@ -903,7 +908,7 @@ var DialogOverlay = React33__namespace.forwardRef(({ className, ...props }, ref)
|
|
|
903
908
|
}
|
|
904
909
|
));
|
|
905
910
|
DialogOverlay.displayName = DialogPrimitive__namespace.Overlay.displayName;
|
|
906
|
-
var DialogContent =
|
|
911
|
+
var DialogContent = React37__namespace.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ React37__namespace.createElement(DialogPortal, null, /* @__PURE__ */ React37__namespace.createElement(DialogOverlay, null), /* @__PURE__ */ React37__namespace.createElement(
|
|
907
912
|
DialogPrimitive__namespace.Content,
|
|
908
913
|
{
|
|
909
914
|
ref,
|
|
@@ -914,13 +919,13 @@ var DialogContent = React33__namespace.forwardRef(({ className, children, ...pro
|
|
|
914
919
|
...props
|
|
915
920
|
},
|
|
916
921
|
children,
|
|
917
|
-
/* @__PURE__ */
|
|
922
|
+
/* @__PURE__ */ React37__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__ */ React37__namespace.createElement(lucideReact.X, { className: "h-4 w-4" }), /* @__PURE__ */ React37__namespace.createElement("span", { className: "sr-only" }, "Close"))
|
|
918
923
|
)));
|
|
919
924
|
DialogContent.displayName = DialogPrimitive__namespace.Content.displayName;
|
|
920
925
|
var DialogHeader = ({
|
|
921
926
|
className,
|
|
922
927
|
...props
|
|
923
|
-
}) => /* @__PURE__ */
|
|
928
|
+
}) => /* @__PURE__ */ React37__namespace.createElement(
|
|
924
929
|
"div",
|
|
925
930
|
{
|
|
926
931
|
className: chunk7Z5LLJ3A_js.cn(
|
|
@@ -934,7 +939,7 @@ DialogHeader.displayName = "DialogHeader";
|
|
|
934
939
|
var DialogFooter = ({
|
|
935
940
|
className,
|
|
936
941
|
...props
|
|
937
|
-
}) => /* @__PURE__ */
|
|
942
|
+
}) => /* @__PURE__ */ React37__namespace.createElement(
|
|
938
943
|
"div",
|
|
939
944
|
{
|
|
940
945
|
className: chunk7Z5LLJ3A_js.cn(
|
|
@@ -945,7 +950,7 @@ var DialogFooter = ({
|
|
|
945
950
|
}
|
|
946
951
|
);
|
|
947
952
|
DialogFooter.displayName = "DialogFooter";
|
|
948
|
-
var DialogTitle =
|
|
953
|
+
var DialogTitle = React37__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React37__namespace.createElement(
|
|
949
954
|
DialogPrimitive__namespace.Title,
|
|
950
955
|
{
|
|
951
956
|
ref,
|
|
@@ -957,7 +962,7 @@ var DialogTitle = React33__namespace.forwardRef(({ className, ...props }, ref) =
|
|
|
957
962
|
}
|
|
958
963
|
));
|
|
959
964
|
DialogTitle.displayName = DialogPrimitive__namespace.Title.displayName;
|
|
960
|
-
var DialogDescription =
|
|
965
|
+
var DialogDescription = React37__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React37__namespace.createElement(
|
|
961
966
|
DialogPrimitive__namespace.Description,
|
|
962
967
|
{
|
|
963
968
|
ref,
|
|
@@ -969,7 +974,7 @@ DialogDescription.displayName = DialogPrimitive__namespace.Description.displayNa
|
|
|
969
974
|
var AlertDialog = AlertDialogPrimitive__namespace.Root;
|
|
970
975
|
var AlertDialogTrigger = AlertDialogPrimitive__namespace.Trigger;
|
|
971
976
|
var AlertDialogPortal = AlertDialogPrimitive__namespace.Portal;
|
|
972
|
-
var AlertDialogOverlay =
|
|
977
|
+
var AlertDialogOverlay = React37__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React37__namespace.createElement(
|
|
973
978
|
AlertDialogPrimitive__namespace.Overlay,
|
|
974
979
|
{
|
|
975
980
|
className: chunk7Z5LLJ3A_js.cn(
|
|
@@ -981,7 +986,7 @@ var AlertDialogOverlay = React33__namespace.forwardRef(({ className, ...props },
|
|
|
981
986
|
}
|
|
982
987
|
));
|
|
983
988
|
AlertDialogOverlay.displayName = AlertDialogPrimitive__namespace.Overlay.displayName;
|
|
984
|
-
var AlertDialogContent =
|
|
989
|
+
var AlertDialogContent = React37__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React37__namespace.createElement(AlertDialogPortal, null, /* @__PURE__ */ React37__namespace.createElement(AlertDialogOverlay, null), /* @__PURE__ */ React37__namespace.createElement(
|
|
985
990
|
AlertDialogPrimitive__namespace.Content,
|
|
986
991
|
{
|
|
987
992
|
ref,
|
|
@@ -996,7 +1001,7 @@ AlertDialogContent.displayName = AlertDialogPrimitive__namespace.Content.display
|
|
|
996
1001
|
var AlertDialogHeader = ({
|
|
997
1002
|
className,
|
|
998
1003
|
...props
|
|
999
|
-
}) => /* @__PURE__ */
|
|
1004
|
+
}) => /* @__PURE__ */ React37__namespace.createElement(
|
|
1000
1005
|
"div",
|
|
1001
1006
|
{
|
|
1002
1007
|
className: chunk7Z5LLJ3A_js.cn(
|
|
@@ -1010,7 +1015,7 @@ AlertDialogHeader.displayName = "AlertDialogHeader";
|
|
|
1010
1015
|
var AlertDialogFooter = ({
|
|
1011
1016
|
className,
|
|
1012
1017
|
...props
|
|
1013
|
-
}) => /* @__PURE__ */
|
|
1018
|
+
}) => /* @__PURE__ */ React37__namespace.createElement(
|
|
1014
1019
|
"div",
|
|
1015
1020
|
{
|
|
1016
1021
|
className: chunk7Z5LLJ3A_js.cn(
|
|
@@ -1021,7 +1026,7 @@ var AlertDialogFooter = ({
|
|
|
1021
1026
|
}
|
|
1022
1027
|
);
|
|
1023
1028
|
AlertDialogFooter.displayName = "AlertDialogFooter";
|
|
1024
|
-
var AlertDialogTitle =
|
|
1029
|
+
var AlertDialogTitle = React37__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React37__namespace.createElement(
|
|
1025
1030
|
AlertDialogPrimitive__namespace.Title,
|
|
1026
1031
|
{
|
|
1027
1032
|
ref,
|
|
@@ -1030,7 +1035,7 @@ var AlertDialogTitle = React33__namespace.forwardRef(({ className, ...props }, r
|
|
|
1030
1035
|
}
|
|
1031
1036
|
));
|
|
1032
1037
|
AlertDialogTitle.displayName = AlertDialogPrimitive__namespace.Title.displayName;
|
|
1033
|
-
var AlertDialogDescription =
|
|
1038
|
+
var AlertDialogDescription = React37__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React37__namespace.createElement(
|
|
1034
1039
|
AlertDialogPrimitive__namespace.Description,
|
|
1035
1040
|
{
|
|
1036
1041
|
ref,
|
|
@@ -1039,7 +1044,7 @@ var AlertDialogDescription = React33__namespace.forwardRef(({ className, ...prop
|
|
|
1039
1044
|
}
|
|
1040
1045
|
));
|
|
1041
1046
|
AlertDialogDescription.displayName = AlertDialogPrimitive__namespace.Description.displayName;
|
|
1042
|
-
var AlertDialogAction =
|
|
1047
|
+
var AlertDialogAction = React37__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React37__namespace.createElement(
|
|
1043
1048
|
AlertDialogPrimitive__namespace.Action,
|
|
1044
1049
|
{
|
|
1045
1050
|
ref,
|
|
@@ -1048,7 +1053,7 @@ var AlertDialogAction = React33__namespace.forwardRef(({ className, ...props },
|
|
|
1048
1053
|
}
|
|
1049
1054
|
));
|
|
1050
1055
|
AlertDialogAction.displayName = AlertDialogPrimitive__namespace.Action.displayName;
|
|
1051
|
-
var AlertDialogCancel =
|
|
1056
|
+
var AlertDialogCancel = React37__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React37__namespace.createElement(
|
|
1052
1057
|
AlertDialogPrimitive__namespace.Cancel,
|
|
1053
1058
|
{
|
|
1054
1059
|
ref,
|
|
@@ -1067,7 +1072,7 @@ var DropdownMenuGroup = DropdownMenuPrimitive__namespace.Group;
|
|
|
1067
1072
|
var DropdownMenuPortal = DropdownMenuPrimitive__namespace.Portal;
|
|
1068
1073
|
var DropdownMenuSub = DropdownMenuPrimitive__namespace.Sub;
|
|
1069
1074
|
var DropdownMenuRadioGroup = DropdownMenuPrimitive__namespace.RadioGroup;
|
|
1070
|
-
var DropdownMenuSubTrigger =
|
|
1075
|
+
var DropdownMenuSubTrigger = React37__namespace.forwardRef(({ className, inset, children, ...props }, ref) => /* @__PURE__ */ React37__namespace.createElement(
|
|
1071
1076
|
DropdownMenuPrimitive__namespace.SubTrigger,
|
|
1072
1077
|
{
|
|
1073
1078
|
ref,
|
|
@@ -1079,10 +1084,10 @@ var DropdownMenuSubTrigger = React33__namespace.forwardRef(({ className, inset,
|
|
|
1079
1084
|
...props
|
|
1080
1085
|
},
|
|
1081
1086
|
children,
|
|
1082
|
-
/* @__PURE__ */
|
|
1087
|
+
/* @__PURE__ */ React37__namespace.createElement(lucideReact.ChevronRight, { className: "ml-auto" })
|
|
1083
1088
|
));
|
|
1084
1089
|
DropdownMenuSubTrigger.displayName = DropdownMenuPrimitive__namespace.SubTrigger.displayName;
|
|
1085
|
-
var DropdownMenuSubContent =
|
|
1090
|
+
var DropdownMenuSubContent = React37__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React37__namespace.createElement(
|
|
1086
1091
|
DropdownMenuPrimitive__namespace.SubContent,
|
|
1087
1092
|
{
|
|
1088
1093
|
ref,
|
|
@@ -1094,7 +1099,7 @@ var DropdownMenuSubContent = React33__namespace.forwardRef(({ className, ...prop
|
|
|
1094
1099
|
}
|
|
1095
1100
|
));
|
|
1096
1101
|
DropdownMenuSubContent.displayName = DropdownMenuPrimitive__namespace.SubContent.displayName;
|
|
1097
|
-
var DropdownMenuContent =
|
|
1102
|
+
var DropdownMenuContent = React37__namespace.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ React37__namespace.createElement(DropdownMenuPrimitive__namespace.Portal, null, /* @__PURE__ */ React37__namespace.createElement(
|
|
1098
1103
|
DropdownMenuPrimitive__namespace.Content,
|
|
1099
1104
|
{
|
|
1100
1105
|
ref,
|
|
@@ -1108,7 +1113,7 @@ var DropdownMenuContent = React33__namespace.forwardRef(({ className, sideOffset
|
|
|
1108
1113
|
}
|
|
1109
1114
|
)));
|
|
1110
1115
|
DropdownMenuContent.displayName = DropdownMenuPrimitive__namespace.Content.displayName;
|
|
1111
|
-
var DropdownMenuItem =
|
|
1116
|
+
var DropdownMenuItem = React37__namespace.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ React37__namespace.createElement(
|
|
1112
1117
|
DropdownMenuPrimitive__namespace.Item,
|
|
1113
1118
|
{
|
|
1114
1119
|
ref,
|
|
@@ -1121,7 +1126,7 @@ var DropdownMenuItem = React33__namespace.forwardRef(({ className, inset, ...pro
|
|
|
1121
1126
|
}
|
|
1122
1127
|
));
|
|
1123
1128
|
DropdownMenuItem.displayName = DropdownMenuPrimitive__namespace.Item.displayName;
|
|
1124
|
-
var DropdownMenuCheckboxItem =
|
|
1129
|
+
var DropdownMenuCheckboxItem = React37__namespace.forwardRef(({ className, children, checked, ...props }, ref) => /* @__PURE__ */ React37__namespace.createElement(
|
|
1125
1130
|
DropdownMenuPrimitive__namespace.CheckboxItem,
|
|
1126
1131
|
{
|
|
1127
1132
|
ref,
|
|
@@ -1132,11 +1137,11 @@ var DropdownMenuCheckboxItem = React33__namespace.forwardRef(({ className, child
|
|
|
1132
1137
|
checked,
|
|
1133
1138
|
...props
|
|
1134
1139
|
},
|
|
1135
|
-
/* @__PURE__ */
|
|
1140
|
+
/* @__PURE__ */ React37__namespace.createElement("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center" }, /* @__PURE__ */ React37__namespace.createElement(DropdownMenuPrimitive__namespace.ItemIndicator, null, /* @__PURE__ */ React37__namespace.createElement(lucideReact.Check, { className: "h-4 w-4" }))),
|
|
1136
1141
|
children
|
|
1137
1142
|
));
|
|
1138
1143
|
DropdownMenuCheckboxItem.displayName = DropdownMenuPrimitive__namespace.CheckboxItem.displayName;
|
|
1139
|
-
var DropdownMenuRadioItem =
|
|
1144
|
+
var DropdownMenuRadioItem = React37__namespace.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ React37__namespace.createElement(
|
|
1140
1145
|
DropdownMenuPrimitive__namespace.RadioItem,
|
|
1141
1146
|
{
|
|
1142
1147
|
ref,
|
|
@@ -1146,11 +1151,11 @@ var DropdownMenuRadioItem = React33__namespace.forwardRef(({ className, children
|
|
|
1146
1151
|
),
|
|
1147
1152
|
...props
|
|
1148
1153
|
},
|
|
1149
|
-
/* @__PURE__ */
|
|
1154
|
+
/* @__PURE__ */ React37__namespace.createElement("span", { className: "absolute left-2 flex h-3.5 w-3.5 items-center justify-center" }, /* @__PURE__ */ React37__namespace.createElement(DropdownMenuPrimitive__namespace.ItemIndicator, null, /* @__PURE__ */ React37__namespace.createElement(lucideReact.Circle, { className: "h-2 w-2 fill-current" }))),
|
|
1150
1155
|
children
|
|
1151
1156
|
));
|
|
1152
1157
|
DropdownMenuRadioItem.displayName = DropdownMenuPrimitive__namespace.RadioItem.displayName;
|
|
1153
|
-
var DropdownMenuLabel =
|
|
1158
|
+
var DropdownMenuLabel = React37__namespace.forwardRef(({ className, inset, ...props }, ref) => /* @__PURE__ */ React37__namespace.createElement(
|
|
1154
1159
|
DropdownMenuPrimitive__namespace.Label,
|
|
1155
1160
|
{
|
|
1156
1161
|
ref,
|
|
@@ -1163,7 +1168,7 @@ var DropdownMenuLabel = React33__namespace.forwardRef(({ className, inset, ...pr
|
|
|
1163
1168
|
}
|
|
1164
1169
|
));
|
|
1165
1170
|
DropdownMenuLabel.displayName = DropdownMenuPrimitive__namespace.Label.displayName;
|
|
1166
|
-
var DropdownMenuSeparator =
|
|
1171
|
+
var DropdownMenuSeparator = React37__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React37__namespace.createElement(
|
|
1167
1172
|
DropdownMenuPrimitive__namespace.Separator,
|
|
1168
1173
|
{
|
|
1169
1174
|
ref,
|
|
@@ -1176,7 +1181,7 @@ var DropdownMenuShortcut = ({
|
|
|
1176
1181
|
className,
|
|
1177
1182
|
...props
|
|
1178
1183
|
}) => {
|
|
1179
|
-
return /* @__PURE__ */
|
|
1184
|
+
return /* @__PURE__ */ React37__namespace.createElement(
|
|
1180
1185
|
"span",
|
|
1181
1186
|
{
|
|
1182
1187
|
className: chunk7Z5LLJ3A_js.cn("ml-auto text-xs tracking-widest opacity-60", className),
|
|
@@ -1188,7 +1193,7 @@ DropdownMenuShortcut.displayName = "DropdownMenuShortcut";
|
|
|
1188
1193
|
var Popover = PopoverPrimitive__namespace.Root;
|
|
1189
1194
|
var PopoverTrigger = PopoverPrimitive__namespace.Trigger;
|
|
1190
1195
|
var PopoverAnchor = PopoverPrimitive__namespace.Anchor;
|
|
1191
|
-
var PopoverContent =
|
|
1196
|
+
var PopoverContent = React37__namespace.forwardRef(({ className, align = "center", sideOffset = 4, ...props }, ref) => /* @__PURE__ */ React37__namespace.createElement(PopoverPrimitive__namespace.Portal, null, /* @__PURE__ */ React37__namespace.createElement(
|
|
1192
1197
|
PopoverPrimitive__namespace.Content,
|
|
1193
1198
|
{
|
|
1194
1199
|
ref,
|
|
@@ -1202,7 +1207,7 @@ var PopoverContent = React33__namespace.forwardRef(({ className, align = "center
|
|
|
1202
1207
|
}
|
|
1203
1208
|
)));
|
|
1204
1209
|
PopoverContent.displayName = PopoverPrimitive__namespace.Content.displayName;
|
|
1205
|
-
var Progress =
|
|
1210
|
+
var Progress = React37__namespace.forwardRef(({ className, value, ...props }, ref) => /* @__PURE__ */ React37__namespace.createElement(
|
|
1206
1211
|
ProgressPrimitive__namespace.Root,
|
|
1207
1212
|
{
|
|
1208
1213
|
ref,
|
|
@@ -1212,7 +1217,7 @@ var Progress = React33__namespace.forwardRef(({ className, value, ...props }, re
|
|
|
1212
1217
|
),
|
|
1213
1218
|
...props
|
|
1214
1219
|
},
|
|
1215
|
-
/* @__PURE__ */
|
|
1220
|
+
/* @__PURE__ */ React37__namespace.createElement(
|
|
1216
1221
|
ProgressPrimitive__namespace.Indicator,
|
|
1217
1222
|
{
|
|
1218
1223
|
className: "h-full w-full flex-1 bg-primary transition-all",
|
|
@@ -1221,19 +1226,19 @@ var Progress = React33__namespace.forwardRef(({ className, value, ...props }, re
|
|
|
1221
1226
|
)
|
|
1222
1227
|
));
|
|
1223
1228
|
Progress.displayName = ProgressPrimitive__namespace.Root.displayName;
|
|
1224
|
-
var ScrollArea =
|
|
1229
|
+
var ScrollArea = React37__namespace.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ React37__namespace.createElement(
|
|
1225
1230
|
ScrollAreaPrimitive__namespace.Root,
|
|
1226
1231
|
{
|
|
1227
1232
|
ref,
|
|
1228
1233
|
className: chunk7Z5LLJ3A_js.cn("relative overflow-hidden", className),
|
|
1229
1234
|
...props
|
|
1230
1235
|
},
|
|
1231
|
-
/* @__PURE__ */
|
|
1232
|
-
/* @__PURE__ */
|
|
1233
|
-
/* @__PURE__ */
|
|
1236
|
+
/* @__PURE__ */ React37__namespace.createElement(ScrollAreaPrimitive__namespace.Viewport, { className: "h-full w-full rounded-[inherit]" }, children),
|
|
1237
|
+
/* @__PURE__ */ React37__namespace.createElement(ScrollBar, null),
|
|
1238
|
+
/* @__PURE__ */ React37__namespace.createElement(ScrollAreaPrimitive__namespace.Corner, null)
|
|
1234
1239
|
));
|
|
1235
1240
|
ScrollArea.displayName = ScrollAreaPrimitive__namespace.Root.displayName;
|
|
1236
|
-
var ScrollBar =
|
|
1241
|
+
var ScrollBar = React37__namespace.forwardRef(({ className, orientation = "vertical", ...props }, ref) => /* @__PURE__ */ React37__namespace.createElement(
|
|
1237
1242
|
ScrollAreaPrimitive__namespace.ScrollAreaScrollbar,
|
|
1238
1243
|
{
|
|
1239
1244
|
ref,
|
|
@@ -1246,13 +1251,13 @@ var ScrollBar = React33__namespace.forwardRef(({ className, orientation = "verti
|
|
|
1246
1251
|
),
|
|
1247
1252
|
...props
|
|
1248
1253
|
},
|
|
1249
|
-
/* @__PURE__ */
|
|
1254
|
+
/* @__PURE__ */ React37__namespace.createElement(ScrollAreaPrimitive__namespace.ScrollAreaThumb, { className: "relative flex-1 rounded-full bg-border" })
|
|
1250
1255
|
));
|
|
1251
1256
|
ScrollBar.displayName = ScrollAreaPrimitive__namespace.ScrollAreaScrollbar.displayName;
|
|
1252
1257
|
var Select = SelectPrimitive__namespace.Root;
|
|
1253
1258
|
var SelectGroup = SelectPrimitive__namespace.Group;
|
|
1254
1259
|
var SelectValue = SelectPrimitive__namespace.Value;
|
|
1255
|
-
var SelectTrigger =
|
|
1260
|
+
var SelectTrigger = React37__namespace.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ React37__namespace.createElement(
|
|
1256
1261
|
SelectPrimitive__namespace.Trigger,
|
|
1257
1262
|
{
|
|
1258
1263
|
ref,
|
|
@@ -1263,10 +1268,10 @@ var SelectTrigger = React33__namespace.forwardRef(({ className, children, ...pro
|
|
|
1263
1268
|
...props
|
|
1264
1269
|
},
|
|
1265
1270
|
children,
|
|
1266
|
-
/* @__PURE__ */
|
|
1271
|
+
/* @__PURE__ */ React37__namespace.createElement(SelectPrimitive__namespace.Icon, { asChild: true }, /* @__PURE__ */ React37__namespace.createElement(lucideReact.ChevronDown, { className: "h-4 w-4 opacity-50" }))
|
|
1267
1272
|
));
|
|
1268
1273
|
SelectTrigger.displayName = SelectPrimitive__namespace.Trigger.displayName;
|
|
1269
|
-
var SelectScrollUpButton =
|
|
1274
|
+
var SelectScrollUpButton = React37__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React37__namespace.createElement(
|
|
1270
1275
|
SelectPrimitive__namespace.ScrollUpButton,
|
|
1271
1276
|
{
|
|
1272
1277
|
ref,
|
|
@@ -1276,10 +1281,10 @@ var SelectScrollUpButton = React33__namespace.forwardRef(({ className, ...props
|
|
|
1276
1281
|
),
|
|
1277
1282
|
...props
|
|
1278
1283
|
},
|
|
1279
|
-
/* @__PURE__ */
|
|
1284
|
+
/* @__PURE__ */ React37__namespace.createElement(lucideReact.ChevronUp, { className: "h-4 w-4" })
|
|
1280
1285
|
));
|
|
1281
1286
|
SelectScrollUpButton.displayName = SelectPrimitive__namespace.ScrollUpButton.displayName;
|
|
1282
|
-
var SelectScrollDownButton =
|
|
1287
|
+
var SelectScrollDownButton = React37__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React37__namespace.createElement(
|
|
1283
1288
|
SelectPrimitive__namespace.ScrollDownButton,
|
|
1284
1289
|
{
|
|
1285
1290
|
ref,
|
|
@@ -1289,10 +1294,10 @@ var SelectScrollDownButton = React33__namespace.forwardRef(({ className, ...prop
|
|
|
1289
1294
|
),
|
|
1290
1295
|
...props
|
|
1291
1296
|
},
|
|
1292
|
-
/* @__PURE__ */
|
|
1297
|
+
/* @__PURE__ */ React37__namespace.createElement(lucideReact.ChevronDown, { className: "h-4 w-4" })
|
|
1293
1298
|
));
|
|
1294
1299
|
SelectScrollDownButton.displayName = SelectPrimitive__namespace.ScrollDownButton.displayName;
|
|
1295
|
-
var SelectContent =
|
|
1300
|
+
var SelectContent = React37__namespace.forwardRef(({ className, children, position = "popper", ...props }, ref) => /* @__PURE__ */ React37__namespace.createElement(SelectPrimitive__namespace.Portal, null, /* @__PURE__ */ React37__namespace.createElement(
|
|
1296
1301
|
SelectPrimitive__namespace.Content,
|
|
1297
1302
|
{
|
|
1298
1303
|
ref,
|
|
@@ -1304,8 +1309,8 @@ var SelectContent = React33__namespace.forwardRef(({ className, children, positi
|
|
|
1304
1309
|
position,
|
|
1305
1310
|
...props
|
|
1306
1311
|
},
|
|
1307
|
-
/* @__PURE__ */
|
|
1308
|
-
/* @__PURE__ */
|
|
1312
|
+
/* @__PURE__ */ React37__namespace.createElement(SelectScrollUpButton, null),
|
|
1313
|
+
/* @__PURE__ */ React37__namespace.createElement(
|
|
1309
1314
|
SelectPrimitive__namespace.Viewport,
|
|
1310
1315
|
{
|
|
1311
1316
|
className: chunk7Z5LLJ3A_js.cn(
|
|
@@ -1315,10 +1320,10 @@ var SelectContent = React33__namespace.forwardRef(({ className, children, positi
|
|
|
1315
1320
|
},
|
|
1316
1321
|
children
|
|
1317
1322
|
),
|
|
1318
|
-
/* @__PURE__ */
|
|
1323
|
+
/* @__PURE__ */ React37__namespace.createElement(SelectScrollDownButton, null)
|
|
1319
1324
|
)));
|
|
1320
1325
|
SelectContent.displayName = SelectPrimitive__namespace.Content.displayName;
|
|
1321
|
-
var SelectLabel =
|
|
1326
|
+
var SelectLabel = React37__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React37__namespace.createElement(
|
|
1322
1327
|
SelectPrimitive__namespace.Label,
|
|
1323
1328
|
{
|
|
1324
1329
|
ref,
|
|
@@ -1327,7 +1332,7 @@ var SelectLabel = React33__namespace.forwardRef(({ className, ...props }, ref) =
|
|
|
1327
1332
|
}
|
|
1328
1333
|
));
|
|
1329
1334
|
SelectLabel.displayName = SelectPrimitive__namespace.Label.displayName;
|
|
1330
|
-
var SelectItem =
|
|
1335
|
+
var SelectItem = React37__namespace.forwardRef(({ className, children, ...props }, ref) => /* @__PURE__ */ React37__namespace.createElement(
|
|
1331
1336
|
SelectPrimitive__namespace.Item,
|
|
1332
1337
|
{
|
|
1333
1338
|
ref,
|
|
@@ -1337,11 +1342,11 @@ var SelectItem = React33__namespace.forwardRef(({ className, children, ...props
|
|
|
1337
1342
|
),
|
|
1338
1343
|
...props
|
|
1339
1344
|
},
|
|
1340
|
-
/* @__PURE__ */
|
|
1341
|
-
/* @__PURE__ */
|
|
1345
|
+
/* @__PURE__ */ React37__namespace.createElement("span", { className: "absolute right-2 flex h-3.5 w-3.5 items-center justify-center" }, /* @__PURE__ */ React37__namespace.createElement(SelectPrimitive__namespace.ItemIndicator, null, /* @__PURE__ */ React37__namespace.createElement(lucideReact.Check, { className: "h-4 w-4" }))),
|
|
1346
|
+
/* @__PURE__ */ React37__namespace.createElement(SelectPrimitive__namespace.ItemText, null, children)
|
|
1342
1347
|
));
|
|
1343
1348
|
SelectItem.displayName = SelectPrimitive__namespace.Item.displayName;
|
|
1344
|
-
var SelectSeparator =
|
|
1349
|
+
var SelectSeparator = React37__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React37__namespace.createElement(
|
|
1345
1350
|
SelectPrimitive__namespace.Separator,
|
|
1346
1351
|
{
|
|
1347
1352
|
ref,
|
|
@@ -1350,8 +1355,8 @@ var SelectSeparator = React33__namespace.forwardRef(({ className, ...props }, re
|
|
|
1350
1355
|
}
|
|
1351
1356
|
));
|
|
1352
1357
|
SelectSeparator.displayName = SelectPrimitive__namespace.Separator.displayName;
|
|
1353
|
-
var Separator3 =
|
|
1354
|
-
({ className, orientation = "horizontal", decorative = true, ...props }, ref) => /* @__PURE__ */
|
|
1358
|
+
var Separator3 = React37__namespace.forwardRef(
|
|
1359
|
+
({ className, orientation = "horizontal", decorative = true, ...props }, ref) => /* @__PURE__ */ React37__namespace.createElement(
|
|
1355
1360
|
SeparatorPrimitive__namespace.Root,
|
|
1356
1361
|
{
|
|
1357
1362
|
ref,
|
|
@@ -1371,7 +1376,7 @@ var Sheet = DialogPrimitive__namespace.Root;
|
|
|
1371
1376
|
var SheetTrigger = DialogPrimitive__namespace.Trigger;
|
|
1372
1377
|
var SheetClose = DialogPrimitive__namespace.Close;
|
|
1373
1378
|
var SheetPortal = DialogPrimitive__namespace.Portal;
|
|
1374
|
-
var SheetOverlay =
|
|
1379
|
+
var SheetOverlay = React37__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React37__namespace.createElement(
|
|
1375
1380
|
DialogPrimitive__namespace.Overlay,
|
|
1376
1381
|
{
|
|
1377
1382
|
className: chunk7Z5LLJ3A_js.cn(
|
|
@@ -1399,21 +1404,21 @@ var sheetVariants = classVarianceAuthority.cva(
|
|
|
1399
1404
|
}
|
|
1400
1405
|
}
|
|
1401
1406
|
);
|
|
1402
|
-
var SheetContent =
|
|
1407
|
+
var SheetContent = React37__namespace.forwardRef(({ side = "right", className, children, ...props }, ref) => /* @__PURE__ */ React37__namespace.createElement(SheetPortal, null, /* @__PURE__ */ React37__namespace.createElement(SheetOverlay, null), /* @__PURE__ */ React37__namespace.createElement(
|
|
1403
1408
|
DialogPrimitive__namespace.Content,
|
|
1404
1409
|
{
|
|
1405
1410
|
ref,
|
|
1406
1411
|
className: chunk7Z5LLJ3A_js.cn(sheetVariants({ side }), className),
|
|
1407
1412
|
...props
|
|
1408
1413
|
},
|
|
1409
|
-
/* @__PURE__ */
|
|
1414
|
+
/* @__PURE__ */ React37__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__ */ React37__namespace.createElement(lucideReact.X, { className: "h-4 w-4" }), /* @__PURE__ */ React37__namespace.createElement("span", { className: "sr-only" }, "Close")),
|
|
1410
1415
|
children
|
|
1411
1416
|
)));
|
|
1412
1417
|
SheetContent.displayName = DialogPrimitive__namespace.Content.displayName;
|
|
1413
1418
|
var SheetHeader = ({
|
|
1414
1419
|
className,
|
|
1415
1420
|
...props
|
|
1416
|
-
}) => /* @__PURE__ */
|
|
1421
|
+
}) => /* @__PURE__ */ React37__namespace.createElement(
|
|
1417
1422
|
"div",
|
|
1418
1423
|
{
|
|
1419
1424
|
className: chunk7Z5LLJ3A_js.cn(
|
|
@@ -1427,7 +1432,7 @@ SheetHeader.displayName = "SheetHeader";
|
|
|
1427
1432
|
var SheetFooter = ({
|
|
1428
1433
|
className,
|
|
1429
1434
|
...props
|
|
1430
|
-
}) => /* @__PURE__ */
|
|
1435
|
+
}) => /* @__PURE__ */ React37__namespace.createElement(
|
|
1431
1436
|
"div",
|
|
1432
1437
|
{
|
|
1433
1438
|
className: chunk7Z5LLJ3A_js.cn(
|
|
@@ -1438,7 +1443,7 @@ var SheetFooter = ({
|
|
|
1438
1443
|
}
|
|
1439
1444
|
);
|
|
1440
1445
|
SheetFooter.displayName = "SheetFooter";
|
|
1441
|
-
var SheetTitle =
|
|
1446
|
+
var SheetTitle = React37__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React37__namespace.createElement(
|
|
1442
1447
|
DialogPrimitive__namespace.Title,
|
|
1443
1448
|
{
|
|
1444
1449
|
ref,
|
|
@@ -1447,7 +1452,7 @@ var SheetTitle = React33__namespace.forwardRef(({ className, ...props }, ref) =>
|
|
|
1447
1452
|
}
|
|
1448
1453
|
));
|
|
1449
1454
|
SheetTitle.displayName = DialogPrimitive__namespace.Title.displayName;
|
|
1450
|
-
var SheetDescription =
|
|
1455
|
+
var SheetDescription = React37__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React37__namespace.createElement(
|
|
1451
1456
|
DialogPrimitive__namespace.Description,
|
|
1452
1457
|
{
|
|
1453
1458
|
ref,
|
|
@@ -1456,8 +1461,8 @@ var SheetDescription = React33__namespace.forwardRef(({ className, ...props }, r
|
|
|
1456
1461
|
}
|
|
1457
1462
|
));
|
|
1458
1463
|
SheetDescription.displayName = DialogPrimitive__namespace.Description.displayName;
|
|
1459
|
-
var Textarea =
|
|
1460
|
-
return /* @__PURE__ */
|
|
1464
|
+
var Textarea = React37__namespace.forwardRef(({ className, ...props }, ref) => {
|
|
1465
|
+
return /* @__PURE__ */ React37__namespace.createElement(
|
|
1461
1466
|
"textarea",
|
|
1462
1467
|
{
|
|
1463
1468
|
className: chunk7Z5LLJ3A_js.cn(
|
|
@@ -1473,7 +1478,7 @@ Textarea.displayName = "Textarea";
|
|
|
1473
1478
|
var TooltipProvider = TooltipPrimitive__namespace.Provider;
|
|
1474
1479
|
var Tooltip = TooltipPrimitive__namespace.Root;
|
|
1475
1480
|
var TooltipTrigger = TooltipPrimitive__namespace.Trigger;
|
|
1476
|
-
var TooltipContent =
|
|
1481
|
+
var TooltipContent = React37__namespace.forwardRef(({ className, sideOffset = 4, ...props }, ref) => /* @__PURE__ */ React37__namespace.createElement(TooltipPrimitive__namespace.Portal, null, /* @__PURE__ */ React37__namespace.createElement(
|
|
1477
1482
|
TooltipPrimitive__namespace.Content,
|
|
1478
1483
|
{
|
|
1479
1484
|
ref,
|
|
@@ -1486,7 +1491,7 @@ var TooltipContent = React33__namespace.forwardRef(({ className, sideOffset = 4,
|
|
|
1486
1491
|
}
|
|
1487
1492
|
)));
|
|
1488
1493
|
TooltipContent.displayName = TooltipPrimitive__namespace.Content.displayName;
|
|
1489
|
-
var Avatar =
|
|
1494
|
+
var Avatar = React37__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React37__namespace.createElement(
|
|
1490
1495
|
AvatarPrimitive__namespace.Root,
|
|
1491
1496
|
{
|
|
1492
1497
|
ref,
|
|
@@ -1498,7 +1503,7 @@ var Avatar = React33__namespace.forwardRef(({ className, ...props }, ref) => /*
|
|
|
1498
1503
|
}
|
|
1499
1504
|
));
|
|
1500
1505
|
Avatar.displayName = AvatarPrimitive__namespace.Root.displayName;
|
|
1501
|
-
var AvatarImage =
|
|
1506
|
+
var AvatarImage = React37__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React37__namespace.createElement(
|
|
1502
1507
|
AvatarPrimitive__namespace.Image,
|
|
1503
1508
|
{
|
|
1504
1509
|
ref,
|
|
@@ -1507,7 +1512,7 @@ var AvatarImage = React33__namespace.forwardRef(({ className, ...props }, ref) =
|
|
|
1507
1512
|
}
|
|
1508
1513
|
));
|
|
1509
1514
|
AvatarImage.displayName = AvatarPrimitive__namespace.Image.displayName;
|
|
1510
|
-
var AvatarFallback =
|
|
1515
|
+
var AvatarFallback = React37__namespace.forwardRef(({ className, ...props }, ref) => /* @__PURE__ */ React37__namespace.createElement(
|
|
1511
1516
|
AvatarPrimitive__namespace.Fallback,
|
|
1512
1517
|
{
|
|
1513
1518
|
ref,
|
|
@@ -1548,20 +1553,20 @@ function Grid({
|
|
|
1548
1553
|
}) {
|
|
1549
1554
|
const gridColsClasses = buildGridColsClasses(columns);
|
|
1550
1555
|
const gapClass = getGapClassName(gap);
|
|
1551
|
-
return /* @__PURE__ */
|
|
1556
|
+
return /* @__PURE__ */ React37__namespace.default.createElement(
|
|
1552
1557
|
"div",
|
|
1553
1558
|
{
|
|
1554
1559
|
className: `grid ${gridColsClasses} ${gapClass} ${className}`.trim(),
|
|
1555
1560
|
style
|
|
1556
1561
|
},
|
|
1557
|
-
items.map((item, index) => /* @__PURE__ */
|
|
1562
|
+
items.map((item, index) => /* @__PURE__ */ React37__namespace.default.createElement("div", { key: item.id }, renderItem(item, index)))
|
|
1558
1563
|
);
|
|
1559
1564
|
}
|
|
1560
1565
|
var Timeline = ({ items = [] }) => {
|
|
1561
1566
|
if (!items || items.length === 0) {
|
|
1562
1567
|
return null;
|
|
1563
1568
|
}
|
|
1564
|
-
return /* @__PURE__ */
|
|
1569
|
+
return /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "relative" }, /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "absolute left-4 top-0 bottom-0 w-0.5 bg-gray-200" }), items.map((item, index) => /* @__PURE__ */ React37__namespace.default.createElement("div", { key: index, className: "relative pl-12 pb-8" }, /* @__PURE__ */ React37__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__ */ React37__namespace.default.createElement("div", { className: "w-2 h-2 rounded-full bg-white" })), /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "bg-white rounded-lg p-4 shadow-md" }, /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "text-sm text-gray-500 mb-2" }, item.date), /* @__PURE__ */ React37__namespace.default.createElement("h4", { className: "text-lg font-semibold mb-2" }, item.title), /* @__PURE__ */ React37__namespace.default.createElement("p", { className: "text-gray-600" }, item.description)))));
|
|
1565
1570
|
};
|
|
1566
1571
|
var CollisionBalls = ({
|
|
1567
1572
|
collisionBallsConfig: {
|
|
@@ -1570,13 +1575,13 @@ var CollisionBalls = ({
|
|
|
1570
1575
|
height
|
|
1571
1576
|
}
|
|
1572
1577
|
}) => {
|
|
1573
|
-
const canvasRef =
|
|
1574
|
-
const containerRef =
|
|
1575
|
-
const ballsRef =
|
|
1576
|
-
const [isShaking, setIsShaking] =
|
|
1577
|
-
const [draggedBall, setDraggedBall] =
|
|
1578
|
-
const [mousePos, setMousePos] =
|
|
1579
|
-
const animationRef =
|
|
1578
|
+
const canvasRef = React37.useRef(null);
|
|
1579
|
+
const containerRef = React37.useRef(null);
|
|
1580
|
+
const ballsRef = React37.useRef([]);
|
|
1581
|
+
const [isShaking, setIsShaking] = React37.useState(false);
|
|
1582
|
+
const [draggedBall, setDraggedBall] = React37.useState(null);
|
|
1583
|
+
const [mousePos, setMousePos] = React37.useState({ x: 0, y: 0 });
|
|
1584
|
+
const animationRef = React37.useRef(null);
|
|
1580
1585
|
const updateCanvasSize = () => {
|
|
1581
1586
|
const container = containerRef.current;
|
|
1582
1587
|
const canvas = canvasRef.current;
|
|
@@ -1619,7 +1624,7 @@ var CollisionBalls = ({
|
|
|
1619
1624
|
isDragging: false
|
|
1620
1625
|
}));
|
|
1621
1626
|
};
|
|
1622
|
-
|
|
1627
|
+
React37.useEffect(() => {
|
|
1623
1628
|
const handleResize = () => {
|
|
1624
1629
|
console.log("Window resized");
|
|
1625
1630
|
updateCanvasSize();
|
|
@@ -1634,7 +1639,7 @@ var CollisionBalls = ({
|
|
|
1634
1639
|
}
|
|
1635
1640
|
};
|
|
1636
1641
|
}, []);
|
|
1637
|
-
|
|
1642
|
+
React37.useEffect(() => {
|
|
1638
1643
|
const canvas = canvasRef.current;
|
|
1639
1644
|
if (!canvas) {
|
|
1640
1645
|
console.error("Canvas element not found");
|
|
@@ -1824,7 +1829,7 @@ var CollisionBalls = ({
|
|
|
1824
1829
|
y: (event.clientY - rect.top) * scaleY
|
|
1825
1830
|
};
|
|
1826
1831
|
};
|
|
1827
|
-
return /* @__PURE__ */
|
|
1832
|
+
return /* @__PURE__ */ React37__namespace.default.createElement("div", { style: { width: "100%", height: "100%", position: "relative", backgroundColor: "#f9fafb", borderRadius: "0.5rem" } }, /* @__PURE__ */ React37__namespace.default.createElement("div", { ref: containerRef, style: { width: "100%", height: "100%", position: "absolute", top: 0, left: 0 } }, /* @__PURE__ */ React37__namespace.default.createElement(
|
|
1828
1833
|
"canvas",
|
|
1829
1834
|
{
|
|
1830
1835
|
ref: canvasRef,
|
|
@@ -1839,14 +1844,14 @@ var CollisionBalls = ({
|
|
|
1839
1844
|
onMouseUp: handleMouseUp,
|
|
1840
1845
|
onMouseLeave: handleMouseUp
|
|
1841
1846
|
}
|
|
1842
|
-
)), /* @__PURE__ */
|
|
1847
|
+
)), /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "absolute bottom-4 right-4 flex gap-2" }, /* @__PURE__ */ React37__namespace.default.createElement(
|
|
1843
1848
|
"button",
|
|
1844
1849
|
{
|
|
1845
1850
|
onClick: shake,
|
|
1846
1851
|
className: `px-4 py-2 bg-blue-500 text-white rounded-lg hover:bg-blue-600 transition-colors ${isShaking ? "animate-pulse" : ""}`
|
|
1847
1852
|
},
|
|
1848
1853
|
"\u6447\u4E00\u6447"
|
|
1849
|
-
), /* @__PURE__ */
|
|
1854
|
+
), /* @__PURE__ */ React37__namespace.default.createElement(
|
|
1850
1855
|
"button",
|
|
1851
1856
|
{
|
|
1852
1857
|
onClick: slowdown,
|
|
@@ -1855,6 +1860,286 @@ var CollisionBalls = ({
|
|
|
1855
1860
|
"\u51CF\u901F"
|
|
1856
1861
|
)));
|
|
1857
1862
|
};
|
|
1863
|
+
function GenericOrderManager({
|
|
1864
|
+
operations,
|
|
1865
|
+
renderItem,
|
|
1866
|
+
className = "",
|
|
1867
|
+
title = "\u987A\u5E8F\u7BA1\u7406",
|
|
1868
|
+
description = "\u62D6\u62FD\u6216\u4F7F\u7528\u6309\u94AE\u8C03\u6574\u663E\u793A\u987A\u5E8F",
|
|
1869
|
+
onOrderChanged,
|
|
1870
|
+
emptyMessage = "\u6682\u65E0\u6570\u636E",
|
|
1871
|
+
loadingMessage = "\u52A0\u8F7D\u6570\u636E..."
|
|
1872
|
+
}) {
|
|
1873
|
+
const [items, setItems] = React37.useState([]);
|
|
1874
|
+
const [originalOrder, setOriginalOrder] = React37.useState([]);
|
|
1875
|
+
const [loading, setLoading] = React37.useState(true);
|
|
1876
|
+
const [saving, setSaving] = React37.useState(false);
|
|
1877
|
+
const [error, setError] = React37.useState(null);
|
|
1878
|
+
const [hasChanges, setHasChanges] = React37.useState(false);
|
|
1879
|
+
const [draggedItem, setDraggedItem] = React37.useState(null);
|
|
1880
|
+
const loadItems = React37.useCallback(async () => {
|
|
1881
|
+
try {
|
|
1882
|
+
setLoading(true);
|
|
1883
|
+
setError(null);
|
|
1884
|
+
const data = await operations.loadItems();
|
|
1885
|
+
setItems(data);
|
|
1886
|
+
setOriginalOrder([...data]);
|
|
1887
|
+
setHasChanges(false);
|
|
1888
|
+
} catch (err) {
|
|
1889
|
+
console.error("\u274C [\u901A\u7528\u6392\u5E8F] \u52A0\u8F7D\u6570\u636E\u9519\u8BEF:", err);
|
|
1890
|
+
setError(err instanceof Error ? err.message : "\u52A0\u8F7D\u6570\u636E\u5931\u8D25");
|
|
1891
|
+
} finally {
|
|
1892
|
+
setLoading(false);
|
|
1893
|
+
}
|
|
1894
|
+
}, [operations]);
|
|
1895
|
+
React37.useEffect(() => {
|
|
1896
|
+
loadItems();
|
|
1897
|
+
}, [loadItems]);
|
|
1898
|
+
React37.useEffect(() => {
|
|
1899
|
+
const hasOrderChanged = items.some(
|
|
1900
|
+
(item, index) => originalOrder[index]?.id !== item.id
|
|
1901
|
+
);
|
|
1902
|
+
setHasChanges(hasOrderChanged);
|
|
1903
|
+
}, [items, originalOrder]);
|
|
1904
|
+
const handleMoveUp = async (itemId) => {
|
|
1905
|
+
try {
|
|
1906
|
+
setError(null);
|
|
1907
|
+
const currentIndex = items.findIndex((item) => item.id === itemId);
|
|
1908
|
+
if (currentIndex === -1) {
|
|
1909
|
+
setError("\u9879\u76EE\u4E0D\u5B58\u5728");
|
|
1910
|
+
return;
|
|
1911
|
+
}
|
|
1912
|
+
if (currentIndex === 0) {
|
|
1913
|
+
setError("\u9879\u76EE\u5DF2\u7ECF\u5728\u6700\u524D\u9762\uFF0C\u65E0\u6CD5\u4E0A\u79FB");
|
|
1914
|
+
return;
|
|
1915
|
+
}
|
|
1916
|
+
await operations.moveItemUp(itemId);
|
|
1917
|
+
await loadItems();
|
|
1918
|
+
onOrderChanged?.();
|
|
1919
|
+
} catch (err) {
|
|
1920
|
+
console.error("\u274C [\u901A\u7528\u6392\u5E8F] \u4E0A\u79FB\u9879\u76EE\u9519\u8BEF:", err);
|
|
1921
|
+
setError(err instanceof Error ? err.message : "\u4E0A\u79FB\u5931\u8D25");
|
|
1922
|
+
}
|
|
1923
|
+
};
|
|
1924
|
+
const handleMoveDown = async (itemId) => {
|
|
1925
|
+
try {
|
|
1926
|
+
setError(null);
|
|
1927
|
+
const currentIndex = items.findIndex((item) => item.id === itemId);
|
|
1928
|
+
if (currentIndex === -1) {
|
|
1929
|
+
setError("\u9879\u76EE\u4E0D\u5B58\u5728");
|
|
1930
|
+
return;
|
|
1931
|
+
}
|
|
1932
|
+
if (currentIndex === items.length - 1) {
|
|
1933
|
+
setError("\u9879\u76EE\u5DF2\u7ECF\u5728\u6700\u540E\u9762\uFF0C\u65E0\u6CD5\u4E0B\u79FB");
|
|
1934
|
+
return;
|
|
1935
|
+
}
|
|
1936
|
+
await operations.moveItemDown(itemId);
|
|
1937
|
+
await loadItems();
|
|
1938
|
+
onOrderChanged?.();
|
|
1939
|
+
} catch (err) {
|
|
1940
|
+
console.error("\u274C [\u901A\u7528\u6392\u5E8F] \u4E0B\u79FB\u9879\u76EE\u9519\u8BEF:", err);
|
|
1941
|
+
setError(err instanceof Error ? err.message : "\u4E0B\u79FB\u5931\u8D25");
|
|
1942
|
+
}
|
|
1943
|
+
};
|
|
1944
|
+
const handleDragStart = (e, index) => {
|
|
1945
|
+
setDraggedItem(index);
|
|
1946
|
+
e.dataTransfer.effectAllowed = "move";
|
|
1947
|
+
};
|
|
1948
|
+
const handleDragOver = (e, _index) => {
|
|
1949
|
+
e.preventDefault();
|
|
1950
|
+
e.dataTransfer.dropEffect = "move";
|
|
1951
|
+
};
|
|
1952
|
+
const handleDrop = async (e, dropIndex) => {
|
|
1953
|
+
e.preventDefault();
|
|
1954
|
+
if (draggedItem === null || draggedItem === dropIndex) {
|
|
1955
|
+
setDraggedItem(null);
|
|
1956
|
+
return;
|
|
1957
|
+
}
|
|
1958
|
+
try {
|
|
1959
|
+
setError(null);
|
|
1960
|
+
const newItems = [...items];
|
|
1961
|
+
const draggedItemData = newItems[draggedItem];
|
|
1962
|
+
if (!draggedItemData) return;
|
|
1963
|
+
newItems.splice(draggedItem, 1);
|
|
1964
|
+
newItems.splice(dropIndex, 0, draggedItemData);
|
|
1965
|
+
const itemOrders = newItems.map((item, index) => ({
|
|
1966
|
+
id: item.id,
|
|
1967
|
+
order: index
|
|
1968
|
+
}));
|
|
1969
|
+
await operations.updateItemOrder(itemOrders);
|
|
1970
|
+
await loadItems();
|
|
1971
|
+
onOrderChanged?.();
|
|
1972
|
+
} catch (err) {
|
|
1973
|
+
console.error("\u274C [\u901A\u7528\u6392\u5E8F] \u62D6\u62FD\u6392\u5E8F\u9519\u8BEF:", err);
|
|
1974
|
+
setError(err instanceof Error ? err.message : "\u6392\u5E8F\u5931\u8D25");
|
|
1975
|
+
} finally {
|
|
1976
|
+
setDraggedItem(null);
|
|
1977
|
+
}
|
|
1978
|
+
};
|
|
1979
|
+
const handleSaveOrder = async () => {
|
|
1980
|
+
try {
|
|
1981
|
+
setSaving(true);
|
|
1982
|
+
setError(null);
|
|
1983
|
+
const itemOrders = items.map((item, index) => ({
|
|
1984
|
+
id: item.id,
|
|
1985
|
+
order: index
|
|
1986
|
+
}));
|
|
1987
|
+
await operations.updateItemOrder(itemOrders);
|
|
1988
|
+
setOriginalOrder([...items]);
|
|
1989
|
+
setHasChanges(false);
|
|
1990
|
+
onOrderChanged?.();
|
|
1991
|
+
} catch (err) {
|
|
1992
|
+
console.error("\u274C [\u901A\u7528\u6392\u5E8F] \u4FDD\u5B58\u987A\u5E8F\u9519\u8BEF:", err);
|
|
1993
|
+
setError(err instanceof Error ? err.message : "\u4FDD\u5B58\u5931\u8D25");
|
|
1994
|
+
await loadItems();
|
|
1995
|
+
} finally {
|
|
1996
|
+
setSaving(false);
|
|
1997
|
+
}
|
|
1998
|
+
};
|
|
1999
|
+
const handleResetOrder = () => {
|
|
2000
|
+
setItems([...originalOrder]);
|
|
2001
|
+
};
|
|
2002
|
+
if (loading) {
|
|
2003
|
+
return /* @__PURE__ */ React37__namespace.default.createElement("div", { className: chunk7Z5LLJ3A_js.cn("flex flex-col items-center justify-center p-12 text-gray-500", className) }, /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "w-6 h-6 border-2 border-gray-200 border-t-blue-500 rounded-full animate-spin mb-2" }), /* @__PURE__ */ React37__namespace.default.createElement("span", null, loadingMessage));
|
|
2004
|
+
}
|
|
2005
|
+
return /* @__PURE__ */ React37__namespace.default.createElement("div", { className: chunk7Z5LLJ3A_js.cn("bg-white rounded-xl p-6 shadow-md border-2 border-gray-100", className) }, /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "flex items-center justify-between mb-4 pb-3 border-b border-gray-100 sm:flex-row flex-col sm:items-center items-start gap-4" }, /* @__PURE__ */ React37__namespace.default.createElement("h3", { className: "m-0 text-gray-900 text-lg font-semibold" }, title), /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "flex gap-3 w-full sm:w-auto" }, hasChanges && /* @__PURE__ */ React37__namespace.default.createElement(React37__namespace.default.Fragment, null, /* @__PURE__ */ React37__namespace.default.createElement(
|
|
2006
|
+
"button",
|
|
2007
|
+
{
|
|
2008
|
+
onClick: handleResetOrder,
|
|
2009
|
+
className: "flex items-center gap-2 bg-amber-500 hover:bg-amber-600 text-white px-4 py-2 rounded-lg font-medium transition-colors",
|
|
2010
|
+
title: "\u91CD\u7F6E\u4E3A\u539F\u59CB\u987A\u5E8F"
|
|
2011
|
+
},
|
|
2012
|
+
/* @__PURE__ */ React37__namespace.default.createElement(lucideReact.RotateCcw, { size: 16 }),
|
|
2013
|
+
"\u91CD\u7F6E"
|
|
2014
|
+
), /* @__PURE__ */ React37__namespace.default.createElement(
|
|
2015
|
+
"button",
|
|
2016
|
+
{
|
|
2017
|
+
onClick: handleSaveOrder,
|
|
2018
|
+
disabled: saving,
|
|
2019
|
+
className: "flex items-center gap-2 bg-blue-500 hover:bg-blue-600 disabled:opacity-50 disabled:cursor-not-allowed text-white px-4 py-2 rounded-lg font-medium transition-colors",
|
|
2020
|
+
title: "\u4FDD\u5B58\u65B0\u987A\u5E8F"
|
|
2021
|
+
},
|
|
2022
|
+
/* @__PURE__ */ React37__namespace.default.createElement(lucideReact.Save, { size: 16 }),
|
|
2023
|
+
saving ? "\u4FDD\u5B58\u4E2D..." : "\u4FDD\u5B58\u987A\u5E8F"
|
|
2024
|
+
)))), error && /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "flex items-center gap-2 bg-red-50 text-red-600 p-3 rounded-lg mb-4 border border-red-200" }, /* @__PURE__ */ React37__namespace.default.createElement(lucideReact.AlertCircle, { size: 16 }), /* @__PURE__ */ React37__namespace.default.createElement("span", null, error)), /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "bg-slate-50 border border-slate-200 rounded-lg p-4 mb-6" }, /* @__PURE__ */ React37__namespace.default.createElement("p", { className: "m-0 mb-2 color-slate-500 text-sm" }, description), /* @__PURE__ */ React37__namespace.default.createElement("ul", { className: "m-0 pl-6 color-slate-500 text-sm list-disc" }, /* @__PURE__ */ React37__namespace.default.createElement("li", { className: "mb-1" }, "\u4F7F\u7528\u62D6\u62FD\uFF1A\u70B9\u51FB\u5E76\u62D6\u52A8 ", /* @__PURE__ */ React37__namespace.default.createElement(lucideReact.GripVertical, { size: 14, className: "inline-block align-middle text-gray-500" }), " \u56FE\u6807"), /* @__PURE__ */ React37__namespace.default.createElement("li", { className: "mb-1" }, "\u4F7F\u7528\u6309\u94AE\uFF1A\u70B9\u51FB ", /* @__PURE__ */ React37__namespace.default.createElement(lucideReact.ChevronUp, { size: 14, className: "inline-block align-middle text-gray-500" }), " \u6216 ", /* @__PURE__ */ React37__namespace.default.createElement(lucideReact.ChevronDown, { size: 14, className: "inline-block align-middle text-gray-500" }), " \u6309\u94AE"), /* @__PURE__ */ React37__namespace.default.createElement("li", null, '\u5B8C\u6210\u8C03\u6574\u540E\uFF0C\u70B9\u51FB"\u4FDD\u5B58\u987A\u5E8F"\u6309\u94AE\u4FDD\u5B58\u66F4\u6539'))), /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "flex flex-col gap-3" }, items.map((item, index) => /* @__PURE__ */ React37__namespace.default.createElement(
|
|
2025
|
+
"div",
|
|
2026
|
+
{
|
|
2027
|
+
key: item.id,
|
|
2028
|
+
className: chunk7Z5LLJ3A_js.cn(
|
|
2029
|
+
"flex items-center gap-3 p-4 bg-gray-50 border-2 border-gray-200 rounded-lg transition-all hover:border-gray-300 hover:shadow-sm",
|
|
2030
|
+
draggedItem === index && "opacity-50 rotate-2 border-blue-500"
|
|
2031
|
+
),
|
|
2032
|
+
draggable: true,
|
|
2033
|
+
onDragStart: (e) => handleDragStart(e, index),
|
|
2034
|
+
onDragOver: (e) => handleDragOver(e),
|
|
2035
|
+
onDrop: (e) => handleDrop(e, index)
|
|
2036
|
+
},
|
|
2037
|
+
/* @__PURE__ */ React37__namespace.default.createElement("div", { className: "flex items-center cursor-grab active:cursor-grabbing text-gray-400 p-1 rounded hover:text-gray-500 hover:bg-gray-100 transition-colors" }, /* @__PURE__ */ React37__namespace.default.createElement(lucideReact.GripVertical, { size: 20 })),
|
|
2038
|
+
/* @__PURE__ */ React37__namespace.default.createElement("div", { className: "flex-1 min-w-0" }, renderItem(item, index, index === 0, index === items.length - 1)),
|
|
2039
|
+
/* @__PURE__ */ React37__namespace.default.createElement("div", { className: "flex items-center mx-3" }, /* @__PURE__ */ React37__namespace.default.createElement("span", { className: "flex items-center justify-center w-8 h-8 bg-blue-500 text-white text-sm font-semibold rounded-full sm:w-8 sm:h-8 w-7 h-7 sm:text-sm text-xs" }, "#", index + 1)),
|
|
2040
|
+
/* @__PURE__ */ React37__namespace.default.createElement("div", { className: "flex flex-col gap-1 sm:flex-col flex-row" }, /* @__PURE__ */ React37__namespace.default.createElement(
|
|
2041
|
+
"button",
|
|
2042
|
+
{
|
|
2043
|
+
onClick: () => handleMoveUp(item.id),
|
|
2044
|
+
disabled: index === 0,
|
|
2045
|
+
className: "flex items-center justify-center w-8 h-8 p-0 border border-gray-300 bg-white text-gray-500 rounded cursor-pointer transition-all hover:bg-gray-100 hover:border-gray-400 hover:text-gray-700 disabled:opacity-40 disabled:cursor-not-allowed disabled:bg-gray-50 sm:w-8 sm:h-8 w-7 h-7",
|
|
2046
|
+
title: "\u4E0A\u79FB"
|
|
2047
|
+
},
|
|
2048
|
+
/* @__PURE__ */ React37__namespace.default.createElement(lucideReact.ChevronUp, { size: 18 })
|
|
2049
|
+
), /* @__PURE__ */ React37__namespace.default.createElement(
|
|
2050
|
+
"button",
|
|
2051
|
+
{
|
|
2052
|
+
onClick: () => handleMoveDown(item.id),
|
|
2053
|
+
disabled: index === items.length - 1,
|
|
2054
|
+
className: "flex items-center justify-center w-8 h-8 p-0 border border-gray-300 bg-white text-gray-500 rounded cursor-pointer transition-all hover:bg-gray-100 hover:border-gray-400 hover:text-gray-700 disabled:opacity-40 disabled:cursor-not-allowed disabled:bg-gray-50 sm:w-8 sm:h-8 w-7 h-7",
|
|
2055
|
+
title: "\u4E0B\u79FB"
|
|
2056
|
+
},
|
|
2057
|
+
/* @__PURE__ */ React37__namespace.default.createElement(lucideReact.ChevronDown, { size: 18 })
|
|
2058
|
+
))
|
|
2059
|
+
))), items.length === 0 && /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "text-center p-12 text-gray-400 italic" }, /* @__PURE__ */ React37__namespace.default.createElement("p", { className: "m-0" }, emptyMessage)));
|
|
2060
|
+
}
|
|
2061
|
+
var BackButton = ({ href, className = "" }) => {
|
|
2062
|
+
const router = navigation.useRouter();
|
|
2063
|
+
const handleClick = () => {
|
|
2064
|
+
if (href) {
|
|
2065
|
+
router.push(href);
|
|
2066
|
+
} else {
|
|
2067
|
+
router.back();
|
|
2068
|
+
}
|
|
2069
|
+
};
|
|
2070
|
+
return /* @__PURE__ */ React37__namespace.default.createElement(
|
|
2071
|
+
"button",
|
|
2072
|
+
{
|
|
2073
|
+
onClick: handleClick,
|
|
2074
|
+
className: chunk7Z5LLJ3A_js.cn(
|
|
2075
|
+
"inline-flex items-center px-4 py-2 text-sm font-medium text-gray-700 bg-white border border-gray-300 rounded-md hover:bg-gray-50 focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-blue-500 transition-colors",
|
|
2076
|
+
className
|
|
2077
|
+
)
|
|
2078
|
+
},
|
|
2079
|
+
/* @__PURE__ */ React37__namespace.default.createElement(
|
|
2080
|
+
"svg",
|
|
2081
|
+
{
|
|
2082
|
+
className: "w-5 h-5 mr-2",
|
|
2083
|
+
fill: "none",
|
|
2084
|
+
stroke: "currentColor",
|
|
2085
|
+
viewBox: "0 0 24 24"
|
|
2086
|
+
},
|
|
2087
|
+
/* @__PURE__ */ React37__namespace.default.createElement(
|
|
2088
|
+
"path",
|
|
2089
|
+
{
|
|
2090
|
+
strokeLinecap: "round",
|
|
2091
|
+
strokeLinejoin: "round",
|
|
2092
|
+
strokeWidth: 2,
|
|
2093
|
+
d: "M10 19l-7-7m0 0l7-7m-7 7h18"
|
|
2094
|
+
}
|
|
2095
|
+
)
|
|
2096
|
+
),
|
|
2097
|
+
"\u8FD4\u56DE"
|
|
2098
|
+
);
|
|
2099
|
+
};
|
|
2100
|
+
function getColorValue(bgClass) {
|
|
2101
|
+
const colorMap = {
|
|
2102
|
+
"bg-blue-500": "#3b82f6",
|
|
2103
|
+
"bg-green-500": "#10b981",
|
|
2104
|
+
"bg-red-500": "#ef4444",
|
|
2105
|
+
"bg-purple-500": "#8b5cf6",
|
|
2106
|
+
"bg-slate-500": "#64748b",
|
|
2107
|
+
"bg-emerald-500": "#10b981",
|
|
2108
|
+
"bg-orange-500": "#f97316"
|
|
2109
|
+
};
|
|
2110
|
+
return colorMap[bgClass] || "#3b82f6";
|
|
2111
|
+
}
|
|
2112
|
+
function FilterButtonGroup({
|
|
2113
|
+
label,
|
|
2114
|
+
value,
|
|
2115
|
+
options,
|
|
2116
|
+
onChange,
|
|
2117
|
+
className
|
|
2118
|
+
}) {
|
|
2119
|
+
return /* @__PURE__ */ React37__namespace.default.createElement("div", { className: chunk7Z5LLJ3A_js.cn("space-y-4", className) }, /* @__PURE__ */ React37__namespace.default.createElement("h3", { className: "text-lg font-semibold text-gray-800" }, label), /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "flex gap-3" }, options.map((option) => {
|
|
2120
|
+
const isActive = value === option.value;
|
|
2121
|
+
return /* @__PURE__ */ React37__namespace.default.createElement(
|
|
2122
|
+
"button",
|
|
2123
|
+
{
|
|
2124
|
+
key: option.value,
|
|
2125
|
+
onClick: () => onChange(option.value),
|
|
2126
|
+
style: isActive ? { backgroundColor: getColorValue(option.activeColor.bg) } : void 0,
|
|
2127
|
+
className: chunk7Z5LLJ3A_js.cn(
|
|
2128
|
+
"flex-1 h-12 rounded-lg font-medium text-sm transition-all duration-200 ease-out focus:outline-none focus:ring-2 focus:ring-opacity-50 border",
|
|
2129
|
+
isActive ? "text-white border-transparent shadow-md focus:ring-white" : "bg-white text-gray-700 border-gray-200 shadow-sm hover:bg-gray-50 hover:border-gray-300 hover:shadow focus:ring-blue-300"
|
|
2130
|
+
)
|
|
2131
|
+
},
|
|
2132
|
+
/* @__PURE__ */ React37__namespace.default.createElement("div", { className: "flex items-center justify-center space-x-2" }, /* @__PURE__ */ React37__namespace.default.createElement("span", { className: "text-lg" }, option.icon), /* @__PURE__ */ React37__namespace.default.createElement("span", null, option.label), option.showCount && option.count !== void 0 && /* @__PURE__ */ React37__namespace.default.createElement("span", { className: chunk7Z5LLJ3A_js.cn(
|
|
2133
|
+
"text-xs font-semibold px-2 py-0.5 rounded-full min-w-[1.25rem] text-center",
|
|
2134
|
+
isActive ? "bg-white/20 text-white" : "bg-gray-100 text-gray-600"
|
|
2135
|
+
) }, option.count))
|
|
2136
|
+
);
|
|
2137
|
+
})));
|
|
2138
|
+
}
|
|
2139
|
+
function SearchResultHint({ searchQuery, resultCount, className }) {
|
|
2140
|
+
if (!searchQuery) return null;
|
|
2141
|
+
return /* @__PURE__ */ React37__namespace.default.createElement("div", { className: chunk7Z5LLJ3A_js.cn("mb-6 p-4 bg-blue-50 border border-blue-200 rounded-lg", className) }, /* @__PURE__ */ React37__namespace.default.createElement("p", { className: "text-sm text-blue-700" }, '\u641C\u7D22 "', /* @__PURE__ */ React37__namespace.default.createElement("span", { className: "font-medium" }, searchQuery), '" \u627E\u5230 ', resultCount, " \u4E2A\u7ED3\u679C"));
|
|
2142
|
+
}
|
|
1858
2143
|
var themeStyles = {
|
|
1859
2144
|
light: "",
|
|
1860
2145
|
dark: "bg-[#222] text-[#eee] border-[#444]",
|
|
@@ -1877,7 +2162,7 @@ var ProfileModal = ({
|
|
|
1877
2162
|
}) => {
|
|
1878
2163
|
const renderSocialLinks = () => {
|
|
1879
2164
|
if (!data.socialLinks || data.socialLinks.length === 0) return null;
|
|
1880
|
-
return /* @__PURE__ */
|
|
2165
|
+
return /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "flex gap-3 mt-2" }, data.socialLinks.map((link, index) => /* @__PURE__ */ React37__namespace.default.createElement(
|
|
1881
2166
|
"a",
|
|
1882
2167
|
{
|
|
1883
2168
|
key: index,
|
|
@@ -1896,15 +2181,15 @@ var ProfileModal = ({
|
|
|
1896
2181
|
}
|
|
1897
2182
|
}
|
|
1898
2183
|
},
|
|
1899
|
-
link.icon ? /* @__PURE__ */
|
|
2184
|
+
link.icon ? /* @__PURE__ */ React37__namespace.default.createElement("span", { className: "text-base" }, link.icon) : /* @__PURE__ */ React37__namespace.default.createElement("span", { className: "text-[10px] font-semibold" }, link.type)
|
|
1900
2185
|
)));
|
|
1901
2186
|
};
|
|
1902
2187
|
const renderContacts = () => {
|
|
1903
2188
|
if (!data.contacts || Object.keys(data.contacts).length === 0) return null;
|
|
1904
|
-
return /* @__PURE__ */
|
|
2189
|
+
return /* @__PURE__ */ React37__namespace.default.createElement("div", { className: chunk7Z5LLJ3A_js.cn(
|
|
1905
2190
|
"mt-4 border-t pt-4",
|
|
1906
2191
|
themeName === "dark" ? "border-gray-800" : "border-gray-100"
|
|
1907
|
-
) }, Object.entries(data.contacts).map(([type, value], index) => /* @__PURE__ */
|
|
2192
|
+
) }, Object.entries(data.contacts).map(([type, value], index) => /* @__PURE__ */ React37__namespace.default.createElement(
|
|
1908
2193
|
"div",
|
|
1909
2194
|
{
|
|
1910
2195
|
key: index,
|
|
@@ -1914,35 +2199,35 @@ var ProfileModal = ({
|
|
|
1914
2199
|
),
|
|
1915
2200
|
onClick: () => onContactClick && onContactClick(type, value)
|
|
1916
2201
|
},
|
|
1917
|
-
/* @__PURE__ */
|
|
2202
|
+
/* @__PURE__ */ React37__namespace.default.createElement("span", { className: chunk7Z5LLJ3A_js.cn(
|
|
1918
2203
|
"font-medium w-[70px] shrink-0",
|
|
1919
2204
|
themeName === "dark" ? "text-gray-400" : "text-gray-500"
|
|
1920
2205
|
) }, type, ":"),
|
|
1921
|
-
/* @__PURE__ */
|
|
2206
|
+
/* @__PURE__ */ React37__namespace.default.createElement("span", { className: themeName === "dark" ? "text-gray-200" : "text-gray-800" }, value)
|
|
1922
2207
|
)));
|
|
1923
2208
|
};
|
|
1924
|
-
return /* @__PURE__ */
|
|
2209
|
+
return /* @__PURE__ */ React37__namespace.default.createElement(Dialog, { open: isOpen, onOpenChange: (open) => !open && onClose() }, /* @__PURE__ */ React37__namespace.default.createElement(DialogContent, { className: chunk7Z5LLJ3A_js.cn(
|
|
1925
2210
|
"sm:max-w-[500px] p-0 overflow-hidden border-none shadow-2xl",
|
|
1926
2211
|
themeStyles[themeName] || "",
|
|
1927
2212
|
className
|
|
1928
|
-
) }, /* @__PURE__ */
|
|
2213
|
+
) }, /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "p-6" }, /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "flex gap-5 mb-5" }, showAvatar && /* @__PURE__ */ React37__namespace.default.createElement(
|
|
1929
2214
|
"div",
|
|
1930
2215
|
{
|
|
1931
2216
|
className: "shrink-0",
|
|
1932
2217
|
onClick: onAvatarClick,
|
|
1933
2218
|
style: { cursor: onAvatarClick ? "pointer" : "default" }
|
|
1934
2219
|
},
|
|
1935
|
-
/* @__PURE__ */
|
|
1936
|
-
), /* @__PURE__ */
|
|
2220
|
+
/* @__PURE__ */ React37__namespace.default.createElement(Avatar, { className: "border-2 border-primary/10 shadow-sm", style: { width: avatarSize, height: avatarSize } }, data.avatar && /* @__PURE__ */ React37__namespace.default.createElement(AvatarImage, { src: data.avatar, alt: data.name, className: "object-cover" }), /* @__PURE__ */ React37__namespace.default.createElement(AvatarFallback, { className: "text-xl" }, data.name.substring(0, 2).toUpperCase()))
|
|
2221
|
+
), /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "flex-1 min-w-0 flex flex-col justify-center" }, /* @__PURE__ */ React37__namespace.default.createElement("h2", { className: chunk7Z5LLJ3A_js.cn(
|
|
1937
2222
|
"text-2xl font-bold m-0 mb-1",
|
|
1938
2223
|
themeName === "dark" ? "text-white" : "text-gray-900"
|
|
1939
|
-
) }, data.name), data.title && /* @__PURE__ */
|
|
2224
|
+
) }, data.name), data.title && /* @__PURE__ */ React37__namespace.default.createElement("div", { className: chunk7Z5LLJ3A_js.cn(
|
|
1940
2225
|
"text-sm mb-2",
|
|
1941
2226
|
themeName === "dark" ? "text-gray-400" : "text-gray-500"
|
|
1942
|
-
) }, data.title), showSocial && renderSocialLinks())), showBio && data.bio && /* @__PURE__ */
|
|
2227
|
+
) }, data.title), showSocial && renderSocialLinks())), showBio && data.bio && /* @__PURE__ */ React37__namespace.default.createElement("div", { className: chunk7Z5LLJ3A_js.cn(
|
|
1943
2228
|
"mb-5 leading-relaxed text-sm",
|
|
1944
2229
|
themeName === "dark" ? "text-gray-300" : "text-gray-600"
|
|
1945
|
-
) }, /* @__PURE__ */
|
|
2230
|
+
) }, /* @__PURE__ */ React37__namespace.default.createElement("p", null, data.bio)), showContacts && renderContacts(), data.customContent && /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "mt-5" }, data.customContent))));
|
|
1946
2231
|
};
|
|
1947
2232
|
var ProfileModal_default = ProfileModal;
|
|
1948
2233
|
var BadgeList = ({
|
|
@@ -1950,13 +2235,13 @@ var BadgeList = ({
|
|
|
1950
2235
|
className = ""
|
|
1951
2236
|
}) => {
|
|
1952
2237
|
if (!badges || badges.length === 0) return null;
|
|
1953
|
-
return /* @__PURE__ */
|
|
2238
|
+
return /* @__PURE__ */ React37__namespace.default.createElement("div", { className: chunk7Z5LLJ3A_js.cn("flex flex-wrap gap-2 mt-4", className) }, badges.map((badge, index) => /* @__PURE__ */ React37__namespace.default.createElement(
|
|
1954
2239
|
Badge,
|
|
1955
2240
|
{
|
|
1956
2241
|
key: index,
|
|
1957
2242
|
variant: badge.type === "default" ? "default" : badge.type
|
|
1958
2243
|
},
|
|
1959
|
-
badge.icon && /* @__PURE__ */
|
|
2244
|
+
badge.icon && /* @__PURE__ */ React37__namespace.default.createElement("span", { className: "mr-1" }, badge.icon),
|
|
1960
2245
|
badge.label
|
|
1961
2246
|
)));
|
|
1962
2247
|
};
|
|
@@ -2007,7 +2292,7 @@ var exampleProfileData = {
|
|
|
2007
2292
|
{ label: "\u7C89\u4E1D", value: 1024 },
|
|
2008
2293
|
{ label: "\u8BC4\u5206", value: "4.9" }
|
|
2009
2294
|
],
|
|
2010
|
-
customContent: /* @__PURE__ */
|
|
2295
|
+
customContent: /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "mt-5 border-t border-gray-100 pt-4" }, /* @__PURE__ */ React37__namespace.default.createElement("h3", { className: "text-sm font-semibold mb-2" }, "\u4E13\u4E1A\u6280\u80FD"), /* @__PURE__ */ React37__namespace.default.createElement("p", { className: "text-sm text-gray-600 leading-relaxed" }, "\u7CBE\u901AReact\u3001Vue\u3001Angular\u7B49\u524D\u7AEF\u6846\u67B6\uFF0C\u719F\u6089TypeScript\u3001JavaScript\u3001CSS3\u3001HTML5\u7B49\u524D\u7AEF\u6280\u672F\u3002 \u6709\u4E30\u5BCC\u7684\u5927\u578B\u9879\u76EE\u5F00\u53D1\u7ECF\u9A8C\uFF0C\u80FD\u72EC\u7ACB\u8D1F\u8D23\u524D\u7AEF\u67B6\u6784\u8BBE\u8BA1\u3002"))
|
|
2011
2296
|
};
|
|
2012
2297
|
var ProfileButton = ({
|
|
2013
2298
|
data = exampleProfileData,
|
|
@@ -2017,7 +2302,7 @@ var ProfileButton = ({
|
|
|
2017
2302
|
className = "",
|
|
2018
2303
|
modalTheme = "light"
|
|
2019
2304
|
}) => {
|
|
2020
|
-
const [isModalOpen, setIsModalOpen] =
|
|
2305
|
+
const [isModalOpen, setIsModalOpen] = React37.useState(false);
|
|
2021
2306
|
const openModal = () => setIsModalOpen(true);
|
|
2022
2307
|
const closeModal = () => setIsModalOpen(false);
|
|
2023
2308
|
const handleContactClick = (type, value) => {
|
|
@@ -2027,7 +2312,7 @@ var ProfileButton = ({
|
|
|
2027
2312
|
window.open(`tel:${value}`);
|
|
2028
2313
|
}
|
|
2029
2314
|
};
|
|
2030
|
-
return /* @__PURE__ */
|
|
2315
|
+
return /* @__PURE__ */ React37__namespace.default.createElement(React37__namespace.default.Fragment, null, /* @__PURE__ */ React37__namespace.default.createElement(
|
|
2031
2316
|
Button,
|
|
2032
2317
|
{
|
|
2033
2318
|
variant,
|
|
@@ -2036,7 +2321,7 @@ var ProfileButton = ({
|
|
|
2036
2321
|
className
|
|
2037
2322
|
},
|
|
2038
2323
|
buttonText
|
|
2039
|
-
), /* @__PURE__ */
|
|
2324
|
+
), /* @__PURE__ */ React37__namespace.default.createElement(
|
|
2040
2325
|
ProfileModal_default,
|
|
2041
2326
|
{
|
|
2042
2327
|
isOpen: isModalOpen,
|
|
@@ -2047,8 +2332,8 @@ var ProfileButton = ({
|
|
|
2047
2332
|
onSocialLinkClick: (url) => window.open(url, "_blank")
|
|
2048
2333
|
},
|
|
2049
2334
|
data.customContent,
|
|
2050
|
-
data.badges && /* @__PURE__ */
|
|
2051
|
-
data.stats && /* @__PURE__ */
|
|
2335
|
+
data.badges && /* @__PURE__ */ React37__namespace.default.createElement(BadgeList, { badges: data.badges }),
|
|
2336
|
+
data.stats && /* @__PURE__ */ React37__namespace.default.createElement(StatList, { stats: data.stats })
|
|
2052
2337
|
));
|
|
2053
2338
|
};
|
|
2054
2339
|
var AutoOpenModal = ({
|
|
@@ -2058,8 +2343,8 @@ var AutoOpenModal = ({
|
|
|
2058
2343
|
themeName = "light",
|
|
2059
2344
|
onClose
|
|
2060
2345
|
}) => {
|
|
2061
|
-
const [isModalOpen, setIsModalOpen] =
|
|
2062
|
-
|
|
2346
|
+
const [isModalOpen, setIsModalOpen] = React37.useState(false);
|
|
2347
|
+
React37.useEffect(() => {
|
|
2063
2348
|
const timer = setTimeout(() => {
|
|
2064
2349
|
setIsModalOpen(true);
|
|
2065
2350
|
}, delay);
|
|
@@ -2078,7 +2363,7 @@ var AutoOpenModal = ({
|
|
|
2078
2363
|
window.open(`tel:${value}`);
|
|
2079
2364
|
}
|
|
2080
2365
|
};
|
|
2081
|
-
return /* @__PURE__ */
|
|
2366
|
+
return /* @__PURE__ */ React37__namespace.default.createElement(
|
|
2082
2367
|
ProfileModal_default,
|
|
2083
2368
|
{
|
|
2084
2369
|
isOpen: isModalOpen,
|
|
@@ -2088,8 +2373,8 @@ var AutoOpenModal = ({
|
|
|
2088
2373
|
onContactClick: handleContactClick,
|
|
2089
2374
|
onSocialLinkClick: (url) => window.open(url, "_blank")
|
|
2090
2375
|
},
|
|
2091
|
-
data.badges && /* @__PURE__ */
|
|
2092
|
-
data.stats && /* @__PURE__ */
|
|
2376
|
+
data.badges && /* @__PURE__ */ React37__namespace.default.createElement(BadgeList, { badges: data.badges }),
|
|
2377
|
+
data.stats && /* @__PURE__ */ React37__namespace.default.createElement(StatList, { stats: data.stats })
|
|
2093
2378
|
);
|
|
2094
2379
|
};
|
|
2095
2380
|
var sizeMap = {
|
|
@@ -2113,7 +2398,7 @@ var EnhancedAvatar = ({
|
|
|
2113
2398
|
}) => {
|
|
2114
2399
|
const sizeClass = typeof size === "string" ? sizeMap[size] : "";
|
|
2115
2400
|
const customSizeStyle = typeof size === "number" ? { width: size, height: size } : {};
|
|
2116
|
-
return /* @__PURE__ */
|
|
2401
|
+
return /* @__PURE__ */ React37__namespace.default.createElement("div", { className: chunk7Z5LLJ3A_js.cn("relative inline-block", className), onClick }, /* @__PURE__ */ React37__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__ */ React37__namespace.default.createElement(AvatarImage, { src, alt: name || "Avatar", className: "object-cover" }), /* @__PURE__ */ React37__namespace.default.createElement(AvatarFallback, { className: "bg-primary/10 text-primary-foreground" }, name ? name.substring(0, 2).toUpperCase() : "??")), mood && /* @__PURE__ */ React37__namespace.default.createElement(
|
|
2117
2402
|
"div",
|
|
2118
2403
|
{
|
|
2119
2404
|
className: chunk7Z5LLJ3A_js.cn(
|
|
@@ -2122,23 +2407,23 @@ var EnhancedAvatar = ({
|
|
|
2122
2407
|
typeof size === "number" ? size > 60 ? "h-4 w-4" : "h-3 w-3" : size === "large" ? "h-4 w-4" : "h-3 w-3"
|
|
2123
2408
|
)
|
|
2124
2409
|
}
|
|
2125
|
-
), statusText && /* @__PURE__ */
|
|
2410
|
+
), statusText && /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "absolute -bottom-6 left-1/2 transform -translate-x-1/2 whitespace-nowrap" }, /* @__PURE__ */ React37__namespace.default.createElement("span", { className: "text-xs text-muted-foreground" }, statusText)));
|
|
2126
2411
|
};
|
|
2127
2412
|
var About = ({
|
|
2128
2413
|
timelineConfig,
|
|
2129
2414
|
collisionBallsConfig
|
|
2130
2415
|
}) => {
|
|
2131
|
-
return /* @__PURE__ */
|
|
2416
|
+
return /* @__PURE__ */ React37__namespace.default.createElement("section", { id: "about", className: "py-16 bg-white" }, /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "container mx-auto px-4" }, /* @__PURE__ */ React37__namespace.default.createElement("h2", { className: "text-3xl font-bold text-center mb-12" }, "\u5173\u4E8E\u6211"), /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "grid grid-cols-1 lg:grid-cols-2 gap-12" }, /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "bg-white rounded-lg shadow-lg p-6" }, /* @__PURE__ */ React37__namespace.default.createElement("h3", { className: "text-2xl font-semibold mb-6" }, "\u4E2A\u4EBA\u7ECF\u5386"), /* @__PURE__ */ React37__namespace.default.createElement(Timeline, { items: timelineConfig.items })), /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "bg-white rounded-lg shadow-lg p-6" }, /* @__PURE__ */ React37__namespace.default.createElement("h3", { className: "text-2xl font-semibold mb-6" }, "\u6280\u80FD\u5C55\u793A"), /* @__PURE__ */ React37__namespace.default.createElement("div", { style: { height: "400px", position: "relative" } }, /* @__PURE__ */ React37__namespace.default.createElement(CollisionBalls, { collisionBallsConfig }))))));
|
|
2132
2417
|
};
|
|
2133
2418
|
var About_default = About;
|
|
2134
2419
|
var Contact = () => {
|
|
2135
|
-
const [formData, setFormData] =
|
|
2420
|
+
const [formData, setFormData] = React37.useState({
|
|
2136
2421
|
name: "",
|
|
2137
2422
|
email: "",
|
|
2138
2423
|
message: ""
|
|
2139
2424
|
});
|
|
2140
|
-
const [isSubmitting, setIsSubmitting] =
|
|
2141
|
-
const [submitStatus, setSubmitStatus] =
|
|
2425
|
+
const [isSubmitting, setIsSubmitting] = React37.useState(false);
|
|
2426
|
+
const [submitStatus, setSubmitStatus] = React37.useState("idle");
|
|
2142
2427
|
const handleChange = (e) => {
|
|
2143
2428
|
const { name, value } = e.target;
|
|
2144
2429
|
setFormData((prev) => ({
|
|
@@ -2160,7 +2445,7 @@ var Contact = () => {
|
|
|
2160
2445
|
setIsSubmitting(false);
|
|
2161
2446
|
}
|
|
2162
2447
|
};
|
|
2163
|
-
return /* @__PURE__ */
|
|
2448
|
+
return /* @__PURE__ */ React37__namespace.default.createElement("section", { id: "contact", className: "py-16 bg-gray-50" }, /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "max-w-4xl mx-auto px-4 sm:px-6 lg:px-8" }, /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "text-center mb-12" }, /* @__PURE__ */ React37__namespace.default.createElement("h2", { className: "text-3xl font-bold text-gray-900 sm:text-4xl" }, "\u8054\u7CFB\u6211"), /* @__PURE__ */ React37__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__ */ React37__namespace.default.createElement("div", { className: "bg-white rounded-lg shadow-xl p-6 sm:p-8" }, /* @__PURE__ */ React37__namespace.default.createElement("form", { onSubmit: handleSubmit, className: "space-y-6" }, /* @__PURE__ */ React37__namespace.default.createElement("div", null, /* @__PURE__ */ React37__namespace.default.createElement("label", { htmlFor: "name", className: "block text-sm font-medium text-gray-700" }, "\u59D3\u540D"), /* @__PURE__ */ React37__namespace.default.createElement(
|
|
2164
2449
|
"input",
|
|
2165
2450
|
{
|
|
2166
2451
|
type: "text",
|
|
@@ -2172,7 +2457,7 @@ var Contact = () => {
|
|
|
2172
2457
|
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
2458
|
placeholder: "\u8BF7\u8F93\u5165\u60A8\u7684\u59D3\u540D"
|
|
2174
2459
|
}
|
|
2175
|
-
)), /* @__PURE__ */
|
|
2460
|
+
)), /* @__PURE__ */ React37__namespace.default.createElement("div", null, /* @__PURE__ */ React37__namespace.default.createElement("label", { htmlFor: "email", className: "block text-sm font-medium text-gray-700" }, "\u90AE\u7BB1"), /* @__PURE__ */ React37__namespace.default.createElement(
|
|
2176
2461
|
"input",
|
|
2177
2462
|
{
|
|
2178
2463
|
type: "email",
|
|
@@ -2184,7 +2469,7 @@ var Contact = () => {
|
|
|
2184
2469
|
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
2470
|
placeholder: "\u8BF7\u8F93\u5165\u60A8\u7684\u90AE\u7BB1"
|
|
2186
2471
|
}
|
|
2187
|
-
)), /* @__PURE__ */
|
|
2472
|
+
)), /* @__PURE__ */ React37__namespace.default.createElement("div", null, /* @__PURE__ */ React37__namespace.default.createElement("label", { htmlFor: "message", className: "block text-sm font-medium text-gray-700" }, "\u6D88\u606F"), /* @__PURE__ */ React37__namespace.default.createElement(
|
|
2188
2473
|
"textarea",
|
|
2189
2474
|
{
|
|
2190
2475
|
name: "message",
|
|
@@ -2196,7 +2481,7 @@ var Contact = () => {
|
|
|
2196
2481
|
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
2482
|
placeholder: "\u8BF7\u8F93\u5165\u60A8\u7684\u6D88\u606F"
|
|
2198
2483
|
}
|
|
2199
|
-
)), /* @__PURE__ */
|
|
2484
|
+
)), /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "flex items-center justify-end" }, /* @__PURE__ */ React37__namespace.default.createElement(
|
|
2200
2485
|
"button",
|
|
2201
2486
|
{
|
|
2202
2487
|
type: "submit",
|
|
@@ -2205,9 +2490,182 @@ var Contact = () => {
|
|
|
2205
2490
|
${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
2491
|
},
|
|
2207
2492
|
isSubmitting ? "\u53D1\u9001\u4E2D..." : "\u53D1\u9001\u6D88\u606F"
|
|
2208
|
-
)), submitStatus === "success" && /* @__PURE__ */
|
|
2493
|
+
)), submitStatus === "success" && /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "rounded-md bg-green-50 p-4" }, /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "flex" }, /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "flex-shrink-0" }, /* @__PURE__ */ React37__namespace.default.createElement("svg", { className: "h-5 w-5 text-green-400", viewBox: "0 0 20 20", fill: "currentColor" }, /* @__PURE__ */ React37__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__ */ React37__namespace.default.createElement("div", { className: "ml-3" }, /* @__PURE__ */ React37__namespace.default.createElement("p", { className: "text-sm font-medium text-green-800" }, "\u6D88\u606F\u5DF2\u6210\u529F\u53D1\u9001\uFF01")))), submitStatus === "error" && /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "rounded-md bg-red-50 p-4" }, /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "flex" }, /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "flex-shrink-0" }, /* @__PURE__ */ React37__namespace.default.createElement("svg", { className: "h-5 w-5 text-red-400", viewBox: "0 0 20 20", fill: "currentColor" }, /* @__PURE__ */ React37__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__ */ React37__namespace.default.createElement("div", { className: "ml-3" }, /* @__PURE__ */ React37__namespace.default.createElement("p", { className: "text-sm font-medium text-red-800" }, "\u53D1\u9001\u5931\u8D25\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5")))))), /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "mt-12 grid grid-cols-1 gap-6 sm:grid-cols-2 lg:grid-cols-3" }, /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "bg-white rounded-lg shadow-lg p-6 text-center" }, /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "text-blue-600 mb-4" }, /* @__PURE__ */ React37__namespace.default.createElement("svg", { className: "h-8 w-8 mx-auto", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React37__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__ */ React37__namespace.default.createElement("h3", { className: "text-lg font-medium text-gray-900" }, "\u90AE\u7BB1"), /* @__PURE__ */ React37__namespace.default.createElement("p", { className: "mt-2 text-gray-600" }, "your.email@example.com")), /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "bg-white rounded-lg shadow-lg p-6 text-center" }, /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "text-blue-600 mb-4" }, /* @__PURE__ */ React37__namespace.default.createElement("svg", { className: "h-8 w-8 mx-auto", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React37__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__ */ React37__namespace.default.createElement("h3", { className: "text-lg font-medium text-gray-900" }, "\u7535\u8BDD"), /* @__PURE__ */ React37__namespace.default.createElement("p", { className: "mt-2 text-gray-600" }, "+86 123 4567 8900")), /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "bg-white rounded-lg shadow-lg p-6 text-center" }, /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "text-blue-600 mb-4" }, /* @__PURE__ */ React37__namespace.default.createElement("svg", { className: "h-8 w-8 mx-auto", fill: "none", stroke: "currentColor", viewBox: "0 0 24 24" }, /* @__PURE__ */ React37__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__ */ React37__namespace.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: "2", d: "M15 11a3 3 0 11-6 0 3 3 0 016 0z" }))), /* @__PURE__ */ React37__namespace.default.createElement("h3", { className: "text-lg font-medium text-gray-900" }, "\u5730\u5740"), /* @__PURE__ */ React37__namespace.default.createElement("p", { className: "mt-2 text-gray-600" }, "\u4E2D\u56FD\uFF0C\u5317\u4EAC")))));
|
|
2209
2494
|
};
|
|
2210
2495
|
var Contact_default = Contact;
|
|
2496
|
+
var Home = ({ homeConfig, className }) => {
|
|
2497
|
+
const { title, subtitle, buttons, imageSrc } = homeConfig;
|
|
2498
|
+
const [displayText, setDisplayText] = React37.useState("");
|
|
2499
|
+
const [currentIndex, setCurrentIndex] = React37.useState(0);
|
|
2500
|
+
React37.useEffect(() => {
|
|
2501
|
+
if (currentIndex < title.length) {
|
|
2502
|
+
const timer = setTimeout(() => {
|
|
2503
|
+
setDisplayText((prev) => prev + title[currentIndex]);
|
|
2504
|
+
setCurrentIndex((prev) => prev + 1);
|
|
2505
|
+
}, 150);
|
|
2506
|
+
return () => clearTimeout(timer);
|
|
2507
|
+
}
|
|
2508
|
+
return () => {
|
|
2509
|
+
setDisplayText("");
|
|
2510
|
+
setCurrentIndex(0);
|
|
2511
|
+
};
|
|
2512
|
+
}, [currentIndex, title]);
|
|
2513
|
+
return /* @__PURE__ */ React37__namespace.default.createElement(
|
|
2514
|
+
"section",
|
|
2515
|
+
{
|
|
2516
|
+
id: "home",
|
|
2517
|
+
className: chunk7Z5LLJ3A_js.cn("min-h-screen flex items-center justify-center py-16 bg-gradient-to-b from-white to-gray-50", className)
|
|
2518
|
+
},
|
|
2519
|
+
/* @__PURE__ */ React37__namespace.default.createElement("div", { className: "container mx-auto px-4" }, /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "flex flex-col md:flex-row items-center gap-12" }, /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "flex-1 text-center md:text-left" }, /* @__PURE__ */ React37__namespace.default.createElement("h1", { className: "text-4xl md:text-6xl font-bold mb-6 text-gray-900" }, /* @__PURE__ */ React37__namespace.default.createElement("span", { className: "inline-block" }, displayText), /* @__PURE__ */ React37__namespace.default.createElement("span", { className: "animate-pulse ml-1 text-blue-500" }, "|")), /* @__PURE__ */ React37__namespace.default.createElement("p", { className: "text-xl md:text-2xl text-gray-600 mb-8" }, subtitle), /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "flex flex-wrap gap-4 justify-center md:justify-start" }, buttons.map((button) => /* @__PURE__ */ React37__namespace.default.createElement(
|
|
2520
|
+
"a",
|
|
2521
|
+
{
|
|
2522
|
+
key: button.link,
|
|
2523
|
+
href: button.link,
|
|
2524
|
+
className: "px-6 py-3 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-all duration-300 shadow-md hover:shadow-lg font-medium"
|
|
2525
|
+
},
|
|
2526
|
+
button.text
|
|
2527
|
+
)))), /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "flex-1" }, /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "relative group" }, /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "absolute -inset-1 bg-gradient-to-r from-blue-600 to-purple-600 rounded-lg blur opacity-25 group-hover:opacity-50 transition duration-1000 group-hover:duration-200" }), /* @__PURE__ */ React37__namespace.default.createElement(
|
|
2528
|
+
"img",
|
|
2529
|
+
{
|
|
2530
|
+
src: imageSrc,
|
|
2531
|
+
alt: "Profile",
|
|
2532
|
+
className: "relative w-full max-w-md mx-auto rounded-lg shadow-xl transform hover:scale-[1.02] transition-transform duration-300 bg-white"
|
|
2533
|
+
}
|
|
2534
|
+
)))))
|
|
2535
|
+
);
|
|
2536
|
+
};
|
|
2537
|
+
var Home_default = Home;
|
|
2538
|
+
var ExperimentCard = ({
|
|
2539
|
+
href,
|
|
2540
|
+
title,
|
|
2541
|
+
description,
|
|
2542
|
+
tags,
|
|
2543
|
+
category,
|
|
2544
|
+
isCompleted,
|
|
2545
|
+
updatedAt,
|
|
2546
|
+
createdAt,
|
|
2547
|
+
className
|
|
2548
|
+
}) => {
|
|
2549
|
+
const formatDate = (dateString) => {
|
|
2550
|
+
if (!dateString) return "";
|
|
2551
|
+
try {
|
|
2552
|
+
const date = new Date(dateString);
|
|
2553
|
+
return date.toLocaleDateString("zh-CN", {
|
|
2554
|
+
year: "numeric",
|
|
2555
|
+
month: "2-digit",
|
|
2556
|
+
day: "2-digit"
|
|
2557
|
+
});
|
|
2558
|
+
} catch (e) {
|
|
2559
|
+
return dateString;
|
|
2560
|
+
}
|
|
2561
|
+
};
|
|
2562
|
+
return /* @__PURE__ */ React37__namespace.default.createElement(Link__default.default, { href, className: chunk7Z5LLJ3A_js.cn("block group", className) }, /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "w-full h-full bg-white rounded-2xl overflow-hidden shadow-md hover:shadow-2xl transition-all duration-300 transform group-hover:-translate-y-1 border border-gray-100 hover:border-gray-200" }, /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "p-6" }, /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "flex items-start justify-between mb-4" }, /* @__PURE__ */ React37__namespace.default.createElement("h3", { className: "text-xl font-semibold text-gray-900 flex-1 pr-4 leading-tight" }, title), /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "flex flex-col gap-2 flex-shrink-0" }, /* @__PURE__ */ React37__namespace.default.createElement("span", { className: chunk7Z5LLJ3A_js.cn(
|
|
2563
|
+
"px-3 py-1.5 text-xs font-medium rounded-full shadow-sm",
|
|
2564
|
+
category === "utility" ? "bg-gradient-to-r from-green-50 to-green-100 text-green-700 border border-green-200" : "bg-gradient-to-r from-purple-50 to-purple-100 text-purple-700 border border-purple-200"
|
|
2565
|
+
) }, category === "utility" ? "\u{1F527} \u5B9E\u7528\u5DE5\u5177" : "\u{1F3AE} \u4F11\u95F2\u5A31\u4E50"), /* @__PURE__ */ React37__namespace.default.createElement("span", { className: chunk7Z5LLJ3A_js.cn(
|
|
2566
|
+
"px-3 py-1.5 text-xs font-medium rounded-full shadow-sm border",
|
|
2567
|
+
isCompleted ? "bg-gradient-to-r from-emerald-50 to-emerald-100 text-emerald-700 border border-emerald-200" : "bg-gradient-to-r from-orange-50 to-orange-100 text-orange-700 border border-orange-200"
|
|
2568
|
+
) }, isCompleted ? "\u2705 \u5DF2\u5B8C\u6210" : "\u{1F6A7} \u8FDB\u884C\u4E2D"))), /* @__PURE__ */ React37__namespace.default.createElement("p", { className: "text-gray-600 mb-4" }, description), updatedAt && /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "flex items-center gap-1 mb-3 text-xs text-gray-500" }, /* @__PURE__ */ React37__namespace.default.createElement("svg", { xmlns: "http://www.w3.org/2000/svg", className: "h-4 w-4", fill: "none", viewBox: "0 0 24 24", stroke: "currentColor" }, /* @__PURE__ */ React37__namespace.default.createElement("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z" })), /* @__PURE__ */ React37__namespace.default.createElement("span", null, "\u66F4\u65B0\u4E8E: ", formatDate(updatedAt)), createdAt && createdAt !== updatedAt && /* @__PURE__ */ React37__namespace.default.createElement("span", { className: "ml-2 text-gray-400" }, "\u521B\u5EFA\u4E8E: ", formatDate(createdAt))), /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "flex flex-wrap gap-2" }, tags.map((tag) => /* @__PURE__ */ React37__namespace.default.createElement(
|
|
2569
|
+
"span",
|
|
2570
|
+
{
|
|
2571
|
+
key: tag,
|
|
2572
|
+
className: "px-3 py-1.5 text-xs font-medium bg-gradient-to-r from-gray-50 to-gray-100 text-gray-700 rounded-full border border-gray-200 shadow-sm hover:shadow-md transition-shadow duration-200"
|
|
2573
|
+
},
|
|
2574
|
+
"#",
|
|
2575
|
+
tag
|
|
2576
|
+
))))));
|
|
2577
|
+
};
|
|
2578
|
+
var ProjectCarousel = ({ projects, className }) => {
|
|
2579
|
+
const [currentIndex, setCurrentIndex] = React37.useState(0);
|
|
2580
|
+
const nextSlide = () => {
|
|
2581
|
+
setCurrentIndex(
|
|
2582
|
+
(prevIndex) => prevIndex === projects.length - 1 ? 0 : prevIndex + 1
|
|
2583
|
+
);
|
|
2584
|
+
};
|
|
2585
|
+
const prevSlide = () => {
|
|
2586
|
+
setCurrentIndex(
|
|
2587
|
+
(prevIndex) => prevIndex === 0 ? projects.length - 1 : prevIndex - 1
|
|
2588
|
+
);
|
|
2589
|
+
};
|
|
2590
|
+
return /* @__PURE__ */ React37__namespace.default.createElement("section", { id: "projects", className: chunk7Z5LLJ3A_js.cn("py-16 bg-gray-50", className) }, /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "container mx-auto px-4" }, /* @__PURE__ */ React37__namespace.default.createElement("h2", { className: "text-3xl font-bold text-center mb-12 text-gray-900" }, "\u9879\u76EE\u5C55\u793A"), /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "relative max-w-4xl mx-auto" }, /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "relative h-[400px] overflow-hidden rounded-lg shadow-xl" }, projects.map((project, index) => /* @__PURE__ */ React37__namespace.default.createElement(
|
|
2591
|
+
"div",
|
|
2592
|
+
{
|
|
2593
|
+
key: project.id,
|
|
2594
|
+
className: chunk7Z5LLJ3A_js.cn(
|
|
2595
|
+
"absolute w-full h-full transition-all duration-500 transform",
|
|
2596
|
+
index === currentIndex ? "translate-x-0 opacity-100" : index < currentIndex ? "-translate-x-full opacity-0" : "translate-x-full opacity-0"
|
|
2597
|
+
)
|
|
2598
|
+
},
|
|
2599
|
+
/* @__PURE__ */ React37__namespace.default.createElement(
|
|
2600
|
+
ExperimentCard,
|
|
2601
|
+
{
|
|
2602
|
+
href: project.link || "#",
|
|
2603
|
+
title: project.title,
|
|
2604
|
+
description: project.description,
|
|
2605
|
+
tags: project.tags,
|
|
2606
|
+
category: "utility"
|
|
2607
|
+
}
|
|
2608
|
+
)
|
|
2609
|
+
))), /* @__PURE__ */ React37__namespace.default.createElement(
|
|
2610
|
+
"button",
|
|
2611
|
+
{
|
|
2612
|
+
onClick: prevSlide,
|
|
2613
|
+
className: "absolute left-4 top-1/2 -translate-y-1/2 p-2 rounded-full bg-white/80 hover:bg-white shadow-lg focus:outline-none focus:ring-2 focus:ring-blue-500 transition-all z-10"
|
|
2614
|
+
},
|
|
2615
|
+
/* @__PURE__ */ React37__namespace.default.createElement(
|
|
2616
|
+
"svg",
|
|
2617
|
+
{
|
|
2618
|
+
className: "w-6 h-6 text-gray-600",
|
|
2619
|
+
fill: "none",
|
|
2620
|
+
stroke: "currentColor",
|
|
2621
|
+
viewBox: "0 0 24 24"
|
|
2622
|
+
},
|
|
2623
|
+
/* @__PURE__ */ React37__namespace.default.createElement(
|
|
2624
|
+
"path",
|
|
2625
|
+
{
|
|
2626
|
+
strokeLinecap: "round",
|
|
2627
|
+
strokeLinejoin: "round",
|
|
2628
|
+
strokeWidth: 2,
|
|
2629
|
+
d: "M15 19l-7-7 7-7"
|
|
2630
|
+
}
|
|
2631
|
+
)
|
|
2632
|
+
)
|
|
2633
|
+
), /* @__PURE__ */ React37__namespace.default.createElement(
|
|
2634
|
+
"button",
|
|
2635
|
+
{
|
|
2636
|
+
onClick: nextSlide,
|
|
2637
|
+
className: "absolute right-4 top-1/2 -translate-y-1/2 p-2 rounded-full bg-white/80 hover:bg-white shadow-lg focus:outline-none focus:ring-2 focus:ring-blue-500 transition-all z-10"
|
|
2638
|
+
},
|
|
2639
|
+
/* @__PURE__ */ React37__namespace.default.createElement(
|
|
2640
|
+
"svg",
|
|
2641
|
+
{
|
|
2642
|
+
className: "w-6 h-6 text-gray-600",
|
|
2643
|
+
fill: "none",
|
|
2644
|
+
stroke: "currentColor",
|
|
2645
|
+
viewBox: "0 0 24 24"
|
|
2646
|
+
},
|
|
2647
|
+
/* @__PURE__ */ React37__namespace.default.createElement(
|
|
2648
|
+
"path",
|
|
2649
|
+
{
|
|
2650
|
+
strokeLinecap: "round",
|
|
2651
|
+
strokeLinejoin: "round",
|
|
2652
|
+
strokeWidth: 2,
|
|
2653
|
+
d: "M9 5l7 7-7 7"
|
|
2654
|
+
}
|
|
2655
|
+
)
|
|
2656
|
+
)
|
|
2657
|
+
), /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "absolute bottom-4 left-1/2 transform -translate-x-1/2 flex space-x-2 z-10" }, projects.map((_, index) => /* @__PURE__ */ React37__namespace.default.createElement(
|
|
2658
|
+
"button",
|
|
2659
|
+
{
|
|
2660
|
+
key: index,
|
|
2661
|
+
onClick: () => setCurrentIndex(index),
|
|
2662
|
+
className: chunk7Z5LLJ3A_js.cn(
|
|
2663
|
+
"w-2 h-2 rounded-full transition-all duration-300",
|
|
2664
|
+
index === currentIndex ? "bg-blue-500 w-4" : "bg-gray-300"
|
|
2665
|
+
)
|
|
2666
|
+
}
|
|
2667
|
+
))))));
|
|
2668
|
+
};
|
|
2211
2669
|
var NavigationItemComponent = ({
|
|
2212
2670
|
item,
|
|
2213
2671
|
direction,
|
|
@@ -2229,7 +2687,7 @@ var NavigationItemComponent = ({
|
|
|
2229
2687
|
const stateClasses = isActive ? "bg-blue-500 text-white shadow-lg" : item.isExternal ? "text-gray-700 hover:bg-purple-50 hover:text-purple-600 border border-purple-200" : "text-gray-700 hover:bg-blue-50 hover:text-blue-600";
|
|
2230
2688
|
return `${baseClasses} ${directionClasses} ${stateClasses}`;
|
|
2231
2689
|
};
|
|
2232
|
-
return /* @__PURE__ */
|
|
2690
|
+
return /* @__PURE__ */ React37__namespace.default.createElement(
|
|
2233
2691
|
"a",
|
|
2234
2692
|
{
|
|
2235
2693
|
href: item.href,
|
|
@@ -2238,9 +2696,9 @@ var NavigationItemComponent = ({
|
|
|
2238
2696
|
rel: item.isExternal ? "noopener noreferrer" : void 0,
|
|
2239
2697
|
className: getItemClasses()
|
|
2240
2698
|
},
|
|
2241
|
-
item.icon && /* @__PURE__ */
|
|
2242
|
-
/* @__PURE__ */
|
|
2243
|
-
item.isExternal && /* @__PURE__ */
|
|
2699
|
+
item.icon && /* @__PURE__ */ React37__namespace.default.createElement("span", { className: "flex-shrink-0" }, item.icon),
|
|
2700
|
+
/* @__PURE__ */ React37__namespace.default.createElement("span", { className: `font-medium ${direction === "vertical" ? "text-sm" : "text-xs"}` }, item.label),
|
|
2701
|
+
item.isExternal && /* @__PURE__ */ React37__namespace.default.createElement(
|
|
2244
2702
|
"svg",
|
|
2245
2703
|
{
|
|
2246
2704
|
className: "w-3 h-3 opacity-60 group-hover:opacity-100 transition-opacity",
|
|
@@ -2248,7 +2706,7 @@ var NavigationItemComponent = ({
|
|
|
2248
2706
|
stroke: "currentColor",
|
|
2249
2707
|
viewBox: "0 0 24 24"
|
|
2250
2708
|
},
|
|
2251
|
-
/* @__PURE__ */
|
|
2709
|
+
/* @__PURE__ */ React37__namespace.default.createElement(
|
|
2252
2710
|
"path",
|
|
2253
2711
|
{
|
|
2254
2712
|
strokeLinecap: "round",
|
|
@@ -2258,7 +2716,7 @@ var NavigationItemComponent = ({
|
|
|
2258
2716
|
}
|
|
2259
2717
|
)
|
|
2260
2718
|
),
|
|
2261
|
-
direction === "vertical" && isActive && /* @__PURE__ */
|
|
2719
|
+
direction === "vertical" && isActive && /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "absolute left-1 top-1/2 transform -translate-y-1/2 w-1 h-6 bg-white rounded-full" })
|
|
2262
2720
|
);
|
|
2263
2721
|
};
|
|
2264
2722
|
var NavigationItem_default = NavigationItemComponent;
|
|
@@ -2318,14 +2776,14 @@ var Navigation = ({
|
|
|
2318
2776
|
onItemClick?.(item);
|
|
2319
2777
|
};
|
|
2320
2778
|
if (!isOpen) return null;
|
|
2321
|
-
return /* @__PURE__ */
|
|
2779
|
+
return /* @__PURE__ */ React37__namespace.default.createElement("nav", { className: `${getContainerClasses()} ${className}` }, /* @__PURE__ */ React37__namespace.default.createElement("div", { className: getContentClasses() }, logo && /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "flex items-center justify-center mb-4" }, /* @__PURE__ */ React37__namespace.default.createElement(
|
|
2322
2780
|
"img",
|
|
2323
2781
|
{
|
|
2324
2782
|
src: logo.src,
|
|
2325
2783
|
alt: logo.alt || "Logo",
|
|
2326
2784
|
className: "h-8 w-auto"
|
|
2327
2785
|
}
|
|
2328
|
-
)), direction === "vertical" && /* @__PURE__ */
|
|
2786
|
+
)), direction === "vertical" && /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "h-12 flex-shrink-0" }), /* @__PURE__ */ React37__namespace.default.createElement("div", { className: getItemsListClasses() }, items.map((item) => /* @__PURE__ */ React37__namespace.default.createElement(
|
|
2329
2787
|
NavigationItem_default,
|
|
2330
2788
|
{
|
|
2331
2789
|
key: item.id,
|
|
@@ -2334,14 +2792,14 @@ var Navigation = ({
|
|
|
2334
2792
|
isActive: activeItemId === item.id,
|
|
2335
2793
|
onClick: handleItemClick
|
|
2336
2794
|
}
|
|
2337
|
-
))), avatar && direction === "vertical" && /* @__PURE__ */
|
|
2795
|
+
))), avatar && direction === "vertical" && /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "flex items-center justify-center mt-auto pt-4" }, /* @__PURE__ */ React37__namespace.default.createElement(
|
|
2338
2796
|
"img",
|
|
2339
2797
|
{
|
|
2340
2798
|
src: avatar.src,
|
|
2341
2799
|
alt: avatar.alt || "Avatar",
|
|
2342
2800
|
className: "w-10 h-10 rounded-full border-2 border-gray-200"
|
|
2343
2801
|
}
|
|
2344
|
-
)), avatar && direction === "horizontal" && /* @__PURE__ */
|
|
2802
|
+
)), avatar && direction === "horizontal" && /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "flex items-center" }, /* @__PURE__ */ React37__namespace.default.createElement(
|
|
2345
2803
|
"img",
|
|
2346
2804
|
{
|
|
2347
2805
|
src: avatar.src,
|
|
@@ -2370,7 +2828,7 @@ var NavigationToggle = ({
|
|
|
2370
2828
|
return "top-4 left-4";
|
|
2371
2829
|
}
|
|
2372
2830
|
};
|
|
2373
|
-
return /* @__PURE__ */
|
|
2831
|
+
return /* @__PURE__ */ React37__namespace.default.createElement(
|
|
2374
2832
|
"button",
|
|
2375
2833
|
{
|
|
2376
2834
|
onClick,
|
|
@@ -2386,7 +2844,7 @@ var NavigationToggle = ({
|
|
|
2386
2844
|
`,
|
|
2387
2845
|
"aria-label": isOpen ? "\u5173\u95ED\u5BFC\u822A\u680F" : "\u6253\u5F00\u5BFC\u822A\u680F"
|
|
2388
2846
|
},
|
|
2389
|
-
/* @__PURE__ */
|
|
2847
|
+
/* @__PURE__ */ React37__namespace.default.createElement("div", { className: "w-5 h-5 flex flex-col justify-center items-center" }, /* @__PURE__ */ React37__namespace.default.createElement(
|
|
2390
2848
|
"span",
|
|
2391
2849
|
{
|
|
2392
2850
|
className: `
|
|
@@ -2395,7 +2853,7 @@ var NavigationToggle = ({
|
|
|
2395
2853
|
${isOpen ? "rotate-45 translate-y-0.5" : ""}
|
|
2396
2854
|
`
|
|
2397
2855
|
}
|
|
2398
|
-
), /* @__PURE__ */
|
|
2856
|
+
), /* @__PURE__ */ React37__namespace.default.createElement(
|
|
2399
2857
|
"span",
|
|
2400
2858
|
{
|
|
2401
2859
|
className: `
|
|
@@ -2404,7 +2862,7 @@ var NavigationToggle = ({
|
|
|
2404
2862
|
${isOpen ? "opacity-0 scale-0" : "opacity-100 scale-100"}
|
|
2405
2863
|
`
|
|
2406
2864
|
}
|
|
2407
|
-
), /* @__PURE__ */
|
|
2865
|
+
), /* @__PURE__ */ React37__namespace.default.createElement(
|
|
2408
2866
|
"span",
|
|
2409
2867
|
{
|
|
2410
2868
|
className: `
|
|
@@ -2427,21 +2885,21 @@ var FloatingMenu = ({
|
|
|
2427
2885
|
triggerClassName = "",
|
|
2428
2886
|
zIndex = 1e3
|
|
2429
2887
|
}) => {
|
|
2430
|
-
const [position, setPosition] =
|
|
2431
|
-
const [isMenuOpen, setIsMenuOpen] =
|
|
2432
|
-
const [menuDirection, setMenuDirection] =
|
|
2433
|
-
const [isDragging, setIsDragging] =
|
|
2434
|
-
const [dragOffset, setDragOffset] =
|
|
2435
|
-
const containerRef =
|
|
2436
|
-
const [mounted, setMounted] =
|
|
2437
|
-
const [hasDragged, setHasDragged] =
|
|
2438
|
-
const dragTimerRef =
|
|
2439
|
-
const mouseDownPosRef =
|
|
2440
|
-
|
|
2888
|
+
const [position, setPosition] = React37.useState(initialPosition);
|
|
2889
|
+
const [isMenuOpen, setIsMenuOpen] = React37.useState(defaultOpen);
|
|
2890
|
+
const [menuDirection, setMenuDirection] = React37.useState("right");
|
|
2891
|
+
const [isDragging, setIsDragging] = React37.useState(false);
|
|
2892
|
+
const [dragOffset, setDragOffset] = React37.useState({ x: 0, y: 0 });
|
|
2893
|
+
const containerRef = React37.useRef(null);
|
|
2894
|
+
const [mounted, setMounted] = React37.useState(false);
|
|
2895
|
+
const [hasDragged, setHasDragged] = React37.useState(false);
|
|
2896
|
+
const dragTimerRef = React37.useRef(null);
|
|
2897
|
+
const mouseDownPosRef = React37.useRef(null);
|
|
2898
|
+
React37.useEffect(() => {
|
|
2441
2899
|
setMounted(true);
|
|
2442
2900
|
return () => setMounted(false);
|
|
2443
2901
|
}, []);
|
|
2444
|
-
|
|
2902
|
+
React37.useEffect(() => {
|
|
2445
2903
|
if (!mounted || !containerRef.current) return;
|
|
2446
2904
|
const updateMenuDirection = () => {
|
|
2447
2905
|
const rect = containerRef.current?.getBoundingClientRect();
|
|
@@ -2470,7 +2928,7 @@ var FloatingMenu = ({
|
|
|
2470
2928
|
setHasDragged(false);
|
|
2471
2929
|
setIsDragging(true);
|
|
2472
2930
|
};
|
|
2473
|
-
|
|
2931
|
+
React37.useEffect(() => {
|
|
2474
2932
|
if (!isDragging) return;
|
|
2475
2933
|
const handleMouseMove = (e) => {
|
|
2476
2934
|
if (mouseDownPosRef.current) {
|
|
@@ -2506,7 +2964,7 @@ var FloatingMenu = ({
|
|
|
2506
2964
|
document.removeEventListener("mouseup", handleMouseUp);
|
|
2507
2965
|
};
|
|
2508
2966
|
}, [isDragging, dragOffset]);
|
|
2509
|
-
|
|
2967
|
+
React37.useEffect(() => {
|
|
2510
2968
|
return () => {
|
|
2511
2969
|
if (dragTimerRef.current) {
|
|
2512
2970
|
window.clearTimeout(dragTimerRef.current);
|
|
@@ -2520,7 +2978,7 @@ var FloatingMenu = ({
|
|
|
2520
2978
|
}
|
|
2521
2979
|
setIsMenuOpen(!isMenuOpen);
|
|
2522
2980
|
};
|
|
2523
|
-
|
|
2981
|
+
React37.useEffect(() => {
|
|
2524
2982
|
if (!isMenuOpen) return;
|
|
2525
2983
|
const handleClickOutside = (e) => {
|
|
2526
2984
|
if (containerRef.current && !containerRef.current.contains(e.target)) {
|
|
@@ -2532,7 +2990,7 @@ var FloatingMenu = ({
|
|
|
2532
2990
|
document.removeEventListener("mousedown", handleClickOutside);
|
|
2533
2991
|
};
|
|
2534
2992
|
}, [isMenuOpen]);
|
|
2535
|
-
|
|
2993
|
+
React37.useEffect(() => {
|
|
2536
2994
|
if (!mounted) return;
|
|
2537
2995
|
const checkBoundaries = () => {
|
|
2538
2996
|
const windowWidth = window.innerWidth;
|
|
@@ -2553,7 +3011,7 @@ var FloatingMenu = ({
|
|
|
2553
3011
|
}, [mounted]);
|
|
2554
3012
|
if (!mounted) return null;
|
|
2555
3013
|
return reactDom.createPortal(
|
|
2556
|
-
/* @__PURE__ */
|
|
3014
|
+
/* @__PURE__ */ React37__namespace.default.createElement(
|
|
2557
3015
|
"div",
|
|
2558
3016
|
{
|
|
2559
3017
|
ref: containerRef,
|
|
@@ -2564,7 +3022,7 @@ var FloatingMenu = ({
|
|
|
2564
3022
|
zIndex
|
|
2565
3023
|
}
|
|
2566
3024
|
},
|
|
2567
|
-
/* @__PURE__ */
|
|
3025
|
+
/* @__PURE__ */ React37__namespace.default.createElement(
|
|
2568
3026
|
"div",
|
|
2569
3027
|
{
|
|
2570
3028
|
className: `
|
|
@@ -2582,7 +3040,7 @@ var FloatingMenu = ({
|
|
|
2582
3040
|
},
|
|
2583
3041
|
trigger
|
|
2584
3042
|
),
|
|
2585
|
-
isMenuOpen && /* @__PURE__ */
|
|
3043
|
+
isMenuOpen && /* @__PURE__ */ React37__namespace.default.createElement(
|
|
2586
3044
|
"div",
|
|
2587
3045
|
{
|
|
2588
3046
|
className: `
|
|
@@ -2611,6 +3069,57 @@ var FloatingMenu = ({
|
|
|
2611
3069
|
);
|
|
2612
3070
|
};
|
|
2613
3071
|
var FloatingMenu_default = FloatingMenu;
|
|
3072
|
+
var FloatingMenuExample = () => {
|
|
3073
|
+
const [windowWidth, setWindowWidth] = React37.useState(0);
|
|
3074
|
+
React37.useEffect(() => {
|
|
3075
|
+
setWindowWidth(window.innerWidth);
|
|
3076
|
+
const handleResize = () => setWindowWidth(window.innerWidth);
|
|
3077
|
+
window.addEventListener("resize", handleResize);
|
|
3078
|
+
return () => window.removeEventListener("resize", handleResize);
|
|
3079
|
+
}, []);
|
|
3080
|
+
const menuItems = [
|
|
3081
|
+
{ id: 1, label: "\u9996\u9875", icon: "\u{1F3E0}" },
|
|
3082
|
+
{ id: 2, label: "\u8BBE\u7F6E", icon: "\u2699\uFE0F" },
|
|
3083
|
+
{ id: 3, label: "\u6D88\u606F", icon: "\u{1F4E9}" },
|
|
3084
|
+
{ id: 4, label: "\u5E2E\u52A9", icon: "\u2753" },
|
|
3085
|
+
{ id: 5, label: "\u9000\u51FA", icon: "\u{1F6AA}" }
|
|
3086
|
+
];
|
|
3087
|
+
const handleMenuItemClick = (id) => {
|
|
3088
|
+
console.log(`\u70B9\u51FB\u4E86\u83DC\u5355\u9879: ${id}`);
|
|
3089
|
+
};
|
|
3090
|
+
return /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "w-full h-screen bg-gray-100 relative p-8" }, /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "max-w-2xl mx-auto bg-white rounded-2xl shadow-sm p-8 mt-12" }, /* @__PURE__ */ React37__namespace.default.createElement("h1", { className: "text-3xl font-bold mb-4 text-gray-900" }, "\u60AC\u6D6E\u83DC\u5355\u793A\u4F8B"), /* @__PURE__ */ React37__namespace.default.createElement("p", { className: "text-gray-600 leading-relaxed mb-6" }, "\u8FD9\u662F\u4E00\u4E2A\u53EF\u62D6\u62FD\u7684\u60AC\u6D6E\u83DC\u5355\u7EC4\u4EF6\u793A\u4F8B\u3002\u4F60\u53EF\u4EE5\u5C1D\u8BD5\u62D6\u52A8\u4E0B\u65B9\u7684 ", /* @__PURE__ */ React37__namespace.default.createElement("span", { className: "font-bold text-blue-600" }, "\u84DD\u8272\u6309\u94AE"), " \u5230\u5904\u79FB\u52A8\u3002"), /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "bg-blue-50 border-l-4 border-blue-500 p-4 mb-6" }, /* @__PURE__ */ React37__namespace.default.createElement("p", { className: "text-sm text-blue-700" }, /* @__PURE__ */ React37__namespace.default.createElement("strong", null, "\u667A\u80FD\u5B9A\u4F4D\uFF1A"), " \u83DC\u5355\u4F1A\u6839\u636E\u6309\u94AE\u5728\u5C4F\u5E55\u4E0A\u7684\u4F4D\u7F6E\u81EA\u52A8\u8C03\u6574\u5F39\u51FA\u65B9\u5411\uFF08\u5411\u5DE6\u6216\u5411\u53F3\uFF09\u3002"))), /* @__PURE__ */ React37__namespace.default.createElement(
|
|
3091
|
+
FloatingMenu_default,
|
|
3092
|
+
{
|
|
3093
|
+
trigger: /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "w-12 h-12 bg-blue-600 rounded-full flex items-center justify-center text-white shadow-lg cursor-pointer" }, /* @__PURE__ */ React37__namespace.default.createElement("span", { className: "text-xl" }, "\u2795")),
|
|
3094
|
+
menu: /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "w-48 bg-white rounded-xl shadow-xl border border-gray-100 overflow-hidden" }, /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "px-4 py-3 border-b border-gray-100" }, /* @__PURE__ */ React37__namespace.default.createElement("h3", { className: "text-sm font-bold text-gray-900" }, "\u5FEB\u6377\u83DC\u5355")), /* @__PURE__ */ React37__namespace.default.createElement("ul", { className: "py-1" }, menuItems.map((item) => /* @__PURE__ */ React37__namespace.default.createElement(
|
|
3095
|
+
"li",
|
|
3096
|
+
{
|
|
3097
|
+
key: item.id,
|
|
3098
|
+
className: "flex items-center gap-3 px-4 py-2.5 hover:bg-blue-50 text-gray-700 hover:text-blue-600 cursor-pointer transition-colors text-sm",
|
|
3099
|
+
onClick: () => handleMenuItemClick(item.id)
|
|
3100
|
+
},
|
|
3101
|
+
/* @__PURE__ */ React37__namespace.default.createElement("span", { className: "text-lg" }, item.icon),
|
|
3102
|
+
/* @__PURE__ */ React37__namespace.default.createElement("span", { className: "font-medium" }, item.label)
|
|
3103
|
+
)))),
|
|
3104
|
+
initialPosition: { x: 100, y: 100 }
|
|
3105
|
+
}
|
|
3106
|
+
), windowWidth > 0 && /* @__PURE__ */ React37__namespace.default.createElement(
|
|
3107
|
+
FloatingMenu_default,
|
|
3108
|
+
{
|
|
3109
|
+
trigger: /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "w-12 h-12 bg-purple-600 rounded-full flex items-center justify-center text-white shadow-lg cursor-pointer" }, /* @__PURE__ */ React37__namespace.default.createElement("span", { className: "text-xl" }, "\u{1F50D}")),
|
|
3110
|
+
menu: /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "w-64 bg-white rounded-xl shadow-xl border border-gray-100 p-4" }, /* @__PURE__ */ React37__namespace.default.createElement("h3", { className: "text-sm font-bold text-gray-900 mb-3" }, "\u5FEB\u901F\u641C\u7D22"), /* @__PURE__ */ React37__namespace.default.createElement("div", { className: "space-y-3" }, /* @__PURE__ */ React37__namespace.default.createElement(
|
|
3111
|
+
"input",
|
|
3112
|
+
{
|
|
3113
|
+
type: "text",
|
|
3114
|
+
placeholder: "\u8F93\u5165\u5173\u952E\u5B57...",
|
|
3115
|
+
className: "w-full px-3 py-2 text-sm border border-gray-200 rounded-lg focus:ring-2 focus:ring-purple-500 focus:border-transparent outline-none"
|
|
3116
|
+
}
|
|
3117
|
+
), /* @__PURE__ */ React37__namespace.default.createElement("button", { className: "w-full bg-purple-600 text-white py-2 rounded-lg text-sm font-medium hover:bg-purple-700 transition-colors" }, "\u641C\u7D22"))),
|
|
3118
|
+
initialPosition: { x: windowWidth - 100, y: 100 }
|
|
3119
|
+
}
|
|
3120
|
+
));
|
|
3121
|
+
};
|
|
3122
|
+
var FloatingMenuExample_default = FloatingMenuExample;
|
|
2614
3123
|
|
|
2615
3124
|
Object.defineProperty(exports, "SearchBox", {
|
|
2616
3125
|
enumerable: true,
|
|
@@ -2708,6 +3217,7 @@ exports.AutoOpenModal = AutoOpenModal;
|
|
|
2708
3217
|
exports.Avatar = Avatar;
|
|
2709
3218
|
exports.AvatarFallback = AvatarFallback;
|
|
2710
3219
|
exports.AvatarImage = AvatarImage;
|
|
3220
|
+
exports.BackButton = BackButton;
|
|
2711
3221
|
exports.BackgroundRemover = BackgroundRemover;
|
|
2712
3222
|
exports.Badge = Badge;
|
|
2713
3223
|
exports.Button = Button;
|
|
@@ -2745,8 +3255,13 @@ exports.DropdownMenuSubContent = DropdownMenuSubContent;
|
|
|
2745
3255
|
exports.DropdownMenuSubTrigger = DropdownMenuSubTrigger;
|
|
2746
3256
|
exports.DropdownMenuTrigger = DropdownMenuTrigger;
|
|
2747
3257
|
exports.EnhancedAvatar = EnhancedAvatar;
|
|
3258
|
+
exports.ExperimentCard = ExperimentCard;
|
|
3259
|
+
exports.FilterButtonGroup = FilterButtonGroup;
|
|
2748
3260
|
exports.FloatingMenu = FloatingMenu_default;
|
|
3261
|
+
exports.FloatingMenuExample = FloatingMenuExample_default;
|
|
3262
|
+
exports.GenericOrderManager = GenericOrderManager;
|
|
2749
3263
|
exports.Grid = Grid;
|
|
3264
|
+
exports.Home = Home_default;
|
|
2750
3265
|
exports.Input = Input;
|
|
2751
3266
|
exports.Label = Label;
|
|
2752
3267
|
exports.Navigation = Navigation_default;
|
|
@@ -2760,8 +3275,10 @@ exports.PopoverTrigger = PopoverTrigger;
|
|
|
2760
3275
|
exports.ProfileButton = ProfileButton;
|
|
2761
3276
|
exports.ProfileModal = ProfileModal;
|
|
2762
3277
|
exports.Progress = Progress;
|
|
3278
|
+
exports.ProjectCarousel = ProjectCarousel;
|
|
2763
3279
|
exports.ScrollArea = ScrollArea;
|
|
2764
3280
|
exports.ScrollBar = ScrollBar;
|
|
3281
|
+
exports.SearchResultHint = SearchResultHint;
|
|
2765
3282
|
exports.Select = Select;
|
|
2766
3283
|
exports.SelectContent = SelectContent;
|
|
2767
3284
|
exports.SelectGroup = SelectGroup;
|