@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
package/dist/index.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,14 +125,14 @@ var init_theme = __esm({
|
|
|
125
125
|
}
|
|
126
126
|
});
|
|
127
127
|
function GenUIThemeProvider({ colors, children }) {
|
|
128
|
-
const merged =
|
|
128
|
+
const merged = React46.useMemo(
|
|
129
129
|
() => colors ? __spreadValues(__spreadValues({}, exports.DEFAULT_TOKENS), colors) : exports.DEFAULT_TOKENS,
|
|
130
130
|
[colors]
|
|
131
131
|
);
|
|
132
132
|
return /* @__PURE__ */ jsxRuntime.jsx(GenUIThemeContext.Provider, { value: merged, children });
|
|
133
133
|
}
|
|
134
134
|
function useTheme() {
|
|
135
|
-
return
|
|
135
|
+
return React46.useContext(GenUIThemeContext);
|
|
136
136
|
}
|
|
137
137
|
exports.DEFAULT_TOKENS = void 0; var GenUIThemeContext;
|
|
138
138
|
var init_ThemeContext = __esm({
|
|
@@ -154,7 +154,7 @@ var init_ThemeContext = __esm({
|
|
|
154
154
|
SECONDARY: exports.SECONDARY,
|
|
155
155
|
CHART_PALETTE: [...exports.CHART_PALETTE]
|
|
156
156
|
};
|
|
157
|
-
GenUIThemeContext =
|
|
157
|
+
GenUIThemeContext = React46.createContext(exports.DEFAULT_TOKENS);
|
|
158
158
|
}
|
|
159
159
|
});
|
|
160
160
|
function renderInline(text) {
|
|
@@ -890,11 +890,11 @@ async function getMermaid(t) {
|
|
|
890
890
|
}
|
|
891
891
|
function MermaidFallback({ diagram, title }) {
|
|
892
892
|
const tokens = useTheme();
|
|
893
|
-
const [svg, setSvg] =
|
|
894
|
-
const [err, setErr] =
|
|
895
|
-
const [full, setFull] =
|
|
896
|
-
const idRef =
|
|
897
|
-
|
|
893
|
+
const [svg, setSvg] = React46.useState("");
|
|
894
|
+
const [err, setErr] = React46.useState(false);
|
|
895
|
+
const [full, setFull] = React46.useState(false);
|
|
896
|
+
const idRef = React46.useRef(0);
|
|
897
|
+
React46.useEffect(() => {
|
|
898
898
|
const id = ++renderSeq;
|
|
899
899
|
idRef.current = id;
|
|
900
900
|
setErr(false);
|
|
@@ -963,7 +963,7 @@ function FullscreenModalInner({ nodes, edges, title, onClose }) {
|
|
|
963
963
|
] }) });
|
|
964
964
|
}
|
|
965
965
|
function FullscreenModal({ nodes, edges, title, onClose }) {
|
|
966
|
-
|
|
966
|
+
React46.useEffect(() => {
|
|
967
967
|
const h = (e) => {
|
|
968
968
|
if (e.key === "Escape") onClose();
|
|
969
969
|
};
|
|
@@ -976,8 +976,8 @@ function FullscreenModal({ nodes, edges, title, onClose }) {
|
|
|
976
976
|
);
|
|
977
977
|
}
|
|
978
978
|
function usePrefersReducedMotion() {
|
|
979
|
-
const [reduced, setReduced] =
|
|
980
|
-
|
|
979
|
+
const [reduced, setReduced] = React46.useState(false);
|
|
980
|
+
React46.useEffect(() => {
|
|
981
981
|
var _a2;
|
|
982
982
|
if (typeof matchMedia === "undefined") return;
|
|
983
983
|
const mq = matchMedia("(prefers-reduced-motion: reduce)");
|
|
@@ -1021,9 +1021,9 @@ function topoOrder(nodeIds, edges) {
|
|
|
1021
1021
|
}
|
|
1022
1022
|
function useAutoplay(order, enabled) {
|
|
1023
1023
|
const reduced = usePrefersReducedMotion();
|
|
1024
|
-
const [step, setStep] =
|
|
1024
|
+
const [step, setStep] = React46.useState(0);
|
|
1025
1025
|
const key = order.join("|");
|
|
1026
|
-
|
|
1026
|
+
React46.useEffect(() => {
|
|
1027
1027
|
if (!enabled || reduced || order.length === 0) {
|
|
1028
1028
|
setStep(0);
|
|
1029
1029
|
return;
|
|
@@ -1045,7 +1045,7 @@ function useAutoplay(order, enabled) {
|
|
|
1045
1045
|
timer = setTimeout(tick, 850);
|
|
1046
1046
|
return () => clearTimeout(timer);
|
|
1047
1047
|
}, [enabled, reduced, key]);
|
|
1048
|
-
return
|
|
1048
|
+
return React46.useMemo(() => {
|
|
1049
1049
|
const m = {};
|
|
1050
1050
|
order.forEach((id, i) => {
|
|
1051
1051
|
m[id] = i < step ? "done" : i === step ? "active" : "pending";
|
|
@@ -1067,13 +1067,13 @@ function resolveStates(nodes, nodeStates) {
|
|
|
1067
1067
|
}
|
|
1068
1068
|
function Inner({ diagram, title, autoplay, nodeStates }) {
|
|
1069
1069
|
const tokens = useTheme();
|
|
1070
|
-
const [full, setFull] =
|
|
1071
|
-
const [focused, setFocused] =
|
|
1072
|
-
const [boxW, setBoxW] =
|
|
1073
|
-
const containerRef =
|
|
1074
|
-
const parsed =
|
|
1075
|
-
const layout =
|
|
1076
|
-
const themedEdges =
|
|
1070
|
+
const [full, setFull] = React46.useState(false);
|
|
1071
|
+
const [focused, setFocused] = React46.useState(false);
|
|
1072
|
+
const [boxW, setBoxW] = React46.useState(640);
|
|
1073
|
+
const containerRef = React46.useRef(null);
|
|
1074
|
+
const parsed = React46.useMemo(() => parseMermaidFlow(diagram), [diagram]);
|
|
1075
|
+
const layout = React46.useMemo(() => parsed ? computeLayout(parsed) : null, [parsed]);
|
|
1076
|
+
const themedEdges = React46.useMemo(
|
|
1077
1077
|
() => {
|
|
1078
1078
|
var _a2;
|
|
1079
1079
|
return ((_a2 = layout == null ? void 0 : layout.edges) != null ? _a2 : []).map((e) => __spreadProps(__spreadValues({}, e), {
|
|
@@ -1085,7 +1085,7 @@ function Inner({ diagram, title, autoplay, nodeStates }) {
|
|
|
1085
1085
|
},
|
|
1086
1086
|
[layout, tokens.ACCENT, tokens.MUTED]
|
|
1087
1087
|
);
|
|
1088
|
-
const order =
|
|
1088
|
+
const order = React46.useMemo(
|
|
1089
1089
|
() => {
|
|
1090
1090
|
var _a2, _b;
|
|
1091
1091
|
return topoOrder(((_a2 = layout == null ? void 0 : layout.nodes) != null ? _a2 : []).map((n) => n.id), (_b = layout == null ? void 0 : layout.edges) != null ? _b : []);
|
|
@@ -1093,19 +1093,19 @@ function Inner({ diagram, title, autoplay, nodeStates }) {
|
|
|
1093
1093
|
[layout]
|
|
1094
1094
|
);
|
|
1095
1095
|
const autoStatus = useAutoplay(order, !!autoplay);
|
|
1096
|
-
const staticStatus =
|
|
1096
|
+
const staticStatus = React46.useMemo(() => {
|
|
1097
1097
|
var _a2;
|
|
1098
1098
|
return resolveStates((_a2 = layout == null ? void 0 : layout.nodes) != null ? _a2 : [], nodeStates);
|
|
1099
1099
|
}, [layout, nodeStates]);
|
|
1100
1100
|
const statusMap = autoplay ? autoStatus : staticStatus;
|
|
1101
|
-
const displayNodes =
|
|
1101
|
+
const displayNodes = React46.useMemo(
|
|
1102
1102
|
() => {
|
|
1103
1103
|
var _a2;
|
|
1104
1104
|
return ((_a2 = layout == null ? void 0 : layout.nodes) != null ? _a2 : []).map((n) => __spreadProps(__spreadValues({}, n), { data: __spreadProps(__spreadValues({}, n.data), { status: statusMap[n.id] }) }));
|
|
1105
1105
|
},
|
|
1106
1106
|
[layout, statusMap]
|
|
1107
1107
|
);
|
|
1108
|
-
const displayEdges =
|
|
1108
|
+
const displayEdges = React46.useMemo(
|
|
1109
1109
|
() => themedEdges.map((e) => {
|
|
1110
1110
|
const ss = statusMap[e.source];
|
|
1111
1111
|
const ts = statusMap[e.target];
|
|
@@ -1125,13 +1125,13 @@ function Inner({ diagram, title, autoplay, nodeStates }) {
|
|
|
1125
1125
|
const [nodes, setNodes, onNC] = react.useNodesState(displayNodes);
|
|
1126
1126
|
const [edges, setEdges, onEC] = react.useEdgesState(displayEdges);
|
|
1127
1127
|
const rf = react.useReactFlow();
|
|
1128
|
-
|
|
1128
|
+
React46.useEffect(() => {
|
|
1129
1129
|
setNodes(displayNodes);
|
|
1130
1130
|
}, [displayNodes, setNodes]);
|
|
1131
|
-
|
|
1131
|
+
React46.useEffect(() => {
|
|
1132
1132
|
setEdges(displayEdges);
|
|
1133
1133
|
}, [displayEdges, setEdges]);
|
|
1134
|
-
|
|
1134
|
+
React46.useEffect(() => {
|
|
1135
1135
|
const id = requestAnimationFrame(() => {
|
|
1136
1136
|
try {
|
|
1137
1137
|
rf.fitView({ padding: 0.1 });
|
|
@@ -1140,14 +1140,14 @@ function Inner({ diagram, title, autoplay, nodeStates }) {
|
|
|
1140
1140
|
});
|
|
1141
1141
|
return () => cancelAnimationFrame(id);
|
|
1142
1142
|
}, [layout, rf]);
|
|
1143
|
-
const handleClickOutside =
|
|
1143
|
+
const handleClickOutside = React46.useCallback((e) => {
|
|
1144
1144
|
if (containerRef.current && !containerRef.current.contains(e.target)) setFocused(false);
|
|
1145
1145
|
}, []);
|
|
1146
|
-
|
|
1146
|
+
React46.useEffect(() => {
|
|
1147
1147
|
document.addEventListener("mousedown", handleClickOutside);
|
|
1148
1148
|
return () => document.removeEventListener("mousedown", handleClickOutside);
|
|
1149
1149
|
}, [handleClickOutside]);
|
|
1150
|
-
|
|
1150
|
+
React46.useEffect(() => {
|
|
1151
1151
|
const el = containerRef.current;
|
|
1152
1152
|
if (!el) return;
|
|
1153
1153
|
let raf = 0;
|
|
@@ -1334,8 +1334,8 @@ function probePdfWorker() {
|
|
|
1334
1334
|
return probe;
|
|
1335
1335
|
}
|
|
1336
1336
|
function usePdfWorkerReady(enabled) {
|
|
1337
|
-
const [ready, setReady] =
|
|
1338
|
-
|
|
1337
|
+
const [ready, setReady] = React46.useState(null);
|
|
1338
|
+
React46.useEffect(() => {
|
|
1339
1339
|
if (!enabled) return;
|
|
1340
1340
|
let cancelled = false;
|
|
1341
1341
|
probePdfWorker().then((ok) => {
|
|
@@ -1368,15 +1368,15 @@ __export(PdfViewer_exports, {
|
|
|
1368
1368
|
});
|
|
1369
1369
|
function PdfViewer({ url, base64, onLoadSuccess, onLoadError }) {
|
|
1370
1370
|
const { BORDER: BORDER3, MUTED: MUTED2, SURFACE: SURFACE2 } = useTheme();
|
|
1371
|
-
const [numPages, setNumPages] =
|
|
1372
|
-
const [currentPage, setCurrentPage] =
|
|
1373
|
-
const [loading, setLoading] =
|
|
1374
|
-
const handleLoad =
|
|
1371
|
+
const [numPages, setNumPages] = React46.useState(0);
|
|
1372
|
+
const [currentPage, setCurrentPage] = React46.useState(1);
|
|
1373
|
+
const [loading, setLoading] = React46.useState(true);
|
|
1374
|
+
const handleLoad = React46.useCallback(({ numPages: n }) => {
|
|
1375
1375
|
setNumPages(n);
|
|
1376
1376
|
setLoading(false);
|
|
1377
1377
|
onLoadSuccess == null ? void 0 : onLoadSuccess(n);
|
|
1378
1378
|
}, [onLoadSuccess]);
|
|
1379
|
-
|
|
1379
|
+
React46.useEffect(() => {
|
|
1380
1380
|
if (numPages <= 1) return;
|
|
1381
1381
|
const handler = (e) => {
|
|
1382
1382
|
var _a2;
|
|
@@ -1484,13 +1484,13 @@ __export(ExcelViewer_exports, {
|
|
|
1484
1484
|
});
|
|
1485
1485
|
function ExcelViewer({ url, base64, onLoadSuccess }) {
|
|
1486
1486
|
const { BORDER: BORDER3, MUTED: MUTED2, PAPER: PAPER2, SURFACE: SURFACE2 } = useTheme();
|
|
1487
|
-
const [sheetNames, setSheetNames] =
|
|
1488
|
-
const [activeSheet, setActiveSheet] =
|
|
1489
|
-
const [data, setData] =
|
|
1490
|
-
const [loading, setLoading] =
|
|
1491
|
-
const [error, setError] =
|
|
1492
|
-
const wbRef =
|
|
1493
|
-
|
|
1487
|
+
const [sheetNames, setSheetNames] = React46.useState([]);
|
|
1488
|
+
const [activeSheet, setActiveSheet] = React46.useState(0);
|
|
1489
|
+
const [data, setData] = React46.useState([]);
|
|
1490
|
+
const [loading, setLoading] = React46.useState(true);
|
|
1491
|
+
const [error, setError] = React46.useState(null);
|
|
1492
|
+
const wbRef = React46.useRef(null);
|
|
1493
|
+
React46.useEffect(() => {
|
|
1494
1494
|
let cancelled = false;
|
|
1495
1495
|
setLoading(true);
|
|
1496
1496
|
setError(null);
|
|
@@ -1548,7 +1548,7 @@ function ExcelViewer({ url, base64, onLoadSuccess }) {
|
|
|
1548
1548
|
const rows = XLSX__namespace.utils.sheet_to_json(wbRef.current.Sheets[wbRef.current.SheetNames[idx]], { header: 1 });
|
|
1549
1549
|
setData(rows);
|
|
1550
1550
|
};
|
|
1551
|
-
|
|
1551
|
+
React46.useEffect(() => {
|
|
1552
1552
|
if (sheetNames.length <= 1) return;
|
|
1553
1553
|
const handler = (e) => {
|
|
1554
1554
|
var _a2;
|
|
@@ -1674,10 +1674,10 @@ __export(CsvViewer_exports, {
|
|
|
1674
1674
|
});
|
|
1675
1675
|
function CsvViewer({ url, base64, delimiter, maxRows }) {
|
|
1676
1676
|
const { BORDER: BORDER3, MUTED: MUTED2, PAPER: PAPER2 } = useTheme();
|
|
1677
|
-
const [rows, setRows] =
|
|
1678
|
-
const [loading, setLoading] =
|
|
1679
|
-
const [error, setError] =
|
|
1680
|
-
|
|
1677
|
+
const [rows, setRows] = React46.useState([]);
|
|
1678
|
+
const [loading, setLoading] = React46.useState(true);
|
|
1679
|
+
const [error, setError] = React46.useState(null);
|
|
1680
|
+
React46.useEffect(() => {
|
|
1681
1681
|
let cancelled = false;
|
|
1682
1682
|
setLoading(true);
|
|
1683
1683
|
setError(null);
|
|
@@ -1796,10 +1796,10 @@ __export(TextViewer_exports, {
|
|
|
1796
1796
|
});
|
|
1797
1797
|
function TextViewer({ url, base64, markdown = false, maxLines }) {
|
|
1798
1798
|
const { MUTED: MUTED2 } = useTheme();
|
|
1799
|
-
const [text, setText] =
|
|
1800
|
-
const [loading, setLoading] =
|
|
1801
|
-
const [error, setError] =
|
|
1802
|
-
|
|
1799
|
+
const [text, setText] = React46.useState("");
|
|
1800
|
+
const [loading, setLoading] = React46.useState(true);
|
|
1801
|
+
const [error, setError] = React46.useState(null);
|
|
1802
|
+
React46.useEffect(() => {
|
|
1803
1803
|
let cancelled = false;
|
|
1804
1804
|
setLoading(true);
|
|
1805
1805
|
setError(null);
|
|
@@ -1897,10 +1897,10 @@ function sanitize(html) {
|
|
|
1897
1897
|
}
|
|
1898
1898
|
function DocxViewer({ url, base64 }) {
|
|
1899
1899
|
const { MUTED: MUTED2, BORDER: BORDER3, SURFACE: SURFACE2 } = useTheme();
|
|
1900
|
-
const [html, setHtml] =
|
|
1901
|
-
const [loading, setLoading] =
|
|
1902
|
-
const [error, setError] =
|
|
1903
|
-
|
|
1900
|
+
const [html, setHtml] = React46.useState("");
|
|
1901
|
+
const [loading, setLoading] = React46.useState(true);
|
|
1902
|
+
const [error, setError] = React46.useState(null);
|
|
1903
|
+
React46.useEffect(() => {
|
|
1904
1904
|
let cancelled = false;
|
|
1905
1905
|
setLoading(true);
|
|
1906
1906
|
setError(null);
|
|
@@ -1980,6 +1980,89 @@ var init_DocxViewer = __esm({
|
|
|
1980
1980
|
}
|
|
1981
1981
|
});
|
|
1982
1982
|
|
|
1983
|
+
// src/shared/viewers/HtmlViewer.tsx
|
|
1984
|
+
var HtmlViewer_exports = {};
|
|
1985
|
+
__export(HtmlViewer_exports, {
|
|
1986
|
+
HtmlViewer: () => HtmlViewer
|
|
1987
|
+
});
|
|
1988
|
+
function HtmlViewer({ url, base64, height = 480 }) {
|
|
1989
|
+
const { MUTED: MUTED2 } = useTheme();
|
|
1990
|
+
const [html, setHtml] = React46.useState("");
|
|
1991
|
+
const [loading, setLoading] = React46.useState(true);
|
|
1992
|
+
const [error, setError] = React46.useState(null);
|
|
1993
|
+
React46.useEffect(() => {
|
|
1994
|
+
let cancelled = false;
|
|
1995
|
+
setLoading(true);
|
|
1996
|
+
setError(null);
|
|
1997
|
+
if (base64) {
|
|
1998
|
+
try {
|
|
1999
|
+
if (!cancelled) {
|
|
2000
|
+
setHtml(base64ToText(base64));
|
|
2001
|
+
setLoading(false);
|
|
2002
|
+
}
|
|
2003
|
+
} catch (e) {
|
|
2004
|
+
if (!cancelled) {
|
|
2005
|
+
setError(e instanceof Error ? e.message : "Failed to decode HTML");
|
|
2006
|
+
setLoading(false);
|
|
2007
|
+
}
|
|
2008
|
+
}
|
|
2009
|
+
return () => {
|
|
2010
|
+
cancelled = true;
|
|
2011
|
+
};
|
|
2012
|
+
}
|
|
2013
|
+
if (!url) {
|
|
2014
|
+
setError("No file source provided");
|
|
2015
|
+
setLoading(false);
|
|
2016
|
+
return () => {
|
|
2017
|
+
cancelled = true;
|
|
2018
|
+
};
|
|
2019
|
+
}
|
|
2020
|
+
fetch(url).then((r) => {
|
|
2021
|
+
if (!r.ok) throw new Error(`Failed to fetch: ${r.status}`);
|
|
2022
|
+
return r.text();
|
|
2023
|
+
}).then((t) => {
|
|
2024
|
+
if (cancelled) return;
|
|
2025
|
+
setHtml(t);
|
|
2026
|
+
setLoading(false);
|
|
2027
|
+
}).catch((e) => {
|
|
2028
|
+
if (cancelled) return;
|
|
2029
|
+
setError(e.message);
|
|
2030
|
+
setLoading(false);
|
|
2031
|
+
});
|
|
2032
|
+
return () => {
|
|
2033
|
+
cancelled = true;
|
|
2034
|
+
};
|
|
2035
|
+
}, [url, base64]);
|
|
2036
|
+
if (loading) {
|
|
2037
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { style: { padding: "24px", color: MUTED2, fontSize: "13px", textAlign: "center" }, children: "Loading\u2026" });
|
|
2038
|
+
}
|
|
2039
|
+
if (error) {
|
|
2040
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { style: { padding: "24px", color: "#dc2626", fontSize: "13px", textAlign: "center" }, children: error });
|
|
2041
|
+
}
|
|
2042
|
+
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
2043
|
+
"iframe",
|
|
2044
|
+
{
|
|
2045
|
+
title: "HTML preview",
|
|
2046
|
+
sandbox: "",
|
|
2047
|
+
srcDoc: html,
|
|
2048
|
+
style: {
|
|
2049
|
+
width: "100%",
|
|
2050
|
+
height: `${height}px`,
|
|
2051
|
+
border: "none",
|
|
2052
|
+
background: "white",
|
|
2053
|
+
display: "block"
|
|
2054
|
+
}
|
|
2055
|
+
}
|
|
2056
|
+
);
|
|
2057
|
+
}
|
|
2058
|
+
var init_HtmlViewer = __esm({
|
|
2059
|
+
"src/shared/viewers/HtmlViewer.tsx"() {
|
|
2060
|
+
"use client";
|
|
2061
|
+
init_ThemeContext();
|
|
2062
|
+
init_decode();
|
|
2063
|
+
}
|
|
2064
|
+
});
|
|
2065
|
+
|
|
1983
2066
|
// src/index.ts
|
|
1984
2067
|
init_ThemeContext();
|
|
1985
2068
|
var dataTableSchema = zod.z.object({
|
|
@@ -6161,16 +6244,16 @@ var DOT_COLOR = "#aaaaaa";
|
|
|
6161
6244
|
var DOT_HOVER = "#555555";
|
|
6162
6245
|
function ComponentActions({ children, onDownloadCSV, columnConfig, filename = "component" }) {
|
|
6163
6246
|
const { BORDER: BORDER3, MUTED: MUTED2, SURFACE: SURFACE2, SURFACE_MUTED: SURFACE_MUTED2 } = useTheme();
|
|
6164
|
-
const [open, setOpen] =
|
|
6165
|
-
const [view, setView] =
|
|
6166
|
-
const contentRef =
|
|
6167
|
-
const menuRef =
|
|
6168
|
-
const btnRef =
|
|
6169
|
-
const close =
|
|
6247
|
+
const [open, setOpen] = React46.useState(false);
|
|
6248
|
+
const [view, setView] = React46.useState("main");
|
|
6249
|
+
const contentRef = React46.useRef(null);
|
|
6250
|
+
const menuRef = React46.useRef(null);
|
|
6251
|
+
const btnRef = React46.useRef(null);
|
|
6252
|
+
const close = React46.useCallback(() => {
|
|
6170
6253
|
setOpen(false);
|
|
6171
6254
|
setView("main");
|
|
6172
6255
|
}, []);
|
|
6173
|
-
|
|
6256
|
+
React46.useEffect(() => {
|
|
6174
6257
|
if (!open) return;
|
|
6175
6258
|
const handler = (e) => {
|
|
6176
6259
|
var _a2, _b;
|
|
@@ -6181,7 +6264,7 @@ function ComponentActions({ children, onDownloadCSV, columnConfig, filename = "c
|
|
|
6181
6264
|
document.addEventListener("mousedown", handler);
|
|
6182
6265
|
return () => document.removeEventListener("mousedown", handler);
|
|
6183
6266
|
}, [open, close]);
|
|
6184
|
-
const handleDownloadPNG =
|
|
6267
|
+
const handleDownloadPNG = React46.useCallback(async () => {
|
|
6185
6268
|
if (!contentRef.current) return;
|
|
6186
6269
|
try {
|
|
6187
6270
|
const url = await htmlToImage.toPng(contentRef.current, { backgroundColor: "white", pixelRatio: 2 });
|
|
@@ -6193,7 +6276,7 @@ function ComponentActions({ children, onDownloadCSV, columnConfig, filename = "c
|
|
|
6193
6276
|
}
|
|
6194
6277
|
close();
|
|
6195
6278
|
}, [filename, close]);
|
|
6196
|
-
const handleCSV =
|
|
6279
|
+
const handleCSV = React46.useCallback(() => {
|
|
6197
6280
|
onDownloadCSV == null ? void 0 : onDownloadCSV();
|
|
6198
6281
|
close();
|
|
6199
6282
|
}, [onDownloadCSV, close]);
|
|
@@ -6306,12 +6389,12 @@ function MenuButton({ label, onClick }) {
|
|
|
6306
6389
|
);
|
|
6307
6390
|
}
|
|
6308
6391
|
function useColumnVisibility(columns) {
|
|
6309
|
-
const [hidden, setHidden] =
|
|
6310
|
-
const visibleColumns =
|
|
6392
|
+
const [hidden, setHidden] = React46.useState(/* @__PURE__ */ new Set());
|
|
6393
|
+
const visibleColumns = React46.useMemo(
|
|
6311
6394
|
() => columns.filter((c) => !hidden.has(c.key)),
|
|
6312
6395
|
[columns, hidden]
|
|
6313
6396
|
);
|
|
6314
|
-
const toggle =
|
|
6397
|
+
const toggle = React46.useCallback((key) => {
|
|
6315
6398
|
setHidden((prev) => {
|
|
6316
6399
|
const next = new Set(prev);
|
|
6317
6400
|
if (next.has(key)) next.delete(key);
|
|
@@ -6319,8 +6402,8 @@ function useColumnVisibility(columns) {
|
|
|
6319
6402
|
return next;
|
|
6320
6403
|
});
|
|
6321
6404
|
}, []);
|
|
6322
|
-
const showAll =
|
|
6323
|
-
const hideAll =
|
|
6405
|
+
const showAll = React46.useCallback(() => setHidden(/* @__PURE__ */ new Set()), []);
|
|
6406
|
+
const hideAll = React46.useCallback(
|
|
6324
6407
|
() => setHidden(new Set(columns.map((c) => c.key))),
|
|
6325
6408
|
[columns]
|
|
6326
6409
|
);
|
|
@@ -6577,9 +6660,9 @@ function AlertResolver(p) {
|
|
|
6577
6660
|
// src/composites/stat-grid/resolver.tsx
|
|
6578
6661
|
init_Markdown();
|
|
6579
6662
|
function FitText({ children, max = 22, min = 13, title, className, style }) {
|
|
6580
|
-
const ref =
|
|
6581
|
-
const [size, setSize] =
|
|
6582
|
-
|
|
6663
|
+
const ref = React46.useRef(null);
|
|
6664
|
+
const [size, setSize] = React46.useState(max);
|
|
6665
|
+
React46.useLayoutEffect(() => {
|
|
6583
6666
|
const el = ref.current;
|
|
6584
6667
|
if (!el) return void 0;
|
|
6585
6668
|
const fit = () => {
|
|
@@ -6673,7 +6756,7 @@ init_ThemeContext();
|
|
|
6673
6756
|
function TabsPanelResolver(p) {
|
|
6674
6757
|
var _a2;
|
|
6675
6758
|
const { BORDER: BORDER3, MUTED: MUTED2, PAPER: PAPER2, SURFACE: SURFACE2, ACCENT: ACCENT2 } = useTheme();
|
|
6676
|
-
const [activeIdx, setActiveIdx] =
|
|
6759
|
+
const [activeIdx, setActiveIdx] = React46.useState(0);
|
|
6677
6760
|
const activeTab = p.tabs[activeIdx];
|
|
6678
6761
|
return /* @__PURE__ */ jsxRuntime.jsx(ComponentActions, { filename: "tabs-panel", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { width: "100%", display: "flex", flexDirection: "column", gap: "0" }, children: [
|
|
6679
6762
|
/* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -6937,7 +7020,7 @@ var thStyle = (MUTED2, BORDER3, PAPER2) => ({
|
|
|
6937
7020
|
function ScreenerTableResolver(p) {
|
|
6938
7021
|
var _a2, _b, _c, _d, _e, _f;
|
|
6939
7022
|
const { ACCENT: ACCENT2, BORDER: BORDER3, BORDER_SOFT: BORDER_SOFT2, MUTED: MUTED2, PAPER: PAPER2, SURFACE: SURFACE2, SURFACE_MUTED: SURFACE_MUTED2 } = useTheme();
|
|
6940
|
-
const [activeFilters, setActiveFilters] =
|
|
7023
|
+
const [activeFilters, setActiveFilters] = React46.useState(new Set((_a2 = p.activeFilters) != null ? _a2 : []));
|
|
6941
7024
|
const { visibleColumns, hidden, toggle, showAll, hideAll, allColumns } = useColumnVisibility((_b = p.columns) != null ? _b : []);
|
|
6942
7025
|
const toggleFilter = (f) => setActiveFilters((prev) => {
|
|
6943
7026
|
const next = new Set(prev);
|
|
@@ -7007,7 +7090,7 @@ var th2 = (MUTED2, BORDER3, PAPER2) => ({
|
|
|
7007
7090
|
function GroupRows({ group, columns, depth }) {
|
|
7008
7091
|
var _a2, _b;
|
|
7009
7092
|
const { MUTED: MUTED2, PAPER: PAPER2, BORDER_SOFT: BORDER_SOFT2 } = useTheme();
|
|
7010
|
-
const [open, setOpen] =
|
|
7093
|
+
const [open, setOpen] = React46.useState(true);
|
|
7011
7094
|
const indent = depth * 14;
|
|
7012
7095
|
return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
|
|
7013
7096
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
@@ -7112,7 +7195,7 @@ var dotColor = {
|
|
|
7112
7195
|
function NewsFeedResolver(p) {
|
|
7113
7196
|
var _a2, _b;
|
|
7114
7197
|
const { ACCENT: ACCENT2, MUTED: MUTED2, SURFACE: SURFACE2, SHADOW: SHADOW2 } = useTheme();
|
|
7115
|
-
const [filter, setFilter] =
|
|
7198
|
+
const [filter, setFilter] = React46.useState(null);
|
|
7116
7199
|
const sentiments = ["positive", "neutral", "negative"].filter(
|
|
7117
7200
|
(s) => {
|
|
7118
7201
|
var _a3;
|
|
@@ -7154,9 +7237,9 @@ function NewsFeedResolver(p) {
|
|
|
7154
7237
|
] }) });
|
|
7155
7238
|
}
|
|
7156
7239
|
function useSeriesToggle(seriesKeys) {
|
|
7157
|
-
const [hidden, setHidden] =
|
|
7158
|
-
const isVisible =
|
|
7159
|
-
const toggle =
|
|
7240
|
+
const [hidden, setHidden] = React46.useState(/* @__PURE__ */ new Set());
|
|
7241
|
+
const isVisible = React46.useCallback((key) => !hidden.has(key), [hidden]);
|
|
7242
|
+
const toggle = React46.useCallback((key) => {
|
|
7160
7243
|
setHidden((prev) => {
|
|
7161
7244
|
const next = new Set(prev);
|
|
7162
7245
|
if (next.has(key)) next.delete(key);
|
|
@@ -7164,7 +7247,7 @@ function useSeriesToggle(seriesKeys) {
|
|
|
7164
7247
|
return next;
|
|
7165
7248
|
});
|
|
7166
7249
|
}, []);
|
|
7167
|
-
const showAll =
|
|
7250
|
+
const showAll = React46.useCallback(() => setHidden(/* @__PURE__ */ new Set()), []);
|
|
7168
7251
|
return { hidden, isVisible, toggle, showAll, allKeys: seriesKeys };
|
|
7169
7252
|
}
|
|
7170
7253
|
|
|
@@ -7469,7 +7552,7 @@ function WaterfallChartResolver(p) {
|
|
|
7469
7552
|
}
|
|
7470
7553
|
init_ThemeContext();
|
|
7471
7554
|
init_theme();
|
|
7472
|
-
var FlowGraph2 =
|
|
7555
|
+
var FlowGraph2 = React46__default.default.lazy(
|
|
7473
7556
|
() => Promise.resolve().then(() => (init_FlowGraph(), FlowGraph_exports)).then((m) => ({ default: m.FlowGraph }))
|
|
7474
7557
|
);
|
|
7475
7558
|
function FlowCanvasRenderer({
|
|
@@ -7510,7 +7593,7 @@ function FlowCanvasRenderer({
|
|
|
7510
7593
|
overflow: "hidden",
|
|
7511
7594
|
background: SURFACE2,
|
|
7512
7595
|
position: "relative"
|
|
7513
|
-
}, diagram ? {} : { height: "320px" }), children: diagram ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
7596
|
+
}, 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: {
|
|
7514
7597
|
position: "absolute",
|
|
7515
7598
|
inset: 0,
|
|
7516
7599
|
display: "flex",
|
|
@@ -7745,7 +7828,7 @@ function TrialBalanceResolver(p) {
|
|
|
7745
7828
|
gDebit += a.debit;
|
|
7746
7829
|
gCredit += a.credit;
|
|
7747
7830
|
});
|
|
7748
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
7831
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(React46__default.default.Fragment, { children: [
|
|
7749
7832
|
/* @__PURE__ */ jsxRuntime.jsx("tr", { children: /* @__PURE__ */ jsxRuntime.jsx("td", { colSpan: 4, style: {
|
|
7750
7833
|
padding: "8px 12px",
|
|
7751
7834
|
fontSize: "12px",
|
|
@@ -8283,7 +8366,7 @@ function ItemRow({ item }) {
|
|
|
8283
8366
|
}
|
|
8284
8367
|
function Section({ section }) {
|
|
8285
8368
|
const { BORDER: BORDER3, MUTED: MUTED2, SURFACE: SURFACE2 } = useTheme();
|
|
8286
|
-
const [open, setOpen] =
|
|
8369
|
+
const [open, setOpen] = React46.useState(true);
|
|
8287
8370
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
8288
8371
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
8289
8372
|
"button",
|
|
@@ -8406,7 +8489,7 @@ function ReconciliationViewResolver(p) {
|
|
|
8406
8489
|
const { BORDER: BORDER3, BORDER_SOFT: BORDER_SOFT2, MUTED: MUTED2, PAPER: PAPER2, ACCENT: ACCENT2, SURFACE: SURFACE2, SURFACE_MUTED: SURFACE_MUTED2 } = useTheme();
|
|
8407
8490
|
const sourceA = (_a2 = p.sourceA) != null ? _a2 : { label: "Source A" };
|
|
8408
8491
|
const sourceB = (_b = p.sourceB) != null ? _b : { label: "Source B" };
|
|
8409
|
-
const [activeTab, setActiveTab] =
|
|
8492
|
+
const [activeTab, setActiveTab] = React46.useState("matched");
|
|
8410
8493
|
const balanceA = (_d = (_c = p.summary) == null ? void 0 : _c.balanceA) != null ? _d : 0;
|
|
8411
8494
|
const balanceB = (_f = (_e = p.summary) == null ? void 0 : _e.balanceB) != null ? _f : 0;
|
|
8412
8495
|
const difference = (_h = (_g = p.summary) == null ? void 0 : _g.difference) != null ? _h : balanceA - balanceB;
|
|
@@ -9052,7 +9135,7 @@ function ChangesView({ changes }) {
|
|
|
9052
9135
|
function EventCard({ event }) {
|
|
9053
9136
|
var _a2;
|
|
9054
9137
|
const { BORDER: BORDER3, MUTED: MUTED2, ACCENT: ACCENT2, SURFACE: SURFACE2 } = useTheme();
|
|
9055
|
-
const [showChanges, setShowChanges] =
|
|
9138
|
+
const [showChanges, setShowChanges] = React46.useState(false);
|
|
9056
9139
|
const ac = (_a2 = actionConfig[event.action]) != null ? _a2 : actionConfig.commented;
|
|
9057
9140
|
const hasChanges = event.changes && event.changes.length > 0;
|
|
9058
9141
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", gap: "12px", position: "relative" }, children: [
|
|
@@ -9110,23 +9193,23 @@ function AuditTrailResolver(p) {
|
|
|
9110
9193
|
}
|
|
9111
9194
|
init_Markdown();
|
|
9112
9195
|
function useFullscreen(ref) {
|
|
9113
|
-
const [isFullscreen, setIsFullscreen] =
|
|
9114
|
-
|
|
9196
|
+
const [isFullscreen, setIsFullscreen] = React46.useState(false);
|
|
9197
|
+
React46.useEffect(() => {
|
|
9115
9198
|
const handler = () => {
|
|
9116
9199
|
setIsFullscreen(!!document.fullscreenElement);
|
|
9117
9200
|
};
|
|
9118
9201
|
document.addEventListener("fullscreenchange", handler);
|
|
9119
9202
|
return () => document.removeEventListener("fullscreenchange", handler);
|
|
9120
9203
|
}, []);
|
|
9121
|
-
const enter =
|
|
9204
|
+
const enter = React46.useCallback(() => {
|
|
9122
9205
|
var _a2, _b;
|
|
9123
9206
|
(_b = (_a2 = ref.current) == null ? void 0 : _a2.requestFullscreen) == null ? void 0 : _b.call(_a2);
|
|
9124
9207
|
}, [ref]);
|
|
9125
|
-
const exit =
|
|
9208
|
+
const exit = React46.useCallback(() => {
|
|
9126
9209
|
var _a2;
|
|
9127
9210
|
if (document.fullscreenElement) (_a2 = document.exitFullscreen) == null ? void 0 : _a2.call(document);
|
|
9128
9211
|
}, []);
|
|
9129
|
-
const toggle =
|
|
9212
|
+
const toggle = React46.useCallback(() => {
|
|
9130
9213
|
if (isFullscreen) exit();
|
|
9131
9214
|
else enter();
|
|
9132
9215
|
}, [isFullscreen, enter, exit]);
|
|
@@ -9137,10 +9220,10 @@ function useFullscreen(ref) {
|
|
|
9137
9220
|
init_theme();
|
|
9138
9221
|
init_ThemeContext();
|
|
9139
9222
|
init_pdfWorkerProbe();
|
|
9140
|
-
var PdfViewer2 =
|
|
9223
|
+
var PdfViewer2 = React46__default.default.lazy(
|
|
9141
9224
|
() => Promise.resolve().then(() => (init_PdfViewer(), PdfViewer_exports)).then((m) => ({ default: m.PdfViewer }))
|
|
9142
9225
|
);
|
|
9143
|
-
var ExcelViewer2 =
|
|
9226
|
+
var ExcelViewer2 = React46__default.default.lazy(
|
|
9144
9227
|
() => Promise.resolve().then(() => (init_ExcelViewer(), ExcelViewer_exports)).then((m) => ({ default: m.ExcelViewer }))
|
|
9145
9228
|
);
|
|
9146
9229
|
var highlightColors = {
|
|
@@ -9191,8 +9274,8 @@ function DownloadIcon() {
|
|
|
9191
9274
|
function DocumentPreviewResolver(p) {
|
|
9192
9275
|
var _a2, _b, _c, _d, _e, _f, _g, _h, _i, _j, _k, _l, _m, _n, _o, _p, _q, _r, _s, _t, _u;
|
|
9193
9276
|
const { BORDER: BORDER3, MUTED: MUTED2, PAPER: PAPER2, ACCENT: ACCENT2, SURFACE: SURFACE2, SHADOW: SHADOW2 } = useTheme();
|
|
9194
|
-
const [currentPage, setCurrentPage] =
|
|
9195
|
-
const containerRef =
|
|
9277
|
+
const [currentPage, setCurrentPage] = React46.useState(0);
|
|
9278
|
+
const containerRef = React46.useRef(null);
|
|
9196
9279
|
const { isFullscreen, toggle } = useFullscreen(containerRef);
|
|
9197
9280
|
const hasRealFile = !!(((_a2 = p.source) == null ? void 0 : _a2.url) || ((_b = p.source) == null ? void 0 : _b.base64));
|
|
9198
9281
|
const isPdf = p.documentType === "pdf";
|
|
@@ -9200,15 +9283,15 @@ function DocumentPreviewResolver(p) {
|
|
|
9200
9283
|
const totalPages = ((_c = p.pages) != null ? _c : []).length;
|
|
9201
9284
|
const page = p.pages[currentPage];
|
|
9202
9285
|
const pageHighlights = ((_d = p.highlights) != null ? _d : []).filter((h) => h.pageIndex === currentPage);
|
|
9203
|
-
const [pdfFailed, setPdfFailed] =
|
|
9286
|
+
const [pdfFailed, setPdfFailed] = React46.useState(false);
|
|
9204
9287
|
const pdfWorkerReady = usePdfWorkerReady(hasRealFile && isPdf);
|
|
9205
9288
|
const pdfReady = pdfFailed ? false : pdfWorkerReady;
|
|
9206
9289
|
const showPdfViewer = hasRealFile && isPdf && pdfReady === true;
|
|
9207
9290
|
const pdfPending = hasRealFile && isPdf && pdfReady === null;
|
|
9208
|
-
const handlePdfLoad =
|
|
9291
|
+
const handlePdfLoad = React46.useCallback(() => {
|
|
9209
9292
|
}, []);
|
|
9210
|
-
const handlePdfError =
|
|
9211
|
-
const handleExcelLoad =
|
|
9293
|
+
const handlePdfError = React46.useCallback(() => setPdfFailed(true), []);
|
|
9294
|
+
const handleExcelLoad = React46.useCallback(() => {
|
|
9212
9295
|
}, []);
|
|
9213
9296
|
return /* @__PURE__ */ jsxRuntime.jsx(ComponentActions, { filename: (_e = p.title) != null ? _e : "document-preview", children: /* @__PURE__ */ jsxRuntime.jsxs(
|
|
9214
9297
|
"div",
|
|
@@ -9321,7 +9404,7 @@ function DocumentPreviewResolver(p) {
|
|
|
9321
9404
|
display: "flex",
|
|
9322
9405
|
flexDirection: "column"
|
|
9323
9406
|
}, children: [
|
|
9324
|
-
showPdfViewer ? /* @__PURE__ */ jsxRuntime.jsx(
|
|
9407
|
+
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: [
|
|
9325
9408
|
"No content available for ",
|
|
9326
9409
|
(_u = page == null ? void 0 : page.label) != null ? _u : "this page"
|
|
9327
9410
|
] }),
|
|
@@ -9386,7 +9469,7 @@ function ConfidenceBar({ confidence, height = 6 }) {
|
|
|
9386
9469
|
function StepCard({ step, isLast }) {
|
|
9387
9470
|
var _a2;
|
|
9388
9471
|
const { ACCENT: ACCENT2, MUTED: MUTED2, BORDER: BORDER3, SURFACE_MUTED: SURFACE_MUTED2 } = useTheme();
|
|
9389
|
-
const [expanded, setExpanded] =
|
|
9472
|
+
const [expanded, setExpanded] = React46.useState(false);
|
|
9390
9473
|
const cfg = stepTypeConfig[step.stepType];
|
|
9391
9474
|
const detail = (_a2 = step.detail) != null ? _a2 : "";
|
|
9392
9475
|
const isLong = detail.length > 100;
|
|
@@ -9895,7 +9978,7 @@ function ExampleRow({ example }) {
|
|
|
9895
9978
|
}
|
|
9896
9979
|
function PartSection({ part, defaultOpen }) {
|
|
9897
9980
|
const { BORDER: BORDER3, MUTED: MUTED2, SURFACE: SURFACE2 } = useTheme();
|
|
9898
|
-
const [open, setOpen] =
|
|
9981
|
+
const [open, setOpen] = React46.useState(defaultOpen);
|
|
9899
9982
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
9900
9983
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
9901
9984
|
"button",
|
|
@@ -10025,7 +10108,7 @@ function EngagementPipelineResolver(p) {
|
|
|
10025
10108
|
const defaultActive = phases.findIndex(
|
|
10026
10109
|
(ph) => ph.status === "in-progress" || ph.status === "blocked"
|
|
10027
10110
|
);
|
|
10028
|
-
const [activeIdx, setActiveIdx] =
|
|
10111
|
+
const [activeIdx, setActiveIdx] = React46.useState(defaultActive >= 0 ? defaultActive : 0);
|
|
10029
10112
|
const activePhase = phases[activeIdx];
|
|
10030
10113
|
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: [
|
|
10031
10114
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", flexDirection: "column", gap: "4px" }, children: [
|
|
@@ -10109,7 +10192,7 @@ function EngagementPipelineResolver(p) {
|
|
|
10109
10192
|
const color = (_a3 = statusColor2[phase.status]) != null ? _a3 : "#d6d3d1";
|
|
10110
10193
|
const isCurrent = i === activeIdx;
|
|
10111
10194
|
const size = isCurrent ? 28 : 20;
|
|
10112
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
10195
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(React46__default.default.Fragment, { children: [
|
|
10113
10196
|
i > 0 && /* @__PURE__ */ jsxRuntime.jsx(
|
|
10114
10197
|
"div",
|
|
10115
10198
|
{
|
|
@@ -10417,7 +10500,7 @@ function Avatar({ name, avatar, hovered }) {
|
|
|
10417
10500
|
function EntityCardGridResolver(p) {
|
|
10418
10501
|
var _a2, _b;
|
|
10419
10502
|
const { BORDER: BORDER3, MUTED: MUTED2, ACCENT: ACCENT2, SHADOW: SHADOW2 } = useTheme();
|
|
10420
|
-
const [hoveredId, setHoveredId] =
|
|
10503
|
+
const [hoveredId, setHoveredId] = React46.useState(null);
|
|
10421
10504
|
return /* @__PURE__ */ jsxRuntime.jsx(ComponentActions, { filename: (_a2 = p.title) != null ? _a2 : "entity-card-grid", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { width: "100%", display: "flex", flexDirection: "column", gap: "10px" }, children: [
|
|
10422
10505
|
p.title && /* @__PURE__ */ jsxRuntime.jsx(
|
|
10423
10506
|
"p",
|
|
@@ -10674,7 +10757,7 @@ function StepRow({ step }) {
|
|
|
10674
10757
|
function JobTrackerResolver(p) {
|
|
10675
10758
|
var _a2, _b, _c, _d, _e, _f, _g;
|
|
10676
10759
|
const { BORDER: BORDER3, MUTED: MUTED2, ACCENT: ACCENT2, PAPER: PAPER2, SURFACE: SURFACE2, SURFACE_MUTED: SURFACE_MUTED2, SHADOW: SHADOW2 } = useTheme();
|
|
10677
|
-
const [stepsOpen, setStepsOpen] =
|
|
10760
|
+
const [stepsOpen, setStepsOpen] = React46.useState(true);
|
|
10678
10761
|
const barColor = (_a2 = statusColors[p.status]) != null ? _a2 : MUTED2;
|
|
10679
10762
|
const badge = (_b = statusBadgeConfig[p.status]) != null ? _b : statusBadgeConfig.queued;
|
|
10680
10763
|
const progress = (_c = p.progress) != null ? _c : p.status === "completed" ? 100 : 0;
|
|
@@ -11117,7 +11200,7 @@ function CitationCard({
|
|
|
11117
11200
|
}
|
|
11118
11201
|
function FollowUpItem({ text }) {
|
|
11119
11202
|
const { SECONDARY: SECONDARY2 } = useTheme();
|
|
11120
|
-
const [hovered, setHovered] =
|
|
11203
|
+
const [hovered, setHovered] = React46.useState(false);
|
|
11121
11204
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
11122
11205
|
"span",
|
|
11123
11206
|
{
|
|
@@ -11143,7 +11226,7 @@ function CitationMarker({
|
|
|
11143
11226
|
onClick
|
|
11144
11227
|
}) {
|
|
11145
11228
|
const { SECONDARY: SECONDARY2 } = useTheme();
|
|
11146
|
-
const [hovered, setHovered] =
|
|
11229
|
+
const [hovered, setHovered] = React46.useState(false);
|
|
11147
11230
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
11148
11231
|
"sup",
|
|
11149
11232
|
{
|
|
@@ -11172,7 +11255,7 @@ function CitationMarker({
|
|
|
11172
11255
|
function CitedAnswerResolver(p) {
|
|
11173
11256
|
var _a2, _b, _c, _d, _e;
|
|
11174
11257
|
const { BORDER: BORDER3, MUTED: MUTED2, ACCENT: ACCENT2, SECONDARY: SECONDARY2, SURFACE: SURFACE2, SHADOW: SHADOW2 } = useTheme();
|
|
11175
|
-
const [expandedIds, setExpandedIds] =
|
|
11258
|
+
const [expandedIds, setExpandedIds] = React46.useState(/* @__PURE__ */ new Set());
|
|
11176
11259
|
const toggleCitation = (id) => {
|
|
11177
11260
|
setExpandedIds((prev) => {
|
|
11178
11261
|
const next = new Set(prev);
|
|
@@ -11477,7 +11560,7 @@ function TransactionFeedResolver(p) {
|
|
|
11477
11560
|
var _a2, _b, _c, _d, _e;
|
|
11478
11561
|
const { BORDER: BORDER3, MUTED: MUTED2 } = useTheme();
|
|
11479
11562
|
const currency = (_a2 = p.currency) != null ? _a2 : "USD";
|
|
11480
|
-
const [hoveredIndex, setHoveredIndex] =
|
|
11563
|
+
const [hoveredIndex, setHoveredIndex] = React46.useState(null);
|
|
11481
11564
|
const hasBalance = ((_b = p.transactions) != null ? _b : []).some((tx) => tx.balance != null);
|
|
11482
11565
|
const totalInflows = p.transactions.filter((tx) => tx.amount > 0 && tx.status !== "reversed").reduce((sum, tx) => sum + tx.amount, 0);
|
|
11483
11566
|
const totalOutflows = p.transactions.filter((tx) => tx.amount < 0 && tx.status !== "reversed").reduce((sum, tx) => sum + tx.amount, 0);
|
|
@@ -11635,7 +11718,7 @@ function formatDate2(dateStr) {
|
|
|
11635
11718
|
function FileRow({ item }) {
|
|
11636
11719
|
var _a2;
|
|
11637
11720
|
const { BORDER: BORDER3, MUTED: MUTED2, PAPER: PAPER2, SURFACE: SURFACE2, SECONDARY: SECONDARY2 } = useTheme();
|
|
11638
|
-
const [hovered, setHovered] =
|
|
11721
|
+
const [hovered, setHovered] = React46.useState(false);
|
|
11639
11722
|
const cfg = getDocConfig(item.docType);
|
|
11640
11723
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
11641
11724
|
"div",
|
|
@@ -11712,8 +11795,8 @@ function FileRow({ item }) {
|
|
|
11712
11795
|
}
|
|
11713
11796
|
function GroupSection({ groupName, items }) {
|
|
11714
11797
|
const { BORDER: BORDER3, MUTED: MUTED2, SURFACE: SURFACE2, SURFACE_MUTED: SURFACE_MUTED2 } = useTheme();
|
|
11715
|
-
const [open, setOpen] =
|
|
11716
|
-
const [headerHovered, setHeaderHovered] =
|
|
11798
|
+
const [open, setOpen] = React46.useState(true);
|
|
11799
|
+
const [headerHovered, setHeaderHovered] = React46.useState(false);
|
|
11717
11800
|
return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
11718
11801
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
11719
11802
|
"button",
|
|
@@ -11829,7 +11912,7 @@ init_theme();
|
|
|
11829
11912
|
var FAMILIES = [
|
|
11830
11913
|
{ exts: ["csv", "tsv", "xls", "xlsx", "numbers"], fg: exports.SEMANTIC.success.color, bg: exports.SEMANTIC.success.bg },
|
|
11831
11914
|
{ exts: ["pdf"], fg: exports.SEMANTIC.error.color, bg: exports.SEMANTIC.error.bg },
|
|
11832
|
-
{ exts: ["doc", "docx", "txt", "md", "rtf", "pages"], fg: exports.SEMANTIC.info.color, bg: exports.SEMANTIC.info.bg },
|
|
11915
|
+
{ exts: ["doc", "docx", "txt", "md", "rtf", "pages", "html", "htm"], fg: exports.SEMANTIC.info.color, bg: exports.SEMANTIC.info.bg },
|
|
11833
11916
|
{ exts: ["json", "yaml", "yml", "xml", "toml"], fg: exports.SEMANTIC.purple.color, bg: exports.SEMANTIC.purple.bg },
|
|
11834
11917
|
{ exts: ["zip", "tar", "gz", "rar", "7z"], fg: exports.SEMANTIC.warning.color, bg: exports.SEMANTIC.warning.bg },
|
|
11835
11918
|
{ exts: ["png", "jpg", "jpeg", "gif", "svg", "webp", "bmp"], fg: exports.SEMANTIC.info.color, bg: exports.SEMANTIC.info.bg }
|
|
@@ -11856,7 +11939,9 @@ var PREVIEW_EXTS = {
|
|
|
11856
11939
|
txt: "text",
|
|
11857
11940
|
log: "text",
|
|
11858
11941
|
text: "text",
|
|
11859
|
-
docx: "docx"
|
|
11942
|
+
docx: "docx",
|
|
11943
|
+
html: "html",
|
|
11944
|
+
htm: "html"
|
|
11860
11945
|
};
|
|
11861
11946
|
function extOf(fileType, filename) {
|
|
11862
11947
|
var _a2;
|
|
@@ -11867,6 +11952,7 @@ function extOf(fileType, filename) {
|
|
|
11867
11952
|
if (mime.includes("csv")) return "csv";
|
|
11868
11953
|
if (mime.includes("markdown")) return "md";
|
|
11869
11954
|
if (mime.includes("wordprocessing") || mime.includes("msword")) return "docx";
|
|
11955
|
+
if (mime.includes("html")) return "html";
|
|
11870
11956
|
if (mime.startsWith("text/")) return "txt";
|
|
11871
11957
|
} else if (fileType) {
|
|
11872
11958
|
const t = fileType.toLowerCase().replace(/[^a-z0-9]/g, "");
|
|
@@ -11904,20 +11990,21 @@ function isExpirySoon(expiresAt) {
|
|
|
11904
11990
|
// src/shared/viewers/PreviewHost.tsx
|
|
11905
11991
|
init_ThemeContext();
|
|
11906
11992
|
init_pdfWorkerProbe();
|
|
11907
|
-
var PdfViewer3 =
|
|
11993
|
+
var PdfViewer3 = React46.lazy(
|
|
11908
11994
|
() => Promise.resolve().then(() => (init_PdfViewer(), PdfViewer_exports)).then((m) => ({ default: m.PdfViewer }))
|
|
11909
11995
|
);
|
|
11910
|
-
var ExcelViewer3 =
|
|
11996
|
+
var ExcelViewer3 = React46.lazy(
|
|
11911
11997
|
() => Promise.resolve().then(() => (init_ExcelViewer(), ExcelViewer_exports)).then((m) => ({ default: m.ExcelViewer }))
|
|
11912
11998
|
);
|
|
11913
|
-
var CsvViewer2 =
|
|
11914
|
-
var TextViewer2 =
|
|
11915
|
-
var DocxViewer2 =
|
|
11999
|
+
var CsvViewer2 = React46.lazy(() => Promise.resolve().then(() => (init_CsvViewer(), CsvViewer_exports)).then((m) => ({ default: m.CsvViewer })));
|
|
12000
|
+
var TextViewer2 = React46.lazy(() => Promise.resolve().then(() => (init_TextViewer(), TextViewer_exports)).then((m) => ({ default: m.TextViewer })));
|
|
12001
|
+
var DocxViewer2 = React46.lazy(() => Promise.resolve().then(() => (init_DocxViewer(), DocxViewer_exports)).then((m) => ({ default: m.DocxViewer })));
|
|
12002
|
+
var HtmlViewer2 = React46.lazy(() => Promise.resolve().then(() => (init_HtmlViewer(), HtmlViewer_exports)).then((m) => ({ default: m.HtmlViewer })));
|
|
11916
12003
|
var PEEK_ROWS = 20;
|
|
11917
12004
|
var PEEK_LINES = 40;
|
|
11918
12005
|
function GatedPdfViewer({ source }) {
|
|
11919
12006
|
const { MUTED: MUTED2 } = useTheme();
|
|
11920
|
-
const [failed, setFailed] =
|
|
12007
|
+
const [failed, setFailed] = React46.useState(false);
|
|
11921
12008
|
const workerReady = usePdfWorkerReady(true);
|
|
11922
12009
|
const ready = failed ? false : workerReady;
|
|
11923
12010
|
if (ready === null) {
|
|
@@ -11952,10 +12039,13 @@ function PreviewHost({ kind, source, mode = "full" }) {
|
|
|
11952
12039
|
case "docx":
|
|
11953
12040
|
viewer = /* @__PURE__ */ jsxRuntime.jsx(DocxViewer2, { url: source.url, base64: source.base64 });
|
|
11954
12041
|
break;
|
|
12042
|
+
case "html":
|
|
12043
|
+
viewer = /* @__PURE__ */ jsxRuntime.jsx(HtmlViewer2, { url: source.url, base64: source.base64, height: peek ? 240 : 480 });
|
|
12044
|
+
break;
|
|
11955
12045
|
default:
|
|
11956
12046
|
return null;
|
|
11957
12047
|
}
|
|
11958
|
-
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
12048
|
+
return /* @__PURE__ */ jsxRuntime.jsx(React46.Suspense, { fallback, children: viewer });
|
|
11959
12049
|
}
|
|
11960
12050
|
|
|
11961
12051
|
// src/shared/PreviewModal.tsx
|
|
@@ -11971,7 +12061,7 @@ function PreviewModal({
|
|
|
11971
12061
|
onDownload
|
|
11972
12062
|
}) {
|
|
11973
12063
|
const { BORDER: BORDER3, MUTED: MUTED2, ACCENT: ACCENT2, SURFACE: SURFACE2, FOREGROUND: FOREGROUND2, SCRIM: SCRIM2 } = useTheme();
|
|
11974
|
-
|
|
12064
|
+
React46.useEffect(() => {
|
|
11975
12065
|
if (!open) return;
|
|
11976
12066
|
const onKey = (e) => {
|
|
11977
12067
|
if (e.key === "Escape") onClose();
|
|
@@ -12148,17 +12238,17 @@ function FileCard({
|
|
|
12148
12238
|
previewDisabled = false
|
|
12149
12239
|
}) {
|
|
12150
12240
|
const { BORDER: BORDER3, MUTED: MUTED2, ACCENT: ACCENT2, SURFACE: SURFACE2, SURFACE_MUTED: SURFACE_MUTED2, SHADOW: SHADOW2 } = useTheme();
|
|
12151
|
-
const [cardHover, setCardHover] =
|
|
12152
|
-
const [btnHover, setBtnHover] =
|
|
12153
|
-
const [pvHover, setPvHover] =
|
|
12241
|
+
const [cardHover, setCardHover] = React46.useState(false);
|
|
12242
|
+
const [btnHover, setBtnHover] = React46.useState(false);
|
|
12243
|
+
const [pvHover, setPvHover] = React46.useState(false);
|
|
12154
12244
|
const previewKind = previewKindFor(fileType, filename);
|
|
12155
12245
|
const canPreview = !previewDisabled && previewKind !== null && (!!previewUrl || !!fetchPreviewBlob);
|
|
12156
|
-
const [peekOpen, setPeekOpen] =
|
|
12157
|
-
const [modalOpen, setModalOpen] =
|
|
12158
|
-
const [source, setSource] =
|
|
12159
|
-
const [pvLoading, setPvLoading] =
|
|
12160
|
-
const [pvError, setPvError] =
|
|
12161
|
-
const ensureSource =
|
|
12246
|
+
const [peekOpen, setPeekOpen] = React46.useState(false);
|
|
12247
|
+
const [modalOpen, setModalOpen] = React46.useState(false);
|
|
12248
|
+
const [source, setSource] = React46.useState(previewUrl ? { url: previewUrl } : null);
|
|
12249
|
+
const [pvLoading, setPvLoading] = React46.useState(false);
|
|
12250
|
+
const [pvError, setPvError] = React46.useState(null);
|
|
12251
|
+
const ensureSource = React46.useCallback(async () => {
|
|
12162
12252
|
if (source) return source;
|
|
12163
12253
|
if (previewUrl) {
|
|
12164
12254
|
const s = { url: previewUrl };
|
|
@@ -12180,7 +12270,7 @@ function FileCard({
|
|
|
12180
12270
|
setPvLoading(false);
|
|
12181
12271
|
}
|
|
12182
12272
|
}, [source, previewUrl, fetchPreviewBlob]);
|
|
12183
|
-
const togglePeek =
|
|
12273
|
+
const togglePeek = React46.useCallback(async () => {
|
|
12184
12274
|
if (peekOpen) {
|
|
12185
12275
|
setPeekOpen(false);
|
|
12186
12276
|
return;
|
|
@@ -12188,7 +12278,7 @@ function FileCard({
|
|
|
12188
12278
|
setPeekOpen(true);
|
|
12189
12279
|
await ensureSource();
|
|
12190
12280
|
}, [peekOpen, ensureSource]);
|
|
12191
|
-
const openModal =
|
|
12281
|
+
const openModal = React46.useCallback(async () => {
|
|
12192
12282
|
const s = await ensureSource();
|
|
12193
12283
|
if (s) setModalOpen(true);
|
|
12194
12284
|
}, [ensureSource]);
|
|
@@ -12303,7 +12393,7 @@ function FileCard({
|
|
|
12303
12393
|
whiteSpace: "nowrap"
|
|
12304
12394
|
},
|
|
12305
12395
|
children: [
|
|
12306
|
-
metaTokens.map((t, i) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
12396
|
+
metaTokens.map((t, i) => /* @__PURE__ */ jsxRuntime.jsxs(React46__default.default.Fragment, { children: [
|
|
12307
12397
|
i > 0 && /* @__PURE__ */ jsxRuntime.jsx("span", { style: { color: MUTED2 }, children: "\xB7" }),
|
|
12308
12398
|
/* @__PURE__ */ jsxRuntime.jsx("span", { children: t })
|
|
12309
12399
|
] }, i)),
|
|
@@ -12648,7 +12738,7 @@ function ServiceCard({ item, isHovered, onHover, onLeave: onLeave2 }) {
|
|
|
12648
12738
|
function OpsDashboardResolver(p) {
|
|
12649
12739
|
var _a2, _b, _c;
|
|
12650
12740
|
const { BORDER: BORDER3, MUTED: MUTED2 } = useTheme();
|
|
12651
|
-
const [hoveredId, setHoveredId] =
|
|
12741
|
+
const [hoveredId, setHoveredId] = React46.useState(null);
|
|
12652
12742
|
const hasRunning = ((_a2 = p.items) != null ? _a2 : []).some((item) => item.state === "running");
|
|
12653
12743
|
return /* @__PURE__ */ jsxRuntime.jsxs(ComponentActions, { filename: (_b = p.title) != null ? _b : "ops-dashboard", children: [
|
|
12654
12744
|
hasRunning && /* @__PURE__ */ jsxRuntime.jsx("style", { children: PULSE_KEYFRAMES }),
|
|
@@ -12702,8 +12792,8 @@ function formatDate3(value) {
|
|
|
12702
12792
|
}
|
|
12703
12793
|
function CopyButton({ value, rowHovered }) {
|
|
12704
12794
|
const { MUTED: MUTED2 } = useTheme();
|
|
12705
|
-
const [copied, setCopied] =
|
|
12706
|
-
const [btnHovered, setBtnHovered] =
|
|
12795
|
+
const [copied, setCopied] = React46.useState(false);
|
|
12796
|
+
const [btnHovered, setBtnHovered] = React46.useState(false);
|
|
12707
12797
|
const handleCopy = () => {
|
|
12708
12798
|
navigator.clipboard.writeText(value).then(() => {
|
|
12709
12799
|
setCopied(true);
|
|
@@ -12797,7 +12887,7 @@ function ValueCell({ item }) {
|
|
|
12797
12887
|
}
|
|
12798
12888
|
function KVRow({ item, isLast, index }) {
|
|
12799
12889
|
const { MUTED: MUTED2, BORDER: BORDER3, SURFACE: SURFACE2, SURFACE_MUTED: SURFACE_MUTED2 } = useTheme();
|
|
12800
|
-
const [hovered, setHovered] =
|
|
12890
|
+
const [hovered, setHovered] = React46.useState(false);
|
|
12801
12891
|
const altBg = index % 2 === 1 ? SURFACE_MUTED2 : SURFACE2;
|
|
12802
12892
|
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
12803
12893
|
"div",
|
|
@@ -12882,7 +12972,7 @@ function KeyValueListResolver(p) {
|
|
|
12882
12972
|
var _a4;
|
|
12883
12973
|
return sum + ((_a4 = g.items) != null ? _a4 : []).length;
|
|
12884
12974
|
}, 0);
|
|
12885
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
12975
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(React46__default.default.Fragment, { children: [
|
|
12886
12976
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
12887
12977
|
"div",
|
|
12888
12978
|
{
|
|
@@ -13060,7 +13150,7 @@ function BalanceSheetResolver(p) {
|
|
|
13060
13150
|
/* @__PURE__ */ jsxRuntime.jsxs("tbody", { children: [
|
|
13061
13151
|
((_p = p.sections) != null ? _p : []).map((section) => {
|
|
13062
13152
|
var _a3;
|
|
13063
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
13153
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(React46__default.default.Fragment, { children: [
|
|
13064
13154
|
/* @__PURE__ */ jsxRuntime.jsx("tr", { children: /* @__PURE__ */ jsxRuntime.jsx("td", { colSpan, style: {
|
|
13065
13155
|
padding: "8px 12px",
|
|
13066
13156
|
fontSize: "12px",
|
|
@@ -13073,7 +13163,7 @@ function BalanceSheetResolver(p) {
|
|
|
13073
13163
|
}, children: (_a3 = categoryLabels2[section.category]) != null ? _a3 : section.category }) }),
|
|
13074
13164
|
section.subsections.map((sub, si) => {
|
|
13075
13165
|
var _a4;
|
|
13076
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
13166
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(React46__default.default.Fragment, { children: [
|
|
13077
13167
|
/* @__PURE__ */ jsxRuntime.jsx("tr", { children: /* @__PURE__ */ jsxRuntime.jsx("td", { colSpan, style: {
|
|
13078
13168
|
padding: "6px 10px 6px 24px",
|
|
13079
13169
|
fontSize: "12px",
|
|
@@ -13249,7 +13339,7 @@ function IncomeStatementResolver(p) {
|
|
|
13249
13339
|
textAlign: "left",
|
|
13250
13340
|
whiteSpace: "nowrap"
|
|
13251
13341
|
}, children: "\xA0" }),
|
|
13252
|
-
periods.map((period) => /* @__PURE__ */ jsxRuntime.jsxs(
|
|
13342
|
+
periods.map((period) => /* @__PURE__ */ jsxRuntime.jsxs(React46__default.default.Fragment, { children: [
|
|
13253
13343
|
/* @__PURE__ */ jsxRuntime.jsx("th", { style: {
|
|
13254
13344
|
fontSize: "11px",
|
|
13255
13345
|
fontWeight: 500,
|
|
@@ -13280,7 +13370,7 @@ function IncomeStatementResolver(p) {
|
|
|
13280
13370
|
sections.map((section, si) => {
|
|
13281
13371
|
var _a3;
|
|
13282
13372
|
const isSubtotal = section.sectionType === "subtotal";
|
|
13283
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
13373
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(React46__default.default.Fragment, { children: [
|
|
13284
13374
|
/* @__PURE__ */ jsxRuntime.jsx("tr", { children: /* @__PURE__ */ jsxRuntime.jsx("td", { colSpan: colCount, style: {
|
|
13285
13375
|
padding: "8px 12px",
|
|
13286
13376
|
fontSize: "12px",
|
|
@@ -13311,7 +13401,7 @@ function IncomeStatementResolver(p) {
|
|
|
13311
13401
|
var _a5;
|
|
13312
13402
|
const val = (_a5 = amounts[pi]) != null ? _a5 : 0;
|
|
13313
13403
|
const isNeg = val < 0;
|
|
13314
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
13404
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(React46__default.default.Fragment, { children: [
|
|
13315
13405
|
/* @__PURE__ */ jsxRuntime.jsx("td", { style: {
|
|
13316
13406
|
padding: "6px 10px",
|
|
13317
13407
|
fontSize: "13px",
|
|
@@ -13346,7 +13436,7 @@ function IncomeStatementResolver(p) {
|
|
|
13346
13436
|
var _a3;
|
|
13347
13437
|
const val = (_a3 = grossProfit[pi]) != null ? _a3 : 0;
|
|
13348
13438
|
const isNeg = val < 0;
|
|
13349
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
13439
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(React46__default.default.Fragment, { children: [
|
|
13350
13440
|
/* @__PURE__ */ jsxRuntime.jsx("td", { style: {
|
|
13351
13441
|
padding: "8px 10px",
|
|
13352
13442
|
fontSize: "12px",
|
|
@@ -13381,7 +13471,7 @@ function IncomeStatementResolver(p) {
|
|
|
13381
13471
|
var _a3;
|
|
13382
13472
|
const val = (_a3 = operatingIncome[pi]) != null ? _a3 : 0;
|
|
13383
13473
|
const isNeg = val < 0;
|
|
13384
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
13474
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(React46__default.default.Fragment, { children: [
|
|
13385
13475
|
/* @__PURE__ */ jsxRuntime.jsx("td", { style: {
|
|
13386
13476
|
padding: "8px 10px",
|
|
13387
13477
|
fontSize: "12px",
|
|
@@ -13415,7 +13505,7 @@ function IncomeStatementResolver(p) {
|
|
|
13415
13505
|
var _a3;
|
|
13416
13506
|
const val = (_a3 = netIncome[pi]) != null ? _a3 : 0;
|
|
13417
13507
|
const isNeg = val < 0;
|
|
13418
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
13508
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(React46__default.default.Fragment, { children: [
|
|
13419
13509
|
/* @__PURE__ */ jsxRuntime.jsx("td", { style: {
|
|
13420
13510
|
padding: "10px 10px",
|
|
13421
13511
|
fontSize: "13px",
|
|
@@ -13635,7 +13725,7 @@ function CashFlowStatementResolver(p) {
|
|
|
13635
13725
|
/* @__PURE__ */ jsxRuntime.jsxs("tbody", { children: [
|
|
13636
13726
|
activities.map((activity, ai) => {
|
|
13637
13727
|
var _a3, _b2, _c2;
|
|
13638
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
13728
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(React46__default.default.Fragment, { children: [
|
|
13639
13729
|
ai > 0 && /* @__PURE__ */ jsxRuntime.jsx("tr", { children: /* @__PURE__ */ jsxRuntime.jsx(
|
|
13640
13730
|
"td",
|
|
13641
13731
|
{
|
|
@@ -16049,8 +16139,8 @@ var PRIORITY_STYLES = {
|
|
|
16049
16139
|
function EscalationCardResolver(p) {
|
|
16050
16140
|
var _a2, _b, _c, _d, _e;
|
|
16051
16141
|
const { BORDER: BORDER3, MUTED: MUTED2, ACCENT: ACCENT2, ACCENT_SOFT: ACCENT_SOFT2, SHADOW: SHADOW2 } = useTheme();
|
|
16052
|
-
const [cardHovered, setCardHovered] =
|
|
16053
|
-
const [btnHovered, setBtnHovered] =
|
|
16142
|
+
const [cardHovered, setCardHovered] = React46.useState(false);
|
|
16143
|
+
const [btnHovered, setBtnHovered] = React46.useState(false);
|
|
16054
16144
|
const priorityStyle = p.priority ? PRIORITY_STYLES[p.priority] : null;
|
|
16055
16145
|
const railColor = (_a2 = priorityStyle == null ? void 0 : priorityStyle.color) != null ? _a2 : ACCENT2;
|
|
16056
16146
|
const iconBg = (_b = priorityStyle == null ? void 0 : priorityStyle.bg) != null ? _b : "#fff2ec";
|
|
@@ -16922,9 +17012,9 @@ var CONNECTED_GREEN = "#15803d";
|
|
|
16922
17012
|
function ConnectIntegrationResolver(p) {
|
|
16923
17013
|
var _a2;
|
|
16924
17014
|
const { BORDER: BORDER3, MUTED: MUTED2, ACCENT: ACCENT2, ACCENT_SOFT: ACCENT_SOFT2, PAPER: PAPER2, SURFACE: SURFACE2, SHADOW: SHADOW2 } = useTheme();
|
|
16925
|
-
const [cardHovered, setCardHovered] =
|
|
16926
|
-
const [btnHovered, setBtnHovered] =
|
|
16927
|
-
const [imgFailed, setImgFailed] =
|
|
17015
|
+
const [cardHovered, setCardHovered] = React46.useState(false);
|
|
17016
|
+
const [btnHovered, setBtnHovered] = React46.useState(false);
|
|
17017
|
+
const [imgFailed, setImgFailed] = React46.useState(false);
|
|
16928
17018
|
const name = (p.integrationName || "Integration").trim();
|
|
16929
17019
|
const initial = name.charAt(0).toUpperCase();
|
|
16930
17020
|
const iconSrc = p.iconUrl || brandIconUrl(name);
|
|
@@ -17086,9 +17176,9 @@ function IntegrationsListResolver(p) {
|
|
|
17086
17176
|
var _a2, _b;
|
|
17087
17177
|
const { BORDER: BORDER3, MUTED: MUTED2, PAPER: PAPER2, ACCENT: ACCENT2, ACCENT_SOFT: ACCENT_SOFT2, SURFACE: SURFACE2, SHADOW: SHADOW2 } = useTheme();
|
|
17088
17178
|
const integrations = Array.isArray(p.integrations) ? p.integrations : [];
|
|
17089
|
-
const [rowHover, setRowHover] =
|
|
17090
|
-
const [btnHover, setBtnHover] =
|
|
17091
|
-
const [failed, setFailed] =
|
|
17179
|
+
const [rowHover, setRowHover] = React46.useState(null);
|
|
17180
|
+
const [btnHover, setBtnHover] = React46.useState(null);
|
|
17181
|
+
const [failed, setFailed] = React46.useState({});
|
|
17092
17182
|
const connectedCount = integrations.filter((i) => i.status === "connected").length;
|
|
17093
17183
|
return /* @__PURE__ */ jsxRuntime.jsx(ComponentActions, { filename: (_a2 = p.title) != null ? _a2 : "integrations", children: /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { width: "100%", display: "flex", flexDirection: "column", gap: "11px" }, children: [
|
|
17094
17184
|
/* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", flexDirection: "column", gap: "2px" }, children: [
|
|
@@ -17580,13 +17670,13 @@ var ellipsis = {
|
|
|
17580
17670
|
function PipelinePreviewResolver(p) {
|
|
17581
17671
|
var _a2, _b, _c, _d, _e, _f, _g;
|
|
17582
17672
|
const { MUTED: MUTED2, PAPER: PAPER2, BORDER: BORDER3, ACCENT: ACCENT2, ACCENT_SOFT: ACCENT_SOFT2, SURFACE: SURFACE2 } = useTheme();
|
|
17583
|
-
const [btnHovered, setBtnHovered] =
|
|
17673
|
+
const [btnHovered, setBtnHovered] = React46.useState(false);
|
|
17584
17674
|
const stateCfg = STATE_CONFIG[(_a2 = p.state) != null ? _a2 : "draft"];
|
|
17585
17675
|
const destinations = (_b = p.destinations) != null ? _b : [];
|
|
17586
17676
|
const steps = (_c = p.steps) != null ? _c : [];
|
|
17587
17677
|
const workstreams = (_d = p.workstreams) != null ? _d : [];
|
|
17588
17678
|
const scheduleLabel = p.schedule ? p.schedule.type === "manual" ? "Manual" : (_f = (_e = p.schedule.label) != null ? _e : p.schedule.cron) != null ? _f : "Scheduled" : null;
|
|
17589
|
-
const { nodes, edges, viewBox, vbW, vbH } =
|
|
17679
|
+
const { nodes, edges, viewBox, vbW, vbH } = React46.useMemo(() => {
|
|
17590
17680
|
const res = layoutGraph(steps);
|
|
17591
17681
|
const b = layoutBounds(res.nodes);
|
|
17592
17682
|
const pad = 24;
|
|
@@ -17600,7 +17690,7 @@ function PipelinePreviewResolver(p) {
|
|
|
17600
17690
|
vbH: h
|
|
17601
17691
|
};
|
|
17602
17692
|
}, [steps]);
|
|
17603
|
-
const nodeMap =
|
|
17693
|
+
const nodeMap = React46.useMemo(() => {
|
|
17604
17694
|
const m = {};
|
|
17605
17695
|
nodes.forEach((n) => m[n.id] = n);
|
|
17606
17696
|
return m;
|
|
@@ -17978,12 +18068,12 @@ var DEFAULT_INTERACTION = {
|
|
|
17978
18068
|
onDecisionSource: void 0,
|
|
17979
18069
|
onDecisionQueueSubmit: void 0
|
|
17980
18070
|
};
|
|
17981
|
-
var GenUIInteractionContext =
|
|
18071
|
+
var GenUIInteractionContext = React46.createContext(DEFAULT_INTERACTION);
|
|
17982
18072
|
function GenUIInteractionProvider({ value, children }) {
|
|
17983
18073
|
return /* @__PURE__ */ jsxRuntime.jsx(GenUIInteractionContext.Provider, { value, children });
|
|
17984
18074
|
}
|
|
17985
18075
|
function useGenUIInteraction() {
|
|
17986
|
-
return
|
|
18076
|
+
return React46.useContext(GenUIInteractionContext);
|
|
17987
18077
|
}
|
|
17988
18078
|
var STATUS_COLORS3 = {
|
|
17989
18079
|
done: "#15803d",
|
|
@@ -18175,8 +18265,8 @@ var CARD_MIN = 132;
|
|
|
18175
18265
|
var CARD_GAP = 16;
|
|
18176
18266
|
var AUTO_COMPACT_BELOW = 360;
|
|
18177
18267
|
function useContainerWidth(ref) {
|
|
18178
|
-
const [w, setW] =
|
|
18179
|
-
|
|
18268
|
+
const [w, setW] = React46__default.default.useState(0);
|
|
18269
|
+
React46__default.default.useLayoutEffect(() => {
|
|
18180
18270
|
const el = ref.current;
|
|
18181
18271
|
if (!el || typeof ResizeObserver === "undefined") return;
|
|
18182
18272
|
const ro = new ResizeObserver((entries) => {
|
|
@@ -18279,15 +18369,15 @@ function WorkflowStepperRenderer({
|
|
|
18279
18369
|
const interactive = typeof onSelectStep === "function";
|
|
18280
18370
|
const statusColor3 = (s) => s === "active" || s === "running" ? ACCENT2 : STATUS_COLORS3[s];
|
|
18281
18371
|
const doneCount = steps.filter((s) => s.status === "done").length;
|
|
18282
|
-
const rootRef =
|
|
18372
|
+
const rootRef = React46__default.default.useRef(null);
|
|
18283
18373
|
const containerW = useContainerWidth(rootRef);
|
|
18284
18374
|
let resolved = density === "auto" ? "full" : density;
|
|
18285
18375
|
if (density === "auto" && containerW > 0) {
|
|
18286
18376
|
const needed = steps.length * CARD_MIN + Math.max(0, steps.length - 1) * CARD_GAP;
|
|
18287
18377
|
resolved = containerW < AUTO_COMPACT_BELOW || needed > containerW * 1.6 ? "compact" : "full";
|
|
18288
18378
|
}
|
|
18289
|
-
const scrollerRef =
|
|
18290
|
-
|
|
18379
|
+
const scrollerRef = React46__default.default.useRef(null);
|
|
18380
|
+
React46__default.default.useEffect(() => {
|
|
18291
18381
|
if (resolved !== "full" || loading) return;
|
|
18292
18382
|
const sc = scrollerRef.current;
|
|
18293
18383
|
if (!sc) return;
|
|
@@ -18298,11 +18388,11 @@ function WorkflowStepperRenderer({
|
|
|
18298
18388
|
el.scrollIntoView({ inline: "center", block: "nearest", behavior: "smooth" });
|
|
18299
18389
|
}
|
|
18300
18390
|
}, [resolved, loading, selectedStep, activeStepId]);
|
|
18301
|
-
const [edges, setEdges] =
|
|
18391
|
+
const [edges, setEdges] = React46__default.default.useState({
|
|
18302
18392
|
left: false,
|
|
18303
18393
|
right: false
|
|
18304
18394
|
});
|
|
18305
|
-
const updateEdges =
|
|
18395
|
+
const updateEdges = React46__default.default.useCallback(() => {
|
|
18306
18396
|
const sc = scrollerRef.current;
|
|
18307
18397
|
if (!sc) return;
|
|
18308
18398
|
const max = sc.scrollWidth - sc.clientWidth;
|
|
@@ -18311,7 +18401,7 @@ function WorkflowStepperRenderer({
|
|
|
18311
18401
|
const right = sl < max - 1;
|
|
18312
18402
|
setEdges((prev) => prev.left === left && prev.right === right ? prev : { left, right });
|
|
18313
18403
|
}, []);
|
|
18314
|
-
|
|
18404
|
+
React46__default.default.useLayoutEffect(() => {
|
|
18315
18405
|
if (resolved !== "full" || loading) return;
|
|
18316
18406
|
updateEdges();
|
|
18317
18407
|
const sc = scrollerRef.current;
|
|
@@ -18367,7 +18457,7 @@ function WorkflowStepperRenderer({
|
|
|
18367
18457
|
const reached = s.status !== "pending";
|
|
18368
18458
|
const clickable = interactive && reached;
|
|
18369
18459
|
const size = act ? 11 : done ? 9 : 8;
|
|
18370
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
18460
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(React46__default.default.Fragment, { children: [
|
|
18371
18461
|
i > 0 && /* @__PURE__ */ jsxRuntime.jsx(
|
|
18372
18462
|
"span",
|
|
18373
18463
|
{
|
|
@@ -18511,7 +18601,7 @@ function WorkflowStepperRenderer({
|
|
|
18511
18601
|
const color = statusColor3(step.status);
|
|
18512
18602
|
const humans = ((_a3 = step.assignees) != null ? _a3 : []).filter((a) => a.kind === "human");
|
|
18513
18603
|
const roleCaption = humans.map((h) => h.role).filter(Boolean).slice(0, 2).join(" \xB7 ");
|
|
18514
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
18604
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(React46__default.default.Fragment, { children: [
|
|
18515
18605
|
i > 0 && /* @__PURE__ */ jsxRuntime.jsx(
|
|
18516
18606
|
"div",
|
|
18517
18607
|
{
|
|
@@ -18877,11 +18967,11 @@ function FieldDetail({
|
|
|
18877
18967
|
}) {
|
|
18878
18968
|
var _a2, _b, _c, _d;
|
|
18879
18969
|
const { BORDER: BORDER3, MUTED: MUTED2, PAPER: PAPER2, SECONDARY: SECONDARY2, SURFACE: SURFACE2, ACCENT: ACCENT2 } = useTheme();
|
|
18880
|
-
const [editing, setEditing] =
|
|
18881
|
-
const [draft, setDraft] =
|
|
18882
|
-
const [saving, setSaving] =
|
|
18883
|
-
const [saveError, setSaveError] =
|
|
18884
|
-
const textareaRef =
|
|
18970
|
+
const [editing, setEditing] = React46__default.default.useState(false);
|
|
18971
|
+
const [draft, setDraft] = React46__default.default.useState("");
|
|
18972
|
+
const [saving, setSaving] = React46__default.default.useState(false);
|
|
18973
|
+
const [saveError, setSaveError] = React46__default.default.useState(null);
|
|
18974
|
+
const textareaRef = React46__default.default.useRef(null);
|
|
18885
18975
|
const color = fieldColor(field, SECONDARY2);
|
|
18886
18976
|
const corrected = field.state === "corrected";
|
|
18887
18977
|
const startEdit = (e) => {
|
|
@@ -19391,7 +19481,7 @@ function FieldDetails({
|
|
|
19391
19481
|
},
|
|
19392
19482
|
children: facts.map((f) => {
|
|
19393
19483
|
var _a3;
|
|
19394
|
-
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
19484
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(React46__default.default.Fragment, { children: [
|
|
19395
19485
|
/* @__PURE__ */ jsxRuntime.jsx("dt", { style: { fontSize: "12px", color: MUTED2 }, children: f.label }),
|
|
19396
19486
|
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
19397
19487
|
"dd",
|
|
@@ -19490,7 +19580,7 @@ function FieldAuditLog({
|
|
|
19490
19580
|
fields = []
|
|
19491
19581
|
}) {
|
|
19492
19582
|
const { BORDER: BORDER3, MUTED: MUTED2, PAPER: PAPER2, SECONDARY: SECONDARY2 } = useTheme();
|
|
19493
|
-
const fieldLabelMap =
|
|
19583
|
+
const fieldLabelMap = React46__default.default.useMemo(() => {
|
|
19494
19584
|
var _a2;
|
|
19495
19585
|
const map = {};
|
|
19496
19586
|
for (const f of fields) map[f.field_key] = (_a2 = f.label) != null ? _a2 : f.field_key;
|
|
@@ -19689,10 +19779,10 @@ function PageOverlay({
|
|
|
19689
19779
|
secondary
|
|
19690
19780
|
}) {
|
|
19691
19781
|
const { PAPER: PAPER2, MUTED: MUTED2 } = useTheme();
|
|
19692
|
-
const imgRef =
|
|
19693
|
-
const selectedBoxRef =
|
|
19694
|
-
const [px, setPx] =
|
|
19695
|
-
|
|
19782
|
+
const imgRef = React46__default.default.useRef(null);
|
|
19783
|
+
const selectedBoxRef = React46__default.default.useRef(null);
|
|
19784
|
+
const [px, setPx] = React46__default.default.useState(null);
|
|
19785
|
+
React46__default.default.useEffect(() => {
|
|
19696
19786
|
const el = imgRef.current;
|
|
19697
19787
|
if (!el) return;
|
|
19698
19788
|
const measure = () => {
|
|
@@ -19706,7 +19796,7 @@ function PageOverlay({
|
|
|
19706
19796
|
ro.observe(el);
|
|
19707
19797
|
return () => ro.disconnect();
|
|
19708
19798
|
}, [page.imageUrl]);
|
|
19709
|
-
|
|
19799
|
+
React46__default.default.useEffect(() => {
|
|
19710
19800
|
if (!selectedKey) return;
|
|
19711
19801
|
if (!fields.some((f) => f.field_key === selectedKey && f.bbox)) return;
|
|
19712
19802
|
const el = selectedBoxRef.current;
|
|
@@ -19808,8 +19898,8 @@ function ExtractionDetail({
|
|
|
19808
19898
|
auditLoading
|
|
19809
19899
|
}) {
|
|
19810
19900
|
const { BORDER: BORDER3, MUTED: MUTED2, PAPER: PAPER2, SECONDARY: SECONDARY2 } = useTheme();
|
|
19811
|
-
const selectedCardRef =
|
|
19812
|
-
|
|
19901
|
+
const selectedCardRef = React46__default.default.useRef(null);
|
|
19902
|
+
React46__default.default.useEffect(() => {
|
|
19813
19903
|
if (!selectedKey || tab !== "fields") return;
|
|
19814
19904
|
const el = selectedCardRef.current;
|
|
19815
19905
|
if (el && typeof el.scrollIntoView === "function") {
|
|
@@ -19980,7 +20070,7 @@ function ExtractionModal({
|
|
|
19980
20070
|
children
|
|
19981
20071
|
}) {
|
|
19982
20072
|
const { BORDER: BORDER3, MUTED: MUTED2, SURFACE: SURFACE2, FOREGROUND: FOREGROUND2, SCRIM: SCRIM2 } = useTheme();
|
|
19983
|
-
|
|
20073
|
+
React46__default.default.useEffect(() => {
|
|
19984
20074
|
if (!open) return;
|
|
19985
20075
|
const onKey = (e) => {
|
|
19986
20076
|
if (e.key === "Escape") onClose();
|
|
@@ -20109,19 +20199,19 @@ function ExtractionModal({
|
|
|
20109
20199
|
function DocumentFieldExtractionResolver(p) {
|
|
20110
20200
|
var _a2, _b;
|
|
20111
20201
|
const { BORDER: BORDER3, MUTED: MUTED2, PAPER: PAPER2, SURFACE: SURFACE2, SHADOW: SHADOW2, ACCENT: ACCENT2 } = useTheme();
|
|
20112
|
-
const [selectedKey, setSelectedKey] =
|
|
20113
|
-
const [open, setOpen] =
|
|
20114
|
-
const [tab, setTab] =
|
|
20202
|
+
const [selectedKey, setSelectedKey] = React46__default.default.useState(null);
|
|
20203
|
+
const [open, setOpen] = React46__default.default.useState(false);
|
|
20204
|
+
const [tab, setTab] = React46__default.default.useState("fields");
|
|
20115
20205
|
const pages = (_a2 = p.pages) != null ? _a2 : [];
|
|
20116
20206
|
const fields = (_b = p.fields) != null ? _b : [];
|
|
20117
20207
|
const editable = typeof p.onFieldSave === "function";
|
|
20118
20208
|
const onLoadAudit = p.onLoadAudit;
|
|
20119
|
-
|
|
20209
|
+
React46__default.default.useEffect(() => {
|
|
20120
20210
|
if (tab === "audit" && onLoadAudit) {
|
|
20121
20211
|
onLoadAudit();
|
|
20122
20212
|
}
|
|
20123
20213
|
}, [tab, onLoadAudit]);
|
|
20124
|
-
const correctionCounts =
|
|
20214
|
+
const correctionCounts = React46__default.default.useMemo(() => {
|
|
20125
20215
|
var _a3, _b2;
|
|
20126
20216
|
const counts = {};
|
|
20127
20217
|
for (const ev of (_a3 = p.auditEvents) != null ? _a3 : []) {
|
|
@@ -20478,8 +20568,8 @@ function formatAmount2(amount, currency = "USD") {
|
|
|
20478
20568
|
return `${sign}${symbol}${body}`;
|
|
20479
20569
|
}
|
|
20480
20570
|
function useContainerWidth2(ref) {
|
|
20481
|
-
const [w, setW] =
|
|
20482
|
-
|
|
20571
|
+
const [w, setW] = React46__default.default.useState(0);
|
|
20572
|
+
React46__default.default.useLayoutEffect(() => {
|
|
20483
20573
|
const el = ref.current;
|
|
20484
20574
|
if (!el || typeof ResizeObserver === "undefined") return;
|
|
20485
20575
|
const ro = new ResizeObserver((entries) => {
|
|
@@ -20574,8 +20664,8 @@ function ValueAdjuster({
|
|
|
20574
20664
|
const { SURFACE_MUTED: SURFACE_MUTED2 } = useTheme();
|
|
20575
20665
|
const adjust = option.adjust;
|
|
20576
20666
|
const suggested = clampToRange((_a2 = option.value) != null ? _a2 : adjust.min, adjust);
|
|
20577
|
-
const [value, setValue] =
|
|
20578
|
-
const [text, setText] =
|
|
20667
|
+
const [value, setValue] = React46__default.default.useState(suggested);
|
|
20668
|
+
const [text, setText] = React46__default.default.useState(String(suggested));
|
|
20579
20669
|
const step = (_b = adjust.step) != null ? _b : Number.isInteger(adjust.min) && Number.isInteger(adjust.max) ? 1 : (adjust.max - adjust.min) / 100;
|
|
20580
20670
|
const pct = adjust.max > adjust.min ? (value - adjust.min) / (adjust.max - adjust.min) * 100 : 0;
|
|
20581
20671
|
const suggestedPct = adjust.max > adjust.min ? (suggested - adjust.min) / (adjust.max - adjust.min) * 100 : 0;
|
|
@@ -20781,10 +20871,10 @@ function DecisionCardRenderer({
|
|
|
20781
20871
|
}) {
|
|
20782
20872
|
var _a2, _b, _c;
|
|
20783
20873
|
const { BORDER: BORDER3, MUTED: MUTED2, ACCENT: ACCENT2, ACCENT_SOFT: ACCENT_SOFT2, SURFACE: SURFACE2, SURFACE_MUTED: SURFACE_MUTED2, SHADOW: SHADOW2 } = useTheme();
|
|
20784
|
-
const rootRef =
|
|
20874
|
+
const rootRef = React46__default.default.useRef(null);
|
|
20785
20875
|
const width = useContainerWidth2(rootRef);
|
|
20786
20876
|
const stacked = width > 0 && width < STACK_BELOW;
|
|
20787
|
-
const [adjustingIdx, setAdjustingIdx] =
|
|
20877
|
+
const [adjustingIdx, setAdjustingIdx] = React46__default.default.useState(null);
|
|
20788
20878
|
const options = (_a2 = data.options) != null ? _a2 : [];
|
|
20789
20879
|
const recommendedIdx = Math.max(
|
|
20790
20880
|
0,
|
|
@@ -21085,8 +21175,8 @@ function DecisionCardResolver(p) {
|
|
|
21085
21175
|
const decisionId = (_a2 = p.id) != null ? _a2 : p.title;
|
|
21086
21176
|
const hostResolved = resolvedDecisions == null ? void 0 : resolvedDecisions[decisionId];
|
|
21087
21177
|
const initial = hostResolved != null ? hostResolved : p.resolved ? composeResolution(p, p.resolved.option, p.resolved.value) : null;
|
|
21088
|
-
const [localResolved, setLocalResolved] =
|
|
21089
|
-
|
|
21178
|
+
const [localResolved, setLocalResolved] = React46__default.default.useState(initial);
|
|
21179
|
+
React46__default.default.useEffect(() => {
|
|
21090
21180
|
if (hostResolved !== void 0) setLocalResolved(hostResolved);
|
|
21091
21181
|
}, [hostResolved]);
|
|
21092
21182
|
const resolved = hostResolved != null ? hostResolved : localResolved;
|
|
@@ -21160,11 +21250,11 @@ function DecisionQueueRenderer({
|
|
|
21160
21250
|
var _a2;
|
|
21161
21251
|
const { BORDER: BORDER3, MUTED: MUTED2, ACCENT: ACCENT2, SURFACE: SURFACE2, SURFACE_MUTED: SURFACE_MUTED2, BORDER_SOFT: BORDER_SOFT2, PAPER: PAPER2, SHADOW: SHADOW2 } = useTheme();
|
|
21162
21252
|
const items = (_a2 = data.items) != null ? _a2 : [];
|
|
21163
|
-
const [decisions, setDecisions] =
|
|
21253
|
+
const [decisions, setDecisions] = React46__default.default.useState(
|
|
21164
21254
|
() => items.map(() => void 0)
|
|
21165
21255
|
);
|
|
21166
21256
|
const firstUndecided = decisions.findIndex((d) => !d);
|
|
21167
|
-
const [focusIdx, setFocusIdx] =
|
|
21257
|
+
const [focusIdx, setFocusIdx] = React46__default.default.useState(firstUndecided >= 0 ? firstUndecided : null);
|
|
21168
21258
|
const isSubmitted = submitted != null;
|
|
21169
21259
|
const shown = isSubmitted ? items.map(
|
|
21170
21260
|
(item, i) => {
|
|
@@ -21189,16 +21279,16 @@ function DecisionQueueRenderer({
|
|
|
21189
21279
|
const final = decisions;
|
|
21190
21280
|
onSubmit == null ? void 0 : onSubmit(final, composeQueueMessage(items, final));
|
|
21191
21281
|
};
|
|
21192
|
-
const onReadyRef =
|
|
21193
|
-
|
|
21282
|
+
const onReadyRef = React46__default.default.useRef(onReady);
|
|
21283
|
+
React46__default.default.useEffect(() => {
|
|
21194
21284
|
onReadyRef.current = onReady;
|
|
21195
21285
|
});
|
|
21196
|
-
|
|
21286
|
+
React46__default.default.useEffect(() => {
|
|
21197
21287
|
if (!onReadyRef.current) return;
|
|
21198
21288
|
const msg = allDecided ? composeQueueMessage(items, decisions) : null;
|
|
21199
21289
|
onReadyRef.current(allDecided && !isSubmitted, msg, decisions.filter(Boolean));
|
|
21200
21290
|
}, [decisions, allDecided, isSubmitted]);
|
|
21201
|
-
|
|
21291
|
+
React46__default.default.useEffect(() => {
|
|
21202
21292
|
if (!submitRef) return;
|
|
21203
21293
|
submitRef.current = handleSubmit;
|
|
21204
21294
|
return () => {
|
|
@@ -21423,7 +21513,7 @@ function DecisionQueueResolver(p) {
|
|
|
21423
21513
|
const { resolvedDecisions, onDecisionQueueSubmit } = useGenUIInteraction();
|
|
21424
21514
|
const queueId = (_b = (_a2 = p.id) != null ? _a2 : p.title) != null ? _b : "decision-queue";
|
|
21425
21515
|
const replayed = (_d = (_c = p.resolved) == null ? void 0 : _c.decisions) != null ? _d : null;
|
|
21426
|
-
const [localSubmitted, setLocalSubmitted] =
|
|
21516
|
+
const [localSubmitted, setLocalSubmitted] = React46__default.default.useState(null);
|
|
21427
21517
|
const hostLocked = (resolvedDecisions == null ? void 0 : resolvedDecisions[queueId]) != null;
|
|
21428
21518
|
const submitted = (_e = replayed != null ? replayed : localSubmitted) != null ? _e : hostLocked ? [] : null;
|
|
21429
21519
|
const handleSubmit = (decisions, message) => {
|
|
@@ -21501,9 +21591,9 @@ function ExternalIcon() {
|
|
|
21501
21591
|
function TabbyAuthResolver(p) {
|
|
21502
21592
|
var _a2, _b, _c;
|
|
21503
21593
|
const { BORDER: BORDER3, MUTED: MUTED2, ACCENT: ACCENT2, ACCENT_SOFT: ACCENT_SOFT2, SURFACE: SURFACE2, SURFACE_MUTED: SURFACE_MUTED2, SHADOW: SHADOW2 } = useTheme();
|
|
21504
|
-
const [cardHovered, setCardHovered] =
|
|
21505
|
-
const [btnHovered, setBtnHovered] =
|
|
21506
|
-
const [imgFailed, setImgFailed] =
|
|
21594
|
+
const [cardHovered, setCardHovered] = React46.useState(false);
|
|
21595
|
+
const [btnHovered, setBtnHovered] = React46.useState(false);
|
|
21596
|
+
const [imgFailed, setImgFailed] = React46.useState(false);
|
|
21507
21597
|
const app = humanizeApp(p.app || "the app");
|
|
21508
21598
|
const connected = p.state === "connected";
|
|
21509
21599
|
const accent = connected ? CONNECTED_GREEN3 : ACCENT2;
|
|
@@ -21909,7 +21999,7 @@ function InlineSpinner() {
|
|
|
21909
21999
|
}
|
|
21910
22000
|
function GenUIRenderer({ payload }) {
|
|
21911
22001
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
21912
|
-
|
|
22002
|
+
React46.Suspense,
|
|
21913
22003
|
{
|
|
21914
22004
|
fallback: /* @__PURE__ */ jsxRuntime.jsxs("div", { style: { display: "flex", alignItems: "center", gap: "8px", padding: "8px 0" }, children: [
|
|
21915
22005
|
/* @__PURE__ */ jsxRuntime.jsx(InlineSpinner, {}),
|
|
@@ -22061,7 +22151,7 @@ var INPUT_ERROR = { borderColor: "#dc2626" };
|
|
|
22061
22151
|
var SELECT_EXTRA = { cursor: "pointer" };
|
|
22062
22152
|
function useInputBase() {
|
|
22063
22153
|
const { BORDER: BORDER3, SURFACE: SURFACE2 } = useTheme();
|
|
22064
|
-
return
|
|
22154
|
+
return React46.useMemo(() => ({
|
|
22065
22155
|
font: "inherit",
|
|
22066
22156
|
fontSize: "13px",
|
|
22067
22157
|
padding: "7px 10px",
|
|
@@ -22142,7 +22232,7 @@ function SelectField({ field, value, onChange, disabled, error }) {
|
|
|
22142
22232
|
}
|
|
22143
22233
|
function MultiSelectField({ field, value, onChange, disabled }) {
|
|
22144
22234
|
const { MUTED: MUTED2, ACCENT: ACCENT2, BORDER: BORDER3, SURFACE: SURFACE2 } = useTheme();
|
|
22145
|
-
const [hovered, setHovered] =
|
|
22235
|
+
const [hovered, setHovered] = React46.useState(null);
|
|
22146
22236
|
const options = field.options || [];
|
|
22147
22237
|
const selected = Array.isArray(value) ? value : [];
|
|
22148
22238
|
const toggle = (optValue) => {
|
|
@@ -22259,8 +22349,8 @@ function DocGlyph({ color }) {
|
|
|
22259
22349
|
}
|
|
22260
22350
|
function FileUploadField({ field, value, onChange, disabled, onFileUpload, error, dense }) {
|
|
22261
22351
|
const { MUTED: MUTED2, ACCENT: ACCENT2, BORDER: BORDER3, PAPER: PAPER2, SURFACE: SURFACE2 } = useTheme();
|
|
22262
|
-
const keyRef =
|
|
22263
|
-
const [entries, setEntries] =
|
|
22352
|
+
const keyRef = React46__default.default.useRef(0);
|
|
22353
|
+
const [entries, setEntries] = React46.useState(() => {
|
|
22264
22354
|
const arr = Array.isArray(value) ? value : value && typeof value === "object" ? [value] : [];
|
|
22265
22355
|
return arr.map((item) => {
|
|
22266
22356
|
var _a2, _b;
|
|
@@ -22268,11 +22358,11 @@ function FileUploadField({ field, value, onChange, disabled, onFileUpload, error
|
|
|
22268
22358
|
return { key: keyRef.current += 1, name: (_b = (_a2 = r.filename) != null ? _a2 : r.name) != null ? _b : "file", size: r.size, status: "done", result: r };
|
|
22269
22359
|
});
|
|
22270
22360
|
});
|
|
22271
|
-
const entriesRef =
|
|
22361
|
+
const entriesRef = React46__default.default.useRef(entries);
|
|
22272
22362
|
entriesRef.current = entries;
|
|
22273
|
-
const [dragOver, setDragOver] =
|
|
22274
|
-
const inputRef =
|
|
22275
|
-
|
|
22363
|
+
const [dragOver, setDragOver] = React46.useState(false);
|
|
22364
|
+
const inputRef = React46__default.default.useRef(null);
|
|
22365
|
+
React46__default.default.useEffect(() => {
|
|
22276
22366
|
ensureFileUploadKeyframes();
|
|
22277
22367
|
}, []);
|
|
22278
22368
|
const interactive = !disabled;
|
|
@@ -22403,24 +22493,24 @@ function EntityPickerField({ field, value, onChange, disabled, error, onEntitySe
|
|
|
22403
22493
|
const { BORDER: BORDER3, MUTED: MUTED2, ACCENT: ACCENT2, PAPER: PAPER2, SURFACE: SURFACE2 } = useTheme();
|
|
22404
22494
|
const base = useInputBase();
|
|
22405
22495
|
const source = field.source || "";
|
|
22406
|
-
const [open, setOpen] =
|
|
22407
|
-
const [query, setQuery] =
|
|
22408
|
-
const [results, setResults] =
|
|
22409
|
-
const [loading, setLoading] =
|
|
22410
|
-
const [err, setErr] =
|
|
22411
|
-
const [hi, setHi] =
|
|
22412
|
-
const [selectedLabel, setSelectedLabel] =
|
|
22413
|
-
const [creating, setCreating] =
|
|
22414
|
-
const [createVals, setCreateVals] =
|
|
22415
|
-
const [createBusy, setCreateBusy] =
|
|
22416
|
-
const boxRef =
|
|
22417
|
-
const seq =
|
|
22496
|
+
const [open, setOpen] = React46.useState(false);
|
|
22497
|
+
const [query, setQuery] = React46.useState("");
|
|
22498
|
+
const [results, setResults] = React46.useState([]);
|
|
22499
|
+
const [loading, setLoading] = React46.useState(false);
|
|
22500
|
+
const [err, setErr] = React46.useState(null);
|
|
22501
|
+
const [hi, setHi] = React46.useState(0);
|
|
22502
|
+
const [selectedLabel, setSelectedLabel] = React46.useState(null);
|
|
22503
|
+
const [creating, setCreating] = React46.useState(false);
|
|
22504
|
+
const [createVals, setCreateVals] = React46.useState({});
|
|
22505
|
+
const [createBusy, setCreateBusy] = React46.useState(false);
|
|
22506
|
+
const boxRef = React46.useRef(null);
|
|
22507
|
+
const seq = React46.useRef(0);
|
|
22418
22508
|
const allowCreate = !!field.allow_create && !!onEntityCreate;
|
|
22419
|
-
const createFields =
|
|
22509
|
+
const createFields = React46.useMemo(
|
|
22420
22510
|
() => field.create_fields && field.create_fields.length ? field.create_fields : [{ name: "name", label: "Name", field_type: "text", required: true, placeholder: "" }],
|
|
22421
22511
|
[field.create_fields]
|
|
22422
22512
|
);
|
|
22423
|
-
const runSearch =
|
|
22513
|
+
const runSearch = React46.useCallback(
|
|
22424
22514
|
(q) => {
|
|
22425
22515
|
if (!onEntitySearch || !source) return;
|
|
22426
22516
|
const my = ++seq.current;
|
|
@@ -22442,12 +22532,12 @@ function EntityPickerField({ field, value, onChange, disabled, error, onEntitySe
|
|
|
22442
22532
|
},
|
|
22443
22533
|
[onEntitySearch, source]
|
|
22444
22534
|
);
|
|
22445
|
-
|
|
22535
|
+
React46.useEffect(() => {
|
|
22446
22536
|
if (!open || creating) return;
|
|
22447
22537
|
const id = setTimeout(() => runSearch(query), 200);
|
|
22448
22538
|
return () => clearTimeout(id);
|
|
22449
22539
|
}, [open, creating, query, runSearch]);
|
|
22450
|
-
|
|
22540
|
+
React46.useEffect(() => {
|
|
22451
22541
|
if (!open) return;
|
|
22452
22542
|
const onDoc = (e) => {
|
|
22453
22543
|
if (boxRef.current && !boxRef.current.contains(e.target)) {
|
|
@@ -22462,7 +22552,7 @@ function EntityPickerField({ field, value, onChange, disabled, error, onEntitySe
|
|
|
22462
22552
|
if (disabled) return;
|
|
22463
22553
|
setOpen(true);
|
|
22464
22554
|
};
|
|
22465
|
-
const select =
|
|
22555
|
+
const select = React46.useCallback((opt) => {
|
|
22466
22556
|
onChange({ value: opt.value, label: opt.label });
|
|
22467
22557
|
setSelectedLabel(opt.label);
|
|
22468
22558
|
setQuery("");
|
|
@@ -22476,14 +22566,14 @@ function EntityPickerField({ field, value, onChange, disabled, error, onEntitySe
|
|
|
22476
22566
|
const otherRequired = createFields.filter((f) => f !== nameField && f.required);
|
|
22477
22567
|
const showCreateRow = allowCreate && !creating && query.trim().length > 0;
|
|
22478
22568
|
const totalRows = results.length + (showCreateRow ? 1 : 0);
|
|
22479
|
-
const beginCreate =
|
|
22569
|
+
const beginCreate = React46.useCallback(() => {
|
|
22480
22570
|
const init = {};
|
|
22481
22571
|
if (nameField && query.trim()) init[nameField.name] = query.trim();
|
|
22482
22572
|
setCreateVals(init);
|
|
22483
22573
|
setErr(null);
|
|
22484
22574
|
setCreating(true);
|
|
22485
22575
|
}, [nameField, query]);
|
|
22486
|
-
const submitCreate =
|
|
22576
|
+
const submitCreate = React46.useCallback((vals) => {
|
|
22487
22577
|
if (!onEntityCreate || !source) return;
|
|
22488
22578
|
const payload = vals || createVals;
|
|
22489
22579
|
for (const f of createFields) {
|
|
@@ -22496,7 +22586,7 @@ function EntityPickerField({ field, value, onChange, disabled, error, onEntitySe
|
|
|
22496
22586
|
setErr(null);
|
|
22497
22587
|
onEntityCreate(source, payload).then((opt) => select(opt)).catch(() => setErr("Couldn't create \u2014 you may not have permission")).finally(() => setCreateBusy(false));
|
|
22498
22588
|
}, [onEntityCreate, source, createFields, createVals, select]);
|
|
22499
|
-
const handleCreateRow =
|
|
22589
|
+
const handleCreateRow = React46.useCallback(() => {
|
|
22500
22590
|
const q = query.trim();
|
|
22501
22591
|
if (!q || !nameField) return;
|
|
22502
22592
|
if (otherRequired.length === 0) {
|
|
@@ -22678,11 +22768,11 @@ function _fileExt(path, type) {
|
|
|
22678
22768
|
function FileMapField({ field, value, onChange, disabled }) {
|
|
22679
22769
|
const { BORDER: BORDER3, MUTED: MUTED2, ACCENT: ACCENT2, PAPER: PAPER2, SURFACE: SURFACE2 } = useTheme();
|
|
22680
22770
|
const cfg = field.file_map || null;
|
|
22681
|
-
const categories =
|
|
22682
|
-
const fileList =
|
|
22771
|
+
const categories = React46.useMemo(() => (cfg == null ? void 0 : cfg.categories) || [], [cfg]);
|
|
22772
|
+
const fileList = React46.useMemo(() => (cfg == null ? void 0 : cfg.files) || [], [cfg]);
|
|
22683
22773
|
const suggestions = (cfg == null ? void 0 : cfg.suggestions) || {};
|
|
22684
22774
|
const confidence = (cfg == null ? void 0 : cfg.confidence) || {};
|
|
22685
|
-
const initial =
|
|
22775
|
+
const initial = React46.useMemo(() => {
|
|
22686
22776
|
const a = {};
|
|
22687
22777
|
if (value && typeof value === "object" && !Array.isArray(value)) {
|
|
22688
22778
|
for (const [grp, paths] of Object.entries(value))
|
|
@@ -22694,15 +22784,15 @@ function FileMapField({ field, value, onChange, disabled }) {
|
|
|
22694
22784
|
for (const f of fileList) if (!(f.path in a)) a[f.path] = _FILEMAP_UNASSIGNED;
|
|
22695
22785
|
return a;
|
|
22696
22786
|
}, []);
|
|
22697
|
-
const [assignment, setAssignment] =
|
|
22698
|
-
const [collapsed, setCollapsed] =
|
|
22699
|
-
const [menuFor, setMenuFor] =
|
|
22700
|
-
const boardRef =
|
|
22701
|
-
const fileByPath =
|
|
22787
|
+
const [assignment, setAssignment] = React46.useState(initial);
|
|
22788
|
+
const [collapsed, setCollapsed] = React46.useState({});
|
|
22789
|
+
const [menuFor, setMenuFor] = React46.useState(null);
|
|
22790
|
+
const boardRef = React46.useRef(null);
|
|
22791
|
+
const fileByPath = React46.useMemo(
|
|
22702
22792
|
() => Object.fromEntries(fileList.map((f) => [f.path, f])),
|
|
22703
22793
|
[fileList]
|
|
22704
22794
|
);
|
|
22705
|
-
const groupFrom =
|
|
22795
|
+
const groupFrom = React46.useCallback((a) => {
|
|
22706
22796
|
const g = { [_FILEMAP_UNASSIGNED]: [] };
|
|
22707
22797
|
for (const c of categories) g[c.id] = [];
|
|
22708
22798
|
for (const f of fileList) {
|
|
@@ -22712,16 +22802,16 @@ function FileMapField({ field, value, onChange, disabled }) {
|
|
|
22712
22802
|
}
|
|
22713
22803
|
return g;
|
|
22714
22804
|
}, [categories, fileList]);
|
|
22715
|
-
const grouped =
|
|
22716
|
-
const emit =
|
|
22717
|
-
const emittedRef =
|
|
22718
|
-
|
|
22805
|
+
const grouped = React46.useMemo(() => groupFrom(assignment), [assignment, groupFrom]);
|
|
22806
|
+
const emit = React46.useCallback((g) => onChange(g), [onChange]);
|
|
22807
|
+
const emittedRef = React46.useRef(false);
|
|
22808
|
+
React46.useEffect(() => {
|
|
22719
22809
|
if (!emittedRef.current) {
|
|
22720
22810
|
emittedRef.current = true;
|
|
22721
22811
|
emit(grouped);
|
|
22722
22812
|
}
|
|
22723
22813
|
}, [grouped, emit]);
|
|
22724
|
-
|
|
22814
|
+
React46.useEffect(() => {
|
|
22725
22815
|
if (!menuFor) return;
|
|
22726
22816
|
const onDoc = (e) => {
|
|
22727
22817
|
if (boardRef.current && !boardRef.current.contains(e.target)) setMenuFor(null);
|
|
@@ -22729,7 +22819,7 @@ function FileMapField({ field, value, onChange, disabled }) {
|
|
|
22729
22819
|
document.addEventListener("mousedown", onDoc);
|
|
22730
22820
|
return () => document.removeEventListener("mousedown", onDoc);
|
|
22731
22821
|
}, [menuFor]);
|
|
22732
|
-
const move =
|
|
22822
|
+
const move = React46.useCallback((path, grp) => {
|
|
22733
22823
|
setMenuFor(null);
|
|
22734
22824
|
setAssignment((prev) => {
|
|
22735
22825
|
const next = __spreadProps(__spreadValues({}, prev), { [path]: grp });
|
|
@@ -22879,7 +22969,7 @@ function FieldRenderer({ field, value, onChange, disabled, error, onFileUpload,
|
|
|
22879
22969
|
] });
|
|
22880
22970
|
}
|
|
22881
22971
|
init_ThemeContext();
|
|
22882
|
-
var SlotErrorBoundary = class extends
|
|
22972
|
+
var SlotErrorBoundary = class extends React46__default.default.Component {
|
|
22883
22973
|
constructor(props) {
|
|
22884
22974
|
super(props);
|
|
22885
22975
|
this.state = { hasError: false };
|
|
@@ -22965,7 +23055,7 @@ function BuilderRecap({ builder, state }) {
|
|
|
22965
23055
|
return String(value);
|
|
22966
23056
|
};
|
|
22967
23057
|
const decisionField = (b) => (b.fields || []).find((f) => f.field_type === "select") || (b.fields || [])[0];
|
|
22968
|
-
const rows =
|
|
23058
|
+
const rows = React46.useMemo(
|
|
22969
23059
|
() => blocks.map((b) => {
|
|
22970
23060
|
const df = decisionField(b);
|
|
22971
23061
|
const decision = df ? display(df, state.getValue(b.id, df.name)) : "";
|
|
@@ -22975,7 +23065,7 @@ function BuilderRecap({ builder, state }) {
|
|
|
22975
23065
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
22976
23066
|
[blocks, state.values]
|
|
22977
23067
|
);
|
|
22978
|
-
const counts =
|
|
23068
|
+
const counts = React46.useMemo(() => {
|
|
22979
23069
|
const m = /* @__PURE__ */ new Map();
|
|
22980
23070
|
for (const r of rows) {
|
|
22981
23071
|
const k = r.decision || "\u2014";
|
|
@@ -23110,7 +23200,7 @@ function isRequiredMissing(fieldType, v) {
|
|
|
23110
23200
|
}
|
|
23111
23201
|
function useBuilderState(blocks) {
|
|
23112
23202
|
const isMultiBlock = blocks.length > 1;
|
|
23113
|
-
const [values, setValues] =
|
|
23203
|
+
const [values, setValues] = React46.useState(() => {
|
|
23114
23204
|
const init = {};
|
|
23115
23205
|
for (const block of blocks) {
|
|
23116
23206
|
for (const field of block.fields || []) {
|
|
@@ -23119,17 +23209,17 @@ function useBuilderState(blocks) {
|
|
|
23119
23209
|
}
|
|
23120
23210
|
return init;
|
|
23121
23211
|
});
|
|
23122
|
-
const [errors, setErrors] =
|
|
23123
|
-
const [currentBlock, setCurrentBlock] =
|
|
23124
|
-
const getValue =
|
|
23212
|
+
const [errors, setErrors] = React46.useState({});
|
|
23213
|
+
const [currentBlock, setCurrentBlock] = React46.useState(0);
|
|
23214
|
+
const getValue = React46.useCallback(
|
|
23125
23215
|
(blockId, name) => values[fieldKey(blockId, name)],
|
|
23126
23216
|
[values]
|
|
23127
23217
|
);
|
|
23128
|
-
const getError =
|
|
23218
|
+
const getError = React46.useCallback(
|
|
23129
23219
|
(blockId, name) => errors[fieldKey(blockId, name)],
|
|
23130
23220
|
[errors]
|
|
23131
23221
|
);
|
|
23132
|
-
const setFieldValue =
|
|
23222
|
+
const setFieldValue = React46.useCallback((blockId, name, value) => {
|
|
23133
23223
|
const k = fieldKey(blockId, name);
|
|
23134
23224
|
setValues((prev) => __spreadProps(__spreadValues({}, prev), { [k]: value }));
|
|
23135
23225
|
setErrors((prev) => {
|
|
@@ -23139,7 +23229,7 @@ function useBuilderState(blocks) {
|
|
|
23139
23229
|
return next;
|
|
23140
23230
|
});
|
|
23141
23231
|
}, []);
|
|
23142
|
-
const validateBlock =
|
|
23232
|
+
const validateBlock = React46.useCallback(
|
|
23143
23233
|
(blockIdx) => {
|
|
23144
23234
|
const block = blocks[blockIdx];
|
|
23145
23235
|
if (!block) return true;
|
|
@@ -23173,7 +23263,7 @@ function useBuilderState(blocks) {
|
|
|
23173
23263
|
},
|
|
23174
23264
|
[blocks, values]
|
|
23175
23265
|
);
|
|
23176
|
-
const validateAllDetailed =
|
|
23266
|
+
const validateAllDetailed = React46.useCallback(() => {
|
|
23177
23267
|
let firstBlockIndex = -1;
|
|
23178
23268
|
let firstKey = null;
|
|
23179
23269
|
let firstBlockId = null;
|
|
@@ -23201,7 +23291,7 @@ function useBuilderState(blocks) {
|
|
|
23201
23291
|
if (firstBlockIndex >= 0) setCurrentBlock(firstBlockIndex);
|
|
23202
23292
|
return { firstKey, firstBlockId, firstName, firstBlockIndex, failingKeys };
|
|
23203
23293
|
}, [blocks, values]);
|
|
23204
|
-
const validateAll =
|
|
23294
|
+
const validateAll = React46.useCallback(
|
|
23205
23295
|
() => validateAllDetailed().failingKeys.length === 0,
|
|
23206
23296
|
[validateAllDetailed]
|
|
23207
23297
|
);
|
|
@@ -23236,7 +23326,7 @@ function BlockForm({
|
|
|
23236
23326
|
}) {
|
|
23237
23327
|
var _a2;
|
|
23238
23328
|
const t = useTheme();
|
|
23239
|
-
const S3 =
|
|
23329
|
+
const S3 = React46.useMemo(() => makeStyles(t), [t]);
|
|
23240
23330
|
const block = builder.blocks[0];
|
|
23241
23331
|
const isEscalation = variant === "escalation";
|
|
23242
23332
|
const errorCount = ((block == null ? void 0 : block.fields) || []).reduce(
|
|
@@ -23442,7 +23532,7 @@ init_ThemeContext();
|
|
|
23442
23532
|
function StepperBuilder({ builder, state, onSubmit, onCancel, disabled, onFileUpload, onEntitySearch, onEntityCreate, dense }) {
|
|
23443
23533
|
var _a2;
|
|
23444
23534
|
const t = useTheme();
|
|
23445
|
-
const S3 =
|
|
23535
|
+
const S3 = React46.useMemo(() => makeStyles2(t), [t]);
|
|
23446
23536
|
const { blocks } = builder;
|
|
23447
23537
|
const total = blocks.length;
|
|
23448
23538
|
const idx = Math.min(Math.max(state.currentBlock, 0), Math.max(total - 1, 0));
|
|
@@ -23644,7 +23734,7 @@ function BuilderFormResolver({
|
|
|
23644
23734
|
`[BuilderForm] builder "${builder.builder_id}" declared builder_kind="${declaredKind}" with ${blockCount} blocks; rendering as stepper to avoid dropping blocks.`
|
|
23645
23735
|
);
|
|
23646
23736
|
}
|
|
23647
|
-
const buildSubmission =
|
|
23737
|
+
const buildSubmission = React46.useCallback(() => {
|
|
23648
23738
|
const blocks = (builder.blocks || []).map((b) => ({
|
|
23649
23739
|
id: b.id,
|
|
23650
23740
|
title: b.title,
|
|
@@ -23656,7 +23746,7 @@ function BuilderFormResolver({
|
|
|
23656
23746
|
blocks
|
|
23657
23747
|
}, blocks.length === 1 ? { values: blocks[0].values } : {});
|
|
23658
23748
|
}, [builder, kind, state.getValue]);
|
|
23659
|
-
const handleSubmit =
|
|
23749
|
+
const handleSubmit = React46.useCallback(() => {
|
|
23660
23750
|
if (disabled) return;
|
|
23661
23751
|
const failure = state.validateAllDetailed();
|
|
23662
23752
|
if (failure.failingKeys.length > 0) {
|
|
@@ -23665,25 +23755,25 @@ function BuilderFormResolver({
|
|
|
23665
23755
|
}
|
|
23666
23756
|
onSubmit(buildSubmission());
|
|
23667
23757
|
}, [disabled, state.validateAllDetailed, onSubmit, buildSubmission, onValidationError]);
|
|
23668
|
-
const onChangeRef =
|
|
23669
|
-
|
|
23758
|
+
const onChangeRef = React46.useRef(onChange);
|
|
23759
|
+
React46.useEffect(() => {
|
|
23670
23760
|
onChangeRef.current = onChange;
|
|
23671
23761
|
});
|
|
23672
|
-
|
|
23762
|
+
React46.useEffect(() => {
|
|
23673
23763
|
var _a3;
|
|
23674
23764
|
(_a3 = onChangeRef.current) == null ? void 0 : _a3.call(onChangeRef, buildSubmission());
|
|
23675
23765
|
}, [state.values]);
|
|
23676
|
-
const onBlockChangeRef =
|
|
23677
|
-
|
|
23766
|
+
const onBlockChangeRef = React46.useRef(onBlockChange);
|
|
23767
|
+
React46.useEffect(() => {
|
|
23678
23768
|
onBlockChangeRef.current = onBlockChange;
|
|
23679
23769
|
});
|
|
23680
23770
|
const activeIdx = kind === "stepper" ? state.currentBlock : 0;
|
|
23681
|
-
|
|
23771
|
+
React46.useEffect(() => {
|
|
23682
23772
|
var _a3;
|
|
23683
23773
|
const block = (builder.blocks || [])[activeIdx];
|
|
23684
23774
|
if (block) (_a3 = onBlockChangeRef.current) == null ? void 0 : _a3.call(onBlockChangeRef, block, activeIdx);
|
|
23685
23775
|
}, [activeIdx]);
|
|
23686
|
-
|
|
23776
|
+
React46.useEffect(() => {
|
|
23687
23777
|
if (!submitRef) return;
|
|
23688
23778
|
submitRef.current = handleSubmit;
|
|
23689
23779
|
return () => {
|
|
@@ -23746,7 +23836,7 @@ function BuilderFormResolver({
|
|
|
23746
23836
|
}
|
|
23747
23837
|
}
|
|
23748
23838
|
function resolveBuilder(payload, callbacks) {
|
|
23749
|
-
return
|
|
23839
|
+
return React46__default.default.createElement(BuilderFormResolver, __spreadValues({
|
|
23750
23840
|
builder: payload
|
|
23751
23841
|
}, callbacks));
|
|
23752
23842
|
}
|