@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.
- package/LICENSE +13 -0
- package/README.md +160 -0
- package/lib/esm/fusion-fragment/ChartRenderer.js +70 -0
- package/lib/esm/fusion-fragment/ChartRenderer.js.map +1 -0
- package/lib/esm/fusion-fragment/FieldRenderer.js +153 -0
- package/lib/esm/fusion-fragment/FieldRenderer.js.map +1 -0
- package/lib/esm/fusion-fragment/FusionFragmentContext.js +53 -0
- package/lib/esm/fusion-fragment/FusionFragmentContext.js.map +1 -0
- package/lib/esm/fusion-fragment/FusionFragmentHandler.js +233 -0
- package/lib/esm/fusion-fragment/FusionFragmentHandler.js.map +1 -0
- package/lib/esm/fusion-fragment/FusionFragmentRenderer.js +108 -0
- package/lib/esm/fusion-fragment/FusionFragmentRenderer.js.map +1 -0
- package/lib/esm/fusion-fragment/SectionRenderer.js +134 -0
- package/lib/esm/fusion-fragment/SectionRenderer.js.map +1 -0
- package/lib/esm/fusion-fragment/TableRenderer.js +137 -0
- package/lib/esm/fusion-fragment/TableRenderer.js.map +1 -0
- package/lib/esm/fusion-fragment/index.js +11 -0
- package/lib/esm/fusion-fragment/index.js.map +1 -0
- package/lib/esm/index.js +44 -0
- package/lib/esm/index.js.map +1 -0
- package/lib/esm/render/index.js +12 -0
- package/lib/esm/render/index.js.map +1 -0
- package/lib/esm/render/textPreview.js +194 -0
- package/lib/esm/render/textPreview.js.map +1 -0
- package/lib/esm/types.js +8 -0
- package/lib/esm/types.js.map +1 -0
- package/lib/esm/validation/formatErrors.js +105 -0
- package/lib/esm/validation/formatErrors.js.map +1 -0
- package/lib/esm/validation/fuzzyMatch.js +87 -0
- package/lib/esm/validation/fuzzyMatch.js.map +1 -0
- package/lib/esm/validation/index.js +8 -0
- package/lib/esm/validation/index.js.map +1 -0
- package/lib/esm/validation/schemas.js +166 -0
- package/lib/esm/validation/schemas.js.map +1 -0
- package/lib/esm/validation/validateTemplate.js +247 -0
- package/lib/esm/validation/validateTemplate.js.map +1 -0
- package/lib/tsconfig.tsbuildinfo +1 -0
- package/lib/types/fusion-fragment/ChartRenderer.d.ts +23 -0
- package/lib/types/fusion-fragment/ChartRenderer.d.ts.map +1 -0
- package/lib/types/fusion-fragment/FieldRenderer.d.ts +12 -0
- package/lib/types/fusion-fragment/FieldRenderer.d.ts.map +1 -0
- package/lib/types/fusion-fragment/FusionFragmentContext.d.ts +48 -0
- package/lib/types/fusion-fragment/FusionFragmentContext.d.ts.map +1 -0
- package/lib/types/fusion-fragment/FusionFragmentHandler.d.ts +38 -0
- package/lib/types/fusion-fragment/FusionFragmentHandler.d.ts.map +1 -0
- package/lib/types/fusion-fragment/FusionFragmentRenderer.d.ts +32 -0
- package/lib/types/fusion-fragment/FusionFragmentRenderer.d.ts.map +1 -0
- package/lib/types/fusion-fragment/SectionRenderer.d.ts +12 -0
- package/lib/types/fusion-fragment/SectionRenderer.d.ts.map +1 -0
- package/lib/types/fusion-fragment/TableRenderer.d.ts +15 -0
- package/lib/types/fusion-fragment/TableRenderer.d.ts.map +1 -0
- package/lib/types/fusion-fragment/index.d.ts +11 -0
- package/lib/types/fusion-fragment/index.d.ts.map +1 -0
- package/lib/types/index.d.ts +42 -0
- package/lib/types/index.d.ts.map +1 -0
- package/lib/types/render/index.d.ts +12 -0
- package/lib/types/render/index.d.ts.map +1 -0
- package/lib/types/render/textPreview.d.ts +20 -0
- package/lib/types/render/textPreview.d.ts.map +1 -0
- package/lib/types/types.d.ts +262 -0
- package/lib/types/types.d.ts.map +1 -0
- package/lib/types/validation/formatErrors.d.ts +35 -0
- package/lib/types/validation/formatErrors.d.ts.map +1 -0
- package/lib/types/validation/fuzzyMatch.d.ts +25 -0
- package/lib/types/validation/fuzzyMatch.d.ts.map +1 -0
- package/lib/types/validation/index.d.ts +8 -0
- package/lib/types/validation/index.d.ts.map +1 -0
- package/lib/types/validation/schemas.d.ts +67 -0
- package/lib/types/validation/schemas.d.ts.map +1 -0
- package/lib/types/validation/validateTemplate.d.ts +22 -0
- package/lib/types/validation/validateTemplate.d.ts.map +1 -0
- package/lib/vertesia-fusion-ux.js +2 -0
- package/lib/vertesia-fusion-ux.js.map +1 -0
- package/package.json +68 -0
- package/src/fusion-fragment/ChartRenderer.tsx +136 -0
- package/src/fusion-fragment/FieldRenderer.tsx +199 -0
- package/src/fusion-fragment/FusionFragmentContext.tsx +92 -0
- package/src/fusion-fragment/FusionFragmentHandler.tsx +313 -0
- package/src/fusion-fragment/FusionFragmentRenderer.tsx +156 -0
- package/src/fusion-fragment/SectionRenderer.tsx +196 -0
- package/src/fusion-fragment/TableRenderer.tsx +204 -0
- package/src/fusion-fragment/index.ts +20 -0
- package/src/index.ts +89 -0
- package/src/render/index.ts +16 -0
- package/src/render/textPreview.ts +231 -0
- package/src/types.ts +278 -0
- package/src/validation/formatErrors.ts +128 -0
- package/src/validation/fuzzyMatch.ts +109 -0
- package/src/validation/index.ts +8 -0
- package/src/validation/schemas.ts +175 -0
- 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"}
|