@01.software/sdk 0.5.1 → 0.5.3

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 (37) hide show
  1. package/dist/auth.d.cts +1 -1
  2. package/dist/auth.d.ts +1 -1
  3. package/dist/{const-CDpRB7XK.d.cts → const-C9I6r5Wa.d.cts} +1 -1
  4. package/dist/{const-DQIDvvB-.d.ts → const-JbuUTzeh.d.ts} +1 -1
  5. package/dist/index.d.cts +6 -6
  6. package/dist/index.d.ts +6 -6
  7. package/dist/{payload-types-C-keX5go.d.cts → payload-types-D8fN_vZR.d.cts} +17 -1
  8. package/dist/{payload-types-C-keX5go.d.ts → payload-types-D8fN_vZR.d.ts} +17 -1
  9. package/dist/realtime.d.cts +2 -2
  10. package/dist/realtime.d.ts +2 -2
  11. package/dist/{server-B80o7igg.d.cts → server-StNHlSjW.d.cts} +5 -1
  12. package/dist/{server-B80o7igg.d.ts → server-StNHlSjW.d.ts} +5 -1
  13. package/dist/ui/code-block.cjs +5 -1
  14. package/dist/ui/code-block.cjs.map +1 -1
  15. package/dist/ui/code-block.js +5 -1
  16. package/dist/ui/code-block.js.map +1 -1
  17. package/dist/ui/flow/server.cjs +101 -34
  18. package/dist/ui/flow/server.cjs.map +1 -1
  19. package/dist/ui/flow/server.d.cts +1 -1
  20. package/dist/ui/flow/server.d.ts +1 -1
  21. package/dist/ui/flow/server.js +101 -34
  22. package/dist/ui/flow/server.js.map +1 -1
  23. package/dist/ui/flow.cjs +718 -180
  24. package/dist/ui/flow.cjs.map +1 -1
  25. package/dist/ui/flow.d.cts +77 -11
  26. package/dist/ui/flow.d.ts +77 -11
  27. package/dist/ui/flow.js +705 -167
  28. package/dist/ui/flow.js.map +1 -1
  29. package/dist/ui/form.d.cts +1 -1
  30. package/dist/ui/form.d.ts +1 -1
  31. package/dist/ui/video.d.cts +1 -1
  32. package/dist/ui/video.d.ts +1 -1
  33. package/dist/{webhook-DseJdRFT.d.ts → webhook-BkwMrrL1.d.ts} +2 -2
  34. package/dist/{webhook-Dqe2_xMx.d.cts → webhook-Dbx-pRib.d.cts} +2 -2
  35. package/dist/webhook.d.cts +3 -3
  36. package/dist/webhook.d.ts +3 -3
  37. package/package.json +5 -3
@@ -1,13 +1,10 @@
1
- import { N as NodeTypeDef, E as EdgeTypeDef, C as CanvasData, F as FlowNode, D as DynamicNodeSlotProps, a as FlowEdge, b as FrameNodeSlotProps, c as EdgeSlotProps, d as NodeWrapperSlotProps, e as FlowViewport, f as FlowBounds } from '../server-B80o7igg.cjs';
2
- export { i as DynamicNodeData, h as FlowNodeData, g as FlowNodePosition, s as FrameData, j as FrameNodeData, k as NodeTypeFieldDef, P as PrefetchFlowOptions, S as SDKClient, U as UseFlowOptions, n as UseFlowResult, r as getFrameData, q as getFrames, o as getNodeBounds, l as isDynamicNode, m as isFrameNode, p as prefetchFlow, u as useFlow } from '../server-B80o7igg.cjs';
1
+ import { C as CanvasData, N as NodeTypeDef, E as EdgeTypeDef, F as FlowNode, a as NodeTypeFieldDef, D as DynamicNodeSlotProps, b as FlowEdge, c as FrameNodeSlotProps, d as EdgeSlotProps, e as NodeWrapperSlotProps, f as FlowViewport, g as FlowBounds, S as SDKClient, h as FrameData } from '../server-StNHlSjW.cjs';
2
+ export { o as BUILT_IN_EDGE_TYPES, B as BUILT_IN_NODE_TYPES, k as DynamicNodeData, j as FlowNodeData, i as FlowNodePosition, l as FrameNodeData, P as PrefetchFlowOptions, U as UseFlowOptions, p as UseFlowResult, t as getFrameData, s as getFrames, r as getNodeBounds, m as isDynamicNode, n as isFrameNode, q as prefetchFlow, u as useFlow } from '../server-StNHlSjW.cjs';
3
3
  import { Edge } from '@xyflow/react';
4
4
  import React from 'react';
5
+ import { I as ImageData } from '../image-TT8lTsk5.cjs';
5
6
  import '@tanstack/react-query';
6
7
 
7
- declare const BUILT_IN_NODE_TYPES: NodeTypeDef[];
8
-
9
- declare const BUILT_IN_EDGE_TYPES: EdgeTypeDef[];
10
-
11
8
  interface UseFlowDataOptions {
12
9
  /** Canvas data from Flow document's `canvas` field */
13
10
  data: CanvasData | undefined;
@@ -44,6 +41,31 @@ interface CodeComponentProps {
44
41
  declare function compileTemplate(code: string, slug: string): React.FC<CodeComponentProps> | null;
45
42
  declare function clearTemplateCache(): void;
46
43
 
44
+ declare function renderFieldValue(key: string, val: unknown, fieldDef?: NodeTypeFieldDef): React.ReactNode;
45
+
46
+ /** Extract an image field value with proper typing. */
47
+ declare function getImageField(fields: Record<string, unknown>, name: string): ImageData | undefined;
48
+ /** Extract a text/textarea/url/color field value. */
49
+ declare function getTextField(fields: Record<string, unknown>, name: string): string | undefined;
50
+ /** Extract a number field value. */
51
+ declare function getNumberField(fields: Record<string, unknown>, name: string): number | undefined;
52
+ /** Extract a toggle/boolean field value. */
53
+ declare function getBooleanField(fields: Record<string, unknown>, name: string): boolean | undefined;
54
+
55
+ /**
56
+ * Sanitize tenant-authored CSS using PostCSS AST parsing.
57
+ *
58
+ * - At-rules: allowlist only (@keyframes, @media, @supports, @container, @layer)
59
+ * - Declarations: blocks url(), expression(), paint(), -moz-binding
60
+ * - Selectors: removes :root/html/body targets; scopes remainder under scopeClass
61
+ *
62
+ * Returns empty string on parse failure (fail-closed).
63
+ *
64
+ * @param css - Raw CSS string from tenant
65
+ * @param scopeClass - Container class to scope selectors (e.g. 'flow-node--my-type')
66
+ */
67
+ declare function sanitizeCSS(css: string, scopeClass?: string): string;
68
+
47
69
  /**
48
70
  * Renders a Flow canvas in read-only mode.
49
71
  *
@@ -83,11 +105,13 @@ interface FlowRendererProps {
83
105
  onNodeMouseLeave?: (event: React.MouseEvent, node: FlowNode) => void;
84
106
  /** Called when an edge is clicked */
85
107
  onEdgeClick?: (event: React.MouseEvent, edge: FlowEdge) => void;
86
- /** S1: Custom frame node renderer. Should be a stable reference (memoize or define outside render). */
108
+ /** S1: Custom frame node renderer */
87
109
  frameRenderer?: React.ComponentType<FrameNodeSlotProps>;
88
- /** S2: Custom edge renderers by edge type slug. Should be a stable reference (memoize or define outside render). */
110
+ /** Hide frame nodes. Shorthand for `frameRenderer={() => null}`. Default: false */
111
+ hideFrames?: boolean;
112
+ /** S2: Custom edge renderers by edge type slug */
89
113
  edgeRenderers?: Record<string, React.ComponentType<EdgeSlotProps>>;
90
- /** S3: Wraps every dynamic node's rendered content. Should be a stable reference (memoize or define outside render). */
114
+ /** S3: Wraps every dynamic node's rendered content */
91
115
  nodeWrapper?: React.ComponentType<NodeWrapperSlotProps>;
92
116
  /** S4: Show controls (default: false) */
93
117
  controls?: boolean;
@@ -122,6 +146,48 @@ interface FlowRendererProps {
122
146
  /** Maximum zoom level */
123
147
  maxZoom?: number;
124
148
  }
125
- declare function FlowRenderer({ data, className, style, nodeRenderers, nodeTypeDefs, edgeTypeDefs, background, interactive, fitView, onNodeClick, onNodeDoubleClick, onNodeContextMenu, onNodeMouseEnter, onNodeMouseLeave, onEdgeClick, frameRenderer, edgeRenderers, nodeWrapper, controls, minimap, minimapNodeColor, children, renderNode, onViewportChange, defaultViewport: defaultViewportProp, bounds, clampBounds, focusPadding, focusAnimation, focusMode, responsiveFit, translateExtent: translateExtentProp, minZoom: minZoomProp, maxZoom: maxZoomProp, }: FlowRendererProps): React.JSX.Element | null;
149
+ declare function FlowRenderer({ data, className, style, nodeRenderers, nodeTypeDefs, edgeTypeDefs, background, interactive, fitView, onNodeClick, onNodeDoubleClick, onNodeContextMenu, onNodeMouseEnter, onNodeMouseLeave, onEdgeClick, frameRenderer, hideFrames, edgeRenderers, nodeWrapper, controls, minimap, minimapNodeColor, children, renderNode, onViewportChange, defaultViewport: defaultViewportProp, bounds, clampBounds, focusPadding, focusAnimation, focusMode, responsiveFit, translateExtent: translateExtentProp, minZoom: minZoomProp, maxZoom: maxZoomProp, }: FlowRendererProps): React.JSX.Element | null;
150
+
151
+ interface FlowFrameProps extends Omit<FlowRendererProps, 'data' | 'nodeTypeDefs' | 'edgeTypeDefs' | 'bounds' | 'clampBounds' | 'fitView' | 'hideFrames' | 'translateExtent' | 'defaultViewport'> {
152
+ /** SDK client instance (Client or ServerClient) */
153
+ client: SDKClient;
154
+ /** Flow slug (URL-friendly identifier) */
155
+ slug?: string;
156
+ /** Flow document ID (UUID) */
157
+ id?: string;
158
+ /** Frame node ID to render */
159
+ frameId: string;
160
+ /** Content rendered while loading (default: null) */
161
+ loading?: React.ReactNode;
162
+ /** Render function for error state (default: returns null) */
163
+ error?: (err: Error) => React.ReactNode;
164
+ /**
165
+ * Called when frame data is ready — escape hatch for raw data access.
166
+ * Use `prefetchFlow({ client, slug })` for SSR.
167
+ */
168
+ onDataReady?: (frameData: FrameData, flow: Record<string, unknown>) => void;
169
+ }
170
+ /**
171
+ * Renders a single frame from a Flow document.
172
+ *
173
+ * Fetches the flow via `useFlow`, extracts the frame with `getFrameData`,
174
+ * and passes the result to `FlowRenderer` with correct bounds wired.
175
+ *
176
+ * For SSR / prefetching use the existing `prefetchFlow({ client, slug })`.
177
+ *
178
+ * @example
179
+ * ```tsx
180
+ * import { FlowFrame } from '@01.software/sdk/ui/flow'
181
+ *
182
+ * export default function Home() {
183
+ * return (
184
+ * <div className="w-full h-screen">
185
+ * <FlowFrame client={client} slug="home" frameId={FRAME_ID} interactive />
186
+ * </div>
187
+ * )
188
+ * }
189
+ * ```
190
+ */
191
+ declare function FlowFrame({ client, slug, id, frameId, loading, error: renderError, onDataReady, ...rendererProps }: FlowFrameProps): React.JSX.Element | null;
126
192
 
127
- export { BUILT_IN_EDGE_TYPES, BUILT_IN_NODE_TYPES, CanvasData, type CodeComponentProps, DynamicNodeSlotProps, EdgeSlotProps, EdgeTypeDef, FlowBounds, FlowEdge, FlowNode, FlowRenderer, type FlowRendererProps, FlowViewport, FrameNodeSlotProps, NodeTypeDef, NodeWrapperSlotProps, type UseFlowDataOptions, type UseFlowDataResult, clearTemplateCache, compileTemplate, useFlowData };
193
+ export { CanvasData, type CodeComponentProps, DynamicNodeSlotProps, EdgeSlotProps, EdgeTypeDef, FlowBounds, FlowEdge, FlowFrame, type FlowFrameProps, FlowNode, FlowRenderer, type FlowRendererProps, FlowViewport, FrameData, FrameNodeSlotProps, NodeTypeDef, NodeTypeFieldDef, NodeWrapperSlotProps, SDKClient, type UseFlowDataOptions, type UseFlowDataResult, clearTemplateCache, compileTemplate, getBooleanField, getImageField, getNumberField, getTextField, renderFieldValue, sanitizeCSS, useFlowData };
package/dist/ui/flow.d.ts CHANGED
@@ -1,13 +1,10 @@
1
- import { N as NodeTypeDef, E as EdgeTypeDef, C as CanvasData, F as FlowNode, D as DynamicNodeSlotProps, a as FlowEdge, b as FrameNodeSlotProps, c as EdgeSlotProps, d as NodeWrapperSlotProps, e as FlowViewport, f as FlowBounds } from '../server-B80o7igg.js';
2
- export { i as DynamicNodeData, h as FlowNodeData, g as FlowNodePosition, s as FrameData, j as FrameNodeData, k as NodeTypeFieldDef, P as PrefetchFlowOptions, S as SDKClient, U as UseFlowOptions, n as UseFlowResult, r as getFrameData, q as getFrames, o as getNodeBounds, l as isDynamicNode, m as isFrameNode, p as prefetchFlow, u as useFlow } from '../server-B80o7igg.js';
1
+ import { C as CanvasData, N as NodeTypeDef, E as EdgeTypeDef, F as FlowNode, a as NodeTypeFieldDef, D as DynamicNodeSlotProps, b as FlowEdge, c as FrameNodeSlotProps, d as EdgeSlotProps, e as NodeWrapperSlotProps, f as FlowViewport, g as FlowBounds, S as SDKClient, h as FrameData } from '../server-StNHlSjW.js';
2
+ export { o as BUILT_IN_EDGE_TYPES, B as BUILT_IN_NODE_TYPES, k as DynamicNodeData, j as FlowNodeData, i as FlowNodePosition, l as FrameNodeData, P as PrefetchFlowOptions, U as UseFlowOptions, p as UseFlowResult, t as getFrameData, s as getFrames, r as getNodeBounds, m as isDynamicNode, n as isFrameNode, q as prefetchFlow, u as useFlow } from '../server-StNHlSjW.js';
3
3
  import { Edge } from '@xyflow/react';
4
4
  import React from 'react';
5
+ import { I as ImageData } from '../image-TT8lTsk5.js';
5
6
  import '@tanstack/react-query';
6
7
 
7
- declare const BUILT_IN_NODE_TYPES: NodeTypeDef[];
8
-
9
- declare const BUILT_IN_EDGE_TYPES: EdgeTypeDef[];
10
-
11
8
  interface UseFlowDataOptions {
12
9
  /** Canvas data from Flow document's `canvas` field */
13
10
  data: CanvasData | undefined;
@@ -44,6 +41,31 @@ interface CodeComponentProps {
44
41
  declare function compileTemplate(code: string, slug: string): React.FC<CodeComponentProps> | null;
45
42
  declare function clearTemplateCache(): void;
46
43
 
44
+ declare function renderFieldValue(key: string, val: unknown, fieldDef?: NodeTypeFieldDef): React.ReactNode;
45
+
46
+ /** Extract an image field value with proper typing. */
47
+ declare function getImageField(fields: Record<string, unknown>, name: string): ImageData | undefined;
48
+ /** Extract a text/textarea/url/color field value. */
49
+ declare function getTextField(fields: Record<string, unknown>, name: string): string | undefined;
50
+ /** Extract a number field value. */
51
+ declare function getNumberField(fields: Record<string, unknown>, name: string): number | undefined;
52
+ /** Extract a toggle/boolean field value. */
53
+ declare function getBooleanField(fields: Record<string, unknown>, name: string): boolean | undefined;
54
+
55
+ /**
56
+ * Sanitize tenant-authored CSS using PostCSS AST parsing.
57
+ *
58
+ * - At-rules: allowlist only (@keyframes, @media, @supports, @container, @layer)
59
+ * - Declarations: blocks url(), expression(), paint(), -moz-binding
60
+ * - Selectors: removes :root/html/body targets; scopes remainder under scopeClass
61
+ *
62
+ * Returns empty string on parse failure (fail-closed).
63
+ *
64
+ * @param css - Raw CSS string from tenant
65
+ * @param scopeClass - Container class to scope selectors (e.g. 'flow-node--my-type')
66
+ */
67
+ declare function sanitizeCSS(css: string, scopeClass?: string): string;
68
+
47
69
  /**
48
70
  * Renders a Flow canvas in read-only mode.
49
71
  *
@@ -83,11 +105,13 @@ interface FlowRendererProps {
83
105
  onNodeMouseLeave?: (event: React.MouseEvent, node: FlowNode) => void;
84
106
  /** Called when an edge is clicked */
85
107
  onEdgeClick?: (event: React.MouseEvent, edge: FlowEdge) => void;
86
- /** S1: Custom frame node renderer. Should be a stable reference (memoize or define outside render). */
108
+ /** S1: Custom frame node renderer */
87
109
  frameRenderer?: React.ComponentType<FrameNodeSlotProps>;
88
- /** S2: Custom edge renderers by edge type slug. Should be a stable reference (memoize or define outside render). */
110
+ /** Hide frame nodes. Shorthand for `frameRenderer={() => null}`. Default: false */
111
+ hideFrames?: boolean;
112
+ /** S2: Custom edge renderers by edge type slug */
89
113
  edgeRenderers?: Record<string, React.ComponentType<EdgeSlotProps>>;
90
- /** S3: Wraps every dynamic node's rendered content. Should be a stable reference (memoize or define outside render). */
114
+ /** S3: Wraps every dynamic node's rendered content */
91
115
  nodeWrapper?: React.ComponentType<NodeWrapperSlotProps>;
92
116
  /** S4: Show controls (default: false) */
93
117
  controls?: boolean;
@@ -122,6 +146,48 @@ interface FlowRendererProps {
122
146
  /** Maximum zoom level */
123
147
  maxZoom?: number;
124
148
  }
125
- declare function FlowRenderer({ data, className, style, nodeRenderers, nodeTypeDefs, edgeTypeDefs, background, interactive, fitView, onNodeClick, onNodeDoubleClick, onNodeContextMenu, onNodeMouseEnter, onNodeMouseLeave, onEdgeClick, frameRenderer, edgeRenderers, nodeWrapper, controls, minimap, minimapNodeColor, children, renderNode, onViewportChange, defaultViewport: defaultViewportProp, bounds, clampBounds, focusPadding, focusAnimation, focusMode, responsiveFit, translateExtent: translateExtentProp, minZoom: minZoomProp, maxZoom: maxZoomProp, }: FlowRendererProps): React.JSX.Element | null;
149
+ declare function FlowRenderer({ data, className, style, nodeRenderers, nodeTypeDefs, edgeTypeDefs, background, interactive, fitView, onNodeClick, onNodeDoubleClick, onNodeContextMenu, onNodeMouseEnter, onNodeMouseLeave, onEdgeClick, frameRenderer, hideFrames, edgeRenderers, nodeWrapper, controls, minimap, minimapNodeColor, children, renderNode, onViewportChange, defaultViewport: defaultViewportProp, bounds, clampBounds, focusPadding, focusAnimation, focusMode, responsiveFit, translateExtent: translateExtentProp, minZoom: minZoomProp, maxZoom: maxZoomProp, }: FlowRendererProps): React.JSX.Element | null;
150
+
151
+ interface FlowFrameProps extends Omit<FlowRendererProps, 'data' | 'nodeTypeDefs' | 'edgeTypeDefs' | 'bounds' | 'clampBounds' | 'fitView' | 'hideFrames' | 'translateExtent' | 'defaultViewport'> {
152
+ /** SDK client instance (Client or ServerClient) */
153
+ client: SDKClient;
154
+ /** Flow slug (URL-friendly identifier) */
155
+ slug?: string;
156
+ /** Flow document ID (UUID) */
157
+ id?: string;
158
+ /** Frame node ID to render */
159
+ frameId: string;
160
+ /** Content rendered while loading (default: null) */
161
+ loading?: React.ReactNode;
162
+ /** Render function for error state (default: returns null) */
163
+ error?: (err: Error) => React.ReactNode;
164
+ /**
165
+ * Called when frame data is ready — escape hatch for raw data access.
166
+ * Use `prefetchFlow({ client, slug })` for SSR.
167
+ */
168
+ onDataReady?: (frameData: FrameData, flow: Record<string, unknown>) => void;
169
+ }
170
+ /**
171
+ * Renders a single frame from a Flow document.
172
+ *
173
+ * Fetches the flow via `useFlow`, extracts the frame with `getFrameData`,
174
+ * and passes the result to `FlowRenderer` with correct bounds wired.
175
+ *
176
+ * For SSR / prefetching use the existing `prefetchFlow({ client, slug })`.
177
+ *
178
+ * @example
179
+ * ```tsx
180
+ * import { FlowFrame } from '@01.software/sdk/ui/flow'
181
+ *
182
+ * export default function Home() {
183
+ * return (
184
+ * <div className="w-full h-screen">
185
+ * <FlowFrame client={client} slug="home" frameId={FRAME_ID} interactive />
186
+ * </div>
187
+ * )
188
+ * }
189
+ * ```
190
+ */
191
+ declare function FlowFrame({ client, slug, id, frameId, loading, error: renderError, onDataReady, ...rendererProps }: FlowFrameProps): React.JSX.Element | null;
126
192
 
127
- export { BUILT_IN_EDGE_TYPES, BUILT_IN_NODE_TYPES, CanvasData, type CodeComponentProps, DynamicNodeSlotProps, EdgeSlotProps, EdgeTypeDef, FlowBounds, FlowEdge, FlowNode, FlowRenderer, type FlowRendererProps, FlowViewport, FrameNodeSlotProps, NodeTypeDef, NodeWrapperSlotProps, type UseFlowDataOptions, type UseFlowDataResult, clearTemplateCache, compileTemplate, useFlowData };
193
+ export { CanvasData, type CodeComponentProps, DynamicNodeSlotProps, EdgeSlotProps, EdgeTypeDef, FlowBounds, FlowEdge, FlowFrame, type FlowFrameProps, FlowNode, FlowRenderer, type FlowRendererProps, FlowViewport, FrameData, FrameNodeSlotProps, NodeTypeDef, NodeTypeFieldDef, NodeWrapperSlotProps, SDKClient, type UseFlowDataOptions, type UseFlowDataResult, clearTemplateCache, compileTemplate, getBooleanField, getImageField, getNumberField, getTextField, renderFieldValue, sanitizeCSS, useFlowData };