@adoptai/genui-components 0.1.33 → 0.1.54

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.
Files changed (128) hide show
  1. package/README.md +5 -0
  2. package/dist/builders/BlockForm.d.ts +31 -0
  3. package/dist/builders/BlockForm.d.ts.map +1 -0
  4. package/dist/builders/BuilderForm.d.ts +25 -2
  5. package/dist/builders/BuilderForm.d.ts.map +1 -1
  6. package/dist/builders/BuilderRecap.d.ts.map +1 -1
  7. package/dist/builders/ContextSlot.d.ts +6 -0
  8. package/dist/builders/ContextSlot.d.ts.map +1 -1
  9. package/dist/builders/FieldRenderer.d.ts +9 -2
  10. package/dist/builders/FieldRenderer.d.ts.map +1 -1
  11. package/dist/builders/StepperBuilder.d.ts +9 -2
  12. package/dist/builders/StepperBuilder.d.ts.map +1 -1
  13. package/dist/builders/fields.d.ts +27 -2
  14. package/dist/builders/fields.d.ts.map +1 -1
  15. package/dist/builders/hooks.d.ts +17 -0
  16. package/dist/builders/hooks.d.ts.map +1 -1
  17. package/dist/builders/index.d.ts +5 -5
  18. package/dist/builders/index.d.ts.map +1 -1
  19. package/dist/builders/resolver.d.ts +14 -0
  20. package/dist/builders/resolver.d.ts.map +1 -1
  21. package/dist/builders/schemas.d.ts +196 -1
  22. package/dist/builders/schemas.d.ts.map +1 -1
  23. package/dist/composites/aging-report/resolver.cjs +1 -1
  24. package/dist/composites/aging-report/resolver.cjs.map +1 -1
  25. package/dist/composites/aging-report/resolver.js +1 -1
  26. package/dist/composites/aging-report/resolver.js.map +1 -1
  27. package/dist/composites/balance-sheet/resolver.cjs +1 -1
  28. package/dist/composites/balance-sheet/resolver.cjs.map +1 -1
  29. package/dist/composites/balance-sheet/resolver.js +1 -1
  30. package/dist/composites/balance-sheet/resolver.js.map +1 -1
  31. package/dist/composites/connect-integration/resolver.cjs +465 -0
  32. package/dist/composites/connect-integration/resolver.cjs.map +1 -0
  33. package/dist/composites/connect-integration/resolver.js +463 -0
  34. package/dist/composites/connect-integration/resolver.js.map +1 -0
  35. package/dist/composites/entity-card-grid/resolver.cjs +2 -2
  36. package/dist/composites/entity-card-grid/resolver.cjs.map +1 -1
  37. package/dist/composites/entity-card-grid/resolver.js +2 -2
  38. package/dist/composites/entity-card-grid/resolver.js.map +1 -1
  39. package/dist/composites/general-ledger/resolver.cjs +1 -0
  40. package/dist/composites/general-ledger/resolver.cjs.map +1 -1
  41. package/dist/composites/general-ledger/resolver.d.ts.map +1 -1
  42. package/dist/composites/general-ledger/resolver.js +1 -0
  43. package/dist/composites/general-ledger/resolver.js.map +1 -1
  44. package/dist/composites/income-statement/resolver.cjs +1 -1
  45. package/dist/composites/income-statement/resolver.cjs.map +1 -1
  46. package/dist/composites/income-statement/resolver.js +1 -1
  47. package/dist/composites/income-statement/resolver.js.map +1 -1
  48. package/dist/composites/integrations-list/resolver.cjs +511 -0
  49. package/dist/composites/integrations-list/resolver.cjs.map +1 -0
  50. package/dist/composites/integrations-list/resolver.js +509 -0
  51. package/dist/composites/integrations-list/resolver.js.map +1 -0
  52. package/dist/composites/journal-entry/resolver.cjs +2 -2
  53. package/dist/composites/journal-entry/resolver.cjs.map +1 -1
  54. package/dist/composites/journal-entry/resolver.js +2 -2
  55. package/dist/composites/journal-entry/resolver.js.map +1 -1
  56. package/dist/composites/key-value-list/resolver.cjs +28 -3
  57. package/dist/composites/key-value-list/resolver.cjs.map +1 -1
  58. package/dist/composites/key-value-list/resolver.d.ts.map +1 -1
  59. package/dist/composites/key-value-list/resolver.js +28 -3
  60. package/dist/composites/key-value-list/resolver.js.map +1 -1
  61. package/dist/composites/pipeline-preview/resolver.cjs +926 -0
  62. package/dist/composites/pipeline-preview/resolver.cjs.map +1 -0
  63. package/dist/composites/pipeline-preview/resolver.js +924 -0
  64. package/dist/composites/pipeline-preview/resolver.js.map +1 -0
  65. package/dist/composites/reconciliation-view/resolver.cjs +90 -32
  66. package/dist/composites/reconciliation-view/resolver.cjs.map +1 -1
  67. package/dist/composites/reconciliation-view/resolver.d.ts.map +1 -1
  68. package/dist/composites/reconciliation-view/resolver.js +91 -33
  69. package/dist/composites/reconciliation-view/resolver.js.map +1 -1
  70. package/dist/composites/stacked-breakdown/resolver.cjs +13 -2
  71. package/dist/composites/stacked-breakdown/resolver.cjs.map +1 -1
  72. package/dist/composites/stacked-breakdown/resolver.d.ts.map +1 -1
  73. package/dist/composites/stacked-breakdown/resolver.js +13 -2
  74. package/dist/composites/stacked-breakdown/resolver.js.map +1 -1
  75. package/dist/composites/stat-grid/resolver.cjs +83 -5
  76. package/dist/composites/stat-grid/resolver.cjs.map +1 -1
  77. package/dist/composites/stat-grid/resolver.d.ts.map +1 -1
  78. package/dist/composites/stat-grid/resolver.js +84 -6
  79. package/dist/composites/stat-grid/resolver.js.map +1 -1
  80. package/dist/composites/trial-balance/resolver.cjs +1 -1
  81. package/dist/composites/trial-balance/resolver.cjs.map +1 -1
  82. package/dist/composites/trial-balance/resolver.js +1 -1
  83. package/dist/composites/trial-balance/resolver.js.map +1 -1
  84. package/dist/composites/variance-analysis/resolver.cjs +1 -1
  85. package/dist/composites/variance-analysis/resolver.cjs.map +1 -1
  86. package/dist/composites/variance-analysis/resolver.js +1 -1
  87. package/dist/composites/variance-analysis/resolver.js.map +1 -1
  88. package/dist/composites/workflow-stepper/resolver.cjs +978 -0
  89. package/dist/composites/workflow-stepper/resolver.cjs.map +1 -0
  90. package/dist/composites/workflow-stepper/resolver.d.ts +20 -0
  91. package/dist/composites/workflow-stepper/resolver.d.ts.map +1 -0
  92. package/dist/composites/workflow-stepper/resolver.js +971 -0
  93. package/dist/composites/workflow-stepper/resolver.js.map +1 -0
  94. package/dist/index.cjs +2497 -972
  95. package/dist/index.cjs.map +1 -1
  96. package/dist/index.d.ts +7 -0
  97. package/dist/index.d.ts.map +1 -1
  98. package/dist/index.js +2344 -827
  99. package/dist/index.js.map +1 -1
  100. package/dist/renderer.cjs +1071 -213
  101. package/dist/renderer.cjs.map +1 -1
  102. package/dist/renderer.js +933 -75
  103. package/dist/renderer.js.map +1 -1
  104. package/dist/resolver.cjs +1070 -212
  105. package/dist/resolver.cjs.map +1 -1
  106. package/dist/resolver.d.ts.map +1 -1
  107. package/dist/resolver.js +933 -75
  108. package/dist/resolver.js.map +1 -1
  109. package/dist/schemas/index.cjs +75 -1
  110. package/dist/schemas/index.cjs.map +1 -1
  111. package/dist/schemas/index.d.ts +123 -0
  112. package/dist/schemas/index.d.ts.map +1 -1
  113. package/dist/schemas/index.js +75 -1
  114. package/dist/schemas/index.js.map +1 -1
  115. package/dist/schemas/workflow-stepper.d.ts +123 -0
  116. package/dist/schemas/workflow-stepper.d.ts.map +1 -0
  117. package/dist/shared/FitText.d.ts +22 -0
  118. package/dist/shared/FitText.d.ts.map +1 -0
  119. package/dist/shared/InteractionContext.d.ts +20 -0
  120. package/dist/shared/InteractionContext.d.ts.map +1 -0
  121. package/dist/shared/styles.d.ts +14 -0
  122. package/dist/shared/styles.d.ts.map +1 -0
  123. package/dist/tool-definitions.json +115 -3
  124. package/package.json +2 -2
  125. package/dist/builders/EscalationCard.d.ts +0 -12
  126. package/dist/builders/EscalationCard.d.ts.map +0 -1
  127. package/dist/builders/FormBuilder.d.ts +0 -13
  128. package/dist/builders/FormBuilder.d.ts.map +0 -1
package/dist/resolver.js CHANGED
@@ -1,5 +1,5 @@
1
1
  "use client";
2
- import React33, { lazy, createContext, useState, useCallback, useEffect, useRef, useMemo, useContext, Suspense } from 'react';
2
+ import React41, { lazy, createContext, useState, useCallback, useEffect, useRef, useMemo, useContext, Suspense, useLayoutEffect } from 'react';
3
3
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
4
4
  import dagre from '@dagrejs/dagre';
5
5
  import { createPortal } from 'react-dom';
@@ -5204,6 +5204,79 @@ var pipelinePreviewTool = {
5204
5204
  required: ["type", "name", "steps"]
5205
5205
  }
5206
5206
  };
5207
+ var workflowStepperSchema = z.object({
5208
+ type: z.literal("workflow-stepper"),
5209
+ id: z.string().optional(),
5210
+ title: z.string(),
5211
+ period: z.string().optional(),
5212
+ badge: z.string().optional(),
5213
+ active_step: z.string().optional(),
5214
+ steps: z.array(
5215
+ z.object({
5216
+ id: z.string(),
5217
+ n: z.number().int().positive().optional(),
5218
+ title: z.string(),
5219
+ sub: z.string().optional(),
5220
+ status: z.enum(["done", "active", "review", "pending", "blocked", "failed"]),
5221
+ assignees: z.array(
5222
+ z.object({
5223
+ name: z.string(),
5224
+ kind: z.enum(["agent", "human"]),
5225
+ initials: z.string().max(3).optional(),
5226
+ color: z.string().optional(),
5227
+ role: z.string().optional()
5228
+ })
5229
+ ).max(6).optional()
5230
+ })
5231
+ ).min(2).max(12)
5232
+ });
5233
+ var workflowStepperTool = {
5234
+ name: "render_workflow_stepper",
5235
+ description: "Render a recurring-process workflow stepper \u2014 a horizontal strip of sequential step cards (e.g. a monthly close pipeline) with per-step status (done/active/review/pending/blocked/failed) and human + agent assignee avatars. Use for org processes with named steps and owners, NOT for generic progress bars or project phase summaries.",
5236
+ input_schema: {
5237
+ type: "object",
5238
+ properties: {
5239
+ type: { type: "string", enum: ["workflow-stepper"] },
5240
+ id: { type: "string", description: "Stable id for update-in-place rendering" },
5241
+ title: { type: "string", description: "Process name, e.g. 'Monthly Close'" },
5242
+ period: { type: "string", description: "Period label, e.g. 'Period 04 \xB7 FY2026'" },
5243
+ badge: { type: "string", description: "Framework/compliance badge, e.g. 'SOX controlled'" },
5244
+ active_step: { type: "string", description: "Id of the currently active step" },
5245
+ steps: {
5246
+ type: "array",
5247
+ minItems: 2,
5248
+ maxItems: 12,
5249
+ items: {
5250
+ type: "object",
5251
+ properties: {
5252
+ id: { type: "string" },
5253
+ n: { type: "number", description: "Step number; defaults to index + 1" },
5254
+ title: { type: "string" },
5255
+ sub: { type: "string", description: "Short status caption, e.g. '7 accounts \xB7 2 exceptions'" },
5256
+ status: { type: "string", enum: ["done", "active", "review", "pending", "blocked", "failed"] },
5257
+ assignees: {
5258
+ type: "array",
5259
+ maxItems: 6,
5260
+ items: {
5261
+ type: "object",
5262
+ properties: {
5263
+ name: { type: "string" },
5264
+ kind: { type: "string", enum: ["agent", "human"] },
5265
+ initials: { type: "string" },
5266
+ color: { type: "string" },
5267
+ role: { type: "string" }
5268
+ },
5269
+ required: ["name", "kind"]
5270
+ }
5271
+ }
5272
+ },
5273
+ required: ["id", "title", "status"]
5274
+ }
5275
+ }
5276
+ },
5277
+ required: ["type", "title", "steps"]
5278
+ }
5279
+ };
5207
5280
 
5208
5281
  // src/schemas/index.ts
5209
5282
  var schemaRegistry = {
@@ -5262,7 +5335,8 @@ var schemaRegistry = {
5262
5335
  "scatter-chart": { schema: scatterChartSchema, tool: scatterChartTool },
5263
5336
  "connect-integration": { schema: connectIntegrationSchema, tool: connectIntegrationTool },
5264
5337
  "integrations-list": { schema: integrationsListSchema, tool: integrationsListTool },
5265
- "pipeline-preview": { schema: pipelinePreviewSchema, tool: pipelinePreviewTool }
5338
+ "pipeline-preview": { schema: pipelinePreviewSchema, tool: pipelinePreviewTool },
5339
+ "workflow-stepper": { schema: workflowStepperSchema, tool: workflowStepperTool }
5266
5340
  };
5267
5341
 
5268
5342
  // src/schemas/coercePayload.ts
@@ -5752,6 +5826,56 @@ function AlertResolver(p) {
5752
5826
 
5753
5827
  // src/composites/stat-grid/resolver.tsx
5754
5828
  init_Markdown();
5829
+ function FitText({ children, max = 22, min = 13, title, className, style }) {
5830
+ const ref = useRef(null);
5831
+ const [size, setSize] = useState(max);
5832
+ useLayoutEffect(() => {
5833
+ const el = ref.current;
5834
+ if (!el) return void 0;
5835
+ const fit = () => {
5836
+ let s = max;
5837
+ el.style.fontSize = `${s}px`;
5838
+ while (s > min && el.scrollWidth > el.clientWidth + 1) {
5839
+ s -= 1;
5840
+ el.style.fontSize = `${s}px`;
5841
+ }
5842
+ setSize(s);
5843
+ };
5844
+ fit();
5845
+ if (typeof ResizeObserver === "undefined") return void 0;
5846
+ const ro = new ResizeObserver(fit);
5847
+ ro.observe(el);
5848
+ return () => ro.disconnect();
5849
+ }, [children, max, min]);
5850
+ return /* @__PURE__ */ jsx(
5851
+ "span",
5852
+ {
5853
+ ref,
5854
+ title,
5855
+ className,
5856
+ style: __spreadValues({
5857
+ display: "block",
5858
+ minWidth: 0,
5859
+ maxWidth: "100%",
5860
+ whiteSpace: "nowrap",
5861
+ overflow: "hidden",
5862
+ textOverflow: "ellipsis",
5863
+ fontSize: `${size}px`
5864
+ }, style),
5865
+ children
5866
+ }
5867
+ );
5868
+ }
5869
+
5870
+ // src/shared/styles.ts
5871
+ var TRUNCATE = {
5872
+ minWidth: 0,
5873
+ overflow: "hidden",
5874
+ textOverflow: "ellipsis",
5875
+ whiteSpace: "nowrap"
5876
+ };
5877
+
5878
+ // src/composites/stat-grid/resolver.tsx
5755
5879
  init_ThemeContext();
5756
5880
  var changeColor = (type) => {
5757
5881
  if (type === "positive") return "#15803d";
@@ -5762,15 +5886,28 @@ var cardStyle = {
5762
5886
  border: "1px solid #dedede",
5763
5887
  borderRadius: "0.75rem",
5764
5888
  background: "white",
5765
- padding: "14px"
5889
+ padding: "14px",
5890
+ // Let the card shrink inside the grid track so big values can't push it
5891
+ // wider than its column.
5892
+ minWidth: 0,
5893
+ overflow: "hidden"
5766
5894
  };
5767
5895
  function StatGridResolver(p) {
5768
5896
  var _a;
5769
5897
  const { MUTED: MUTED2 } = useTheme();
5770
- return /* @__PURE__ */ jsx(ComponentActions, { filename: "stat-grid", children: /* @__PURE__ */ jsx("div", { style: { width: "100%", display: "grid", gap: "10px", gridTemplateColumns: "repeat(auto-fill, minmax(140px, 1fr))" }, children: ((_a = p.stats) != null ? _a : []).map((stat, i) => /* @__PURE__ */ jsx("div", { style: cardStyle, children: /* @__PURE__ */ jsxs("div", { style: { display: "flex", flexDirection: "column", gap: "4px", padding: "4px 0" }, children: [
5771
- /* @__PURE__ */ jsx("p", { style: { fontSize: "11.5px", color: MUTED2, letterSpacing: "0.02em", textTransform: "uppercase", margin: 0 }, children: stat.label }),
5772
- /* @__PURE__ */ jsx("p", { style: { fontFamily: "var(--font-serif)", fontSize: "22px", fontWeight: 600, color: "var(--foreground)", letterSpacing: "-0.01em", lineHeight: 1.1, fontVariantNumeric: "tabular-nums", margin: 0 }, children: stat.value }),
5773
- stat.change && /* @__PURE__ */ jsx("p", { style: { fontSize: "12px", fontWeight: 500, color: changeColor(stat.changeType), fontVariantNumeric: "tabular-nums", margin: 0 }, children: stat.change }),
5898
+ return /* @__PURE__ */ jsx(ComponentActions, { filename: "stat-grid", children: /* @__PURE__ */ jsx("div", { style: { width: "100%", display: "grid", gap: "10px", gridTemplateColumns: "repeat(auto-fill, minmax(min(140px, 100%), 1fr))" }, children: ((_a = p.stats) != null ? _a : []).map((stat, i) => /* @__PURE__ */ jsx("div", { style: cardStyle, children: /* @__PURE__ */ jsxs("div", { style: { display: "flex", flexDirection: "column", gap: "4px", padding: "4px 0", minWidth: 0 }, children: [
5899
+ /* @__PURE__ */ jsx("p", { style: __spreadValues({ fontSize: "11.5px", color: MUTED2, letterSpacing: "0.02em", textTransform: "uppercase", margin: 0 }, TRUNCATE), children: stat.label }),
5900
+ /* @__PURE__ */ jsx(
5901
+ FitText,
5902
+ {
5903
+ max: 22,
5904
+ min: 13,
5905
+ title: typeof stat.value === "string" ? stat.value : void 0,
5906
+ style: { fontFamily: "var(--font-serif)", fontWeight: 600, color: "var(--foreground)", letterSpacing: "-0.01em", lineHeight: 1.1, fontVariantNumeric: "tabular-nums" },
5907
+ children: stat.value
5908
+ }
5909
+ ),
5910
+ stat.change && /* @__PURE__ */ jsx("p", { style: __spreadValues({ fontSize: "12px", fontWeight: 500, color: changeColor(stat.changeType), fontVariantNumeric: "tabular-nums", margin: 0 }, TRUNCATE), children: stat.change }),
5774
5911
  stat.description && /* @__PURE__ */ jsx("p", { style: { fontSize: "11.5px", color: "#888888", lineHeight: 1.4, margin: 0 }, children: /* @__PURE__ */ jsx(Markdown, { inline: true, content: stat.description }) })
5775
5912
  ] }) }, i)) }) });
5776
5913
  }
@@ -5937,17 +6074,17 @@ function SparklineTableResolver(p) {
5937
6074
  // src/composites/heatmap-table/resolver.tsx
5938
6075
  init_theme();
5939
6076
  init_ThemeContext();
5940
- function heatColor(z57) {
5941
- const clamped = Math.max(-3, Math.min(3, z57));
6077
+ function heatColor(z58) {
6078
+ const clamped = Math.max(-3, Math.min(3, z58));
5942
6079
  const abs = Math.abs(clamped);
5943
6080
  const lightness = 95 - abs * 8;
5944
6081
  const hue = clamped >= 0 ? 142 : 0;
5945
6082
  return `hsl(${hue} 60% ${lightness}%)`;
5946
6083
  }
5947
- function heatTextColor(z57) {
5948
- const abs = Math.abs(z57);
5949
- if (abs > 2) return z57 >= 0 ? "#14532d" : "#7f1d1d";
5950
- if (abs > 1) return z57 >= 0 ? "#166534" : "#991b1b";
6084
+ function heatTextColor(z58) {
6085
+ const abs = Math.abs(z58);
6086
+ if (abs > 2) return z58 >= 0 ? "#14532d" : "#7f1d1d";
6087
+ if (abs > 1) return z58 >= 0 ? "#166534" : "#991b1b";
5951
6088
  return "var(--foreground)";
5952
6089
  }
5953
6090
  var th2 = {
@@ -6567,7 +6704,7 @@ function WaterfallChartResolver(p) {
6567
6704
  ] }) });
6568
6705
  }
6569
6706
  init_ThemeContext();
6570
- var FlowGraph2 = React33.lazy(
6707
+ var FlowGraph2 = React41.lazy(
6571
6708
  () => Promise.resolve().then(() => (init_FlowGraph(), FlowGraph_exports)).then((m) => ({ default: m.FlowGraph }))
6572
6709
  );
6573
6710
  function FlowCanvasRenderer({
@@ -6820,7 +6957,7 @@ function TrialBalanceResolver(p) {
6820
6957
  color: balanced ? "#15803d" : "#dc2626"
6821
6958
  }, children: balanced ? "\u2713 Balanced" : "\u2717 Unbalanced" })
6822
6959
  ] }),
6823
- /* @__PURE__ */ jsx("div", { style: { overflowX: "auto", borderRadius: "0.75rem", border: `1px solid ${BORDER4}`, boxShadow: "0 1px 2px rgba(0,0,0,0.03), 0 4px 12px rgba(0,0,0,0.05)" }, children: /* @__PURE__ */ jsxs("table", { style: { width: "100%", borderCollapse: "collapse", minWidth: "380px" }, children: [
6960
+ /* @__PURE__ */ jsx("div", { style: { overflowX: "auto", minWidth: 0, borderRadius: "0.75rem", border: `1px solid ${BORDER4}`, boxShadow: "0 1px 2px rgba(0,0,0,0.03), 0 4px 12px rgba(0,0,0,0.05)" }, children: /* @__PURE__ */ jsxs("table", { style: { width: "100%", borderCollapse: "collapse", minWidth: "380px" }, children: [
6824
6961
  /* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsx("tr", { children: ["Code", "Account", "Debit", "Credit"].map((h, i) => /* @__PURE__ */ jsx("th", { style: {
6825
6962
  fontSize: "11px",
6826
6963
  fontWeight: 500,
@@ -6841,7 +6978,7 @@ function TrialBalanceResolver(p) {
6841
6978
  gDebit += a.debit;
6842
6979
  gCredit += a.credit;
6843
6980
  });
6844
- return /* @__PURE__ */ jsxs(React33.Fragment, { children: [
6981
+ return /* @__PURE__ */ jsxs(React41.Fragment, { children: [
6845
6982
  /* @__PURE__ */ jsx("tr", { children: /* @__PURE__ */ jsx("td", { colSpan: 4, style: {
6846
6983
  padding: "8px 12px",
6847
6984
  fontSize: "12px",
@@ -6902,7 +7039,7 @@ function JournalEntryResolver(p) {
6902
7039
  }, children: /* @__PURE__ */ jsxs("div", { style: { width: "100%", display: "flex", flexDirection: "column", gap: "14px" }, children: [
6903
7040
  p.title && /* @__PURE__ */ jsx("p", { style: { fontFamily: "var(--font-serif)", fontSize: "15px", fontWeight: 600, color: "var(--foreground)", letterSpacing: "-0.005em" }, children: p.title }),
6904
7041
  ((_c = p.entries) != null ? _c : []).map((entry) => {
6905
- var _a2, _b2;
7042
+ var _a2, _b2, _c2;
6906
7043
  let totalDebit = 0, totalCredit = 0;
6907
7044
  ((_a2 = entry.lines) != null ? _a2 : []).forEach((l) => {
6908
7045
  totalDebit += l.debit;
@@ -6928,7 +7065,7 @@ function JournalEntryResolver(p) {
6928
7065
  letterSpacing: "0.02em"
6929
7066
  }, children: h }, h)) }) }),
6930
7067
  /* @__PURE__ */ jsxs("tbody", { children: [
6931
- entry.lines.map((line, li) => {
7068
+ ((_c2 = entry.lines) != null ? _c2 : []).map((line, li) => {
6932
7069
  var _a3;
6933
7070
  return /* @__PURE__ */ jsxs("tr", { style: { background: li % 2 === 0 ? "white" : "#fafafa" }, children: [
6934
7071
  /* @__PURE__ */ jsx("td", { style: { padding: "6px 12px", fontSize: "13px" }, children: line.account }),
@@ -6998,7 +7135,7 @@ function AgingReportResolver(p) {
6998
7135
  p.asOfDate
6999
7136
  ] })
7000
7137
  ] }),
7001
- /* @__PURE__ */ jsx("div", { style: { overflowX: "auto", borderRadius: "0.75rem", border: `1px solid ${BORDER4}`, boxShadow: "0 1px 2px rgba(0,0,0,0.03), 0 4px 12px rgba(0,0,0,0.04)" }, children: /* @__PURE__ */ jsxs("table", { style: { width: "100%", borderCollapse: "collapse" }, children: [
7138
+ /* @__PURE__ */ jsx("div", { style: { overflowX: "auto", minWidth: 0, borderRadius: "0.75rem", border: `1px solid ${BORDER4}`, boxShadow: "0 1px 2px rgba(0,0,0,0.03), 0 4px 12px rgba(0,0,0,0.04)" }, children: /* @__PURE__ */ jsxs("table", { style: { width: "100%", borderCollapse: "collapse" }, children: [
7002
7139
  /* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsxs("tr", { children: [
7003
7140
  /* @__PURE__ */ jsx("th", { style: { fontSize: "11px", fontWeight: 500, color: MUTED2, padding: "8px 12px", textAlign: "left", borderBottom: `1px solid ${BORDER4}`, background: PAPER2, textTransform: "uppercase", letterSpacing: "0.02em" }, children: "Entity" }),
7004
7141
  buckets.map((b, i) => /* @__PURE__ */ jsx("th", { style: { fontSize: "11px", fontWeight: 500, color: MUTED2, padding: "8px 12px", textAlign: "right", borderBottom: `1px solid ${BORDER4}`, background: PAPER2, textTransform: "uppercase", letterSpacing: "0.02em", whiteSpace: "nowrap" }, children: b }, i)),
@@ -7055,7 +7192,7 @@ function VarianceAnalysisResolver(p) {
7055
7192
  p.title && /* @__PURE__ */ jsx("p", { style: { fontFamily: "var(--font-serif)", fontSize: "15px", fontWeight: 600, color: "var(--foreground)", letterSpacing: "-0.005em" }, children: p.title }),
7056
7193
  p.period && /* @__PURE__ */ jsx("span", { style: { fontSize: "11px", color: MUTED2 }, children: p.period })
7057
7194
  ] }),
7058
- /* @__PURE__ */ jsx("div", { style: { overflowX: "auto", borderRadius: "0.75rem", border: `1px solid ${BORDER4}`, boxShadow: "0 1px 2px rgba(0,0,0,0.03), 0 4px 12px rgba(0,0,0,0.05)" }, children: /* @__PURE__ */ jsxs("table", { style: { width: "100%", borderCollapse: "collapse", minWidth: "480px" }, children: [
7195
+ /* @__PURE__ */ jsx("div", { style: { overflowX: "auto", minWidth: 0, borderRadius: "0.75rem", border: `1px solid ${BORDER4}`, boxShadow: "0 1px 2px rgba(0,0,0,0.03), 0 4px 12px rgba(0,0,0,0.05)" }, children: /* @__PURE__ */ jsxs("table", { style: { width: "100%", borderCollapse: "collapse", minWidth: "480px" }, children: [
7059
7196
  /* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsx("tr", { children: ["Line Item", "Budget", "Actual", "Variance $", "Variance %", ""].map((h, i) => /* @__PURE__ */ jsx("th", { style: {
7060
7197
  fontSize: "11px",
7061
7198
  fontWeight: 500,
@@ -7173,6 +7310,8 @@ function StackedBreakdownResolver(p) {
7173
7310
  alignItems: "center",
7174
7311
  gap: "6px",
7175
7312
  fontSize: "12px",
7313
+ maxWidth: "100%",
7314
+ minWidth: 0,
7176
7315
  color: isVisible(cat.name) ? MUTED2 : "#b3b3b3",
7177
7316
  cursor: "pointer",
7178
7317
  userSelect: "none",
@@ -7184,12 +7323,13 @@ function StackedBreakdownResolver(p) {
7184
7323
  width: "10px",
7185
7324
  height: "10px",
7186
7325
  borderRadius: "2px",
7326
+ flexShrink: 0,
7187
7327
  background: (_a2 = cat.color) != null ? _a2 : PALETTE2[ci % PALETTE2.length],
7188
7328
  display: "inline-block",
7189
7329
  opacity: isVisible(cat.name) ? 1 : 0.3,
7190
7330
  transition: "opacity 0.15s"
7191
7331
  } }),
7192
- cat.name
7332
+ /* @__PURE__ */ jsx("span", { style: TRUNCATE, title: cat.name, children: cat.name })
7193
7333
  ]
7194
7334
  },
7195
7335
  cat.name
@@ -7211,7 +7351,7 @@ function StackedBreakdownResolver(p) {
7211
7351
  ((_b2 = p.periods) != null ? _b2 : []).map((_, pi) => {
7212
7352
  var _a3, _b3;
7213
7353
  const v = pi < ((_a3 = cat.values) != null ? _a3 : []).length ? ((_b3 = cat.values) != null ? _b3 : [])[pi] : 0;
7214
- return /* @__PURE__ */ jsx("td", { style: { padding: "6px 12px", fontSize: "13px", textAlign: "right", fontVariantNumeric: "tabular-nums", borderBottom: `1px solid #f2f2f2`, color: v < 0 ? "#dc2626" : void 0 }, children: v < 0 ? `(${fmt5(Math.abs(v), p.currency)})` : fmt5(v, p.currency) }, pi);
7354
+ return /* @__PURE__ */ jsx("td", { style: { padding: "6px 12px", fontSize: "13px", textAlign: "right", fontVariantNumeric: "tabular-nums", whiteSpace: "nowrap", borderBottom: `1px solid #f2f2f2`, color: v < 0 ? "#dc2626" : void 0 }, children: v < 0 ? `(${fmt5(Math.abs(v), p.currency)})` : fmt5(v, p.currency) }, pi);
7215
7355
  })
7216
7356
  ] }, cat.name);
7217
7357
  }),
@@ -7584,7 +7724,7 @@ function ReconciliationViewResolver(p) {
7584
7724
  {
7585
7725
  style: {
7586
7726
  display: "grid",
7587
- gridTemplateColumns: "repeat(auto-fit, minmax(90px, 1fr))",
7727
+ gridTemplateColumns: "repeat(auto-fit, minmax(min(120px, 100%), 1fr))",
7588
7728
  gap: "0",
7589
7729
  marginBottom: "14px",
7590
7730
  borderRadius: "10px",
@@ -7592,31 +7732,28 @@ function ReconciliationViewResolver(p) {
7592
7732
  overflow: "hidden"
7593
7733
  },
7594
7734
  children: [
7595
- /* @__PURE__ */ jsxs("div", { style: { padding: "10px 12px", background: PAPER2 }, children: [
7735
+ /* @__PURE__ */ jsxs("div", { style: { padding: "10px 12px", background: PAPER2, minWidth: 0 }, children: [
7596
7736
  /* @__PURE__ */ jsx(
7597
7737
  "div",
7598
7738
  {
7599
- style: {
7739
+ style: __spreadValues({
7600
7740
  fontSize: "10px",
7601
7741
  fontWeight: 500,
7602
7742
  color: MUTED2,
7603
7743
  textTransform: "uppercase",
7604
7744
  letterSpacing: "0.04em",
7605
7745
  marginBottom: "4px"
7606
- },
7746
+ }, TRUNCATE),
7607
7747
  children: sourceA.label
7608
7748
  }
7609
7749
  ),
7610
7750
  /* @__PURE__ */ jsx(
7611
- "div",
7751
+ FitText,
7612
7752
  {
7613
- style: {
7614
- fontSize: "15px",
7615
- fontWeight: 600,
7616
- color: "var(--foreground)",
7617
- fontVariantNumeric: "tabular-nums",
7618
- letterSpacing: "-0.01em"
7619
- },
7753
+ max: 15,
7754
+ min: 11,
7755
+ title: fmt6(balanceA, p.currency),
7756
+ style: { fontWeight: 600, color: "var(--foreground)", fontVariantNumeric: "tabular-nums", letterSpacing: "-0.01em" },
7620
7757
  children: fmt6(balanceA, p.currency)
7621
7758
  }
7622
7759
  )
@@ -7628,33 +7765,31 @@ function ReconciliationViewResolver(p) {
7628
7765
  padding: "10px 12px",
7629
7766
  background: PAPER2,
7630
7767
  borderLeft: `1px solid ${BORDER4}`,
7631
- borderRight: `1px solid ${BORDER4}`
7768
+ borderRight: `1px solid ${BORDER4}`,
7769
+ minWidth: 0
7632
7770
  },
7633
7771
  children: [
7634
7772
  /* @__PURE__ */ jsx(
7635
7773
  "div",
7636
7774
  {
7637
- style: {
7775
+ style: __spreadValues({
7638
7776
  fontSize: "10px",
7639
7777
  fontWeight: 500,
7640
7778
  color: MUTED2,
7641
7779
  textTransform: "uppercase",
7642
7780
  letterSpacing: "0.04em",
7643
7781
  marginBottom: "4px"
7644
- },
7782
+ }, TRUNCATE),
7645
7783
  children: sourceB.label
7646
7784
  }
7647
7785
  ),
7648
7786
  /* @__PURE__ */ jsx(
7649
- "div",
7787
+ FitText,
7650
7788
  {
7651
- style: {
7652
- fontSize: "15px",
7653
- fontWeight: 600,
7654
- color: "var(--foreground)",
7655
- fontVariantNumeric: "tabular-nums",
7656
- letterSpacing: "-0.01em"
7657
- },
7789
+ max: 15,
7790
+ min: 11,
7791
+ title: fmt6(balanceB, p.currency),
7792
+ style: { fontWeight: 600, color: "var(--foreground)", fontVariantNumeric: "tabular-nums", letterSpacing: "-0.01em" },
7658
7793
  children: fmt6(balanceB, p.currency)
7659
7794
  }
7660
7795
  )
@@ -7666,7 +7801,8 @@ function ReconciliationViewResolver(p) {
7666
7801
  {
7667
7802
  style: {
7668
7803
  padding: "10px 12px",
7669
- background: difference === 0 ? "#f0fdf4" : "#fef2f2"
7804
+ background: difference === 0 ? "#f0fdf4" : "#fef2f2",
7805
+ minWidth: 0
7670
7806
  },
7671
7807
  children: [
7672
7808
  /* @__PURE__ */ jsxs(
@@ -7706,15 +7842,12 @@ function ReconciliationViewResolver(p) {
7706
7842
  }
7707
7843
  ),
7708
7844
  /* @__PURE__ */ jsx(
7709
- "div",
7845
+ FitText,
7710
7846
  {
7711
- style: {
7712
- fontSize: "15px",
7713
- fontWeight: 700,
7714
- color: difference === 0 ? MATCH_GREEN : DIFF_RED,
7715
- fontVariantNumeric: "tabular-nums",
7716
- letterSpacing: "-0.01em"
7717
- },
7847
+ max: 15,
7848
+ min: 11,
7849
+ title: fmt6(difference, p.currency),
7850
+ style: { fontWeight: 700, color: difference === 0 ? MATCH_GREEN : DIFF_RED, fontVariantNumeric: "tabular-nums", letterSpacing: "-0.01em" },
7718
7851
  children: fmt6(difference, p.currency)
7719
7852
  }
7720
7853
  )
@@ -8231,10 +8364,10 @@ function useFullscreen(ref) {
8231
8364
  // src/composites/document-preview/resolver.tsx
8232
8365
  init_theme();
8233
8366
  init_ThemeContext();
8234
- var PdfViewer2 = React33.lazy(
8367
+ var PdfViewer2 = React41.lazy(
8235
8368
  () => Promise.resolve().then(() => (init_PdfViewer(), PdfViewer_exports)).then((m) => ({ default: m.PdfViewer }))
8236
8369
  );
8237
- var ExcelViewer2 = React33.lazy(
8370
+ var ExcelViewer2 = React41.lazy(
8238
8371
  () => Promise.resolve().then(() => (init_ExcelViewer(), ExcelViewer_exports)).then((m) => ({ default: m.ExcelViewer }))
8239
8372
  );
8240
8373
  var highlightColors = {
@@ -9190,7 +9323,7 @@ function EngagementPipelineResolver(p) {
9190
9323
  const color = (_a2 = statusColor2[phase.status]) != null ? _a2 : "#d6d3d1";
9191
9324
  const isCurrent = i === activeIdx;
9192
9325
  const size = isCurrent ? 28 : 20;
9193
- return /* @__PURE__ */ jsxs(React33.Fragment, { children: [
9326
+ return /* @__PURE__ */ jsxs(React41.Fragment, { children: [
9194
9327
  i > 0 && /* @__PURE__ */ jsx(
9195
9328
  "div",
9196
9329
  {
@@ -9518,7 +9651,7 @@ function EntityCardGridResolver(p) {
9518
9651
  {
9519
9652
  style: {
9520
9653
  display: "grid",
9521
- gridTemplateColumns: `repeat(auto-fit, minmax(220px, 1fr))`,
9654
+ gridTemplateColumns: `repeat(auto-fit, minmax(min(220px, 100%), 1fr))`,
9522
9655
  gap: "12px",
9523
9656
  width: "100%"
9524
9657
  },
@@ -9609,7 +9742,7 @@ function EntityCardGridResolver(p) {
9609
9742
  {
9610
9743
  style: {
9611
9744
  display: "grid",
9612
- gridTemplateColumns: item.fields.length > 2 ? "repeat(auto-fit, minmax(90px, 1fr))" : "1fr",
9745
+ gridTemplateColumns: item.fields.length > 2 ? "repeat(auto-fit, minmax(min(90px, 100%), 1fr))" : "1fr",
9613
9746
  gap: "6px 12px",
9614
9747
  borderTop: `1px solid ${BORDER4}`,
9615
9748
  paddingTop: "8px"
@@ -11353,7 +11486,7 @@ function FileCard({
11353
11486
  whiteSpace: "nowrap"
11354
11487
  },
11355
11488
  children: [
11356
- metaTokens.map((t, i) => /* @__PURE__ */ jsxs(React33.Fragment, { children: [
11489
+ metaTokens.map((t, i) => /* @__PURE__ */ jsxs(React41.Fragment, { children: [
11357
11490
  i > 0 && /* @__PURE__ */ jsx("span", { style: { color: "#c4c4c4" }, children: "\xB7" }),
11358
11491
  /* @__PURE__ */ jsx("span", { children: t })
11359
11492
  ] }, i)),
@@ -11837,9 +11970,9 @@ function ValueCell({ item }) {
11837
11970
  )
11838
11971
  ] });
11839
11972
  case "currency":
11840
- return /* @__PURE__ */ jsx("span", { style: { fontSize: "13px", fontWeight: 600, fontVariantNumeric: "tabular-nums", marginLeft: "auto" }, children: item.value });
11973
+ return /* @__PURE__ */ jsx("span", { title: item.value, style: __spreadValues({ fontSize: "13px", fontWeight: 600, fontVariantNumeric: "tabular-nums", marginLeft: "auto" }, TRUNCATE), children: item.value });
11841
11974
  default:
11842
- return /* @__PURE__ */ jsx("span", { style: { fontSize: "13px", color: "var(--foreground)" }, children: /* @__PURE__ */ jsx(Markdown, { inline: true, content: item.value }) });
11975
+ return /* @__PURE__ */ jsx("span", { style: { fontSize: "13px", color: "var(--foreground)", minWidth: 0, overflowWrap: "anywhere" }, children: /* @__PURE__ */ jsx(Markdown, { inline: true, content: item.value }) });
11843
11976
  }
11844
11977
  }
11845
11978
  function KVRow({ item, isLast, index }) {
@@ -11872,7 +12005,7 @@ function KVRow({ item, isLast, index }) {
11872
12005
  children: item.key
11873
12006
  }
11874
12007
  ),
11875
- /* @__PURE__ */ jsx("span", { style: { flex: 1, display: "flex", alignItems: "center", gap: "6px" }, children: /* @__PURE__ */ jsx(ValueCell, { item }) }),
12008
+ /* @__PURE__ */ jsx("span", { style: { flex: 1, minWidth: 0, display: "flex", alignItems: "center", gap: "6px" }, children: /* @__PURE__ */ jsx(ValueCell, { item }) }),
11876
12009
  item.copyable && /* @__PURE__ */ jsx(CopyButton, { value: item.value, rowHovered: hovered })
11877
12010
  ]
11878
12011
  }
@@ -11928,7 +12061,7 @@ function KeyValueListResolver(p) {
11928
12061
  var _a3;
11929
12062
  return sum + ((_a3 = g.items) != null ? _a3 : []).length;
11930
12063
  }, 0);
11931
- return /* @__PURE__ */ jsxs(React33.Fragment, { children: [
12064
+ return /* @__PURE__ */ jsxs(React41.Fragment, { children: [
11932
12065
  /* @__PURE__ */ jsxs(
11933
12066
  "div",
11934
12067
  {
@@ -12064,7 +12197,7 @@ function BalanceSheetResolver(p) {
12064
12197
  color: balanced ? "#15803d" : "#dc2626"
12065
12198
  }, children: balanced ? "\u2713 A = L + E" : "\u2717 Out of Balance" })
12066
12199
  ] }),
12067
- /* @__PURE__ */ jsx("div", { style: { overflowX: "auto", borderRadius: "0.75rem", border: `1px solid ${BORDER4}`, boxShadow: "0 1px 2px rgba(0,0,0,0.03), 0 4px 12px rgba(0,0,0,0.04)" }, children: /* @__PURE__ */ jsxs("table", { style: { width: "100%", borderCollapse: "collapse", minWidth: "380px" }, children: [
12200
+ /* @__PURE__ */ jsx("div", { style: { overflowX: "auto", minWidth: 0, borderRadius: "0.75rem", border: `1px solid ${BORDER4}`, boxShadow: "0 1px 2px rgba(0,0,0,0.03), 0 4px 12px rgba(0,0,0,0.04)" }, children: /* @__PURE__ */ jsxs("table", { style: { width: "100%", borderCollapse: "collapse", minWidth: "380px" }, children: [
12068
12201
  /* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsxs("tr", { children: [
12069
12202
  /* @__PURE__ */ jsx("th", { style: {
12070
12203
  fontSize: "11px",
@@ -12106,7 +12239,7 @@ function BalanceSheetResolver(p) {
12106
12239
  /* @__PURE__ */ jsxs("tbody", { children: [
12107
12240
  ((_p = p.sections) != null ? _p : []).map((section) => {
12108
12241
  var _a2;
12109
- return /* @__PURE__ */ jsxs(React33.Fragment, { children: [
12242
+ return /* @__PURE__ */ jsxs(React41.Fragment, { children: [
12110
12243
  /* @__PURE__ */ jsx("tr", { children: /* @__PURE__ */ jsx("td", { colSpan, style: {
12111
12244
  padding: "8px 12px",
12112
12245
  fontSize: "12px",
@@ -12119,7 +12252,7 @@ function BalanceSheetResolver(p) {
12119
12252
  }, children: (_a2 = categoryLabels2[section.category]) != null ? _a2 : section.category }) }),
12120
12253
  section.subsections.map((sub, si) => {
12121
12254
  var _a3;
12122
- return /* @__PURE__ */ jsxs(React33.Fragment, { children: [
12255
+ return /* @__PURE__ */ jsxs(React41.Fragment, { children: [
12123
12256
  /* @__PURE__ */ jsx("tr", { children: /* @__PURE__ */ jsx("td", { colSpan, style: {
12124
12257
  padding: "6px 10px 6px 24px",
12125
12258
  fontSize: "12px",
@@ -12281,7 +12414,7 @@ function IncomeStatementResolver(p) {
12281
12414
  ].filter(Boolean).join(" \xB7 ") })
12282
12415
  ] }),
12283
12416
  p.title && /* @__PURE__ */ jsx("p", { style: { fontFamily: "var(--font-serif)", fontSize: "15px", fontWeight: 400, color: "var(--foreground)", letterSpacing: "-0.01em", margin: 0 }, children: p.title }),
12284
- /* @__PURE__ */ jsx("div", { style: { overflowX: "auto", borderRadius: "0.75rem", border: `1px solid ${BORDER4}`, boxShadow: "0 1px 2px rgba(0,0,0,0.03), 0 4px 12px rgba(0,0,0,0.05)" }, children: /* @__PURE__ */ jsxs("table", { style: { width: "100%", borderCollapse: "collapse", minWidth: "380px" }, children: [
12417
+ /* @__PURE__ */ jsx("div", { style: { overflowX: "auto", minWidth: 0, borderRadius: "0.75rem", border: `1px solid ${BORDER4}`, boxShadow: "0 1px 2px rgba(0,0,0,0.03), 0 4px 12px rgba(0,0,0,0.05)" }, children: /* @__PURE__ */ jsxs("table", { style: { width: "100%", borderCollapse: "collapse", minWidth: "380px" }, children: [
12285
12418
  /* @__PURE__ */ jsx("thead", { children: /* @__PURE__ */ jsxs("tr", { children: [
12286
12419
  /* @__PURE__ */ jsx("th", { style: {
12287
12420
  fontSize: "11px",
@@ -12295,7 +12428,7 @@ function IncomeStatementResolver(p) {
12295
12428
  textAlign: "left",
12296
12429
  whiteSpace: "nowrap"
12297
12430
  }, children: "\xA0" }),
12298
- periods.map((period) => /* @__PURE__ */ jsxs(React33.Fragment, { children: [
12431
+ periods.map((period) => /* @__PURE__ */ jsxs(React41.Fragment, { children: [
12299
12432
  /* @__PURE__ */ jsx("th", { style: {
12300
12433
  fontSize: "11px",
12301
12434
  fontWeight: 500,
@@ -12326,7 +12459,7 @@ function IncomeStatementResolver(p) {
12326
12459
  sections.map((section, si) => {
12327
12460
  var _a2;
12328
12461
  const isSubtotal = section.sectionType === "subtotal";
12329
- return /* @__PURE__ */ jsxs(React33.Fragment, { children: [
12462
+ return /* @__PURE__ */ jsxs(React41.Fragment, { children: [
12330
12463
  /* @__PURE__ */ jsx("tr", { children: /* @__PURE__ */ jsx("td", { colSpan: colCount, style: {
12331
12464
  padding: "8px 12px",
12332
12465
  fontSize: "12px",
@@ -12357,7 +12490,7 @@ function IncomeStatementResolver(p) {
12357
12490
  var _a4;
12358
12491
  const val = (_a4 = amounts[pi]) != null ? _a4 : 0;
12359
12492
  const isNeg = val < 0;
12360
- return /* @__PURE__ */ jsxs(React33.Fragment, { children: [
12493
+ return /* @__PURE__ */ jsxs(React41.Fragment, { children: [
12361
12494
  /* @__PURE__ */ jsx("td", { style: {
12362
12495
  padding: "6px 10px",
12363
12496
  fontSize: "13px",
@@ -12392,7 +12525,7 @@ function IncomeStatementResolver(p) {
12392
12525
  var _a2;
12393
12526
  const val = (_a2 = grossProfit[pi]) != null ? _a2 : 0;
12394
12527
  const isNeg = val < 0;
12395
- return /* @__PURE__ */ jsxs(React33.Fragment, { children: [
12528
+ return /* @__PURE__ */ jsxs(React41.Fragment, { children: [
12396
12529
  /* @__PURE__ */ jsx("td", { style: {
12397
12530
  padding: "8px 10px",
12398
12531
  fontSize: "12px",
@@ -12427,7 +12560,7 @@ function IncomeStatementResolver(p) {
12427
12560
  var _a2;
12428
12561
  const val = (_a2 = operatingIncome[pi]) != null ? _a2 : 0;
12429
12562
  const isNeg = val < 0;
12430
- return /* @__PURE__ */ jsxs(React33.Fragment, { children: [
12563
+ return /* @__PURE__ */ jsxs(React41.Fragment, { children: [
12431
12564
  /* @__PURE__ */ jsx("td", { style: {
12432
12565
  padding: "8px 10px",
12433
12566
  fontSize: "12px",
@@ -12461,7 +12594,7 @@ function IncomeStatementResolver(p) {
12461
12594
  var _a2;
12462
12595
  const val = (_a2 = netIncome[pi]) != null ? _a2 : 0;
12463
12596
  const isNeg = val < 0;
12464
- return /* @__PURE__ */ jsxs(React33.Fragment, { children: [
12597
+ return /* @__PURE__ */ jsxs(React41.Fragment, { children: [
12465
12598
  /* @__PURE__ */ jsx("td", { style: {
12466
12599
  padding: "10px 10px",
12467
12600
  fontSize: "13px",
@@ -12681,7 +12814,7 @@ function CashFlowStatementResolver(p) {
12681
12814
  /* @__PURE__ */ jsxs("tbody", { children: [
12682
12815
  activities.map((activity, ai) => {
12683
12816
  var _a2, _b2, _c2;
12684
- return /* @__PURE__ */ jsxs(React33.Fragment, { children: [
12817
+ return /* @__PURE__ */ jsxs(React41.Fragment, { children: [
12685
12818
  ai > 0 && /* @__PURE__ */ jsx("tr", { children: /* @__PURE__ */ jsx(
12686
12819
  "td",
12687
12820
  {
@@ -13064,6 +13197,7 @@ function GeneralLedgerResolver(p) {
13064
13197
  {
13065
13198
  style: {
13066
13199
  overflowX: "auto",
13200
+ minWidth: 0,
13067
13201
  borderRadius: "0.75rem",
13068
13202
  border: `1px solid ${BORDER4}`,
13069
13203
  boxShadow: "0 1px 2px rgba(0,0,0,0.03), 0 4px 12px rgba(0,0,0,0.04)"
@@ -16978,6 +17112,728 @@ function PipelinePreviewResolver(p) {
16978
17112
  )
16979
17113
  ] }) });
16980
17114
  }
17115
+ init_ThemeContext();
17116
+ var DEFAULT_INTERACTION = {
17117
+ selectedStepId: null,
17118
+ onStepSelect: void 0
17119
+ };
17120
+ var GenUIInteractionContext = createContext(DEFAULT_INTERACTION);
17121
+ function useGenUIInteraction() {
17122
+ return useContext(GenUIInteractionContext);
17123
+ }
17124
+ var STATUS_COLORS3 = {
17125
+ done: "#15803d",
17126
+ active: "",
17127
+ // filled from theme ACCENT at render time
17128
+ review: "#f59e0b",
17129
+ pending: "#9ca3af",
17130
+ blocked: "#b45309",
17131
+ failed: "#dc2626"
17132
+ };
17133
+ var STATUS_LABELS = {
17134
+ done: "Complete",
17135
+ active: "In progress",
17136
+ review: "In review",
17137
+ pending: "Pending",
17138
+ blocked: "Blocked",
17139
+ failed: "Failed"
17140
+ };
17141
+ var HUMAN_PALETTE = ["#2563eb", "#0f766e", "#7c3aed", "#b45309", "#be185d", "#4d7c0f"];
17142
+ function hashColor(name) {
17143
+ let h = 0;
17144
+ for (let i = 0; i < name.length; i++) h = h * 31 + name.charCodeAt(i) | 0;
17145
+ return HUMAN_PALETTE[Math.abs(h) % HUMAN_PALETTE.length];
17146
+ }
17147
+ function initialsOf(a) {
17148
+ var _a, _b, _c, _d;
17149
+ if (a.initials) return a.initials.slice(0, 2).toUpperCase();
17150
+ const parts = a.name.trim().split(/\s+/);
17151
+ return (((_b = (_a = parts[0]) == null ? void 0 : _a[0]) != null ? _b : "") + ((_d = (_c = parts[1]) == null ? void 0 : _c[0]) != null ? _d : "")).toUpperCase() || "?";
17152
+ }
17153
+ function SparkMark({ size, color }) {
17154
+ return /* @__PURE__ */ jsx("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsx(
17155
+ "path",
17156
+ {
17157
+ d: "M12 2C12 2 12.8 6.5 14.5 9.5C16.2 12.5 20 13 20 13C20 13 16.2 13.5 14.5 16.5C12.8 19.5 12 24 12 24C12 24 11.2 19.5 9.5 16.5C7.8 13.5 4 13 4 13C4 13 7.8 12.5 9.5 9.5C11.2 6.5 12 2 12 2Z",
17158
+ fill: color
17159
+ }
17160
+ ) });
17161
+ }
17162
+ function AvatarStack({ assignees, accent }) {
17163
+ const shown = assignees.slice(0, 4);
17164
+ const overflow = assignees.length - shown.length;
17165
+ return /* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "center" }, children: [
17166
+ shown.map((a, i) => {
17167
+ const isAgent = a.kind === "agent";
17168
+ const bg = isAgent ? `${accent}1f` : a.color || hashColor(a.name);
17169
+ return /* @__PURE__ */ jsx(
17170
+ "div",
17171
+ {
17172
+ title: `${a.name}${a.role ? ` \xB7 ${a.role}` : isAgent ? " \xB7 agent" : ""}`,
17173
+ style: {
17174
+ width: 20,
17175
+ height: 20,
17176
+ borderRadius: "50%",
17177
+ flexShrink: 0,
17178
+ marginLeft: i === 0 ? 0 : -7,
17179
+ zIndex: shown.length - i,
17180
+ display: "flex",
17181
+ alignItems: "center",
17182
+ justifyContent: "center",
17183
+ background: bg,
17184
+ border: "1.5px solid white",
17185
+ boxShadow: isAgent ? `inset 0 0 0 1px ${accent}59` : "none"
17186
+ },
17187
+ children: isAgent ? /* @__PURE__ */ jsx(SparkMark, { size: 11, color: accent }) : /* @__PURE__ */ jsx("span", { style: { fontSize: 8, fontWeight: 700, color: "white", letterSpacing: "0.02em" }, children: initialsOf(a) })
17188
+ },
17189
+ `${a.name}-${i}`
17190
+ );
17191
+ }),
17192
+ overflow > 0 && /* @__PURE__ */ jsxs(
17193
+ "span",
17194
+ {
17195
+ style: {
17196
+ marginLeft: -7,
17197
+ zIndex: 0,
17198
+ width: 20,
17199
+ height: 20,
17200
+ borderRadius: "50%",
17201
+ background: "#f2f2f2",
17202
+ border: "1.5px solid white",
17203
+ display: "flex",
17204
+ alignItems: "center",
17205
+ justifyContent: "center",
17206
+ fontSize: 8,
17207
+ fontWeight: 700,
17208
+ color: "#777777"
17209
+ },
17210
+ children: [
17211
+ "+",
17212
+ overflow
17213
+ ]
17214
+ }
17215
+ )
17216
+ ] });
17217
+ }
17218
+ function IndexDot({ step, index, accent }) {
17219
+ var _a;
17220
+ const n = (_a = step.n) != null ? _a : index + 1;
17221
+ const base = {
17222
+ width: 18,
17223
+ height: 18,
17224
+ borderRadius: "50%",
17225
+ flexShrink: 0,
17226
+ display: "flex",
17227
+ alignItems: "center",
17228
+ justifyContent: "center",
17229
+ fontSize: 10,
17230
+ fontWeight: 700,
17231
+ lineHeight: 1
17232
+ };
17233
+ if (step.status === "done") {
17234
+ return /* @__PURE__ */ jsx("div", { style: __spreadProps(__spreadValues({}, base), { background: "#15803d", color: "white" }), children: /* @__PURE__ */ jsx("span", { style: { fontSize: 10 }, children: "\u2713" }) });
17235
+ }
17236
+ if (step.status === "failed") {
17237
+ return /* @__PURE__ */ jsx("div", { style: __spreadProps(__spreadValues({}, base), { background: "#dc2626", color: "white" }), children: /* @__PURE__ */ jsx("span", { style: { fontSize: 10 }, children: "!" }) });
17238
+ }
17239
+ if (step.status === "active") {
17240
+ return /* @__PURE__ */ jsx("div", { style: __spreadProps(__spreadValues({}, base), { background: accent, color: "white" }), children: n });
17241
+ }
17242
+ if (step.status === "review") {
17243
+ return /* @__PURE__ */ jsx("div", { style: __spreadProps(__spreadValues({}, base), { background: "white", border: "1.5px solid #f59e0b", color: "#b45309" }), children: n });
17244
+ }
17245
+ return /* @__PURE__ */ jsx("div", { style: __spreadProps(__spreadValues({}, base), { background: "#f2f2f2", color: "#9ca3af" }), children: n });
17246
+ }
17247
+ var CARD_MIN = 132;
17248
+ var CARD_GAP = 16;
17249
+ var AUTO_COMPACT_BELOW = 360;
17250
+ function useContainerWidth(ref) {
17251
+ const [w, setW] = React41.useState(0);
17252
+ React41.useLayoutEffect(() => {
17253
+ const el = ref.current;
17254
+ if (!el || typeof ResizeObserver === "undefined") return;
17255
+ const ro = new ResizeObserver((entries) => {
17256
+ var _a;
17257
+ const cr = (_a = entries[0]) == null ? void 0 : _a.contentRect;
17258
+ if (cr) setW(cr.width);
17259
+ });
17260
+ ro.observe(el);
17261
+ setW(el.getBoundingClientRect().width);
17262
+ return () => ro.disconnect();
17263
+ }, [ref]);
17264
+ return w;
17265
+ }
17266
+ var KEYFRAMES = `
17267
+ @keyframes wfsPulse{0%,100%{opacity:1}50%{opacity:.35}}
17268
+ @keyframes wfsLampPulse{0%,100%{box-shadow:0 0 0 0 var(--wfs-accent,#6366f1)73}50%{box-shadow:0 0 0 4px transparent}}
17269
+ @keyframes wfsRise{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
17270
+ @keyframes wfsShimmer{0%{background-position:-200px 0}100%{background-position:calc(200px + 100%) 0}}
17271
+ .wfs-rise{animation:wfsRise 0.32s cubic-bezier(0.22,1,0.36,1) both}
17272
+ @media (prefers-reduced-motion: reduce){
17273
+ .wfs-anim,.wfs-rise,.wfs-shim{animation:none !important}
17274
+ .wfs-rise{opacity:1 !important;transform:none !important}
17275
+ }`;
17276
+ function ProgressMeter({
17277
+ done,
17278
+ total,
17279
+ accent,
17280
+ muted,
17281
+ loading
17282
+ }) {
17283
+ const pct = total > 0 ? Math.round(done / total * 100) : 0;
17284
+ return /* @__PURE__ */ jsxs(
17285
+ "div",
17286
+ {
17287
+ "data-testid": "workflow-stepper-progress",
17288
+ style: { display: "flex", alignItems: "center", gap: 8, padding: "0 2px 6px" },
17289
+ children: [
17290
+ /* @__PURE__ */ jsx(
17291
+ "span",
17292
+ {
17293
+ style: {
17294
+ fontSize: 10.5,
17295
+ fontWeight: 600,
17296
+ color: muted,
17297
+ fontVariantNumeric: "tabular-nums",
17298
+ letterSpacing: "0.01em",
17299
+ whiteSpace: "nowrap"
17300
+ },
17301
+ children: loading ? "\u2014" : `${done} / ${total} \xB7 ${pct}%`
17302
+ }
17303
+ ),
17304
+ /* @__PURE__ */ jsx(
17305
+ "span",
17306
+ {
17307
+ style: {
17308
+ flex: 1,
17309
+ height: 3,
17310
+ borderRadius: 3,
17311
+ background: "#eceff4",
17312
+ overflow: "hidden",
17313
+ minWidth: 40
17314
+ },
17315
+ children: /* @__PURE__ */ jsx(
17316
+ "span",
17317
+ {
17318
+ className: loading ? "wfs-shim" : void 0,
17319
+ style: {
17320
+ display: "block",
17321
+ height: "100%",
17322
+ width: loading ? "100%" : `${pct}%`,
17323
+ borderRadius: 3,
17324
+ background: loading ? `linear-gradient(90deg, #eceff4, ${accent}55, #eceff4)` : accent,
17325
+ backgroundSize: loading ? "200px 100%" : void 0,
17326
+ animation: loading ? "wfsShimmer 1.1s linear infinite" : void 0,
17327
+ transition: "width 0.45s cubic-bezier(0.22,1,0.36,1)"
17328
+ }
17329
+ }
17330
+ )
17331
+ }
17332
+ )
17333
+ ]
17334
+ }
17335
+ );
17336
+ }
17337
+ function WorkflowStepperRenderer({
17338
+ data,
17339
+ selectedStep = null,
17340
+ onSelectStep,
17341
+ density = "auto",
17342
+ loading = false,
17343
+ loadingSteps = 6,
17344
+ showProgress = true
17345
+ }) {
17346
+ var _a, _b, _c, _d, _e, _f;
17347
+ const { BORDER: BORDER4, MUTED: MUTED2, ACCENT: ACCENT2 } = useTheme();
17348
+ const steps = (_a = data.steps) != null ? _a : [];
17349
+ const activeStepId = (_d = (_c = data.active_step) != null ? _c : (_b = steps.find((s) => s.status === "active")) == null ? void 0 : _b.id) != null ? _d : null;
17350
+ const interactive = typeof onSelectStep === "function";
17351
+ const statusColor3 = (s) => s === "active" ? ACCENT2 : STATUS_COLORS3[s];
17352
+ const doneCount = steps.filter((s) => s.status === "done").length;
17353
+ const rootRef = React41.useRef(null);
17354
+ const containerW = useContainerWidth(rootRef);
17355
+ let resolved = density === "auto" ? "full" : density;
17356
+ if (density === "auto" && containerW > 0) {
17357
+ const needed = steps.length * CARD_MIN + Math.max(0, steps.length - 1) * CARD_GAP;
17358
+ resolved = containerW < AUTO_COMPACT_BELOW || needed > containerW * 1.6 ? "compact" : "full";
17359
+ }
17360
+ const scrollerRef = React41.useRef(null);
17361
+ React41.useEffect(() => {
17362
+ if (resolved !== "full" || loading) return;
17363
+ const sc = scrollerRef.current;
17364
+ if (!sc) return;
17365
+ const el = sc.querySelector(
17366
+ `[data-testid="workflow-stepper-step-${selectedStep != null ? selectedStep : activeStepId}"]`
17367
+ );
17368
+ if (el && sc.scrollWidth > sc.clientWidth) {
17369
+ el.scrollIntoView({ inline: "center", block: "nearest", behavior: "smooth" });
17370
+ }
17371
+ }, [resolved, loading, selectedStep, activeStepId]);
17372
+ const [edges, setEdges] = React41.useState({
17373
+ left: false,
17374
+ right: false
17375
+ });
17376
+ const updateEdges = React41.useCallback(() => {
17377
+ const sc = scrollerRef.current;
17378
+ if (!sc) return;
17379
+ const max = sc.scrollWidth - sc.clientWidth;
17380
+ const sl = sc.scrollLeft;
17381
+ const left = sl > 1;
17382
+ const right = sl < max - 1;
17383
+ setEdges((prev) => prev.left === left && prev.right === right ? prev : { left, right });
17384
+ }, []);
17385
+ React41.useLayoutEffect(() => {
17386
+ if (resolved !== "full" || loading) return;
17387
+ updateEdges();
17388
+ const sc = scrollerRef.current;
17389
+ if (!sc || typeof ResizeObserver === "undefined") return;
17390
+ const ro = new ResizeObserver(updateEdges);
17391
+ ro.observe(sc);
17392
+ return () => ro.disconnect();
17393
+ }, [resolved, loading, steps.length, updateEdges]);
17394
+ const edgeMask = edges.left || edges.right ? `linear-gradient(90deg, ${edges.left ? "transparent 0, #000 14px" : "#000 0"}, ${edges.right ? "#000 calc(100% - 14px), transparent 100%" : "#000 100%"})` : void 0;
17395
+ const themeStyle = { ["--wfs-accent"]: ACCENT2 };
17396
+ if (loading) {
17397
+ const ghosts = Array.from({ length: Math.max(2, loadingSteps) });
17398
+ return /* @__PURE__ */ jsxs("div", { "data-testid": "workflow-stepper-loading", style: __spreadValues({ width: "100%", minWidth: 0 }, themeStyle), children: [
17399
+ /* @__PURE__ */ jsx("style", { children: KEYFRAMES }),
17400
+ showProgress && /* @__PURE__ */ jsx(ProgressMeter, { done: 0, total: 0, accent: ACCENT2, muted: MUTED2, loading: true }),
17401
+ /* @__PURE__ */ jsx("div", { style: { display: "flex", alignItems: "stretch", gap: CARD_GAP, padding: "2px 2px 6px", overflow: "hidden" }, children: ghosts.map((_, i) => /* @__PURE__ */ jsx(
17402
+ "div",
17403
+ {
17404
+ className: "wfs-shim",
17405
+ "aria-hidden": "true",
17406
+ style: {
17407
+ flex: "0 1 168px",
17408
+ minWidth: CARD_MIN,
17409
+ height: 84,
17410
+ borderRadius: 10,
17411
+ border: `1px solid ${BORDER4}`,
17412
+ background: `linear-gradient(90deg, #f4f6f9, #eceff4 40%, #f4f6f9 80%)`,
17413
+ backgroundSize: "200px 100%",
17414
+ animation: "wfsShimmer 1.1s linear infinite",
17415
+ animationDelay: `${i * 0.08}s`
17416
+ }
17417
+ },
17418
+ i
17419
+ )) })
17420
+ ] });
17421
+ }
17422
+ if (resolved === "compact") {
17423
+ const activeStep = (_e = steps.find((s) => s.id === activeStepId)) != null ? _e : null;
17424
+ return /* @__PURE__ */ jsxs(
17425
+ "div",
17426
+ {
17427
+ ref: rootRef,
17428
+ "data-testid": "workflow-stepper-compact",
17429
+ style: __spreadValues({ width: "100%", minWidth: 0 }, themeStyle),
17430
+ children: [
17431
+ /* @__PURE__ */ jsx("style", { children: KEYFRAMES }),
17432
+ showProgress && /* @__PURE__ */ jsx(ProgressMeter, { done: doneCount, total: steps.length, accent: ACCENT2, muted: MUTED2 }),
17433
+ /* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "center", gap: 12, minWidth: 0 }, children: [
17434
+ /* @__PURE__ */ jsx("div", { style: { display: "flex", alignItems: "center", flexShrink: 0 }, children: steps.map((s, i) => {
17435
+ const sel = selectedStep === s.id;
17436
+ const act = s.status === "active";
17437
+ const done = s.status === "done";
17438
+ const reached = s.status !== "pending";
17439
+ const clickable = interactive && reached;
17440
+ const size = act ? 11 : done ? 9 : 8;
17441
+ return /* @__PURE__ */ jsxs(React41.Fragment, { children: [
17442
+ i > 0 && /* @__PURE__ */ jsx(
17443
+ "span",
17444
+ {
17445
+ "aria-hidden": "true",
17446
+ style: {
17447
+ width: 14,
17448
+ height: 1.5,
17449
+ borderRadius: 1,
17450
+ background: steps[i - 1].status === "done" ? "#15803d" : "#e5e7eb",
17451
+ transition: "background 0.36s ease-out"
17452
+ }
17453
+ }
17454
+ ),
17455
+ /* @__PURE__ */ jsx(
17456
+ "button",
17457
+ {
17458
+ type: "button",
17459
+ disabled: interactive && !reached,
17460
+ "aria-disabled": interactive && !reached ? true : void 0,
17461
+ title: `${s.title} \xB7 ${STATUS_LABELS[s.status]}`,
17462
+ onClick: clickable ? () => onSelectStep == null ? void 0 : onSelectStep(sel ? null : s.id) : void 0,
17463
+ "data-testid": `workflow-stepper-step-${s.id}`,
17464
+ "data-status": s.status,
17465
+ "data-reached": reached || void 0,
17466
+ className: act ? "wfs-anim" : void 0,
17467
+ style: {
17468
+ position: "relative",
17469
+ width: size,
17470
+ height: size,
17471
+ padding: 0,
17472
+ borderRadius: "50%",
17473
+ background: statusColor3(s.status),
17474
+ flexShrink: 0,
17475
+ // border-box so the selected 2px border can't grow the dot
17476
+ // and reflow the rail.
17477
+ boxSizing: "border-box",
17478
+ opacity: reached ? 1 : 0.55,
17479
+ border: sel ? `2px solid ${ACCENT2}` : done ? "none" : "1px solid rgba(255,255,255,0.6)",
17480
+ boxShadow: sel ? "0 0 0 2px #fff" : "none",
17481
+ cursor: clickable ? "pointer" : "default",
17482
+ transition: "width 0.15s, height 0.15s",
17483
+ animation: act ? "wfsLampPulse 1.8s ease-in-out infinite" : "none"
17484
+ }
17485
+ }
17486
+ )
17487
+ ] }, s.id);
17488
+ }) }),
17489
+ activeStep && /* @__PURE__ */ jsxs(Fragment, { children: [
17490
+ /* @__PURE__ */ jsx("span", { "aria-hidden": "true", style: { width: 1, height: 16, background: "#e6eaf1", flexShrink: 0 } }),
17491
+ /* @__PURE__ */ jsxs("span", { style: { display: "flex", alignItems: "center", gap: 7, minWidth: 0 }, children: [
17492
+ /* @__PURE__ */ jsx(
17493
+ "span",
17494
+ {
17495
+ "aria-hidden": "true",
17496
+ style: {
17497
+ width: 17,
17498
+ height: 17,
17499
+ borderRadius: "50%",
17500
+ flexShrink: 0,
17501
+ display: "flex",
17502
+ alignItems: "center",
17503
+ justifyContent: "center",
17504
+ fontSize: 9.5,
17505
+ fontWeight: 700,
17506
+ lineHeight: 1,
17507
+ background: activeStep.status === "done" ? "#15803d" : activeStep.status === "review" ? "#fff" : activeStep.status === "failed" ? "#dc2626" : ACCENT2,
17508
+ color: activeStep.status === "review" ? "#b45309" : "#fff",
17509
+ border: activeStep.status === "review" ? "1.5px solid #f59e0b" : "none"
17510
+ },
17511
+ children: activeStep.status === "done" ? "\u2713" : activeStep.status === "failed" ? "!" : (_f = activeStep.n) != null ? _f : steps.findIndex((x) => x.id === activeStep.id) + 1
17512
+ }
17513
+ ),
17514
+ /* @__PURE__ */ jsxs(
17515
+ "span",
17516
+ {
17517
+ style: {
17518
+ fontSize: 12.5,
17519
+ fontWeight: 650,
17520
+ color: "var(--foreground)",
17521
+ letterSpacing: "-0.01em",
17522
+ whiteSpace: "nowrap",
17523
+ overflow: "hidden",
17524
+ textOverflow: "ellipsis",
17525
+ minWidth: 0
17526
+ },
17527
+ children: [
17528
+ activeStep.title,
17529
+ activeStep.sub ? /* @__PURE__ */ jsxs("span", { style: { fontWeight: 400, color: MUTED2 }, children: [
17530
+ " \xB7 ",
17531
+ activeStep.sub
17532
+ ] }) : null
17533
+ ]
17534
+ }
17535
+ )
17536
+ ] })
17537
+ ] })
17538
+ ] })
17539
+ ]
17540
+ }
17541
+ );
17542
+ }
17543
+ return /* @__PURE__ */ jsxs("div", { ref: rootRef, "data-testid": "workflow-stepper", style: __spreadValues({ width: "100%", minWidth: 0 }, themeStyle), children: [
17544
+ /* @__PURE__ */ jsx("style", { children: KEYFRAMES }),
17545
+ showProgress && /* @__PURE__ */ jsx(ProgressMeter, { done: doneCount, total: steps.length, accent: ACCENT2, muted: MUTED2 }),
17546
+ /* @__PURE__ */ jsxs(
17547
+ "div",
17548
+ {
17549
+ ref: scrollerRef,
17550
+ className: "wfs-scroller",
17551
+ onScroll: updateEdges,
17552
+ style: {
17553
+ display: "flex",
17554
+ alignItems: "stretch",
17555
+ overflowX: "auto",
17556
+ scrollSnapType: "x proximity",
17557
+ padding: "2px 2px 4px",
17558
+ // Thin, always-styled scrollbar (Firefox + Windows/desktop WebKit
17559
+ // where overlay scrollbars aren't available). macOS/mobile show
17560
+ // overlay scrollbars on scroll; harmless either way.
17561
+ scrollbarWidth: "thin",
17562
+ scrollbarColor: "#c2c9d6 transparent",
17563
+ // Edge fade ONLY on the side(s) with hidden content — never when the
17564
+ // row isn't scrollable, so the last card's right edge stays crisp.
17565
+ maskImage: edgeMask,
17566
+ WebkitMaskImage: edgeMask
17567
+ },
17568
+ children: [
17569
+ /* @__PURE__ */ jsx("style", { children: `
17570
+ .wfs-scroller::-webkit-scrollbar{height:8px}
17571
+ .wfs-scroller::-webkit-scrollbar-track{background:transparent}
17572
+ .wfs-scroller::-webkit-scrollbar-thumb{background:#c2c9d6;border-radius:8px;border:2px solid transparent;background-clip:padding-box}
17573
+ .wfs-scroller:hover::-webkit-scrollbar-thumb{background:#aab2c2;background-clip:padding-box}
17574
+ ` }),
17575
+ steps.map((step, i) => {
17576
+ var _a2;
17577
+ const isSelected = selectedStep === step.id;
17578
+ const isActive = step.status === "active";
17579
+ const reached = step.status !== "pending";
17580
+ const clickable = interactive && reached;
17581
+ const color = statusColor3(step.status);
17582
+ const humans = ((_a2 = step.assignees) != null ? _a2 : []).filter((a) => a.kind === "human");
17583
+ const roleCaption = humans.map((h) => h.role).filter(Boolean).slice(0, 2).join(" \xB7 ");
17584
+ return /* @__PURE__ */ jsxs(React41.Fragment, { children: [
17585
+ i > 0 && /* @__PURE__ */ jsx(
17586
+ "div",
17587
+ {
17588
+ style: {
17589
+ width: CARD_GAP,
17590
+ flexShrink: 0,
17591
+ display: "flex",
17592
+ alignItems: "center"
17593
+ },
17594
+ "aria-hidden": "true",
17595
+ children: /* @__PURE__ */ jsx(
17596
+ "div",
17597
+ {
17598
+ style: {
17599
+ width: "100%",
17600
+ height: 1.5,
17601
+ borderRadius: 1,
17602
+ // Fill sweep: completed rails wash green left→right.
17603
+ background: steps[i - 1].status === "done" ? "linear-gradient(90deg, #15803d, #15803d)" : "#e5e7eb",
17604
+ backgroundSize: "100% 100%",
17605
+ transition: "background 0.36s ease-out"
17606
+ }
17607
+ }
17608
+ )
17609
+ }
17610
+ ),
17611
+ /* @__PURE__ */ jsxs(
17612
+ "div",
17613
+ {
17614
+ role: clickable ? "button" : void 0,
17615
+ tabIndex: clickable ? 0 : void 0,
17616
+ "aria-disabled": interactive && !reached ? true : void 0,
17617
+ className: "wfs-rise",
17618
+ "data-testid": `workflow-stepper-step-${step.id}`,
17619
+ "data-status": step.status,
17620
+ "data-selected": isSelected || void 0,
17621
+ "data-reached": reached || void 0,
17622
+ onClick: clickable ? () => onSelectStep == null ? void 0 : onSelectStep(isSelected ? null : step.id) : void 0,
17623
+ onKeyDown: clickable ? (e) => {
17624
+ if (e.key === "Enter" || e.key === " ") {
17625
+ e.preventDefault();
17626
+ onSelectStep == null ? void 0 : onSelectStep(isSelected ? null : step.id);
17627
+ }
17628
+ } : void 0,
17629
+ onMouseEnter: clickable ? (e) => {
17630
+ e.currentTarget.style.transform = "translateY(-1px)";
17631
+ e.currentTarget.style.boxShadow = "0 3px 10px rgba(15,23,42,0.08)";
17632
+ } : void 0,
17633
+ onMouseLeave: clickable ? (e) => {
17634
+ e.currentTarget.style.transform = "none";
17635
+ e.currentTarget.style.boxShadow = "0 1px 2px rgba(0,0,0,0.04)";
17636
+ } : void 0,
17637
+ style: {
17638
+ position: "relative",
17639
+ flex: "0 1 168px",
17640
+ minWidth: CARD_MIN,
17641
+ maxWidth: 208,
17642
+ scrollSnapAlign: "center",
17643
+ borderRadius: 10,
17644
+ boxSizing: "border-box",
17645
+ // Selection changes border COLOR only (constant 1px width) so
17646
+ // the card never reflows the row on click.
17647
+ border: `1px solid ${isSelected ? ACCENT2 : BORDER4}`,
17648
+ background: isSelected ? `${ACCENT2}0d` : "white",
17649
+ boxShadow: "0 1px 2px rgba(0,0,0,0.04)",
17650
+ padding: "10px 11px",
17651
+ display: "flex",
17652
+ flexDirection: "column",
17653
+ gap: 7,
17654
+ cursor: clickable ? "pointer" : "default",
17655
+ opacity: reached ? 1 : 0.62,
17656
+ transition: "border-color 0.15s, background 0.15s, transform 0.12s, box-shadow 0.12s",
17657
+ animationDelay: `${Math.min(i, 10) * 0.04}s`,
17658
+ overflow: "hidden"
17659
+ },
17660
+ children: [
17661
+ isActive && !isSelected && /* @__PURE__ */ jsx(
17662
+ "span",
17663
+ {
17664
+ style: {
17665
+ position: "absolute",
17666
+ left: 0,
17667
+ top: 6,
17668
+ bottom: 6,
17669
+ width: 2,
17670
+ borderRadius: 2,
17671
+ background: ACCENT2
17672
+ }
17673
+ }
17674
+ ),
17675
+ /* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "center", justifyContent: "space-between" }, children: [
17676
+ /* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "center", gap: 6 }, children: [
17677
+ /* @__PURE__ */ jsx(IndexDot, { step, index: i, accent: ACCENT2 }),
17678
+ /* @__PURE__ */ jsx(
17679
+ "span",
17680
+ {
17681
+ className: isActive ? "wfs-anim" : void 0,
17682
+ style: {
17683
+ width: 6,
17684
+ height: 6,
17685
+ borderRadius: "50%",
17686
+ background: color,
17687
+ animation: isActive ? "wfsLampPulse 1.8s ease-in-out infinite" : "none"
17688
+ }
17689
+ }
17690
+ )
17691
+ ] }),
17692
+ /* @__PURE__ */ jsx(
17693
+ "span",
17694
+ {
17695
+ style: {
17696
+ fontSize: 9,
17697
+ fontWeight: 600,
17698
+ letterSpacing: "0.05em",
17699
+ textTransform: "uppercase",
17700
+ color
17701
+ },
17702
+ children: STATUS_LABELS[step.status]
17703
+ }
17704
+ )
17705
+ ] }),
17706
+ /* @__PURE__ */ jsxs("div", { style: { minWidth: 0 }, children: [
17707
+ /* @__PURE__ */ jsx(
17708
+ "div",
17709
+ {
17710
+ style: {
17711
+ fontSize: 12.5,
17712
+ fontWeight: 600,
17713
+ color: "var(--foreground)",
17714
+ lineHeight: 1.25,
17715
+ letterSpacing: "-0.01em",
17716
+ overflow: "hidden",
17717
+ textOverflow: "ellipsis",
17718
+ whiteSpace: "nowrap"
17719
+ },
17720
+ children: step.title
17721
+ }
17722
+ ),
17723
+ step.sub && /* @__PURE__ */ jsx(
17724
+ "div",
17725
+ {
17726
+ style: {
17727
+ fontSize: 10.5,
17728
+ color: MUTED2,
17729
+ marginTop: 2,
17730
+ overflow: "hidden",
17731
+ textOverflow: "ellipsis",
17732
+ whiteSpace: "nowrap"
17733
+ },
17734
+ children: step.sub
17735
+ }
17736
+ )
17737
+ ] }),
17738
+ /* @__PURE__ */ jsxs(
17739
+ "div",
17740
+ {
17741
+ style: {
17742
+ display: "flex",
17743
+ alignItems: "center",
17744
+ justifyContent: "space-between",
17745
+ marginTop: "auto",
17746
+ minHeight: 20
17747
+ },
17748
+ children: [
17749
+ step.assignees && step.assignees.length > 0 ? /* @__PURE__ */ jsx(AvatarStack, { assignees: step.assignees, accent: ACCENT2 }) : /* @__PURE__ */ jsx("span", {}),
17750
+ roleCaption && /* @__PURE__ */ jsx(
17751
+ "span",
17752
+ {
17753
+ style: {
17754
+ fontSize: 9,
17755
+ color: "#9ca3af",
17756
+ fontWeight: 500,
17757
+ textAlign: "right",
17758
+ maxWidth: 76,
17759
+ lineHeight: 1.2,
17760
+ overflow: "hidden"
17761
+ },
17762
+ children: roleCaption
17763
+ }
17764
+ )
17765
+ ]
17766
+ }
17767
+ )
17768
+ ]
17769
+ }
17770
+ )
17771
+ ] }, step.id);
17772
+ })
17773
+ ]
17774
+ }
17775
+ )
17776
+ ] });
17777
+ }
17778
+ function WorkflowStepperResolver(p) {
17779
+ var _a;
17780
+ const { selectedStepId, onStepSelect } = useGenUIInteraction();
17781
+ return /* @__PURE__ */ jsx(ComponentActions, { filename: (_a = p.title) != null ? _a : "workflow-stepper", children: /* @__PURE__ */ jsxs("div", { style: { width: "100%", display: "flex", flexDirection: "column", gap: 10 }, children: [
17782
+ /* @__PURE__ */ jsxs("div", { style: { display: "flex", alignItems: "center", gap: 8, flexWrap: "wrap" }, children: [
17783
+ /* @__PURE__ */ jsx(
17784
+ "p",
17785
+ {
17786
+ style: {
17787
+ fontFamily: "var(--font-serif)",
17788
+ fontSize: "15px",
17789
+ fontWeight: 400,
17790
+ color: "var(--foreground)",
17791
+ letterSpacing: "-0.01em",
17792
+ margin: 0
17793
+ },
17794
+ children: p.title
17795
+ }
17796
+ ),
17797
+ p.period && /* @__PURE__ */ jsx(
17798
+ "span",
17799
+ {
17800
+ style: {
17801
+ fontSize: 11,
17802
+ fontWeight: 600,
17803
+ padding: "2px 8px",
17804
+ borderRadius: 9999,
17805
+ background: "#f2f2f2",
17806
+ color: "#777777",
17807
+ fontVariantNumeric: "tabular-nums"
17808
+ },
17809
+ children: p.period
17810
+ }
17811
+ ),
17812
+ p.badge && /* @__PURE__ */ jsx(
17813
+ "span",
17814
+ {
17815
+ style: {
17816
+ fontSize: 11,
17817
+ fontWeight: 600,
17818
+ padding: "2px 8px",
17819
+ borderRadius: 9999,
17820
+ border: "1px solid #dedede",
17821
+ color: "#777777"
17822
+ },
17823
+ children: p.badge
17824
+ }
17825
+ )
17826
+ ] }),
17827
+ /* @__PURE__ */ jsx(
17828
+ WorkflowStepperRenderer,
17829
+ {
17830
+ data: p,
17831
+ selectedStep: selectedStepId,
17832
+ onSelectStep: onStepSelect
17833
+ }
17834
+ )
17835
+ ] }) });
17836
+ }
16981
17837
  function resolveUI(rawPayload) {
16982
17838
  const payload = coercePayload(rawPayload);
16983
17839
  switch (payload.type) {
@@ -17093,6 +17949,8 @@ function resolveUI(rawPayload) {
17093
17949
  return /* @__PURE__ */ jsx(IntegrationsListResolver, __spreadValues({}, payload));
17094
17950
  case "pipeline-preview":
17095
17951
  return /* @__PURE__ */ jsx(PipelinePreviewResolver, __spreadValues({}, payload));
17952
+ case "workflow-stepper":
17953
+ return /* @__PURE__ */ jsx(WorkflowStepperResolver, __spreadValues({}, payload));
17096
17954
  default: {
17097
17955
  return /* @__PURE__ */ jsx(
17098
17956
  "div",