@datatechsolutions/ui 2.11.90 → 2.11.91
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/astrlabe/index.js +108 -106
- package/dist/astrlabe/index.mjs +5 -3
- package/dist/astrlabe/workflow-canvas.js +5 -3
- package/dist/astrlabe/workflow-canvas.mjs +4 -2
- package/dist/{chunk-CM5C4M4F.mjs → chunk-256TJHVO.mjs} +3 -3
- package/dist/{chunk-CM5C4M4F.mjs.map → chunk-256TJHVO.mjs.map} +1 -1
- package/dist/{chunk-T3S6KZN3.mjs → chunk-36G7GAPU.mjs} +3 -3
- package/dist/{chunk-T3S6KZN3.mjs.map → chunk-36G7GAPU.mjs.map} +1 -1
- package/dist/{chunk-TLTYLDX4.mjs → chunk-6OWD54HK.mjs} +3 -3
- package/dist/{chunk-TLTYLDX4.mjs.map → chunk-6OWD54HK.mjs.map} +1 -1
- package/dist/{chunk-RTQOGG4T.mjs → chunk-7JFAOHZ3.mjs} +4 -4
- package/dist/{chunk-RTQOGG4T.mjs.map → chunk-7JFAOHZ3.mjs.map} +1 -1
- package/dist/{chunk-MWZQF2D5.js → chunk-AP7OWR6S.js} +4 -4
- package/dist/{chunk-MWZQF2D5.js.map → chunk-AP7OWR6S.js.map} +1 -1
- package/dist/{chunk-7GDDBF6E.js → chunk-B5NZVS4A.js} +67 -67
- package/dist/{chunk-7GDDBF6E.js.map → chunk-B5NZVS4A.js.map} +1 -1
- package/dist/{chunk-FXLGNKP4.js → chunk-BVCS7RBR.js} +33 -33
- package/dist/{chunk-FXLGNKP4.js.map → chunk-BVCS7RBR.js.map} +1 -1
- package/dist/{chunk-64DLD6FB.js → chunk-C7KAF363.js} +55 -55
- package/dist/{chunk-64DLD6FB.js.map → chunk-C7KAF363.js.map} +1 -1
- package/dist/{chunk-MR3BLQAU.mjs → chunk-CBVRUJ7N.mjs} +4 -4
- package/dist/{chunk-MR3BLQAU.mjs.map → chunk-CBVRUJ7N.mjs.map} +1 -1
- package/dist/{chunk-ZV5ZRT6E.mjs → chunk-CG3P5Z5U.mjs} +3 -3
- package/dist/{chunk-ZV5ZRT6E.mjs.map → chunk-CG3P5Z5U.mjs.map} +1 -1
- package/dist/{chunk-ODEUUB2T.mjs → chunk-E2ZGFN2H.mjs} +4 -4
- package/dist/{chunk-ODEUUB2T.mjs.map → chunk-E2ZGFN2H.mjs.map} +1 -1
- package/dist/{chunk-ULWVYDDG.js → chunk-E32B2MVK.js} +15 -15
- package/dist/{chunk-ULWVYDDG.js.map → chunk-E32B2MVK.js.map} +1 -1
- package/dist/{chunk-K6FX26BG.mjs → chunk-FDSU7GPS.mjs} +3 -3
- package/dist/{chunk-K6FX26BG.mjs.map → chunk-FDSU7GPS.mjs.map} +1 -1
- package/dist/{chunk-QHTA2ISY.js → chunk-GWRJ5L36.js} +12 -12
- package/dist/{chunk-QHTA2ISY.js.map → chunk-GWRJ5L36.js.map} +1 -1
- package/dist/{chunk-FS6SU7RE.mjs → chunk-HPIKJS5B.mjs} +3 -3
- package/dist/{chunk-FS6SU7RE.mjs.map → chunk-HPIKJS5B.mjs.map} +1 -1
- package/dist/{chunk-IL5RSF2U.mjs → chunk-IEWFVP42.mjs} +6 -6
- package/dist/{chunk-IL5RSF2U.mjs.map → chunk-IEWFVP42.mjs.map} +1 -1
- package/dist/{chunk-S3JHPXOX.mjs → chunk-J4QUCX27.mjs} +561 -6
- package/dist/chunk-J4QUCX27.mjs.map +1 -0
- package/dist/{chunk-5NOWS6T3.mjs → chunk-KHAMY7MA.mjs} +3 -3
- package/dist/{chunk-5NOWS6T3.mjs.map → chunk-KHAMY7MA.mjs.map} +1 -1
- package/dist/{chunk-YXPHJ2BQ.js → chunk-L5VEY7G4.js} +13 -2
- package/dist/chunk-L5VEY7G4.js.map +1 -0
- package/dist/{chunk-M7PKDVKA.js → chunk-MLAIUJYC.js} +6 -6
- package/dist/{chunk-M7PKDVKA.js.map → chunk-MLAIUJYC.js.map} +1 -1
- package/dist/{chunk-64G2HBRQ.mjs → chunk-OE4Z4FKM.mjs} +13 -3
- package/dist/chunk-OE4Z4FKM.mjs.map +1 -0
- package/dist/{chunk-R5D6LLDF.js → chunk-OQDWU6AE.js} +67 -67
- package/dist/{chunk-R5D6LLDF.js.map → chunk-OQDWU6AE.js.map} +1 -1
- package/dist/{chunk-QYH6WLKE.mjs → chunk-Q7WGFPGK.mjs} +4 -4
- package/dist/{chunk-QYH6WLKE.mjs.map → chunk-Q7WGFPGK.mjs.map} +1 -1
- package/dist/{chunk-B3DI2QUM.js → chunk-R5KUEOPU.js} +64 -64
- package/dist/{chunk-B3DI2QUM.js.map → chunk-R5KUEOPU.js.map} +1 -1
- package/dist/{chunk-APXM5GFL.js → chunk-SIBJRWUB.js} +4 -4
- package/dist/{chunk-APXM5GFL.js.map → chunk-SIBJRWUB.js.map} +1 -1
- package/dist/{chunk-WETG7OO3.js → chunk-SOYGVHPZ.js} +53 -53
- package/dist/{chunk-WETG7OO3.js.map → chunk-SOYGVHPZ.js.map} +1 -1
- package/dist/{chunk-UZ3FGGUP.mjs → chunk-U4BTEKZT.mjs} +3 -3
- package/dist/{chunk-UZ3FGGUP.mjs.map → chunk-U4BTEKZT.mjs.map} +1 -1
- package/dist/{chunk-76XIV6VV.mjs → chunk-URMZJ3WF.mjs} +7 -7
- package/dist/{chunk-76XIV6VV.mjs.map → chunk-URMZJ3WF.mjs.map} +1 -1
- package/dist/{chunk-MJOYUX2C.mjs → chunk-VPNZDLR6.mjs} +4 -4
- package/dist/{chunk-MJOYUX2C.mjs.map → chunk-VPNZDLR6.mjs.map} +1 -1
- package/dist/{chunk-WAOCUWO3.js → chunk-WIKMIULO.js} +36 -36
- package/dist/{chunk-WAOCUWO3.js.map → chunk-WIKMIULO.js.map} +1 -1
- package/dist/{chunk-5EBDOY4M.js → chunk-WY3YDQXK.js} +26 -26
- package/dist/{chunk-5EBDOY4M.js.map → chunk-WY3YDQXK.js.map} +1 -1
- package/dist/{chunk-FDK3PUTV.js → chunk-Y4DNREFH.js} +129 -129
- package/dist/{chunk-FDK3PUTV.js.map → chunk-Y4DNREFH.js.map} +1 -1
- package/dist/{chunk-DIKLHCEM.js → chunk-YMGJ4FZZ.js} +4 -4
- package/dist/{chunk-DIKLHCEM.js.map → chunk-YMGJ4FZZ.js.map} +1 -1
- package/dist/{chunk-ZBX2QSNH.js → chunk-YN4IEDE4.js} +562 -5
- package/dist/{chunk-ZBX2QSNH.js.map → chunk-YN4IEDE4.js.map} +1 -1
- package/dist/index.d.mts +152 -2
- package/dist/index.d.ts +152 -2
- package/dist/index.js +754 -744
- package/dist/index.mjs +3 -1
- package/dist/platform/admin/index.js +12 -10
- package/dist/platform/admin/index.mjs +6 -4
- package/dist/platform/agents-workspace.js +8 -8
- package/dist/platform/agents-workspace.mjs +7 -7
- package/dist/platform/app-shell.js +5 -3
- package/dist/platform/app-shell.mjs +4 -2
- package/dist/platform/auth/index.js +29 -27
- package/dist/platform/auth/index.mjs +6 -4
- package/dist/platform/billing/index.js +5 -3
- package/dist/platform/billing/index.mjs +4 -2
- package/dist/platform/impersonation/index.js +5 -3
- package/dist/platform/impersonation/index.mjs +4 -2
- package/dist/platform/index.d.mts +1 -1
- package/dist/platform/index.d.ts +1 -1
- package/dist/platform/index.js +100 -100
- package/dist/platform/index.mjs +20 -20
- package/dist/platform/pages/index.d.mts +2 -2
- package/dist/platform/pages/index.d.ts +2 -2
- package/dist/platform/pages/index.js +197 -195
- package/dist/platform/pages/index.js.map +1 -1
- package/dist/platform/pages/index.mjs +9 -7
- package/dist/platform/pages/index.mjs.map +1 -1
- package/dist/platform/settings/index.js +9 -7
- package/dist/platform/settings/index.mjs +8 -6
- package/dist/platform/workflow-api-client.d.mts +1 -1
- package/dist/platform/workflow-api-client.d.ts +1 -1
- package/dist/platform/workflow-api-client.js +64 -60
- package/dist/platform/workflow-api-client.mjs +1 -1
- package/dist/platform/workflow-canvas-shell.js +6 -4
- package/dist/platform/workflow-canvas-shell.mjs +5 -3
- package/dist/{workflow-api-client-Dy1Ph8W-.d.ts → workflow-api-client-CXN5iaih.d.ts} +34 -2
- package/dist/{workflow-api-client-C8gPn_D1.d.mts → workflow-api-client-XU83zq0k.d.mts} +34 -2
- package/package.json +1 -1
- package/dist/chunk-64G2HBRQ.mjs.map +0 -1
- package/dist/chunk-S3JHPXOX.mjs.map +0 -1
- package/dist/chunk-YXPHJ2BQ.js.map +0 -1
|
@@ -4,6 +4,7 @@
|
|
|
4
4
|
var chunkUZ3CMNUJ_js = require('./chunk-UZ3CMNUJ.js');
|
|
5
5
|
var chunkYXN2K77G_js = require('./chunk-YXN2K77G.js');
|
|
6
6
|
var chunkS7KHTUHA_js = require('./chunk-S7KHTUHA.js');
|
|
7
|
+
var chunkL5VEY7G4_js = require('./chunk-L5VEY7G4.js');
|
|
7
8
|
var Headless6 = require('@headlessui/react');
|
|
8
9
|
var clsx = require('clsx');
|
|
9
10
|
var React12 = require('react');
|
|
@@ -2529,7 +2530,11 @@ function AgentAnalysisCard({ name, avatar, duration, output }) {
|
|
|
2529
2530
|
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "text-[8px] text-gray-400 leading-relaxed", children: output })
|
|
2530
2531
|
] });
|
|
2531
2532
|
}
|
|
2532
|
-
function DashboardView({
|
|
2533
|
+
function DashboardView({
|
|
2534
|
+
spec,
|
|
2535
|
+
className,
|
|
2536
|
+
renderInputRequest
|
|
2537
|
+
}) {
|
|
2533
2538
|
const layout = spec.layout ?? "grid";
|
|
2534
2539
|
const hasCharts = (spec.charts?.length ?? 0) > 0;
|
|
2535
2540
|
const chartGrid = layout === "grid" && (spec.charts?.length ?? 0) > 1 ? "grid grid-cols-1 gap-4 lg:grid-cols-2" : "grid grid-cols-1 gap-4";
|
|
@@ -2564,7 +2569,8 @@ function DashboardView({ spec, className }) {
|
|
|
2564
2569
|
spec.sections && spec.sections.length > 0 && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "space-y-4", children: spec.sections.map((section, index) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
2565
2570
|
DashboardSectionRenderer,
|
|
2566
2571
|
{
|
|
2567
|
-
section
|
|
2572
|
+
section,
|
|
2573
|
+
renderInputRequest
|
|
2568
2574
|
},
|
|
2569
2575
|
`${section.type}-${index}`
|
|
2570
2576
|
)) }),
|
|
@@ -2635,7 +2641,10 @@ function formatNumber(value) {
|
|
|
2635
2641
|
if (Math.abs(value) >= 1e3) return new Intl.NumberFormat("en-US").format(Math.round(value));
|
|
2636
2642
|
return value.toFixed(Math.abs(value) < 10 ? 2 : 1);
|
|
2637
2643
|
}
|
|
2638
|
-
function DashboardSectionRenderer({
|
|
2644
|
+
function DashboardSectionRenderer({
|
|
2645
|
+
section,
|
|
2646
|
+
renderInputRequest
|
|
2647
|
+
}) {
|
|
2639
2648
|
switch (section.type) {
|
|
2640
2649
|
case "entity":
|
|
2641
2650
|
return /* @__PURE__ */ jsxRuntime.jsx(EntitySection, { data: section.data });
|
|
@@ -2655,10 +2664,30 @@ function DashboardSectionRenderer({ section }) {
|
|
|
2655
2664
|
return /* @__PURE__ */ jsxRuntime.jsx(ScoreSection, { data: section.data });
|
|
2656
2665
|
case "note":
|
|
2657
2666
|
return /* @__PURE__ */ jsxRuntime.jsx(NoteSection, { data: section.data });
|
|
2667
|
+
case "input_request":
|
|
2668
|
+
return renderInputRequest ? /* @__PURE__ */ jsxRuntime.jsx(jsxRuntime.Fragment, { children: renderInputRequest(section.data) }) : /* @__PURE__ */ jsxRuntime.jsx(InputRequestReadOnly, { data: section.data });
|
|
2658
2669
|
default:
|
|
2659
2670
|
return /* @__PURE__ */ jsxRuntime.jsx(NoteSection, { data: { body: JSON.stringify(section, null, 2), tone: "info" } });
|
|
2660
2671
|
}
|
|
2661
2672
|
}
|
|
2673
|
+
function InputRequestReadOnly({ data }) {
|
|
2674
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("section", { className: "rounded-xl border border-sky-500/20 bg-sky-500/5 p-4 dark:border-sky-400/30 dark:bg-sky-500/10", children: [
|
|
2675
|
+
/* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-sm font-semibold text-slate-900 dark:text-slate-100", children: data.prompt }),
|
|
2676
|
+
data.description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-1 text-xs text-slate-600 dark:text-slate-400", children: data.description }),
|
|
2677
|
+
/* @__PURE__ */ jsxRuntime.jsx("ul", { className: "mt-3 space-y-1", children: data.fields.map((field) => /* @__PURE__ */ jsxRuntime.jsxs("li", { className: "text-xs", children: [
|
|
2678
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "font-medium text-slate-700 dark:text-slate-300", children: [
|
|
2679
|
+
field.label,
|
|
2680
|
+
field.required && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ml-1 text-rose-500", children: "*" })
|
|
2681
|
+
] }),
|
|
2682
|
+
/* @__PURE__ */ jsxRuntime.jsxs("span", { className: "ml-2 text-slate-500 dark:text-slate-400", children: [
|
|
2683
|
+
"(",
|
|
2684
|
+
field.kind,
|
|
2685
|
+
")"
|
|
2686
|
+
] })
|
|
2687
|
+
] }, field.key)) }),
|
|
2688
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-3 text-[11px] italic text-slate-500 dark:text-slate-400", children: "Esta requisi\xE7\xE3o requer entrada do operador \u2014 abra a run ao vivo para responder." })
|
|
2689
|
+
] });
|
|
2690
|
+
}
|
|
2662
2691
|
function EntitySection({ data }) {
|
|
2663
2692
|
const statusKey = data.status?.tone === "success" ? "success" : data.status?.tone === "danger" ? "error" : data.status?.tone === "warning" ? "pending" : data.status?.tone === "info" ? "processing" : "active";
|
|
2664
2693
|
return /* @__PURE__ */ jsxRuntime.jsx(
|
|
@@ -2859,6 +2888,532 @@ function formatTimestamp(iso) {
|
|
|
2859
2888
|
return iso;
|
|
2860
2889
|
}
|
|
2861
2890
|
}
|
|
2891
|
+
function InputRequestForm({
|
|
2892
|
+
runId,
|
|
2893
|
+
data,
|
|
2894
|
+
onResolved
|
|
2895
|
+
}) {
|
|
2896
|
+
const [values, setValues] = React12.useState(
|
|
2897
|
+
() => initialValues(data.fields)
|
|
2898
|
+
);
|
|
2899
|
+
const [submitting, setSubmitting] = React12.useState(false);
|
|
2900
|
+
const [resolved, setResolved] = React12.useState(null);
|
|
2901
|
+
const [error, setError] = React12.useState(null);
|
|
2902
|
+
async function submit(decision) {
|
|
2903
|
+
if (submitting || resolved) return;
|
|
2904
|
+
setSubmitting(true);
|
|
2905
|
+
setError(null);
|
|
2906
|
+
try {
|
|
2907
|
+
const payload = decision === "approved" ? sanitizeForSubmit(values) : void 0;
|
|
2908
|
+
const reason = decision === "rejected" ? typeof values.reason === "string" ? values.reason : "rejected" : void 0;
|
|
2909
|
+
await chunkL5VEY7G4_js.submitApproval(runId, data.nodeId, {
|
|
2910
|
+
approved: decision === "approved",
|
|
2911
|
+
...payload ? { payload } : {},
|
|
2912
|
+
...reason ? { reason } : {}
|
|
2913
|
+
});
|
|
2914
|
+
setResolved({
|
|
2915
|
+
approved: decision === "approved",
|
|
2916
|
+
message: decision === "approved" ? "Aprovado \u2014 workflow retomado." : "Rejeitado \u2014 workflow encerrado."
|
|
2917
|
+
});
|
|
2918
|
+
onResolved?.({
|
|
2919
|
+
approved: decision === "approved",
|
|
2920
|
+
payload: payload ?? {}
|
|
2921
|
+
});
|
|
2922
|
+
} catch (e) {
|
|
2923
|
+
setError(
|
|
2924
|
+
e instanceof Error ? e.message : "Falha ao registrar a decis\xE3o."
|
|
2925
|
+
);
|
|
2926
|
+
} finally {
|
|
2927
|
+
setSubmitting(false);
|
|
2928
|
+
}
|
|
2929
|
+
}
|
|
2930
|
+
function onFieldChange(key, value) {
|
|
2931
|
+
setValues((prev) => ({ ...prev, [key]: value }));
|
|
2932
|
+
}
|
|
2933
|
+
function onSubmitForm(event) {
|
|
2934
|
+
event.preventDefault();
|
|
2935
|
+
void submit("approved");
|
|
2936
|
+
}
|
|
2937
|
+
const accentClasses = TONE_BLOCK2[data.tone ?? "info"];
|
|
2938
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
2939
|
+
"form",
|
|
2940
|
+
{
|
|
2941
|
+
onSubmit: onSubmitForm,
|
|
2942
|
+
className: `rounded-xl border p-4 ${accentClasses}`,
|
|
2943
|
+
children: [
|
|
2944
|
+
/* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
2945
|
+
/* @__PURE__ */ jsxRuntime.jsx("h3", { className: "text-sm font-semibold text-slate-900 dark:text-slate-100", children: data.prompt }),
|
|
2946
|
+
data.description && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-1 text-xs text-slate-600 dark:text-slate-400", children: data.description })
|
|
2947
|
+
] }),
|
|
2948
|
+
/* @__PURE__ */ jsxRuntime.jsx("div", { className: "mt-4 space-y-3", children: data.fields.map((field) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
2949
|
+
FieldInput,
|
|
2950
|
+
{
|
|
2951
|
+
field,
|
|
2952
|
+
value: values[field.key],
|
|
2953
|
+
disabled: submitting || Boolean(resolved),
|
|
2954
|
+
onChange: (value) => onFieldChange(field.key, value)
|
|
2955
|
+
},
|
|
2956
|
+
field.key
|
|
2957
|
+
)) }),
|
|
2958
|
+
error && /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-3 text-xs text-rose-700 dark:text-rose-300", children: error }),
|
|
2959
|
+
resolved ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-3 text-xs font-medium text-emerald-800 dark:text-emerald-200", children: resolved.message }) : /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "mt-4 flex flex-wrap items-center justify-end gap-2", children: [
|
|
2960
|
+
data.rejectLabel !== null && /* @__PURE__ */ jsxRuntime.jsx(
|
|
2961
|
+
"button",
|
|
2962
|
+
{
|
|
2963
|
+
type: "button",
|
|
2964
|
+
disabled: submitting,
|
|
2965
|
+
onClick: () => submit("rejected"),
|
|
2966
|
+
className: "rounded-md border border-rose-500/30 bg-rose-500/5 px-3 py-1.5 text-sm font-medium text-rose-700 hover:bg-rose-500/10 disabled:opacity-50 dark:text-rose-300",
|
|
2967
|
+
children: data.rejectLabel ?? "Rejeitar"
|
|
2968
|
+
}
|
|
2969
|
+
),
|
|
2970
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
2971
|
+
"button",
|
|
2972
|
+
{
|
|
2973
|
+
type: "submit",
|
|
2974
|
+
disabled: submitting,
|
|
2975
|
+
className: "rounded-md bg-emerald-600 px-3 py-1.5 text-sm font-medium text-white hover:bg-emerald-500 disabled:opacity-50",
|
|
2976
|
+
children: submitting ? "Enviando\u2026" : data.submitLabel ?? "Aprovar"
|
|
2977
|
+
}
|
|
2978
|
+
)
|
|
2979
|
+
] })
|
|
2980
|
+
]
|
|
2981
|
+
}
|
|
2982
|
+
);
|
|
2983
|
+
}
|
|
2984
|
+
function FieldInput({
|
|
2985
|
+
field,
|
|
2986
|
+
value,
|
|
2987
|
+
disabled,
|
|
2988
|
+
onChange
|
|
2989
|
+
}) {
|
|
2990
|
+
const labelEl = /* @__PURE__ */ jsxRuntime.jsxs(
|
|
2991
|
+
"label",
|
|
2992
|
+
{
|
|
2993
|
+
htmlFor: `input-${field.key}`,
|
|
2994
|
+
className: "block text-xs font-medium text-slate-700 dark:text-slate-300",
|
|
2995
|
+
children: [
|
|
2996
|
+
field.label,
|
|
2997
|
+
field.required && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "ml-1 text-rose-500", children: "*" })
|
|
2998
|
+
]
|
|
2999
|
+
}
|
|
3000
|
+
);
|
|
3001
|
+
const helpEl = field.helpText ? /* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-1 text-[11px] text-slate-500 dark:text-slate-400", children: field.helpText }) : null;
|
|
3002
|
+
switch (field.kind) {
|
|
3003
|
+
case "text":
|
|
3004
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
3005
|
+
labelEl,
|
|
3006
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3007
|
+
"input",
|
|
3008
|
+
{
|
|
3009
|
+
id: `input-${field.key}`,
|
|
3010
|
+
type: "text",
|
|
3011
|
+
disabled,
|
|
3012
|
+
required: field.required,
|
|
3013
|
+
placeholder: field.placeholder,
|
|
3014
|
+
value: typeof value === "string" ? value : "",
|
|
3015
|
+
onChange: (e) => onChange(e.target.value),
|
|
3016
|
+
className: INPUT_CLASSES
|
|
3017
|
+
}
|
|
3018
|
+
),
|
|
3019
|
+
helpEl
|
|
3020
|
+
] });
|
|
3021
|
+
case "number":
|
|
3022
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
3023
|
+
labelEl,
|
|
3024
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3025
|
+
"input",
|
|
3026
|
+
{
|
|
3027
|
+
id: `input-${field.key}`,
|
|
3028
|
+
type: "number",
|
|
3029
|
+
disabled,
|
|
3030
|
+
required: field.required,
|
|
3031
|
+
placeholder: field.placeholder,
|
|
3032
|
+
min: field.min,
|
|
3033
|
+
max: field.max,
|
|
3034
|
+
step: field.step,
|
|
3035
|
+
value: typeof value === "number" ? value : typeof value === "string" ? value : "",
|
|
3036
|
+
onChange: (e) => {
|
|
3037
|
+
const raw = e.target.value;
|
|
3038
|
+
onChange(raw === "" ? "" : Number(raw));
|
|
3039
|
+
},
|
|
3040
|
+
className: INPUT_CLASSES
|
|
3041
|
+
}
|
|
3042
|
+
),
|
|
3043
|
+
helpEl
|
|
3044
|
+
] });
|
|
3045
|
+
case "textarea":
|
|
3046
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
3047
|
+
labelEl,
|
|
3048
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3049
|
+
"textarea",
|
|
3050
|
+
{
|
|
3051
|
+
id: `input-${field.key}`,
|
|
3052
|
+
disabled,
|
|
3053
|
+
required: field.required,
|
|
3054
|
+
placeholder: field.placeholder,
|
|
3055
|
+
rows: field.rows ?? 3,
|
|
3056
|
+
value: typeof value === "string" ? value : "",
|
|
3057
|
+
onChange: (e) => onChange(e.target.value),
|
|
3058
|
+
className: INPUT_CLASSES
|
|
3059
|
+
}
|
|
3060
|
+
),
|
|
3061
|
+
helpEl
|
|
3062
|
+
] });
|
|
3063
|
+
case "select":
|
|
3064
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { children: [
|
|
3065
|
+
labelEl,
|
|
3066
|
+
/* @__PURE__ */ jsxRuntime.jsxs(
|
|
3067
|
+
"select",
|
|
3068
|
+
{
|
|
3069
|
+
id: `input-${field.key}`,
|
|
3070
|
+
disabled,
|
|
3071
|
+
required: field.required,
|
|
3072
|
+
value: typeof value === "string" ? value : "",
|
|
3073
|
+
onChange: (e) => onChange(e.target.value),
|
|
3074
|
+
className: INPUT_CLASSES,
|
|
3075
|
+
children: [
|
|
3076
|
+
/* @__PURE__ */ jsxRuntime.jsx("option", { value: "", disabled: true, children: "Selecione\u2026" }),
|
|
3077
|
+
field.options.map((option) => /* @__PURE__ */ jsxRuntime.jsx("option", { value: option.value, children: option.label }, option.value))
|
|
3078
|
+
]
|
|
3079
|
+
}
|
|
3080
|
+
),
|
|
3081
|
+
helpEl
|
|
3082
|
+
] });
|
|
3083
|
+
case "boolean":
|
|
3084
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center gap-2", children: [
|
|
3085
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3086
|
+
"input",
|
|
3087
|
+
{
|
|
3088
|
+
id: `input-${field.key}`,
|
|
3089
|
+
type: "checkbox",
|
|
3090
|
+
disabled,
|
|
3091
|
+
checked: Boolean(value),
|
|
3092
|
+
onChange: (e) => onChange(e.target.checked),
|
|
3093
|
+
className: "h-4 w-4 rounded border-zinc-300 text-emerald-600 focus:ring-emerald-500"
|
|
3094
|
+
}
|
|
3095
|
+
),
|
|
3096
|
+
/* @__PURE__ */ jsxRuntime.jsx(
|
|
3097
|
+
"label",
|
|
3098
|
+
{
|
|
3099
|
+
htmlFor: `input-${field.key}`,
|
|
3100
|
+
className: "text-xs text-slate-700 dark:text-slate-300",
|
|
3101
|
+
children: field.label
|
|
3102
|
+
}
|
|
3103
|
+
)
|
|
3104
|
+
] });
|
|
3105
|
+
default:
|
|
3106
|
+
return null;
|
|
3107
|
+
}
|
|
3108
|
+
}
|
|
3109
|
+
function initialValues(fields) {
|
|
3110
|
+
const out = {};
|
|
3111
|
+
for (const field of fields) {
|
|
3112
|
+
if ("defaultValue" in field && field.defaultValue !== void 0) {
|
|
3113
|
+
out[field.key] = field.defaultValue;
|
|
3114
|
+
} else if (field.kind === "boolean") {
|
|
3115
|
+
out[field.key] = false;
|
|
3116
|
+
} else {
|
|
3117
|
+
out[field.key] = "";
|
|
3118
|
+
}
|
|
3119
|
+
}
|
|
3120
|
+
return out;
|
|
3121
|
+
}
|
|
3122
|
+
function sanitizeForSubmit(values) {
|
|
3123
|
+
const out = {};
|
|
3124
|
+
for (const [key, value] of Object.entries(values)) {
|
|
3125
|
+
if (value === "" || value === void 0) continue;
|
|
3126
|
+
out[key] = value;
|
|
3127
|
+
}
|
|
3128
|
+
return out;
|
|
3129
|
+
}
|
|
3130
|
+
var INPUT_CLASSES = "mt-1 block w-full rounded-md border border-zinc-300 bg-white px-2.5 py-1.5 text-sm text-slate-900 shadow-sm focus:border-emerald-500 focus:outline-none focus:ring-1 focus:ring-emerald-500 disabled:opacity-50 dark:border-zinc-700 dark:bg-zinc-900 dark:text-slate-100";
|
|
3131
|
+
var TONE_BLOCK2 = {
|
|
3132
|
+
default: "border-zinc-950/10 bg-white dark:border-white/10 dark:bg-zinc-900",
|
|
3133
|
+
info: "border-sky-500/20 bg-sky-500/5 dark:border-sky-400/30 dark:bg-sky-500/10",
|
|
3134
|
+
success: "border-emerald-500/20 bg-emerald-500/5 dark:border-emerald-400/30 dark:bg-emerald-500/10",
|
|
3135
|
+
warning: "border-amber-500/20 bg-amber-500/5 dark:border-amber-400/30 dark:bg-amber-500/10",
|
|
3136
|
+
danger: "border-rose-500/20 bg-rose-500/5 dark:border-rose-400/30 dark:bg-rose-500/10"
|
|
3137
|
+
};
|
|
3138
|
+
function StreamingDashboard({
|
|
3139
|
+
runId,
|
|
3140
|
+
initialSpec,
|
|
3141
|
+
initialStatus,
|
|
3142
|
+
className
|
|
3143
|
+
}) {
|
|
3144
|
+
const [spec, setSpec] = React12.useState(
|
|
3145
|
+
initialSpec ?? null
|
|
3146
|
+
);
|
|
3147
|
+
const [timeline, setTimeline] = React12.useState([]);
|
|
3148
|
+
const [phase, setPhase] = React12.useState(
|
|
3149
|
+
() => derivePhase(initialStatus)
|
|
3150
|
+
);
|
|
3151
|
+
const [error, setError] = React12.useState(null);
|
|
3152
|
+
const specRef = React12.useRef(initialSpec ?? null);
|
|
3153
|
+
React12.useEffect(() => {
|
|
3154
|
+
if (phase === "completed" || phase === "failed" || phase === "cancelled") {
|
|
3155
|
+
return;
|
|
3156
|
+
}
|
|
3157
|
+
const unsubscribe = chunkL5VEY7G4_js.subscribeToRunEvents(
|
|
3158
|
+
runId,
|
|
3159
|
+
(event) => handleEvent(event),
|
|
3160
|
+
(err) => {
|
|
3161
|
+
console.warn("streaming-dashboard sse error", err);
|
|
3162
|
+
}
|
|
3163
|
+
);
|
|
3164
|
+
return unsubscribe;
|
|
3165
|
+
}, [runId]);
|
|
3166
|
+
function handleEvent(event) {
|
|
3167
|
+
switch (event.type) {
|
|
3168
|
+
case "run-started":
|
|
3169
|
+
setPhase("running");
|
|
3170
|
+
break;
|
|
3171
|
+
case "node-started":
|
|
3172
|
+
if (event.nodeId) {
|
|
3173
|
+
setTimeline((prev) => upsertTimelineRunning(prev, event));
|
|
3174
|
+
}
|
|
3175
|
+
break;
|
|
3176
|
+
case "node-completed":
|
|
3177
|
+
if (event.nodeId) {
|
|
3178
|
+
setTimeline(
|
|
3179
|
+
(prev) => upsertTimelineDone(prev, event, "done")
|
|
3180
|
+
);
|
|
3181
|
+
mergeNodeOutput(event);
|
|
3182
|
+
}
|
|
3183
|
+
break;
|
|
3184
|
+
case "node-failed":
|
|
3185
|
+
if (event.nodeId) {
|
|
3186
|
+
setTimeline(
|
|
3187
|
+
(prev) => upsertTimelineDone(prev, event, "failed")
|
|
3188
|
+
);
|
|
3189
|
+
}
|
|
3190
|
+
break;
|
|
3191
|
+
case "run-paused":
|
|
3192
|
+
setPhase("paused");
|
|
3193
|
+
if (event.nodeId) {
|
|
3194
|
+
setTimeline(
|
|
3195
|
+
(prev) => upsertTimelineDone(prev, event, "paused")
|
|
3196
|
+
);
|
|
3197
|
+
}
|
|
3198
|
+
appendPauseSection(event);
|
|
3199
|
+
break;
|
|
3200
|
+
case "ui-render":
|
|
3201
|
+
appendSectionFromEvent(event);
|
|
3202
|
+
break;
|
|
3203
|
+
case "run-completed":
|
|
3204
|
+
setPhase("completed");
|
|
3205
|
+
break;
|
|
3206
|
+
case "run-failed":
|
|
3207
|
+
setPhase("failed");
|
|
3208
|
+
setError(
|
|
3209
|
+
event.data?.error ?? "Workflow run failed"
|
|
3210
|
+
);
|
|
3211
|
+
break;
|
|
3212
|
+
}
|
|
3213
|
+
}
|
|
3214
|
+
function mergeNodeOutput(event) {
|
|
3215
|
+
const output = event.data?.outputs;
|
|
3216
|
+
if (!output) return;
|
|
3217
|
+
const candidateSpec = isDashboardSpecLike(output) ? output : null;
|
|
3218
|
+
if (candidateSpec) {
|
|
3219
|
+
setSpec((prev) => mergeSpec(prev, candidateSpec));
|
|
3220
|
+
specRef.current = mergeSpec(specRef.current, candidateSpec);
|
|
3221
|
+
return;
|
|
3222
|
+
}
|
|
3223
|
+
if (isSectionLike(output)) {
|
|
3224
|
+
const section = output;
|
|
3225
|
+
setSpec((prev) => appendSectionToSpec(prev, section));
|
|
3226
|
+
specRef.current = appendSectionToSpec(specRef.current, section);
|
|
3227
|
+
}
|
|
3228
|
+
}
|
|
3229
|
+
function appendSectionFromEvent(event) {
|
|
3230
|
+
const sectionPayload = event.data?.section ?? event.data;
|
|
3231
|
+
if (!sectionPayload || !sectionPayload.type) return;
|
|
3232
|
+
setSpec((prev) => appendSectionToSpec(prev, sectionPayload));
|
|
3233
|
+
specRef.current = appendSectionToSpec(specRef.current, sectionPayload);
|
|
3234
|
+
}
|
|
3235
|
+
function appendPauseSection(event) {
|
|
3236
|
+
const promptValue = event.data?.prompt;
|
|
3237
|
+
const payloadValue = event.data?.payload;
|
|
3238
|
+
const prompt = typeof promptValue === "string" ? promptValue : void 0;
|
|
3239
|
+
const section = {
|
|
3240
|
+
type: "note",
|
|
3241
|
+
data: {
|
|
3242
|
+
title: "Aguardando aprova\xE7\xE3o",
|
|
3243
|
+
body: prompt ? prompt : "O workflow pausou e aguarda decis\xE3o do operador.",
|
|
3244
|
+
tone: "warning"
|
|
3245
|
+
}
|
|
3246
|
+
};
|
|
3247
|
+
setSpec((prev) => appendSectionToSpec(prev, section));
|
|
3248
|
+
specRef.current = appendSectionToSpec(specRef.current, section);
|
|
3249
|
+
if (payloadValue && typeof payloadValue === "object") {
|
|
3250
|
+
const followUp = {
|
|
3251
|
+
type: "note",
|
|
3252
|
+
data: {
|
|
3253
|
+
title: "Contexto",
|
|
3254
|
+
body: JSON.stringify(payloadValue, null, 2),
|
|
3255
|
+
tone: "info"
|
|
3256
|
+
}
|
|
3257
|
+
};
|
|
3258
|
+
setSpec((prev) => appendSectionToSpec(prev, followUp));
|
|
3259
|
+
specRef.current = appendSectionToSpec(specRef.current, followUp);
|
|
3260
|
+
}
|
|
3261
|
+
}
|
|
3262
|
+
return /* @__PURE__ */ jsxRuntime.jsxs("div", { className: className ?? "space-y-6", children: [
|
|
3263
|
+
/* @__PURE__ */ jsxRuntime.jsx(PhaseBadge, { phase }),
|
|
3264
|
+
timeline.length > 0 && /* @__PURE__ */ jsxRuntime.jsx(Timeline, { entries: timeline }),
|
|
3265
|
+
spec && /* @__PURE__ */ jsxRuntime.jsx(
|
|
3266
|
+
DashboardView,
|
|
3267
|
+
{
|
|
3268
|
+
spec,
|
|
3269
|
+
renderInputRequest: (data) => /* @__PURE__ */ jsxRuntime.jsx(
|
|
3270
|
+
InputRequestForm,
|
|
3271
|
+
{
|
|
3272
|
+
runId,
|
|
3273
|
+
data,
|
|
3274
|
+
onResolved: (result) => {
|
|
3275
|
+
setPhase(result.approved ? "running" : "failed");
|
|
3276
|
+
}
|
|
3277
|
+
}
|
|
3278
|
+
)
|
|
3279
|
+
}
|
|
3280
|
+
),
|
|
3281
|
+
!spec && phase !== "completed" && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "rounded-xl border border-dashed border-zinc-300 p-8 text-center text-sm text-slate-500 dark:border-zinc-700 dark:text-slate-400", children: phase === "paused" ? "Run paused \u2014 aguardando entrada do operador." : "Aguardando dados do workflow\u2026" }),
|
|
3282
|
+
error && /* @__PURE__ */ jsxRuntime.jsxs("section", { className: "rounded-xl border border-rose-500/30 bg-rose-500/10 p-4 text-sm text-rose-900 dark:text-rose-100", children: [
|
|
3283
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "font-semibold", children: "Run falhou" }),
|
|
3284
|
+
/* @__PURE__ */ jsxRuntime.jsx("p", { className: "mt-1 whitespace-pre-line text-xs", children: error })
|
|
3285
|
+
] })
|
|
3286
|
+
] });
|
|
3287
|
+
}
|
|
3288
|
+
function derivePhase(status) {
|
|
3289
|
+
switch (String(status ?? "").toLowerCase()) {
|
|
3290
|
+
case "completed":
|
|
3291
|
+
return "completed";
|
|
3292
|
+
case "failed":
|
|
3293
|
+
return "failed";
|
|
3294
|
+
case "cancelled":
|
|
3295
|
+
return "cancelled";
|
|
3296
|
+
case "paused_for_approval":
|
|
3297
|
+
return "paused";
|
|
3298
|
+
case "running":
|
|
3299
|
+
return "running";
|
|
3300
|
+
case "pending":
|
|
3301
|
+
case "":
|
|
3302
|
+
return "pending";
|
|
3303
|
+
default:
|
|
3304
|
+
return "pending";
|
|
3305
|
+
}
|
|
3306
|
+
}
|
|
3307
|
+
function PhaseBadge({ phase }) {
|
|
3308
|
+
const map = {
|
|
3309
|
+
pending: { status: "pending", label: "Pendente" },
|
|
3310
|
+
running: { status: "processing", label: "Em execu\xE7\xE3o" },
|
|
3311
|
+
paused: { status: "pending", label: "Aguardando aprova\xE7\xE3o" },
|
|
3312
|
+
completed: { status: "success", label: "Conclu\xEDdo" },
|
|
3313
|
+
failed: { status: "error", label: "Falhou" },
|
|
3314
|
+
cancelled: { status: "inactive", label: "Cancelado" }
|
|
3315
|
+
};
|
|
3316
|
+
const entry = map[phase];
|
|
3317
|
+
return /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex items-center justify-between", children: /* @__PURE__ */ jsxRuntime.jsx(StatusBadge, { status: entry.status, label: entry.label }) });
|
|
3318
|
+
}
|
|
3319
|
+
function Timeline({ entries }) {
|
|
3320
|
+
return /* @__PURE__ */ jsxRuntime.jsx("ol", { className: "flex flex-wrap gap-2", children: entries.map((entry) => {
|
|
3321
|
+
const dotClass = entry.status === "done" ? "bg-emerald-500" : entry.status === "failed" ? "bg-rose-500" : entry.status === "paused" ? "bg-amber-500" : "animate-pulse bg-sky-500";
|
|
3322
|
+
return /* @__PURE__ */ jsxRuntime.jsxs(
|
|
3323
|
+
"li",
|
|
3324
|
+
{
|
|
3325
|
+
className: "flex items-center gap-2 rounded-full border border-zinc-950/10 bg-white px-3 py-1 text-xs dark:border-white/10 dark:bg-zinc-900",
|
|
3326
|
+
title: entry.error ?? entry.nodeId,
|
|
3327
|
+
children: [
|
|
3328
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: `h-2 w-2 rounded-full ${dotClass}` }),
|
|
3329
|
+
/* @__PURE__ */ jsxRuntime.jsx("span", { className: "font-medium text-slate-700 dark:text-slate-300", children: entry.nodeId }),
|
|
3330
|
+
entry.nodeType && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-[10px] uppercase tracking-wide text-slate-400", children: entry.nodeType })
|
|
3331
|
+
]
|
|
3332
|
+
},
|
|
3333
|
+
entry.nodeId
|
|
3334
|
+
);
|
|
3335
|
+
}) });
|
|
3336
|
+
}
|
|
3337
|
+
function upsertTimelineRunning(prev, event) {
|
|
3338
|
+
if (!event.nodeId) return prev;
|
|
3339
|
+
const idx = prev.findIndex((entry) => entry.nodeId === event.nodeId);
|
|
3340
|
+
const nodeType = typeof event.data?.nodeType === "string" ? event.data.nodeType : void 0;
|
|
3341
|
+
const fresh = {
|
|
3342
|
+
nodeId: event.nodeId,
|
|
3343
|
+
nodeType,
|
|
3344
|
+
status: "running",
|
|
3345
|
+
startedAt: event.timestamp
|
|
3346
|
+
};
|
|
3347
|
+
if (idx === -1) return [...prev, fresh];
|
|
3348
|
+
const next = [...prev];
|
|
3349
|
+
next[idx] = { ...next[idx], ...fresh };
|
|
3350
|
+
return next;
|
|
3351
|
+
}
|
|
3352
|
+
function upsertTimelineDone(prev, event, status) {
|
|
3353
|
+
if (!event.nodeId) return prev;
|
|
3354
|
+
const idx = prev.findIndex((entry) => entry.nodeId === event.nodeId);
|
|
3355
|
+
const nodeType = typeof event.data?.nodeType === "string" ? event.data.nodeType : void 0;
|
|
3356
|
+
const error = typeof event.data?.error === "string" ? event.data.error : void 0;
|
|
3357
|
+
if (idx === -1) {
|
|
3358
|
+
return [
|
|
3359
|
+
...prev,
|
|
3360
|
+
{
|
|
3361
|
+
nodeId: event.nodeId,
|
|
3362
|
+
nodeType,
|
|
3363
|
+
status,
|
|
3364
|
+
startedAt: event.timestamp,
|
|
3365
|
+
finishedAt: event.timestamp,
|
|
3366
|
+
error
|
|
3367
|
+
}
|
|
3368
|
+
];
|
|
3369
|
+
}
|
|
3370
|
+
const next = [...prev];
|
|
3371
|
+
next[idx] = {
|
|
3372
|
+
...next[idx],
|
|
3373
|
+
status,
|
|
3374
|
+
finishedAt: event.timestamp,
|
|
3375
|
+
error: error ?? next[idx].error
|
|
3376
|
+
};
|
|
3377
|
+
return next;
|
|
3378
|
+
}
|
|
3379
|
+
function isDashboardSpecLike(value) {
|
|
3380
|
+
if (!value || typeof value !== "object") return false;
|
|
3381
|
+
const candidate = value;
|
|
3382
|
+
return typeof candidate.title === "string" || Array.isArray(candidate.sections) || Array.isArray(candidate.kpis) || Array.isArray(candidate.charts) || typeof candidate.recommendation === "string";
|
|
3383
|
+
}
|
|
3384
|
+
function isSectionLike(value) {
|
|
3385
|
+
if (!value || typeof value !== "object") return false;
|
|
3386
|
+
const candidate = value;
|
|
3387
|
+
return typeof candidate.type === "string" && "data" in candidate;
|
|
3388
|
+
}
|
|
3389
|
+
function mergeSpec(prev, next) {
|
|
3390
|
+
if (!prev) return next;
|
|
3391
|
+
return {
|
|
3392
|
+
...prev,
|
|
3393
|
+
...next,
|
|
3394
|
+
title: next.title ?? prev.title,
|
|
3395
|
+
sections: mergeSections(prev.sections, next.sections)
|
|
3396
|
+
};
|
|
3397
|
+
}
|
|
3398
|
+
function mergeSections(a, b) {
|
|
3399
|
+
if (!a && !b) return void 0;
|
|
3400
|
+
if (!a) return b;
|
|
3401
|
+
if (!b) return a;
|
|
3402
|
+
const seen = /* @__PURE__ */ new Set();
|
|
3403
|
+
const merged = [];
|
|
3404
|
+
for (const section of [...a, ...b]) {
|
|
3405
|
+
const key = JSON.stringify(section);
|
|
3406
|
+
if (seen.has(key)) continue;
|
|
3407
|
+
seen.add(key);
|
|
3408
|
+
merged.push(section);
|
|
3409
|
+
}
|
|
3410
|
+
return merged;
|
|
3411
|
+
}
|
|
3412
|
+
function appendSectionToSpec(prev, section) {
|
|
3413
|
+
const base = prev ?? { title: "" };
|
|
3414
|
+
const sections = base.sections ? [...base.sections, section] : [section];
|
|
3415
|
+
return { ...base, sections };
|
|
3416
|
+
}
|
|
2862
3417
|
|
|
2863
3418
|
// src/types/dashboard-spec.ts
|
|
2864
3419
|
function validateDashboardSpec(spec) {
|
|
@@ -25285,6 +25840,7 @@ exports.InfoPopover = InfoPopover;
|
|
|
25285
25840
|
exports.InlineForm = InlineForm;
|
|
25286
25841
|
exports.InlineSpinner = InlineSpinner;
|
|
25287
25842
|
exports.Input = Input;
|
|
25843
|
+
exports.InputRequestForm = InputRequestForm;
|
|
25288
25844
|
exports.InteractiveGeoMap = InteractiveGeoMap;
|
|
25289
25845
|
exports.InventoryDemo = InventoryDemo;
|
|
25290
25846
|
exports.ItemSummary = ItemSummary;
|
|
@@ -25463,6 +26019,7 @@ exports.StatusToggle = StatusToggle;
|
|
|
25463
26019
|
exports.StepFormPage = StepFormPage;
|
|
25464
26020
|
exports.StepNavigationButtons = StepNavigationButtons;
|
|
25465
26021
|
exports.StepTimeline = StepTimeline;
|
|
26022
|
+
exports.StreamingDashboard = StreamingDashboard;
|
|
25466
26023
|
exports.Strong = Strong;
|
|
25467
26024
|
exports.Subheading = Subheading;
|
|
25468
26025
|
exports.SwipeableRow = SwipeableRow;
|
|
@@ -25809,5 +26366,5 @@ exports.usePullToRefresh = usePullToRefresh;
|
|
|
25809
26366
|
exports.validateDashboardSpec = validateDashboardSpec;
|
|
25810
26367
|
exports.xScale = xScale;
|
|
25811
26368
|
exports.yScale = yScale;
|
|
25812
|
-
//# sourceMappingURL=chunk-
|
|
25813
|
-
//# sourceMappingURL=chunk-
|
|
26369
|
+
//# sourceMappingURL=chunk-YN4IEDE4.js.map
|
|
26370
|
+
//# sourceMappingURL=chunk-YN4IEDE4.js.map
|