@vertesia/fusion-ux 1.0.0-dev.20260128.144200

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 (91) hide show
  1. package/LICENSE +13 -0
  2. package/README.md +160 -0
  3. package/lib/esm/fusion-fragment/ChartRenderer.js +70 -0
  4. package/lib/esm/fusion-fragment/ChartRenderer.js.map +1 -0
  5. package/lib/esm/fusion-fragment/FieldRenderer.js +153 -0
  6. package/lib/esm/fusion-fragment/FieldRenderer.js.map +1 -0
  7. package/lib/esm/fusion-fragment/FusionFragmentContext.js +53 -0
  8. package/lib/esm/fusion-fragment/FusionFragmentContext.js.map +1 -0
  9. package/lib/esm/fusion-fragment/FusionFragmentHandler.js +233 -0
  10. package/lib/esm/fusion-fragment/FusionFragmentHandler.js.map +1 -0
  11. package/lib/esm/fusion-fragment/FusionFragmentRenderer.js +108 -0
  12. package/lib/esm/fusion-fragment/FusionFragmentRenderer.js.map +1 -0
  13. package/lib/esm/fusion-fragment/SectionRenderer.js +134 -0
  14. package/lib/esm/fusion-fragment/SectionRenderer.js.map +1 -0
  15. package/lib/esm/fusion-fragment/TableRenderer.js +137 -0
  16. package/lib/esm/fusion-fragment/TableRenderer.js.map +1 -0
  17. package/lib/esm/fusion-fragment/index.js +11 -0
  18. package/lib/esm/fusion-fragment/index.js.map +1 -0
  19. package/lib/esm/index.js +44 -0
  20. package/lib/esm/index.js.map +1 -0
  21. package/lib/esm/render/index.js +12 -0
  22. package/lib/esm/render/index.js.map +1 -0
  23. package/lib/esm/render/textPreview.js +194 -0
  24. package/lib/esm/render/textPreview.js.map +1 -0
  25. package/lib/esm/types.js +8 -0
  26. package/lib/esm/types.js.map +1 -0
  27. package/lib/esm/validation/formatErrors.js +105 -0
  28. package/lib/esm/validation/formatErrors.js.map +1 -0
  29. package/lib/esm/validation/fuzzyMatch.js +87 -0
  30. package/lib/esm/validation/fuzzyMatch.js.map +1 -0
  31. package/lib/esm/validation/index.js +8 -0
  32. package/lib/esm/validation/index.js.map +1 -0
  33. package/lib/esm/validation/schemas.js +166 -0
  34. package/lib/esm/validation/schemas.js.map +1 -0
  35. package/lib/esm/validation/validateTemplate.js +247 -0
  36. package/lib/esm/validation/validateTemplate.js.map +1 -0
  37. package/lib/tsconfig.tsbuildinfo +1 -0
  38. package/lib/types/fusion-fragment/ChartRenderer.d.ts +23 -0
  39. package/lib/types/fusion-fragment/ChartRenderer.d.ts.map +1 -0
  40. package/lib/types/fusion-fragment/FieldRenderer.d.ts +12 -0
  41. package/lib/types/fusion-fragment/FieldRenderer.d.ts.map +1 -0
  42. package/lib/types/fusion-fragment/FusionFragmentContext.d.ts +48 -0
  43. package/lib/types/fusion-fragment/FusionFragmentContext.d.ts.map +1 -0
  44. package/lib/types/fusion-fragment/FusionFragmentHandler.d.ts +38 -0
  45. package/lib/types/fusion-fragment/FusionFragmentHandler.d.ts.map +1 -0
  46. package/lib/types/fusion-fragment/FusionFragmentRenderer.d.ts +32 -0
  47. package/lib/types/fusion-fragment/FusionFragmentRenderer.d.ts.map +1 -0
  48. package/lib/types/fusion-fragment/SectionRenderer.d.ts +12 -0
  49. package/lib/types/fusion-fragment/SectionRenderer.d.ts.map +1 -0
  50. package/lib/types/fusion-fragment/TableRenderer.d.ts +15 -0
  51. package/lib/types/fusion-fragment/TableRenderer.d.ts.map +1 -0
  52. package/lib/types/fusion-fragment/index.d.ts +11 -0
  53. package/lib/types/fusion-fragment/index.d.ts.map +1 -0
  54. package/lib/types/index.d.ts +42 -0
  55. package/lib/types/index.d.ts.map +1 -0
  56. package/lib/types/render/index.d.ts +12 -0
  57. package/lib/types/render/index.d.ts.map +1 -0
  58. package/lib/types/render/textPreview.d.ts +20 -0
  59. package/lib/types/render/textPreview.d.ts.map +1 -0
  60. package/lib/types/types.d.ts +262 -0
  61. package/lib/types/types.d.ts.map +1 -0
  62. package/lib/types/validation/formatErrors.d.ts +35 -0
  63. package/lib/types/validation/formatErrors.d.ts.map +1 -0
  64. package/lib/types/validation/fuzzyMatch.d.ts +25 -0
  65. package/lib/types/validation/fuzzyMatch.d.ts.map +1 -0
  66. package/lib/types/validation/index.d.ts +8 -0
  67. package/lib/types/validation/index.d.ts.map +1 -0
  68. package/lib/types/validation/schemas.d.ts +67 -0
  69. package/lib/types/validation/schemas.d.ts.map +1 -0
  70. package/lib/types/validation/validateTemplate.d.ts +22 -0
  71. package/lib/types/validation/validateTemplate.d.ts.map +1 -0
  72. package/lib/vertesia-fusion-ux.js +2 -0
  73. package/lib/vertesia-fusion-ux.js.map +1 -0
  74. package/package.json +68 -0
  75. package/src/fusion-fragment/ChartRenderer.tsx +136 -0
  76. package/src/fusion-fragment/FieldRenderer.tsx +199 -0
  77. package/src/fusion-fragment/FusionFragmentContext.tsx +92 -0
  78. package/src/fusion-fragment/FusionFragmentHandler.tsx +313 -0
  79. package/src/fusion-fragment/FusionFragmentRenderer.tsx +156 -0
  80. package/src/fusion-fragment/SectionRenderer.tsx +196 -0
  81. package/src/fusion-fragment/TableRenderer.tsx +204 -0
  82. package/src/fusion-fragment/index.ts +20 -0
  83. package/src/index.ts +89 -0
  84. package/src/render/index.ts +16 -0
  85. package/src/render/textPreview.ts +231 -0
  86. package/src/types.ts +278 -0
  87. package/src/validation/formatErrors.ts +128 -0
  88. package/src/validation/fuzzyMatch.ts +109 -0
  89. package/src/validation/index.ts +8 -0
  90. package/src/validation/schemas.ts +175 -0
  91. package/src/validation/validateTemplate.ts +282 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FieldRenderer.d.ts","sourceRoot":"","sources":["../../../src/fusion-fragment/FieldRenderer.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAkC,KAAK,YAAY,EAAE,MAAM,OAAO,CAAC;AAC1E,OAAO,KAAK,EAAE,kBAAkB,EAAiB,MAAM,aAAa,CAAC;AAuHrE;;;GAGG;AACH,wBAAgB,aAAa,CAAC,EAC5B,KAAK,EACL,KAAK,EACL,QAAQ,EACR,SAAS,GACV,EAAE,kBAAkB,GAAG,YAAY,CAgEnC"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Context provider for FusionFragment components
3
+ * Provides data and update handlers to nested components
4
+ */
5
+ import { type ReactNode, type ReactElement } from 'react';
6
+ import type { FusionFragmentContextValue, ChartComponentProps } from '../types.js';
7
+ export interface FusionFragmentProviderProps {
8
+ /** Data to display in fragments */
9
+ data: Record<string, unknown>;
10
+ /** Callback when a field is updated (direct mode) */
11
+ onUpdate?: (key: string, value: unknown) => Promise<void>;
12
+ /** Send message to conversation (agent mode) */
13
+ sendMessage?: (message: string) => void;
14
+ /** Chart component to render Vega-Lite charts (injected to avoid circular deps) */
15
+ ChartComponent?: React.ComponentType<ChartComponentProps>;
16
+ /** Artifact run ID for resolving artifact references */
17
+ artifactRunId?: string;
18
+ /** Children components */
19
+ children: ReactNode;
20
+ }
21
+ /**
22
+ * Provider component that supplies data and update handlers
23
+ * to FusionFragment components via context
24
+ *
25
+ * @example
26
+ * ```tsx
27
+ * <FusionFragmentProvider
28
+ * data={fund.parameters}
29
+ * onUpdate={async (key, value) => {
30
+ * await api.funds.updateParameters(fundId, { [key]: value });
31
+ * }}
32
+ * >
33
+ * <MarkdownRenderer content={agentResponse} />
34
+ * </FusionFragmentProvider>
35
+ * ```
36
+ */
37
+ export declare function FusionFragmentProvider({ data, onUpdate, sendMessage, ChartComponent, artifactRunId, children }: FusionFragmentProviderProps): ReactElement;
38
+ /**
39
+ * Hook to access FusionFragment context
40
+ * @throws Error if used outside of FusionFragmentProvider
41
+ */
42
+ export declare function useFusionFragmentContext(): FusionFragmentContextValue;
43
+ /**
44
+ * Hook to safely access FusionFragment context
45
+ * Returns null if not within a provider (useful for optional context)
46
+ */
47
+ export declare function useFusionFragmentContextSafe(): FusionFragmentContextValue | null;
48
+ //# sourceMappingURL=FusionFragmentContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FusionFragmentContext.d.ts","sourceRoot":"","sources":["../../../src/fusion-fragment/FusionFragmentContext.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAsC,KAAK,SAAS,EAAE,KAAK,YAAY,EAAE,MAAM,OAAO,CAAC;AAC9F,OAAO,KAAK,EAAE,0BAA0B,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAInF,MAAM,WAAW,2BAA2B;IAC1C,mCAAmC;IACnC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,qDAAqD;IACrD,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,gDAAgD;IAChD,WAAW,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,mFAAmF;IACnF,cAAc,CAAC,EAAE,KAAK,CAAC,aAAa,CAAC,mBAAmB,CAAC,CAAC;IAC1D,wDAAwD;IACxD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,0BAA0B;IAC1B,QAAQ,EAAE,SAAS,CAAC;CACrB;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,sBAAsB,CAAC,EACrC,IAAI,EACJ,QAAQ,EACR,WAAW,EACX,cAAc,EACd,aAAa,EACb,QAAQ,EACT,EAAE,2BAA2B,GAAG,YAAY,CAmB5C;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,IAAI,0BAA0B,CAUrE;AAED;;;GAGG;AACH,wBAAgB,4BAA4B,IAAI,0BAA0B,GAAG,IAAI,CAEhF"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * FusionFragmentHandler - Code block handler component
3
+ * Parses fusion-fragment code blocks and renders them
4
+ */
5
+ import { type ReactElement } from 'react';
6
+ export interface FusionFragmentHandlerProps {
7
+ /** The JSON code from the fusion-fragment code block */
8
+ code: string;
9
+ /** Optional data to use instead of context */
10
+ data?: Record<string, unknown>;
11
+ /** Optional update handler */
12
+ onUpdate?: (key: string, value: unknown) => Promise<void>;
13
+ }
14
+ /**
15
+ * FusionFragmentHandler - Handles fusion-fragment code blocks
16
+ *
17
+ * This component is designed to be used as a code block renderer.
18
+ * It parses the JSON template from the code block and renders it
19
+ * using data from the FusionFragmentContext.
20
+ *
21
+ * @example
22
+ * ```tsx
23
+ * // In your markdown renderer:
24
+ * const codeBlockRenderers = {
25
+ * 'fusion-fragment': ({ code }) => <FusionFragmentHandler code={code} />
26
+ * };
27
+ * ```
28
+ */
29
+ export declare function FusionFragmentHandler({ code, data: propData, onUpdate: propOnUpdate, }: FusionFragmentHandlerProps): ReactElement;
30
+ /**
31
+ * Factory function to create a code block renderer configuration
32
+ * for use with markdown renderers that support custom code blocks
33
+ */
34
+ export declare function createFusionFragmentCodeBlockRenderer(): {
35
+ language: string;
36
+ component: typeof FusionFragmentHandler;
37
+ };
38
+ //# sourceMappingURL=FusionFragmentHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FusionFragmentHandler.d.ts","sourceRoot":"","sources":["../../../src/fusion-fragment/FusionFragmentHandler.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAW,KAAK,YAAY,EAAE,MAAM,OAAO,CAAC;AA2InD,MAAM,WAAW,0BAA0B;IACzC,wDAAwD;IACxD,IAAI,EAAE,MAAM,CAAC;IACb,8CAA8C;IAC9C,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3D;AA0ED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,qBAAqB,CAAC,EACpC,IAAI,EACJ,IAAI,EAAE,QAAQ,EACd,QAAQ,EAAE,YAAY,GACvB,EAAE,0BAA0B,GAAG,YAAY,CAyD3C;AAED;;;GAGG;AACH,wBAAgB,qCAAqC;;;EAKpD"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * FusionFragmentRenderer - Main component
3
+ * Renders a model-generated template with actual data values
4
+ */
5
+ import { type ReactElement } from 'react';
6
+ import type { FusionFragmentRendererProps } from '../types.js';
7
+ /**
8
+ * FusionFragmentRenderer - Main renderer component
9
+ *
10
+ * Takes a model-generated template and actual data, validates the template,
11
+ * and renders the UI with proper formatting and layout.
12
+ *
13
+ * @example
14
+ * ```tsx
15
+ * <FusionFragmentRenderer
16
+ * template={{
17
+ * title: "Fund Parameters",
18
+ * sections: [{
19
+ * title: "Identity",
20
+ * layout: "grid-3",
21
+ * fields: [
22
+ * { label: "Firm Name", key: "firmName" },
23
+ * { label: "Vintage", key: "vintageYear", format: "number" }
24
+ * ]
25
+ * }]
26
+ * }}
27
+ * data={{ firmName: "Acme Capital", vintageYear: 2024 }}
28
+ * />
29
+ * ```
30
+ */
31
+ export declare function FusionFragmentRenderer({ template, data, onUpdate, agentMode, className, }: FusionFragmentRendererProps): ReactElement;
32
+ //# sourceMappingURL=FusionFragmentRenderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FusionFragmentRenderer.d.ts","sourceRoot":"","sources":["../../../src/fusion-fragment/FusionFragmentRenderer.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAW,KAAK,YAAY,EAAE,MAAM,OAAO,CAAC;AACnD,OAAO,KAAK,EAAE,2BAA2B,EAAmB,MAAM,aAAa,CAAC;AAsFhF;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,sBAAsB,CAAC,EACrC,QAAQ,EACR,IAAI,EACJ,QAAQ,EACR,SAAS,EACT,SAAS,GACV,EAAE,2BAA2B,GAAG,YAAY,CAiC5C"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * SectionRenderer component
3
+ * Renders a section with grid layout and collapsible behavior
4
+ */
5
+ import { type ReactElement } from 'react';
6
+ import type { SectionRendererProps } from '../types.js';
7
+ /**
8
+ * SectionRenderer component
9
+ * Displays a section with title, optional collapse, and grid of fields
10
+ */
11
+ export declare function SectionRenderer({ section, data, onUpdate, agentMode, }: SectionRendererProps): ReactElement;
12
+ //# sourceMappingURL=SectionRenderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SectionRenderer.d.ts","sourceRoot":"","sources":["../../../src/fusion-fragment/SectionRenderer.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAqB,KAAK,YAAY,EAAE,MAAM,OAAO,CAAC;AAC7D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAmGxD;;;GAGG;AACH,wBAAgB,eAAe,CAAC,EAC9B,OAAO,EACP,IAAI,EACJ,QAAQ,EACR,SAAS,GACV,EAAE,oBAAoB,GAAG,YAAY,CAiFrC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * TableRenderer component
3
+ * Renders a table with columns and row data
4
+ */
5
+ import { type ReactElement } from 'react';
6
+ import type { ColumnTemplate } from '../types.js';
7
+ export interface TableRendererProps {
8
+ columns: ColumnTemplate[];
9
+ rows: Record<string, unknown>[];
10
+ }
11
+ /**
12
+ * TableRenderer component
13
+ */
14
+ export declare function TableRenderer({ columns, rows }: TableRendererProps): ReactElement;
15
+ //# sourceMappingURL=TableRenderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TableRenderer.d.ts","sourceRoot":"","sources":["../../../src/fusion-fragment/TableRenderer.tsx"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAW,KAAK,YAAY,EAAE,MAAM,OAAO,CAAC;AACnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAgDlD,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;CACjC;AAwDD;;GAEG;AACH,wBAAgB,aAAa,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,kBAAkB,GAAG,YAAY,CAuFjF"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * FusionFragment component exports
3
+ */
4
+ export { FusionFragmentRenderer } from './FusionFragmentRenderer.js';
5
+ export { SectionRenderer } from './SectionRenderer.js';
6
+ export { FieldRenderer } from './FieldRenderer.js';
7
+ export { TableRenderer, type TableRendererProps } from './TableRenderer.js';
8
+ export { ChartRenderer, type ChartRendererProps } from './ChartRenderer.js';
9
+ export { FusionFragmentProvider, useFusionFragmentContext, useFusionFragmentContextSafe, type FusionFragmentProviderProps, } from './FusionFragmentContext.js';
10
+ export { FusionFragmentHandler, createFusionFragmentCodeBlockRenderer, type FusionFragmentHandlerProps, } from './FusionFragmentHandler.js';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/fusion-fragment/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EAAE,aAAa,EAAE,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAC5E,OAAO,EACL,sBAAsB,EACtB,wBAAwB,EACxB,4BAA4B,EAC5B,KAAK,2BAA2B,GACjC,MAAM,4BAA4B,CAAC;AACpC,OAAO,EACL,qBAAqB,EACrB,qCAAqC,EACrC,KAAK,0BAA0B,GAChC,MAAM,4BAA4B,CAAC"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * @vertesia/fusion-ux
3
+ *
4
+ * Dynamic model-generated UI components for Vertesia.
5
+ *
6
+ * This package provides components that render model-generated templates
7
+ * with actual data. The model generates structure (template), the system
8
+ * provides values (data).
9
+ *
10
+ * @example
11
+ * ```tsx
12
+ * import {
13
+ * FusionFragmentRenderer,
14
+ * FusionFragmentProvider,
15
+ * FusionFragmentHandler,
16
+ * } from '@vertesia/fusion-ux';
17
+ *
18
+ * // Option 1: Direct rendering with template and data
19
+ * <FusionFragmentRenderer
20
+ * template={templateFromModel}
21
+ * data={actualData}
22
+ * onUpdate={handleUpdate}
23
+ * />
24
+ *
25
+ * // Option 2: Context-based rendering (for markdown code blocks)
26
+ * <FusionFragmentProvider data={fund.parameters} onUpdate={handleUpdate}>
27
+ * <MarkdownRenderer content={agentResponse} />
28
+ * </FusionFragmentProvider>
29
+ *
30
+ * // Option 3: Code block handler for markdown renderers
31
+ * const codeBlockRenderers = {
32
+ * 'fusion-fragment': ({ code }) => <FusionFragmentHandler code={code} />
33
+ * };
34
+ * ```
35
+ *
36
+ * @packageDocumentation
37
+ */
38
+ export type { FragmentTemplate, SectionTemplate, FieldTemplate, ColumnTemplate, ChartTemplate, VegaLiteSpec, ValidationResult, ValidationError, FusionFragmentRendererProps, SectionRendererProps, FieldRendererProps, FusionFragmentContextValue, ValidateFusionFragmentInput, } from './types.js';
39
+ export { FusionFragmentRenderer, SectionRenderer, FieldRenderer, FusionFragmentProvider, FusionFragmentHandler, useFusionFragmentContext, useFusionFragmentContextSafe, createFusionFragmentCodeBlockRenderer, type FusionFragmentProviderProps, type FusionFragmentHandlerProps, } from './fusion-fragment/index.js';
40
+ export { validateTemplate, parseAndValidateTemplate, FragmentTemplateSchema, SectionTemplateSchema, FieldTemplateSchema, findClosestKey, findSimilarKeys, formatValidationErrors, formatValidationSuccess, formatAvailableKeys, } from './validation/index.js';
41
+ export { generateTextPreview, generateSampleData, generateCompactPreview, } from './render/index.js';
42
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAGH,YAAY,EACV,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,cAAc,EACd,aAAa,EACb,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,2BAA2B,EAC3B,oBAAoB,EACpB,kBAAkB,EAClB,0BAA0B,EAC1B,2BAA2B,GAC5B,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,sBAAsB,EACtB,eAAe,EACf,aAAa,EACb,sBAAsB,EACtB,qBAAqB,EACrB,wBAAwB,EACxB,4BAA4B,EAC5B,qCAAqC,EACrC,KAAK,2BAA2B,EAChC,KAAK,0BAA0B,GAChC,MAAM,4BAA4B,CAAC;AAGpC,OAAO,EACL,gBAAgB,EAChB,wBAAwB,EACxB,sBAAsB,EACtB,qBAAqB,EACrB,mBAAmB,EACnB,cAAc,EACd,eAAe,EACf,sBAAsB,EACtB,uBAAuB,EACvB,mBAAmB,GACpB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Render module exports
3
+ *
4
+ * NOTE: All image rendering (renderToBuffer, renderToBase64, renderToDataUrl, renderToImage)
5
+ * has been moved to apps/tools/src/tools/fusion-ux/_shared/renderFragment.ts
6
+ * because it requires Node.js-only modules (@napi-rs/canvas) or DOM APIs that
7
+ * cannot be bundled for browser use.
8
+ *
9
+ * This module only exports text-based preview utilities that work in any environment.
10
+ */
11
+ export { generateTextPreview, generateSampleData, generateCompactPreview, } from './textPreview.js';
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/render/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EACL,mBAAmB,EACnB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Text preview generation for non-vision models
3
+ * Generates a text description of what the fragment will look like
4
+ */
5
+ import type { FragmentTemplate } from '../types.js';
6
+ /**
7
+ * Generate sample data for preview rendering
8
+ * Creates placeholder values based on field definitions
9
+ */
10
+ export declare function generateSampleData(template: FragmentTemplate, dataKeys: string[]): Record<string, unknown>;
11
+ /**
12
+ * Generate a text description of the template for preview
13
+ * Used for non-vision models
14
+ */
15
+ export declare function generateTextPreview(template: FragmentTemplate, dataKeys: string[]): string;
16
+ /**
17
+ * Generate a compact description for tool responses
18
+ */
19
+ export declare function generateCompactPreview(template: FragmentTemplate): string;
20
+ //# sourceMappingURL=textPreview.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"textPreview.d.ts","sourceRoot":"","sources":["../../../src/render/textPreview.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAiB,MAAM,aAAa,CAAC;AAEnE;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,gBAAgB,EAC1B,QAAQ,EAAE,MAAM,EAAE,GACjB,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAoBzB;AAuBD;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,gBAAgB,EAC1B,QAAQ,EAAE,MAAM,EAAE,GACjB,MAAM,CAiIR;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,MAAM,CAgCzE"}
@@ -0,0 +1,262 @@
1
+ /**
2
+ * Fusion Fragment Types
3
+ *
4
+ * These types define the structure of model-generated UI templates.
5
+ * Models generate templates (structure), the system provides data (values).
6
+ */
7
+ import type React from 'react';
8
+ /**
9
+ * Root template structure for a fusion fragment
10
+ */
11
+ export interface FragmentTemplate {
12
+ /** Optional title displayed at the top */
13
+ title?: string;
14
+ /** Type of entity being displayed - helps with context */
15
+ entityType?: 'fund' | 'scenario' | 'portfolio' | 'transaction' | 'custom';
16
+ /** Sections containing fields */
17
+ sections: SectionTemplate[];
18
+ /** Optional footer text */
19
+ footer?: string;
20
+ }
21
+ /**
22
+ * A section within the fragment, containing related fields, a table, or a chart
23
+ */
24
+ export interface SectionTemplate {
25
+ /** Section title/header */
26
+ title: string;
27
+ /** Layout mode for the fields */
28
+ layout?: 'grid-2' | 'grid-3' | 'grid-4' | 'list' | 'table' | 'chart';
29
+ /** Whether the section is initially collapsed */
30
+ collapsed?: boolean;
31
+ /** Fields in this section (for grid/list layouts) */
32
+ fields?: FieldTemplate[];
33
+ /** Table columns (for table layout) */
34
+ columns?: ColumnTemplate[];
35
+ /** Data key for table rows - points to an array in data */
36
+ dataKey?: string;
37
+ /** Chart specification (for chart layout) */
38
+ chart?: ChartTemplate;
39
+ }
40
+ /**
41
+ * A column definition for table layout
42
+ */
43
+ export interface ColumnTemplate {
44
+ /** Column header text */
45
+ header: string;
46
+ /** Key to look up in each row object */
47
+ key: string;
48
+ /** Display format */
49
+ format?: 'text' | 'number' | 'currency' | 'percent' | 'date' | 'boolean';
50
+ /** Column width (optional, e.g., '100px', '20%') */
51
+ width?: string;
52
+ /** Text alignment */
53
+ align?: 'left' | 'center' | 'right';
54
+ /** Currency code for currency format */
55
+ currency?: string;
56
+ /** Number of decimal places */
57
+ decimals?: number;
58
+ /** Highlight based on value (function key in data or static) */
59
+ highlight?: 'success' | 'warning' | 'error' | 'info';
60
+ }
61
+ /**
62
+ * Chart specification for chart layout (Vega-Lite based)
63
+ */
64
+ export interface ChartTemplate {
65
+ /** Chart title (displayed above the chart) */
66
+ title?: string;
67
+ /** Chart description */
68
+ description?: string;
69
+ /** Vega-Lite specification */
70
+ spec: VegaLiteSpec;
71
+ /** Chart height in pixels */
72
+ height?: number;
73
+ /** Chart width in pixels (defaults to container width) */
74
+ width?: number;
75
+ /** Data key - if provided, data from this key replaces spec.data.values */
76
+ dataKey?: string;
77
+ }
78
+ /**
79
+ * Vega-Lite specification (simplified subset)
80
+ * Full spec: https://vega.github.io/vega-lite/docs/spec.html
81
+ */
82
+ export interface VegaLiteSpec {
83
+ /** Schema URL (optional) */
84
+ $schema?: string;
85
+ /** Inline data or data source */
86
+ data?: {
87
+ /** Inline data values */
88
+ values?: Record<string, unknown>[];
89
+ /** URL to fetch data from */
90
+ url?: string;
91
+ /** Data format */
92
+ format?: {
93
+ type?: 'json' | 'csv' | 'tsv';
94
+ };
95
+ };
96
+ /** Mark type (bar, line, point, area, etc.) */
97
+ mark?: string | {
98
+ type: string;
99
+ [key: string]: unknown;
100
+ };
101
+ /** Encoding channels (x, y, color, size, etc.) */
102
+ encoding?: Record<string, unknown>;
103
+ /** Vertical concatenation */
104
+ vconcat?: VegaLiteSpec[];
105
+ /** Horizontal concatenation */
106
+ hconcat?: VegaLiteSpec[];
107
+ /** Layer multiple marks */
108
+ layer?: VegaLiteSpec[];
109
+ /** Transform operations */
110
+ transform?: Record<string, unknown>[];
111
+ /** Interactive parameters */
112
+ params?: Record<string, unknown>[];
113
+ /** Chart configuration */
114
+ config?: Record<string, unknown>;
115
+ /** Allow additional Vega-Lite properties */
116
+ [key: string]: unknown;
117
+ }
118
+ /**
119
+ * A single field definition
120
+ */
121
+ export interface FieldTemplate {
122
+ /** Display label for the field */
123
+ label: string;
124
+ /** Key to look up in data - REQUIRED */
125
+ key: string;
126
+ /** Display format */
127
+ format?: 'text' | 'number' | 'currency' | 'percent' | 'date' | 'boolean';
128
+ /** Unit to display after value (e.g., "years", "USD") */
129
+ unit?: string;
130
+ /** Whether this field is editable */
131
+ editable?: boolean;
132
+ /** Input type when editing */
133
+ inputType?: 'text' | 'number' | 'date' | 'select' | 'checkbox';
134
+ /** Options for select input type */
135
+ options?: Array<{
136
+ label: string;
137
+ value: string;
138
+ }>;
139
+ /** Min value for number inputs */
140
+ min?: number;
141
+ /** Max value for number inputs */
142
+ max?: number;
143
+ /** Visual highlight style */
144
+ highlight?: 'success' | 'warning' | 'error' | 'info';
145
+ /** Tooltip text on hover */
146
+ tooltip?: string;
147
+ /** Number of decimal places for number format */
148
+ decimals?: number;
149
+ /** Currency code for currency format */
150
+ currency?: string;
151
+ }
152
+ /**
153
+ * Result of template validation
154
+ */
155
+ export interface ValidationResult {
156
+ /** Whether the template is valid */
157
+ valid: boolean;
158
+ /** List of validation errors */
159
+ errors: ValidationError[];
160
+ }
161
+ /**
162
+ * A single validation error with path and suggestion
163
+ */
164
+ export interface ValidationError {
165
+ /** JSON path to the error (e.g., "sections[0].fields[2].key") */
166
+ path: string;
167
+ /** Human-readable error message */
168
+ message: string;
169
+ /** Suggested fix (for model feedback) */
170
+ suggestion?: string;
171
+ }
172
+ /**
173
+ * Props for the main FusionFragmentRenderer component
174
+ */
175
+ export interface FusionFragmentRendererProps {
176
+ /** The template structure (from model) */
177
+ template: FragmentTemplate;
178
+ /** Actual data values to display */
179
+ data: Record<string, unknown>;
180
+ /** Callback for field updates (direct mode) */
181
+ onUpdate?: (key: string, value: unknown) => Promise<void>;
182
+ /** Agent mode configuration */
183
+ agentMode?: {
184
+ enabled: true;
185
+ /** Send message to conversation */
186
+ sendMessage: (message: string) => void;
187
+ };
188
+ /** CSS class name */
189
+ className?: string;
190
+ }
191
+ /**
192
+ * Props for section renderer
193
+ */
194
+ export interface SectionRendererProps {
195
+ /** Section template */
196
+ section: SectionTemplate;
197
+ /** Data for fields */
198
+ data: Record<string, unknown>;
199
+ /** Update callback */
200
+ onUpdate?: (key: string, value: unknown) => Promise<void>;
201
+ /** Agent mode */
202
+ agentMode?: FusionFragmentRendererProps['agentMode'];
203
+ }
204
+ /**
205
+ * Props for field renderer
206
+ */
207
+ export interface FieldRendererProps {
208
+ /** Field template */
209
+ field: FieldTemplate;
210
+ /** Field value from data */
211
+ value: unknown;
212
+ /** Update callback */
213
+ onUpdate?: (value: unknown) => Promise<void>;
214
+ /** Agent mode */
215
+ agentMode?: FusionFragmentRendererProps['agentMode'];
216
+ }
217
+ /**
218
+ * Props for the injected chart component (matches @vertesia/ui VegaLiteChart)
219
+ */
220
+ export interface ChartComponentProps {
221
+ /** The chart specification in VegaLiteChartSpec format */
222
+ spec: {
223
+ library: 'vega-lite';
224
+ title?: string;
225
+ description?: string;
226
+ spec: Record<string, unknown>;
227
+ options?: {
228
+ height?: number;
229
+ };
230
+ };
231
+ /** Optional artifact run ID for resolving artifact: URLs */
232
+ artifactRunId?: string;
233
+ }
234
+ /**
235
+ * Context value for FusionFragment components
236
+ */
237
+ export interface FusionFragmentContextValue {
238
+ /** Data to display */
239
+ data: Record<string, unknown>;
240
+ /** Update callback */
241
+ onUpdate?: (key: string, value: unknown) => Promise<void>;
242
+ /** Send message to agent */
243
+ sendMessage?: (message: string) => void;
244
+ /** Optional chart component to render Vega-Lite charts (injected to avoid circular deps) */
245
+ ChartComponent?: React.ComponentType<ChartComponentProps>;
246
+ /** Optional artifact run ID for resolving artifact references */
247
+ artifactRunId?: string;
248
+ }
249
+ /**
250
+ * Input for validate_fusion_fragment tool
251
+ */
252
+ export interface ValidateFusionFragmentInput {
253
+ /** The template to validate */
254
+ template: FragmentTemplate;
255
+ /** Available data keys */
256
+ dataKeys: string[];
257
+ /** Optional sample data for preview rendering */
258
+ sampleData?: Record<string, unknown>;
259
+ /** Preview mode */
260
+ preview?: 'image' | 'text' | 'none';
261
+ }
262
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Error formatting utilities for model-friendly output
3
+ */
4
+ import type { ValidationError } from '../types.js';
5
+ /**
6
+ * Format validation errors as a model-friendly string
7
+ * @param errors - Array of validation errors
8
+ * @returns Formatted error message
9
+ */
10
+ export declare function formatValidationErrors(errors: ValidationError[]): string;
11
+ /**
12
+ * Format a successful validation with preview info
13
+ * @param template - The validated template
14
+ * @param dataKeys - Available data keys
15
+ * @returns Success message with preview
16
+ */
17
+ export declare function formatValidationSuccess(template: {
18
+ title?: string;
19
+ sections: Array<{
20
+ title: string;
21
+ fields: Array<{
22
+ label: string;
23
+ key: string;
24
+ format?: string;
25
+ }>;
26
+ }>;
27
+ }, dataKeys: string[]): string;
28
+ /**
29
+ * Format a list of available keys for model reference
30
+ * @param dataKeys - Available data keys
31
+ * @param groupByPrefix - Whether to group keys by common prefix
32
+ * @returns Formatted key list
33
+ */
34
+ export declare function formatAvailableKeys(dataKeys: string[], groupByPrefix?: boolean): string;
35
+ //# sourceMappingURL=formatErrors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"formatErrors.d.ts","sourceRoot":"","sources":["../../../src/validation/formatErrors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAEnD;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,CAiBxE;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,QAAQ,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,KAAK,CAAC;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,GAAG,EAAE,MAAM,CAAC;YAAC,MAAM,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAA;KAAE,CAAC,CAAA;CAAE,EAChI,QAAQ,EAAE,MAAM,EAAE,GACjB,MAAM,CA+BR;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,MAAM,EAAE,EAClB,aAAa,GAAE,OAAc,GAC5B,MAAM,CA8CR"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Fuzzy matching utilities for key suggestions
3
+ * Uses Levenshtein distance for finding similar keys
4
+ */
5
+ /**
6
+ * Calculate Levenshtein distance between two strings
7
+ */
8
+ export declare function levenshteinDistance(a: string, b: string): number;
9
+ /**
10
+ * Find the closest matching key from a list of valid keys
11
+ * @param input - The key that wasn't found
12
+ * @param validKeys - List of valid keys to search
13
+ * @param maxDistance - Maximum edit distance to consider (default: 3)
14
+ * @returns The closest key, or undefined if none are close enough
15
+ */
16
+ export declare function findClosestKey(input: string, validKeys: string[], maxDistance?: number): string | undefined;
17
+ /**
18
+ * Find multiple similar keys, sorted by relevance
19
+ * @param input - The key that wasn't found
20
+ * @param validKeys - List of valid keys to search
21
+ * @param maxResults - Maximum number of suggestions (default: 3)
22
+ * @returns Array of similar keys
23
+ */
24
+ export declare function findSimilarKeys(input: string, validKeys: string[], maxResults?: number): string[];
25
+ //# sourceMappingURL=fuzzyMatch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fuzzyMatch.d.ts","sourceRoot":"","sources":["../../../src/validation/fuzzyMatch.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CA0BhE;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EAAE,EACnB,WAAW,GAAE,MAAU,GACtB,MAAM,GAAG,SAAS,CAkCpB;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,MAAM,EAAE,EACnB,UAAU,GAAE,MAAU,GACrB,MAAM,EAAE,CAcV"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Validation module exports
3
+ */
4
+ export { validateTemplate, parseAndValidateTemplate } from './validateTemplate.js';
5
+ export { FragmentTemplateSchema, SectionTemplateSchema, FieldTemplateSchema } from './schemas.js';
6
+ export { findClosestKey, findSimilarKeys, levenshteinDistance } from './fuzzyMatch.js';
7
+ export { formatValidationErrors, formatValidationSuccess, formatAvailableKeys } from './formatErrors.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/validation/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,gBAAgB,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AACnF,OAAO,EAAE,sBAAsB,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAClG,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACvF,OAAO,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC"}