@adoptai/genui-components 0.1.67 → 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/document-preview/PdfViewer.d.ts +2 -1
- package/dist/composites/document-preview/PdfViewer.d.ts.map +1 -1
- package/dist/composites/document-preview/resolver.cjs +90 -11
- package/dist/composites/document-preview/resolver.cjs.map +1 -1
- package/dist/composites/document-preview/resolver.d.ts.map +1 -1
- package/dist/composites/document-preview/resolver.js +90 -11
- package/dist/composites/document-preview/resolver.js.map +1 -1
- package/dist/composites/download-card/resolver.cjs +244 -69
- package/dist/composites/download-card/resolver.cjs.map +1 -1
- package/dist/composites/download-card/resolver.js +189 -14
- package/dist/composites/download-card/resolver.js.map +1 -1
- package/dist/index.cjs +472 -289
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +265 -82
- package/dist/index.js.map +1 -1
- package/dist/renderer.cjs +404 -221
- package/dist/renderer.cjs.map +1 -1
- package/dist/renderer.js +259 -76
- package/dist/renderer.js.map +1 -1
- package/dist/resolver.cjs +403 -220
- package/dist/resolver.cjs.map +1 -1
- package/dist/resolver.js +259 -76
- 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/shared/viewers/pdfWorkerProbe.d.ts +31 -0
- package/dist/shared/viewers/pdfWorkerProbe.d.ts.map +1 -0
- package/dist/tool-definitions.json +2 -2
- package/package.json +1 -1
package/dist/renderer.cjs
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
'use strict';
|
|
3
3
|
|
|
4
|
-
var
|
|
4
|
+
var React46 = require('react');
|
|
5
5
|
var jsxRuntime = require('react/jsx-runtime');
|
|
6
6
|
var dagre = require('@dagrejs/dagre');
|
|
7
7
|
var reactDom = require('react-dom');
|
|
@@ -37,7 +37,7 @@ function _interopNamespace(e) {
|
|
|
37
37
|
return Object.freeze(n);
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
-
var
|
|
40
|
+
var React46__default = /*#__PURE__*/_interopDefault(React46);
|
|
41
41
|
var dagre__default = /*#__PURE__*/_interopDefault(dagre);
|
|
42
42
|
var XLSX__namespace = /*#__PURE__*/_interopNamespace(XLSX);
|
|
43
43
|
var Papa__default = /*#__PURE__*/_interopDefault(Papa);
|
|
@@ -125,7 +125,7 @@ var init_theme = __esm({
|
|
|
125
125
|
}
|
|
126
126
|
});
|
|
127
127
|
function useTheme() {
|
|
128
|
-
return
|
|
128
|
+
return React46.useContext(GenUIThemeContext);
|
|
129
129
|
}
|
|
130
130
|
var DEFAULT_TOKENS, GenUIThemeContext;
|
|
131
131
|
var init_ThemeContext = __esm({
|
|
@@ -147,7 +147,7 @@ var init_ThemeContext = __esm({
|
|
|
147
147
|
SECONDARY,
|
|
148
148
|
CHART_PALETTE: [...CHART_PALETTE]
|
|
149
149
|
};
|
|
150
|
-
GenUIThemeContext =
|
|
150
|
+
GenUIThemeContext = React46.createContext(DEFAULT_TOKENS);
|
|
151
151
|
}
|
|
152
152
|
});
|
|
153
153
|
function renderInline(text) {
|
|
@@ -883,11 +883,11 @@ async function getMermaid(t) {
|
|
|
883
883
|
}
|
|
884
884
|
function MermaidFallback({ diagram, title }) {
|
|
885
885
|
const tokens = useTheme();
|
|
886
|
-
const [svg, setSvg] =
|
|
887
|
-
const [err, setErr] =
|
|
888
|
-
const [full, setFull] =
|
|
889
|
-
const idRef =
|
|
890
|
-
|
|
886
|
+
const [svg, setSvg] = React46.useState("");
|
|
887
|
+
const [err, setErr] = React46.useState(false);
|
|
888
|
+
const [full, setFull] = React46.useState(false);
|
|
889
|
+
const idRef = React46.useRef(0);
|
|
890
|
+
React46.useEffect(() => {
|
|
891
891
|
const id = ++renderSeq;
|
|
892
892
|
idRef.current = id;
|
|
893
893
|
setErr(false);
|
|
@@ -956,7 +956,7 @@ function FullscreenModalInner({ nodes, edges, title, onClose }) {
|
|
|
956
956
|
] }) });
|
|
957
957
|
}
|
|
958
958
|
function FullscreenModal({ nodes, edges, title, onClose }) {
|
|
959
|
-
|
|
959
|
+
React46.useEffect(() => {
|
|
960
960
|
const h = (e) => {
|
|
961
961
|
if (e.key === "Escape") onClose();
|
|
962
962
|
};
|
|
@@ -969,8 +969,8 @@ function FullscreenModal({ nodes, edges, title, onClose }) {
|
|
|
969
969
|
);
|
|
970
970
|
}
|
|
971
971
|
function usePrefersReducedMotion() {
|
|
972
|
-
const [reduced, setReduced] =
|
|
973
|
-
|
|
972
|
+
const [reduced, setReduced] = React46.useState(false);
|
|
973
|
+
React46.useEffect(() => {
|
|
974
974
|
var _a;
|
|
975
975
|
if (typeof matchMedia === "undefined") return;
|
|
976
976
|
const mq = matchMedia("(prefers-reduced-motion: reduce)");
|
|
@@ -1014,9 +1014,9 @@ function topoOrder(nodeIds, edges) {
|
|
|
1014
1014
|
}
|
|
1015
1015
|
function useAutoplay(order, enabled) {
|
|
1016
1016
|
const reduced = usePrefersReducedMotion();
|
|
1017
|
-
const [step, setStep] =
|
|
1017
|
+
const [step, setStep] = React46.useState(0);
|
|
1018
1018
|
const key = order.join("|");
|
|
1019
|
-
|
|
1019
|
+
React46.useEffect(() => {
|
|
1020
1020
|
if (!enabled || reduced || order.length === 0) {
|
|
1021
1021
|
setStep(0);
|
|
1022
1022
|
return;
|
|
@@ -1038,7 +1038,7 @@ function useAutoplay(order, enabled) {
|
|
|
1038
1038
|
timer = setTimeout(tick, 850);
|
|
1039
1039
|
return () => clearTimeout(timer);
|
|
1040
1040
|
}, [enabled, reduced, key]);
|
|
1041
|
-
return
|
|
1041
|
+
return React46.useMemo(() => {
|
|
1042
1042
|
const m = {};
|
|
1043
1043
|
order.forEach((id, i) => {
|
|
1044
1044
|
m[id] = i < step ? "done" : i === step ? "active" : "pending";
|
|
@@ -1060,13 +1060,13 @@ function resolveStates(nodes, nodeStates) {
|
|
|
1060
1060
|
}
|
|
1061
1061
|
function Inner({ diagram, title, autoplay, nodeStates }) {
|
|
1062
1062
|
const tokens = useTheme();
|
|
1063
|
-
const [full, setFull] =
|
|
1064
|
-
const [focused, setFocused] =
|
|
1065
|
-
const [boxW, setBoxW] =
|
|
1066
|
-
const containerRef =
|
|
1067
|
-
const parsed =
|
|
1068
|
-
const layout =
|
|
1069
|
-
const themedEdges =
|
|
1063
|
+
const [full, setFull] = React46.useState(false);
|
|
1064
|
+
const [focused, setFocused] = React46.useState(false);
|
|
1065
|
+
const [boxW, setBoxW] = React46.useState(640);
|
|
1066
|
+
const containerRef = React46.useRef(null);
|
|
1067
|
+
const parsed = React46.useMemo(() => parseMermaidFlow(diagram), [diagram]);
|
|
1068
|
+
const layout = React46.useMemo(() => parsed ? computeLayout(parsed) : null, [parsed]);
|
|
1069
|
+
const themedEdges = React46.useMemo(
|
|
1070
1070
|
() => {
|
|
1071
1071
|
var _a;
|
|
1072
1072
|
return ((_a = layout == null ? void 0 : layout.edges) != null ? _a : []).map((e) => __spreadProps(__spreadValues({}, e), {
|
|
@@ -1078,7 +1078,7 @@ function Inner({ diagram, title, autoplay, nodeStates }) {
|
|
|
1078
1078
|
},
|
|
1079
1079
|
[layout, tokens.ACCENT, tokens.MUTED]
|
|
1080
1080
|
);
|
|
1081
|
-
const order =
|
|
1081
|
+
const order = React46.useMemo(
|
|
1082
1082
|
() => {
|
|
1083
1083
|
var _a, _b;
|
|
1084
1084
|
return topoOrder(((_a = layout == null ? void 0 : layout.nodes) != null ? _a : []).map((n) => n.id), (_b = layout == null ? void 0 : layout.edges) != null ? _b : []);
|
|
@@ -1086,19 +1086,19 @@ function Inner({ diagram, title, autoplay, nodeStates }) {
|
|
|
1086
1086
|
[layout]
|
|
1087
1087
|
);
|
|
1088
1088
|
const autoStatus = useAutoplay(order, !!autoplay);
|
|
1089
|
-
const staticStatus =
|
|
1089
|
+
const staticStatus = React46.useMemo(() => {
|
|
1090
1090
|
var _a;
|
|
1091
1091
|
return resolveStates((_a = layout == null ? void 0 : layout.nodes) != null ? _a : [], nodeStates);
|
|
1092
1092
|
}, [layout, nodeStates]);
|
|
1093
1093
|
const statusMap = autoplay ? autoStatus : staticStatus;
|
|
1094
|
-
const displayNodes =
|
|
1094
|
+
const displayNodes = React46.useMemo(
|
|
1095
1095
|
() => {
|
|
1096
1096
|
var _a;
|
|
1097
1097
|
return ((_a = layout == null ? void 0 : layout.nodes) != null ? _a : []).map((n) => __spreadProps(__spreadValues({}, n), { data: __spreadProps(__spreadValues({}, n.data), { status: statusMap[n.id] }) }));
|
|
1098
1098
|
},
|
|
1099
1099
|
[layout, statusMap]
|
|
1100
1100
|
);
|
|
1101
|
-
const displayEdges =
|
|
1101
|
+
const displayEdges = React46.useMemo(
|
|
1102
1102
|
() => themedEdges.map((e) => {
|
|
1103
1103
|
const ss = statusMap[e.source];
|
|
1104
1104
|
const ts = statusMap[e.target];
|
|
@@ -1118,13 +1118,13 @@ function Inner({ diagram, title, autoplay, nodeStates }) {
|
|
|
1118
1118
|
const [nodes, setNodes, onNC] = react.useNodesState(displayNodes);
|
|
1119
1119
|
const [edges, setEdges, onEC] = react.useEdgesState(displayEdges);
|
|
1120
1120
|
const rf = react.useReactFlow();
|
|
1121
|
-
|
|
1121
|
+
React46.useEffect(() => {
|
|
1122
1122
|
setNodes(displayNodes);
|
|
1123
1123
|
}, [displayNodes, setNodes]);
|
|
1124
|
-
|
|
1124
|
+
React46.useEffect(() => {
|
|
1125
1125
|
setEdges(displayEdges);
|
|
1126
1126
|
}, [displayEdges, setEdges]);
|
|
1127
|
-
|
|
1127
|
+
React46.useEffect(() => {
|
|
1128
1128
|
const id = requestAnimationFrame(() => {
|
|
1129
1129
|
try {
|
|
1130
1130
|
rf.fitView({ padding: 0.1 });
|
|
@@ -1133,14 +1133,14 @@ function Inner({ diagram, title, autoplay, nodeStates }) {
|
|
|
1133
1133
|
});
|
|
1134
1134
|
return () => cancelAnimationFrame(id);
|
|
1135
1135
|
}, [layout, rf]);
|
|
1136
|
-
const handleClickOutside =
|
|
1136
|
+
const handleClickOutside = React46.useCallback((e) => {
|
|
1137
1137
|
if (containerRef.current && !containerRef.current.contains(e.target)) setFocused(false);
|
|
1138
1138
|
}, []);
|
|
1139
|
-
|
|
1139
|
+
React46.useEffect(() => {
|
|
1140
1140
|
document.addEventListener("mousedown", handleClickOutside);
|
|
1141
1141
|
return () => document.removeEventListener("mousedown", handleClickOutside);
|
|
1142
1142
|
}, [handleClickOutside]);
|
|
1143
|
-
|
|
1143
|
+
React46.useEffect(() => {
|
|
1144
1144
|
const el = containerRef.current;
|
|
1145
1145
|
if (!el) return;
|
|
1146
1146
|
let raf = 0;
|
|
@@ -1292,23 +1292,84 @@ var init_FlowGraph = __esm({
|
|
|
1292
1292
|
renderSeq = 0;
|
|
1293
1293
|
}
|
|
1294
1294
|
});
|
|
1295
|
+
function resolvePdfWorkerSrc(pdfjs2) {
|
|
1296
|
+
const override = typeof window !== "undefined" ? window.__GENUI_PDF_WORKER_SRC__ : void 0;
|
|
1297
|
+
const current = pdfjs2.GlobalWorkerOptions.workerSrc;
|
|
1298
|
+
const isConfigured = !!current && current !== "pdf.worker.mjs";
|
|
1299
|
+
if (override) {
|
|
1300
|
+
pdfjs2.GlobalWorkerOptions.workerSrc = override;
|
|
1301
|
+
} else if (!isConfigured) {
|
|
1302
|
+
pdfjs2.GlobalWorkerOptions.workerSrc = `https://cdn.jsdelivr.net/npm/pdfjs-dist@${pdfjs2.version}/build/pdf.worker.min.mjs`;
|
|
1303
|
+
}
|
|
1304
|
+
return pdfjs2.GlobalWorkerOptions.workerSrc;
|
|
1305
|
+
}
|
|
1306
|
+
function probePdfWorker() {
|
|
1307
|
+
if (probe) return probe;
|
|
1308
|
+
probe = (async () => {
|
|
1309
|
+
if (typeof window === "undefined") return false;
|
|
1310
|
+
try {
|
|
1311
|
+
const { pdfjs: pdfjs2 } = await import('react-pdf');
|
|
1312
|
+
resolvePdfWorkerSrc(pdfjs2);
|
|
1313
|
+
const task = pdfjs2.getDocument({ data: new TextEncoder().encode(TINY_PDF) });
|
|
1314
|
+
const doc = await Promise.race([
|
|
1315
|
+
task.promise,
|
|
1316
|
+
new Promise(
|
|
1317
|
+
(_, reject) => setTimeout(() => reject(new Error("pdf worker probe timed out")), PROBE_TIMEOUT_MS)
|
|
1318
|
+
)
|
|
1319
|
+
]);
|
|
1320
|
+
await doc.destroy();
|
|
1321
|
+
return true;
|
|
1322
|
+
} catch (e) {
|
|
1323
|
+
probe = null;
|
|
1324
|
+
return false;
|
|
1325
|
+
}
|
|
1326
|
+
})();
|
|
1327
|
+
return probe;
|
|
1328
|
+
}
|
|
1329
|
+
function usePdfWorkerReady(enabled) {
|
|
1330
|
+
const [ready, setReady] = React46.useState(null);
|
|
1331
|
+
React46.useEffect(() => {
|
|
1332
|
+
if (!enabled) return;
|
|
1333
|
+
let cancelled = false;
|
|
1334
|
+
probePdfWorker().then((ok) => {
|
|
1335
|
+
if (!cancelled) setReady(ok);
|
|
1336
|
+
});
|
|
1337
|
+
return () => {
|
|
1338
|
+
cancelled = true;
|
|
1339
|
+
};
|
|
1340
|
+
}, [enabled]);
|
|
1341
|
+
return enabled ? ready : null;
|
|
1342
|
+
}
|
|
1343
|
+
var TINY_PDF, PROBE_TIMEOUT_MS, probe;
|
|
1344
|
+
var init_pdfWorkerProbe = __esm({
|
|
1345
|
+
"src/shared/viewers/pdfWorkerProbe.ts"() {
|
|
1346
|
+
"use client";
|
|
1347
|
+
TINY_PDF = `%PDF-1.1
|
|
1348
|
+
1 0 obj<</Type/Catalog/Pages 2 0 R>>endobj
|
|
1349
|
+
2 0 obj<</Type/Pages/Kids[3 0 R]/Count 1>>endobj
|
|
1350
|
+
3 0 obj<</Type/Page/Parent 2 0 R/MediaBox[0 0 3 3]>>endobj
|
|
1351
|
+
trailer<</Root 1 0 R>>`;
|
|
1352
|
+
PROBE_TIMEOUT_MS = 5e3;
|
|
1353
|
+
probe = null;
|
|
1354
|
+
}
|
|
1355
|
+
});
|
|
1295
1356
|
|
|
1296
1357
|
// src/composites/document-preview/PdfViewer.tsx
|
|
1297
1358
|
var PdfViewer_exports = {};
|
|
1298
1359
|
__export(PdfViewer_exports, {
|
|
1299
1360
|
PdfViewer: () => PdfViewer
|
|
1300
1361
|
});
|
|
1301
|
-
function PdfViewer({ url, base64, onLoadSuccess }) {
|
|
1362
|
+
function PdfViewer({ url, base64, onLoadSuccess, onLoadError }) {
|
|
1302
1363
|
const { BORDER: BORDER3, MUTED: MUTED2, SURFACE: SURFACE2 } = useTheme();
|
|
1303
|
-
const [numPages, setNumPages] =
|
|
1304
|
-
const [currentPage, setCurrentPage] =
|
|
1305
|
-
const [loading, setLoading] =
|
|
1306
|
-
const handleLoad =
|
|
1364
|
+
const [numPages, setNumPages] = React46.useState(0);
|
|
1365
|
+
const [currentPage, setCurrentPage] = React46.useState(1);
|
|
1366
|
+
const [loading, setLoading] = React46.useState(true);
|
|
1367
|
+
const handleLoad = React46.useCallback(({ numPages: n }) => {
|
|
1307
1368
|
setNumPages(n);
|
|
1308
1369
|
setLoading(false);
|
|
1309
1370
|
onLoadSuccess == null ? void 0 : onLoadSuccess(n);
|
|
1310
1371
|
}, [onLoadSuccess]);
|
|
1311
|
-
|
|
1372
|
+
React46.useEffect(() => {
|
|
1312
1373
|
if (numPages <= 1) return;
|
|
1313
1374
|
const handler = (e) => {
|
|
1314
1375
|
var _a;
|
|
@@ -1378,23 +1439,34 @@ function PdfViewer({ url, base64, onLoadSuccess }) {
|
|
|
1378
1439
|
] }),
|
|
1379
1440
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { style: { overflow: "auto", width: "100%", display: "flex", justifyContent: "center", padding: "16px" }, children: [
|
|
1380
1441
|
loading && /* @__PURE__ */ jsxRuntime.jsx("div", { style: { display: "flex", alignItems: "center", justifyContent: "center", height: "200px", color: MUTED2, fontSize: "13px" }, children: "Loading PDF..." }),
|
|
1381
|
-
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1382
|
-
reactPdf.
|
|
1442
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
1443
|
+
reactPdf.Document,
|
|
1383
1444
|
{
|
|
1384
|
-
|
|
1385
|
-
|
|
1386
|
-
|
|
1387
|
-
|
|
1445
|
+
file: base64 ? `data:application/pdf;base64,${base64}` : url,
|
|
1446
|
+
onLoadSuccess: handleLoad,
|
|
1447
|
+
onLoadError,
|
|
1448
|
+
loading: "",
|
|
1449
|
+
error: "",
|
|
1450
|
+
children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
1451
|
+
reactPdf.Page,
|
|
1452
|
+
{
|
|
1453
|
+
pageNumber: currentPage,
|
|
1454
|
+
width: 540,
|
|
1455
|
+
renderTextLayer: true,
|
|
1456
|
+
renderAnnotationLayer: true
|
|
1457
|
+
}
|
|
1458
|
+
)
|
|
1388
1459
|
}
|
|
1389
|
-
)
|
|
1460
|
+
)
|
|
1390
1461
|
] })
|
|
1391
1462
|
] });
|
|
1392
1463
|
}
|
|
1393
1464
|
var init_PdfViewer = __esm({
|
|
1394
1465
|
"src/composites/document-preview/PdfViewer.tsx"() {
|
|
1395
1466
|
"use client";
|
|
1467
|
+
init_pdfWorkerProbe();
|
|
1396
1468
|
init_ThemeContext();
|
|
1397
|
-
reactPdf.pdfjs
|
|
1469
|
+
resolvePdfWorkerSrc(reactPdf.pdfjs);
|
|
1398
1470
|
}
|
|
1399
1471
|
});
|
|
1400
1472
|
|
|
@@ -1405,13 +1477,13 @@ __export(ExcelViewer_exports, {
|
|
|
1405
1477
|
});
|
|
1406
1478
|
function ExcelViewer({ url, base64, onLoadSuccess }) {
|
|
1407
1479
|
const { BORDER: BORDER3, MUTED: MUTED2, PAPER: PAPER2, SURFACE: SURFACE2 } = useTheme();
|
|
1408
|
-
const [sheetNames, setSheetNames] =
|
|
1409
|
-
const [activeSheet, setActiveSheet] =
|
|
1410
|
-
const [data, setData] =
|
|
1411
|
-
const [loading, setLoading] =
|
|
1412
|
-
const [error, setError] =
|
|
1413
|
-
const wbRef =
|
|
1414
|
-
|
|
1480
|
+
const [sheetNames, setSheetNames] = React46.useState([]);
|
|
1481
|
+
const [activeSheet, setActiveSheet] = React46.useState(0);
|
|
1482
|
+
const [data, setData] = React46.useState([]);
|
|
1483
|
+
const [loading, setLoading] = React46.useState(true);
|
|
1484
|
+
const [error, setError] = React46.useState(null);
|
|
1485
|
+
const wbRef = React46.useRef(null);
|
|
1486
|
+
React46.useEffect(() => {
|
|
1415
1487
|
let cancelled = false;
|
|
1416
1488
|
setLoading(true);
|
|
1417
1489
|
setError(null);
|
|
@@ -1469,7 +1541,7 @@ function ExcelViewer({ url, base64, onLoadSuccess }) {
|
|
|
1469
1541
|
const rows = XLSX__namespace.utils.sheet_to_json(wbRef.current.Sheets[wbRef.current.SheetNames[idx]], { header: 1 });
|
|
1470
1542
|
setData(rows);
|
|
1471
1543
|
};
|
|
1472
|
-
|
|
1544
|
+
React46.useEffect(() => {
|
|
1473
1545
|
if (sheetNames.length <= 1) return;
|
|
1474
1546
|
const handler = (e) => {
|
|
1475
1547
|
var _a;
|
|
@@ -1595,10 +1667,10 @@ __export(CsvViewer_exports, {
|
|
|
1595
1667
|
});
|
|
1596
1668
|
function CsvViewer({ url, base64, delimiter, maxRows }) {
|
|
1597
1669
|
const { BORDER: BORDER3, MUTED: MUTED2, PAPER: PAPER2 } = useTheme();
|
|
1598
|
-
const [rows, setRows] =
|
|
1599
|
-
const [loading, setLoading] =
|
|
1600
|
-
const [error, setError] =
|
|
1601
|
-
|
|
1670
|
+
const [rows, setRows] = React46.useState([]);
|
|
1671
|
+
const [loading, setLoading] = React46.useState(true);
|
|
1672
|
+
const [error, setError] = React46.useState(null);
|
|
1673
|
+
React46.useEffect(() => {
|
|
1602
1674
|
let cancelled = false;
|
|
1603
1675
|
setLoading(true);
|
|
1604
1676
|
setError(null);
|
|
@@ -1717,10 +1789,10 @@ __export(TextViewer_exports, {
|
|
|
1717
1789
|
});
|
|
1718
1790
|
function TextViewer({ url, base64, markdown = false, maxLines }) {
|
|
1719
1791
|
const { MUTED: MUTED2 } = useTheme();
|
|
1720
|
-
const [text, setText] =
|
|
1721
|
-
const [loading, setLoading] =
|
|
1722
|
-
const [error, setError] =
|
|
1723
|
-
|
|
1792
|
+
const [text, setText] = React46.useState("");
|
|
1793
|
+
const [loading, setLoading] = React46.useState(true);
|
|
1794
|
+
const [error, setError] = React46.useState(null);
|
|
1795
|
+
React46.useEffect(() => {
|
|
1724
1796
|
let cancelled = false;
|
|
1725
1797
|
setLoading(true);
|
|
1726
1798
|
setError(null);
|
|
@@ -1818,10 +1890,10 @@ function sanitize(html) {
|
|
|
1818
1890
|
}
|
|
1819
1891
|
function DocxViewer({ url, base64 }) {
|
|
1820
1892
|
const { MUTED: MUTED2, BORDER: BORDER3, SURFACE: SURFACE2 } = useTheme();
|
|
1821
|
-
const [html, setHtml] =
|
|
1822
|
-
const [loading, setLoading] =
|
|
1823
|
-
const [error, setError] =
|
|
1824
|
-
|
|
1893
|
+
const [html, setHtml] = React46.useState("");
|
|
1894
|
+
const [loading, setLoading] = React46.useState(true);
|
|
1895
|
+
const [error, setError] = React46.useState(null);
|
|
1896
|
+
React46.useEffect(() => {
|
|
1825
1897
|
let cancelled = false;
|
|
1826
1898
|
setLoading(true);
|
|
1827
1899
|
setError(null);
|
|
@@ -1900,6 +1972,89 @@ var init_DocxViewer = __esm({
|
|
|
1900
1972
|
init_decode();
|
|
1901
1973
|
}
|
|
1902
1974
|
});
|
|
1975
|
+
|
|
1976
|
+
// src/shared/viewers/HtmlViewer.tsx
|
|
1977
|
+
var HtmlViewer_exports = {};
|
|
1978
|
+
__export(HtmlViewer_exports, {
|
|
1979
|
+
HtmlViewer: () => HtmlViewer
|
|
1980
|
+
});
|
|
1981
|
+
function HtmlViewer({ url, base64, height = 480 }) {
|
|
1982
|
+
const { MUTED: MUTED2 } = useTheme();
|
|
1983
|
+
const [html, setHtml] = React46.useState("");
|
|
1984
|
+
const [loading, setLoading] = React46.useState(true);
|
|
1985
|
+
const [error, setError] = React46.useState(null);
|
|
1986
|
+
React46.useEffect(() => {
|
|
1987
|
+
let cancelled = false;
|
|
1988
|
+
setLoading(true);
|
|
1989
|
+
setError(null);
|
|
1990
|
+
if (base64) {
|
|
1991
|
+
try {
|
|
1992
|
+
if (!cancelled) {
|
|
1993
|
+
setHtml(base64ToText(base64));
|
|
1994
|
+
setLoading(false);
|
|
1995
|
+
}
|
|
1996
|
+
} catch (e) {
|
|
1997
|
+
if (!cancelled) {
|
|
1998
|
+
setError(e instanceof Error ? e.message : "Failed to decode HTML");
|
|
1999
|
+
setLoading(false);
|
|
2000
|
+
}
|
|
2001
|
+
}
|
|
2002
|
+
return () => {
|
|
2003
|
+
cancelled = true;
|
|
2004
|
+
};
|
|
2005
|
+
}
|
|
2006
|
+
if (!url) {
|
|
2007
|
+
setError("No file source provided");
|
|
2008
|
+
setLoading(false);
|
|
2009
|
+
return () => {
|
|
2010
|
+
cancelled = true;
|
|
2011
|
+
};
|
|
2012
|
+
}
|
|
2013
|
+
fetch(url).then((r) => {
|
|
2014
|
+
if (!r.ok) throw new Error(`Failed to fetch: ${r.status}`);
|
|
2015
|
+
return r.text();
|
|
2016
|
+
}).then((t) => {
|
|
2017
|
+
if (cancelled) return;
|
|
2018
|
+
setHtml(t);
|
|
2019
|
+
setLoading(false);
|
|
2020
|
+
}).catch((e) => {
|
|
2021
|
+
if (cancelled) return;
|
|
2022
|
+
setError(e.message);
|
|
2023
|
+
setLoading(false);
|
|
2024
|
+
});
|
|
2025
|
+
return () => {
|
|
2026
|
+
cancelled = true;
|
|
2027
|
+
};
|
|
2028
|
+
}, [url, base64]);
|
|
2029
|
+
if (loading) {
|
|
2030
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { style: { padding: "24px", color: MUTED2, fontSize: "13px", textAlign: "center" }, children: "Loading\u2026" });
|
|
2031
|
+
}
|
|
2032
|
+
if (error) {
|
|
2033
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { style: { padding: "24px", color: "#dc2626", fontSize: "13px", textAlign: "center" }, children: error });
|
|
2034
|
+
}
|
|
2035
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
2036
|
+
"iframe",
|
|
2037
|
+
{
|
|
2038
|
+
title: "HTML preview",
|
|
2039
|
+
sandbox: "",
|
|
2040
|
+
srcDoc: html,
|
|
2041
|
+
style: {
|
|
2042
|
+
width: "100%",
|
|
2043
|
+
height: `${height}px`,
|
|
2044
|
+
border: "none",
|
|
2045
|
+
background: "white",
|
|
2046
|
+
display: "block"
|
|
2047
|
+
}
|
|
2048
|
+
}
|
|
2049
|
+
);
|
|
2050
|
+
}
|
|
2051
|
+
var init_HtmlViewer = __esm({
|
|
2052
|
+
"src/shared/viewers/HtmlViewer.tsx"() {
|
|
2053
|
+
"use client";
|
|
2054
|
+
init_ThemeContext();
|
|
2055
|
+
init_decode();
|
|
2056
|
+
}
|
|
2057
|
+
});
|
|
1903
2058
|
var dataTableSchema = zod.z.object({
|
|
1904
2059
|
type: zod.z.literal("data-table"),
|
|
1905
2060
|
title: zod.z.string().optional(),
|
|
@@ -6050,16 +6205,16 @@ var DOT_COLOR = "#aaaaaa";
|
|
|
6050
6205
|
var DOT_HOVER = "#555555";
|
|
6051
6206
|
function ComponentActions({ children, onDownloadCSV, columnConfig, filename = "component" }) {
|
|
6052
6207
|
const { BORDER: BORDER3, MUTED: MUTED2, SURFACE: SURFACE2, SURFACE_MUTED: SURFACE_MUTED2 } = useTheme();
|
|
6053
|
-
const [open, setOpen] =
|
|
6054
|
-
const [view, setView] =
|
|
6055
|
-
const contentRef =
|
|
6056
|
-
const menuRef =
|
|
6057
|
-
const btnRef =
|
|
6058
|
-
const close =
|
|
6208
|
+
const [open, setOpen] = React46.useState(false);
|
|
6209
|
+
const [view, setView] = React46.useState("main");
|
|
6210
|
+
const contentRef = React46.useRef(null);
|
|
6211
|
+
const menuRef = React46.useRef(null);
|
|
6212
|
+
const btnRef = React46.useRef(null);
|
|
6213
|
+
const close = React46.useCallback(() => {
|
|
6059
6214
|
setOpen(false);
|
|
6060
6215
|
setView("main");
|
|
6061
6216
|
}, []);
|
|
6062
|
-
|
|
6217
|
+
React46.useEffect(() => {
|
|
6063
6218
|
if (!open) return;
|
|
6064
6219
|
const handler = (e) => {
|
|
6065
6220
|
var _a, _b;
|
|
@@ -6070,7 +6225,7 @@ function ComponentActions({ children, onDownloadCSV, columnConfig, filename = "c
|
|
|
6070
6225
|
document.addEventListener("mousedown", handler);
|
|
6071
6226
|
return () => document.removeEventListener("mousedown", handler);
|
|
6072
6227
|
}, [open, close]);
|
|
6073
|
-
const handleDownloadPNG =
|
|
6228
|
+
const handleDownloadPNG = React46.useCallback(async () => {
|
|
6074
6229
|
if (!contentRef.current) return;
|
|
6075
6230
|
try {
|
|
6076
6231
|
const url = await htmlToImage.toPng(contentRef.current, { backgroundColor: "white", pixelRatio: 2 });
|
|
@@ -6082,7 +6237,7 @@ function ComponentActions({ children, onDownloadCSV, columnConfig, filename = "c
|
|
|
6082
6237
|
}
|
|
6083
6238
|
close();
|
|
6084
6239
|
}, [filename, close]);
|
|
6085
|
-
const handleCSV =
|
|
6240
|
+
const handleCSV = React46.useCallback(() => {
|
|
6086
6241
|
onDownloadCSV == null ? void 0 : onDownloadCSV();
|
|
6087
6242
|
close();
|
|
6088
6243
|
}, [onDownloadCSV, close]);
|
|
@@ -6195,12 +6350,12 @@ function MenuButton({ label, onClick }) {
|
|
|
6195
6350
|
);
|
|
6196
6351
|
}
|
|
6197
6352
|
function useColumnVisibility(columns) {
|
|
6198
|
-
const [hidden, setHidden] =
|
|
6199
|
-
const visibleColumns =
|
|
6353
|
+
const [hidden, setHidden] = React46.useState(/* @__PURE__ */ new Set());
|
|
6354
|
+
const visibleColumns = React46.useMemo(
|
|
6200
6355
|
() => columns.filter((c) => !hidden.has(c.key)),
|
|
6201
6356
|
[columns, hidden]
|
|
6202
6357
|
);
|
|
6203
|
-
const toggle =
|
|
6358
|
+
const toggle = React46.useCallback((key) => {
|
|
6204
6359
|
setHidden((prev) => {
|
|
6205
6360
|
const next = new Set(prev);
|
|
6206
6361
|
if (next.has(key)) next.delete(key);
|
|
@@ -6208,8 +6363,8 @@ function useColumnVisibility(columns) {
|
|
|
6208
6363
|
return next;
|
|
6209
6364
|
});
|
|
6210
6365
|
}, []);
|
|
6211
|
-
const showAll =
|
|
6212
|
-
const hideAll =
|
|
6366
|
+
const showAll = React46.useCallback(() => setHidden(/* @__PURE__ */ new Set()), []);
|
|
6367
|
+
const hideAll = React46.useCallback(
|
|
6213
6368
|
() => setHidden(new Set(columns.map((c) => c.key))),
|
|
6214
6369
|
[columns]
|
|
6215
6370
|
);
|
|
@@ -6466,9 +6621,9 @@ function AlertResolver(p) {
|
|
|
6466
6621
|
// src/composites/stat-grid/resolver.tsx
|
|
6467
6622
|
init_Markdown();
|
|
6468
6623
|
function FitText({ children, max = 22, min = 13, title, className, style }) {
|
|
6469
|
-
const ref =
|
|
6470
|
-
const [size, setSize] =
|
|
6471
|
-
|
|
6624
|
+
const ref = React46.useRef(null);
|
|
6625
|
+
const [size, setSize] = React46.useState(max);
|
|
6626
|
+
React46.useLayoutEffect(() => {
|
|
6472
6627
|
const el = ref.current;
|
|
6473
6628
|
if (!el) return void 0;
|
|
6474
6629
|
const fit = () => {
|
|
@@ -6557,7 +6712,7 @@ init_ThemeContext();
|
|
|
6557
6712
|
function TabsPanelResolver(p) {
|
|
6558
6713
|
var _a;
|
|
6559
6714
|
const { BORDER: BORDER3, MUTED: MUTED2, PAPER: PAPER2, SURFACE: SURFACE2, ACCENT: ACCENT2 } = useTheme();
|
|
6560
|
-
const [activeIdx, setActiveIdx] =
|
|
6715
|
+
const [activeIdx, setActiveIdx] = React46.useState(0);
|
|
6561
6716
|
const activeTab = p.tabs[activeIdx];
|
|
6562
6717
|
return /* @__PURE__ */ jsxRuntime.jsx(ComponentActions, { filename: "tabs-panel", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { width: "100%", display: "flex", flexDirection: "column", gap: "0" }, children: [
|
|
6563
6718
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -6821,7 +6976,7 @@ var thStyle = (MUTED2, BORDER3, PAPER2) => ({
|
|
|
6821
6976
|
function ScreenerTableResolver(p) {
|
|
6822
6977
|
var _a, _b, _c, _d, _e, _f;
|
|
6823
6978
|
const { ACCENT: ACCENT2, BORDER: BORDER3, BORDER_SOFT: BORDER_SOFT2, MUTED: MUTED2, PAPER: PAPER2, SURFACE: SURFACE2, SURFACE_MUTED: SURFACE_MUTED2 } = useTheme();
|
|
6824
|
-
const [activeFilters, setActiveFilters] =
|
|
6979
|
+
const [activeFilters, setActiveFilters] = React46.useState(new Set((_a = p.activeFilters) != null ? _a : []));
|
|
6825
6980
|
const { visibleColumns, hidden, toggle, showAll, hideAll, allColumns } = useColumnVisibility((_b = p.columns) != null ? _b : []);
|
|
6826
6981
|
const toggleFilter = (f) => setActiveFilters((prev) => {
|
|
6827
6982
|
const next = new Set(prev);
|
|
@@ -6891,7 +7046,7 @@ var th2 = (MUTED2, BORDER3, PAPER2) => ({
|
|
|
6891
7046
|
function GroupRows({ group, columns, depth }) {
|
|
6892
7047
|
var _a, _b;
|
|
6893
7048
|
const { MUTED: MUTED2, PAPER: PAPER2, BORDER_SOFT: BORDER_SOFT2 } = useTheme();
|
|
6894
|
-
const [open, setOpen] =
|
|
7049
|
+
const [open, setOpen] = React46.useState(true);
|
|
6895
7050
|
const indent = depth * 14;
|
|
6896
7051
|
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
6897
7052
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
@@ -6996,7 +7151,7 @@ var dotColor = {
|
|
|
6996
7151
|
function NewsFeedResolver(p) {
|
|
6997
7152
|
var _a, _b;
|
|
6998
7153
|
const { ACCENT: ACCENT2, MUTED: MUTED2, SURFACE: SURFACE2, SHADOW: SHADOW2 } = useTheme();
|
|
6999
|
-
const [filter, setFilter] =
|
|
7154
|
+
const [filter, setFilter] = React46.useState(null);
|
|
7000
7155
|
const sentiments = ["positive", "neutral", "negative"].filter(
|
|
7001
7156
|
(s) => {
|
|
7002
7157
|
var _a2;
|
|
@@ -7038,9 +7193,9 @@ function NewsFeedResolver(p) {
|
|
|
7038
7193
|
] }) });
|
|
7039
7194
|
}
|
|
7040
7195
|
function useSeriesToggle(seriesKeys) {
|
|
7041
|
-
const [hidden, setHidden] =
|
|
7042
|
-
const isVisible =
|
|
7043
|
-
const toggle =
|
|
7196
|
+
const [hidden, setHidden] = React46.useState(/* @__PURE__ */ new Set());
|
|
7197
|
+
const isVisible = React46.useCallback((key) => !hidden.has(key), [hidden]);
|
|
7198
|
+
const toggle = React46.useCallback((key) => {
|
|
7044
7199
|
setHidden((prev) => {
|
|
7045
7200
|
const next = new Set(prev);
|
|
7046
7201
|
if (next.has(key)) next.delete(key);
|
|
@@ -7048,7 +7203,7 @@ function useSeriesToggle(seriesKeys) {
|
|
|
7048
7203
|
return next;
|
|
7049
7204
|
});
|
|
7050
7205
|
}, []);
|
|
7051
|
-
const showAll =
|
|
7206
|
+
const showAll = React46.useCallback(() => setHidden(/* @__PURE__ */ new Set()), []);
|
|
7052
7207
|
return { hidden, isVisible, toggle, showAll, allKeys: seriesKeys };
|
|
7053
7208
|
}
|
|
7054
7209
|
|
|
@@ -7353,7 +7508,7 @@ function WaterfallChartResolver(p) {
|
|
|
7353
7508
|
}
|
|
7354
7509
|
init_ThemeContext();
|
|
7355
7510
|
init_theme();
|
|
7356
|
-
var FlowGraph2 =
|
|
7511
|
+
var FlowGraph2 = React46__default.default.lazy(
|
|
7357
7512
|
() => Promise.resolve().then(() => (init_FlowGraph(), FlowGraph_exports)).then((m) => ({ default: m.FlowGraph }))
|
|
7358
7513
|
);
|
|
7359
7514
|
function FlowCanvasRenderer({
|
|
@@ -7394,7 +7549,7 @@ function FlowCanvasRenderer({
|
|
|
7394
7549
|
overflow: "hidden",
|
|
7395
7550
|
background: SURFACE2,
|
|
7396
7551
|
position: "relative"
|
|
7397
|
-
}, diagram ? {} : { height: "320px" }), children: diagram ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
7552
|
+
}, diagram ? {} : { height: "320px" }), children: diagram ? /* @__PURE__ */ jsxRuntime.jsx(React46.Suspense, { fallback: null, children: /* @__PURE__ */ jsxRuntime.jsx(FlowGraph2, { diagram, title, autoplay, nodeStates }) }) : /* @__PURE__ */ jsxRuntime.jsx("div", { style: {
|
|
7398
7553
|
position: "absolute",
|
|
7399
7554
|
inset: 0,
|
|
7400
7555
|
display: "flex",
|
|
@@ -7629,7 +7784,7 @@ function TrialBalanceResolver(p) {
|
|
|
7629
7784
|
gDebit += a.debit;
|
|
7630
7785
|
gCredit += a.credit;
|
|
7631
7786
|
});
|
|
7632
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
7787
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(React46__default.default.Fragment, { children: [
|
|
7633
7788
|
/* @__PURE__ */ jsxRuntime.jsx("tr", { children: /* @__PURE__ */ jsxRuntime.jsx("td", { colSpan: 4, style: {
|
|
7634
7789
|
padding: "8px 12px",
|
|
7635
7790
|
fontSize: "12px",
|
|
@@ -8167,7 +8322,7 @@ function ItemRow({ item }) {
|
|
|
8167
8322
|
}
|
|
8168
8323
|
function Section({ section }) {
|
|
8169
8324
|
const { BORDER: BORDER3, MUTED: MUTED2, SURFACE: SURFACE2 } = useTheme();
|
|
8170
|
-
const [open, setOpen] =
|
|
8325
|
+
const [open, setOpen] = React46.useState(true);
|
|
8171
8326
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
8172
8327
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
8173
8328
|
"button",
|
|
@@ -8290,7 +8445,7 @@ function ReconciliationViewResolver(p) {
|
|
|
8290
8445
|
const { BORDER: BORDER3, BORDER_SOFT: BORDER_SOFT2, MUTED: MUTED2, PAPER: PAPER2, ACCENT: ACCENT2, SURFACE: SURFACE2, SURFACE_MUTED: SURFACE_MUTED2 } = useTheme();
|
|
8291
8446
|
const sourceA = (_a = p.sourceA) != null ? _a : { label: "Source A" };
|
|
8292
8447
|
const sourceB = (_b = p.sourceB) != null ? _b : { label: "Source B" };
|
|
8293
|
-
const [activeTab, setActiveTab] =
|
|
8448
|
+
const [activeTab, setActiveTab] = React46.useState("matched");
|
|
8294
8449
|
const balanceA = (_d = (_c = p.summary) == null ? void 0 : _c.balanceA) != null ? _d : 0;
|
|
8295
8450
|
const balanceB = (_f = (_e = p.summary) == null ? void 0 : _e.balanceB) != null ? _f : 0;
|
|
8296
8451
|
const difference = (_h = (_g = p.summary) == null ? void 0 : _g.difference) != null ? _h : balanceA - balanceB;
|
|
@@ -8936,7 +9091,7 @@ function ChangesView({ changes }) {
|
|
|
8936
9091
|
function EventCard({ event }) {
|
|
8937
9092
|
var _a;
|
|
8938
9093
|
const { BORDER: BORDER3, MUTED: MUTED2, ACCENT: ACCENT2, SURFACE: SURFACE2 } = useTheme();
|
|
8939
|
-
const [showChanges, setShowChanges] =
|
|
9094
|
+
const [showChanges, setShowChanges] = React46.useState(false);
|
|
8940
9095
|
const ac = (_a = actionConfig[event.action]) != null ? _a : actionConfig.commented;
|
|
8941
9096
|
const hasChanges = event.changes && event.changes.length > 0;
|
|
8942
9097
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", gap: "12px", position: "relative" }, children: [
|
|
@@ -8994,23 +9149,23 @@ function AuditTrailResolver(p) {
|
|
|
8994
9149
|
}
|
|
8995
9150
|
init_Markdown();
|
|
8996
9151
|
function useFullscreen(ref) {
|
|
8997
|
-
const [isFullscreen, setIsFullscreen] =
|
|
8998
|
-
|
|
9152
|
+
const [isFullscreen, setIsFullscreen] = React46.useState(false);
|
|
9153
|
+
React46.useEffect(() => {
|
|
8999
9154
|
const handler = () => {
|
|
9000
9155
|
setIsFullscreen(!!document.fullscreenElement);
|
|
9001
9156
|
};
|
|
9002
9157
|
document.addEventListener("fullscreenchange", handler);
|
|
9003
9158
|
return () => document.removeEventListener("fullscreenchange", handler);
|
|
9004
9159
|
}, []);
|
|
9005
|
-
const enter =
|
|
9160
|
+
const enter = React46.useCallback(() => {
|
|
9006
9161
|
var _a, _b;
|
|
9007
9162
|
(_b = (_a = ref.current) == null ? void 0 : _a.requestFullscreen) == null ? void 0 : _b.call(_a);
|
|
9008
9163
|
}, [ref]);
|
|
9009
|
-
const exit =
|
|
9164
|
+
const exit = React46.useCallback(() => {
|
|
9010
9165
|
var _a;
|
|
9011
9166
|
if (document.fullscreenElement) (_a = document.exitFullscreen) == null ? void 0 : _a.call(document);
|
|
9012
9167
|
}, []);
|
|
9013
|
-
const toggle =
|
|
9168
|
+
const toggle = React46.useCallback(() => {
|
|
9014
9169
|
if (isFullscreen) exit();
|
|
9015
9170
|
else enter();
|
|
9016
9171
|
}, [isFullscreen, enter, exit]);
|
|
@@ -9020,10 +9175,11 @@ function useFullscreen(ref) {
|
|
|
9020
9175
|
// src/composites/document-preview/resolver.tsx
|
|
9021
9176
|
init_theme();
|
|
9022
9177
|
init_ThemeContext();
|
|
9023
|
-
|
|
9178
|
+
init_pdfWorkerProbe();
|
|
9179
|
+
var PdfViewer2 = React46__default.default.lazy(
|
|
9024
9180
|
() => Promise.resolve().then(() => (init_PdfViewer(), PdfViewer_exports)).then((m) => ({ default: m.PdfViewer }))
|
|
9025
9181
|
);
|
|
9026
|
-
var ExcelViewer2 =
|
|
9182
|
+
var ExcelViewer2 = React46__default.default.lazy(
|
|
9027
9183
|
() => Promise.resolve().then(() => (init_ExcelViewer(), ExcelViewer_exports)).then((m) => ({ default: m.ExcelViewer }))
|
|
9028
9184
|
);
|
|
9029
9185
|
var highlightColors = {
|
|
@@ -9074,8 +9230,8 @@ function DownloadIcon() {
|
|
|
9074
9230
|
function DocumentPreviewResolver(p) {
|
|
9075
9231
|
var _a, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u;
|
|
9076
9232
|
const { BORDER: BORDER3, MUTED: MUTED2, PAPER: PAPER2, ACCENT: ACCENT2, SURFACE: SURFACE2, SHADOW: SHADOW2 } = useTheme();
|
|
9077
|
-
const [currentPage, setCurrentPage] =
|
|
9078
|
-
const containerRef =
|
|
9233
|
+
const [currentPage, setCurrentPage] = React46.useState(0);
|
|
9234
|
+
const containerRef = React46.useRef(null);
|
|
9079
9235
|
const { isFullscreen, toggle } = useFullscreen(containerRef);
|
|
9080
9236
|
const hasRealFile = !!(((_a = p.source) == null ? void 0 : _a.url) || ((_b = p.source) == null ? void 0 : _b.base64));
|
|
9081
9237
|
const isPdf = p.documentType === "pdf";
|
|
@@ -9083,9 +9239,15 @@ function DocumentPreviewResolver(p) {
|
|
|
9083
9239
|
const totalPages = ((_c = p.pages) != null ? _c : []).length;
|
|
9084
9240
|
const page = p.pages[currentPage];
|
|
9085
9241
|
const pageHighlights = ((_d = p.highlights) != null ? _d : []).filter((h) => h.pageIndex === currentPage);
|
|
9086
|
-
const
|
|
9242
|
+
const [pdfFailed, setPdfFailed] = React46.useState(false);
|
|
9243
|
+
const pdfWorkerReady = usePdfWorkerReady(hasRealFile && isPdf);
|
|
9244
|
+
const pdfReady = pdfFailed ? false : pdfWorkerReady;
|
|
9245
|
+
const showPdfViewer = hasRealFile && isPdf && pdfReady === true;
|
|
9246
|
+
const pdfPending = hasRealFile && isPdf && pdfReady === null;
|
|
9247
|
+
const handlePdfLoad = React46.useCallback(() => {
|
|
9087
9248
|
}, []);
|
|
9088
|
-
const
|
|
9249
|
+
const handlePdfError = React46.useCallback(() => setPdfFailed(true), []);
|
|
9250
|
+
const handleExcelLoad = React46.useCallback(() => {
|
|
9089
9251
|
}, []);
|
|
9090
9252
|
return /* @__PURE__ */ jsxRuntime.jsx(ComponentActions, { filename: (_e = p.title) != null ? _e : "document-preview", children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
9091
9253
|
"div",
|
|
@@ -9178,7 +9340,7 @@ function DocumentPreviewResolver(p) {
|
|
|
9178
9340
|
children: pg.label
|
|
9179
9341
|
},
|
|
9180
9342
|
i
|
|
9181
|
-
)) }) : !hasRealFile && totalPages > 1 && /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", alignItems: "center", gap: "8px", padding: "6px 14px", borderLeft: `1px solid ${BORDER3}`, borderRight: `1px solid ${BORDER3}`, background: SURFACE2 }, children: [
|
|
9343
|
+
)) }) : (!hasRealFile || pdfReady === false) && totalPages > 1 && /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", alignItems: "center", gap: "8px", padding: "6px 14px", borderLeft: `1px solid ${BORDER3}`, borderRight: `1px solid ${BORDER3}`, background: SURFACE2 }, children: [
|
|
9182
9344
|
/* @__PURE__ */ jsxRuntime.jsx("button", { onClick: () => setCurrentPage(Math.max(0, currentPage - 1)), disabled: currentPage === 0, style: { border: `1px solid ${BORDER3}`, borderRadius: "4px", padding: "2px 8px", background: SURFACE2, cursor: "pointer", fontSize: "12px", color: currentPage === 0 ? BORDER3 : MUTED2 }, children: "\u2190" }),
|
|
9183
9345
|
/* @__PURE__ */ jsxRuntime.jsxs("span", { style: { fontSize: "12px", color: MUTED2 }, children: [
|
|
9184
9346
|
currentPage + 1,
|
|
@@ -9198,7 +9360,7 @@ function DocumentPreviewResolver(p) {
|
|
|
9198
9360
|
display: "flex",
|
|
9199
9361
|
flexDirection: "column"
|
|
9200
9362
|
}, children: [
|
|
9201
|
-
|
|
9363
|
+
showPdfViewer ? /* @__PURE__ */ jsxRuntime.jsx(React46.Suspense, { fallback: null, children: /* @__PURE__ */ jsxRuntime.jsx(PdfViewer2, { url: (_q = p.source) == null ? void 0 : _q.url, base64: (_r = p.source) == null ? void 0 : _r.base64, onLoadSuccess: handlePdfLoad, onLoadError: handlePdfError }) }) : pdfPending ? /* @__PURE__ */ jsxRuntime.jsx("div", { style: { display: "flex", alignItems: "center", justifyContent: "center", height: "200px", color: MUTED2, fontSize: "13px" }, children: "Loading preview\u2026" }) : hasRealFile && isExcel ? /* @__PURE__ */ jsxRuntime.jsx(React46.Suspense, { fallback: null, children: /* @__PURE__ */ jsxRuntime.jsx(ExcelViewer2, { url: (_s = p.source) == null ? void 0 : _s.url, base64: (_t = p.source) == null ? void 0 : _t.base64, onLoadSuccess: handleExcelLoad }) }) : (page == null ? void 0 : page.imageUrl) ? /* @__PURE__ */ jsxRuntime.jsx("div", { style: { padding: "20px" }, children: /* @__PURE__ */ jsxRuntime.jsx("img", { src: page.imageUrl, alt: page.label, style: { maxWidth: "100%", borderRadius: "4px" } }) }) : (page == null ? void 0 : page.content) ? /* @__PURE__ */ jsxRuntime.jsx("div", { style: { fontFamily: "var(--font-sans, system-ui)", fontSize: "13px", color: "var(--foreground)", lineHeight: 1.6, margin: 0, padding: "20px" }, children: /* @__PURE__ */ jsxRuntime.jsx(Markdown, { content: page.content }) }) : /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", alignItems: "center", justifyContent: "center", height: "120px", color: MUTED2, fontSize: "13px" }, children: [
|
|
9202
9364
|
"No content available for ",
|
|
9203
9365
|
(_u = page == null ? void 0 : page.label) != null ? _u : "this page"
|
|
9204
9366
|
] }),
|
|
@@ -9263,7 +9425,7 @@ function ConfidenceBar({ confidence, height = 6 }) {
|
|
|
9263
9425
|
function StepCard({ step, isLast }) {
|
|
9264
9426
|
var _a;
|
|
9265
9427
|
const { ACCENT: ACCENT2, MUTED: MUTED2, BORDER: BORDER3, SURFACE_MUTED: SURFACE_MUTED2 } = useTheme();
|
|
9266
|
-
const [expanded, setExpanded] =
|
|
9428
|
+
const [expanded, setExpanded] = React46.useState(false);
|
|
9267
9429
|
const cfg = stepTypeConfig[step.stepType];
|
|
9268
9430
|
const detail = (_a = step.detail) != null ? _a : "";
|
|
9269
9431
|
const isLong = detail.length > 100;
|
|
@@ -9772,7 +9934,7 @@ function ExampleRow({ example }) {
|
|
|
9772
9934
|
}
|
|
9773
9935
|
function PartSection({ part, defaultOpen }) {
|
|
9774
9936
|
const { BORDER: BORDER3, MUTED: MUTED2, SURFACE: SURFACE2 } = useTheme();
|
|
9775
|
-
const [open, setOpen] =
|
|
9937
|
+
const [open, setOpen] = React46.useState(defaultOpen);
|
|
9776
9938
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
9777
9939
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
9778
9940
|
"button",
|
|
@@ -9902,7 +10064,7 @@ function EngagementPipelineResolver(p) {
|
|
|
9902
10064
|
const defaultActive = phases.findIndex(
|
|
9903
10065
|
(ph) => ph.status === "in-progress" || ph.status === "blocked"
|
|
9904
10066
|
);
|
|
9905
|
-
const [activeIdx, setActiveIdx] =
|
|
10067
|
+
const [activeIdx, setActiveIdx] = React46.useState(defaultActive >= 0 ? defaultActive : 0);
|
|
9906
10068
|
const activePhase = phases[activeIdx];
|
|
9907
10069
|
return /* @__PURE__ */ jsxRuntime.jsx(ComponentActions, { filename: (_b = p.title) != null ? _b : "engagement-pipeline", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { width: "100%", display: "flex", flexDirection: "column", gap: "12px" }, children: [
|
|
9908
10070
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", flexDirection: "column", gap: "4px" }, children: [
|
|
@@ -9986,7 +10148,7 @@ function EngagementPipelineResolver(p) {
|
|
|
9986
10148
|
const color = (_a2 = statusColor2[phase.status]) != null ? _a2 : "#d6d3d1";
|
|
9987
10149
|
const isCurrent = i === activeIdx;
|
|
9988
10150
|
const size = isCurrent ? 28 : 20;
|
|
9989
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
10151
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(React46__default.default.Fragment, { children: [
|
|
9990
10152
|
i > 0 && /* @__PURE__ */ jsxRuntime.jsx(
|
|
9991
10153
|
"div",
|
|
9992
10154
|
{
|
|
@@ -10294,7 +10456,7 @@ function Avatar({ name, avatar, hovered }) {
|
|
|
10294
10456
|
function EntityCardGridResolver(p) {
|
|
10295
10457
|
var _a, _b;
|
|
10296
10458
|
const { BORDER: BORDER3, MUTED: MUTED2, ACCENT: ACCENT2, SHADOW: SHADOW2 } = useTheme();
|
|
10297
|
-
const [hoveredId, setHoveredId] =
|
|
10459
|
+
const [hoveredId, setHoveredId] = React46.useState(null);
|
|
10298
10460
|
return /* @__PURE__ */ jsxRuntime.jsx(ComponentActions, { filename: (_a = p.title) != null ? _a : "entity-card-grid", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { width: "100%", display: "flex", flexDirection: "column", gap: "10px" }, children: [
|
|
10299
10461
|
p.title && /* @__PURE__ */ jsxRuntime.jsx(
|
|
10300
10462
|
"p",
|
|
@@ -10551,7 +10713,7 @@ function StepRow({ step }) {
|
|
|
10551
10713
|
function JobTrackerResolver(p) {
|
|
10552
10714
|
var _a, _b, _c, _d, _e, _f, _g;
|
|
10553
10715
|
const { BORDER: BORDER3, MUTED: MUTED2, ACCENT: ACCENT2, PAPER: PAPER2, SURFACE: SURFACE2, SURFACE_MUTED: SURFACE_MUTED2, SHADOW: SHADOW2 } = useTheme();
|
|
10554
|
-
const [stepsOpen, setStepsOpen] =
|
|
10716
|
+
const [stepsOpen, setStepsOpen] = React46.useState(true);
|
|
10555
10717
|
const barColor = (_a = statusColors[p.status]) != null ? _a : MUTED2;
|
|
10556
10718
|
const badge = (_b = statusBadgeConfig[p.status]) != null ? _b : statusBadgeConfig.queued;
|
|
10557
10719
|
const progress = (_c = p.progress) != null ? _c : p.status === "completed" ? 100 : 0;
|
|
@@ -10994,7 +11156,7 @@ function CitationCard({
|
|
|
10994
11156
|
}
|
|
10995
11157
|
function FollowUpItem({ text }) {
|
|
10996
11158
|
const { SECONDARY: SECONDARY2 } = useTheme();
|
|
10997
|
-
const [hovered, setHovered] =
|
|
11159
|
+
const [hovered, setHovered] = React46.useState(false);
|
|
10998
11160
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
10999
11161
|
"span",
|
|
11000
11162
|
{
|
|
@@ -11020,7 +11182,7 @@ function CitationMarker({
|
|
|
11020
11182
|
onClick
|
|
11021
11183
|
}) {
|
|
11022
11184
|
const { SECONDARY: SECONDARY2 } = useTheme();
|
|
11023
|
-
const [hovered, setHovered] =
|
|
11185
|
+
const [hovered, setHovered] = React46.useState(false);
|
|
11024
11186
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
11025
11187
|
"sup",
|
|
11026
11188
|
{
|
|
@@ -11049,7 +11211,7 @@ function CitationMarker({
|
|
|
11049
11211
|
function CitedAnswerResolver(p) {
|
|
11050
11212
|
var _a, _b, _c, _d, _e;
|
|
11051
11213
|
const { BORDER: BORDER3, MUTED: MUTED2, ACCENT: ACCENT2, SECONDARY: SECONDARY2, SURFACE: SURFACE2, SHADOW: SHADOW2 } = useTheme();
|
|
11052
|
-
const [expandedIds, setExpandedIds] =
|
|
11214
|
+
const [expandedIds, setExpandedIds] = React46.useState(/* @__PURE__ */ new Set());
|
|
11053
11215
|
const toggleCitation = (id) => {
|
|
11054
11216
|
setExpandedIds((prev) => {
|
|
11055
11217
|
const next = new Set(prev);
|
|
@@ -11354,7 +11516,7 @@ function TransactionFeedResolver(p) {
|
|
|
11354
11516
|
var _a, _b, _c, _d, _e;
|
|
11355
11517
|
const { BORDER: BORDER3, MUTED: MUTED2 } = useTheme();
|
|
11356
11518
|
const currency = (_a = p.currency) != null ? _a : "USD";
|
|
11357
|
-
const [hoveredIndex, setHoveredIndex] =
|
|
11519
|
+
const [hoveredIndex, setHoveredIndex] = React46.useState(null);
|
|
11358
11520
|
const hasBalance = ((_b = p.transactions) != null ? _b : []).some((tx) => tx.balance != null);
|
|
11359
11521
|
const totalInflows = p.transactions.filter((tx) => tx.amount > 0 && tx.status !== "reversed").reduce((sum, tx) => sum + tx.amount, 0);
|
|
11360
11522
|
const totalOutflows = p.transactions.filter((tx) => tx.amount < 0 && tx.status !== "reversed").reduce((sum, tx) => sum + tx.amount, 0);
|
|
@@ -11512,7 +11674,7 @@ function formatDate2(dateStr) {
|
|
|
11512
11674
|
function FileRow({ item }) {
|
|
11513
11675
|
var _a;
|
|
11514
11676
|
const { BORDER: BORDER3, MUTED: MUTED2, PAPER: PAPER2, SURFACE: SURFACE2, SECONDARY: SECONDARY2 } = useTheme();
|
|
11515
|
-
const [hovered, setHovered] =
|
|
11677
|
+
const [hovered, setHovered] = React46.useState(false);
|
|
11516
11678
|
const cfg = getDocConfig(item.docType);
|
|
11517
11679
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
11518
11680
|
"div",
|
|
@@ -11589,8 +11751,8 @@ function FileRow({ item }) {
|
|
|
11589
11751
|
}
|
|
11590
11752
|
function GroupSection({ groupName, items }) {
|
|
11591
11753
|
const { BORDER: BORDER3, MUTED: MUTED2, SURFACE: SURFACE2, SURFACE_MUTED: SURFACE_MUTED2 } = useTheme();
|
|
11592
|
-
const [open, setOpen] =
|
|
11593
|
-
const [headerHovered, setHeaderHovered] =
|
|
11754
|
+
const [open, setOpen] = React46.useState(true);
|
|
11755
|
+
const [headerHovered, setHeaderHovered] = React46.useState(false);
|
|
11594
11756
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
11595
11757
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
11596
11758
|
"button",
|
|
@@ -11706,7 +11868,7 @@ init_theme();
|
|
|
11706
11868
|
var FAMILIES = [
|
|
11707
11869
|
{ exts: ["csv", "tsv", "xls", "xlsx", "numbers"], fg: SEMANTIC.success.color, bg: SEMANTIC.success.bg },
|
|
11708
11870
|
{ exts: ["pdf"], fg: SEMANTIC.error.color, bg: SEMANTIC.error.bg },
|
|
11709
|
-
{ exts: ["doc", "docx", "txt", "md", "rtf", "pages"], fg: SEMANTIC.info.color, bg: SEMANTIC.info.bg },
|
|
11871
|
+
{ exts: ["doc", "docx", "txt", "md", "rtf", "pages", "html", "htm"], fg: SEMANTIC.info.color, bg: SEMANTIC.info.bg },
|
|
11710
11872
|
{ exts: ["json", "yaml", "yml", "xml", "toml"], fg: SEMANTIC.purple.color, bg: SEMANTIC.purple.bg },
|
|
11711
11873
|
{ exts: ["zip", "tar", "gz", "rar", "7z"], fg: SEMANTIC.warning.color, bg: SEMANTIC.warning.bg },
|
|
11712
11874
|
{ exts: ["png", "jpg", "jpeg", "gif", "svg", "webp", "bmp"], fg: SEMANTIC.info.color, bg: SEMANTIC.info.bg }
|
|
@@ -11733,7 +11895,9 @@ var PREVIEW_EXTS = {
|
|
|
11733
11895
|
txt: "text",
|
|
11734
11896
|
log: "text",
|
|
11735
11897
|
text: "text",
|
|
11736
|
-
docx: "docx"
|
|
11898
|
+
docx: "docx",
|
|
11899
|
+
html: "html",
|
|
11900
|
+
htm: "html"
|
|
11737
11901
|
};
|
|
11738
11902
|
function extOf(fileType, filename) {
|
|
11739
11903
|
var _a;
|
|
@@ -11744,6 +11908,7 @@ function extOf(fileType, filename) {
|
|
|
11744
11908
|
if (mime.includes("csv")) return "csv";
|
|
11745
11909
|
if (mime.includes("markdown")) return "md";
|
|
11746
11910
|
if (mime.includes("wordprocessing") || mime.includes("msword")) return "docx";
|
|
11911
|
+
if (mime.includes("html")) return "html";
|
|
11747
11912
|
if (mime.startsWith("text/")) return "txt";
|
|
11748
11913
|
} else if (fileType) {
|
|
11749
11914
|
const t = fileType.toLowerCase().replace(/[^a-z0-9]/g, "");
|
|
@@ -11777,17 +11942,32 @@ function isExpirySoon(expiresAt) {
|
|
|
11777
11942
|
|
|
11778
11943
|
// src/shared/viewers/PreviewHost.tsx
|
|
11779
11944
|
init_ThemeContext();
|
|
11780
|
-
|
|
11945
|
+
init_pdfWorkerProbe();
|
|
11946
|
+
var PdfViewer3 = React46.lazy(
|
|
11781
11947
|
() => Promise.resolve().then(() => (init_PdfViewer(), PdfViewer_exports)).then((m) => ({ default: m.PdfViewer }))
|
|
11782
11948
|
);
|
|
11783
|
-
var ExcelViewer3 =
|
|
11949
|
+
var ExcelViewer3 = React46.lazy(
|
|
11784
11950
|
() => Promise.resolve().then(() => (init_ExcelViewer(), ExcelViewer_exports)).then((m) => ({ default: m.ExcelViewer }))
|
|
11785
11951
|
);
|
|
11786
|
-
var CsvViewer2 =
|
|
11787
|
-
var TextViewer2 =
|
|
11788
|
-
var DocxViewer2 =
|
|
11952
|
+
var CsvViewer2 = React46.lazy(() => Promise.resolve().then(() => (init_CsvViewer(), CsvViewer_exports)).then((m) => ({ default: m.CsvViewer })));
|
|
11953
|
+
var TextViewer2 = React46.lazy(() => Promise.resolve().then(() => (init_TextViewer(), TextViewer_exports)).then((m) => ({ default: m.TextViewer })));
|
|
11954
|
+
var DocxViewer2 = React46.lazy(() => Promise.resolve().then(() => (init_DocxViewer(), DocxViewer_exports)).then((m) => ({ default: m.DocxViewer })));
|
|
11955
|
+
var HtmlViewer2 = React46.lazy(() => Promise.resolve().then(() => (init_HtmlViewer(), HtmlViewer_exports)).then((m) => ({ default: m.HtmlViewer })));
|
|
11789
11956
|
var PEEK_ROWS = 20;
|
|
11790
11957
|
var PEEK_LINES = 40;
|
|
11958
|
+
function GatedPdfViewer({ source }) {
|
|
11959
|
+
const { MUTED: MUTED2 } = useTheme();
|
|
11960
|
+
const [failed, setFailed] = React46.useState(false);
|
|
11961
|
+
const workerReady = usePdfWorkerReady(true);
|
|
11962
|
+
const ready = failed ? false : workerReady;
|
|
11963
|
+
if (ready === null) {
|
|
11964
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { style: { padding: "24px", color: MUTED2, fontSize: "13px", textAlign: "center" }, children: "Loading preview\u2026" });
|
|
11965
|
+
}
|
|
11966
|
+
if (ready === false) {
|
|
11967
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { style: { padding: "24px", color: MUTED2, fontSize: "13px", textAlign: "center" }, children: "Preview unavailable \u2014 download the file to view it." });
|
|
11968
|
+
}
|
|
11969
|
+
return /* @__PURE__ */ jsxRuntime.jsx(PdfViewer3, { url: source.url, base64: source.base64, onLoadError: () => setFailed(true) });
|
|
11970
|
+
}
|
|
11791
11971
|
function PreviewHost({ kind, source, mode = "full" }) {
|
|
11792
11972
|
const { MUTED: MUTED2 } = useTheme();
|
|
11793
11973
|
const peek = mode === "peek";
|
|
@@ -11795,7 +11975,7 @@ function PreviewHost({ kind, source, mode = "full" }) {
|
|
|
11795
11975
|
let viewer = null;
|
|
11796
11976
|
switch (kind) {
|
|
11797
11977
|
case "pdf":
|
|
11798
|
-
viewer = /* @__PURE__ */ jsxRuntime.jsx(
|
|
11978
|
+
viewer = /* @__PURE__ */ jsxRuntime.jsx(GatedPdfViewer, { source });
|
|
11799
11979
|
break;
|
|
11800
11980
|
case "excel":
|
|
11801
11981
|
viewer = /* @__PURE__ */ jsxRuntime.jsx(ExcelViewer3, { url: source.url, base64: source.base64 });
|
|
@@ -11812,10 +11992,13 @@ function PreviewHost({ kind, source, mode = "full" }) {
|
|
|
11812
11992
|
case "docx":
|
|
11813
11993
|
viewer = /* @__PURE__ */ jsxRuntime.jsx(DocxViewer2, { url: source.url, base64: source.base64 });
|
|
11814
11994
|
break;
|
|
11995
|
+
case "html":
|
|
11996
|
+
viewer = /* @__PURE__ */ jsxRuntime.jsx(HtmlViewer2, { url: source.url, base64: source.base64, height: peek ? 240 : 480 });
|
|
11997
|
+
break;
|
|
11815
11998
|
default:
|
|
11816
11999
|
return null;
|
|
11817
12000
|
}
|
|
11818
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
12001
|
+
return /* @__PURE__ */ jsxRuntime.jsx(React46.Suspense, { fallback, children: viewer });
|
|
11819
12002
|
}
|
|
11820
12003
|
|
|
11821
12004
|
// src/shared/PreviewModal.tsx
|
|
@@ -11831,7 +12014,7 @@ function PreviewModal({
|
|
|
11831
12014
|
onDownload
|
|
11832
12015
|
}) {
|
|
11833
12016
|
const { BORDER: BORDER3, MUTED: MUTED2, ACCENT: ACCENT2, SURFACE: SURFACE2, FOREGROUND: FOREGROUND2, SCRIM: SCRIM2 } = useTheme();
|
|
11834
|
-
|
|
12017
|
+
React46.useEffect(() => {
|
|
11835
12018
|
if (!open) return;
|
|
11836
12019
|
const onKey = (e) => {
|
|
11837
12020
|
if (e.key === "Escape") onClose();
|
|
@@ -12008,17 +12191,17 @@ function FileCard({
|
|
|
12008
12191
|
previewDisabled = false
|
|
12009
12192
|
}) {
|
|
12010
12193
|
const { BORDER: BORDER3, MUTED: MUTED2, ACCENT: ACCENT2, SURFACE: SURFACE2, SURFACE_MUTED: SURFACE_MUTED2, SHADOW: SHADOW2 } = useTheme();
|
|
12011
|
-
const [cardHover, setCardHover] =
|
|
12012
|
-
const [btnHover, setBtnHover] =
|
|
12013
|
-
const [pvHover, setPvHover] =
|
|
12194
|
+
const [cardHover, setCardHover] = React46.useState(false);
|
|
12195
|
+
const [btnHover, setBtnHover] = React46.useState(false);
|
|
12196
|
+
const [pvHover, setPvHover] = React46.useState(false);
|
|
12014
12197
|
const previewKind = previewKindFor(fileType, filename);
|
|
12015
12198
|
const canPreview = !previewDisabled && previewKind !== null && (!!previewUrl || !!fetchPreviewBlob);
|
|
12016
|
-
const [peekOpen, setPeekOpen] =
|
|
12017
|
-
const [modalOpen, setModalOpen] =
|
|
12018
|
-
const [source, setSource] =
|
|
12019
|
-
const [pvLoading, setPvLoading] =
|
|
12020
|
-
const [pvError, setPvError] =
|
|
12021
|
-
const ensureSource =
|
|
12199
|
+
const [peekOpen, setPeekOpen] = React46.useState(false);
|
|
12200
|
+
const [modalOpen, setModalOpen] = React46.useState(false);
|
|
12201
|
+
const [source, setSource] = React46.useState(previewUrl ? { url: previewUrl } : null);
|
|
12202
|
+
const [pvLoading, setPvLoading] = React46.useState(false);
|
|
12203
|
+
const [pvError, setPvError] = React46.useState(null);
|
|
12204
|
+
const ensureSource = React46.useCallback(async () => {
|
|
12022
12205
|
if (source) return source;
|
|
12023
12206
|
if (previewUrl) {
|
|
12024
12207
|
const s = { url: previewUrl };
|
|
@@ -12040,7 +12223,7 @@ function FileCard({
|
|
|
12040
12223
|
setPvLoading(false);
|
|
12041
12224
|
}
|
|
12042
12225
|
}, [source, previewUrl, fetchPreviewBlob]);
|
|
12043
|
-
const togglePeek =
|
|
12226
|
+
const togglePeek = React46.useCallback(async () => {
|
|
12044
12227
|
if (peekOpen) {
|
|
12045
12228
|
setPeekOpen(false);
|
|
12046
12229
|
return;
|
|
@@ -12048,7 +12231,7 @@ function FileCard({
|
|
|
12048
12231
|
setPeekOpen(true);
|
|
12049
12232
|
await ensureSource();
|
|
12050
12233
|
}, [peekOpen, ensureSource]);
|
|
12051
|
-
const openModal =
|
|
12234
|
+
const openModal = React46.useCallback(async () => {
|
|
12052
12235
|
const s = await ensureSource();
|
|
12053
12236
|
if (s) setModalOpen(true);
|
|
12054
12237
|
}, [ensureSource]);
|
|
@@ -12163,7 +12346,7 @@ function FileCard({
|
|
|
12163
12346
|
whiteSpace: "nowrap"
|
|
12164
12347
|
},
|
|
12165
12348
|
children: [
|
|
12166
|
-
metaTokens.map((t, i) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
12349
|
+
metaTokens.map((t, i) => /* @__PURE__ */ jsxRuntime.jsxs(React46__default.default.Fragment, { children: [
|
|
12167
12350
|
i > 0 && /* @__PURE__ */ jsxRuntime.jsx("span", { style: { color: MUTED2 }, children: "\xB7" }),
|
|
12168
12351
|
/* @__PURE__ */ jsxRuntime.jsx("span", { children: t })
|
|
12169
12352
|
] }, i)),
|
|
@@ -12508,7 +12691,7 @@ function ServiceCard({ item, isHovered, onHover, onLeave: onLeave2 }) {
|
|
|
12508
12691
|
function OpsDashboardResolver(p) {
|
|
12509
12692
|
var _a, _b, _c;
|
|
12510
12693
|
const { BORDER: BORDER3, MUTED: MUTED2 } = useTheme();
|
|
12511
|
-
const [hoveredId, setHoveredId] =
|
|
12694
|
+
const [hoveredId, setHoveredId] = React46.useState(null);
|
|
12512
12695
|
const hasRunning = ((_a = p.items) != null ? _a : []).some((item) => item.state === "running");
|
|
12513
12696
|
return /* @__PURE__ */ jsxRuntime.jsxs(ComponentActions, { filename: (_b = p.title) != null ? _b : "ops-dashboard", children: [
|
|
12514
12697
|
hasRunning && /* @__PURE__ */ jsxRuntime.jsx("style", { children: PULSE_KEYFRAMES }),
|
|
@@ -12562,8 +12745,8 @@ function formatDate3(value) {
|
|
|
12562
12745
|
}
|
|
12563
12746
|
function CopyButton({ value, rowHovered }) {
|
|
12564
12747
|
const { MUTED: MUTED2 } = useTheme();
|
|
12565
|
-
const [copied, setCopied] =
|
|
12566
|
-
const [btnHovered, setBtnHovered] =
|
|
12748
|
+
const [copied, setCopied] = React46.useState(false);
|
|
12749
|
+
const [btnHovered, setBtnHovered] = React46.useState(false);
|
|
12567
12750
|
const handleCopy = () => {
|
|
12568
12751
|
navigator.clipboard.writeText(value).then(() => {
|
|
12569
12752
|
setCopied(true);
|
|
@@ -12657,7 +12840,7 @@ function ValueCell({ item }) {
|
|
|
12657
12840
|
}
|
|
12658
12841
|
function KVRow({ item, isLast, index }) {
|
|
12659
12842
|
const { MUTED: MUTED2, BORDER: BORDER3, SURFACE: SURFACE2, SURFACE_MUTED: SURFACE_MUTED2 } = useTheme();
|
|
12660
|
-
const [hovered, setHovered] =
|
|
12843
|
+
const [hovered, setHovered] = React46.useState(false);
|
|
12661
12844
|
const altBg = index % 2 === 1 ? SURFACE_MUTED2 : SURFACE2;
|
|
12662
12845
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
12663
12846
|
"div",
|
|
@@ -12742,7 +12925,7 @@ function KeyValueListResolver(p) {
|
|
|
12742
12925
|
var _a3;
|
|
12743
12926
|
return sum + ((_a3 = g.items) != null ? _a3 : []).length;
|
|
12744
12927
|
}, 0);
|
|
12745
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
12928
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(React46__default.default.Fragment, { children: [
|
|
12746
12929
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
12747
12930
|
"div",
|
|
12748
12931
|
{
|
|
@@ -12920,7 +13103,7 @@ function BalanceSheetResolver(p) {
|
|
|
12920
13103
|
/* @__PURE__ */ jsxRuntime.jsxs("tbody", { children: [
|
|
12921
13104
|
((_p = p.sections) != null ? _p : []).map((section) => {
|
|
12922
13105
|
var _a2;
|
|
12923
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
13106
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(React46__default.default.Fragment, { children: [
|
|
12924
13107
|
/* @__PURE__ */ jsxRuntime.jsx("tr", { children: /* @__PURE__ */ jsxRuntime.jsx("td", { colSpan, style: {
|
|
12925
13108
|
padding: "8px 12px",
|
|
12926
13109
|
fontSize: "12px",
|
|
@@ -12933,7 +13116,7 @@ function BalanceSheetResolver(p) {
|
|
|
12933
13116
|
}, children: (_a2 = categoryLabels2[section.category]) != null ? _a2 : section.category }) }),
|
|
12934
13117
|
section.subsections.map((sub, si) => {
|
|
12935
13118
|
var _a3;
|
|
12936
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
13119
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(React46__default.default.Fragment, { children: [
|
|
12937
13120
|
/* @__PURE__ */ jsxRuntime.jsx("tr", { children: /* @__PURE__ */ jsxRuntime.jsx("td", { colSpan, style: {
|
|
12938
13121
|
padding: "6px 10px 6px 24px",
|
|
12939
13122
|
fontSize: "12px",
|
|
@@ -13109,7 +13292,7 @@ function IncomeStatementResolver(p) {
|
|
|
13109
13292
|
textAlign: "left",
|
|
13110
13293
|
whiteSpace: "nowrap"
|
|
13111
13294
|
}, children: "\xA0" }),
|
|
13112
|
-
periods.map((period) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
13295
|
+
periods.map((period) => /* @__PURE__ */ jsxRuntime.jsxs(React46__default.default.Fragment, { children: [
|
|
13113
13296
|
/* @__PURE__ */ jsxRuntime.jsx("th", { style: {
|
|
13114
13297
|
fontSize: "11px",
|
|
13115
13298
|
fontWeight: 500,
|
|
@@ -13140,7 +13323,7 @@ function IncomeStatementResolver(p) {
|
|
|
13140
13323
|
sections.map((section, si) => {
|
|
13141
13324
|
var _a2;
|
|
13142
13325
|
const isSubtotal = section.sectionType === "subtotal";
|
|
13143
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
13326
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(React46__default.default.Fragment, { children: [
|
|
13144
13327
|
/* @__PURE__ */ jsxRuntime.jsx("tr", { children: /* @__PURE__ */ jsxRuntime.jsx("td", { colSpan: colCount, style: {
|
|
13145
13328
|
padding: "8px 12px",
|
|
13146
13329
|
fontSize: "12px",
|
|
@@ -13171,7 +13354,7 @@ function IncomeStatementResolver(p) {
|
|
|
13171
13354
|
var _a4;
|
|
13172
13355
|
const val = (_a4 = amounts[pi]) != null ? _a4 : 0;
|
|
13173
13356
|
const isNeg = val < 0;
|
|
13174
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
13357
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(React46__default.default.Fragment, { children: [
|
|
13175
13358
|
/* @__PURE__ */ jsxRuntime.jsx("td", { style: {
|
|
13176
13359
|
padding: "6px 10px",
|
|
13177
13360
|
fontSize: "13px",
|
|
@@ -13206,7 +13389,7 @@ function IncomeStatementResolver(p) {
|
|
|
13206
13389
|
var _a2;
|
|
13207
13390
|
const val = (_a2 = grossProfit[pi]) != null ? _a2 : 0;
|
|
13208
13391
|
const isNeg = val < 0;
|
|
13209
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
13392
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(React46__default.default.Fragment, { children: [
|
|
13210
13393
|
/* @__PURE__ */ jsxRuntime.jsx("td", { style: {
|
|
13211
13394
|
padding: "8px 10px",
|
|
13212
13395
|
fontSize: "12px",
|
|
@@ -13241,7 +13424,7 @@ function IncomeStatementResolver(p) {
|
|
|
13241
13424
|
var _a2;
|
|
13242
13425
|
const val = (_a2 = operatingIncome[pi]) != null ? _a2 : 0;
|
|
13243
13426
|
const isNeg = val < 0;
|
|
13244
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
13427
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(React46__default.default.Fragment, { children: [
|
|
13245
13428
|
/* @__PURE__ */ jsxRuntime.jsx("td", { style: {
|
|
13246
13429
|
padding: "8px 10px",
|
|
13247
13430
|
fontSize: "12px",
|
|
@@ -13275,7 +13458,7 @@ function IncomeStatementResolver(p) {
|
|
|
13275
13458
|
var _a2;
|
|
13276
13459
|
const val = (_a2 = netIncome[pi]) != null ? _a2 : 0;
|
|
13277
13460
|
const isNeg = val < 0;
|
|
13278
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
13461
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(React46__default.default.Fragment, { children: [
|
|
13279
13462
|
/* @__PURE__ */ jsxRuntime.jsx("td", { style: {
|
|
13280
13463
|
padding: "10px 10px",
|
|
13281
13464
|
fontSize: "13px",
|
|
@@ -13495,7 +13678,7 @@ function CashFlowStatementResolver(p) {
|
|
|
13495
13678
|
/* @__PURE__ */ jsxRuntime.jsxs("tbody", { children: [
|
|
13496
13679
|
activities.map((activity, ai) => {
|
|
13497
13680
|
var _a2, _b2, _c2;
|
|
13498
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
13681
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(React46__default.default.Fragment, { children: [
|
|
13499
13682
|
ai > 0 && /* @__PURE__ */ jsxRuntime.jsx("tr", { children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
13500
13683
|
"td",
|
|
13501
13684
|
{
|
|
@@ -15909,8 +16092,8 @@ var PRIORITY_STYLES = {
|
|
|
15909
16092
|
function EscalationCardResolver(p) {
|
|
15910
16093
|
var _a, _b, _c, _d, _e;
|
|
15911
16094
|
const { BORDER: BORDER3, MUTED: MUTED2, ACCENT: ACCENT2, ACCENT_SOFT: ACCENT_SOFT2, SHADOW: SHADOW2 } = useTheme();
|
|
15912
|
-
const [cardHovered, setCardHovered] =
|
|
15913
|
-
const [btnHovered, setBtnHovered] =
|
|
16095
|
+
const [cardHovered, setCardHovered] = React46.useState(false);
|
|
16096
|
+
const [btnHovered, setBtnHovered] = React46.useState(false);
|
|
15914
16097
|
const priorityStyle = p.priority ? PRIORITY_STYLES[p.priority] : null;
|
|
15915
16098
|
const railColor = (_a = priorityStyle == null ? void 0 : priorityStyle.color) != null ? _a : ACCENT2;
|
|
15916
16099
|
const iconBg = (_b = priorityStyle == null ? void 0 : priorityStyle.bg) != null ? _b : "#fff2ec";
|
|
@@ -16782,9 +16965,9 @@ var CONNECTED_GREEN = "#15803d";
|
|
|
16782
16965
|
function ConnectIntegrationResolver(p) {
|
|
16783
16966
|
var _a;
|
|
16784
16967
|
const { BORDER: BORDER3, MUTED: MUTED2, ACCENT: ACCENT2, ACCENT_SOFT: ACCENT_SOFT2, PAPER: PAPER2, SURFACE: SURFACE2, SHADOW: SHADOW2 } = useTheme();
|
|
16785
|
-
const [cardHovered, setCardHovered] =
|
|
16786
|
-
const [btnHovered, setBtnHovered] =
|
|
16787
|
-
const [imgFailed, setImgFailed] =
|
|
16968
|
+
const [cardHovered, setCardHovered] = React46.useState(false);
|
|
16969
|
+
const [btnHovered, setBtnHovered] = React46.useState(false);
|
|
16970
|
+
const [imgFailed, setImgFailed] = React46.useState(false);
|
|
16788
16971
|
const name = (p.integrationName || "Integration").trim();
|
|
16789
16972
|
const initial = name.charAt(0).toUpperCase();
|
|
16790
16973
|
const iconSrc = p.iconUrl || brandIconUrl(name);
|
|
@@ -16946,9 +17129,9 @@ function IntegrationsListResolver(p) {
|
|
|
16946
17129
|
var _a, _b;
|
|
16947
17130
|
const { BORDER: BORDER3, MUTED: MUTED2, PAPER: PAPER2, ACCENT: ACCENT2, ACCENT_SOFT: ACCENT_SOFT2, SURFACE: SURFACE2, SHADOW: SHADOW2 } = useTheme();
|
|
16948
17131
|
const integrations = Array.isArray(p.integrations) ? p.integrations : [];
|
|
16949
|
-
const [rowHover, setRowHover] =
|
|
16950
|
-
const [btnHover, setBtnHover] =
|
|
16951
|
-
const [failed, setFailed] =
|
|
17132
|
+
const [rowHover, setRowHover] = React46.useState(null);
|
|
17133
|
+
const [btnHover, setBtnHover] = React46.useState(null);
|
|
17134
|
+
const [failed, setFailed] = React46.useState({});
|
|
16952
17135
|
const connectedCount = integrations.filter((i) => i.status === "connected").length;
|
|
16953
17136
|
return /* @__PURE__ */ jsxRuntime.jsx(ComponentActions, { filename: (_a = p.title) != null ? _a : "integrations", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { width: "100%", display: "flex", flexDirection: "column", gap: "11px" }, children: [
|
|
16954
17137
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", flexDirection: "column", gap: "2px" }, children: [
|
|
@@ -17440,13 +17623,13 @@ var ellipsis = {
|
|
|
17440
17623
|
function PipelinePreviewResolver(p) {
|
|
17441
17624
|
var _a, _b, _c, _d, _e, _f, _g;
|
|
17442
17625
|
const { MUTED: MUTED2, PAPER: PAPER2, BORDER: BORDER3, ACCENT: ACCENT2, ACCENT_SOFT: ACCENT_SOFT2, SURFACE: SURFACE2 } = useTheme();
|
|
17443
|
-
const [btnHovered, setBtnHovered] =
|
|
17626
|
+
const [btnHovered, setBtnHovered] = React46.useState(false);
|
|
17444
17627
|
const stateCfg = STATE_CONFIG[(_a = p.state) != null ? _a : "draft"];
|
|
17445
17628
|
const destinations = (_b = p.destinations) != null ? _b : [];
|
|
17446
17629
|
const steps = (_c = p.steps) != null ? _c : [];
|
|
17447
17630
|
const workstreams = (_d = p.workstreams) != null ? _d : [];
|
|
17448
17631
|
const scheduleLabel = p.schedule ? p.schedule.type === "manual" ? "Manual" : (_f = (_e = p.schedule.label) != null ? _e : p.schedule.cron) != null ? _f : "Scheduled" : null;
|
|
17449
|
-
const { nodes, edges, viewBox, vbW, vbH } =
|
|
17632
|
+
const { nodes, edges, viewBox, vbW, vbH } = React46.useMemo(() => {
|
|
17450
17633
|
const res = layoutGraph(steps);
|
|
17451
17634
|
const b = layoutBounds(res.nodes);
|
|
17452
17635
|
const pad = 24;
|
|
@@ -17460,7 +17643,7 @@ function PipelinePreviewResolver(p) {
|
|
|
17460
17643
|
vbH: h
|
|
17461
17644
|
};
|
|
17462
17645
|
}, [steps]);
|
|
17463
|
-
const nodeMap =
|
|
17646
|
+
const nodeMap = React46.useMemo(() => {
|
|
17464
17647
|
const m = {};
|
|
17465
17648
|
nodes.forEach((n) => m[n.id] = n);
|
|
17466
17649
|
return m;
|
|
@@ -17838,9 +18021,9 @@ var DEFAULT_INTERACTION = {
|
|
|
17838
18021
|
onDecisionSource: void 0,
|
|
17839
18022
|
onDecisionQueueSubmit: void 0
|
|
17840
18023
|
};
|
|
17841
|
-
var GenUIInteractionContext =
|
|
18024
|
+
var GenUIInteractionContext = React46.createContext(DEFAULT_INTERACTION);
|
|
17842
18025
|
function useGenUIInteraction() {
|
|
17843
|
-
return
|
|
18026
|
+
return React46.useContext(GenUIInteractionContext);
|
|
17844
18027
|
}
|
|
17845
18028
|
var STATUS_COLORS3 = {
|
|
17846
18029
|
done: "#15803d",
|
|
@@ -18032,8 +18215,8 @@ var CARD_MIN = 132;
|
|
|
18032
18215
|
var CARD_GAP = 16;
|
|
18033
18216
|
var AUTO_COMPACT_BELOW = 360;
|
|
18034
18217
|
function useContainerWidth(ref) {
|
|
18035
|
-
const [w, setW] =
|
|
18036
|
-
|
|
18218
|
+
const [w, setW] = React46__default.default.useState(0);
|
|
18219
|
+
React46__default.default.useLayoutEffect(() => {
|
|
18037
18220
|
const el = ref.current;
|
|
18038
18221
|
if (!el || typeof ResizeObserver === "undefined") return;
|
|
18039
18222
|
const ro = new ResizeObserver((entries) => {
|
|
@@ -18136,15 +18319,15 @@ function WorkflowStepperRenderer({
|
|
|
18136
18319
|
const interactive = typeof onSelectStep === "function";
|
|
18137
18320
|
const statusColor3 = (s) => s === "active" || s === "running" ? ACCENT2 : STATUS_COLORS3[s];
|
|
18138
18321
|
const doneCount = steps.filter((s) => s.status === "done").length;
|
|
18139
|
-
const rootRef =
|
|
18322
|
+
const rootRef = React46__default.default.useRef(null);
|
|
18140
18323
|
const containerW = useContainerWidth(rootRef);
|
|
18141
18324
|
let resolved = density === "auto" ? "full" : density;
|
|
18142
18325
|
if (density === "auto" && containerW > 0) {
|
|
18143
18326
|
const needed = steps.length * CARD_MIN + Math.max(0, steps.length - 1) * CARD_GAP;
|
|
18144
18327
|
resolved = containerW < AUTO_COMPACT_BELOW || needed > containerW * 1.6 ? "compact" : "full";
|
|
18145
18328
|
}
|
|
18146
|
-
const scrollerRef =
|
|
18147
|
-
|
|
18329
|
+
const scrollerRef = React46__default.default.useRef(null);
|
|
18330
|
+
React46__default.default.useEffect(() => {
|
|
18148
18331
|
if (resolved !== "full" || loading) return;
|
|
18149
18332
|
const sc = scrollerRef.current;
|
|
18150
18333
|
if (!sc) return;
|
|
@@ -18155,11 +18338,11 @@ function WorkflowStepperRenderer({
|
|
|
18155
18338
|
el.scrollIntoView({ inline: "center", block: "nearest", behavior: "smooth" });
|
|
18156
18339
|
}
|
|
18157
18340
|
}, [resolved, loading, selectedStep, activeStepId]);
|
|
18158
|
-
const [edges, setEdges] =
|
|
18341
|
+
const [edges, setEdges] = React46__default.default.useState({
|
|
18159
18342
|
left: false,
|
|
18160
18343
|
right: false
|
|
18161
18344
|
});
|
|
18162
|
-
const updateEdges =
|
|
18345
|
+
const updateEdges = React46__default.default.useCallback(() => {
|
|
18163
18346
|
const sc = scrollerRef.current;
|
|
18164
18347
|
if (!sc) return;
|
|
18165
18348
|
const max = sc.scrollWidth - sc.clientWidth;
|
|
@@ -18168,7 +18351,7 @@ function WorkflowStepperRenderer({
|
|
|
18168
18351
|
const right = sl < max - 1;
|
|
18169
18352
|
setEdges((prev) => prev.left === left && prev.right === right ? prev : { left, right });
|
|
18170
18353
|
}, []);
|
|
18171
|
-
|
|
18354
|
+
React46__default.default.useLayoutEffect(() => {
|
|
18172
18355
|
if (resolved !== "full" || loading) return;
|
|
18173
18356
|
updateEdges();
|
|
18174
18357
|
const sc = scrollerRef.current;
|
|
@@ -18224,7 +18407,7 @@ function WorkflowStepperRenderer({
|
|
|
18224
18407
|
const reached = s.status !== "pending";
|
|
18225
18408
|
const clickable = interactive && reached;
|
|
18226
18409
|
const size = act ? 11 : done ? 9 : 8;
|
|
18227
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
18410
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(React46__default.default.Fragment, { children: [
|
|
18228
18411
|
i > 0 && /* @__PURE__ */ jsxRuntime.jsx(
|
|
18229
18412
|
"span",
|
|
18230
18413
|
{
|
|
@@ -18368,7 +18551,7 @@ function WorkflowStepperRenderer({
|
|
|
18368
18551
|
const color = statusColor3(step.status);
|
|
18369
18552
|
const humans = ((_a2 = step.assignees) != null ? _a2 : []).filter((a) => a.kind === "human");
|
|
18370
18553
|
const roleCaption = humans.map((h) => h.role).filter(Boolean).slice(0, 2).join(" \xB7 ");
|
|
18371
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
18554
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(React46__default.default.Fragment, { children: [
|
|
18372
18555
|
i > 0 && /* @__PURE__ */ jsxRuntime.jsx(
|
|
18373
18556
|
"div",
|
|
18374
18557
|
{
|
|
@@ -18734,11 +18917,11 @@ function FieldDetail({
|
|
|
18734
18917
|
}) {
|
|
18735
18918
|
var _a, _b, _c, _d;
|
|
18736
18919
|
const { BORDER: BORDER3, MUTED: MUTED2, PAPER: PAPER2, SECONDARY: SECONDARY2, SURFACE: SURFACE2, ACCENT: ACCENT2 } = useTheme();
|
|
18737
|
-
const [editing, setEditing] =
|
|
18738
|
-
const [draft, setDraft] =
|
|
18739
|
-
const [saving, setSaving] =
|
|
18740
|
-
const [saveError, setSaveError] =
|
|
18741
|
-
const textareaRef =
|
|
18920
|
+
const [editing, setEditing] = React46__default.default.useState(false);
|
|
18921
|
+
const [draft, setDraft] = React46__default.default.useState("");
|
|
18922
|
+
const [saving, setSaving] = React46__default.default.useState(false);
|
|
18923
|
+
const [saveError, setSaveError] = React46__default.default.useState(null);
|
|
18924
|
+
const textareaRef = React46__default.default.useRef(null);
|
|
18742
18925
|
const color = fieldColor(field, SECONDARY2);
|
|
18743
18926
|
const corrected = field.state === "corrected";
|
|
18744
18927
|
const startEdit = (e) => {
|
|
@@ -19248,7 +19431,7 @@ function FieldDetails({
|
|
|
19248
19431
|
},
|
|
19249
19432
|
children: facts.map((f) => {
|
|
19250
19433
|
var _a2;
|
|
19251
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
19434
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(React46__default.default.Fragment, { children: [
|
|
19252
19435
|
/* @__PURE__ */ jsxRuntime.jsx("dt", { style: { fontSize: "12px", color: MUTED2 }, children: f.label }),
|
|
19253
19436
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
19254
19437
|
"dd",
|
|
@@ -19347,7 +19530,7 @@ function FieldAuditLog({
|
|
|
19347
19530
|
fields = []
|
|
19348
19531
|
}) {
|
|
19349
19532
|
const { BORDER: BORDER3, MUTED: MUTED2, PAPER: PAPER2, SECONDARY: SECONDARY2 } = useTheme();
|
|
19350
|
-
const fieldLabelMap =
|
|
19533
|
+
const fieldLabelMap = React46__default.default.useMemo(() => {
|
|
19351
19534
|
var _a;
|
|
19352
19535
|
const map = {};
|
|
19353
19536
|
for (const f of fields) map[f.field_key] = (_a = f.label) != null ? _a : f.field_key;
|
|
@@ -19546,10 +19729,10 @@ function PageOverlay({
|
|
|
19546
19729
|
secondary
|
|
19547
19730
|
}) {
|
|
19548
19731
|
const { PAPER: PAPER2, MUTED: MUTED2 } = useTheme();
|
|
19549
|
-
const imgRef =
|
|
19550
|
-
const selectedBoxRef =
|
|
19551
|
-
const [px, setPx] =
|
|
19552
|
-
|
|
19732
|
+
const imgRef = React46__default.default.useRef(null);
|
|
19733
|
+
const selectedBoxRef = React46__default.default.useRef(null);
|
|
19734
|
+
const [px, setPx] = React46__default.default.useState(null);
|
|
19735
|
+
React46__default.default.useEffect(() => {
|
|
19553
19736
|
const el = imgRef.current;
|
|
19554
19737
|
if (!el) return;
|
|
19555
19738
|
const measure = () => {
|
|
@@ -19563,7 +19746,7 @@ function PageOverlay({
|
|
|
19563
19746
|
ro.observe(el);
|
|
19564
19747
|
return () => ro.disconnect();
|
|
19565
19748
|
}, [page.imageUrl]);
|
|
19566
|
-
|
|
19749
|
+
React46__default.default.useEffect(() => {
|
|
19567
19750
|
if (!selectedKey) return;
|
|
19568
19751
|
if (!fields.some((f) => f.field_key === selectedKey && f.bbox)) return;
|
|
19569
19752
|
const el = selectedBoxRef.current;
|
|
@@ -19665,8 +19848,8 @@ function ExtractionDetail({
|
|
|
19665
19848
|
auditLoading
|
|
19666
19849
|
}) {
|
|
19667
19850
|
const { BORDER: BORDER3, MUTED: MUTED2, PAPER: PAPER2, SECONDARY: SECONDARY2 } = useTheme();
|
|
19668
|
-
const selectedCardRef =
|
|
19669
|
-
|
|
19851
|
+
const selectedCardRef = React46__default.default.useRef(null);
|
|
19852
|
+
React46__default.default.useEffect(() => {
|
|
19670
19853
|
if (!selectedKey || tab !== "fields") return;
|
|
19671
19854
|
const el = selectedCardRef.current;
|
|
19672
19855
|
if (el && typeof el.scrollIntoView === "function") {
|
|
@@ -19837,7 +20020,7 @@ function ExtractionModal({
|
|
|
19837
20020
|
children
|
|
19838
20021
|
}) {
|
|
19839
20022
|
const { BORDER: BORDER3, MUTED: MUTED2, SURFACE: SURFACE2, FOREGROUND: FOREGROUND2, SCRIM: SCRIM2 } = useTheme();
|
|
19840
|
-
|
|
20023
|
+
React46__default.default.useEffect(() => {
|
|
19841
20024
|
if (!open) return;
|
|
19842
20025
|
const onKey = (e) => {
|
|
19843
20026
|
if (e.key === "Escape") onClose();
|
|
@@ -19966,19 +20149,19 @@ function ExtractionModal({
|
|
|
19966
20149
|
function DocumentFieldExtractionResolver(p) {
|
|
19967
20150
|
var _a, _b;
|
|
19968
20151
|
const { BORDER: BORDER3, MUTED: MUTED2, PAPER: PAPER2, SURFACE: SURFACE2, SHADOW: SHADOW2, ACCENT: ACCENT2 } = useTheme();
|
|
19969
|
-
const [selectedKey, setSelectedKey] =
|
|
19970
|
-
const [open, setOpen] =
|
|
19971
|
-
const [tab, setTab] =
|
|
20152
|
+
const [selectedKey, setSelectedKey] = React46__default.default.useState(null);
|
|
20153
|
+
const [open, setOpen] = React46__default.default.useState(false);
|
|
20154
|
+
const [tab, setTab] = React46__default.default.useState("fields");
|
|
19972
20155
|
const pages = (_a = p.pages) != null ? _a : [];
|
|
19973
20156
|
const fields = (_b = p.fields) != null ? _b : [];
|
|
19974
20157
|
const editable = typeof p.onFieldSave === "function";
|
|
19975
20158
|
const onLoadAudit = p.onLoadAudit;
|
|
19976
|
-
|
|
20159
|
+
React46__default.default.useEffect(() => {
|
|
19977
20160
|
if (tab === "audit" && onLoadAudit) {
|
|
19978
20161
|
onLoadAudit();
|
|
19979
20162
|
}
|
|
19980
20163
|
}, [tab, onLoadAudit]);
|
|
19981
|
-
const correctionCounts =
|
|
20164
|
+
const correctionCounts = React46__default.default.useMemo(() => {
|
|
19982
20165
|
var _a2, _b2;
|
|
19983
20166
|
const counts = {};
|
|
19984
20167
|
for (const ev of (_a2 = p.auditEvents) != null ? _a2 : []) {
|
|
@@ -20224,8 +20407,8 @@ function formatAmount2(amount, currency = "USD") {
|
|
|
20224
20407
|
return `${sign}${symbol}${body}`;
|
|
20225
20408
|
}
|
|
20226
20409
|
function useContainerWidth2(ref) {
|
|
20227
|
-
const [w, setW] =
|
|
20228
|
-
|
|
20410
|
+
const [w, setW] = React46__default.default.useState(0);
|
|
20411
|
+
React46__default.default.useLayoutEffect(() => {
|
|
20229
20412
|
const el = ref.current;
|
|
20230
20413
|
if (!el || typeof ResizeObserver === "undefined") return;
|
|
20231
20414
|
const ro = new ResizeObserver((entries) => {
|
|
@@ -20320,8 +20503,8 @@ function ValueAdjuster({
|
|
|
20320
20503
|
const { SURFACE_MUTED: SURFACE_MUTED2 } = useTheme();
|
|
20321
20504
|
const adjust = option.adjust;
|
|
20322
20505
|
const suggested = clampToRange((_a = option.value) != null ? _a : adjust.min, adjust);
|
|
20323
|
-
const [value, setValue] =
|
|
20324
|
-
const [text, setText] =
|
|
20506
|
+
const [value, setValue] = React46__default.default.useState(suggested);
|
|
20507
|
+
const [text, setText] = React46__default.default.useState(String(suggested));
|
|
20325
20508
|
const step = (_b = adjust.step) != null ? _b : Number.isInteger(adjust.min) && Number.isInteger(adjust.max) ? 1 : (adjust.max - adjust.min) / 100;
|
|
20326
20509
|
const pct = adjust.max > adjust.min ? (value - adjust.min) / (adjust.max - adjust.min) * 100 : 0;
|
|
20327
20510
|
const suggestedPct = adjust.max > adjust.min ? (suggested - adjust.min) / (adjust.max - adjust.min) * 100 : 0;
|
|
@@ -20527,10 +20710,10 @@ function DecisionCardRenderer({
|
|
|
20527
20710
|
}) {
|
|
20528
20711
|
var _a, _b, _c;
|
|
20529
20712
|
const { BORDER: BORDER3, MUTED: MUTED2, ACCENT: ACCENT2, ACCENT_SOFT: ACCENT_SOFT2, SURFACE: SURFACE2, SURFACE_MUTED: SURFACE_MUTED2, SHADOW: SHADOW2 } = useTheme();
|
|
20530
|
-
const rootRef =
|
|
20713
|
+
const rootRef = React46__default.default.useRef(null);
|
|
20531
20714
|
const width = useContainerWidth2(rootRef);
|
|
20532
20715
|
const stacked = width > 0 && width < STACK_BELOW;
|
|
20533
|
-
const [adjustingIdx, setAdjustingIdx] =
|
|
20716
|
+
const [adjustingIdx, setAdjustingIdx] = React46__default.default.useState(null);
|
|
20534
20717
|
const options = (_a = data.options) != null ? _a : [];
|
|
20535
20718
|
const recommendedIdx = Math.max(
|
|
20536
20719
|
0,
|
|
@@ -20831,8 +21014,8 @@ function DecisionCardResolver(p) {
|
|
|
20831
21014
|
const decisionId = (_a = p.id) != null ? _a : p.title;
|
|
20832
21015
|
const hostResolved = resolvedDecisions == null ? void 0 : resolvedDecisions[decisionId];
|
|
20833
21016
|
const initial = hostResolved != null ? hostResolved : p.resolved ? composeResolution(p, p.resolved.option, p.resolved.value) : null;
|
|
20834
|
-
const [localResolved, setLocalResolved] =
|
|
20835
|
-
|
|
21017
|
+
const [localResolved, setLocalResolved] = React46__default.default.useState(initial);
|
|
21018
|
+
React46__default.default.useEffect(() => {
|
|
20836
21019
|
if (hostResolved !== void 0) setLocalResolved(hostResolved);
|
|
20837
21020
|
}, [hostResolved]);
|
|
20838
21021
|
const resolved = hostResolved != null ? hostResolved : localResolved;
|
|
@@ -20906,11 +21089,11 @@ function DecisionQueueRenderer({
|
|
|
20906
21089
|
var _a;
|
|
20907
21090
|
const { BORDER: BORDER3, MUTED: MUTED2, ACCENT: ACCENT2, SURFACE: SURFACE2, SURFACE_MUTED: SURFACE_MUTED2, BORDER_SOFT: BORDER_SOFT2, PAPER: PAPER2, SHADOW: SHADOW2 } = useTheme();
|
|
20908
21091
|
const items = (_a = data.items) != null ? _a : [];
|
|
20909
|
-
const [decisions, setDecisions] =
|
|
21092
|
+
const [decisions, setDecisions] = React46__default.default.useState(
|
|
20910
21093
|
() => items.map(() => void 0)
|
|
20911
21094
|
);
|
|
20912
21095
|
const firstUndecided = decisions.findIndex((d) => !d);
|
|
20913
|
-
const [focusIdx, setFocusIdx] =
|
|
21096
|
+
const [focusIdx, setFocusIdx] = React46__default.default.useState(firstUndecided >= 0 ? firstUndecided : null);
|
|
20914
21097
|
const isSubmitted = submitted != null;
|
|
20915
21098
|
const shown = isSubmitted ? items.map(
|
|
20916
21099
|
(item, i) => {
|
|
@@ -20935,16 +21118,16 @@ function DecisionQueueRenderer({
|
|
|
20935
21118
|
const final = decisions;
|
|
20936
21119
|
onSubmit == null ? void 0 : onSubmit(final, composeQueueMessage(items, final));
|
|
20937
21120
|
};
|
|
20938
|
-
const onReadyRef =
|
|
20939
|
-
|
|
21121
|
+
const onReadyRef = React46__default.default.useRef(onReady);
|
|
21122
|
+
React46__default.default.useEffect(() => {
|
|
20940
21123
|
onReadyRef.current = onReady;
|
|
20941
21124
|
});
|
|
20942
|
-
|
|
21125
|
+
React46__default.default.useEffect(() => {
|
|
20943
21126
|
if (!onReadyRef.current) return;
|
|
20944
21127
|
const msg = allDecided ? composeQueueMessage(items, decisions) : null;
|
|
20945
21128
|
onReadyRef.current(allDecided && !isSubmitted, msg, decisions.filter(Boolean));
|
|
20946
21129
|
}, [decisions, allDecided, isSubmitted]);
|
|
20947
|
-
|
|
21130
|
+
React46__default.default.useEffect(() => {
|
|
20948
21131
|
if (!submitRef) return;
|
|
20949
21132
|
submitRef.current = handleSubmit;
|
|
20950
21133
|
return () => {
|
|
@@ -21169,7 +21352,7 @@ function DecisionQueueResolver(p) {
|
|
|
21169
21352
|
const { resolvedDecisions, onDecisionQueueSubmit } = useGenUIInteraction();
|
|
21170
21353
|
const queueId = (_b = (_a = p.id) != null ? _a : p.title) != null ? _b : "decision-queue";
|
|
21171
21354
|
const replayed = (_d = (_c = p.resolved) == null ? void 0 : _c.decisions) != null ? _d : null;
|
|
21172
|
-
const [localSubmitted, setLocalSubmitted] =
|
|
21355
|
+
const [localSubmitted, setLocalSubmitted] = React46__default.default.useState(null);
|
|
21173
21356
|
const hostLocked = (resolvedDecisions == null ? void 0 : resolvedDecisions[queueId]) != null;
|
|
21174
21357
|
const submitted = (_e = replayed != null ? replayed : localSubmitted) != null ? _e : hostLocked ? [] : null;
|
|
21175
21358
|
const handleSubmit = (decisions, message) => {
|
|
@@ -21247,9 +21430,9 @@ function ExternalIcon() {
|
|
|
21247
21430
|
function TabbyAuthResolver(p) {
|
|
21248
21431
|
var _a, _b, _c;
|
|
21249
21432
|
const { BORDER: BORDER3, MUTED: MUTED2, ACCENT: ACCENT2, ACCENT_SOFT: ACCENT_SOFT2, SURFACE: SURFACE2, SURFACE_MUTED: SURFACE_MUTED2, SHADOW: SHADOW2 } = useTheme();
|
|
21250
|
-
const [cardHovered, setCardHovered] =
|
|
21251
|
-
const [btnHovered, setBtnHovered] =
|
|
21252
|
-
const [imgFailed, setImgFailed] =
|
|
21433
|
+
const [cardHovered, setCardHovered] = React46.useState(false);
|
|
21434
|
+
const [btnHovered, setBtnHovered] = React46.useState(false);
|
|
21435
|
+
const [imgFailed, setImgFailed] = React46.useState(false);
|
|
21253
21436
|
const app = humanizeApp(p.app || "the app");
|
|
21254
21437
|
const connected = p.state === "connected";
|
|
21255
21438
|
const accent = connected ? CONNECTED_GREEN3 : ACCENT2;
|
|
@@ -21655,7 +21838,7 @@ function InlineSpinner() {
|
|
|
21655
21838
|
}
|
|
21656
21839
|
function GenUIRenderer({ payload }) {
|
|
21657
21840
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
21658
|
-
|
|
21841
|
+
React46.Suspense,
|
|
21659
21842
|
{
|
|
21660
21843
|
fallback: /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", alignItems: "center", gap: "8px", padding: "8px 0" }, children: [
|
|
21661
21844
|
/* @__PURE__ */ jsxRuntime.jsx(InlineSpinner, {}),
|