@kubuild/editor 0.2.0 → 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 (159) hide show
  1. package/dist/ai/enhance-node.d.ts +100 -0
  2. package/dist/ai/enhance-node.d.ts.map +1 -0
  3. package/dist/ai/generate-page.d.ts +80 -0
  4. package/dist/ai/generate-page.d.ts.map +1 -0
  5. package/dist/ai/index.d.ts +3 -0
  6. package/dist/ai/index.d.ts.map +1 -0
  7. package/dist/components/action-builder/action-step-form.d.ts.map +1 -1
  8. package/dist/components/ai-chat/ai-chat-panel.d.ts +66 -0
  9. package/dist/components/ai-chat/ai-chat-panel.d.ts.map +1 -0
  10. package/dist/components/ai-chat/index.d.ts +2 -0
  11. package/dist/components/ai-chat/index.d.ts.map +1 -0
  12. package/dist/components/canvas/canvas-pan-zoom.d.ts +61 -0
  13. package/dist/components/canvas/canvas-pan-zoom.d.ts.map +1 -0
  14. package/dist/components/canvas/canvas.d.ts +48 -1
  15. package/dist/components/canvas/canvas.d.ts.map +1 -1
  16. package/dist/components/canvas/distance-meter.d.ts +27 -0
  17. package/dist/components/canvas/distance-meter.d.ts.map +1 -0
  18. package/dist/components/canvas/floating-badges.d.ts.map +1 -1
  19. package/dist/components/canvas/grid-guidelines-overlay.d.ts +18 -0
  20. package/dist/components/canvas/grid-guidelines-overlay.d.ts.map +1 -0
  21. package/dist/components/canvas/index.d.ts +9 -0
  22. package/dist/components/canvas/index.d.ts.map +1 -1
  23. package/dist/components/canvas/marquee-selection.d.ts +25 -0
  24. package/dist/components/canvas/marquee-selection.d.ts.map +1 -0
  25. package/dist/components/canvas/multi-device-preview.d.ts +30 -0
  26. package/dist/components/canvas/multi-device-preview.d.ts.map +1 -0
  27. package/dist/components/canvas/resize-handles.d.ts +18 -0
  28. package/dist/components/canvas/resize-handles.d.ts.map +1 -0
  29. package/dist/components/canvas/smart-guides.d.ts +37 -0
  30. package/dist/components/canvas/smart-guides.d.ts.map +1 -0
  31. package/dist/components/canvas/spacing-sliders.d.ts +21 -0
  32. package/dist/components/canvas/spacing-sliders.d.ts.map +1 -0
  33. package/dist/components/canvas/viewport-resizer.d.ts +83 -0
  34. package/dist/components/canvas/viewport-resizer.d.ts.map +1 -0
  35. package/dist/components/index.d.ts +1 -0
  36. package/dist/components/index.d.ts.map +1 -1
  37. package/dist/components/layout/editor.d.ts +12 -1
  38. package/dist/components/layout/editor.d.ts.map +1 -1
  39. package/dist/components/layout/toolbar.d.ts +6 -0
  40. package/dist/components/layout/toolbar.d.ts.map +1 -1
  41. package/dist/components/panels/action-prop-control.d.ts +30 -0
  42. package/dist/components/panels/action-prop-control.d.ts.map +1 -0
  43. package/dist/components/panels/blocks-panel.d.ts.map +1 -1
  44. package/dist/components/panels/component-panel.d.ts +2 -0
  45. package/dist/components/panels/component-panel.d.ts.map +1 -1
  46. package/dist/components/panels/index.d.ts +1 -0
  47. package/dist/components/panels/index.d.ts.map +1 -1
  48. package/dist/components/panels/inspector-panel.d.ts +7 -1
  49. package/dist/components/panels/inspector-panel.d.ts.map +1 -1
  50. package/dist/components/panels/layers-panel.d.ts +4 -0
  51. package/dist/components/panels/layers-panel.d.ts.map +1 -1
  52. package/dist/components/style-manager/auto-layout-controls.d.ts +24 -0
  53. package/dist/components/style-manager/auto-layout-controls.d.ts.map +1 -0
  54. package/dist/components/style-manager/color-gradient-picker.d.ts +35 -0
  55. package/dist/components/style-manager/color-gradient-picker.d.ts.map +1 -0
  56. package/dist/components/style-manager/design-tokens-panel.d.ts +30 -0
  57. package/dist/components/style-manager/design-tokens-panel.d.ts.map +1 -0
  58. package/dist/components/style-manager/dimension-sector-controls.d.ts +12 -1
  59. package/dist/components/style-manager/dimension-sector-controls.d.ts.map +1 -1
  60. package/dist/components/style-manager/effects-sector-controls.d.ts +52 -0
  61. package/dist/components/style-manager/effects-sector-controls.d.ts.map +1 -0
  62. package/dist/components/style-manager/grid-controls.d.ts +19 -0
  63. package/dist/components/style-manager/grid-controls.d.ts.map +1 -0
  64. package/dist/components/style-manager/index.d.ts +6 -0
  65. package/dist/components/style-manager/index.d.ts.map +1 -1
  66. package/dist/components/style-manager/inheritance-indicator.d.ts +52 -0
  67. package/dist/components/style-manager/inheritance-indicator.d.ts.map +1 -0
  68. package/dist/components/style-manager/style-manager-accordion.d.ts +10 -0
  69. package/dist/components/style-manager/style-manager-accordion.d.ts.map +1 -1
  70. package/dist/components/style-manager/typography-sector-controls.d.ts +4 -0
  71. package/dist/components/style-manager/typography-sector-controls.d.ts.map +1 -1
  72. package/dist/components/ui/icons.d.ts.map +1 -1
  73. package/dist/config/ai-config.d.ts +69 -0
  74. package/dist/config/ai-config.d.ts.map +1 -0
  75. package/dist/config/config.d.ts +65 -3
  76. package/dist/config/config.d.ts.map +1 -1
  77. package/dist/config/index.d.ts +1 -0
  78. package/dist/config/index.d.ts.map +1 -1
  79. package/dist/index.cjs +13503 -5560
  80. package/dist/index.cjs.map +1 -1
  81. package/dist/index.d.ts +1 -0
  82. package/dist/index.d.ts.map +1 -1
  83. package/dist/index.js +13462 -5540
  84. package/dist/index.js.map +1 -1
  85. package/dist/store/store.d.ts +129 -5
  86. package/dist/store/store.d.ts.map +1 -1
  87. package/dist/utils/ai-context.d.ts +25 -0
  88. package/dist/utils/ai-context.d.ts.map +1 -0
  89. package/dist/utils/document-scanner.d.ts +5 -1
  90. package/dist/utils/document-scanner.d.ts.map +1 -1
  91. package/dist/utils/export-utils.d.ts +8 -0
  92. package/dist/utils/export-utils.d.ts.map +1 -1
  93. package/dist/utils/index.d.ts +1 -0
  94. package/dist/utils/index.d.ts.map +1 -1
  95. package/package.json +8 -6
  96. package/dist/action-branch-editor.d.ts +0 -18
  97. package/dist/action-branch-editor.d.ts.map +0 -1
  98. package/dist/action-builder-modal.d.ts +0 -32
  99. package/dist/action-builder-modal.d.ts.map +0 -1
  100. package/dist/action-debugger-panel.d.ts +0 -11
  101. package/dist/action-debugger-panel.d.ts.map +0 -1
  102. package/dist/action-step-form.d.ts +0 -84
  103. package/dist/action-step-form.d.ts.map +0 -1
  104. package/dist/asset-manager-modal.d.ts +0 -28
  105. package/dist/asset-manager-modal.d.ts.map +0 -1
  106. package/dist/blocks-panel.d.ts +0 -20
  107. package/dist/blocks-panel.d.ts.map +0 -1
  108. package/dist/box-model-editor.d.ts +0 -29
  109. package/dist/box-model-editor.d.ts.map +0 -1
  110. package/dist/breadcrumbs.d.ts +0 -16
  111. package/dist/breadcrumbs.d.ts.map +0 -1
  112. package/dist/canvas.d.ts +0 -16
  113. package/dist/canvas.d.ts.map +0 -1
  114. package/dist/code-highlighter.d.ts +0 -20
  115. package/dist/code-highlighter.d.ts.map +0 -1
  116. package/dist/code-viewer-modal.d.ts +0 -11
  117. package/dist/code-viewer-modal.d.ts.map +0 -1
  118. package/dist/component-panel.d.ts +0 -8
  119. package/dist/component-panel.d.ts.map +0 -1
  120. package/dist/config.d.ts +0 -103
  121. package/dist/config.d.ts.map +0 -1
  122. package/dist/dimension-sector-controls.d.ts +0 -27
  123. package/dist/dimension-sector-controls.d.ts.map +0 -1
  124. package/dist/editor.d.ts +0 -18
  125. package/dist/editor.d.ts.map +0 -1
  126. package/dist/export-utils.d.ts +0 -19
  127. package/dist/export-utils.d.ts.map +0 -1
  128. package/dist/floating-badges.d.ts +0 -26
  129. package/dist/floating-badges.d.ts.map +0 -1
  130. package/dist/form-validation-rules-panel.d.ts +0 -27
  131. package/dist/form-validation-rules-panel.d.ts.map +0 -1
  132. package/dist/icons.d.ts +0 -8
  133. package/dist/icons.d.ts.map +0 -1
  134. package/dist/import-modal.d.ts +0 -11
  135. package/dist/import-modal.d.ts.map +0 -1
  136. package/dist/inspector-panel.d.ts +0 -20
  137. package/dist/inspector-panel.d.ts.map +0 -1
  138. package/dist/layers-panel.d.ts +0 -8
  139. package/dist/layers-panel.d.ts.map +0 -1
  140. package/dist/left-sidebar.d.ts +0 -16
  141. package/dist/left-sidebar.d.ts.map +0 -1
  142. package/dist/motion-sector-controls.d.ts +0 -36
  143. package/dist/motion-sector-controls.d.ts.map +0 -1
  144. package/dist/store.d.ts +0 -148
  145. package/dist/store.d.ts.map +0 -1
  146. package/dist/style-manager-accordion.d.ts +0 -38
  147. package/dist/style-manager-accordion.d.ts.map +0 -1
  148. package/dist/table-spreadsheet-editor.d.ts +0 -15
  149. package/dist/table-spreadsheet-editor.d.ts.map +0 -1
  150. package/dist/toolbar.d.ts +0 -11
  151. package/dist/toolbar.d.ts.map +0 -1
  152. package/dist/traits-panel.d.ts +0 -20
  153. package/dist/traits-panel.d.ts.map +0 -1
  154. package/dist/typography-sector-controls.d.ts +0 -17
  155. package/dist/typography-sector-controls.d.ts.map +0 -1
  156. package/dist/variable-autocomplete-input.d.ts +0 -43
  157. package/dist/variable-autocomplete-input.d.ts.map +0 -1
  158. package/dist/variable-picker.d.ts +0 -21
  159. package/dist/variable-picker.d.ts.map +0 -1
@@ -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"}
@@ -1 +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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"}
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,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,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"}
@@ -1,16 +1,63 @@
1
1
  import React from 'react';
2
- import { PageDocument } from '@kubuild/schema';
2
+ import { PageDocument, type Artboard, type ArtboardType } from '@kubuild/schema';
3
3
  import { ComponentRegistry } from '@kubuild/components';
4
4
  import { RuntimeContext, Diagnostic } from '@kubuild/core';
5
5
  import { Viewport } from '../../store';
6
6
  import { EditorCanvasConfig } from '../../config';
7
+ import { type AiGenerationPlaceholderStatus } from '../../ai/generate-page';
8
+ export interface EditorPageItem {
9
+ id: string;
10
+ name: string;
11
+ slug?: string;
12
+ document: PageDocument;
13
+ width?: number;
14
+ viewport?: Viewport;
15
+ /**
16
+ * Which kind of surface this artboard is. Page artboards come from the host's `pages`
17
+ * prop; component artboards (detached modals/drawers/blocks) come from the editor store
18
+ * and are rendered side by side with pages on the same canvas. Defaults to 'page'.
19
+ */
20
+ artboardType?: ArtboardType;
21
+ /** Component artboards only: the id `open_modal` / `close_modal` actions target. */
22
+ triggerId?: string;
23
+ /**
24
+ * Free position on the infinite canvas, in unscaled canvas px. Absent means the artboard
25
+ * hasn't been placed yet and the canvas lays it out in a row instead.
26
+ */
27
+ position?: {
28
+ x: number;
29
+ y: number;
30
+ };
31
+ }
7
32
  export interface EditorCanvasProps {
8
33
  document?: PageDocument;
9
34
  registry: ComponentRegistry;
10
35
  context?: RuntimeContext;
11
36
  viewport: Viewport;
12
37
  onDiagnostic?: (diagnostic: Diagnostic) => void;
38
+ /**
39
+ * Overrides the store's `aiGenerationStatus` (STORA-508) for this render — same
40
+ * store-override pattern as the `document` prop above. Optional: `KubuildEditor`
41
+ * doesn't pass this, so `EditorCanvas` reads live `aiGenerationStatus` from the store
42
+ * as usual in a real app; the prop exists so callers/tests can control it directly.
43
+ */
44
+ aiGenerationStatus?: AiGenerationPlaceholderStatus | null;
13
45
  config?: EditorCanvasConfig;
46
+ fluidWidth?: number;
47
+ onFluidWidthChange?: (width: number) => void;
48
+ onBreakpointChange?: (breakpoint: Viewport) => void;
49
+ pages?: EditorPageItem[];
50
+ activePageId?: string;
51
+ onActivePageChange?: (pageId: string) => void;
52
+ onPagesChange?: (pages: EditorPageItem[]) => void;
53
+ /**
54
+ * Overrides the store's `componentArtboards` for this render — same store-override
55
+ * pattern as the `document` and `aiGenerationStatus` props above.
56
+ */
57
+ componentArtboards?: Artboard[];
58
+ /** Overrides the store's `activeArtboardId` for this render. */
59
+ activeArtboardId?: string | null;
60
+ className?: string;
14
61
  }
15
62
  export declare const EditorCanvas: React.FC<EditorCanvasProps>;
16
63
  //# sourceMappingURL=canvas.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"canvas.d.ts","sourceRoot":"","sources":["../../../src/components/canvas/canvas.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAuD,MAAM,OAAO,CAAC;AAC5E,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAkB,MAAM,qBAAqB,CAAC;AAExE,OAAO,EACL,cAAc,EACd,UAAU,EAMX,MAAM,eAAe,CAAC;AACvB,OAAO,EAAkB,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAElD,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,QAAQ,EAAE,QAAQ,CAAC;IACnB,YAAY,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC;IAChD,MAAM,CAAC,EAAE,kBAAkB,CAAC;CAC7B;AA0CD,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAsdpD,CAAC"}
1
+ {"version":3,"file":"canvas.d.ts","sourceRoot":"","sources":["../../../src/components/canvas/canvas.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA6E,MAAM,OAAO,CAAC;AAClG,OAAO,EAAE,YAAY,EAAE,KAAK,QAAQ,EAAE,KAAK,YAAY,EAAE,MAAM,iBAAiB,CAAC;AACjF,OAAO,EAAE,iBAAiB,EAAkB,MAAM,qBAAqB,CAAC;AAExE,OAAO,EACL,cAAc,EACd,UAAU,EAMX,MAAM,eAAe,CAAC;AACvB,OAAO,EAAkB,QAAQ,EAAE,MAAM,aAAa,CAAC;AAWvD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EACL,KAAK,6BAA6B,EAEnC,MAAM,wBAAwB,CAAC;AAEhC,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,YAAY,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB;;;;OAIG;IACH,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,oFAAoF;IACpF,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,QAAQ,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CACrC;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,QAAQ,EAAE,QAAQ,CAAC;IACnB,YAAY,CAAC,EAAE,CAAC,UAAU,EAAE,UAAU,KAAK,IAAI,CAAC;IAChD;;;;;OAKG;IACH,kBAAkB,CAAC,EAAE,6BAA6B,GAAG,IAAI,CAAC;IAC1D,MAAM,CAAC,EAAE,kBAAkB,CAAC;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,kBAAkB,CAAC,EAAE,CAAC,UAAU,EAAE,QAAQ,KAAK,IAAI,CAAC;IACpD,KAAK,CAAC,EAAE,cAAc,EAAE,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,kBAAkB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IAC9C,aAAa,CAAC,EAAE,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,IAAI,CAAC;IAClD;;;OAGG;IACH,kBAAkB,CAAC,EAAE,QAAQ,EAAE,CAAC;IAChC,gEAAgE;IAChE,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA+CD,eAAO,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAu9CpD,CAAC"}
@@ -0,0 +1,27 @@
1
+ import React from 'react';
2
+ import { CanvasRect } from './smart-guides';
3
+ export interface DistanceMeasurement {
4
+ id: string;
5
+ type: 'horizontal' | 'vertical';
6
+ distance: number;
7
+ startX: number;
8
+ startY: number;
9
+ endX: number;
10
+ endY: number;
11
+ badgeX: number;
12
+ badgeY: number;
13
+ }
14
+ export interface DistanceMeterProps {
15
+ selectedRect: CanvasRect;
16
+ targetRect: CanvasRect;
17
+ }
18
+ /**
19
+ * Calculates distance measurement lines and pixel badges between two bounding boxes (STORA-124).
20
+ */
21
+ export declare function calculateDistances(selected: CanvasRect, target: CanvasRect): DistanceMeasurement[];
22
+ /**
23
+ * Distance Meter component on Alt/Option hold (STORA-124).
24
+ * Renders measurement lines with pixel badges between selected and hovered nodes.
25
+ */
26
+ export declare const DistanceMeter: React.FC<DistanceMeterProps>;
27
+ //# sourceMappingURL=distance-meter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"distance-meter.d.ts","sourceRoot":"","sources":["../../../src/components/canvas/distance-meter.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,YAAY,GAAG,UAAU,CAAC;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,UAAU,CAAC;IACzB,UAAU,EAAE,UAAU,CAAC;CACxB;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,UAAU,EACpB,MAAM,EAAE,UAAU,GACjB,mBAAmB,EAAE,CAyOvB;AAED;;;GAGG;AACH,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAoFtD,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"floating-badges.d.ts","sourceRoot":"","sources":["../../../src/components/canvas/floating-badges.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAKxD,MAAM,WAAW,yBAAyB;IACxC,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,YAAY,CAAC;IACvB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,YAAY,EAAE;QACZ,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,SAAS,KAAK,IAAI,CAAC;CAC5C;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,oBAAoB,EAAE,KAAK,CAAC,EAAE,CAAC,yBAAyB,CAkGpE,CAAC"}
1
+ {"version":3,"file":"floating-badges.d.ts","sourceRoot":"","sources":["../../../src/components/canvas/floating-badges.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,YAAY,EAAgC,MAAM,iBAAiB,CAAC;AAC7E,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAKxD,MAAM,WAAW,yBAAyB;IACxC,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,YAAY,CAAC;IACvB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,YAAY,EAAE;QACZ,GAAG,EAAE,MAAM,CAAC;QACZ,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;IACF,WAAW,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,SAAS,KAAK,IAAI,CAAC;CAC5C;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,oBAAoB,EAAE,KAAK,CAAC,EAAE,CAAC,yBAAyB,CAqIpE,CAAC"}
@@ -0,0 +1,18 @@
1
+ import React from 'react';
2
+ import { Node } from '@kubuild/schema';
3
+ import { CanvasRect } from './smart-guides';
4
+ export interface GridGuidelinesOverlayProps {
5
+ node: Node;
6
+ selectedRect: CanvasRect;
7
+ viewport?: 'desktop' | 'tablet' | 'mobile';
8
+ zoom?: number;
9
+ containerRef?: React.RefObject<HTMLElement | null>;
10
+ }
11
+ /**
12
+ * Canvas Grid Guidelines Overlay (STORA-114).
13
+ * When a Grid container node is selected (type === 'grid' or display === 'grid'),
14
+ * renders a visual dashed grid overlay showing column tracks and row tracks with gaps
15
+ * over the selected element.
16
+ */
17
+ export declare const GridGuidelinesOverlay: React.FC<GridGuidelinesOverlayProps>;
18
+ //# sourceMappingURL=grid-guidelines-overlay.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"grid-guidelines-overlay.d.ts","sourceRoot":"","sources":["../../../src/components/canvas/grid-guidelines-overlay.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkB,MAAM,OAAO,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAG5C,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,IAAI,CAAC;IACX,YAAY,EAAE,UAAU,CAAC;IACzB,QAAQ,CAAC,EAAE,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAC3C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,KAAK,CAAC,SAAS,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;CACpD;AAuBD;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,EAAE,KAAK,CAAC,EAAE,CAAC,0BAA0B,CAwLtE,CAAC"}
@@ -1,4 +1,13 @@
1
1
  export * from './breadcrumbs';
2
2
  export * from './canvas';
3
3
  export * from './floating-badges';
4
+ export * from './smart-guides';
5
+ export * from './resize-handles';
6
+ export * from './spacing-sliders';
7
+ export * from './distance-meter';
8
+ export * from './canvas-pan-zoom';
9
+ export * from './marquee-selection';
10
+ export * from './viewport-resizer';
11
+ export * from './multi-device-preview';
12
+ export * from './grid-guidelines-overlay';
4
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/canvas/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/components/canvas/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,UAAU,CAAC;AACzB,cAAc,mBAAmB,CAAC;AAClC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC;AACvC,cAAc,2BAA2B,CAAC"}
@@ -0,0 +1,25 @@
1
+ import React from 'react';
2
+ import { CanvasRect } from './smart-guides';
3
+ export interface MarqueeRect {
4
+ top: number;
5
+ left: number;
6
+ width: number;
7
+ height: number;
8
+ }
9
+ export interface NodeRectEntry {
10
+ id: string;
11
+ rect: CanvasRect;
12
+ }
13
+ export declare function rectsIntersect(a: CanvasRect, b: CanvasRect): boolean;
14
+ /**
15
+ * Calculates which nodes in `nodes` intersect with the given `marqueeRect` (STORA-133).
16
+ */
17
+ export declare function calculateMarqueeIntersections(marqueeRect: CanvasRect, nodes: NodeRectEntry[]): string[];
18
+ export interface MarqueeSelectionBoxProps {
19
+ rect: MarqueeRect | null;
20
+ }
21
+ /**
22
+ * Marquee Drag Selection Box component (STORA-133).
23
+ */
24
+ export declare const MarqueeSelectionBox: React.FC<MarqueeSelectionBoxProps>;
25
+ //# sourceMappingURL=marquee-selection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"marquee-selection.d.ts","sourceRoot":"","sources":["../../../src/components/canvas/marquee-selection.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAE5C,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,UAAU,CAAC;CAClB;AAED,wBAAgB,cAAc,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,UAAU,GAAG,OAAO,CAOpE;AAED;;GAEG;AACH,wBAAgB,6BAA6B,CAC3C,WAAW,EAAE,UAAU,EACvB,KAAK,EAAE,aAAa,EAAE,GACrB,MAAM,EAAE,CAIV;AAED,MAAM,WAAW,wBAAwB;IACvC,IAAI,EAAE,WAAW,GAAG,IAAI,CAAC;CAC1B;AAED;;GAEG;AACH,eAAO,MAAM,mBAAmB,EAAE,KAAK,CAAC,EAAE,CAAC,wBAAwB,CAqBlE,CAAC"}
@@ -0,0 +1,30 @@
1
+ import React from 'react';
2
+ import { PageDocument } from '@kubuild/schema';
3
+ import { ComponentRegistry } from '@kubuild/components';
4
+ import { RuntimeContext } from '@kubuild/core';
5
+ import { Viewport } from '../../store';
6
+ export interface DeviceSpec {
7
+ id: Viewport;
8
+ label: string;
9
+ width: number;
10
+ minHeight: number;
11
+ icon: React.ComponentType<{
12
+ className?: string;
13
+ }>;
14
+ resolutionBadge: string;
15
+ }
16
+ export declare const DEVICE_SPECS: DeviceSpec[];
17
+ export interface MultiDevicePreviewProps {
18
+ document?: PageDocument;
19
+ registry: ComponentRegistry;
20
+ context?: RuntimeContext;
21
+ onClose?: () => void;
22
+ className?: string;
23
+ }
24
+ /**
25
+ * Side-by-Side Multi-Device Preview Mode (STORA-143).
26
+ * Renders Desktop (1200px), Tablet (768px), and Mobile (375px) frames side-by-side simultaneously
27
+ * with device frame headers, responsive scale controls, and synced node selection.
28
+ */
29
+ export declare const MultiDevicePreview: React.FC<MultiDevicePreviewProps>;
30
+ //# sourceMappingURL=multi-device-preview.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multi-device-preview.d.ts","sourceRoot":"","sources":["../../../src/components/canvas/multi-device-preview.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA4B,MAAM,OAAO,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAExD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAkB,QAAQ,EAAE,MAAM,aAAa,CAAC;AAYvD,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,QAAQ,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,KAAK,CAAC,aAAa,CAAC;QAAE,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClD,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,eAAO,MAAM,YAAY,EAAE,UAAU,EAyBpC,CAAC;AAEF,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,EAAE,YAAY,CAAC;IACxB,QAAQ,EAAE,iBAAiB,CAAC;IAC5B,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,IAAI,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,EAAE,KAAK,CAAC,EAAE,CAAC,uBAAuB,CAkOhE,CAAC"}
@@ -0,0 +1,18 @@
1
+ import React from 'react';
2
+ import { CanvasRect, GuideLine } from './smart-guides';
3
+ export type ResizeHandleDirection = 'n' | 's' | 'e' | 'w' | 'ne' | 'nw' | 'se' | 'sw';
4
+ export interface ResizeHandlesProps {
5
+ selectedNodeId: string;
6
+ selectedRect: CanvasRect;
7
+ zoom?: number;
8
+ candidateRects?: CanvasRect[];
9
+ onGuidesChange?: (guides: GuideLine[]) => void;
10
+ onResizeEnd?: (newWidth: number, newHeight: number) => void;
11
+ }
12
+ /**
13
+ * 8-Point Visual Transform & Resize Handles (STORA-120).
14
+ * Supports aspect ratio lock (Shift key), live dimension tooltip (W: Xpx H: Ypx),
15
+ * 60 FPS performance via requestAnimationFrame (STORA-125), and snapping integration (STORA-123).
16
+ */
17
+ export declare const ResizeHandles: React.FC<ResizeHandlesProps>;
18
+ //# sourceMappingURL=resize-handles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resize-handles.d.ts","sourceRoot":"","sources":["../../../src/components/canvas/resize-handles.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmD,MAAM,OAAO,CAAC;AAExE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAqB,MAAM,gBAAgB,CAAC;AAE1E,MAAM,MAAM,qBAAqB,GAC7B,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,IAAI,GACJ,IAAI,GACJ,IAAI,GACJ,IAAI,CAAC;AAET,MAAM,WAAW,kBAAkB;IACjC,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,UAAU,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,UAAU,EAAE,CAAC;IAC9B,cAAc,CAAC,EAAE,CAAC,MAAM,EAAE,SAAS,EAAE,KAAK,IAAI,CAAC;IAC/C,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7D;AAgED;;;;GAIG;AACH,eAAO,MAAM,aAAa,EAAE,KAAK,CAAC,EAAE,CAAC,kBAAkB,CAgRtD,CAAC"}