@adoptai/genui-components 0.1.56 → 0.1.57

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 (38) hide show
  1. package/dist/builders/BuilderForm.d.ts.map +1 -1
  2. package/dist/composites/decision-card/resolver.cjs +634 -0
  3. package/dist/composites/decision-card/resolver.cjs.map +1 -0
  4. package/dist/composites/decision-card/resolver.d.ts +13 -0
  5. package/dist/composites/decision-card/resolver.d.ts.map +1 -0
  6. package/dist/composites/decision-card/resolver.js +627 -0
  7. package/dist/composites/decision-card/resolver.js.map +1 -0
  8. package/dist/composites/workflow-stepper/resolver.cjs +4 -1
  9. package/dist/composites/workflow-stepper/resolver.cjs.map +1 -1
  10. package/dist/composites/workflow-stepper/resolver.js +4 -1
  11. package/dist/composites/workflow-stepper/resolver.js.map +1 -1
  12. package/dist/index.cjs +513 -11
  13. package/dist/index.cjs.map +1 -1
  14. package/dist/index.d.ts +2 -0
  15. package/dist/index.d.ts.map +1 -1
  16. package/dist/index.js +512 -12
  17. package/dist/index.js.map +1 -1
  18. package/dist/renderer.cjs +504 -8
  19. package/dist/renderer.cjs.map +1 -1
  20. package/dist/renderer.js +504 -8
  21. package/dist/renderer.js.map +1 -1
  22. package/dist/resolver.cjs +504 -8
  23. package/dist/resolver.cjs.map +1 -1
  24. package/dist/resolver.d.ts.map +1 -1
  25. package/dist/resolver.js +504 -8
  26. package/dist/resolver.js.map +1 -1
  27. package/dist/schemas/decision-card.d.ts +149 -0
  28. package/dist/schemas/decision-card.d.ts.map +1 -0
  29. package/dist/schemas/index.cjs +105 -1
  30. package/dist/schemas/index.cjs.map +1 -1
  31. package/dist/schemas/index.d.ts +149 -0
  32. package/dist/schemas/index.d.ts.map +1 -1
  33. package/dist/schemas/index.js +105 -1
  34. package/dist/schemas/index.js.map +1 -1
  35. package/dist/shared/InteractionContext.d.ts +10 -0
  36. package/dist/shared/InteractionContext.d.ts.map +1 -1
  37. package/dist/tool-definitions.json +135 -3
  38. package/package.json +1 -1
package/dist/index.d.ts CHANGED
@@ -38,6 +38,8 @@ export { LegalTestResultResolver } from "./composites/legal-test-result/resolver
38
38
  export { EngagementPipelineResolver } from "./composites/engagement-pipeline/resolver";
39
39
  export { WorkflowStepperResolver, WorkflowStepperRenderer } from "./composites/workflow-stepper/resolver";
40
40
  export type { WorkflowStepperRendererProps } from "./composites/workflow-stepper/resolver";
41
+ export { DecisionCardResolver, DecisionCardRenderer } from "./composites/decision-card/resolver";
42
+ export type { DecisionCardRendererProps } from "./composites/decision-card/resolver";
41
43
  export { GenUIInteractionProvider, useGenUIInteraction, DEFAULT_INTERACTION, } from "./shared/InteractionContext";
42
44
  export type { GenUIInteraction, GenUIInteractionProviderProps } from "./shared/InteractionContext";
43
45
  export { BORDER, MUTED, PAPER, ACCENT, ACCENT_SOFT, SECONDARY, CHART_PALETTE, } from "./shared/theme";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -5287,6 +5287,109 @@ var workflowStepperTool = {
5287
5287
  required: ["type", "title", "steps"]
5288
5288
  }
5289
5289
  };
5290
+ var decisionCardSchema = z.object({
5291
+ type: z.literal("decision-card"),
5292
+ id: z.string().optional(),
5293
+ decision_type: z.string().optional(),
5294
+ title: z.string(),
5295
+ question: z.string(),
5296
+ amount: z.number().optional(),
5297
+ currency: z.string().optional(),
5298
+ amount_label: z.string().optional(),
5299
+ severity: z.enum(["low", "medium", "high"]).optional(),
5300
+ flags: z.array(
5301
+ z.object({
5302
+ field: z.string().optional(),
5303
+ issue: z.string(),
5304
+ severity: z.enum(["low", "medium", "high"]).optional()
5305
+ })
5306
+ ).max(6).optional(),
5307
+ options: z.array(
5308
+ z.object({
5309
+ id: z.string().optional(),
5310
+ label: z.string(),
5311
+ recommended: z.boolean().optional()
5312
+ })
5313
+ ).min(1).max(5),
5314
+ source: z.object({
5315
+ label: z.string().optional(),
5316
+ url: z.string().optional()
5317
+ }).optional(),
5318
+ resolved: z.object({
5319
+ option: z.string()
5320
+ }).optional()
5321
+ });
5322
+ var decisionCardTool = {
5323
+ name: "render_decision_card",
5324
+ description: "Render an inline human-in-the-loop (HITL) decision card \u2014 a single judgment the agent needs from the user, resolved in-thread. Shows a titled question with an optional dollar amount at stake, optional data-quality flags, and 2-5 mutually-exclusive resolution options (the first or `recommended` one renders as the primary action), plus an optional 'view source' link. Use for inline approve/choose decisions the user resolves directly in the conversation. NOT for handing off to an external review portal (use escalation-card) and NOT for collecting multiple typed fields (use render_builder).",
5325
+ input_schema: {
5326
+ type: "object",
5327
+ properties: {
5328
+ type: { type: "string", enum: ["decision-card"] },
5329
+ id: { type: "string", description: "Stable id for update-in-place rendering" },
5330
+ decision_type: {
5331
+ type: "string",
5332
+ description: "Short category shown in the eyebrow, e.g. 'Cross-check', 'Allocation', 'Reserve'"
5333
+ },
5334
+ title: { type: "string", description: "The decision headline, e.g. 'AR reserve adequacy'" },
5335
+ question: { type: "string", description: "The full question / context the user must judge" },
5336
+ amount: { type: "number", description: "Dollar value at stake, e.g. 27100" },
5337
+ currency: { type: "string", description: "ISO currency code; defaults to USD" },
5338
+ amount_label: { type: "string", description: "Caption above the amount, e.g. 'At stake'" },
5339
+ severity: {
5340
+ type: "string",
5341
+ enum: ["low", "medium", "high"],
5342
+ description: "Severity of the decision; tints the accent rail"
5343
+ },
5344
+ flags: {
5345
+ type: "array",
5346
+ maxItems: 6,
5347
+ description: "Optional data-quality flags surfaced on the card",
5348
+ items: {
5349
+ type: "object",
5350
+ properties: {
5351
+ field: { type: "string" },
5352
+ issue: { type: "string" },
5353
+ severity: { type: "string", enum: ["low", "medium", "high"] }
5354
+ },
5355
+ required: ["issue"]
5356
+ }
5357
+ },
5358
+ options: {
5359
+ type: "array",
5360
+ minItems: 1,
5361
+ maxItems: 5,
5362
+ description: "Mutually-exclusive resolution choices; mark one `recommended` to make it primary",
5363
+ items: {
5364
+ type: "object",
5365
+ properties: {
5366
+ id: { type: "string" },
5367
+ label: { type: "string" },
5368
+ recommended: { type: "boolean" }
5369
+ },
5370
+ required: ["label"]
5371
+ }
5372
+ },
5373
+ source: {
5374
+ type: "object",
5375
+ description: "Optional provenance link for the figure",
5376
+ properties: {
5377
+ label: { type: "string" },
5378
+ url: { type: "string" }
5379
+ }
5380
+ },
5381
+ resolved: {
5382
+ type: "object",
5383
+ description: "Pre-resolved state for transcript replay",
5384
+ properties: {
5385
+ option: { type: "string" }
5386
+ },
5387
+ required: ["option"]
5388
+ }
5389
+ },
5390
+ required: ["type", "title", "question", "options"]
5391
+ }
5392
+ };
5290
5393
 
5291
5394
  // src/schemas/buildRenderUITool.ts
5292
5395
  function buildRenderUITool(selectedSchemas) {
@@ -5405,7 +5508,8 @@ var schemaRegistry = {
5405
5508
  "connect-integration": { schema: connectIntegrationSchema, tool: connectIntegrationTool },
5406
5509
  "integrations-list": { schema: integrationsListSchema, tool: integrationsListTool },
5407
5510
  "pipeline-preview": { schema: pipelinePreviewSchema, tool: pipelinePreviewTool },
5408
- "workflow-stepper": { schema: workflowStepperSchema, tool: workflowStepperTool }
5511
+ "workflow-stepper": { schema: workflowStepperSchema, tool: workflowStepperTool },
5512
+ "decision-card": { schema: decisionCardSchema, tool: decisionCardTool }
5409
5513
  };
5410
5514
 
5411
5515
  // src/shared/ColumnSettingsPanel.tsx
@@ -6118,17 +6222,17 @@ function SparklineTableResolver(p) {
6118
6222
  // src/composites/heatmap-table/resolver.tsx
6119
6223
  init_theme();
6120
6224
  init_ThemeContext();
6121
- function heatColor(z59) {
6122
- const clamped = Math.max(-3, Math.min(3, z59));
6225
+ function heatColor(z60) {
6226
+ const clamped = Math.max(-3, Math.min(3, z60));
6123
6227
  const abs = Math.abs(clamped);
6124
6228
  const lightness = 95 - abs * 8;
6125
6229
  const hue = clamped >= 0 ? 142 : 0;
6126
6230
  return `hsl(${hue} 60% ${lightness}%)`;
6127
6231
  }
6128
- function heatTextColor(z59) {
6129
- const abs = Math.abs(z59);
6130
- if (abs > 2) return z59 >= 0 ? "#14532d" : "#7f1d1d";
6131
- if (abs > 1) return z59 >= 0 ? "#166534" : "#991b1b";
6232
+ function heatTextColor(z60) {
6233
+ const abs = Math.abs(z60);
6234
+ if (abs > 2) return z60 >= 0 ? "#14532d" : "#7f1d1d";
6235
+ if (abs > 1) return z60 >= 0 ? "#166534" : "#991b1b";
6132
6236
  return "var(--foreground)";
6133
6237
  }
6134
6238
  var th2 = {
@@ -17176,7 +17280,10 @@ function PipelinePreviewResolver(p) {
17176
17280
  init_ThemeContext();
17177
17281
  var DEFAULT_INTERACTION = {
17178
17282
  selectedStepId: null,
17179
- onStepSelect: void 0
17283
+ onStepSelect: void 0,
17284
+ resolvedDecisions: void 0,
17285
+ onDecisionResolve: void 0,
17286
+ onDecisionSource: void 0
17180
17287
  };
17181
17288
  var GenUIInteractionContext = createContext(DEFAULT_INTERACTION);
17182
17289
  function GenUIInteractionProvider({ value, children }) {
@@ -17898,6 +18005,393 @@ function WorkflowStepperResolver(p) {
17898
18005
  )
17899
18006
  ] }) });
17900
18007
  }
18008
+ init_ThemeContext();
18009
+ var SEVERITY_COLORS = {
18010
+ high: { color: "#dc2626", bg: "#fef2f2" },
18011
+ medium: { color: "#f59e0b", bg: "#fff7ed" },
18012
+ low: { color: "#777777", bg: "#f2f2f2" }
18013
+ };
18014
+ var GREEN3 = "#15803d";
18015
+ var GREEN_SOFT = "#dcfce7";
18016
+ var STACK_BELOW = 380;
18017
+ function formatAmount2(amount, currency = "USD") {
18018
+ var _a2, _b;
18019
+ const abs = Math.abs(amount);
18020
+ const sign = amount < 0 ? "-" : "";
18021
+ let body;
18022
+ if (abs >= 1e6) body = `${(abs / 1e6).toFixed(abs >= 1e7 ? 0 : 1)}M`;
18023
+ else if (abs >= 1e3) body = `${(abs / 1e3).toFixed(abs >= 1e4 ? 0 : 1)}K`;
18024
+ else body = `${abs}`;
18025
+ let symbol = "$";
18026
+ try {
18027
+ const parts = new Intl.NumberFormat("en-US", {
18028
+ style: "currency",
18029
+ currency,
18030
+ maximumFractionDigits: 0
18031
+ }).formatToParts(0);
18032
+ symbol = (_b = (_a2 = parts.find((p) => p.type === "currency")) == null ? void 0 : _a2.value) != null ? _b : "$";
18033
+ } catch (e) {
18034
+ symbol = "$";
18035
+ }
18036
+ return `${sign}${symbol}${body}`;
18037
+ }
18038
+ function useContainerWidth2(ref) {
18039
+ const [w, setW] = React41.useState(0);
18040
+ React41.useLayoutEffect(() => {
18041
+ const el = ref.current;
18042
+ if (!el || typeof ResizeObserver === "undefined") return;
18043
+ const ro = new ResizeObserver((entries) => {
18044
+ var _a2;
18045
+ const cr = (_a2 = entries[0]) == null ? void 0 : _a2.contentRect;
18046
+ if (cr) setW(cr.width);
18047
+ });
18048
+ ro.observe(el);
18049
+ setW(el.getBoundingClientRect().width);
18050
+ return () => ro.disconnect();
18051
+ }, [ref]);
18052
+ return w;
18053
+ }
18054
+ var KEYFRAMES2 = `
18055
+ @keyframes dcRise{from{opacity:0;transform:translateY(4px)}to{opacity:1;transform:none}}
18056
+ .dc-rise{animation:dcRise 0.28s cubic-bezier(0.22,1,0.36,1) both}
18057
+ @media (prefers-reduced-motion: reduce){
18058
+ .dc-rise{animation:none !important;opacity:1 !important;transform:none !important}
18059
+ }`;
18060
+ function SparkCheck({ size, color }) {
18061
+ return /* @__PURE__ */ jsx("svg", { width: size, height: size, viewBox: "0 0 24 24", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsx(
18062
+ "path",
18063
+ {
18064
+ d: "M5 13l4 4L19 7",
18065
+ stroke: color,
18066
+ strokeWidth: 2.5,
18067
+ strokeLinecap: "round",
18068
+ strokeLinejoin: "round"
18069
+ }
18070
+ ) });
18071
+ }
18072
+ function FlagPill({ flag }) {
18073
+ var _a2;
18074
+ const sev = (_a2 = flag.severity) != null ? _a2 : "medium";
18075
+ const { color, bg } = SEVERITY_COLORS[sev];
18076
+ return /* @__PURE__ */ jsxs(
18077
+ "span",
18078
+ {
18079
+ style: {
18080
+ display: "inline-flex",
18081
+ alignItems: "center",
18082
+ gap: 5,
18083
+ fontSize: 11,
18084
+ fontWeight: 600,
18085
+ padding: "3px 9px",
18086
+ borderRadius: 9999,
18087
+ background: bg,
18088
+ color,
18089
+ lineHeight: 1.2
18090
+ },
18091
+ children: [
18092
+ /* @__PURE__ */ jsx(
18093
+ "span",
18094
+ {
18095
+ "aria-hidden": "true",
18096
+ style: { width: 6, height: 6, borderRadius: "50%", background: color, flexShrink: 0 }
18097
+ }
18098
+ ),
18099
+ flag.field ? `${flag.field}: ${flag.issue}` : flag.issue
18100
+ ]
18101
+ }
18102
+ );
18103
+ }
18104
+ function DecisionCardRenderer({
18105
+ data,
18106
+ resolved = null,
18107
+ onResolve,
18108
+ onOpenSource
18109
+ }) {
18110
+ var _a2, _b;
18111
+ const { BORDER: BORDER4, MUTED: MUTED2, ACCENT: ACCENT2, ACCENT_SOFT: ACCENT_SOFT2 } = useTheme();
18112
+ const rootRef = React41.useRef(null);
18113
+ const width = useContainerWidth2(rootRef);
18114
+ const stacked = width > 0 && width < STACK_BELOW;
18115
+ const options = (_a2 = data.options) != null ? _a2 : [];
18116
+ const recommendedIdx = Math.max(
18117
+ 0,
18118
+ options.findIndex((o) => o.recommended)
18119
+ );
18120
+ const railColor = data.severity ? SEVERITY_COLORS[data.severity].color : ACCENT2;
18121
+ const isResolved = Boolean(resolved);
18122
+ const amountNode = typeof data.amount === "number" ? /* @__PURE__ */ jsxs(
18123
+ "div",
18124
+ {
18125
+ style: {
18126
+ display: "flex",
18127
+ flexDirection: "column",
18128
+ alignItems: stacked ? "flex-start" : "flex-end",
18129
+ gap: 1,
18130
+ flexShrink: 0
18131
+ },
18132
+ children: [
18133
+ data.amount_label && /* @__PURE__ */ jsx(
18134
+ "span",
18135
+ {
18136
+ style: {
18137
+ fontSize: 10,
18138
+ textTransform: "uppercase",
18139
+ letterSpacing: "0.07em",
18140
+ fontWeight: 700,
18141
+ color: MUTED2
18142
+ },
18143
+ children: data.amount_label
18144
+ }
18145
+ ),
18146
+ /* @__PURE__ */ jsx(
18147
+ "span",
18148
+ {
18149
+ style: {
18150
+ fontSize: 18,
18151
+ fontWeight: 700,
18152
+ color: "var(--foreground)",
18153
+ fontVariantNumeric: "tabular-nums",
18154
+ letterSpacing: "-0.01em",
18155
+ lineHeight: 1.1
18156
+ },
18157
+ children: formatAmount2(data.amount, data.currency)
18158
+ }
18159
+ )
18160
+ ]
18161
+ }
18162
+ ) : null;
18163
+ return /* @__PURE__ */ jsxs(
18164
+ "div",
18165
+ {
18166
+ ref: rootRef,
18167
+ className: "dc-rise",
18168
+ "data-testid": "decision-card",
18169
+ "data-resolved": isResolved || void 0,
18170
+ style: {
18171
+ position: "relative",
18172
+ width: "100%",
18173
+ minWidth: 0,
18174
+ boxSizing: "border-box",
18175
+ borderRadius: "0.75rem",
18176
+ border: `1px solid ${isResolved ? GREEN_SOFT : BORDER4}`,
18177
+ background: isResolved ? "#f6fef9" : "white",
18178
+ boxShadow: "0 1px 2px rgba(0,0,0,0.03), 0 4px 12px rgba(0,0,0,0.04)",
18179
+ padding: "16px 18px 16px 20px",
18180
+ display: "flex",
18181
+ flexDirection: "column",
18182
+ gap: 12,
18183
+ overflow: "hidden"
18184
+ },
18185
+ children: [
18186
+ /* @__PURE__ */ jsx("style", { children: KEYFRAMES2 }),
18187
+ /* @__PURE__ */ jsx(
18188
+ "div",
18189
+ {
18190
+ "aria-hidden": "true",
18191
+ style: {
18192
+ position: "absolute",
18193
+ top: 0,
18194
+ left: 0,
18195
+ bottom: 0,
18196
+ width: 4,
18197
+ background: isResolved ? GREEN3 : railColor
18198
+ }
18199
+ }
18200
+ ),
18201
+ /* @__PURE__ */ jsxs(
18202
+ "div",
18203
+ {
18204
+ style: {
18205
+ display: "flex",
18206
+ flexDirection: stacked ? "column" : "row",
18207
+ alignItems: stacked ? "flex-start" : "flex-start",
18208
+ justifyContent: "space-between",
18209
+ gap: stacked ? 6 : 12
18210
+ },
18211
+ children: [
18212
+ /* @__PURE__ */ jsxs("div", { style: { minWidth: 0, display: "flex", flexDirection: "column", gap: 4 }, children: [
18213
+ /* @__PURE__ */ jsx(
18214
+ "span",
18215
+ {
18216
+ style: {
18217
+ fontSize: 10.5,
18218
+ textTransform: "uppercase",
18219
+ letterSpacing: "0.07em",
18220
+ fontWeight: 700,
18221
+ color: ACCENT2
18222
+ },
18223
+ children: data.decision_type ? `Decision needs you \xB7 ${data.decision_type}` : "Decision needs you"
18224
+ }
18225
+ ),
18226
+ /* @__PURE__ */ jsx(
18227
+ "p",
18228
+ {
18229
+ style: {
18230
+ fontFamily: "var(--font-serif)",
18231
+ fontSize: 17,
18232
+ fontWeight: 400,
18233
+ color: "var(--foreground)",
18234
+ letterSpacing: "-0.01em",
18235
+ margin: 0,
18236
+ lineHeight: 1.2
18237
+ },
18238
+ children: data.title
18239
+ }
18240
+ )
18241
+ ] }),
18242
+ amountNode
18243
+ ]
18244
+ }
18245
+ ),
18246
+ /* @__PURE__ */ jsx("p", { style: { fontSize: 13, lineHeight: 1.5, color: MUTED2, margin: 0 }, children: data.question }),
18247
+ data.flags && data.flags.length > 0 && /* @__PURE__ */ jsx("div", { style: { display: "flex", flexWrap: "wrap", gap: 6 }, children: data.flags.map((flag, i) => {
18248
+ var _a3;
18249
+ return /* @__PURE__ */ jsx(FlagPill, { flag }, `${(_a3 = flag.field) != null ? _a3 : "flag"}-${i}`);
18250
+ }) }),
18251
+ isResolved ? /* @__PURE__ */ jsxs(
18252
+ "div",
18253
+ {
18254
+ style: {
18255
+ display: "inline-flex",
18256
+ alignItems: "center",
18257
+ gap: 7,
18258
+ fontSize: 13,
18259
+ fontWeight: 600,
18260
+ color: GREEN3
18261
+ },
18262
+ children: [
18263
+ /* @__PURE__ */ jsx(SparkCheck, { size: 16, color: GREEN3 }),
18264
+ "Resolved \xB7 ",
18265
+ resolved
18266
+ ]
18267
+ }
18268
+ ) : /* @__PURE__ */ jsxs(Fragment, { children: [
18269
+ /* @__PURE__ */ jsx(
18270
+ "div",
18271
+ {
18272
+ style: {
18273
+ display: "flex",
18274
+ flexDirection: stacked ? "column" : "row",
18275
+ flexWrap: stacked ? "nowrap" : "wrap",
18276
+ gap: 8
18277
+ },
18278
+ children: options.map((opt, idx) => {
18279
+ var _a3;
18280
+ const primary = idx === recommendedIdx;
18281
+ return /* @__PURE__ */ jsx(
18282
+ "button",
18283
+ {
18284
+ type: "button",
18285
+ onClick: () => onResolve == null ? void 0 : onResolve(opt.label),
18286
+ style: {
18287
+ width: stacked ? "100%" : "auto",
18288
+ textAlign: stacked ? "left" : "center",
18289
+ border: `1px solid ${primary ? ACCENT2 : BORDER4}`,
18290
+ background: primary ? ACCENT2 : "white",
18291
+ color: primary ? "white" : "var(--foreground)",
18292
+ borderRadius: 8,
18293
+ fontSize: 13,
18294
+ fontWeight: 600,
18295
+ padding: "9px 14px",
18296
+ cursor: "pointer",
18297
+ transition: "background 0.15s, border-color 0.15s, color 0.15s"
18298
+ },
18299
+ onMouseEnter: (e) => {
18300
+ if (primary) {
18301
+ e.currentTarget.style.background = ACCENT_SOFT2;
18302
+ } else {
18303
+ e.currentTarget.style.borderColor = ACCENT2;
18304
+ e.currentTarget.style.background = "#fafafa";
18305
+ }
18306
+ },
18307
+ onMouseLeave: (e) => {
18308
+ if (primary) {
18309
+ e.currentTarget.style.background = ACCENT2;
18310
+ } else {
18311
+ e.currentTarget.style.borderColor = BORDER4;
18312
+ e.currentTarget.style.background = "white";
18313
+ }
18314
+ },
18315
+ children: opt.label
18316
+ },
18317
+ (_a3 = opt.id) != null ? _a3 : opt.label
18318
+ );
18319
+ })
18320
+ }
18321
+ ),
18322
+ data.source && /* @__PURE__ */ jsxs(
18323
+ "button",
18324
+ {
18325
+ type: "button",
18326
+ onClick: onOpenSource,
18327
+ style: {
18328
+ alignSelf: "flex-start",
18329
+ display: "inline-flex",
18330
+ alignItems: "center",
18331
+ gap: 5,
18332
+ border: "none",
18333
+ background: "none",
18334
+ padding: 0,
18335
+ cursor: "pointer",
18336
+ fontSize: 12,
18337
+ fontWeight: 600,
18338
+ color: MUTED2,
18339
+ transition: "color 0.15s"
18340
+ },
18341
+ onMouseEnter: (e) => e.currentTarget.style.color = ACCENT2,
18342
+ onMouseLeave: (e) => e.currentTarget.style.color = MUTED2,
18343
+ children: [
18344
+ /* @__PURE__ */ jsx("svg", { width: 13, height: 13, viewBox: "0 0 24 24", fill: "none", "aria-hidden": "true", children: /* @__PURE__ */ jsx(
18345
+ "path",
18346
+ {
18347
+ d: "M14 3v4a1 1 0 001 1h4M5 4a1 1 0 011-1h8l5 5v11a1 1 0 01-1 1H6a1 1 0 01-1-1V4z",
18348
+ stroke: "currentColor",
18349
+ strokeWidth: 1.8,
18350
+ strokeLinecap: "round",
18351
+ strokeLinejoin: "round"
18352
+ }
18353
+ ) }),
18354
+ (_b = data.source.label) != null ? _b : "View source for this figure"
18355
+ ]
18356
+ }
18357
+ )
18358
+ ] })
18359
+ ]
18360
+ }
18361
+ );
18362
+ }
18363
+ function DecisionCardResolver(p) {
18364
+ var _a2, _b, _c, _d;
18365
+ const { resolvedDecisions, onDecisionResolve, onDecisionSource } = useGenUIInteraction();
18366
+ const decisionId = (_a2 = p.id) != null ? _a2 : p.title;
18367
+ const hostResolved = resolvedDecisions == null ? void 0 : resolvedDecisions[decisionId];
18368
+ const initial = (_c = hostResolved != null ? hostResolved : (_b = p.resolved) == null ? void 0 : _b.option) != null ? _c : null;
18369
+ const [localResolved, setLocalResolved] = React41.useState(initial);
18370
+ React41.useEffect(() => {
18371
+ if (hostResolved !== void 0) setLocalResolved(hostResolved);
18372
+ }, [hostResolved]);
18373
+ const resolved = hostResolved != null ? hostResolved : localResolved;
18374
+ const handleResolve = (option) => {
18375
+ setLocalResolved(option);
18376
+ onDecisionResolve == null ? void 0 : onDecisionResolve(decisionId, option);
18377
+ };
18378
+ const handleSource = () => {
18379
+ var _a3;
18380
+ onDecisionSource == null ? void 0 : onDecisionSource(decisionId, p.source);
18381
+ if (!onDecisionSource && ((_a3 = p.source) == null ? void 0 : _a3.url) && typeof window !== "undefined") {
18382
+ window.open(p.source.url, "_blank", "noopener,noreferrer");
18383
+ }
18384
+ };
18385
+ return /* @__PURE__ */ jsx(ComponentActions, { filename: (_d = p.title) != null ? _d : "decision-card", children: /* @__PURE__ */ jsx(
18386
+ DecisionCardRenderer,
18387
+ {
18388
+ data: p,
18389
+ resolved,
18390
+ onResolve: handleResolve,
18391
+ onOpenSource: handleSource
18392
+ }
18393
+ ) });
18394
+ }
17901
18395
  function resolveUI(rawPayload) {
17902
18396
  const payload = coercePayload(rawPayload);
17903
18397
  switch (payload.type) {
@@ -18015,6 +18509,8 @@ function resolveUI(rawPayload) {
18015
18509
  return /* @__PURE__ */ jsx(PipelinePreviewResolver, __spreadValues({}, payload));
18016
18510
  case "workflow-stepper":
18017
18511
  return /* @__PURE__ */ jsx(WorkflowStepperResolver, __spreadValues({}, payload));
18512
+ case "decision-card":
18513
+ return /* @__PURE__ */ jsx(DecisionCardResolver, __spreadValues({}, payload));
18018
18514
  default: {
18019
18515
  return /* @__PURE__ */ jsx(
18020
18516
  "div",
@@ -19733,10 +20229,14 @@ function BuilderFormResolver({
19733
20229
  }
19734
20230
  onSubmit(buildSubmission());
19735
20231
  }, [disabled, state.validateAllDetailed, onSubmit, buildSubmission, onValidationError]);
20232
+ const onChangeRef = useRef(onChange);
20233
+ useEffect(() => {
20234
+ onChangeRef.current = onChange;
20235
+ });
19736
20236
  useEffect(() => {
19737
- if (!onChange) return;
19738
- onChange(buildSubmission());
19739
- }, [onChange, state.values]);
20237
+ var _a3;
20238
+ (_a3 = onChangeRef.current) == null ? void 0 : _a3.call(onChangeRef, buildSubmission());
20239
+ }, [state.values]);
19740
20240
  useEffect(() => {
19741
20241
  if (!submitRef) return;
19742
20242
  submitRef.current = handleSubmit;
@@ -19804,6 +20304,6 @@ function resolveBuilder(payload, callbacks) {
19804
20304
  // src/index.ts
19805
20305
  init_Markdown();
19806
20306
 
19807
- export { ACCENT, ACCENT_SOFT, AgingReportResolver, AlertResolver, AllocationDonutResolver, AreaChartResolver, AuditTrailResolver, BORDER, BUILDER_FIELD_TYPES, BuilderFormResolver, BuilderRecap, CHART_PALETTE, ComparativeBarChartResolver, ComplianceChecklistResolver, ComponentActions, ContextSlot, DEFAULT_INTERACTION, DEFAULT_TOKENS, DataTableResolver, DocumentPreviewResolver, EngagementPipelineResolver, FIELD_REGISTRY, FieldRenderer, FileCard, FitText, FlowCanvasRenderer, FlowCanvasResolver, GenUIInteractionProvider, GenUIRenderer, GenUIThemeProvider, GroupedTableResolver, HeatmapTableResolver, JournalEntryResolver, LegalTestResultResolver, MUTED, Markdown, NUMERIC_CELL, NewsFeedResolver, PAPER, PreviewHost, PreviewModal, ProvenanceChainResolver, ReconciliationViewResolver, SECONDARY, ScreenerTableResolver, SearchResultsResolver, SparklineTableResolver, StackedBreakdownResolver, StatGridResolver, StatusCardResolver, TRUNCATE, TabsPanelResolver, TrialBalanceResolver, VarianceAnalysisResolver, WaterfallChartResolver, WorkflowStepperRenderer, WorkflowStepperResolver, buildRenderUITool, builderBlockSchema, builderFieldSchema, builderSchema, coercePayload, downloadCSV, fileTypeMeta, formatExpiry, isExpirySoon, isPreviewable, previewKindFor, resolveBuilder, resolveUI, schemaRegistry, useBuilderState, useGenUIInteraction, useTheme, validateBuilderPayload, validatePayload };
20307
+ export { ACCENT, ACCENT_SOFT, AgingReportResolver, AlertResolver, AllocationDonutResolver, AreaChartResolver, AuditTrailResolver, BORDER, BUILDER_FIELD_TYPES, BuilderFormResolver, BuilderRecap, CHART_PALETTE, ComparativeBarChartResolver, ComplianceChecklistResolver, ComponentActions, ContextSlot, DEFAULT_INTERACTION, DEFAULT_TOKENS, DataTableResolver, DecisionCardRenderer, DecisionCardResolver, DocumentPreviewResolver, EngagementPipelineResolver, FIELD_REGISTRY, FieldRenderer, FileCard, FitText, FlowCanvasRenderer, FlowCanvasResolver, GenUIInteractionProvider, GenUIRenderer, GenUIThemeProvider, GroupedTableResolver, HeatmapTableResolver, JournalEntryResolver, LegalTestResultResolver, MUTED, Markdown, NUMERIC_CELL, NewsFeedResolver, PAPER, PreviewHost, PreviewModal, ProvenanceChainResolver, ReconciliationViewResolver, SECONDARY, ScreenerTableResolver, SearchResultsResolver, SparklineTableResolver, StackedBreakdownResolver, StatGridResolver, StatusCardResolver, TRUNCATE, TabsPanelResolver, TrialBalanceResolver, VarianceAnalysisResolver, WaterfallChartResolver, WorkflowStepperRenderer, WorkflowStepperResolver, buildRenderUITool, builderBlockSchema, builderFieldSchema, builderSchema, coercePayload, downloadCSV, fileTypeMeta, formatExpiry, isExpirySoon, isPreviewable, previewKindFor, resolveBuilder, resolveUI, schemaRegistry, useBuilderState, useGenUIInteraction, useTheme, validateBuilderPayload, validatePayload };
19808
20308
  //# sourceMappingURL=index.js.map
19809
20309
  //# sourceMappingURL=index.js.map