@adoptai/genui-components 0.1.68 → 0.1.69
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/composites/download-card/resolver.cjs +152 -62
- package/dist/composites/download-card/resolver.cjs.map +1 -1
- package/dist/composites/download-card/resolver.js +94 -4
- package/dist/composites/download-card/resolver.js.map +1 -1
- package/dist/index.cjs +373 -283
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +160 -70
- package/dist/index.js.map +1 -1
- package/dist/renderer.cjs +305 -215
- package/dist/renderer.cjs.map +1 -1
- package/dist/renderer.js +154 -64
- package/dist/renderer.js.map +1 -1
- package/dist/resolver.cjs +304 -214
- package/dist/resolver.cjs.map +1 -1
- package/dist/resolver.js +154 -64
- package/dist/resolver.js.map +1 -1
- package/dist/shared/fileType.d.ts +1 -1
- package/dist/shared/fileType.d.ts.map +1 -1
- package/dist/shared/viewers/HtmlViewer.d.ts +12 -0
- package/dist/shared/viewers/HtmlViewer.d.ts.map +1 -0
- package/dist/shared/viewers/PreviewHost.d.ts.map +1 -1
- package/dist/tool-definitions.json +2 -2
- package/package.json +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var React11 = require('react');
|
|
5
5
|
var jsxRuntime = require('react/jsx-runtime');
|
|
6
6
|
var reactPdf = require('react-pdf');
|
|
7
7
|
require('react-pdf/dist/Page/AnnotationLayer.css');
|
|
@@ -32,7 +32,7 @@ function _interopNamespace(e) {
|
|
|
32
32
|
return Object.freeze(n);
|
|
33
33
|
}
|
|
34
34
|
|
|
35
|
-
var
|
|
35
|
+
var React11__default = /*#__PURE__*/_interopDefault(React11);
|
|
36
36
|
var XLSX__namespace = /*#__PURE__*/_interopNamespace(XLSX);
|
|
37
37
|
var Papa__default = /*#__PURE__*/_interopDefault(Papa);
|
|
38
38
|
var mammoth__namespace = /*#__PURE__*/_interopNamespace(mammoth);
|
|
@@ -106,7 +106,7 @@ var init_theme = __esm({
|
|
|
106
106
|
}
|
|
107
107
|
});
|
|
108
108
|
function useTheme() {
|
|
109
|
-
return
|
|
109
|
+
return React11.useContext(GenUIThemeContext);
|
|
110
110
|
}
|
|
111
111
|
var DEFAULT_TOKENS, GenUIThemeContext;
|
|
112
112
|
var init_ThemeContext = __esm({
|
|
@@ -128,7 +128,7 @@ var init_ThemeContext = __esm({
|
|
|
128
128
|
SECONDARY,
|
|
129
129
|
CHART_PALETTE: [...CHART_PALETTE]
|
|
130
130
|
};
|
|
131
|
-
GenUIThemeContext =
|
|
131
|
+
GenUIThemeContext = React11.createContext(DEFAULT_TOKENS);
|
|
132
132
|
}
|
|
133
133
|
});
|
|
134
134
|
function renderInline(text) {
|
|
@@ -505,8 +505,8 @@ function probePdfWorker() {
|
|
|
505
505
|
return probe;
|
|
506
506
|
}
|
|
507
507
|
function usePdfWorkerReady(enabled) {
|
|
508
|
-
const [ready, setReady] =
|
|
509
|
-
|
|
508
|
+
const [ready, setReady] = React11.useState(null);
|
|
509
|
+
React11.useEffect(() => {
|
|
510
510
|
let cancelled = false;
|
|
511
511
|
probePdfWorker().then((ok) => {
|
|
512
512
|
if (!cancelled) setReady(ok);
|
|
@@ -538,15 +538,15 @@ __export(PdfViewer_exports, {
|
|
|
538
538
|
});
|
|
539
539
|
function PdfViewer({ url, base64, onLoadSuccess, onLoadError }) {
|
|
540
540
|
const { BORDER: BORDER2, MUTED: MUTED2, SURFACE: SURFACE2 } = useTheme();
|
|
541
|
-
const [numPages, setNumPages] =
|
|
542
|
-
const [currentPage, setCurrentPage] =
|
|
543
|
-
const [loading, setLoading] =
|
|
544
|
-
const handleLoad =
|
|
541
|
+
const [numPages, setNumPages] = React11.useState(0);
|
|
542
|
+
const [currentPage, setCurrentPage] = React11.useState(1);
|
|
543
|
+
const [loading, setLoading] = React11.useState(true);
|
|
544
|
+
const handleLoad = React11.useCallback(({ numPages: n }) => {
|
|
545
545
|
setNumPages(n);
|
|
546
546
|
setLoading(false);
|
|
547
547
|
onLoadSuccess == null ? void 0 : onLoadSuccess(n);
|
|
548
548
|
}, [onLoadSuccess]);
|
|
549
|
-
|
|
549
|
+
React11.useEffect(() => {
|
|
550
550
|
if (numPages <= 1) return;
|
|
551
551
|
const handler = (e) => {
|
|
552
552
|
var _a;
|
|
@@ -654,13 +654,13 @@ __export(ExcelViewer_exports, {
|
|
|
654
654
|
});
|
|
655
655
|
function ExcelViewer({ url, base64, onLoadSuccess }) {
|
|
656
656
|
const { BORDER: BORDER2, MUTED: MUTED2, PAPER: PAPER2, SURFACE: SURFACE2 } = useTheme();
|
|
657
|
-
const [sheetNames, setSheetNames] =
|
|
658
|
-
const [activeSheet, setActiveSheet] =
|
|
659
|
-
const [data, setData] =
|
|
660
|
-
const [loading, setLoading] =
|
|
661
|
-
const [error, setError] =
|
|
662
|
-
const wbRef =
|
|
663
|
-
|
|
657
|
+
const [sheetNames, setSheetNames] = React11.useState([]);
|
|
658
|
+
const [activeSheet, setActiveSheet] = React11.useState(0);
|
|
659
|
+
const [data, setData] = React11.useState([]);
|
|
660
|
+
const [loading, setLoading] = React11.useState(true);
|
|
661
|
+
const [error, setError] = React11.useState(null);
|
|
662
|
+
const wbRef = React11.useRef(null);
|
|
663
|
+
React11.useEffect(() => {
|
|
664
664
|
let cancelled = false;
|
|
665
665
|
setLoading(true);
|
|
666
666
|
setError(null);
|
|
@@ -718,7 +718,7 @@ function ExcelViewer({ url, base64, onLoadSuccess }) {
|
|
|
718
718
|
const rows = XLSX__namespace.utils.sheet_to_json(wbRef.current.Sheets[wbRef.current.SheetNames[idx]], { header: 1 });
|
|
719
719
|
setData(rows);
|
|
720
720
|
};
|
|
721
|
-
|
|
721
|
+
React11.useEffect(() => {
|
|
722
722
|
if (sheetNames.length <= 1) return;
|
|
723
723
|
const handler = (e) => {
|
|
724
724
|
var _a;
|
|
@@ -844,10 +844,10 @@ __export(CsvViewer_exports, {
|
|
|
844
844
|
});
|
|
845
845
|
function CsvViewer({ url, base64, delimiter, maxRows }) {
|
|
846
846
|
const { BORDER: BORDER2, MUTED: MUTED2, PAPER: PAPER2 } = useTheme();
|
|
847
|
-
const [rows, setRows] =
|
|
848
|
-
const [loading, setLoading] =
|
|
849
|
-
const [error, setError] =
|
|
850
|
-
|
|
847
|
+
const [rows, setRows] = React11.useState([]);
|
|
848
|
+
const [loading, setLoading] = React11.useState(true);
|
|
849
|
+
const [error, setError] = React11.useState(null);
|
|
850
|
+
React11.useEffect(() => {
|
|
851
851
|
let cancelled = false;
|
|
852
852
|
setLoading(true);
|
|
853
853
|
setError(null);
|
|
@@ -966,10 +966,10 @@ __export(TextViewer_exports, {
|
|
|
966
966
|
});
|
|
967
967
|
function TextViewer({ url, base64, markdown = false, maxLines }) {
|
|
968
968
|
const { MUTED: MUTED2 } = useTheme();
|
|
969
|
-
const [text, setText] =
|
|
970
|
-
const [loading, setLoading] =
|
|
971
|
-
const [error, setError] =
|
|
972
|
-
|
|
969
|
+
const [text, setText] = React11.useState("");
|
|
970
|
+
const [loading, setLoading] = React11.useState(true);
|
|
971
|
+
const [error, setError] = React11.useState(null);
|
|
972
|
+
React11.useEffect(() => {
|
|
973
973
|
let cancelled = false;
|
|
974
974
|
setLoading(true);
|
|
975
975
|
setError(null);
|
|
@@ -1067,10 +1067,10 @@ function sanitize(html) {
|
|
|
1067
1067
|
}
|
|
1068
1068
|
function DocxViewer({ url, base64 }) {
|
|
1069
1069
|
const { MUTED: MUTED2, BORDER: BORDER2, SURFACE: SURFACE2 } = useTheme();
|
|
1070
|
-
const [html, setHtml] =
|
|
1071
|
-
const [loading, setLoading] =
|
|
1072
|
-
const [error, setError] =
|
|
1073
|
-
|
|
1070
|
+
const [html, setHtml] = React11.useState("");
|
|
1071
|
+
const [loading, setLoading] = React11.useState(true);
|
|
1072
|
+
const [error, setError] = React11.useState(null);
|
|
1073
|
+
React11.useEffect(() => {
|
|
1074
1074
|
let cancelled = false;
|
|
1075
1075
|
setLoading(true);
|
|
1076
1076
|
setError(null);
|
|
@@ -1150,6 +1150,89 @@ var init_DocxViewer = __esm({
|
|
|
1150
1150
|
}
|
|
1151
1151
|
});
|
|
1152
1152
|
|
|
1153
|
+
// src/shared/viewers/HtmlViewer.tsx
|
|
1154
|
+
var HtmlViewer_exports = {};
|
|
1155
|
+
__export(HtmlViewer_exports, {
|
|
1156
|
+
HtmlViewer: () => HtmlViewer
|
|
1157
|
+
});
|
|
1158
|
+
function HtmlViewer({ url, base64, height = 480 }) {
|
|
1159
|
+
const { MUTED: MUTED2 } = useTheme();
|
|
1160
|
+
const [html, setHtml] = React11.useState("");
|
|
1161
|
+
const [loading, setLoading] = React11.useState(true);
|
|
1162
|
+
const [error, setError] = React11.useState(null);
|
|
1163
|
+
React11.useEffect(() => {
|
|
1164
|
+
let cancelled = false;
|
|
1165
|
+
setLoading(true);
|
|
1166
|
+
setError(null);
|
|
1167
|
+
if (base64) {
|
|
1168
|
+
try {
|
|
1169
|
+
if (!cancelled) {
|
|
1170
|
+
setHtml(base64ToText(base64));
|
|
1171
|
+
setLoading(false);
|
|
1172
|
+
}
|
|
1173
|
+
} catch (e) {
|
|
1174
|
+
if (!cancelled) {
|
|
1175
|
+
setError(e instanceof Error ? e.message : "Failed to decode HTML");
|
|
1176
|
+
setLoading(false);
|
|
1177
|
+
}
|
|
1178
|
+
}
|
|
1179
|
+
return () => {
|
|
1180
|
+
cancelled = true;
|
|
1181
|
+
};
|
|
1182
|
+
}
|
|
1183
|
+
if (!url) {
|
|
1184
|
+
setError("No file source provided");
|
|
1185
|
+
setLoading(false);
|
|
1186
|
+
return () => {
|
|
1187
|
+
cancelled = true;
|
|
1188
|
+
};
|
|
1189
|
+
}
|
|
1190
|
+
fetch(url).then((r) => {
|
|
1191
|
+
if (!r.ok) throw new Error(`Failed to fetch: ${r.status}`);
|
|
1192
|
+
return r.text();
|
|
1193
|
+
}).then((t) => {
|
|
1194
|
+
if (cancelled) return;
|
|
1195
|
+
setHtml(t);
|
|
1196
|
+
setLoading(false);
|
|
1197
|
+
}).catch((e) => {
|
|
1198
|
+
if (cancelled) return;
|
|
1199
|
+
setError(e.message);
|
|
1200
|
+
setLoading(false);
|
|
1201
|
+
});
|
|
1202
|
+
return () => {
|
|
1203
|
+
cancelled = true;
|
|
1204
|
+
};
|
|
1205
|
+
}, [url, base64]);
|
|
1206
|
+
if (loading) {
|
|
1207
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { style: { padding: "24px", color: MUTED2, fontSize: "13px", textAlign: "center" }, children: "Loading\u2026" });
|
|
1208
|
+
}
|
|
1209
|
+
if (error) {
|
|
1210
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { style: { padding: "24px", color: "#dc2626", fontSize: "13px", textAlign: "center" }, children: error });
|
|
1211
|
+
}
|
|
1212
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1213
|
+
"iframe",
|
|
1214
|
+
{
|
|
1215
|
+
title: "HTML preview",
|
|
1216
|
+
sandbox: "",
|
|
1217
|
+
srcDoc: html,
|
|
1218
|
+
style: {
|
|
1219
|
+
width: "100%",
|
|
1220
|
+
height: `${height}px`,
|
|
1221
|
+
border: "none",
|
|
1222
|
+
background: "white",
|
|
1223
|
+
display: "block"
|
|
1224
|
+
}
|
|
1225
|
+
}
|
|
1226
|
+
);
|
|
1227
|
+
}
|
|
1228
|
+
var init_HtmlViewer = __esm({
|
|
1229
|
+
"src/shared/viewers/HtmlViewer.tsx"() {
|
|
1230
|
+
"use client";
|
|
1231
|
+
init_ThemeContext();
|
|
1232
|
+
init_decode();
|
|
1233
|
+
}
|
|
1234
|
+
});
|
|
1235
|
+
|
|
1153
1236
|
// src/shared/ColumnSettingsPanel.tsx
|
|
1154
1237
|
init_ThemeContext();
|
|
1155
1238
|
function ColumnSettingsPanel({ columns, hidden, onToggle, onShowAll, onHideAll }) {
|
|
@@ -1201,16 +1284,16 @@ var DOT_COLOR = "#aaaaaa";
|
|
|
1201
1284
|
var DOT_HOVER = "#555555";
|
|
1202
1285
|
function ComponentActions({ children, onDownloadCSV, columnConfig, filename = "component" }) {
|
|
1203
1286
|
const { BORDER: BORDER2, MUTED: MUTED2, SURFACE: SURFACE2, SURFACE_MUTED: SURFACE_MUTED2 } = useTheme();
|
|
1204
|
-
const [open, setOpen] =
|
|
1205
|
-
const [view, setView] =
|
|
1206
|
-
const contentRef =
|
|
1207
|
-
const menuRef =
|
|
1208
|
-
const btnRef =
|
|
1209
|
-
const close =
|
|
1287
|
+
const [open, setOpen] = React11.useState(false);
|
|
1288
|
+
const [view, setView] = React11.useState("main");
|
|
1289
|
+
const contentRef = React11.useRef(null);
|
|
1290
|
+
const menuRef = React11.useRef(null);
|
|
1291
|
+
const btnRef = React11.useRef(null);
|
|
1292
|
+
const close = React11.useCallback(() => {
|
|
1210
1293
|
setOpen(false);
|
|
1211
1294
|
setView("main");
|
|
1212
1295
|
}, []);
|
|
1213
|
-
|
|
1296
|
+
React11.useEffect(() => {
|
|
1214
1297
|
if (!open) return;
|
|
1215
1298
|
const handler = (e) => {
|
|
1216
1299
|
var _a, _b;
|
|
@@ -1221,7 +1304,7 @@ function ComponentActions({ children, onDownloadCSV, columnConfig, filename = "c
|
|
|
1221
1304
|
document.addEventListener("mousedown", handler);
|
|
1222
1305
|
return () => document.removeEventListener("mousedown", handler);
|
|
1223
1306
|
}, [open, close]);
|
|
1224
|
-
const handleDownloadPNG =
|
|
1307
|
+
const handleDownloadPNG = React11.useCallback(async () => {
|
|
1225
1308
|
if (!contentRef.current) return;
|
|
1226
1309
|
try {
|
|
1227
1310
|
const url = await htmlToImage.toPng(contentRef.current, { backgroundColor: "white", pixelRatio: 2 });
|
|
@@ -1233,7 +1316,7 @@ function ComponentActions({ children, onDownloadCSV, columnConfig, filename = "c
|
|
|
1233
1316
|
}
|
|
1234
1317
|
close();
|
|
1235
1318
|
}, [filename, close]);
|
|
1236
|
-
const handleCSV =
|
|
1319
|
+
const handleCSV = React11.useCallback(() => {
|
|
1237
1320
|
onDownloadCSV == null ? void 0 : onDownloadCSV();
|
|
1238
1321
|
close();
|
|
1239
1322
|
}, [onDownloadCSV, close]);
|
|
@@ -1355,7 +1438,7 @@ init_theme();
|
|
|
1355
1438
|
var FAMILIES = [
|
|
1356
1439
|
{ exts: ["csv", "tsv", "xls", "xlsx", "numbers"], fg: SEMANTIC.success.color, bg: SEMANTIC.success.bg },
|
|
1357
1440
|
{ exts: ["pdf"], fg: SEMANTIC.error.color, bg: SEMANTIC.error.bg },
|
|
1358
|
-
{ exts: ["doc", "docx", "txt", "md", "rtf", "pages"], fg: SEMANTIC.info.color, bg: SEMANTIC.info.bg },
|
|
1441
|
+
{ exts: ["doc", "docx", "txt", "md", "rtf", "pages", "html", "htm"], fg: SEMANTIC.info.color, bg: SEMANTIC.info.bg },
|
|
1359
1442
|
{ exts: ["json", "yaml", "yml", "xml", "toml"], fg: SEMANTIC.purple.color, bg: SEMANTIC.purple.bg },
|
|
1360
1443
|
{ exts: ["zip", "tar", "gz", "rar", "7z"], fg: SEMANTIC.warning.color, bg: SEMANTIC.warning.bg },
|
|
1361
1444
|
{ exts: ["png", "jpg", "jpeg", "gif", "svg", "webp", "bmp"], fg: SEMANTIC.info.color, bg: SEMANTIC.info.bg }
|
|
@@ -1382,7 +1465,9 @@ var PREVIEW_EXTS = {
|
|
|
1382
1465
|
txt: "text",
|
|
1383
1466
|
log: "text",
|
|
1384
1467
|
text: "text",
|
|
1385
|
-
docx: "docx"
|
|
1468
|
+
docx: "docx",
|
|
1469
|
+
html: "html",
|
|
1470
|
+
htm: "html"
|
|
1386
1471
|
};
|
|
1387
1472
|
function extOf(fileType, filename) {
|
|
1388
1473
|
var _a;
|
|
@@ -1393,6 +1478,7 @@ function extOf(fileType, filename) {
|
|
|
1393
1478
|
if (mime.includes("csv")) return "csv";
|
|
1394
1479
|
if (mime.includes("markdown")) return "md";
|
|
1395
1480
|
if (mime.includes("wordprocessing") || mime.includes("msword")) return "docx";
|
|
1481
|
+
if (mime.includes("html")) return "html";
|
|
1396
1482
|
if (mime.startsWith("text/")) return "txt";
|
|
1397
1483
|
} else if (fileType) {
|
|
1398
1484
|
const t = fileType.toLowerCase().replace(/[^a-z0-9]/g, "");
|
|
@@ -1427,20 +1513,21 @@ function isExpirySoon(expiresAt) {
|
|
|
1427
1513
|
// src/shared/viewers/PreviewHost.tsx
|
|
1428
1514
|
init_ThemeContext();
|
|
1429
1515
|
init_pdfWorkerProbe();
|
|
1430
|
-
var PdfViewer2 =
|
|
1516
|
+
var PdfViewer2 = React11.lazy(
|
|
1431
1517
|
() => Promise.resolve().then(() => (init_PdfViewer(), PdfViewer_exports)).then((m) => ({ default: m.PdfViewer }))
|
|
1432
1518
|
);
|
|
1433
|
-
var ExcelViewer2 =
|
|
1519
|
+
var ExcelViewer2 = React11.lazy(
|
|
1434
1520
|
() => Promise.resolve().then(() => (init_ExcelViewer(), ExcelViewer_exports)).then((m) => ({ default: m.ExcelViewer }))
|
|
1435
1521
|
);
|
|
1436
|
-
var CsvViewer2 =
|
|
1437
|
-
var TextViewer2 =
|
|
1438
|
-
var DocxViewer2 =
|
|
1522
|
+
var CsvViewer2 = React11.lazy(() => Promise.resolve().then(() => (init_CsvViewer(), CsvViewer_exports)).then((m) => ({ default: m.CsvViewer })));
|
|
1523
|
+
var TextViewer2 = React11.lazy(() => Promise.resolve().then(() => (init_TextViewer(), TextViewer_exports)).then((m) => ({ default: m.TextViewer })));
|
|
1524
|
+
var DocxViewer2 = React11.lazy(() => Promise.resolve().then(() => (init_DocxViewer(), DocxViewer_exports)).then((m) => ({ default: m.DocxViewer })));
|
|
1525
|
+
var HtmlViewer2 = React11.lazy(() => Promise.resolve().then(() => (init_HtmlViewer(), HtmlViewer_exports)).then((m) => ({ default: m.HtmlViewer })));
|
|
1439
1526
|
var PEEK_ROWS = 20;
|
|
1440
1527
|
var PEEK_LINES = 40;
|
|
1441
1528
|
function GatedPdfViewer({ source }) {
|
|
1442
1529
|
const { MUTED: MUTED2 } = useTheme();
|
|
1443
|
-
const [failed, setFailed] =
|
|
1530
|
+
const [failed, setFailed] = React11.useState(false);
|
|
1444
1531
|
const workerReady = usePdfWorkerReady(true);
|
|
1445
1532
|
const ready = failed ? false : workerReady;
|
|
1446
1533
|
if (ready === null) {
|
|
@@ -1475,10 +1562,13 @@ function PreviewHost({ kind, source, mode = "full" }) {
|
|
|
1475
1562
|
case "docx":
|
|
1476
1563
|
viewer = /* @__PURE__ */ jsxRuntime.jsx(DocxViewer2, { url: source.url, base64: source.base64 });
|
|
1477
1564
|
break;
|
|
1565
|
+
case "html":
|
|
1566
|
+
viewer = /* @__PURE__ */ jsxRuntime.jsx(HtmlViewer2, { url: source.url, base64: source.base64, height: peek ? 240 : 480 });
|
|
1567
|
+
break;
|
|
1478
1568
|
default:
|
|
1479
1569
|
return null;
|
|
1480
1570
|
}
|
|
1481
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
1571
|
+
return /* @__PURE__ */ jsxRuntime.jsx(React11.Suspense, { fallback, children: viewer });
|
|
1482
1572
|
}
|
|
1483
1573
|
|
|
1484
1574
|
// src/shared/PreviewModal.tsx
|
|
@@ -1494,7 +1584,7 @@ function PreviewModal({
|
|
|
1494
1584
|
onDownload
|
|
1495
1585
|
}) {
|
|
1496
1586
|
const { BORDER: BORDER2, MUTED: MUTED2, ACCENT: ACCENT2, SURFACE: SURFACE2, FOREGROUND: FOREGROUND2, SCRIM: SCRIM2 } = useTheme();
|
|
1497
|
-
|
|
1587
|
+
React11.useEffect(() => {
|
|
1498
1588
|
if (!open) return;
|
|
1499
1589
|
const onKey = (e) => {
|
|
1500
1590
|
if (e.key === "Escape") onClose();
|
|
@@ -1671,17 +1761,17 @@ function FileCard({
|
|
|
1671
1761
|
previewDisabled = false
|
|
1672
1762
|
}) {
|
|
1673
1763
|
const { BORDER: BORDER2, MUTED: MUTED2, ACCENT: ACCENT2, SURFACE: SURFACE2, SURFACE_MUTED: SURFACE_MUTED2, SHADOW: SHADOW2 } = useTheme();
|
|
1674
|
-
const [cardHover, setCardHover] =
|
|
1675
|
-
const [btnHover, setBtnHover] =
|
|
1676
|
-
const [pvHover, setPvHover] =
|
|
1764
|
+
const [cardHover, setCardHover] = React11.useState(false);
|
|
1765
|
+
const [btnHover, setBtnHover] = React11.useState(false);
|
|
1766
|
+
const [pvHover, setPvHover] = React11.useState(false);
|
|
1677
1767
|
const previewKind = previewKindFor(fileType, filename);
|
|
1678
1768
|
const canPreview = !previewDisabled && previewKind !== null && (!!previewUrl || !!fetchPreviewBlob);
|
|
1679
|
-
const [peekOpen, setPeekOpen] =
|
|
1680
|
-
const [modalOpen, setModalOpen] =
|
|
1681
|
-
const [source, setSource] =
|
|
1682
|
-
const [pvLoading, setPvLoading] =
|
|
1683
|
-
const [pvError, setPvError] =
|
|
1684
|
-
const ensureSource =
|
|
1769
|
+
const [peekOpen, setPeekOpen] = React11.useState(false);
|
|
1770
|
+
const [modalOpen, setModalOpen] = React11.useState(false);
|
|
1771
|
+
const [source, setSource] = React11.useState(previewUrl ? { url: previewUrl } : null);
|
|
1772
|
+
const [pvLoading, setPvLoading] = React11.useState(false);
|
|
1773
|
+
const [pvError, setPvError] = React11.useState(null);
|
|
1774
|
+
const ensureSource = React11.useCallback(async () => {
|
|
1685
1775
|
if (source) return source;
|
|
1686
1776
|
if (previewUrl) {
|
|
1687
1777
|
const s = { url: previewUrl };
|
|
@@ -1703,7 +1793,7 @@ function FileCard({
|
|
|
1703
1793
|
setPvLoading(false);
|
|
1704
1794
|
}
|
|
1705
1795
|
}, [source, previewUrl, fetchPreviewBlob]);
|
|
1706
|
-
const togglePeek =
|
|
1796
|
+
const togglePeek = React11.useCallback(async () => {
|
|
1707
1797
|
if (peekOpen) {
|
|
1708
1798
|
setPeekOpen(false);
|
|
1709
1799
|
return;
|
|
@@ -1711,7 +1801,7 @@ function FileCard({
|
|
|
1711
1801
|
setPeekOpen(true);
|
|
1712
1802
|
await ensureSource();
|
|
1713
1803
|
}, [peekOpen, ensureSource]);
|
|
1714
|
-
const openModal =
|
|
1804
|
+
const openModal = React11.useCallback(async () => {
|
|
1715
1805
|
const s = await ensureSource();
|
|
1716
1806
|
if (s) setModalOpen(true);
|
|
1717
1807
|
}, [ensureSource]);
|
|
@@ -1826,7 +1916,7 @@ function FileCard({
|
|
|
1826
1916
|
whiteSpace: "nowrap"
|
|
1827
1917
|
},
|
|
1828
1918
|
children: [
|
|
1829
|
-
metaTokens.map((t, i) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
1919
|
+
metaTokens.map((t, i) => /* @__PURE__ */ jsxRuntime.jsxs(React11__default.default.Fragment, { children: [
|
|
1830
1920
|
i > 0 && /* @__PURE__ */ jsxRuntime.jsx("span", { style: { color: MUTED2 }, children: "\xB7" }),
|
|
1831
1921
|
/* @__PURE__ */ jsxRuntime.jsx("span", { children: t })
|
|
1832
1922
|
] }, i)),
|