@kubuild/editor 0.1.3 → 0.3.0

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 (173) hide show
  1. package/README.md +106 -0
  2. package/dist/ai/enhance-node.d.ts +100 -0
  3. package/dist/ai/enhance-node.d.ts.map +1 -0
  4. package/dist/ai/generate-page.d.ts +80 -0
  5. package/dist/ai/generate-page.d.ts.map +1 -0
  6. package/dist/ai/index.d.ts +3 -0
  7. package/dist/ai/index.d.ts.map +1 -0
  8. package/dist/components/action-builder/action-branch-editor.d.ts +18 -0
  9. package/dist/components/action-builder/action-branch-editor.d.ts.map +1 -0
  10. package/dist/components/action-builder/action-builder-modal.d.ts +32 -0
  11. package/dist/components/action-builder/action-builder-modal.d.ts.map +1 -0
  12. package/dist/components/action-builder/action-step-form.d.ts +71 -0
  13. package/dist/components/action-builder/action-step-form.d.ts.map +1 -0
  14. package/dist/components/action-builder/index.d.ts +4 -0
  15. package/dist/components/action-builder/index.d.ts.map +1 -0
  16. package/dist/components/ai-chat/ai-chat-panel.d.ts +66 -0
  17. package/dist/components/ai-chat/ai-chat-panel.d.ts.map +1 -0
  18. package/dist/components/ai-chat/index.d.ts +2 -0
  19. package/dist/components/ai-chat/index.d.ts.map +1 -0
  20. package/dist/components/canvas/breadcrumbs.d.ts.map +1 -0
  21. package/dist/components/canvas/canvas-pan-zoom.d.ts +61 -0
  22. package/dist/components/canvas/canvas-pan-zoom.d.ts.map +1 -0
  23. package/dist/components/canvas/canvas.d.ts +63 -0
  24. package/dist/components/canvas/canvas.d.ts.map +1 -0
  25. package/dist/components/canvas/distance-meter.d.ts +27 -0
  26. package/dist/components/canvas/distance-meter.d.ts.map +1 -0
  27. package/dist/components/canvas/floating-badges.d.ts.map +1 -0
  28. package/dist/components/canvas/grid-guidelines-overlay.d.ts +18 -0
  29. package/dist/components/canvas/grid-guidelines-overlay.d.ts.map +1 -0
  30. package/dist/components/canvas/index.d.ts +13 -0
  31. package/dist/components/canvas/index.d.ts.map +1 -0
  32. package/dist/components/canvas/marquee-selection.d.ts +25 -0
  33. package/dist/components/canvas/marquee-selection.d.ts.map +1 -0
  34. package/dist/components/canvas/multi-device-preview.d.ts +30 -0
  35. package/dist/components/canvas/multi-device-preview.d.ts.map +1 -0
  36. package/dist/components/canvas/resize-handles.d.ts +18 -0
  37. package/dist/components/canvas/resize-handles.d.ts.map +1 -0
  38. package/dist/components/canvas/smart-guides.d.ts +37 -0
  39. package/dist/components/canvas/smart-guides.d.ts.map +1 -0
  40. package/dist/components/canvas/spacing-sliders.d.ts +21 -0
  41. package/dist/components/canvas/spacing-sliders.d.ts.map +1 -0
  42. package/dist/components/canvas/viewport-resizer.d.ts +83 -0
  43. package/dist/components/canvas/viewport-resizer.d.ts.map +1 -0
  44. package/dist/components/index.d.ts +10 -0
  45. package/dist/components/index.d.ts.map +1 -0
  46. package/dist/{editor.d.ts → components/layout/editor.d.ts} +12 -1
  47. package/dist/components/layout/editor.d.ts.map +1 -0
  48. package/dist/components/layout/index.d.ts +3 -0
  49. package/dist/components/layout/index.d.ts.map +1 -0
  50. package/dist/components/layout/toolbar.d.ts +17 -0
  51. package/dist/components/layout/toolbar.d.ts.map +1 -0
  52. package/dist/components/modals/asset-manager-modal.d.ts.map +1 -0
  53. package/dist/components/modals/code-viewer-modal.d.ts.map +1 -0
  54. package/dist/components/modals/import-modal.d.ts.map +1 -0
  55. package/dist/components/modals/index.d.ts +4 -0
  56. package/dist/components/modals/index.d.ts.map +1 -0
  57. package/dist/components/panels/action-debugger-panel.d.ts +11 -0
  58. package/dist/components/panels/action-debugger-panel.d.ts.map +1 -0
  59. package/dist/components/panels/action-prop-control.d.ts +30 -0
  60. package/dist/components/panels/action-prop-control.d.ts.map +1 -0
  61. package/dist/components/panels/blocks-panel.d.ts.map +1 -0
  62. package/dist/{component-panel.d.ts → components/panels/component-panel.d.ts} +2 -0
  63. package/dist/components/panels/component-panel.d.ts.map +1 -0
  64. package/dist/components/panels/form-validation-rules-panel.d.ts +27 -0
  65. package/dist/components/panels/form-validation-rules-panel.d.ts.map +1 -0
  66. package/dist/components/panels/index.d.ts +10 -0
  67. package/dist/components/panels/index.d.ts.map +1 -0
  68. package/dist/{inspector-panel.d.ts → components/panels/inspector-panel.d.ts} +7 -1
  69. package/dist/components/panels/inspector-panel.d.ts.map +1 -0
  70. package/dist/{layers-panel.d.ts → components/panels/layers-panel.d.ts} +4 -0
  71. package/dist/components/panels/layers-panel.d.ts.map +1 -0
  72. package/dist/{left-sidebar.d.ts → components/panels/left-sidebar.d.ts} +1 -1
  73. package/dist/components/panels/left-sidebar.d.ts.map +1 -0
  74. package/dist/{traits-panel.d.ts → components/panels/traits-panel.d.ts} +3 -1
  75. package/dist/components/panels/traits-panel.d.ts.map +1 -0
  76. package/dist/components/style-manager/auto-layout-controls.d.ts +24 -0
  77. package/dist/components/style-manager/auto-layout-controls.d.ts.map +1 -0
  78. package/dist/components/style-manager/box-model-editor.d.ts.map +1 -0
  79. package/dist/components/style-manager/color-gradient-picker.d.ts +35 -0
  80. package/dist/components/style-manager/color-gradient-picker.d.ts.map +1 -0
  81. package/dist/components/style-manager/design-tokens-panel.d.ts +30 -0
  82. package/dist/components/style-manager/design-tokens-panel.d.ts.map +1 -0
  83. package/dist/{dimension-sector-controls.d.ts → components/style-manager/dimension-sector-controls.d.ts} +12 -1
  84. package/dist/components/style-manager/dimension-sector-controls.d.ts.map +1 -0
  85. package/dist/components/style-manager/effects-sector-controls.d.ts +52 -0
  86. package/dist/components/style-manager/effects-sector-controls.d.ts.map +1 -0
  87. package/dist/components/style-manager/grid-controls.d.ts +19 -0
  88. package/dist/components/style-manager/grid-controls.d.ts.map +1 -0
  89. package/dist/components/style-manager/index.d.ts +12 -0
  90. package/dist/components/style-manager/index.d.ts.map +1 -0
  91. package/dist/components/style-manager/inheritance-indicator.d.ts +52 -0
  92. package/dist/components/style-manager/inheritance-indicator.d.ts.map +1 -0
  93. package/dist/components/style-manager/motion-sector-controls.d.ts.map +1 -0
  94. package/dist/{style-manager-accordion.d.ts → components/style-manager/style-manager-accordion.d.ts} +10 -0
  95. package/dist/components/style-manager/style-manager-accordion.d.ts.map +1 -0
  96. package/dist/{typography-sector-controls.d.ts → components/style-manager/typography-sector-controls.d.ts} +4 -0
  97. package/dist/components/style-manager/typography-sector-controls.d.ts.map +1 -0
  98. package/dist/components/table-editor/index.d.ts +2 -0
  99. package/dist/components/table-editor/index.d.ts.map +1 -0
  100. package/dist/components/table-editor/table-spreadsheet-editor.d.ts.map +1 -0
  101. package/dist/components/ui/code-highlighter.d.ts.map +1 -0
  102. package/dist/components/ui/icons.d.ts.map +1 -0
  103. package/dist/components/ui/index.d.ts +5 -0
  104. package/dist/components/ui/index.d.ts.map +1 -0
  105. package/dist/components/ui/variable-autocomplete-input.d.ts +42 -0
  106. package/dist/components/ui/variable-autocomplete-input.d.ts.map +1 -0
  107. package/dist/components/ui/variable-picker.d.ts.map +1 -0
  108. package/dist/config/ai-config.d.ts +69 -0
  109. package/dist/config/ai-config.d.ts.map +1 -0
  110. package/dist/{config.d.ts → config/config.d.ts} +72 -4
  111. package/dist/config/config.d.ts.map +1 -0
  112. package/dist/config/index.d.ts +3 -0
  113. package/dist/config/index.d.ts.map +1 -0
  114. package/dist/index.cjs +16649 -5163
  115. package/dist/index.cjs.map +1 -1
  116. package/dist/index.d.ts +3 -23
  117. package/dist/index.d.ts.map +1 -1
  118. package/dist/index.js +16825 -5322
  119. package/dist/index.js.map +1 -1
  120. package/dist/store/index.d.ts +2 -0
  121. package/dist/store/index.d.ts.map +1 -0
  122. package/dist/store/store.d.ts +272 -0
  123. package/dist/store/store.d.ts.map +1 -0
  124. package/dist/utils/ai-context.d.ts +25 -0
  125. package/dist/utils/ai-context.d.ts.map +1 -0
  126. package/dist/utils/document-scanner.d.ts +35 -0
  127. package/dist/utils/document-scanner.d.ts.map +1 -0
  128. package/dist/{export-utils.d.ts → utils/export-utils.d.ts} +8 -0
  129. package/dist/utils/export-utils.d.ts.map +1 -0
  130. package/dist/utils/index.d.ts +4 -0
  131. package/dist/utils/index.d.ts.map +1 -0
  132. package/package.json +8 -6
  133. package/dist/asset-manager-modal.d.ts.map +0 -1
  134. package/dist/blocks-panel.d.ts.map +0 -1
  135. package/dist/box-model-editor.d.ts.map +0 -1
  136. package/dist/breadcrumbs.d.ts.map +0 -1
  137. package/dist/canvas.d.ts +0 -16
  138. package/dist/canvas.d.ts.map +0 -1
  139. package/dist/code-highlighter.d.ts.map +0 -1
  140. package/dist/code-viewer-modal.d.ts.map +0 -1
  141. package/dist/component-panel.d.ts.map +0 -1
  142. package/dist/config.d.ts.map +0 -1
  143. package/dist/dimension-sector-controls.d.ts.map +0 -1
  144. package/dist/editor.d.ts.map +0 -1
  145. package/dist/export-utils.d.ts.map +0 -1
  146. package/dist/floating-badges.d.ts.map +0 -1
  147. package/dist/icons.d.ts.map +0 -1
  148. package/dist/import-modal.d.ts.map +0 -1
  149. package/dist/inspector-panel.d.ts.map +0 -1
  150. package/dist/layers-panel.d.ts.map +0 -1
  151. package/dist/left-sidebar.d.ts.map +0 -1
  152. package/dist/motion-sector-controls.d.ts.map +0 -1
  153. package/dist/store.d.ts +0 -103
  154. package/dist/store.d.ts.map +0 -1
  155. package/dist/style-manager-accordion.d.ts.map +0 -1
  156. package/dist/table-spreadsheet-editor.d.ts.map +0 -1
  157. package/dist/toolbar.d.ts +0 -11
  158. package/dist/toolbar.d.ts.map +0 -1
  159. package/dist/traits-panel.d.ts.map +0 -1
  160. package/dist/typography-sector-controls.d.ts.map +0 -1
  161. package/dist/variable-picker.d.ts.map +0 -1
  162. /package/dist/{breadcrumbs.d.ts → components/canvas/breadcrumbs.d.ts} +0 -0
  163. /package/dist/{floating-badges.d.ts → components/canvas/floating-badges.d.ts} +0 -0
  164. /package/dist/{asset-manager-modal.d.ts → components/modals/asset-manager-modal.d.ts} +0 -0
  165. /package/dist/{code-viewer-modal.d.ts → components/modals/code-viewer-modal.d.ts} +0 -0
  166. /package/dist/{import-modal.d.ts → components/modals/import-modal.d.ts} +0 -0
  167. /package/dist/{blocks-panel.d.ts → components/panels/blocks-panel.d.ts} +0 -0
  168. /package/dist/{box-model-editor.d.ts → components/style-manager/box-model-editor.d.ts} +0 -0
  169. /package/dist/{motion-sector-controls.d.ts → components/style-manager/motion-sector-controls.d.ts} +0 -0
  170. /package/dist/{table-spreadsheet-editor.d.ts → components/table-editor/table-spreadsheet-editor.d.ts} +0 -0
  171. /package/dist/{code-highlighter.d.ts → components/ui/code-highlighter.d.ts} +0 -0
  172. /package/dist/{icons.d.ts → components/ui/icons.d.ts} +0 -0
  173. /package/dist/{variable-picker.d.ts → components/ui/variable-picker.d.ts} +0 -0
package/README.md ADDED
@@ -0,0 +1,106 @@
1
+ # @kubuild/editor
2
+
3
+ [![npm version](https://img.shields.io/npm/v/@kubuild/editor.svg)](https://www.npmjs.com/package/@kubuild/editor)
4
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)
5
+ [![TypeScript](https://img.shields.io/badge/TypeScript-5.7-blue)](https://www.typescriptlang.org/)
6
+
7
+ Visual page builder editor for **KUBUILD** featuring an interactive canvas, Action Builder modal, Form Validation & Debugger panels, variable autocomplete, style manager, and mobile-responsive layout.
8
+
9
+ ---
10
+
11
+ ## 📦 Installation
12
+
13
+ ```bash
14
+ # Using pnpm (recommended)
15
+ pnpm add @kubuild/editor @kubuild/components @kubuild/core @kubuild/renderer @kubuild/schema react react-dom zustand lucide-react
16
+
17
+ # Using npm
18
+ npm install @kubuild/editor @kubuild/components @kubuild/core @kubuild/renderer @kubuild/schema react react-dom zustand lucide-react
19
+
20
+ # Using yarn
21
+ yarn add @kubuild/editor @kubuild/components @kubuild/core @kubuild/renderer @kubuild/schema react react-dom zustand lucide-react
22
+ ```
23
+
24
+ ---
25
+
26
+ ## ✨ Features
27
+
28
+ - **Interactive Visual Canvas**:
29
+ - Drag-and-drop components and pre-built starter blocks from side panels onto the canvas with real-time drop indicators.
30
+ - Inline text editing with rich styling support.
31
+ - Multi-viewport switcher (Desktop, Tablet, Mobile) with zoom, pan, and alignment guides.
32
+ - Breadcrumbs navigator and tree hierarchy layers panel.
33
+ - **Action Builder System**:
34
+ - `ActionBuilderModal`: Visual modal for composing multi-step action workflows (`onClick`, `onSubmit`, `onChange`).
35
+ - `ActionStepForm`: Dedicated configuration forms for API requests, Toast feedback, Modal toggles, Navigation, and Custom handlers.
36
+ - `ActionBranchEditor`: Visual branch management for handling Success and Error outcomes in asynchronous actions.
37
+ - **Form Validation & Live Debugger**:
38
+ - `ActionDebuggerPanel`: Real-time inspection of runtime state, form input values, and live action execution logs.
39
+ - `FormValidationRulesPanel`: Visual editor for managing form field validation rules (required, regex, email, min/max length).
40
+ - **Variable System & Autocomplete**:
41
+ - `VariableAutocompleteInput` & Textarea: Intelligent suggestion popups for template variables (e.g. `{{form.email}}`, `{{user.name}}`).
42
+ - `VariablePicker`: Hierarchical variable catalog for browsing available data sources.
43
+ - **Style Manager Accordion**:
44
+ - Granular control over Dimensions, Typography, Backgrounds, Borders, Layouts (Flexbox & CSS Grid), Spacing (Box Model), and Motion/Animations.
45
+ - **Mobile & Touch Friendly**:
46
+ - Adaptive toolbar and bottom navigation bar for mobile devices.
47
+ - Pointer and touch event drag support for floating navigator and table spreadsheet modals.
48
+ - Responsive slide-over drawer drawers for sidebars and inspectors.
49
+ - **State Management**:
50
+ - High-performance reactive store built on Zustand, seamlessly wired to `@kubuild/core` CommandEngine for unlimited undo/redo.
51
+
52
+ ---
53
+
54
+ ## 🚀 Quick Usage
55
+
56
+ ### Embedding the Editor
57
+
58
+ ```tsx
59
+ import React from 'react';
60
+ import { Editor, useEditorStore } from '@kubuild/editor';
61
+ import type { PageDocument } from '@kubuild/schema';
62
+
63
+ const initialPage: PageDocument = {
64
+ schema: 'stora.page',
65
+ version: '1.0.0',
66
+ metadata: { title: 'New Web Page' },
67
+ document: {
68
+ id: 'root',
69
+ type: 'container',
70
+ children: []
71
+ }
72
+ };
73
+
74
+ export const PageBuilderApp: React.FC = () => {
75
+ return (
76
+ <div style={{ width: '100vw', height: '100vh' }}>
77
+ <Editor
78
+ initialDocument={initialPage}
79
+ onSave={(document) => {
80
+ console.log('Saved document:', document);
81
+ }}
82
+ onExport={(format, data) => {
83
+ console.log(`Exported as ${format}:`, data);
84
+ }}
85
+ />
86
+ </div>
87
+ );
88
+ };
89
+ ```
90
+
91
+ ### Accessing Editor State Programmatically
92
+
93
+ ```typescript
94
+ import { useEditorStore } from '@kubuild/editor';
95
+
96
+ // Access active selection or trigger commands outside the canvas
97
+ const selectedNodeId = useEditorStore((state) => state.selectedNodeId);
98
+ const undo = useEditorStore((state) => state.undo);
99
+ const redo = useEditorStore((state) => state.redo);
100
+ ```
101
+
102
+ ---
103
+
104
+ ## 📄 License
105
+
106
+ MIT © [KUBUILD](https://github.com/kustora/kubuild)
@@ -0,0 +1,100 @@
1
+ import type { Node, StyleDefinition } from '@kubuild/schema';
2
+ import type { AiRefactorNodeRequest } from '@kubuild/ai';
3
+ import type { DocumentSecurityLimits } from '@kubuild/core';
4
+ /**
5
+ * STORA-513 — one changed prop/style/state field between the original node and an AI
6
+ * enhance candidate. `path` is a dotted pointer such as `props.label`,
7
+ * `styles.base.color`, or `styles.states.:hover.color` — used to render a targeted diff
8
+ * line instead of a full object dump (explicitly disallowed by the ticket).
9
+ */
10
+ export interface EnhanceFieldDiff {
11
+ path: string;
12
+ before: unknown;
13
+ after: unknown;
14
+ }
15
+ export interface EnhanceNodeDiff {
16
+ fields: EnhanceFieldDiff[];
17
+ /**
18
+ * True when the candidate's `children` subtree differs structurally from the
19
+ * original (not just a props/styles tweak) — e.g. the AI regenerated nested content.
20
+ * `updateNodeProps`/`updateNodeStyle` can't express this; Apply (STORA-514) falls back
21
+ * to the `replaceNode` command engine command when this is true.
22
+ */
23
+ childrenChanged: boolean;
24
+ }
25
+ /**
26
+ * STORA-513 — pure diff between an original node and a validated AI enhance candidate.
27
+ * Only ever surfaces props/styles(+pseudo-state) fields that actually changed, plus a
28
+ * coarse `childrenChanged` flag — never a full node dump.
29
+ */
30
+ export declare function diffEnhanceNode(original: Node, candidate: Node): EnhanceNodeDiff;
31
+ export type EnhanceNodeOutcome = {
32
+ status: 'success';
33
+ originalNode: Node;
34
+ candidateNode: Node;
35
+ }
36
+ /** Network/provider/abort failure — already surfaced via `useAiGenerator`'s own `error` state. */
37
+ | {
38
+ status: 'no-result';
39
+ }
40
+ /** The candidate failed the STORA-509 normalize/validate pipeline. */
41
+ | {
42
+ status: 'invalid';
43
+ message: string;
44
+ };
45
+ /**
46
+ * STORA-512 — wires `useAiGenerator().refactorNode` into the same document-safety
47
+ * pipeline `generate-page.ts` uses for `streamPage` sections: the raw result is
48
+ * re-validated through `@kubuild/ai`'s `normalizeAndValidateRefactoredNode` (normalize ->
49
+ * Zod schema validate -> `validateDocumentSecurity`) *before* it is ever shown to the
50
+ * user as a candidate. This is defense-in-depth, exactly like `runStreamPageGeneration`:
51
+ * regardless of whether the configured provider already validated server-side via
52
+ * `KubuildAiEngine`, a host's custom HTTP endpoint may not have.
53
+ *
54
+ * Critically, this function never touches the document or the command engine — it only
55
+ * ever returns a candidate for the caller to hold in local/component state. The original
56
+ * node is not mutated until the caller explicitly applies the result (STORA-514).
57
+ */
58
+ export declare function runEnhanceNode(refactorNode: (params: AiRefactorNodeRequest) => Promise<Node | null>, params: AiRefactorNodeRequest, deps?: {
59
+ securityLimits?: DocumentSecurityLimits;
60
+ }): Promise<EnhanceNodeOutcome>;
61
+ export interface EnhanceCandidate {
62
+ originalNode: Node;
63
+ candidateNode: Node;
64
+ diff: EnhanceNodeDiff;
65
+ }
66
+ export interface ApplyEnhanceResult {
67
+ success: boolean;
68
+ error?: string;
69
+ }
70
+ /**
71
+ * Dependency-injected store bindings for `applyEnhanceCandidate` (STORA-514) — mirrors
72
+ * `StreamPageGenerationDeps` in `generate-page.ts`: every mutation goes through the exact
73
+ * same store actions manual editing uses (`updateNodeProps`/`updateNodeStyle`/
74
+ * `updateNodeStateStyle`), so it lands in `DocumentHistoryManager` and `undo()` reverts it.
75
+ */
76
+ export interface ApplyEnhanceCandidateDeps {
77
+ updateNodeProps: (nodeId: string, props: Record<string, unknown>, merge: boolean) => ApplyEnhanceResult;
78
+ updateNodeStyle: (nodeId: string, styles: StyleDefinition, breakpoint: 'base' | 'desktop' | 'tablet' | 'mobile', merge: boolean) => ApplyEnhanceResult;
79
+ updateNodeStateStyle: (nodeId: string, styles: StyleDefinition, state: string, merge: boolean) => ApplyEnhanceResult;
80
+ /** Only invoked when `diff.childrenChanged` — falls back to the `replaceNode` command. */
81
+ replaceNodeSubtree: (nodeId: string, node: Node) => ApplyEnhanceResult;
82
+ /** Groups a multi-field apply (props + several style layers) into one undo entry. */
83
+ beginHistoryTransaction: () => void;
84
+ endHistoryTransaction: () => void;
85
+ }
86
+ /**
87
+ * STORA-514 — applies a validated enhance candidate through the command engine, the same
88
+ * path manual editing already uses. Reuses `updateNodeProps`/`updateNodeStyle` for the
89
+ * common case (only props/styles changed); falls back to a whole-subtree `replaceNode`
90
+ * only when `diff.childrenChanged` is true, since `updateNodeProps`/`updateNodeStyle`
91
+ * can't express a nested-children change.
92
+ *
93
+ * The `replaceNode` fallback re-attaches the *original* node's `animation`/`actions`/
94
+ * `formConfig` onto the candidate before dispatching: `normalizeAndValidateRefactoredNode`
95
+ * never reads or preserves those fields (the AI enhance pipeline is props/styles/children
96
+ * only), so without this the candidate would silently wipe out any existing interactivity
97
+ * config on Apply.
98
+ */
99
+ export declare function applyEnhanceCandidate(candidate: EnhanceCandidate, deps: ApplyEnhanceCandidateDeps): ApplyEnhanceResult;
100
+ //# sourceMappingURL=enhance-node.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enhance-node.d.ts","sourceRoot":"","sources":["../../src/ai/enhance-node.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEzD,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,eAAe,CAAC;AAE5D;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,gBAAgB,EAAE,CAAC;IAC3B;;;;;OAKG;IACH,eAAe,EAAE,OAAO,CAAC;CAC1B;AAWD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,GAAG,eAAe,CA+ChF;AAED,MAAM,MAAM,kBAAkB,GAC1B;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,YAAY,EAAE,IAAI,CAAC;IAAC,aAAa,EAAE,IAAI,CAAA;CAAE;AAChE,kGAAkG;GAChG;IAAE,MAAM,EAAE,WAAW,CAAA;CAAE;AACzB,sEAAsE;GACpE;IAAE,MAAM,EAAE,SAAS,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAE3C;;;;;;;;;;;;GAYG;AACH,wBAAsB,cAAc,CAClC,YAAY,EAAE,CAAC,MAAM,EAAE,qBAAqB,KAAK,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,EACrE,MAAM,EAAE,qBAAqB,EAC7B,IAAI,GAAE;IAAE,cAAc,CAAC,EAAE,sBAAsB,CAAA;CAAO,GACrD,OAAO,CAAC,kBAAkB,CAAC,CAgB7B;AAED,MAAM,WAAW,gBAAgB;IAC/B,YAAY,EAAE,IAAI,CAAC;IACnB,aAAa,EAAE,IAAI,CAAC;IACpB,IAAI,EAAE,eAAe,CAAC;CACvB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;GAKG;AACH,MAAM,WAAW,yBAAyB;IACxC,eAAe,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,OAAO,KAAK,kBAAkB,CAAC;IACxG,eAAe,EAAE,CACf,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,eAAe,EACvB,UAAU,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,EACpD,KAAK,EAAE,OAAO,KACX,kBAAkB,CAAC;IACxB,oBAAoB,EAAE,CACpB,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,eAAe,EACvB,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,OAAO,KACX,kBAAkB,CAAC;IACxB,0FAA0F;IAC1F,kBAAkB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,KAAK,kBAAkB,CAAC;IACvE,qFAAqF;IACrF,uBAAuB,EAAE,MAAM,IAAI,CAAC;IACpC,qBAAqB,EAAE,MAAM,IAAI,CAAC;CACnC;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,qBAAqB,CACnC,SAAS,EAAE,gBAAgB,EAC3B,IAAI,EAAE,yBAAyB,GAC9B,kBAAkB,CA6DpB"}
@@ -0,0 +1,80 @@
1
+ import type { PageDocument } from '@kubuild/schema';
2
+ import type { AiGeneratePageRequest, AiStreamCallbacks } from '@kubuild/ai';
3
+ import { type CommandResult, type DocumentSecurityLimits, type Diagnostic } from '@kubuild/core';
4
+ /**
5
+ * Progressive-preview status for one `streamPage` session (STORA-508). A canvas/chat
6
+ * panel subscribes to this via `StreamPageGenerationDeps.onPlaceholderChange` to show a
7
+ * loading placeholder for the section currently being generated, and to hide it the
8
+ * instant the real section lands (the real section is rendered by the normal
9
+ * store -> `KubuildRenderer` path, not a separate preview tree).
10
+ */
11
+ export interface AiGenerationPlaceholderStatus {
12
+ /** True while more sections are still expected in this streaming session. */
13
+ active: boolean;
14
+ totalSections: number;
15
+ completedSections: number;
16
+ currentLabel?: string;
17
+ }
18
+ export interface StreamPageGenerationDeps {
19
+ /** The editor store's `dispatch` — the only sanctioned document mutation path. */
20
+ dispatch: (executor: (doc: PageDocument) => CommandResult) => void;
21
+ /** Reads the live document (called fresh on every section so ids stay collision-free). */
22
+ getDocument: () => PageDocument;
23
+ /** Groups every section inserted during the session into one undo entry (STORA-510). */
24
+ beginHistoryTransaction: () => void;
25
+ endHistoryTransaction: () => void;
26
+ /** Reused non-fatal reporting channel — same `onDiagnostic` prop used elsewhere in the editor. */
27
+ onDiagnostic?: (diagnostic: Diagnostic) => void;
28
+ /** STORA-508 progressive-preview hook. */
29
+ onPlaceholderChange?: (status: AiGenerationPlaceholderStatus | null) => void;
30
+ /** Same security limits `.stora` import uses; omit to use `@kubuild/core`'s defaults. */
31
+ securityLimits?: DocumentSecurityLimits;
32
+ /** Insertion target for generated sections. Defaults to the document's root page node. */
33
+ parentId?: string;
34
+ }
35
+ /**
36
+ * Pure visibility rule for the STORA-508 canvas placeholder — kept as a standalone
37
+ * function (rather than inlined JSX conditionals) so it's trivially unit-testable
38
+ * without needing to render the canvas: the placeholder only ever shows on the active
39
+ * artboard, never in preview mode, and only while a generation session reports itself
40
+ * as still active.
41
+ */
42
+ export declare function shouldShowAiGenerationPlaceholder(params: {
43
+ isActive: boolean;
44
+ previewMode: boolean;
45
+ aiGenerationStatus: AiGenerationPlaceholderStatus | null | undefined;
46
+ }): boolean;
47
+ export interface StreamPageGenerationSummary {
48
+ insertedSectionIds: string[];
49
+ failedSectionCount: number;
50
+ totalSections: number;
51
+ /** Whether the stream itself emitted an `error` event (network/provider/parse failure). */
52
+ streamErrored: boolean;
53
+ }
54
+ type StreamPageFn = (params: AiGeneratePageRequest, callbacks?: AiStreamCallbacks) => Promise<PageDocument | null>;
55
+ /**
56
+ * STORA-507/509/510 — wires `useAiGenerator().streamPage()` into the editor's command
57
+ * engine and history.
58
+ *
59
+ * Every `section` event is independently re-run through `@kubuild/ai`'s
60
+ * `normalizeAndValidateSectionNode` — the same normalize -> Zod schema validate ->
61
+ * `validateDocumentSecurity` pipeline used for `.stora` import (docs/ARCHITECTURE.md
62
+ * §31/§40) — before ever being dispatched as `insertNode`. This is defense-in-depth:
63
+ * it re-validates regardless of whether the configured provider already went through
64
+ * `KubuildAiEngine` server-side (a host's custom HTTP endpoint may not have).
65
+ *
66
+ * - **Partial success (STORA-507)**: a section that fails validation, or that fails to
67
+ * insert (e.g. an id collision `insertNode` rejects), is reported via `onDiagnostic`
68
+ * and skipped — it never blocks subsequent sections. Because validation always runs
69
+ * strictly before dispatch, every section that *is* inserted is independently valid,
70
+ * so the document is never left in a partially-invalid state, including when the
71
+ * stream later emits an `error` event.
72
+ * - **Progressive preview (STORA-508)**: `onPlaceholderChange` fires as each section
73
+ * starts/finishes generating so a canvas placeholder can be shown/hidden; the real
74
+ * section renders through the exact same store/renderer path as any manual edit.
75
+ * - **Batched history (STORA-510)**: the whole session is wrapped in one history
76
+ * transaction, so a single `undo()` reverts every section this call inserted.
77
+ */
78
+ export declare function runStreamPageGeneration(streamPage: StreamPageFn, params: AiGeneratePageRequest, deps: StreamPageGenerationDeps): Promise<StreamPageGenerationSummary>;
79
+ export {};
80
+ //# sourceMappingURL=generate-page.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generate-page.d.ts","sourceRoot":"","sources":["../../src/ai/generate-page.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAQ,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC1D,OAAO,KAAK,EAAE,qBAAqB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAE5E,OAAO,EAIL,KAAK,aAAa,EAClB,KAAK,sBAAsB,EAC3B,KAAK,UAAU,EAChB,MAAM,eAAe,CAAC;AAEvB;;;;;;GAMG;AACH,MAAM,WAAW,6BAA6B;IAC5C,6EAA6E;IAC7E,MAAM,EAAE,OAAO,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,wBAAwB;IACvC,kFAAkF;IAClF,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,EAAE,YAAY,KAAK,aAAa,KAAK,IAAI,CAAC;IACnE,0FAA0F;IAC1F,WAAW,EAAE,MAAM,YAAY,CAAC;IAChC,wFAAwF;IACxF,uBAAuB,EAAE,MAAM,IAAI,CAAC;IACpC,qBAAqB,EAAE,MAAM,IAAI,CAAC;IAClC,kGAAkG;IAClG,YAAY,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC;IAChD,0CAA0C;IAC1C,mBAAmB,CAAC,EAAE,CAAC,MAAM,EAAE,6BAA6B,GAAG,IAAI,KAAK,IAAI,CAAC;IAC7E,yFAAyF;IACzF,cAAc,CAAC,EAAE,sBAAsB,CAAC;IACxC,0FAA0F;IAC1F,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;GAMG;AACH,wBAAgB,iCAAiC,CAAC,MAAM,EAAE;IACxD,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,EAAE,OAAO,CAAC;IACrB,kBAAkB,EAAE,6BAA6B,GAAG,IAAI,GAAG,SAAS,CAAC;CACtE,GAAG,OAAO,CAEV;AAED,MAAM,WAAW,2BAA2B;IAC1C,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,aAAa,EAAE,MAAM,CAAC;IACtB,2FAA2F;IAC3F,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,KAAK,YAAY,GAAG,CAClB,MAAM,EAAE,qBAAqB,EAC7B,SAAS,CAAC,EAAE,iBAAiB,KAC1B,OAAO,CAAC,YAAY,GAAG,IAAI,CAAC,CAAC;AAElC;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,uBAAuB,CAC3C,UAAU,EAAE,YAAY,EACxB,MAAM,EAAE,qBAAqB,EAC7B,IAAI,EAAE,wBAAwB,GAC7B,OAAO,CAAC,2BAA2B,CAAC,CAmGtC"}
@@ -0,0 +1,3 @@
1
+ export * from './generate-page';
2
+ export * from './enhance-node';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ai/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,18 @@
1
+ import React from 'react';
2
+ import { ActionStep, PageDocument } from '@kubuild/schema';
3
+ export interface ActionBranchEditorProps {
4
+ parentStep: ActionStep;
5
+ document?: PageDocument;
6
+ onUpdateSuccessSteps: (steps: ActionStep[]) => void;
7
+ onUpdateErrorSteps: (steps: ActionStep[]) => void;
8
+ className?: string;
9
+ }
10
+ export interface BranchLaneProps {
11
+ branchType: 'success' | 'error';
12
+ steps: ActionStep[];
13
+ document?: PageDocument;
14
+ onUpdateSteps: (steps: ActionStep[]) => void;
15
+ }
16
+ export declare const BranchLane: React.FC<BranchLaneProps>;
17
+ export declare const ActionBranchEditor: React.FC<ActionBranchEditorProps>;
18
+ //# sourceMappingURL=action-branch-editor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action-branch-editor.d.ts","sourceRoot":"","sources":["../../../src/components/action-builder/action-branch-editor.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AACxC,OAAO,EACL,UAAU,EAEV,YAAY,EACb,MAAM,iBAAiB,CAAC;AAmBzB,MAAM,WAAW,uBAAuB;IACtC,UAAU,EAAE,UAAU,CAAC;IACvB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,oBAAoB,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,IAAI,CAAC;IACpD,kBAAkB,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,IAAI,CAAC;IAClD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,SAAS,GAAG,OAAO,CAAC;IAChC,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,aAAa,EAAE,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,IAAI,CAAC;CAC9C;AAED,eAAO,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CAsQhD,CAAC;AAEF,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAuChE,CAAC"}
@@ -0,0 +1,32 @@
1
+ import React from 'react';
2
+ import { PageDocument, ActionStep, ActionStepType, ActionTriggerType } from '@kubuild/schema';
3
+ export interface ActionBuilderModalProps {
4
+ isOpen: boolean;
5
+ onClose: () => void;
6
+ nodeId?: string | null;
7
+ initialTrigger?: ActionTriggerType;
8
+ document?: PageDocument;
9
+ }
10
+ export interface TriggerMeta {
11
+ type: ActionTriggerType;
12
+ label: string;
13
+ description: string;
14
+ badge: string;
15
+ }
16
+ export declare const TRIGGER_OPTIONS: TriggerMeta[];
17
+ export interface StepTypeMeta {
18
+ type: ActionStepType;
19
+ label: string;
20
+ description: string;
21
+ category: 'network' | 'ui' | 'navigation' | 'state' | 'utility';
22
+ icon: React.ComponentType<{
23
+ className?: string;
24
+ }>;
25
+ defaultPayload: Record<string, unknown>;
26
+ }
27
+ export declare const STEP_TYPE_OPTIONS: StepTypeMeta[];
28
+ export declare function getStepTypeMeta(type: ActionStepType): StepTypeMeta;
29
+ export declare function getCategoryBadgeClass(category: 'network' | 'ui' | 'navigation' | 'state' | 'utility'): string;
30
+ export declare function formatStepSummary(step: ActionStep): string;
31
+ export declare const ActionBuilderModal: React.FC<ActionBuilderModalProps>;
32
+ //# sourceMappingURL=action-builder-modal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action-builder-modal.d.ts","sourceRoot":"","sources":["../../../src/components/action-builder/action-builder-modal.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoD,MAAM,OAAO,CAAC;AACzE,OAAO,EACL,YAAY,EAEZ,UAAU,EACV,cAAc,EACd,iBAAiB,EAClB,MAAM,iBAAiB,CAAC;AA6BzB,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,cAAc,CAAC,EAAE,iBAAiB,CAAC;IACnC,QAAQ,CAAC,EAAE,YAAY,CAAC;CACzB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,iBAAiB,CAAC;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,eAAe,EAAE,WAAW,EAqCxC,CAAC;AAEF,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,cAAc,CAAC;IACrB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,SAAS,GAAG,IAAI,GAAG,YAAY,GAAG,OAAO,GAAG,SAAS,CAAC;IAChE,IAAI,EAAE,KAAK,CAAC,aAAa,CAAC;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClD,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACzC;AAED,eAAO,MAAM,iBAAiB,EAAE,YAAY,EAkG3C,CAAC;AAEF,wBAAgB,eAAe,CAAC,IAAI,EAAE,cAAc,GAAG,YAAY,CAWlE;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,SAAS,GAAG,IAAI,GAAG,YAAY,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAc7G;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CA6C1D;AAED,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CA+qBhE,CAAC"}
@@ -0,0 +1,71 @@
1
+ import React from 'react';
2
+ import { ActionStep, PageDocument } from '@kubuild/schema';
3
+ export interface ActionStepFormProps {
4
+ step: ActionStep;
5
+ document?: PageDocument;
6
+ onUpdatePayload: (payload: Record<string, unknown>) => void;
7
+ onUpdateMeta?: (meta: {
8
+ label?: string;
9
+ timeout?: number;
10
+ continueOnError?: boolean;
11
+ }) => void;
12
+ onUpdateBranches?: (branches: {
13
+ onSuccess?: ActionStep[];
14
+ onError?: ActionStep[];
15
+ }) => void;
16
+ className?: string;
17
+ hideBranches?: boolean;
18
+ }
19
+ export interface KeyValueEditorProps {
20
+ title: string;
21
+ entries: Record<string, unknown> | undefined;
22
+ onChange: (updated: Record<string, string>) => void;
23
+ document?: PageDocument;
24
+ keyPlaceholder?: string;
25
+ valuePlaceholder?: string;
26
+ emptyLabel?: string;
27
+ }
28
+ export declare const KeyValueEditor: React.FC<KeyValueEditorProps>;
29
+ export declare const ApiRequestStepForm: React.FC<{
30
+ payload: Record<string, unknown>;
31
+ document?: PageDocument;
32
+ onChange: (payload: Record<string, unknown>) => void;
33
+ }>;
34
+ export declare const ShowToastStepForm: React.FC<{
35
+ payload: Record<string, unknown>;
36
+ document?: PageDocument;
37
+ onChange: (payload: Record<string, unknown>) => void;
38
+ }>;
39
+ export declare const NavigateStepForm: React.FC<{
40
+ payload: Record<string, unknown>;
41
+ document?: PageDocument;
42
+ onChange: (payload: Record<string, unknown>) => void;
43
+ }>;
44
+ export declare const ModalStepForm: React.FC<{
45
+ payload: Record<string, unknown>;
46
+ isOpenAction: boolean;
47
+ document?: PageDocument;
48
+ onChange: (payload: Record<string, unknown>) => void;
49
+ }>;
50
+ export declare const SetStateStepForm: React.FC<{
51
+ payload: Record<string, unknown>;
52
+ document?: PageDocument;
53
+ onChange: (payload: Record<string, unknown>) => void;
54
+ }>;
55
+ export declare const ResetFormStepForm: React.FC<{
56
+ payload: Record<string, unknown>;
57
+ document?: PageDocument;
58
+ onChange: (payload: Record<string, unknown>) => void;
59
+ }>;
60
+ export declare const CopyClipboardStepForm: React.FC<{
61
+ payload: Record<string, unknown>;
62
+ document?: PageDocument;
63
+ onChange: (payload: Record<string, unknown>) => void;
64
+ }>;
65
+ export declare const CustomEventStepForm: React.FC<{
66
+ payload: Record<string, unknown>;
67
+ document?: PageDocument;
68
+ onChange: (payload: Record<string, unknown>) => void;
69
+ }>;
70
+ export declare const ActionStepForm: React.FC<ActionStepFormProps>;
71
+ //# sourceMappingURL=action-step-form.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"action-step-form.d.ts","sourceRoot":"","sources":["../../../src/components/action-builder/action-step-form.tsx"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export * from './action-branch-editor';
2
+ export * from './action-builder-modal';
3
+ export * from './action-step-form';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/action-builder/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,66 @@
1
+ import React from 'react';
2
+ import type { PageDocument } from '@kubuild/schema';
3
+ import { type Diagnostic } from '@kubuild/core';
4
+ import { ComponentRegistry } from '@kubuild/components';
5
+ import type { AiChatHistoryStorageAdapter } from '@kubuild/ai/react';
6
+ import type { AiChatMessage } from '@kubuild/ai';
7
+ import { ResolvedAiEditorConfig } from '../../config';
8
+ export interface AiChatPanelProps {
9
+ /** Fully-resolved AI config (STORA-501) — panel must only ever be mounted when this is enabled. */
10
+ aiConfig: ResolvedAiEditorConfig;
11
+ /** `'hidden'` is handled by the caller not mounting this component at all. */
12
+ mode: 'docked' | 'floating';
13
+ onClose?: () => void;
14
+ onToggleMode?: () => void;
15
+ className?: string;
16
+ /**
17
+ * Seeds `useAiChat`'s message history (e.g. a persisted chat restored by the host, or a
18
+ * fixture in tests). Passed straight through to `useAiChat({ initialMessages })`.
19
+ */
20
+ initialMessages?: AiChatMessage[];
21
+ /**
22
+ * Optional chat history persistence adapter (STORA-520), passed straight through to
23
+ * `useAiChat({ historyStorage })`. Without it, chat history stays pure in-memory React
24
+ * state and is lost on reload — exactly as before. Hosts can implement this with
25
+ * `localStorage`, a Stora.page backend call, etc.; `@kubuild/ai`/`@kubuild/editor`
26
+ * never assume a concrete storage mechanism.
27
+ */
28
+ historyStorage?: AiChatHistoryStorageAdapter;
29
+ /**
30
+ * Optional overrides for the document/selection this panel builds AI context from,
31
+ * following the same prop-over-store precedence as `InspectorPanel`. Falls back to the
32
+ * live editor store when omitted — real usage should always omit these.
33
+ */
34
+ document?: PageDocument;
35
+ selectedNodeId?: string | null;
36
+ /**
37
+ * Component registry used to validate an AI enhance candidate's props before Apply
38
+ * (STORA-514), the same registry manual editing (`InspectorPanel`) validates against.
39
+ * Defaults to `createDefaultComponentRegistry()` so existing callers/tests that predate
40
+ * STORA-512 keep compiling without passing one.
41
+ */
42
+ registry?: ComponentRegistry;
43
+ /**
44
+ * Non-fatal reporting channel for full-page generation (STORA-507/509) — the same
45
+ * `onDiagnostic` prop `KubuildEditorProps` already exposes for import/validation
46
+ * diagnostics elsewhere in the editor. A section that fails validation is reported
47
+ * here and skipped; it never silently corrupts the document or blocks other sections.
48
+ */
49
+ onDiagnostic?: (diagnostic: Diagnostic) => void;
50
+ }
51
+ /** Exported for isolated unit testing (STORA-505) — the loading/typing bubble. */
52
+ export declare function AiChatTypingIndicator(): React.JSX.Element;
53
+ /** Exported for isolated unit testing (STORA-505) — a single user/assistant chat bubble. */
54
+ export declare function AiChatBubble({ message }: {
55
+ message: AiChatMessage;
56
+ }): React.JSX.Element;
57
+ /**
58
+ * Exported for isolated unit testing (STORA-505) — network/provider error bubble with a
59
+ * Retry action, never a silent fail (PRD §4 NFR-5 graceful degradation).
60
+ */
61
+ export declare function AiChatErrorBubble({ message, onRetry, }: {
62
+ message: string;
63
+ onRetry: () => void;
64
+ }): React.JSX.Element;
65
+ export declare const AiChatPanel: React.FC<AiChatPanelProps>;
66
+ //# sourceMappingURL=ai-chat-panel.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-chat-panel.d.ts","sourceRoot":"","sources":["../../../src/components/ai-chat/ai-chat-panel.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA+C,MAAM,OAAO,CAAC;AACpE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACpD,OAAO,EAAgB,KAAK,UAAU,EAAE,MAAM,eAAe,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAkC,MAAM,qBAAqB,CAAC;AAExF,OAAO,KAAK,EAAE,2BAA2B,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAC;AA2BtD,MAAM,WAAW,gBAAgB;IAC/B,mGAAmG;IACnG,QAAQ,EAAE,sBAAsB,CAAC;IACjC,8EAA8E;IAC9E,IAAI,EAAE,QAAQ,GAAG,UAAU,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,IAAI,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,eAAe,CAAC,EAAE,aAAa,EAAE,CAAC;IAClC;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,2BAA2B,CAAC;IAC7C;;;;OAIG;IACH,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B;;;;;OAKG;IACH,YAAY,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC;CACjD;AAsCD,kFAAkF;AAClF,wBAAgB,qBAAqB,sBAYpC;AAED,4FAA4F;AAC5F,wBAAgB,YAAY,CAAC,EAAE,OAAO,EAAE,EAAE;IAAE,OAAO,EAAE,aAAa,CAAA;CAAE,qBA0BnE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,EAChC,OAAO,EACP,OAAO,GACR,EAAE;IACD,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,qBAsBA;AAED,eAAO,MAAM,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,gBAAgB,CAmqBlD,CAAC"}
@@ -0,0 +1,2 @@
1
+ export * from './ai-chat-panel';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/ai-chat/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"breadcrumbs.d.ts","sourceRoot":"","sources":["../../../src/components/canvas/breadcrumbs.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAkC,MAAM,qBAAqB,CAAC;AAIxF,MAAM,WAAW,yBAAyB;IACxC,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,EAAE,KAAK,CAAC,EAAE,CAAC,yBAAyB,CA2EpE,CAAC"}
@@ -0,0 +1,61 @@
1
+ import React from 'react';
2
+ export interface CanvasPanZoomState {
3
+ pan: {
4
+ x: number;
5
+ y: number;
6
+ };
7
+ zoom: number;
8
+ isPanning: boolean;
9
+ isSpacePressed: boolean;
10
+ }
11
+ export interface CanvasZoomToolbarProps {
12
+ zoom: number;
13
+ onZoomChange: (newZoom: number) => void;
14
+ onReset: () => void;
15
+ onFit?: () => void;
16
+ className?: string;
17
+ /** Active navigation tool mode: 'select' (V) or 'hand' (H) */
18
+ toolMode?: 'select' | 'hand';
19
+ /** Callback when user changes navigation tool mode */
20
+ onToolModeChange?: (mode: 'select' | 'hand') => void;
21
+ /** Whether multi-device side-by-side preview mode is active (STORA-143) */
22
+ multiDeviceMode?: boolean;
23
+ /** Callback to toggle multi-device preview mode (STORA-143) */
24
+ onToggleMultiDevice?: () => void;
25
+ }
26
+ export declare const MIN_ZOOM = 0.25;
27
+ export declare const MAX_ZOOM = 2;
28
+ export declare function clampZoom(val: number): number;
29
+ /**
30
+ * Zoom Presets Toolbar (STORA-131).
31
+ * Supports presets (50%, 75%, 100%, 150%, Fit) and step in/out buttons.
32
+ */
33
+ export declare const CanvasZoomToolbar: React.FC<CanvasZoomToolbarProps>;
34
+ export interface UseCanvasPanZoomOptions {
35
+ containerRef: React.RefObject<HTMLElement | null>;
36
+ enabled?: boolean;
37
+ }
38
+ /**
39
+ * Hook for Canvas Pan (Trackpad swipe, Hand tool, Space+Drag, Middle-click) & Zoom (Cmd/Ctrl + Wheel) (STORA-130, STORA-131).
40
+ */
41
+ export declare function useCanvasPanZoom({ containerRef, enabled, }: UseCanvasPanZoomOptions): {
42
+ pan: {
43
+ x: number;
44
+ y: number;
45
+ };
46
+ setPan: React.Dispatch<React.SetStateAction<{
47
+ x: number;
48
+ y: number;
49
+ }>>;
50
+ zoom: number;
51
+ setZoom: React.Dispatch<React.SetStateAction<number>>;
52
+ isPanning: boolean;
53
+ isSpacePressed: boolean;
54
+ toolMode: "select" | "hand";
55
+ setToolMode: React.Dispatch<React.SetStateAction<"select" | "hand">>;
56
+ cursorStyle: string | undefined;
57
+ handlePointerDown: (e: React.PointerEvent) => void;
58
+ resetPanZoom: () => void;
59
+ fitPanZoom: () => void;
60
+ };
61
+ //# sourceMappingURL=canvas-pan-zoom.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"canvas-pan-zoom.d.ts","sourceRoot":"","sources":["../../../src/components/canvas/canvas-pan-zoom.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmD,MAAM,OAAO,CAAC;AAGxE,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,OAAO,CAAC;IACnB,cAAc,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACxC,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,IAAI,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8DAA8D;IAC9D,QAAQ,CAAC,EAAE,QAAQ,GAAG,MAAM,CAAC;IAC7B,sDAAsD;IACtD,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,KAAK,IAAI,CAAC;IACrD,2EAA2E;IAC3E,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,+DAA+D;IAC/D,mBAAmB,CAAC,EAAE,MAAM,IAAI,CAAC;CAClC;AAED,eAAO,MAAM,QAAQ,OAAO,CAAC;AAC7B,eAAO,MAAM,QAAQ,IAAM,CAAC;AAE5B,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED;;;GAGG;AACH,eAAO,MAAM,iBAAiB,EAAE,KAAK,CAAC,EAAE,CAAC,sBAAsB,CAyL9D,CAAC;AAEF,MAAM,WAAW,uBAAuB;IACtC,YAAY,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IAClD,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,EAC/B,YAAY,EACZ,OAAc,GACf,EAAE,uBAAuB;;WACY,MAAM;WAAK,MAAM;;;WAAjB,MAAM;WAAK,MAAM;;;;;;;;;2BAiG/C,KAAK,CAAC,YAAY;;;EAmFzB"}