@gallop.software/studio 1.5.0 → 1.5.2
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/{StudioUI-MZENRXN3.js → StudioUI-2UVUYHHA.js} +180 -34
- package/dist/StudioUI-2UVUYHHA.js.map +1 -0
- package/dist/{StudioUI-7QQIKNTF.mjs → StudioUI-74IZDKCP.mjs} +174 -28
- package/dist/StudioUI-74IZDKCP.mjs.map +1 -0
- package/dist/{chunk-VQJAJVAQ.mjs → chunk-FOKLOMKO.mjs} +1 -1
- package/dist/chunk-FOKLOMKO.mjs.map +1 -0
- package/dist/{chunk-WOHZ4LYG.js → chunk-X6F6IFY3.js} +1 -1
- package/dist/chunk-X6F6IFY3.js.map +1 -0
- package/dist/handlers/index.js +147 -92
- package/dist/handlers/index.js.map +1 -1
- package/dist/handlers/index.mjs +114 -59
- package/dist/handlers/index.mjs.map +1 -1
- package/dist/index.d.mts +2 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +3 -3
- package/dist/index.mjs +2 -2
- package/package.json +1 -1
- package/dist/StudioUI-7QQIKNTF.mjs.map +0 -1
- package/dist/StudioUI-MZENRXN3.js.map +0 -1
- package/dist/chunk-VQJAJVAQ.mjs.map +0 -1
- package/dist/chunk-WOHZ4LYG.js.map +0 -1
|
@@ -3120,6 +3120,34 @@ var styles6 = {
|
|
|
3120
3120
|
color: #f59e0b;
|
|
3121
3121
|
transform: translateY(1px);
|
|
3122
3122
|
`,
|
|
3123
|
+
folderStats: css6`
|
|
3124
|
+
display: flex;
|
|
3125
|
+
align-items: center;
|
|
3126
|
+
gap: 8px;
|
|
3127
|
+
margin-left: auto;
|
|
3128
|
+
padding-left: 8px;
|
|
3129
|
+
`,
|
|
3130
|
+
folderStat: css6`
|
|
3131
|
+
display: flex;
|
|
3132
|
+
align-items: center;
|
|
3133
|
+
gap: 3px;
|
|
3134
|
+
font-size: 11px;
|
|
3135
|
+
color: ${colors.textSecondary};
|
|
3136
|
+
`,
|
|
3137
|
+
folderStatIcon: css6`
|
|
3138
|
+
width: 14px;
|
|
3139
|
+
height: 14px;
|
|
3140
|
+
`,
|
|
3141
|
+
folderStatIconCloud: css6`
|
|
3142
|
+
width: 14px;
|
|
3143
|
+
height: 14px;
|
|
3144
|
+
color: #f59e0b;
|
|
3145
|
+
`,
|
|
3146
|
+
folderStatIconLocal: css6`
|
|
3147
|
+
width: 14px;
|
|
3148
|
+
height: 14px;
|
|
3149
|
+
color: ${colors.textSecondary};
|
|
3150
|
+
`,
|
|
3123
3151
|
globeIcon: css6`
|
|
3124
3152
|
width: 18px;
|
|
3125
3153
|
height: 18px;
|
|
@@ -3389,14 +3417,26 @@ function GridItem({ item, isSelected, onClick, onOpen, onGenerateThumbnail }) {
|
|
|
3389
3417
|
}
|
|
3390
3418
|
) : /* @__PURE__ */ jsx6("svg", { css: styles6.fileIcon, fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx6("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" }) })
|
|
3391
3419
|
] }),
|
|
3392
|
-
/* @__PURE__ */ jsx6("div", { css: styles6.label, children: /* @__PURE__ */
|
|
3393
|
-
/* @__PURE__ */
|
|
3394
|
-
|
|
3395
|
-
|
|
3396
|
-
|
|
3397
|
-
|
|
3398
|
-
|
|
3399
|
-
|
|
3420
|
+
/* @__PURE__ */ jsx6("div", { css: styles6.label, children: /* @__PURE__ */ jsxs6("div", { css: styles6.labelRow, children: [
|
|
3421
|
+
/* @__PURE__ */ jsxs6("div", { css: styles6.labelText, children: [
|
|
3422
|
+
/* @__PURE__ */ jsx6("p", { css: styles6.name, title: item.name, children: item.name }),
|
|
3423
|
+
isFolder ? /* @__PURE__ */ jsxs6("p", { css: styles6.size, children: [
|
|
3424
|
+
item.fileCount !== void 0 ? `${item.fileCount} files` : "",
|
|
3425
|
+
item.fileCount !== void 0 && item.totalSize !== void 0 ? " \xB7 " : "",
|
|
3426
|
+
item.totalSize !== void 0 ? formatFileSize(item.totalSize) : ""
|
|
3427
|
+
] }) : item.size !== void 0 && /* @__PURE__ */ jsx6("p", { css: styles6.size, children: formatFileSize(item.size) })
|
|
3428
|
+
] }),
|
|
3429
|
+
isFolder && (item.localCount || item.cloudCount) && /* @__PURE__ */ jsxs6("div", { css: styles6.folderStats, children: [
|
|
3430
|
+
item.localCount !== void 0 && item.localCount > 0 && /* @__PURE__ */ jsxs6("span", { css: styles6.folderStat, title: `${item.localCount} local`, children: [
|
|
3431
|
+
/* @__PURE__ */ jsx6("svg", { css: styles6.folderStatIconLocal, fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx6("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z" }) }),
|
|
3432
|
+
item.localCount
|
|
3433
|
+
] }),
|
|
3434
|
+
item.cloudCount !== void 0 && item.cloudCount > 0 && /* @__PURE__ */ jsxs6("span", { css: styles6.folderStat, title: `${item.cloudCount} in cloud`, children: [
|
|
3435
|
+
/* @__PURE__ */ jsx6("svg", { css: styles6.folderStatIconCloud, fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx6("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M3 15a4 4 0 004 4h9a5 5 0 10-.1-9.999 5.002 5.002 0 10-9.78 2.096A4.001 4.001 0 003 15z" }) }),
|
|
3436
|
+
item.cloudCount
|
|
3437
|
+
] })
|
|
3438
|
+
] })
|
|
3439
|
+
] }) })
|
|
3400
3440
|
]
|
|
3401
3441
|
}
|
|
3402
3442
|
);
|
|
@@ -3597,6 +3637,28 @@ var styles7 = {
|
|
|
3597
3637
|
color: #f59e0b;
|
|
3598
3638
|
transform: translateY(1px);
|
|
3599
3639
|
`,
|
|
3640
|
+
folderStats: css7`
|
|
3641
|
+
display: flex;
|
|
3642
|
+
align-items: center;
|
|
3643
|
+
gap: 8px;
|
|
3644
|
+
`,
|
|
3645
|
+
folderStat: css7`
|
|
3646
|
+
display: flex;
|
|
3647
|
+
align-items: center;
|
|
3648
|
+
gap: 3px;
|
|
3649
|
+
font-size: 12px;
|
|
3650
|
+
color: ${colors.textSecondary};
|
|
3651
|
+
`,
|
|
3652
|
+
folderStatIconCloud: css7`
|
|
3653
|
+
width: 14px;
|
|
3654
|
+
height: 14px;
|
|
3655
|
+
color: #f59e0b;
|
|
3656
|
+
`,
|
|
3657
|
+
folderStatIconLocal: css7`
|
|
3658
|
+
width: 14px;
|
|
3659
|
+
height: 14px;
|
|
3660
|
+
color: ${colors.textSecondary};
|
|
3661
|
+
`,
|
|
3600
3662
|
globeIcon: css7`
|
|
3601
3663
|
width: 16px;
|
|
3602
3664
|
height: 16px;
|
|
@@ -3937,7 +3999,21 @@ function ListRow({ item, isSelected, onClick, onOpen, onGenerateThumbnail }) {
|
|
|
3937
3999
|
)
|
|
3938
4000
|
] })
|
|
3939
4001
|
] }) }),
|
|
3940
|
-
/* @__PURE__ */ jsx7("td", { css: [styles7.td, styles7.meta], children: isFolder ?
|
|
4002
|
+
/* @__PURE__ */ jsx7("td", { css: [styles7.td, styles7.meta], children: isFolder ? /* @__PURE__ */ jsxs7("div", { css: styles7.folderStats, children: [
|
|
4003
|
+
item.localCount !== void 0 && item.localCount > 0 && /* @__PURE__ */ jsxs7("span", { css: styles7.folderStat, title: `${item.localCount} local`, children: [
|
|
4004
|
+
/* @__PURE__ */ jsx7("svg", { css: styles7.folderStatIconLocal, fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx7("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M4 16l4.586-4.586a2 2 0 012.828 0L16 16m-2-2l1.586-1.586a2 2 0 012.828 0L20 14m-6-6h.01M6 20h12a2 2 0 002-2V6a2 2 0 00-2-2H6a2 2 0 00-2 2v12a2 2 0 002 2z" }) }),
|
|
4005
|
+
item.localCount
|
|
4006
|
+
] }),
|
|
4007
|
+
item.cloudCount !== void 0 && item.cloudCount > 0 && /* @__PURE__ */ jsxs7("span", { css: styles7.folderStat, title: `${item.cloudCount} in cloud`, children: [
|
|
4008
|
+
/* @__PURE__ */ jsx7("svg", { css: styles7.folderStatIconCloud, fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx7("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M3 15a4 4 0 004 4h9a5 5 0 10-.1-9.999 5.002 5.002 0 10-9.78 2.096A4.001 4.001 0 003 15z" }) }),
|
|
4009
|
+
item.cloudCount
|
|
4010
|
+
] }),
|
|
4011
|
+
!item.localCount && !item.cloudCount && item.fileCount !== void 0 && /* @__PURE__ */ jsxs7("span", { children: [
|
|
4012
|
+
item.fileCount,
|
|
4013
|
+
" files"
|
|
4014
|
+
] }),
|
|
4015
|
+
!item.localCount && !item.cloudCount && item.fileCount === void 0 && "--"
|
|
4016
|
+
] }) : item.size !== void 0 ? formatFileSize2(item.size) : "--" }),
|
|
3941
4017
|
/* @__PURE__ */ jsx7("td", { css: [styles7.td, styles7.meta], children: isFolder ? item.totalSize !== void 0 ? formatFileSize2(item.totalSize) : "--" : item.dimensions ? `${item.dimensions.width}x${item.dimensions.height}` : "--" }),
|
|
3942
4018
|
/* @__PURE__ */ jsx7("td", { css: styles7.td, children: item.cdnPushed ? item.isRemote ? /* @__PURE__ */ jsx7("span", { css: styles7.cdnBadgeRemote, children: "Remote" }) : /* @__PURE__ */ jsxs7("span", { css: styles7.cdnBadge, children: [
|
|
3943
4019
|
/* @__PURE__ */ jsx7("svg", { css: styles7.cdnIcon, fill: "currentColor", viewBox: "0 0 20 20", children: /* @__PURE__ */ jsx7("path", { fillRule: "evenodd", d: "M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z", clipRule: "evenodd" }) }),
|
|
@@ -4282,7 +4358,14 @@ function StudioDetailView() {
|
|
|
4282
4358
|
const [showR2SetupModal, setShowR2SetupModal] = useState8(false);
|
|
4283
4359
|
const [alertMessage, setAlertMessage] = useState8(null);
|
|
4284
4360
|
const [showCopied, setShowCopied] = useState8(false);
|
|
4285
|
-
const [
|
|
4361
|
+
const [showFaviconProgress, setShowFaviconProgress] = useState8(false);
|
|
4362
|
+
const [faviconProgress, setFaviconProgress] = useState8({
|
|
4363
|
+
current: 0,
|
|
4364
|
+
total: 3,
|
|
4365
|
+
percent: 0,
|
|
4366
|
+
status: "processing",
|
|
4367
|
+
message: "Generating favicons..."
|
|
4368
|
+
});
|
|
4286
4369
|
const isActionInProgress = actionState.showProgress;
|
|
4287
4370
|
const isFaviconSource = focusedItem ? focusedItem.name.toLowerCase() === "favicon.png" || focusedItem.name.toLowerCase() === "favicon.jpg" : false;
|
|
4288
4371
|
if (!focusedItem) return null;
|
|
@@ -4333,7 +4416,14 @@ function StudioDetailView() {
|
|
|
4333
4416
|
};
|
|
4334
4417
|
const handleGenerateFavicons = async () => {
|
|
4335
4418
|
if (!focusedItem) return;
|
|
4336
|
-
|
|
4419
|
+
setShowFaviconProgress(true);
|
|
4420
|
+
setFaviconProgress({
|
|
4421
|
+
current: 0,
|
|
4422
|
+
total: 3,
|
|
4423
|
+
percent: 0,
|
|
4424
|
+
status: "processing",
|
|
4425
|
+
message: "Generating favicons..."
|
|
4426
|
+
});
|
|
4337
4427
|
try {
|
|
4338
4428
|
const response = await fetch("/api/studio/generate-favicon", {
|
|
4339
4429
|
method: "POST",
|
|
@@ -4342,26 +4432,74 @@ function StudioDetailView() {
|
|
|
4342
4432
|
imagePath: "/" + focusedItem.path.replace(/^public\//, "")
|
|
4343
4433
|
})
|
|
4344
4434
|
});
|
|
4345
|
-
|
|
4346
|
-
|
|
4347
|
-
|
|
4348
|
-
|
|
4349
|
-
|
|
4350
|
-
|
|
4351
|
-
|
|
4352
|
-
|
|
4353
|
-
title: "Generation Failed",
|
|
4354
|
-
message: data.error || data.message || "Failed to generate favicons"
|
|
4435
|
+
if (!response.ok) {
|
|
4436
|
+
const error = await response.json();
|
|
4437
|
+
setFaviconProgress({
|
|
4438
|
+
current: 0,
|
|
4439
|
+
total: 3,
|
|
4440
|
+
percent: 0,
|
|
4441
|
+
status: "error",
|
|
4442
|
+
message: error.error || "Failed to generate favicons"
|
|
4355
4443
|
});
|
|
4444
|
+
return;
|
|
4445
|
+
}
|
|
4446
|
+
const reader = response.body?.getReader();
|
|
4447
|
+
const decoder = new TextDecoder();
|
|
4448
|
+
if (reader) {
|
|
4449
|
+
let buffer = "";
|
|
4450
|
+
while (true) {
|
|
4451
|
+
const { done, value } = await reader.read();
|
|
4452
|
+
if (done) break;
|
|
4453
|
+
buffer += decoder.decode(value, { stream: true });
|
|
4454
|
+
const lines = buffer.split("\n");
|
|
4455
|
+
buffer = lines.pop() || "";
|
|
4456
|
+
for (const line of lines) {
|
|
4457
|
+
if (line.startsWith("data: ")) {
|
|
4458
|
+
try {
|
|
4459
|
+
const data = JSON.parse(line.slice(6));
|
|
4460
|
+
if (data.type === "start") {
|
|
4461
|
+
setFaviconProgress((prev) => ({
|
|
4462
|
+
...prev,
|
|
4463
|
+
total: data.total
|
|
4464
|
+
}));
|
|
4465
|
+
} else if (data.type === "progress") {
|
|
4466
|
+
setFaviconProgress({
|
|
4467
|
+
current: data.current,
|
|
4468
|
+
total: data.total,
|
|
4469
|
+
percent: data.percent,
|
|
4470
|
+
status: "processing",
|
|
4471
|
+
message: data.message
|
|
4472
|
+
});
|
|
4473
|
+
} else if (data.type === "complete") {
|
|
4474
|
+
setFaviconProgress({
|
|
4475
|
+
current: data.processed,
|
|
4476
|
+
total: data.processed,
|
|
4477
|
+
percent: 100,
|
|
4478
|
+
status: data.errors > 0 ? "error" : "complete",
|
|
4479
|
+
message: data.message
|
|
4480
|
+
});
|
|
4481
|
+
} else if (data.type === "error") {
|
|
4482
|
+
setFaviconProgress((prev) => ({
|
|
4483
|
+
...prev,
|
|
4484
|
+
status: "error",
|
|
4485
|
+
message: data.message
|
|
4486
|
+
}));
|
|
4487
|
+
}
|
|
4488
|
+
} catch {
|
|
4489
|
+
}
|
|
4490
|
+
}
|
|
4491
|
+
}
|
|
4492
|
+
}
|
|
4356
4493
|
}
|
|
4357
4494
|
} catch (error) {
|
|
4358
4495
|
console.error("Favicon generation error:", error);
|
|
4359
|
-
|
|
4360
|
-
|
|
4496
|
+
setFaviconProgress({
|
|
4497
|
+
current: 0,
|
|
4498
|
+
total: 3,
|
|
4499
|
+
percent: 0,
|
|
4500
|
+
status: "error",
|
|
4361
4501
|
message: "An error occurred while generating favicons"
|
|
4362
4502
|
});
|
|
4363
|
-
} finally {
|
|
4364
|
-
setGeneratingFavicon(false);
|
|
4365
4503
|
}
|
|
4366
4504
|
};
|
|
4367
4505
|
const renderMedia = () => {
|
|
@@ -4404,6 +4542,14 @@ function StudioDetailView() {
|
|
|
4404
4542
|
onCancel: () => setShowRenameModal(false)
|
|
4405
4543
|
}
|
|
4406
4544
|
),
|
|
4545
|
+
showFaviconProgress && /* @__PURE__ */ jsx8(
|
|
4546
|
+
ProgressModal,
|
|
4547
|
+
{
|
|
4548
|
+
title: "Generating Favicons",
|
|
4549
|
+
progress: faviconProgress,
|
|
4550
|
+
onClose: () => setShowFaviconProgress(false)
|
|
4551
|
+
}
|
|
4552
|
+
),
|
|
4407
4553
|
/* @__PURE__ */ jsx8("div", { css: styles8.overlay, onClick: handleClose, children: /* @__PURE__ */ jsxs8("div", { css: styles8.container, onClick: (e) => e.stopPropagation(), children: [
|
|
4408
4554
|
/* @__PURE__ */ jsxs8("div", { css: styles8.main, children: [
|
|
4409
4555
|
/* @__PURE__ */ jsxs8("div", { css: styles8.headerButtons, children: [
|
|
@@ -4515,10 +4661,10 @@ function StudioDetailView() {
|
|
|
4515
4661
|
{
|
|
4516
4662
|
css: styles8.actionBtn,
|
|
4517
4663
|
onClick: handleGenerateFavicons,
|
|
4518
|
-
disabled:
|
|
4664
|
+
disabled: showFaviconProgress || focusedItem.isProtected,
|
|
4519
4665
|
children: [
|
|
4520
4666
|
/* @__PURE__ */ jsx8("svg", { css: styles8.actionIcon, fill: "none", stroke: "currentColor", viewBox: "0 0 24 24", children: /* @__PURE__ */ jsx8("path", { strokeLinecap: "round", strokeLinejoin: "round", strokeWidth: 2, d: "M5 3v4M3 5h4M6 17v4m-2-2h4m5-16l2.286 6.857L21 12l-5.714 2.143L13 21l-2.286-6.857L5 12l5.714-2.143L13 3z" }) }),
|
|
4521
|
-
|
|
4667
|
+
"Generate Favicons"
|
|
4522
4668
|
]
|
|
4523
4669
|
}
|
|
4524
4670
|
),
|
|
@@ -6151,4 +6297,4 @@ export {
|
|
|
6151
6297
|
StudioUI,
|
|
6152
6298
|
StudioUI_default as default
|
|
6153
6299
|
};
|
|
6154
|
-
//# sourceMappingURL=StudioUI-
|
|
6300
|
+
//# sourceMappingURL=StudioUI-74IZDKCP.mjs.map
|