@gallop.software/studio 0.1.19 → 0.1.21

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.
@@ -54,6 +54,18 @@ import { css as css2, keyframes as keyframes2 } from "@emotion/react";
54
54
  // src/components/StudioModal.tsx
55
55
  import { css, keyframes } from "@emotion/react";
56
56
  import { jsx, jsxs } from "@emotion/react/jsx-runtime";
57
+ var colors = {
58
+ primary: "#635bff",
59
+ primaryHover: "#5851e5",
60
+ background: "#f6f9fc",
61
+ surface: "#ffffff",
62
+ surfaceHover: "#f6f9fc",
63
+ border: "#e3e8ee",
64
+ text: "#1a1f36",
65
+ textSecondary: "#697386",
66
+ danger: "#df1b41",
67
+ dangerHover: "#c41535"
68
+ };
57
69
  var fadeIn = keyframes`
58
70
  from { opacity: 0; }
59
71
  to { opacity: 1; }
@@ -61,18 +73,19 @@ var fadeIn = keyframes`
61
73
  var slideIn = keyframes`
62
74
  from {
63
75
  opacity: 0;
64
- transform: scale(0.95);
76
+ transform: translateY(-8px) scale(0.98);
65
77
  }
66
78
  to {
67
79
  opacity: 1;
68
- transform: scale(1);
80
+ transform: translateY(0) scale(1);
69
81
  }
70
82
  `;
71
83
  var styles = {
72
84
  overlay: css`
73
85
  position: fixed;
74
86
  inset: 0;
75
- background-color: rgba(0, 0, 0, 0.5);
87
+ background-color: rgba(26, 31, 54, 0.4);
88
+ backdrop-filter: blur(4px);
76
89
  display: flex;
77
90
  align-items: center;
78
91
  justify-content: center;
@@ -80,73 +93,78 @@ var styles = {
80
93
  animation: ${fadeIn} 0.15s ease-out;
81
94
  `,
82
95
  modal: css`
83
- background-color: white;
96
+ background-color: ${colors.surface};
84
97
  border-radius: 12px;
85
- box-shadow: 0 25px 50px -12px rgba(0, 0, 0, 0.25);
86
- max-width: 400px;
98
+ box-shadow: 0 30px 60px -12px rgba(50, 50, 93, 0.25), 0 18px 36px -18px rgba(0, 0, 0, 0.3);
99
+ max-width: 420px;
87
100
  width: 90%;
88
- animation: ${slideIn} 0.15s ease-out;
101
+ animation: ${slideIn} 0.2s ease-out;
102
+ overflow: hidden;
89
103
  `,
90
104
  header: css`
91
- padding: 20px 24px 0;
105
+ padding: 24px 24px 0;
92
106
  `,
93
107
  title: css`
94
- font-size: 18px;
108
+ font-size: 17px;
95
109
  font-weight: 600;
96
- color: #111827;
110
+ color: ${colors.text};
97
111
  margin: 0;
112
+ letter-spacing: -0.02em;
98
113
  `,
99
114
  body: css`
100
115
  padding: 12px 24px 24px;
101
116
  `,
102
117
  message: css`
103
118
  font-size: 14px;
104
- color: #6b7280;
119
+ color: ${colors.textSecondary};
105
120
  margin: 0;
106
- line-height: 1.5;
121
+ line-height: 1.6;
107
122
  `,
108
123
  footer: css`
109
124
  display: flex;
110
125
  justify-content: flex-end;
111
126
  gap: 12px;
112
127
  padding: 16px 24px;
113
- border-top: 1px solid #e5e7eb;
114
- background-color: #f9fafb;
115
- border-radius: 0 0 12px 12px;
128
+ border-top: 1px solid ${colors.border};
129
+ background-color: ${colors.background};
116
130
  `,
117
131
  btn: css`
118
- padding: 8px 16px;
132
+ padding: 10px 18px;
119
133
  font-size: 14px;
120
134
  font-weight: 500;
121
- border-radius: 8px;
135
+ border-radius: 6px;
122
136
  cursor: pointer;
123
- transition: all 0.15s;
137
+ transition: all 0.15s ease;
138
+ letter-spacing: -0.01em;
124
139
  `,
125
140
  btnCancel: css`
126
- background-color: white;
127
- border: 1px solid #d1d5db;
128
- color: #374151;
141
+ background-color: ${colors.surface};
142
+ border: 1px solid ${colors.border};
143
+ color: ${colors.text};
129
144
 
130
145
  &:hover {
131
- background-color: #f9fafb;
146
+ background-color: ${colors.surfaceHover};
147
+ border-color: #d0d5dd;
132
148
  }
133
149
  `,
134
150
  btnConfirm: css`
135
- background-color: #9333ea;
136
- border: 1px solid #9333ea;
151
+ background-color: ${colors.primary};
152
+ border: 1px solid ${colors.primary};
137
153
  color: white;
138
154
 
139
155
  &:hover {
140
- background-color: #7c3aed;
156
+ background-color: ${colors.primaryHover};
157
+ border-color: ${colors.primaryHover};
141
158
  }
142
159
  `,
143
160
  btnDanger: css`
144
- background-color: #dc2626;
145
- border: 1px solid #dc2626;
161
+ background-color: ${colors.danger};
162
+ border: 1px solid ${colors.danger};
146
163
  color: white;
147
164
 
148
165
  &:hover {
149
- background-color: #b91c1c;
166
+ background-color: ${colors.dangerHover};
167
+ border-color: ${colors.dangerHover};
150
168
  }
151
169
  `
152
170
  };
@@ -190,6 +208,19 @@ function AlertModal({
190
208
 
191
209
  // src/components/StudioToolbar.tsx
192
210
  import { Fragment, jsx as jsx2, jsxs as jsxs2 } from "@emotion/react/jsx-runtime";
211
+ var colors2 = {
212
+ primary: "#635bff",
213
+ primaryHover: "#5851e5",
214
+ primaryLight: "#f0f0ff",
215
+ background: "#ffffff",
216
+ surface: "#ffffff",
217
+ surfaceHover: "#f6f9fc",
218
+ border: "#e3e8ee",
219
+ text: "#1a1f36",
220
+ textSecondary: "#697386",
221
+ danger: "#df1b41",
222
+ dangerLight: "#fff5f7"
223
+ };
193
224
  var spin = keyframes2`
194
225
  to { transform: rotate(360deg); }
195
226
  `;
@@ -199,97 +230,131 @@ var styles2 = {
199
230
  align-items: center;
200
231
  justify-content: space-between;
201
232
  padding: 12px 24px;
202
- background-color: #f9fafb;
203
- border-bottom: 1px solid #e5e7eb;
233
+ background-color: ${colors2.background};
234
+ border-bottom: 1px solid ${colors2.border};
204
235
  `,
205
236
  left: css2`
206
237
  display: flex;
207
238
  align-items: center;
208
- gap: 8px;
239
+ gap: 6px;
209
240
  `,
210
241
  right: css2`
211
242
  display: flex;
212
243
  align-items: center;
213
- gap: 16px;
244
+ gap: 12px;
214
245
  `,
215
246
  btn: css2`
216
- display: flex;
247
+ display: inline-flex;
217
248
  align-items: center;
218
- gap: 8px;
219
- padding: 8px 12px;
220
- border-radius: 8px;
221
- font-size: 14px;
249
+ gap: 6px;
250
+ padding: 6px 12px;
251
+ border-radius: 6px;
252
+ font-size: 13px;
222
253
  font-weight: 500;
223
- background: none;
224
- border: none;
254
+ background: ${colors2.surface};
255
+ border: 1px solid ${colors2.border};
225
256
  cursor: pointer;
226
- transition: background-color 0.15s;
257
+ transition: all 0.15s ease;
258
+ color: ${colors2.text};
259
+ letter-spacing: -0.01em;
260
+
261
+ &:hover:not(:disabled) {
262
+ background-color: ${colors2.surfaceHover};
263
+ border-color: #d0d5dd;
264
+ }
227
265
 
228
266
  &:disabled {
229
267
  cursor: not-allowed;
230
268
  opacity: 0.5;
231
269
  }
232
270
  `,
233
- btnDefault: css2`
234
- color: #374151;
271
+ btnPrimary: css2`
272
+ background: ${colors2.primary};
273
+ border-color: ${colors2.primary};
274
+ color: white;
235
275
 
236
276
  &:hover:not(:disabled) {
237
- background-color: white;
277
+ background: ${colors2.primaryHover};
278
+ border-color: ${colors2.primaryHover};
238
279
  }
239
280
  `,
240
281
  btnDanger: css2`
241
- color: #dc2626;
282
+ color: ${colors2.danger};
242
283
 
243
284
  &:hover:not(:disabled) {
244
- background-color: #fef2f2;
285
+ background-color: ${colors2.dangerLight};
286
+ border-color: ${colors2.danger};
287
+ }
288
+ `,
289
+ btnGhost: css2`
290
+ border-color: transparent;
291
+ background: transparent;
292
+
293
+ &:hover:not(:disabled) {
294
+ background-color: ${colors2.surfaceHover};
295
+ border-color: transparent;
245
296
  }
246
297
  `,
247
298
  icon: css2`
248
- width: 16px;
249
- height: 16px;
299
+ width: 14px;
300
+ height: 14px;
250
301
  `,
251
302
  iconSpin: css2`
252
303
  animation: ${spin} 1s linear infinite;
253
304
  `,
254
305
  selectionCount: css2`
255
- font-size: 14px;
256
- color: #4b5563;
306
+ font-size: 13px;
307
+ color: ${colors2.textSecondary};
308
+ display: flex;
309
+ align-items: center;
310
+ gap: 8px;
257
311
  `,
258
312
  clearBtn: css2`
259
- margin-left: 8px;
260
- color: #9333ea;
313
+ color: ${colors2.primary};
261
314
  background: none;
262
315
  border: none;
263
316
  cursor: pointer;
264
- font-size: 14px;
317
+ font-size: 13px;
318
+ font-weight: 500;
319
+ padding: 0;
265
320
 
266
321
  &:hover {
267
322
  text-decoration: underline;
268
323
  }
269
324
  `,
325
+ divider: css2`
326
+ width: 1px;
327
+ height: 20px;
328
+ background: ${colors2.border};
329
+ margin: 0 4px;
330
+ `,
270
331
  viewToggle: css2`
271
332
  display: flex;
272
333
  align-items: center;
273
- background-color: white;
274
- border: 1px solid #e5e7eb;
275
- border-radius: 8px;
276
- overflow: hidden;
334
+ background-color: ${colors2.surfaceHover};
335
+ border-radius: 6px;
336
+ padding: 2px;
277
337
  `,
278
338
  viewBtn: css2`
279
- padding: 8px;
280
- background: none;
339
+ padding: 6px 8px;
340
+ background: transparent;
281
341
  border: none;
342
+ border-radius: 4px;
282
343
  cursor: pointer;
283
- color: #6b7280;
284
- transition: all 0.15s;
344
+ color: ${colors2.textSecondary};
345
+ transition: all 0.15s ease;
346
+ display: flex;
347
+ align-items: center;
348
+ justify-content: center;
285
349
 
286
350
  &:hover {
287
- background-color: #f9fafb;
351
+ color: ${colors2.text};
288
352
  }
289
353
  `,
290
354
  viewBtnActive: css2`
291
- background-color: #f3e8ff;
292
- color: #7c3aed;
355
+ background-color: ${colors2.surface};
356
+ color: ${colors2.text};
357
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05);
293
358
  `
294
359
  };
295
360
  function StudioToolbar() {
@@ -418,50 +483,65 @@ function StudioToolbar() {
418
483
  ref: fileInputRef,
419
484
  type: "file",
420
485
  multiple: true,
421
- accept: "image/*",
486
+ accept: "image/*,video/*,audio/*,.pdf",
422
487
  onChange: handleFileChange,
423
488
  style: { display: "none" }
424
489
  }
425
490
  ),
426
491
  /* @__PURE__ */ jsxs2("div", { css: styles2.left, children: [
427
- /* @__PURE__ */ jsx2(
428
- ToolbarButton,
492
+ /* @__PURE__ */ jsxs2(
493
+ "button",
429
494
  {
495
+ css: [styles2.btn, styles2.btnPrimary],
430
496
  onClick: handleUpload,
431
- icon: "upload",
432
- label: uploading ? "Uploading..." : "Upload",
433
- disabled: uploading || isInImagesFolder
497
+ disabled: uploading || isInImagesFolder,
498
+ children: [
499
+ /* @__PURE__ */ jsx2(UploadIcon, {}),
500
+ uploading ? "Uploading..." : "Upload"
501
+ ]
434
502
  }
435
503
  ),
436
- /* @__PURE__ */ jsx2(
437
- ToolbarButton,
504
+ /* @__PURE__ */ jsx2("div", { css: styles2.divider }),
505
+ /* @__PURE__ */ jsxs2(
506
+ "button",
438
507
  {
508
+ css: [styles2.btn, styles2.btnGhost],
439
509
  onClick: handleReprocess,
440
- icon: "refresh",
441
- label: "Reprocess",
442
- disabled: !hasSelection
510
+ disabled: !hasSelection,
511
+ children: [
512
+ /* @__PURE__ */ jsx2(RefreshIcon, {}),
513
+ "Reprocess"
514
+ ]
443
515
  }
444
516
  ),
445
- /* @__PURE__ */ jsx2(
446
- ToolbarButton,
517
+ /* @__PURE__ */ jsxs2(
518
+ "button",
447
519
  {
520
+ css: [styles2.btn, styles2.btnGhost, styles2.btnDanger],
448
521
  onClick: handleDeleteClick,
449
- icon: "trash",
450
- label: "Delete",
451
522
  disabled: !hasSelection,
452
- variant: "danger"
523
+ children: [
524
+ /* @__PURE__ */ jsx2(TrashIcon, {}),
525
+ "Delete"
526
+ ]
453
527
  }
454
528
  ),
455
- /* @__PURE__ */ jsx2(
456
- ToolbarButton,
529
+ /* @__PURE__ */ jsxs2(
530
+ "button",
457
531
  {
532
+ css: [styles2.btn, styles2.btnGhost],
458
533
  onClick: handleSyncCdn,
459
- icon: "cloud",
460
- label: "Sync CDN",
461
- disabled: !hasSelection
534
+ disabled: !hasSelection,
535
+ children: [
536
+ /* @__PURE__ */ jsx2(CloudIcon, {}),
537
+ "Sync CDN"
538
+ ]
462
539
  }
463
540
  ),
464
- /* @__PURE__ */ jsx2(ToolbarButton, { onClick: handleScan, icon: "scan", label: "Scan" })
541
+ /* @__PURE__ */ jsxs2("button", { css: [styles2.btn, styles2.btnGhost], onClick: handleScan, children: [
542
+ /* @__PURE__ */ jsx2(ScanIcon, {}),
543
+ "Scan"
544
+ ] })
465
545
  ] }),
466
546
  /* @__PURE__ */ jsxs2("div", { css: styles2.right, children: [
467
547
  hasSelection && /* @__PURE__ */ jsxs2("span", { css: styles2.selectionCount, children: [
@@ -470,12 +550,11 @@ function StudioToolbar() {
470
550
  /* @__PURE__ */ jsx2("button", { css: styles2.clearBtn, onClick: clearSelection, children: "Clear" })
471
551
  ] }),
472
552
  /* @__PURE__ */ jsx2(
473
- ToolbarButton,
553
+ "button",
474
554
  {
555
+ css: [styles2.btn, styles2.btnGhost],
475
556
  onClick: handleRefresh,
476
- icon: "reload",
477
- label: "Refresh",
478
- spinning: refreshing
557
+ children: /* @__PURE__ */ jsx2(RefreshIcon, { spinning: refreshing })
479
558
  }
480
559
  ),
481
560
  /* @__PURE__ */ jsxs2("div", { css: styles2.viewToggle, children: [
@@ -502,44 +581,20 @@ function StudioToolbar() {
502
581
  ] })
503
582
  ] });
504
583
  }
505
- function ToolbarButton({
506
- onClick,
507
- icon,
508
- label,
509
- disabled,
510
- variant = "default",
511
- spinning
512
- }) {
513
- return /* @__PURE__ */ jsxs2(
514
- "button",
515
- {
516
- css: [styles2.btn, variant === "danger" ? styles2.btnDanger : styles2.btnDefault],
517
- onClick,
518
- disabled,
519
- children: [
520
- /* @__PURE__ */ jsx2(IconComponent, { icon, spinning }),
521
- label
522
- ]
523
- }
524
- );
584
+ function UploadIcon() {
585
+ return /* @__PURE__ */ jsx2("svg", { css: styles2.icon, fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx2("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-8l-4-4m0 0L8 8m4-4v12" }) });
525
586
  }
526
- function IconComponent({ icon, spinning }) {
527
- switch (icon) {
528
- case "upload":
529
- return /* @__PURE__ */ jsx2("svg", { css: styles2.icon, fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx2("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M4 16v1a3 3 0 003 3h10a3 3 0 003-3v-1m-4-8l-4-4m0 0L8 8m4-4v12" }) });
530
- case "refresh":
531
- return /* @__PURE__ */ jsx2("svg", { css: styles2.icon, fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx2("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15" }) });
532
- case "trash":
533
- return /* @__PURE__ */ jsx2("svg", { css: styles2.icon, fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx2("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16" }) });
534
- case "cloud":
535
- return /* @__PURE__ */ jsx2("svg", { css: styles2.icon, fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx2("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M7 16a4 4 0 01-.88-7.903A5 5 0 1115.9 6L16 6a5 5 0 011 9.9M15 13l-3-3m0 0l-3 3m3-3v12" }) });
536
- case "scan":
537
- return /* @__PURE__ */ jsx2("svg", { css: styles2.icon, fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx2("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z" }) });
538
- case "reload":
539
- return /* @__PURE__ */ jsx2("svg", { css: [styles2.icon, spinning && styles2.iconSpin], fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx2("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15" }) });
540
- default:
541
- return null;
542
- }
587
+ function RefreshIcon({ spinning }) {
588
+ return /* @__PURE__ */ jsx2("svg", { css: [styles2.icon, spinning && styles2.iconSpin], fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx2("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M4 4v5h.582m15.356 2A8.001 8.001 0 004.582 9m0 0H9m11 11v-5h-.581m0 0a8.003 8.003 0 01-15.357-2m15.357 2H15" }) });
589
+ }
590
+ function TrashIcon() {
591
+ return /* @__PURE__ */ jsx2("svg", { css: styles2.icon, fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx2("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M19 7l-.867 12.142A2 2 0 0116.138 21H7.862a2 2 0 01-1.995-1.858L5 7m5 4v6m4-6v6m1-10V4a1 1 0 00-1-1h-4a1 1 0 00-1 1v3M4 7h16" }) });
592
+ }
593
+ function CloudIcon() {
594
+ return /* @__PURE__ */ jsx2("svg", { css: styles2.icon, fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx2("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M7 16a4 4 0 01-.88-7.903A5 5 0 1115.9 6L16 6a5 5 0 011 9.9M15 13l-3-3m0 0l-3 3m3-3v12" }) });
595
+ }
596
+ function ScanIcon() {
597
+ return /* @__PURE__ */ jsx2("svg", { css: styles2.icon, fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx2("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M21 21l-6-6m2-5a7 7 0 11-14 0 7 7 0 0114 0z" }) });
543
598
  }
544
599
  function GridIcon() {
545
600
  return /* @__PURE__ */ jsx2("svg", { css: styles2.icon, fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx2("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M4 6a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2H6a2 2 0 01-2-2V6zM14 6a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2h-2a2 2 0 01-2-2V6zM4 16a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2H6a2 2 0 01-2-2v-2zM14 16a2 2 0 012-2h2a2 2 0 012 2v2a2 2 0 01-2 2h-2a2 2 0 01-2-2v-2z" }) });
@@ -551,67 +606,84 @@ function ListIcon() {
551
606
  // src/components/StudioBreadcrumb.tsx
552
607
  import { css as css3 } from "@emotion/react";
553
608
  import { jsx as jsx3, jsxs as jsxs3 } from "@emotion/react/jsx-runtime";
609
+ var colors3 = {
610
+ primary: "#635bff",
611
+ background: "#ffffff",
612
+ surface: "#ffffff",
613
+ surfaceHover: "#f6f9fc",
614
+ border: "#e3e8ee",
615
+ borderLight: "#eef1f6",
616
+ text: "#1a1f36",
617
+ textSecondary: "#697386",
618
+ textMuted: "#8792a2"
619
+ };
554
620
  var styles3 = {
555
621
  container: css3`
556
622
  display: flex;
557
623
  align-items: center;
558
624
  gap: 8px;
559
- padding: 8px 24px;
560
- background-color: white;
561
- border-bottom: 1px solid #f3f4f6;
625
+ padding: 10px 24px;
626
+ background-color: ${colors3.surface};
627
+ border-bottom: 1px solid ${colors3.borderLight};
562
628
  `,
563
629
  backBtn: css3`
564
- padding: 4px;
630
+ padding: 6px;
565
631
  background: none;
566
632
  border: none;
567
- border-radius: 4px;
633
+ border-radius: 6px;
568
634
  cursor: pointer;
569
- transition: background-color 0.15s;
635
+ transition: all 0.15s ease;
636
+ display: flex;
637
+ align-items: center;
638
+ justify-content: center;
570
639
 
571
640
  &:hover {
572
- background-color: #f3f4f6;
641
+ background-color: ${colors3.surfaceHover};
573
642
  }
574
643
  `,
575
644
  backIcon: css3`
576
645
  width: 16px;
577
646
  height: 16px;
578
- color: #6b7280;
647
+ color: ${colors3.textSecondary};
579
648
  `,
580
649
  nav: css3`
581
650
  display: flex;
582
651
  align-items: center;
583
- gap: 4px;
584
- font-size: 14px;
652
+ gap: 2px;
653
+ font-size: 13px;
585
654
  `,
586
655
  item: css3`
587
656
  display: flex;
588
657
  align-items: center;
589
- gap: 4px;
658
+ gap: 2px;
590
659
  `,
591
660
  separator: css3`
592
- color: #d1d5db;
661
+ color: ${colors3.textMuted};
662
+ margin: 0 2px;
593
663
  `,
594
664
  btn: css3`
595
- padding: 2px 4px;
665
+ padding: 4px 8px;
596
666
  background: none;
597
667
  border: none;
598
668
  border-radius: 4px;
599
669
  cursor: pointer;
600
- transition: all 0.15s;
670
+ transition: all 0.15s ease;
671
+ font-size: 13px;
672
+ letter-spacing: -0.01em;
601
673
 
602
674
  &:hover {
603
- background-color: #f3f4f6;
675
+ background-color: ${colors3.surfaceHover};
604
676
  }
605
677
  `,
606
678
  btnActive: css3`
607
- color: #111827;
608
- font-weight: 500;
679
+ color: ${colors3.text};
680
+ font-weight: 600;
609
681
  `,
610
682
  btnInactive: css3`
611
- color: #6b7280;
683
+ color: ${colors3.textSecondary};
612
684
 
613
685
  &:hover {
614
- color: #374151;
686
+ color: ${colors3.text};
615
687
  }
616
688
  `
617
689
  };
@@ -642,6 +714,21 @@ function StudioBreadcrumb() {
642
714
  import { useEffect, useState as useState2 } from "react";
643
715
  import { css as css4, keyframes as keyframes3 } from "@emotion/react";
644
716
  import { jsx as jsx4, jsxs as jsxs4 } from "@emotion/react/jsx-runtime";
717
+ var colors4 = {
718
+ primary: "#635bff",
719
+ primaryHover: "#5851e5",
720
+ primaryLight: "#f0f0ff",
721
+ background: "#f6f9fc",
722
+ surface: "#ffffff",
723
+ surfaceHover: "#f6f9fc",
724
+ border: "#e3e8ee",
725
+ borderLight: "#eef1f6",
726
+ text: "#1a1f36",
727
+ textSecondary: "#697386",
728
+ textMuted: "#8792a2",
729
+ success: "#0d7d4d",
730
+ successLight: "#e6f7ef"
731
+ };
645
732
  var spin2 = keyframes3`
646
733
  to { transform: rotate(360deg); }
647
734
  `;
@@ -656,9 +743,9 @@ var styles4 = {
656
743
  width: 32px;
657
744
  height: 32px;
658
745
  border-radius: 50%;
659
- border: 2px solid transparent;
660
- border-bottom-color: #9333ea;
661
- animation: ${spin2} 1s linear infinite;
746
+ border: 3px solid ${colors4.border};
747
+ border-top-color: ${colors4.primary};
748
+ animation: ${spin2} 0.8s linear infinite;
662
749
  `,
663
750
  empty: css4`
664
751
  display: flex;
@@ -666,21 +753,27 @@ var styles4 = {
666
753
  align-items: center;
667
754
  justify-content: center;
668
755
  height: 256px;
669
- color: #6b7280;
756
+ color: ${colors4.textSecondary};
670
757
  `,
671
758
  emptyIcon: css4`
672
759
  width: 48px;
673
760
  height: 48px;
674
761
  margin-bottom: 16px;
762
+ opacity: 0.5;
675
763
  `,
676
764
  emptyText: css4`
677
765
  font-size: 14px;
678
- margin: 0;
766
+ margin: 0 0 4px 0;
767
+
768
+ &:last-child {
769
+ color: ${colors4.textMuted};
770
+ font-size: 13px;
771
+ }
679
772
  `,
680
773
  grid: css4`
681
774
  display: grid;
682
775
  grid-template-columns: repeat(2, 1fr);
683
- gap: 16px;
776
+ gap: 12px;
684
777
 
685
778
  @media (min-width: 640px) { grid-template-columns: repeat(3, 1fr); }
686
779
  @media (min-width: 768px) { grid-template-columns: repeat(4, 1fr); }
@@ -690,23 +783,25 @@ var styles4 = {
690
783
  item: css4`
691
784
  position: relative;
692
785
  border-radius: 8px;
693
- border: 2px solid transparent;
786
+ border: 1px solid ${colors4.border};
694
787
  overflow: hidden;
695
788
  cursor: pointer;
696
- transition: all 0.15s;
697
- background-color: #f9fafb;
789
+ transition: all 0.15s ease;
790
+ background-color: ${colors4.surface};
698
791
  user-select: none;
792
+ box-shadow: 0 1px 2px rgba(0, 0, 0, 0.04);
699
793
 
700
794
  &:hover {
701
- border-color: #e5e7eb;
795
+ border-color: #d0d5dd;
796
+ box-shadow: 0 2px 4px rgba(0, 0, 0, 0.06);
702
797
  }
703
798
  `,
704
799
  itemSelected: css4`
705
- border-color: #a855f7;
706
- background-color: #faf5ff;
800
+ border-color: ${colors4.primary};
801
+ box-shadow: 0 0 0 1px ${colors4.primary};
707
802
 
708
803
  &:hover {
709
- border-color: #a855f7;
804
+ border-color: ${colors4.primary};
710
805
  }
711
806
  `,
712
807
  checkboxWrapper: css4`
@@ -720,7 +815,7 @@ var styles4 = {
720
815
  checkbox: css4`
721
816
  width: 16px;
722
817
  height: 16px;
723
- accent-color: #9333ea;
818
+ accent-color: ${colors4.primary};
724
819
  cursor: pointer;
725
820
  `,
726
821
  cdnBadge: css4`
@@ -728,11 +823,12 @@ var styles4 = {
728
823
  top: 8px;
729
824
  right: 8px;
730
825
  z-index: 10;
731
- background-color: #dcfce7;
732
- color: #15803d;
733
- font-size: 12px;
734
- padding: 2px 6px;
735
- border-radius: 9999px;
826
+ background-color: ${colors4.successLight};
827
+ color: ${colors4.success};
828
+ font-size: 11px;
829
+ font-weight: 500;
830
+ padding: 2px 8px;
831
+ border-radius: 4px;
736
832
  `,
737
833
  content: css4`
738
834
  aspect-ratio: 1;
@@ -740,16 +836,17 @@ var styles4 = {
740
836
  align-items: center;
741
837
  justify-content: center;
742
838
  padding: 16px;
839
+ background: ${colors4.background};
743
840
  `,
744
841
  folderIcon: css4`
745
- width: 64px;
746
- height: 64px;
747
- color: #facc15;
842
+ width: 56px;
843
+ height: 56px;
844
+ color: #f5a623;
748
845
  `,
749
846
  fileIcon: css4`
750
- width: 48px;
751
- height: 48px;
752
- color: #9ca3af;
847
+ width: 40px;
848
+ height: 40px;
849
+ color: ${colors4.textMuted};
753
850
  `,
754
851
  image: css4`
755
852
  max-width: 100%;
@@ -758,46 +855,77 @@ var styles4 = {
758
855
  border-radius: 4px;
759
856
  `,
760
857
  label: css4`
761
- padding: 6px 8px;
762
- background-color: white;
763
- border-top: 1px solid #e5e7eb;
858
+ padding: 10px 12px;
859
+ background-color: ${colors4.surface};
860
+ border-top: 1px solid ${colors4.borderLight};
861
+ `,
862
+ labelRow: css4`
863
+ display: flex;
864
+ align-items: center;
865
+ justify-content: space-between;
866
+ gap: 8px;
867
+ `,
868
+ labelText: css4`
869
+ flex: 1;
870
+ min-width: 0;
764
871
  `,
765
872
  name: css4`
766
- font-size: 12px;
767
- color: #374151;
873
+ font-size: 13px;
874
+ font-weight: 500;
875
+ color: ${colors4.text};
768
876
  white-space: nowrap;
769
877
  overflow: hidden;
770
878
  text-overflow: ellipsis;
771
879
  margin: 0;
880
+ letter-spacing: -0.01em;
772
881
  `,
773
882
  size: css4`
774
883
  font-size: 12px;
775
- color: #9ca3af;
776
- margin: 0;
884
+ color: ${colors4.textMuted};
885
+ margin: 2px 0 0 0;
886
+ `,
887
+ openBtn: css4`
888
+ flex-shrink: 0;
889
+ font-size: 12px;
890
+ font-weight: 500;
891
+ color: ${colors4.primary};
892
+ background: none;
893
+ border: none;
894
+ padding: 4px 8px;
895
+ cursor: pointer;
896
+ border-radius: 4px;
897
+ transition: background-color 0.15s ease;
898
+
899
+ &:hover {
900
+ background-color: ${colors4.primaryLight};
901
+ }
777
902
  `,
778
903
  selectAllRow: css4`
779
904
  display: flex;
780
905
  align-items: center;
781
- margin-bottom: 12px;
782
- padding-bottom: 12px;
783
- border-bottom: 1px solid #e5e7eb;
906
+ margin-bottom: 16px;
907
+ padding: 12px 16px;
908
+ background: ${colors4.surface};
909
+ border-radius: 8px;
910
+ border: 1px solid ${colors4.border};
784
911
  `,
785
912
  selectAllLabel: css4`
786
913
  display: flex;
787
914
  align-items: center;
788
- gap: 8px;
789
- font-size: 14px;
790
- color: #6b7280;
915
+ gap: 10px;
916
+ font-size: 13px;
917
+ font-weight: 500;
918
+ color: ${colors4.textSecondary};
791
919
  cursor: pointer;
792
920
 
793
921
  &:hover {
794
- color: #374151;
922
+ color: ${colors4.text};
795
923
  }
796
924
  `,
797
925
  selectAllCheckbox: css4`
798
926
  width: 16px;
799
927
  height: 16px;
800
- accent-color: #9333ea;
928
+ accent-color: ${colors4.primary};
801
929
  `
802
930
  };
803
931
  function StudioFileGrid() {
@@ -842,7 +970,7 @@ function StudioFileGrid() {
842
970
  toggleSelection(item.path);
843
971
  }
844
972
  };
845
- const handleItemDoubleClick = (item) => {
973
+ const handleOpenFolder = (item) => {
846
974
  if (item.type === "folder") {
847
975
  setCurrentPath(item.path);
848
976
  }
@@ -880,20 +1008,19 @@ function StudioFileGrid() {
880
1008
  item,
881
1009
  isSelected: selectedItems.has(item.path),
882
1010
  onClick: (e) => handleItemClick(item, e),
883
- onDoubleClick: () => handleItemDoubleClick(item)
1011
+ onOpen: () => handleOpenFolder(item)
884
1012
  },
885
1013
  item.path
886
1014
  )) })
887
1015
  ] });
888
1016
  }
889
- function GridItem({ item, isSelected, onClick, onDoubleClick }) {
1017
+ function GridItem({ item, isSelected, onClick, onOpen }) {
890
1018
  const isFolder = item.type === "folder";
891
1019
  return /* @__PURE__ */ jsxs4(
892
1020
  "div",
893
1021
  {
894
1022
  css: [styles4.item, isSelected && styles4.itemSelected],
895
1023
  onClick,
896
- onDoubleClick,
897
1024
  children: [
898
1025
  /* @__PURE__ */ jsx4(
899
1026
  "div",
@@ -921,14 +1048,27 @@ function GridItem({ item, isSelected, onClick, onDoubleClick }) {
921
1048
  loading: "lazy"
922
1049
  }
923
1050
  ) : /* @__PURE__ */ jsx4("svg", { css: styles4.fileIcon, fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx4("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 1.5, d: "M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z" }) }) }),
924
- /* @__PURE__ */ jsxs4("div", { css: styles4.label, children: [
925
- /* @__PURE__ */ jsx4("p", { css: styles4.name, title: item.name, children: item.name }),
926
- isFolder ? /* @__PURE__ */ jsxs4("p", { css: styles4.size, children: [
927
- item.fileCount !== void 0 ? `${item.fileCount} files` : "",
928
- item.fileCount !== void 0 && item.totalSize !== void 0 ? " \xB7 " : "",
929
- item.totalSize !== void 0 ? formatFileSize(item.totalSize) : ""
930
- ] }) : item.size !== void 0 && /* @__PURE__ */ jsx4("p", { css: styles4.size, children: formatFileSize(item.size) })
931
- ] })
1051
+ /* @__PURE__ */ jsx4("div", { css: styles4.label, children: /* @__PURE__ */ jsxs4("div", { css: styles4.labelRow, children: [
1052
+ /* @__PURE__ */ jsxs4("div", { css: styles4.labelText, children: [
1053
+ /* @__PURE__ */ jsx4("p", { css: styles4.name, title: item.name, children: item.name }),
1054
+ isFolder ? /* @__PURE__ */ jsxs4("p", { css: styles4.size, children: [
1055
+ item.fileCount !== void 0 ? `${item.fileCount} files` : "",
1056
+ item.fileCount !== void 0 && item.totalSize !== void 0 ? " \xB7 " : "",
1057
+ item.totalSize !== void 0 ? formatFileSize(item.totalSize) : ""
1058
+ ] }) : item.size !== void 0 && /* @__PURE__ */ jsx4("p", { css: styles4.size, children: formatFileSize(item.size) })
1059
+ ] }),
1060
+ isFolder && /* @__PURE__ */ jsx4(
1061
+ "button",
1062
+ {
1063
+ css: styles4.openBtn,
1064
+ onClick: (e) => {
1065
+ e.stopPropagation();
1066
+ onOpen();
1067
+ },
1068
+ children: "Open"
1069
+ }
1070
+ )
1071
+ ] }) })
932
1072
  ]
933
1073
  }
934
1074
  );
@@ -943,6 +1083,19 @@ function formatFileSize(bytes) {
943
1083
  import { useEffect as useEffect2, useState as useState3 } from "react";
944
1084
  import { css as css5, keyframes as keyframes4 } from "@emotion/react";
945
1085
  import { jsx as jsx5, jsxs as jsxs5 } from "@emotion/react/jsx-runtime";
1086
+ var colors5 = {
1087
+ primary: "#635bff",
1088
+ primaryLight: "#f0f0ff",
1089
+ background: "#f6f9fc",
1090
+ surface: "#ffffff",
1091
+ surfaceHover: "#f6f9fc",
1092
+ border: "#e3e8ee",
1093
+ borderLight: "#eef1f6",
1094
+ text: "#1a1f36",
1095
+ textSecondary: "#697386",
1096
+ textMuted: "#8792a2",
1097
+ success: "#0d7d4d"
1098
+ };
946
1099
  var spin3 = keyframes4`
947
1100
  to { transform: rotate(360deg); }
948
1101
  `;
@@ -957,9 +1110,9 @@ var styles5 = {
957
1110
  width: 32px;
958
1111
  height: 32px;
959
1112
  border-radius: 50%;
960
- border: 2px solid transparent;
961
- border-bottom-color: #9333ea;
962
- animation: ${spin3} 1s linear infinite;
1113
+ border: 3px solid ${colors5.border};
1114
+ border-top-color: ${colors5.primary};
1115
+ animation: ${spin3} 0.8s linear infinite;
963
1116
  `,
964
1117
  empty: css5`
965
1118
  display: flex;
@@ -967,7 +1120,13 @@ var styles5 = {
967
1120
  align-items: center;
968
1121
  justify-content: center;
969
1122
  height: 256px;
970
- color: #6b7280;
1123
+ color: ${colors5.textSecondary};
1124
+ `,
1125
+ tableWrapper: css5`
1126
+ background: ${colors5.surface};
1127
+ border-radius: 8px;
1128
+ border: 1px solid ${colors5.border};
1129
+ overflow: hidden;
971
1130
  `,
972
1131
  table: css5`
973
1132
  width: 100%;
@@ -975,15 +1134,17 @@ var styles5 = {
975
1134
  `,
976
1135
  th: css5`
977
1136
  text-align: left;
978
- font-size: 12px;
979
- color: #6b7280;
1137
+ font-size: 11px;
1138
+ color: ${colors5.textMuted};
980
1139
  text-transform: uppercase;
981
1140
  letter-spacing: 0.05em;
982
- padding-bottom: 8px;
983
- font-weight: normal;
1141
+ padding: 12px 16px;
1142
+ font-weight: 600;
1143
+ background: ${colors5.background};
1144
+ border-bottom: 1px solid ${colors5.border};
984
1145
  `,
985
1146
  thCheckbox: css5`
986
- width: 32px;
1147
+ width: 48px;
987
1148
  `,
988
1149
  thSize: css5`
989
1150
  width: 96px;
@@ -994,83 +1155,105 @@ var styles5 = {
994
1155
  thCdn: css5`
995
1156
  width: 96px;
996
1157
  `,
997
- tbody: css5`
998
- border-top: 1px solid #f3f4f6;
999
- `,
1158
+ tbody: css5``,
1000
1159
  row: css5`
1001
1160
  cursor: pointer;
1002
- transition: background-color 0.15s;
1161
+ transition: background-color 0.15s ease;
1003
1162
  user-select: none;
1004
1163
 
1005
1164
  &:hover {
1006
- background-color: #f9fafb;
1165
+ background-color: ${colors5.surfaceHover};
1166
+ }
1167
+
1168
+ &:not(:last-child) td {
1169
+ border-bottom: 1px solid ${colors5.borderLight};
1007
1170
  }
1008
1171
  `,
1009
1172
  rowSelected: css5`
1010
- background-color: #faf5ff;
1173
+ background-color: ${colors5.primaryLight};
1011
1174
 
1012
1175
  &:hover {
1013
- background-color: #faf5ff;
1176
+ background-color: ${colors5.primaryLight};
1014
1177
  }
1015
1178
  `,
1016
1179
  td: css5`
1017
- padding: 8px 0;
1018
- border-bottom: 1px solid #f3f4f6;
1180
+ padding: 12px 16px;
1019
1181
  `,
1020
1182
  checkboxCell: css5`
1021
- padding: 8px 12px;
1183
+ padding: 12px 16px;
1022
1184
  cursor: pointer;
1023
1185
  `,
1024
1186
  checkbox: css5`
1025
1187
  width: 16px;
1026
1188
  height: 16px;
1027
- accent-color: #9333ea;
1189
+ accent-color: ${colors5.primary};
1028
1190
  cursor: pointer;
1029
1191
  `,
1030
1192
  nameCell: css5`
1031
1193
  display: flex;
1032
1194
  align-items: center;
1033
- gap: 8px;
1195
+ gap: 12px;
1034
1196
  `,
1035
1197
  folderIcon: css5`
1036
1198
  width: 20px;
1037
1199
  height: 20px;
1038
- color: #facc15;
1200
+ color: #f5a623;
1201
+ flex-shrink: 0;
1039
1202
  `,
1040
1203
  fileIcon: css5`
1041
1204
  width: 20px;
1042
1205
  height: 20px;
1043
- color: #9ca3af;
1206
+ color: ${colors5.textMuted};
1207
+ flex-shrink: 0;
1044
1208
  `,
1045
1209
  thumbnail: css5`
1046
- width: 32px;
1047
- height: 32px;
1210
+ width: 36px;
1211
+ height: 36px;
1048
1212
  object-fit: cover;
1049
- border-radius: 4px;
1213
+ border-radius: 6px;
1050
1214
  flex-shrink: 0;
1215
+ border: 1px solid ${colors5.borderLight};
1051
1216
  `,
1052
1217
  name: css5`
1053
1218
  font-size: 14px;
1054
- color: #111827;
1219
+ font-weight: 500;
1220
+ color: ${colors5.text};
1221
+ letter-spacing: -0.01em;
1055
1222
  `,
1056
1223
  meta: css5`
1057
- font-size: 14px;
1058
- color: #6b7280;
1224
+ font-size: 13px;
1225
+ color: ${colors5.textSecondary};
1059
1226
  `,
1060
1227
  cdnBadge: css5`
1061
1228
  display: inline-flex;
1062
1229
  align-items: center;
1063
1230
  gap: 4px;
1064
1231
  font-size: 12px;
1065
- color: #15803d;
1232
+ font-weight: 500;
1233
+ color: ${colors5.success};
1066
1234
  `,
1067
1235
  cdnIcon: css5`
1068
1236
  width: 12px;
1069
1237
  height: 12px;
1070
1238
  `,
1071
1239
  cdnEmpty: css5`
1240
+ font-size: 13px;
1241
+ color: ${colors5.textMuted};
1242
+ `,
1243
+ openBtn: css5`
1072
1244
  font-size: 12px;
1073
- color: #9ca3af;
1245
+ font-weight: 500;
1246
+ color: ${colors5.primary};
1247
+ background: none;
1248
+ border: none;
1249
+ padding: 4px 10px;
1250
+ cursor: pointer;
1251
+ border-radius: 4px;
1252
+ transition: background-color 0.15s ease;
1253
+
1254
+ &:hover {
1255
+ background-color: ${colors5.primaryLight};
1256
+ }
1074
1257
  `
1075
1258
  };
1076
1259
  function StudioFileList() {
@@ -1111,7 +1294,7 @@ function StudioFileList() {
1111
1294
  toggleSelection(item.path);
1112
1295
  }
1113
1296
  };
1114
- const handleItemDoubleClick = (item) => {
1297
+ const handleOpenFolder = (item) => {
1115
1298
  if (item.type === "folder") {
1116
1299
  setCurrentPath(item.path);
1117
1300
  }
@@ -1150,20 +1333,19 @@ function StudioFileList() {
1150
1333
  item,
1151
1334
  isSelected: selectedItems.has(item.path),
1152
1335
  onClick: (e) => handleItemClick(item, e),
1153
- onDoubleClick: () => handleItemDoubleClick(item)
1336
+ onOpen: () => handleOpenFolder(item)
1154
1337
  },
1155
1338
  item.path
1156
1339
  )) })
1157
1340
  ] });
1158
1341
  }
1159
- function ListRow({ item, isSelected, onClick, onDoubleClick }) {
1342
+ function ListRow({ item, isSelected, onClick, onOpen }) {
1160
1343
  const isFolder = item.type === "folder";
1161
1344
  return /* @__PURE__ */ jsxs5(
1162
1345
  "tr",
1163
1346
  {
1164
1347
  css: [styles5.row, isSelected && styles5.rowSelected],
1165
1348
  onClick,
1166
- onDoubleClick,
1167
1349
  children: [
1168
1350
  /* @__PURE__ */ jsx5(
1169
1351
  "td",
@@ -1183,7 +1365,18 @@ function ListRow({ item, isSelected, onClick, onDoubleClick }) {
1183
1365
  ),
1184
1366
  /* @__PURE__ */ jsx5("td", { css: styles5.td, children: /* @__PURE__ */ jsxs5("div", { css: styles5.nameCell, children: [
1185
1367
  isFolder ? /* @__PURE__ */ jsx5("svg", { css: styles5.folderIcon, fill: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx5("path", { d: "M10 4H4a2 2 0 00-2 2v12a2 2 0 002 2h16a2 2 0 002-2V8a2 2 0 00-2-2h-8l-2-2z" }) }) : item.thumbnail ? /* @__PURE__ */ jsx5("img", { css: styles5.thumbnail, src: item.thumbnail, alt: item.name, loading: "lazy" }) : /* @__PURE__ */ jsx5("svg", { css: styles5.fileIcon, fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx5("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 1.5, d: "M7 21h10a2 2 0 002-2V9.414a1 1 0 00-.293-.707l-5.414-5.414A1 1 0 0012.586 3H7a2 2 0 00-2 2v14a2 2 0 002 2z" }) }),
1186
- /* @__PURE__ */ jsx5("span", { css: styles5.name, children: item.name })
1368
+ /* @__PURE__ */ jsx5("span", { css: styles5.name, children: item.name }),
1369
+ isFolder && /* @__PURE__ */ jsx5(
1370
+ "button",
1371
+ {
1372
+ css: styles5.openBtn,
1373
+ onClick: (e) => {
1374
+ e.stopPropagation();
1375
+ onOpen();
1376
+ },
1377
+ children: "Open"
1378
+ }
1379
+ )
1187
1380
  ] }) }),
1188
1381
  /* @__PURE__ */ jsx5("td", { css: [styles5.td, styles5.meta], children: isFolder ? item.fileCount !== void 0 ? `${item.fileCount} files` : "--" : item.size !== void 0 ? formatFileSize2(item.size) : "--" }),
1189
1382
  /* @__PURE__ */ jsx5("td", { css: [styles5.td, styles5.meta], children: isFolder ? item.totalSize !== void 0 ? formatFileSize2(item.totalSize) : "--" : item.dimensions ? `${item.dimensions.width}x${item.dimensions.height}` : "--" }),
@@ -1215,70 +1408,94 @@ function isVideoFile(filename) {
1215
1408
  const ext = filename.toLowerCase().substring(filename.lastIndexOf("."));
1216
1409
  return VIDEO_EXTENSIONS.includes(ext);
1217
1410
  }
1411
+ var colors6 = {
1412
+ primary: "#635bff",
1413
+ primaryHover: "#5851e5",
1414
+ primaryLight: "#f0f0ff",
1415
+ background: "#f6f9fc",
1416
+ surface: "#ffffff",
1417
+ surfaceHover: "#f6f9fc",
1418
+ border: "#e3e8ee",
1419
+ borderLight: "#eef1f6",
1420
+ text: "#1a1f36",
1421
+ textSecondary: "#697386",
1422
+ textMuted: "#8792a2",
1423
+ success: "#0d7d4d",
1424
+ successLight: "#e6f7ef",
1425
+ danger: "#df1b41",
1426
+ dangerLight: "#fff5f7"
1427
+ };
1218
1428
  var styles6 = {
1219
1429
  panel: css6`
1220
1430
  width: 320px;
1221
- border-left: 1px solid #e5e7eb;
1222
- background-color: #f9fafb;
1223
- padding: 16px;
1431
+ border-left: 1px solid ${colors6.border};
1432
+ background-color: ${colors6.surface};
1433
+ padding: 20px;
1224
1434
  overflow: auto;
1225
1435
  `,
1226
1436
  title: css6`
1227
- font-size: 14px;
1228
- font-weight: 500;
1229
- color: #111827;
1437
+ font-size: 13px;
1438
+ font-weight: 600;
1439
+ color: ${colors6.textSecondary};
1440
+ text-transform: uppercase;
1441
+ letter-spacing: 0.05em;
1230
1442
  margin: 0 0 16px 0;
1231
1443
  `,
1232
1444
  imageContainer: css6`
1233
- background-color: white;
1445
+ background-color: ${colors6.background};
1234
1446
  border-radius: 8px;
1235
- border: 1px solid #e5e7eb;
1236
- padding: 8px;
1237
- margin-bottom: 16px;
1447
+ border: 1px solid ${colors6.border};
1448
+ padding: 12px;
1449
+ margin-bottom: 20px;
1238
1450
  `,
1239
1451
  image: css6`
1240
1452
  width: 100%;
1241
1453
  height: auto;
1242
- border-radius: 4px;
1454
+ border-radius: 6px;
1243
1455
  `,
1244
1456
  info: css6`
1245
1457
  display: flex;
1246
1458
  flex-direction: column;
1247
- gap: 12px;
1459
+ gap: 10px;
1248
1460
  `,
1249
1461
  row: css6`
1250
1462
  display: flex;
1251
1463
  justify-content: space-between;
1252
- font-size: 12px;
1464
+ font-size: 13px;
1253
1465
  `,
1254
1466
  label: css6`
1255
- color: #6b7280;
1467
+ color: ${colors6.textSecondary};
1256
1468
  `,
1257
1469
  value: css6`
1258
- color: #111827;
1470
+ color: ${colors6.text};
1471
+ font-weight: 500;
1259
1472
  `,
1260
1473
  valueTruncate: css6`
1261
- max-width: 128px;
1474
+ max-width: 140px;
1262
1475
  white-space: nowrap;
1263
1476
  overflow: hidden;
1264
1477
  text-overflow: ellipsis;
1265
1478
  `,
1266
1479
  section: css6`
1267
- padding-top: 8px;
1268
- border-top: 1px solid #e5e7eb;
1480
+ padding-top: 12px;
1481
+ margin-top: 4px;
1482
+ border-top: 1px solid ${colors6.borderLight};
1269
1483
  `,
1270
1484
  sectionTitle: css6`
1271
- font-size: 12px;
1272
- font-weight: 500;
1273
- color: #6b7280;
1274
- margin: 0 0 8px 0;
1485
+ font-size: 11px;
1486
+ font-weight: 600;
1487
+ color: ${colors6.textMuted};
1488
+ text-transform: uppercase;
1489
+ letter-spacing: 0.05em;
1490
+ margin: 0 0 10px 0;
1275
1491
  `,
1276
1492
  cdnStatus: css6`
1277
1493
  display: flex;
1278
1494
  align-items: center;
1279
1495
  gap: 8px;
1280
- font-size: 12px;
1281
- color: #16a34a;
1496
+ font-size: 13px;
1497
+ color: ${colors6.success};
1498
+ font-weight: 500;
1282
1499
  `,
1283
1500
  cdnIcon: css6`
1284
1501
  width: 16px;
@@ -1286,8 +1503,9 @@ var styles6 = {
1286
1503
  `,
1287
1504
  copyBtn: css6`
1288
1505
  margin-top: 8px;
1289
- font-size: 12px;
1290
- color: #9333ea;
1506
+ font-size: 13px;
1507
+ font-weight: 500;
1508
+ color: ${colors6.primary};
1291
1509
  background: none;
1292
1510
  border: none;
1293
1511
  cursor: pointer;
@@ -1300,17 +1518,20 @@ var styles6 = {
1300
1518
  colorSwatch: css6`
1301
1519
  margin-top: 8px;
1302
1520
  height: 32px;
1303
- border-radius: 4px;
1521
+ border-radius: 6px;
1522
+ border: 1px solid ${colors6.border};
1304
1523
  `,
1305
1524
  emptyState: css6`
1306
1525
  display: flex;
1526
+ flex-direction: column;
1307
1527
  align-items: center;
1308
1528
  justify-content: center;
1309
1529
  height: 200px;
1530
+ text-align: center;
1310
1531
  `,
1311
1532
  emptyText: css6`
1312
- font-size: 14px;
1313
- color: #9ca3af;
1533
+ font-size: 13px;
1534
+ color: ${colors6.textMuted};
1314
1535
  margin: 0;
1315
1536
  `,
1316
1537
  filePlaceholder: css6`
@@ -1318,50 +1539,55 @@ var styles6 = {
1318
1539
  align-items: center;
1319
1540
  justify-content: center;
1320
1541
  height: 120px;
1542
+ background: ${colors6.background};
1543
+ border-radius: 6px;
1321
1544
  `,
1322
1545
  fileIcon: css6`
1323
- width: 64px;
1324
- height: 64px;
1325
- color: #9ca3af;
1546
+ width: 56px;
1547
+ height: 56px;
1548
+ color: ${colors6.textMuted};
1326
1549
  `,
1327
1550
  folderIcon: css6`
1328
- width: 64px;
1329
- height: 64px;
1330
- color: #facc15;
1551
+ width: 56px;
1552
+ height: 56px;
1553
+ color: #f5a623;
1331
1554
  `,
1332
1555
  video: css6`
1333
1556
  width: 100%;
1334
1557
  height: auto;
1335
- border-radius: 4px;
1558
+ border-radius: 6px;
1336
1559
  `,
1337
1560
  actions: css6`
1338
- margin-top: 16px;
1339
- padding-top: 16px;
1340
- border-top: 1px solid #e5e7eb;
1561
+ margin-top: 20px;
1562
+ padding-top: 20px;
1563
+ border-top: 1px solid ${colors6.border};
1341
1564
  display: flex;
1342
1565
  flex-direction: column;
1343
1566
  gap: 8px;
1344
1567
  `,
1345
1568
  actionBtn: css6`
1346
1569
  width: 100%;
1347
- padding: 8px 12px;
1348
- font-size: 14px;
1349
- background-color: white;
1350
- border: 1px solid #e5e7eb;
1351
- border-radius: 8px;
1570
+ padding: 10px 14px;
1571
+ font-size: 13px;
1572
+ font-weight: 500;
1573
+ background-color: ${colors6.surface};
1574
+ border: 1px solid ${colors6.border};
1575
+ border-radius: 6px;
1352
1576
  cursor: pointer;
1353
- transition: background-color 0.15s;
1354
- color: #374151;
1577
+ transition: all 0.15s ease;
1578
+ color: ${colors6.text};
1355
1579
 
1356
1580
  &:hover {
1357
- background-color: #f9fafb;
1581
+ background-color: ${colors6.surfaceHover};
1582
+ border-color: #d0d5dd;
1358
1583
  }
1359
1584
  `,
1360
1585
  actionBtnDanger: css6`
1361
- color: #dc2626;
1586
+ color: ${colors6.danger};
1362
1587
 
1363
1588
  &:hover {
1364
- background-color: #fef2f2;
1589
+ background-color: ${colors6.dangerLight};
1590
+ border-color: ${colors6.danger};
1365
1591
  }
1366
1592
  `
1367
1593
  };
@@ -1789,25 +2015,42 @@ function SettingsPanel({ onClose }) {
1789
2015
 
1790
2016
  // src/components/StudioUI.tsx
1791
2017
  import { jsx as jsx8, jsxs as jsxs8 } from "@emotion/react/jsx-runtime";
2018
+ var colors7 = {
2019
+ primary: "#635bff",
2020
+ primaryHover: "#5851e5",
2021
+ background: "#f6f9fc",
2022
+ surface: "#ffffff",
2023
+ surfaceHover: "#f6f9fc",
2024
+ border: "#e3e8ee",
2025
+ borderLight: "#eef1f6",
2026
+ text: "#1a1f36",
2027
+ textSecondary: "#697386",
2028
+ textMuted: "#8792a2"
2029
+ };
1792
2030
  var styles8 = {
1793
2031
  container: css8`
1794
2032
  display: flex;
1795
2033
  flex-direction: column;
1796
2034
  height: 100%;
1797
- font-family: system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
2035
+ font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Ubuntu, sans-serif;
2036
+ background: ${colors7.background};
2037
+ -webkit-font-smoothing: antialiased;
2038
+ -moz-osx-font-smoothing: grayscale;
1798
2039
  `,
1799
2040
  header: css8`
1800
2041
  display: flex;
1801
2042
  align-items: center;
1802
2043
  justify-content: space-between;
1803
2044
  padding: 16px 24px;
1804
- border-bottom: 1px solid #e5e7eb;
2045
+ background: ${colors7.surface};
2046
+ border-bottom: 1px solid ${colors7.border};
1805
2047
  `,
1806
2048
  title: css8`
1807
- font-size: 20px;
2049
+ font-size: 17px;
1808
2050
  font-weight: 600;
1809
- color: #111827;
2051
+ color: ${colors7.text};
1810
2052
  margin: 0;
2053
+ letter-spacing: -0.02em;
1811
2054
  `,
1812
2055
  headerActions: css8`
1813
2056
  display: flex;
@@ -1818,18 +2061,21 @@ var styles8 = {
1818
2061
  padding: 8px;
1819
2062
  background: none;
1820
2063
  border: none;
1821
- border-radius: 8px;
2064
+ border-radius: 6px;
1822
2065
  cursor: pointer;
1823
- transition: background-color 0.15s;
2066
+ transition: all 0.15s ease;
2067
+ display: flex;
2068
+ align-items: center;
2069
+ justify-content: center;
1824
2070
 
1825
2071
  &:hover {
1826
- background-color: #f3f4f6;
2072
+ background-color: ${colors7.surfaceHover};
1827
2073
  }
1828
2074
  `,
1829
2075
  closeIcon: css8`
1830
- width: 20px;
1831
- height: 20px;
1832
- color: #6b7280;
2076
+ width: 18px;
2077
+ height: 18px;
2078
+ color: ${colors7.textSecondary};
1833
2079
  `,
1834
2080
  content: css8`
1835
2081
  flex: 1;
@@ -1840,7 +2086,7 @@ var styles8 = {
1840
2086
  flex: 1;
1841
2087
  min-width: 0;
1842
2088
  overflow: auto;
1843
- padding: 16px;
2089
+ padding: 20px 24px;
1844
2090
  `
1845
2091
  };
1846
2092
  function StudioUI({ onClose }) {
@@ -1986,4 +2232,4 @@ export {
1986
2232
  StudioUI,
1987
2233
  StudioUI_default as default
1988
2234
  };
1989
- //# sourceMappingURL=StudioUI-ZCQOVAGT.mjs.map
2235
+ //# sourceMappingURL=StudioUI-WRFD73YR.mjs.map