@cocoar/vue-page-builder 2.19.0 → 3.0.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 (202) hide show
  1. package/IDP_INTEGRATION.md +350 -0
  2. package/README.md +498 -169
  3. package/dist/BuilderElementCodeDialog-DXGNzleE.js +64 -0
  4. package/dist/BuilderExpressionDialog-yIfwYgXD.js +61 -0
  5. package/dist/BuilderLogicPanel-C9urz5Cd.js +68 -0
  6. package/dist/BuilderPageRootCodeDialog-CQsg_ozW.js +61 -0
  7. package/dist/CoarPageBuilder.vue.d.ts +71 -1
  8. package/dist/CoarPageBuilder.vue.d.ts.map +1 -1
  9. package/dist/CoarPageRenderer.vue.d.ts +36 -1
  10. package/dist/CoarPageRenderer.vue.d.ts.map +1 -1
  11. package/dist/PageNode.vue.d.ts +9 -1
  12. package/dist/PageNode.vue.d.ts.map +1 -1
  13. package/dist/VisualMarkupInspector-CmAOc-CH.js +54 -0
  14. package/dist/_plugin-vue_export-helper-BTgDAbhb.js +8 -0
  15. package/dist/actionValues.d.ts +21 -0
  16. package/dist/actionValues.d.ts.map +1 -0
  17. package/dist/assets/pageScriptRuntime.worker-Cll8Lm_I.js +25 -0
  18. package/dist/builder/BuilderCanvas.vue.d.ts +31 -1
  19. package/dist/builder/BuilderCanvas.vue.d.ts.map +1 -1
  20. package/dist/builder/BuilderCanvasNode.vue.d.ts.map +1 -1
  21. package/dist/builder/BuilderCompositionsPanel.vue.d.ts +3 -0
  22. package/dist/builder/BuilderCompositionsPanel.vue.d.ts.map +1 -0
  23. package/dist/builder/BuilderElementCodeDialog.vue.d.ts +14 -0
  24. package/dist/builder/BuilderElementCodeDialog.vue.d.ts.map +1 -0
  25. package/dist/builder/BuilderExpressionDialog.vue.d.ts +11 -0
  26. package/dist/builder/BuilderExpressionDialog.vue.d.ts.map +1 -0
  27. package/dist/builder/BuilderFxButton.vue.d.ts +28 -0
  28. package/dist/builder/BuilderFxButton.vue.d.ts.map +1 -0
  29. package/dist/builder/BuilderLogicPanel.vue.d.ts +3 -0
  30. package/dist/builder/BuilderLogicPanel.vue.d.ts.map +1 -0
  31. package/dist/builder/BuilderOutline.vue.d.ts.map +1 -1
  32. package/dist/builder/BuilderOutlineNode.vue.d.ts.map +1 -1
  33. package/dist/builder/BuilderPageRootCodeDialog.vue.d.ts +13 -0
  34. package/dist/builder/BuilderPageRootCodeDialog.vue.d.ts.map +1 -0
  35. package/dist/builder/BuilderPalette.vue.d.ts +3 -0
  36. package/dist/builder/BuilderPalette.vue.d.ts.map +1 -0
  37. package/dist/builder/BuilderPropsPanel.vue.d.ts.map +1 -1
  38. package/dist/builder/BuilderTranslationsPanel.vue.d.ts +6 -0
  39. package/dist/builder/BuilderTranslationsPanel.vue.d.ts.map +1 -0
  40. package/dist/builder/boxSides.d.ts +30 -0
  41. package/dist/builder/boxSides.d.ts.map +1 -0
  42. package/dist/builder/builderContext.d.ts +46 -4
  43. package/dist/builder/builderContext.d.ts.map +1 -1
  44. package/dist/builder/expressionAuthoring.d.ts +7 -0
  45. package/dist/builder/expressionAuthoring.d.ts.map +1 -0
  46. package/dist/builder/nodeDefaults.d.ts +10 -5
  47. package/dist/builder/nodeDefaults.d.ts.map +1 -1
  48. package/dist/builder/pageCodeAuthoring.d.ts +11 -0
  49. package/dist/builder/pageCodeAuthoring.d.ts.map +1 -0
  50. package/dist/builder/props/ActionPropsEditor.vue.d.ts +9 -0
  51. package/dist/builder/props/ActionPropsEditor.vue.d.ts.map +1 -0
  52. package/dist/builder/props/BuilderViewportControl.vue.d.ts +23 -0
  53. package/dist/builder/props/BuilderViewportControl.vue.d.ts.map +1 -0
  54. package/dist/builder/props/BuilderZoomControl.vue.d.ts +24 -0
  55. package/dist/builder/props/BuilderZoomControl.vue.d.ts.map +1 -0
  56. package/dist/builder/props/CompoundLengthProperty.vue.d.ts +20 -0
  57. package/dist/builder/props/CompoundLengthProperty.vue.d.ts.map +1 -0
  58. package/dist/builder/props/StyleProps.vue.d.ts +1 -0
  59. package/dist/builder/props/StyleProps.vue.d.ts.map +1 -1
  60. package/dist/builder/schemaMigrateV1.d.ts +7 -0
  61. package/dist/builder/schemaMigrateV1.d.ts.map +1 -1
  62. package/dist/builder/schemaNormalize.d.ts.map +1 -1
  63. package/dist/builder/{useSchemaValidation.d.ts → useAuthoringFindings.d.ts} +8 -8
  64. package/dist/builder/useAuthoringFindings.d.ts.map +1 -0
  65. package/dist/builder/useBuilderDnd.d.ts +8 -1
  66. package/dist/builder/useBuilderDnd.d.ts.map +1 -1
  67. package/dist/builder/useCanvasZoom.d.ts +50 -0
  68. package/dist/builder/useCanvasZoom.d.ts.map +1 -0
  69. package/dist/builder/usePageBuilder.d.ts +2 -0
  70. package/dist/builder/usePageBuilder.d.ts.map +1 -1
  71. package/dist/builder/usePageCompositions.d.ts +71 -0
  72. package/dist/builder/usePageCompositions.d.ts.map +1 -0
  73. package/dist/builderContext-B3rX2dxZ.js +4 -0
  74. package/dist/compositions.d.ts +79 -0
  75. package/dist/compositions.d.ts.map +1 -0
  76. package/dist/conditions.d.ts +8 -0
  77. package/dist/conditions.d.ts.map +1 -0
  78. package/dist/context.d.ts +17 -3
  79. package/dist/context.d.ts.map +1 -1
  80. package/dist/documentValidation.d.ts +12 -0
  81. package/dist/documentValidation.d.ts.map +1 -0
  82. package/dist/elements/builtins.d.ts.map +1 -1
  83. package/dist/elements/button/ButtonInspector.vue.d.ts.map +1 -1
  84. package/dist/elements/button/ButtonRenderer.vue.d.ts.map +1 -1
  85. package/dist/elements/button/index.d.ts +2 -2
  86. package/dist/elements/button/index.d.ts.map +1 -1
  87. package/dist/elements/card/CardInspector.vue.d.ts.map +1 -1
  88. package/dist/elements/card/index.d.ts.map +1 -1
  89. package/dist/elements/checkbox/CheckboxDefaultInput.vue.d.ts.map +1 -1
  90. package/dist/elements/checkbox/CheckboxInspector.vue.d.ts.map +1 -1
  91. package/dist/elements/checkbox/CheckboxRenderer.vue.d.ts.map +1 -1
  92. package/dist/elements/checkbox/index.d.ts.map +1 -1
  93. package/dist/elements/date-input/DateInputDefaultInput.vue.d.ts.map +1 -1
  94. package/dist/elements/date-input/DateInputInspector.vue.d.ts.map +1 -1
  95. package/dist/elements/date-input/index.d.ts.map +1 -1
  96. package/dist/elements/datetime-input/DateTimeInputDefaultInput.vue.d.ts.map +1 -1
  97. package/dist/elements/datetime-input/DateTimeInputInspector.vue.d.ts.map +1 -1
  98. package/dist/elements/datetime-input/index.d.ts.map +1 -1
  99. package/dist/elements/feedback/FeedbackInspector.vue.d.ts +8 -0
  100. package/dist/elements/feedback/FeedbackInspector.vue.d.ts.map +1 -0
  101. package/dist/elements/feedback/FeedbackPreview.vue.d.ts +7 -0
  102. package/dist/elements/feedback/FeedbackPreview.vue.d.ts.map +1 -0
  103. package/dist/elements/{stack/StackInspector.vue.d.ts → feedback/FeedbackRenderer.vue.d.ts} +3 -4
  104. package/dist/elements/feedback/FeedbackRenderer.vue.d.ts.map +1 -0
  105. package/dist/elements/feedback/index.d.ts +6 -0
  106. package/dist/elements/feedback/index.d.ts.map +1 -0
  107. package/dist/elements/heading/HeadingInspector.vue.d.ts.map +1 -1
  108. package/dist/elements/heading/index.d.ts.map +1 -1
  109. package/dist/elements/image/ImageInspector.vue.d.ts.map +1 -1
  110. package/dist/elements/image/index.d.ts.map +1 -1
  111. package/dist/elements/link/LinkInspector.vue.d.ts +1 -1
  112. package/dist/elements/link/LinkInspector.vue.d.ts.map +1 -1
  113. package/dist/elements/link/index.d.ts +1 -2
  114. package/dist/elements/link/index.d.ts.map +1 -1
  115. package/dist/elements/multi-select/MultiSelectDefaultInput.vue.d.ts.map +1 -1
  116. package/dist/elements/multi-select/MultiSelectInspector.vue.d.ts.map +1 -1
  117. package/dist/elements/multi-select/index.d.ts.map +1 -1
  118. package/dist/elements/note/NoteInspector.vue.d.ts.map +1 -1
  119. package/dist/elements/number-input/NumberInputDefaultInput.vue.d.ts.map +1 -1
  120. package/dist/elements/number-input/NumberInputInspector.vue.d.ts.map +1 -1
  121. package/dist/elements/number-input/index.d.ts.map +1 -1
  122. package/dist/elements/otp-input/OtpInputInspector.vue.d.ts.map +1 -1
  123. package/dist/elements/otp-input/index.d.ts.map +1 -1
  124. package/dist/elements/paragraph/index.d.ts.map +1 -1
  125. package/dist/elements/password-input/PasswordInputInspector.vue.d.ts.map +1 -1
  126. package/dist/elements/password-input/index.d.ts.map +1 -1
  127. package/dist/elements/previewUtils.d.ts.map +1 -1
  128. package/dist/elements/radio-group/RadioGroupDefaultInput.vue.d.ts.map +1 -1
  129. package/dist/elements/radio-group/RadioGroupInspector.vue.d.ts.map +1 -1
  130. package/dist/elements/radio-group/index.d.ts.map +1 -1
  131. package/dist/elements/registry.d.ts +265 -2
  132. package/dist/elements/registry.d.ts.map +1 -1
  133. package/dist/elements/repeat/RepeatInspector.vue.d.ts +8 -0
  134. package/dist/elements/repeat/RepeatInspector.vue.d.ts.map +1 -0
  135. package/dist/elements/repeat/RepeatRenderer.vue.d.ts +29 -0
  136. package/dist/elements/repeat/RepeatRenderer.vue.d.ts.map +1 -0
  137. package/dist/elements/repeat/index.d.ts +10 -0
  138. package/dist/elements/repeat/index.d.ts.map +1 -0
  139. package/dist/elements/section/SectionInspector.vue.d.ts.map +1 -1
  140. package/dist/elements/section/index.d.ts.map +1 -1
  141. package/dist/elements/select/SelectDefaultInput.vue.d.ts.map +1 -1
  142. package/dist/elements/select/SelectInspector.vue.d.ts.map +1 -1
  143. package/dist/elements/select/index.d.ts.map +1 -1
  144. package/dist/elements/spacer/SpacerInspector.vue.d.ts.map +1 -1
  145. package/dist/elements/stack/StackRenderer.vue.d.ts.map +1 -1
  146. package/dist/elements/stack/index.d.ts.map +1 -1
  147. package/dist/elements/switch/SwitchDefaultInput.vue.d.ts.map +1 -1
  148. package/dist/elements/switch/SwitchInspector.vue.d.ts.map +1 -1
  149. package/dist/elements/switch/index.d.ts.map +1 -1
  150. package/dist/elements/text-input/TextInputInspector.vue.d.ts.map +1 -1
  151. package/dist/elements/text-input/index.d.ts.map +1 -1
  152. package/dist/elements/usePageElement.d.ts +6 -2
  153. package/dist/elements/usePageElement.d.ts.map +1 -1
  154. package/dist/elements/visual-markup/VisualMarkupInspector.vue.d.ts +10 -0
  155. package/dist/elements/visual-markup/VisualMarkupInspector.vue.d.ts.map +1 -0
  156. package/dist/elements/visual-markup/VisualMarkupPreview.vue.d.ts +7 -0
  157. package/dist/elements/visual-markup/VisualMarkupPreview.vue.d.ts.map +1 -0
  158. package/dist/elements/visual-markup/VisualMarkupRenderer.vue.d.ts +7 -0
  159. package/dist/elements/visual-markup/VisualMarkupRenderer.vue.d.ts.map +1 -0
  160. package/dist/elements/visual-markup/index.d.ts +6 -0
  161. package/dist/elements/visual-markup/index.d.ts.map +1 -0
  162. package/dist/elements/visual-markup/visualDocument.d.ts +13 -0
  163. package/dist/elements/visual-markup/visualDocument.d.ts.map +1 -0
  164. package/dist/expressionAuthoring-7iAyadA3.js +74 -0
  165. package/dist/index.css +1 -1
  166. package/dist/index.d.ts +32 -2
  167. package/dist/index.d.ts.map +1 -1
  168. package/dist/index.js +8571 -3448
  169. package/dist/pageCode-echPQdna.js +455 -0
  170. package/dist/pageCode.d.ts +101 -0
  171. package/dist/pageCode.d.ts.map +1 -0
  172. package/dist/pageCodeAuthoring-C8grEAUf.js +123 -0
  173. package/dist/responsive.d.ts +7 -0
  174. package/dist/responsive.d.ts.map +1 -0
  175. package/dist/runtime/PageRuntimeHost.d.ts +57 -0
  176. package/dist/runtime/PageRuntimeHost.d.ts.map +1 -0
  177. package/dist/runtime/PageScriptRuntime.d.ts +62 -0
  178. package/dist/runtime/PageScriptRuntime.d.ts.map +1 -0
  179. package/dist/runtime/pageScriptRuntime.worker.d.ts +1 -0
  180. package/dist/runtime/pageScriptRuntime.worker.d.ts.map +1 -0
  181. package/dist/runtime/runtimeProtocol.d.ts +150 -0
  182. package/dist/runtime/runtimeProtocol.d.ts.map +1 -0
  183. package/dist/runtime/usePageCodeRuntime.d.ts +32 -0
  184. package/dist/runtime/usePageCodeRuntime.d.ts.map +1 -0
  185. package/dist/runtime-worker.js +240 -0
  186. package/dist/runtimeBindings.d.ts +32 -0
  187. package/dist/runtimeBindings.d.ts.map +1 -0
  188. package/dist/runtimeExpressions.d.ts +16 -0
  189. package/dist/runtimeExpressions.d.ts.map +1 -0
  190. package/dist/runtimeProtocol-Bg1C-O0c.js +36 -0
  191. package/dist/runtimeWorkerEntry.d.ts +2 -0
  192. package/dist/runtimeWorkerEntry.d.ts.map +1 -0
  193. package/dist/schema.d.ts +298 -31
  194. package/dist/schema.d.ts.map +1 -1
  195. package/dist/styleMapping.d.ts +7 -0
  196. package/dist/styleMapping.d.ts.map +1 -1
  197. package/dist/translations.d.ts +8 -0
  198. package/dist/translations.d.ts.map +1 -0
  199. package/dist/visualDocument-DKjWBfpW.js +139 -0
  200. package/package.json +24 -6
  201. package/dist/builder/useSchemaValidation.d.ts.map +0 -1
  202. package/dist/elements/stack/StackInspector.vue.d.ts.map +0 -1
@@ -0,0 +1,11 @@
1
+ import { CoarScriptEditorExtraLib } from '@cocoar/vue-script-editor';
2
+ import { ElementNode, PageConfig, PageNode } from '../schema';
3
+ /** Legacy whole-page code IntelliSense, retained for v4 documents. */
4
+ export declare function pageCodeTypeLibrary(schema: PageNode, config?: PageConfig): CoarScriptEditorExtraLib[];
5
+ export declare function elementAuthoringTypeName(node: ElementNode): string;
6
+ export declare function pageStateTypeLibrary(config?: PageConfig): CoarScriptEditorExtraLib[];
7
+ export declare function elementCodeTypeLibrary(schema: PageNode, node: ElementNode, config?: PageConfig): CoarScriptEditorExtraLib[];
8
+ export declare function pageRootCodeTypeLibrary(schema: PageNode, config?: PageConfig): CoarScriptEditorExtraLib[];
9
+ export declare function elementCodePreamble(stateCode: string, node: ElementNode): string;
10
+ export declare function pageRootCodePreamble(stateCode: string): string;
11
+ //# sourceMappingURL=pageCodeAuthoring.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pageCodeAuthoring.d.ts","sourceRoot":"","sources":["../../src/builder/pageCodeAuthoring.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAA;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,QAAQ,EAAgB,MAAM,WAAW,CAAA;AA2EhF,sEAAsE;AACtE,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,QAAQ,EAChB,MAAM,CAAC,EAAE,UAAU,GAClB,wBAAwB,EAAE,CAwC5B;AASD,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,WAAW,GAAG,MAAM,CAElE;AA6CD,wBAAgB,oBAAoB,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,wBAAwB,EAAE,CAQpF;AAED,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,QAAQ,EAChB,IAAI,EAAE,WAAW,EACjB,MAAM,CAAC,EAAE,UAAU,GAClB,wBAAwB,EAAE,CAQ5B;AA6BD,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,QAAQ,EAChB,MAAM,CAAC,EAAE,UAAU,GAClB,wBAAwB,EAAE,CAQ5B;AAED,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE,WAAW,GAAG,MAAM,CAShF;AAED,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAO9D"}
@@ -0,0 +1,9 @@
1
+ import { ActionProps, ElementNode, PageNode } from '../../schema';
2
+ type ActionNode = ElementNode<string, ActionProps>;
3
+ type __VLS_Props = {
4
+ node: ActionNode;
5
+ patch: (update: Partial<PageNode>) => void;
6
+ };
7
+ declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>;
8
+ export default _default;
9
+ //# sourceMappingURL=ActionPropsEditor.vue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ActionPropsEditor.vue.d.ts","sourceRoot":"","sources":["../../../src/builder/props/ActionPropsEditor.vue"],"names":[],"mappings":"AAwXA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAKvE,KAAK,UAAU,GAAG,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAEnD,KAAK,WAAW,GAAG;IACjB,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC;CAC5C,CAAC;;AA4mBF,wBAOG"}
@@ -0,0 +1,23 @@
1
+ import { PagePreviewViewport } from '../../schema';
2
+ /**
3
+ * Size picker shared by the editor and the preview. The selection is one piece
4
+ * of state for both views: they show the same document, so a width that applied
5
+ * to only one of them would be a trap.
6
+ *
7
+ * Entries are authoring-only. A host may replace them, but the style cascade
8
+ * still resolves against the fixed breakpoints, derived from the chosen width —
9
+ * so a custom size never makes a document depend on host configuration to stay
10
+ * readable.
11
+ */
12
+ type __VLS_Props = {
13
+ value: string;
14
+ /** Host-provided sizes; falls back to the built-ins when unset. */
15
+ viewports?: readonly PagePreviewViewport[];
16
+ };
17
+ declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
18
+ select: (id: string) => any;
19
+ }, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
20
+ onSelect?: ((id: string) => any) | undefined;
21
+ }>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>;
22
+ export default _default;
23
+ //# sourceMappingURL=BuilderViewportControl.vue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BuilderViewportControl.vue.d.ts","sourceRoot":"","sources":["../../../src/builder/props/BuilderViewportControl.vue"],"names":[],"mappings":"AAmGA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AAGxD;;;;;;;;;GASG;AACH,KAAK,WAAW,GAAG;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,mEAAmE;IACnE,SAAS,CAAC,EAAE,SAAS,mBAAmB,EAAE,CAAC;CAC5C,CAAC;;;;;;AAuFF,wBAQG"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Zoom stepper shared by the editor canvas and the preview so the control sits
3
+ * in the same place in both. It lives in a toolbar rather than floating over
4
+ * the surface: an overlay would cover whatever the page renders underneath it.
5
+ *
6
+ * The percentage is editable — the steps are a convenience, not the range, so
7
+ * any value between min and max can be typed.
8
+ */
9
+ type __VLS_Props = {
10
+ zoom: number;
11
+ min: number;
12
+ max: number;
13
+ };
14
+ declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {
15
+ set: (zoom: number) => any;
16
+ reset: () => any;
17
+ step: (direction: 1 | -1) => any;
18
+ }, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{
19
+ onSet?: ((zoom: number) => any) | undefined;
20
+ onReset?: (() => any) | undefined;
21
+ onStep?: ((direction: 1 | -1) => any) | undefined;
22
+ }>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>;
23
+ export default _default;
24
+ //# sourceMappingURL=BuilderZoomControl.vue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BuilderZoomControl.vue.d.ts","sourceRoot":"","sources":["../../../src/builder/props/BuilderZoomControl.vue"],"names":[],"mappings":"AAkLA;;;;;;;GAOG;AACH,KAAK,WAAW,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC;;;;;;;;;;AA0K9D,wBAQG"}
@@ -0,0 +1,20 @@
1
+ import { PageElementQuickCompound } from '../../elements/registry';
2
+ /**
3
+ * Several related lengths on one row: the value people actually reach for stays
4
+ * directly editable, the rarer ones fold out underneath. Backed either by one
5
+ * property per part (height + min/max) or by a single CSS shorthand split into
6
+ * sides (padding).
7
+ */
8
+ type __VLS_Props = {
9
+ compound: PageElementQuickCompound;
10
+ readPath: (path: string) => string;
11
+ readShorthand: () => string;
12
+ writePath: (path: string, value: string) => void;
13
+ writeShorthand: (value: string | undefined) => void;
14
+ /** True when the document already carries an assignment for this compound. */
15
+ assigned: boolean;
16
+ onReset: () => void;
17
+ };
18
+ declare const _default: import('vue').DefineComponent<__VLS_Props, {}, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<__VLS_Props> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, false, {}, HTMLDivElement>;
19
+ export default _default;
20
+ //# sourceMappingURL=CompoundLengthProperty.vue.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CompoundLengthProperty.vue.d.ts","sourceRoot":"","sources":["../../../src/builder/props/CompoundLengthProperty.vue"],"names":[],"mappings":"AAuQA,OAAO,KAAK,EAAE,wBAAwB,EAAgC,MAAM,yBAAyB,CAAC;AAGtG;;;;;GAKG;AACH,KAAK,WAAW,GAAG;IACjB,QAAQ,EAAE,wBAAwB,CAAC;IACnC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAC;IACnC,aAAa,EAAE,MAAM,MAAM,CAAC;IAC5B,SAAS,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IACjD,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,KAAK,IAAI,CAAC;IACpD,8EAA8E;IAC9E,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,CAAC;;AAyQF,wBAOG"}
@@ -2,6 +2,7 @@ import { PageNode, NodeStyle } from '../../schema';
2
2
  type __VLS_Props = {
3
3
  node: PageNode;
4
4
  patchStyle: (update: Partial<NodeStyle>) => void;
5
+ patchNode: (update: Partial<PageNode>) => void;
5
6
  /** Container-ness comes from the element registry (page or `def.container`), not the node shape. */
6
7
  container?: boolean;
7
8
  };
@@ -1 +1 @@
1
- {"version":3,"file":"StyleProps.vue.d.ts","sourceRoot":"","sources":["../../../src/builder/props/StyleProps.vue"],"names":[],"mappings":"AAuIA,OAAO,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAExD,KAAK,WAAW,GAAG;IACjB,IAAI,EAAE,QAAQ,CAAC;IACf,UAAU,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC;IACjD,oGAAoG;IACpG,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;;AA8UF,wBAMG"}
1
+ {"version":3,"file":"StyleProps.vue.d.ts","sourceRoot":"","sources":["../../../src/builder/props/StyleProps.vue"],"names":[],"mappings":"AAyVA,OAAO,KAAK,EAA+B,QAAQ,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAKrF,KAAK,WAAW,GAAG;IACjB,IAAI,EAAE,QAAQ,CAAC;IACf,UAAU,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC;IACjD,SAAS,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC;IAC/C,oGAAoG;IACpG,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,CAAC;;AA8tCF,wBAMG"}
@@ -15,4 +15,11 @@ export declare function healMissingPropsBags(node: unknown): unknown;
15
15
  * `migrateV1PropsBag`. Identity-preserving and idempotent.
16
16
  */
17
17
  export declare function migrateLegacyPasswordInput(node: unknown): unknown;
18
+ /**
19
+ * `repeat.props.contextPath` said "a context path" while `binding.source` said "a
20
+ * kind of source" — one word, two grammars. The path is now `contextPath`,
21
+ * next to the `keyPath` it belongs with. Renamed on ingest under the v6
22
+ * migration, identity-preserving and idempotent.
23
+ */
24
+ export declare function migrateRepeatContextPath(node: unknown): unknown;
18
25
  //# sourceMappingURL=schemaMigrateV1.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"schemaMigrateV1.d.ts","sourceRoot":"","sources":["../../src/builder/schemaMigrateV1.ts"],"names":[],"mappings":"AAmDA,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAiCxD;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAiB3D;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAyBjE"}
1
+ {"version":3,"file":"schemaMigrateV1.d.ts","sourceRoot":"","sources":["../../src/builder/schemaMigrateV1.ts"],"names":[],"mappings":"AAsDA,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAiCxD;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAiB3D;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAyBjE;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CA0B/D"}
@@ -1 +1 @@
1
- {"version":3,"file":"schemaNormalize.d.ts","sourceRoot":"","sources":["../../src/builder/schemaNormalize.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,KAAK,EAAe,QAAQ,EAAE,MAAM,WAAW,CAAC;AAEvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAiChE,eAAO,MAAM,mBAAmB,EAAE,WAAW,CAAC,MAAM,CAA0C,CAAC;AAE/F,MAAM,WAAW,cAAc;IAC7B,6DAA6D;IAC7D,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;CAC/B;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,QAAQ,CAAC;IACjB,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,kEAAkE;IAClE,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,mBAAmB,CAAC;CAChC;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAkBzD;AAYD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,eAAe,CAyC/F"}
1
+ {"version":3,"file":"schemaNormalize.d.ts","sourceRoot":"","sources":["../../src/builder/schemaNormalize.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,OAAO,KAAK,EAAe,QAAQ,EAAE,MAAM,WAAW,CAAC;AAEvD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAoChE,eAAO,MAAM,mBAAmB,EAAE,WAAW,CAAC,MAAM,CAA0C,CAAC;AAE/F,MAAM,WAAW,cAAc;IAC7B,6DAA6D;IAC7D,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,QAAQ,EAAE,OAAO,GAAG,SAAS,CAAC;CAC/B;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,QAAQ,CAAC;IACjB,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,kEAAkE;IAClE,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B;;;;;OAKG;IACH,QAAQ,CAAC,EAAE,mBAAmB,CAAC;CAChC;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAkBzD;AAYD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,gBAAgB,GAAG,eAAe,CA8C/F"}
@@ -1,14 +1,14 @@
1
1
  import { Ref } from 'vue';
2
2
  import { PageConfig, PageNode } from '../schema';
3
- export type IssueSeverity = 'warning' | 'error';
4
- export interface ValidationIssue {
3
+ export type FindingSeverity = 'warning' | 'error';
4
+ export interface AuthoringFinding {
5
5
  /** Stable ID of the node the issue belongs to. */
6
6
  nodeId: string;
7
7
  /** Which property of the node is the problem (used to surface the issue near a specific field). */
8
8
  field?: string;
9
9
  /** Human-readable explanation. */
10
10
  message: string;
11
- severity: IssueSeverity;
11
+ severity: FindingSeverity;
12
12
  }
13
13
  /**
14
14
  * Walk the schema reactively and surface common authoring mistakes — buttons
@@ -20,9 +20,9 @@ export interface ValidationIssue {
20
20
  * security boundary) are enforced separately. Validation is purely a UX
21
21
  * scaffold for the builder.
22
22
  */
23
- export declare function useSchemaValidation(schema: Ref<PageNode>, config: Ref<PageConfig | undefined>): {
24
- issues: import('vue').ComputedRef<ValidationIssue[]>;
25
- byNodeId: import('vue').ComputedRef<Map<string, ValidationIssue[]>>;
23
+ export declare function useAuthoringFindings(schema: Ref<PageNode>, config: Ref<PageConfig | undefined>): {
24
+ findings: import('vue').ComputedRef<AuthoringFinding[]>;
25
+ byNodeId: import('vue').ComputedRef<Map<string, AuthoringFinding[]>>;
26
26
  };
27
- export type UseSchemaValidationReturn = ReturnType<typeof useSchemaValidation>;
28
- //# sourceMappingURL=useSchemaValidation.d.ts.map
27
+ export type UseAuthoringFindingsReturn = ReturnType<typeof useAuthoringFindings>;
28
+ //# sourceMappingURL=useAuthoringFindings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useAuthoringFindings.d.ts","sourceRoot":"","sources":["../../src/builder/useAuthoringFindings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,KAAK,GAAG,EAAE,MAAM,KAAK,CAAC;AAEzC,OAAO,KAAK,EAAwC,UAAU,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAS5F,MAAM,MAAM,eAAe,GAAG,SAAS,GAAG,OAAO,CAAC;AAElD,MAAM,WAAW,gBAAgB;IAC/B,kDAAkD;IAClD,MAAM,EAAE,MAAM,CAAA;IACd,mGAAmG;IACnG,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,kCAAkC;IAClC,OAAO,EAAE,MAAM,CAAA;IACf,QAAQ,EAAE,eAAe,CAAA;CAC1B;AAED;;;;;;;;;GASG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,GAAG,CAAC,QAAQ,CAAC,EACrB,MAAM,EAAE,GAAG,CAAC,UAAU,GAAG,SAAS,CAAC;;;EAwdpC;AASD,MAAM,MAAM,0BAA0B,GAAG,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC"}
@@ -5,10 +5,17 @@ export type DragPayload = {
5
5
  kind: 'new';
6
6
  type: string;
7
7
  bind?: FieldBinding;
8
+ } | {
9
+ kind: 'composition';
10
+ id: string;
11
+ version: string;
8
12
  } | {
9
13
  kind: 'move';
10
14
  path: NodePath;
11
15
  };
16
+ export interface BuilderDndOptions {
17
+ insertComposition?: (id: string, version: string, parentPath: NodePath, index: number) => void | Promise<void>;
18
+ }
12
19
  export interface BuilderDndContext {
13
20
  isDragging: Ref<boolean>;
14
21
  payload: Ref<DragPayload | null>;
@@ -29,6 +36,6 @@ export interface BuilderDndContext {
29
36
  onHandlePointerDown(e: PointerEvent, payload: DragPayload, ghostFrom?: HTMLElement | null): void;
30
37
  }
31
38
  export declare const BUILDER_DND: InjectionKey<BuilderDndContext>;
32
- export declare function provideBuilderDnd(builder: UsePageBuilderReturn): BuilderDndContext;
39
+ export declare function provideBuilderDnd(builder: UsePageBuilderReturn, options?: BuilderDndOptions): BuilderDndContext;
33
40
  export declare function useBuilderDnd(): BuilderDndContext;
34
41
  //# sourceMappingURL=useBuilderDnd.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"useBuilderDnd.d.ts","sourceRoot":"","sources":["../../src/builder/useBuilderDnd.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,KAAK,YAAY,EAAE,KAAK,GAAG,EAAE,MAAM,KAAK,CAAC;AACxE,OAAO,EAAc,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAC;AAEzD,OAAO,KAAK,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAE3E,MAAM,MAAM,WAAW,GAInB;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,YAAY,CAAA;CAAE,GAClD;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAC;AAErC,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IACzB,OAAO,EAAE,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IACjC,aAAa,EAAE,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAClC,SAAS,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;IACtC,OAAO,IAAI,IAAI,CAAC;IAChB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,GAAG,OAAO,CAAC;IACxD,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,UAAU,CAAC,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACtD,OAAO,CAAC,UAAU,EAAE,QAAQ,GAAG,OAAO,CAAC;IACvC;;;;;;OAMG;IACH,mBAAmB,CACjB,CAAC,EAAE,YAAY,EACf,OAAO,EAAE,WAAW,EACpB,SAAS,CAAC,EAAE,WAAW,GAAG,IAAI,GAC7B,IAAI,CAAC;CACT;AAED,eAAO,MAAM,WAAW,EAAE,YAAY,CAAC,iBAAiB,CAA4B,CAAC;AAIrF,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,oBAAoB,GAAG,iBAAiB,CAmFlF;AAED,wBAAgB,aAAa,IAAI,iBAAiB,CAIjD"}
1
+ {"version":3,"file":"useBuilderDnd.d.ts","sourceRoot":"","sources":["../../src/builder/useBuilderDnd.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,KAAK,YAAY,EAAE,KAAK,GAAG,EAAE,MAAM,KAAK,CAAC;AACxE,OAAO,EAAc,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAC;AAEzD,OAAO,KAAK,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAE3E,MAAM,MAAM,WAAW,GAInB;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,YAAY,CAAA;CAAE,GAGlD;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,EAAE,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACpD;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,QAAQ,CAAA;CAAE,CAAC;AAErC,MAAM,WAAW,iBAAiB;IAChC,iBAAiB,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAChH;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC;IACzB,OAAO,EAAE,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,CAAC;IACjC,aAAa,EAAE,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;IAClC,SAAS,CAAC,OAAO,EAAE,WAAW,GAAG,IAAI,CAAC;IACtC,OAAO,IAAI,IAAI,CAAC;IAChB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,GAAG,OAAO,CAAC;IACxD,WAAW,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,UAAU,CAAC,UAAU,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACtD,OAAO,CAAC,UAAU,EAAE,QAAQ,GAAG,OAAO,CAAC;IACvC;;;;;;OAMG;IACH,mBAAmB,CACjB,CAAC,EAAE,YAAY,EACf,OAAO,EAAE,WAAW,EACpB,SAAS,CAAC,EAAE,WAAW,GAAG,IAAI,GAC7B,IAAI,CAAC;CACT;AAED,eAAO,MAAM,WAAW,EAAE,YAAY,CAAC,iBAAiB,CAA4B,CAAC;AAIrF,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,oBAAoB,EAAE,OAAO,GAAE,iBAAsB,GAAG,iBAAiB,CAwFnH;AAED,wBAAgB,aAAa,IAAI,iBAAiB,CAIjD"}
@@ -0,0 +1,50 @@
1
+ import { Ref } from 'vue';
2
+ /**
3
+ * Canvas zoom for the builder.
4
+ *
5
+ * Scaling with `transform`, not the `zoom` property: `zoom` relayouts, so the
6
+ * authored page would resolve its responsive rules against a different width
7
+ * than the real viewport — an editor must not silently change the layout it is
8
+ * showing. The cost is that a transform never affects the layout box, so the
9
+ * scrollable area has to be re-derived from the content size.
10
+ *
11
+ * The content's own width is pinned to the viewport width it would have at
12
+ * 100%. Without that pin the content would fill the scaled frame, whose size is
13
+ * computed from the content — a feedback loop that collapses the canvas to a
14
+ * couple of pixels.
15
+ *
16
+ * Pointer hit-testing needs no changes: the DnD engine works in client
17
+ * coordinates throughout and `getBoundingClientRect()` already reports the
18
+ * transformed rect.
19
+ */
20
+ export declare const CANVAS_ZOOM_STEPS: readonly [0.25, 0.5, 0.75, 1, 1.25, 1.5, 2];
21
+ export interface CanvasZoomOptions {
22
+ /**
23
+ * Pin the content to the viewport's width. Required whenever the content has
24
+ * no intrinsic width — the editor canvas always, and the preview while its
25
+ * frame is fluid (`width: 100%`). Without the pin, measuring a
26
+ * percentage-width child to size its own parent feeds back and collapses it.
27
+ * A frame with a simulated device width must NOT be pinned; it keeps its own.
28
+ */
29
+ pinToViewportWidth?: boolean | Ref<boolean>;
30
+ /**
31
+ * Overrides the pinned width, e.g. once the editor simulates a device width.
32
+ * Ignored unless `pinToViewportWidth` is set.
33
+ */
34
+ pinnedWidth?: Ref<number | null | undefined>;
35
+ }
36
+ export declare function useCanvasZoom(viewportRef: Ref<HTMLElement | null>, contentRef: Ref<HTMLElement | null>, options?: CanvasZoomOptions): {
37
+ zoom: Ref<number, number>;
38
+ setZoom: (value: number) => void;
39
+ step: (direction: 1 | -1) => void;
40
+ reset: () => void;
41
+ contentStyle: import('vue').ComputedRef<Record<string, string>>;
42
+ frameStyle: import('vue').ComputedRef<{
43
+ width?: undefined;
44
+ height?: undefined;
45
+ } | {
46
+ width: string;
47
+ height: string;
48
+ }>;
49
+ };
50
+ //# sourceMappingURL=useCanvasZoom.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCanvasZoom.d.ts","sourceRoot":"","sources":["../../src/builder/useCanvasZoom.ts"],"names":[],"mappings":"AAAA,OAAO,EAAyC,KAAK,GAAG,EAAE,MAAM,KAAK,CAAC;AAEtE;;;;;;;;;;;;;;;;;GAiBG;AACH,eAAO,MAAM,iBAAiB,6CAA8C,CAAC;AAM7E,MAAM,WAAW,iBAAiB;IAChC;;;;;;OAMG;IACH,kBAAkB,CAAC,EAAE,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC;IAC5C;;;OAGG;IACH,WAAW,CAAC,EAAE,GAAG,CAAC,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC,CAAC;CAC9C;AAED,wBAAgB,aAAa,CAC3B,WAAW,EAAE,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,EACpC,UAAU,EAAE,GAAG,CAAC,WAAW,GAAG,IAAI,CAAC,EACnC,OAAO,GAAE,iBAAsB;;qBAkFP,MAAM;sBASL,CAAC,GAAG,CAAC,CAAC;;;;;;;;;;EAehC"}
@@ -34,6 +34,8 @@ export declare function usePageBuilder(options?: UsePageBuilderOptions): {
34
34
  select: (path: NodePath | null) => void;
35
35
  selectNode: (node: PageNode) => void;
36
36
  addChild: (parentPath: NodePath, type: string, atIndex?: number, bind?: FieldBinding) => void;
37
+ insertNode: (parentPath: NodePath, node: PageNode, atIndex?: number) => void;
38
+ replaceAt: (path: NodePath, node: PageNode) => void;
37
39
  convertTo: (path: NodePath, toType: string) => void;
38
40
  remove: (path: NodePath) => void;
39
41
  duplicate: (path: NodePath) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"usePageBuilder.d.ts","sourceRoot":"","sources":["../../src/builder/usePageBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,WAAW,EAAE,KAAK,GAAG,EAAE,MAAM,KAAK,CAAC;AAC5E,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAEtD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAEhE,OAAO,EAWL,KAAK,QAAQ,EACd,MAAM,cAAc,CAAC;AAEtB,iFAAiF;AACjF,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;IACvB,OAAO,CAAC,EAAE,QAAQ,CAAC;IACnB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,WAAW,CAAC,mBAAmB,CAAC,CAAC;IAC5C;;;;OAIG;IACH,MAAM,CAAC,EAAE,WAAW,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC;CAC9C;AAID,wBAAgB,cAAc,CAAC,OAAO,GAAE,qBAA0B;;;;;;;mBA8E1C,QAAQ,GAAG,IAAI;uBACX,QAAQ;2BAiCJ,QAAQ,QAAQ,MAAM,YAAY,MAAM,SAAS,YAAY;sBA+DlE,QAAQ,UAAU,MAAM;mBAjD3B,QAAQ;sBA4FL,QAAQ;iBAzEb,QAAQ,SAAS,CAAC,CAAC,GAAG,CAAC;uBAWjB,QAAQ,gBAAgB,QAAQ,WAAW,MAAM;kBA2EtD,QAAQ,UAAU,OAAO,CAAC,QAAQ,CAAC;0BAQ3B,QAAQ;;;EA4BtC;AAED,MAAM,MAAM,oBAAoB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC"}
1
+ {"version":3,"file":"usePageBuilder.d.ts","sourceRoot":"","sources":["../../src/builder/usePageBuilder.ts"],"names":[],"mappings":"AAAA,OAAO,EAA6B,KAAK,WAAW,EAAE,KAAK,GAAG,EAAE,MAAM,KAAK,CAAC;AAC5E,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAEtD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAEhE,OAAO,EAWL,KAAK,QAAQ,EACd,MAAM,cAAc,CAAC;AAEtB,iFAAiF;AACjF,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,CAAC;IACvB,OAAO,CAAC,EAAE,QAAQ,CAAC;IACnB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,WAAW,CAAC,mBAAmB,CAAC,CAAC;IAC5C;;;;OAIG;IACH,MAAM,CAAC,EAAE,WAAW,CAAC,UAAU,GAAG,SAAS,CAAC,CAAC;CAC9C;AAID,wBAAgB,cAAc,CAAC,OAAO,GAAE,qBAA0B;;;;;;;mBA8E1C,QAAQ,GAAG,IAAI;uBACX,QAAQ;2BAiCJ,QAAQ,QAAQ,MAAM,YAAY,MAAM,SAAS,YAAY;6BAe3D,QAAQ,QAAQ,QAAQ,YAAY,MAAM;sBAiBjD,QAAQ,QAAQ,QAAQ;sBA2DxB,QAAQ,UAAU,MAAM;mBAjD3B,QAAQ;sBA+FL,QAAQ;iBA5Eb,QAAQ,SAAS,CAAC,CAAC,GAAG,CAAC;uBAWjB,QAAQ,gBAAgB,QAAQ,WAAW,MAAM;kBAmFtD,QAAQ,UAAU,OAAO,CAAC,QAAQ,CAAC;0BAQ3B,QAAQ;;;EA8BtC;AAED,MAAM,MAAM,oBAAoB,GAAG,UAAU,CAAC,OAAO,cAAc,CAAC,CAAC"}
@@ -0,0 +1,71 @@
1
+ import { ComputedRef } from 'vue';
2
+ import { ElementNode, PageCompositionReference } from '../schema';
3
+ import { PageCompositionIssue, PageCompositionRepository, PageCompositionSummary } from '../compositions';
4
+ import { NodePath } from './operations';
5
+ import { UsePageBuilderReturn } from './usePageBuilder';
6
+ export interface LinkedCompositionSelection {
7
+ path: NodePath;
8
+ node: ElementNode;
9
+ reference: PageCompositionReference;
10
+ }
11
+ export interface UsePageCompositionsOptions {
12
+ builder: UsePageBuilderReturn;
13
+ repository: ComputedRef<PageCompositionRepository | undefined>;
14
+ management: ComputedRef<PageCompositionManagement>;
15
+ open?: (reference: PageCompositionReference) => void;
16
+ }
17
+ /** Controls whether definitions may be authored from inside a normal page. */
18
+ export type PageCompositionManagement = 'inline' | 'consume';
19
+ export declare function usePageCompositions({ builder, repository, management, open }: UsePageCompositionsOptions): {
20
+ management: ComputedRef<PageCompositionManagement>;
21
+ enabled: ComputedRef<boolean>;
22
+ summaries: import('vue').Ref<readonly {
23
+ id: string;
24
+ name: string;
25
+ latestVersion: string;
26
+ versions?: readonly string[] | undefined;
27
+ }[], readonly PageCompositionSummary[] | readonly {
28
+ id: string;
29
+ name: string;
30
+ latestVersion: string;
31
+ versions?: readonly string[] | undefined;
32
+ }[]>;
33
+ busy: import('vue').Ref<boolean, boolean>;
34
+ error: import('vue').Ref<string | undefined, string | undefined>;
35
+ issues: import('vue').Ref<readonly {
36
+ kind: "invalid-reference" | "missing" | "cycle";
37
+ compositionId?: string | undefined;
38
+ version?: string | undefined;
39
+ nodeId?: string | undefined;
40
+ message: string;
41
+ }[], readonly PageCompositionIssue[] | readonly {
42
+ kind: "invalid-reference" | "missing" | "cycle";
43
+ compositionId?: string | undefined;
44
+ version?: string | undefined;
45
+ nodeId?: string | undefined;
46
+ message: string;
47
+ }[]>;
48
+ selectedLink: ComputedRef<LinkedCompositionSelection | null>;
49
+ selectedSummary: ComputedRef<{
50
+ id: string;
51
+ name: string;
52
+ latestVersion: string;
53
+ versions?: readonly string[] | undefined;
54
+ } | undefined>;
55
+ selectedIsLatest: ComputedRef<boolean>;
56
+ insertTarget: ComputedRef<{
57
+ path: NodePath;
58
+ index?: number;
59
+ } | null>;
60
+ reload: () => Promise<void>;
61
+ createFromSelection: (name: string) => Promise<boolean>;
62
+ insertAt: (id: string, version: string | undefined, path: NodePath, index?: number) => Promise<boolean>;
63
+ insert: (id: string, version?: string) => Promise<boolean>;
64
+ update: (version?: string) => Promise<boolean>;
65
+ publish: () => Promise<boolean>;
66
+ detach: () => boolean;
67
+ openSelected: () => boolean;
68
+ canOpen: ComputedRef<boolean>;
69
+ };
70
+ export type UsePageCompositionsReturn = ReturnType<typeof usePageCompositions>;
71
+ //# sourceMappingURL=usePageCompositions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"usePageCompositions.d.ts","sourceRoot":"","sources":["../../src/builder/usePageCompositions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAwB,KAAK,WAAW,EAAE,MAAM,KAAK,CAAA;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,wBAAwB,EAAE,MAAM,WAAW,CAAA;AACtE,OAAO,EAQL,KAAK,oBAAoB,EACzB,KAAK,yBAAyB,EAC9B,KAAK,sBAAsB,EAC5B,MAAM,iBAAiB,CAAA;AACxB,OAAO,EAAa,KAAK,QAAQ,EAAE,MAAM,cAAc,CAAA;AACvD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAA;AAE5D,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,QAAQ,CAAA;IACd,IAAI,EAAE,WAAW,CAAA;IACjB,SAAS,EAAE,wBAAwB,CAAA;CACpC;AAED,MAAM,WAAW,0BAA0B;IACzC,OAAO,EAAE,oBAAoB,CAAA;IAC7B,UAAU,EAAE,WAAW,CAAC,yBAAyB,GAAG,SAAS,CAAC,CAAA;IAC9D,UAAU,EAAE,WAAW,CAAC,yBAAyB,CAAC,CAAA;IAClD,IAAI,CAAC,EAAE,CAAC,SAAS,EAAE,wBAAwB,KAAK,IAAI,CAAA;CACrD;AAED,8EAA8E;AAC9E,MAAM,MAAM,yBAAyB,GAAG,QAAQ,GAAG,SAAS,CAAA;AAE5D,wBAAgB,mBAAmB,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,0BAA0B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAsBjE,QAAQ;gBAAU,MAAM;;;gCA4DrB,MAAM,KAAG,OAAO,CAAC,OAAO,CAAC;mBAoBtC,MAAM,WAAW,MAAM,GAAG,SAAS,QAAQ,QAAQ,UAAU,MAAM,KAAG,OAAO,CAAC,OAAO,CAAC;iBAgBxF,MAAM,YAAY,MAAM,KAAG,OAAO,CAAC,OAAO,CAAC;uBAMrC,MAAM,KAAG,OAAO,CAAC,OAAO,CAAC;mBAoB/B,OAAO,CAAC,OAAO,CAAC;kBAyBvB,OAAO;wBAQD,OAAO;;EA+BjC;AAED,MAAM,MAAM,yBAAyB,GAAG,UAAU,CAAC,OAAO,mBAAmB,CAAC,CAAA"}
@@ -0,0 +1,4 @@
1
+ //#region src/builder/builderContext.ts
2
+ var e = Symbol("PageBuilderApi"), t = Symbol("PageBuilderConfig"), n = Symbol("PageBuilderValidation"), r = Symbol("PageBuilderBreakpoint"), i = Symbol("PageBuilderRuntime"), a = Symbol("PageBuilderAuthoringMode"), o = Symbol("PageBuilderPageCodeLibs"), s = Symbol("PageBuilderPageCodeValues"), c = Symbol("PageBuilderLocale"), l = Symbol("PageBuilderLogic"), u = Symbol("PageBuilderCompositions");
3
+ //#endregion
4
+ export { t as a, l as c, i as d, u as i, o as l, a as n, n as o, r, c as s, e as t, s as u };
@@ -0,0 +1,79 @@
1
+ import { ElementNode, PageCompositionReference, PageNode } from './schema';
2
+ export type MaybePromise<T> = T | Promise<T>;
3
+ export interface PageCompositionDefinition {
4
+ id: string;
5
+ name: string;
6
+ /** Immutable, repository-defined version token. */
7
+ version: string;
8
+ /** Stable template tree. A page root is deliberately not reusable. */
9
+ root: ElementNode;
10
+ }
11
+ export interface PageCompositionSummary {
12
+ id: string;
13
+ name: string;
14
+ latestVersion: string;
15
+ /** Optional immutable versions, newest first. */
16
+ versions?: readonly string[];
17
+ }
18
+ export interface CreatePageCompositionInput {
19
+ name: string;
20
+ root: ElementNode;
21
+ }
22
+ export interface PublishPageCompositionInput {
23
+ id: string;
24
+ /** Version the editor started from; repositories may use it for optimistic concurrency. */
25
+ baseVersion: string;
26
+ root: ElementNode;
27
+ }
28
+ /**
29
+ * Host-owned persistence boundary. The package does not prescribe REST,
30
+ * IndexedDB or an in-memory store; every operation may be sync or async.
31
+ */
32
+ export interface PageCompositionRepository {
33
+ list(): MaybePromise<readonly PageCompositionSummary[]>;
34
+ get(id: string, version?: string): MaybePromise<PageCompositionDefinition | null>;
35
+ create(input: CreatePageCompositionInput): MaybePromise<PageCompositionDefinition>;
36
+ publish(input: PublishPageCompositionInput): MaybePromise<PageCompositionDefinition>;
37
+ }
38
+ export interface PageCompositionIssue {
39
+ kind: 'invalid-reference' | 'missing' | 'cycle';
40
+ compositionId?: string;
41
+ version?: string;
42
+ nodeId?: string;
43
+ message: string;
44
+ }
45
+ export declare function isPageCompositionReference(value: unknown): value is PageCompositionReference;
46
+ export declare function compositionReference(node: PageNode): PageCompositionReference | undefined;
47
+ export declare function collectCompositionReferences(root: PageNode): Array<{
48
+ node: PageNode;
49
+ reference: PageCompositionReference;
50
+ }>;
51
+ /**
52
+ * Converts an edited instance back into a stable repository template. Instance
53
+ * ids become their original template ids; newly added nodes keep their ids and
54
+ * thereby gain a stable source identity in the next version.
55
+ */
56
+ export declare function compositionTemplateFromInstance(instance: ElementNode): ElementNode;
57
+ /** Marks an existing subtree as the first linked instance without changing ids or names. */
58
+ export declare function linkExistingCompositionInstance(instance: ElementNode, definition: PageCompositionDefinition): ElementNode;
59
+ interface MaterializeOptions {
60
+ /** Entire page, used to keep public names unique. */
61
+ page?: PageNode;
62
+ /** Existing instance, used to preserve node ids/names while updating. */
63
+ existing?: ElementNode;
64
+ }
65
+ /** Materializes a normal renderable subtree from one immutable definition. */
66
+ export declare function materializePageComposition(definition: PageCompositionDefinition, options?: MaterializeOptions): ElementNode;
67
+ /** Removes only the link metadata; the visible, editable subtree stays intact. */
68
+ export declare function detachPageComposition(instance: ElementNode, compositionId?: string | undefined): ElementNode;
69
+ /**
70
+ * Runtime publish compiler. Output contains ordinary page elements only — no
71
+ * repository references or builder bookkeeping — and needs no repository.
72
+ */
73
+ export declare function compilePageCompositions<T extends PageNode>(page: T): T;
74
+ /** Checks missing definitions and nested definition cycles through the host repository. */
75
+ export declare function validatePageCompositionReferences(page: PageNode, repository: PageCompositionRepository): Promise<PageCompositionIssue[]>;
76
+ /** Minimal repository useful for previews, tests and local-first hosts. */
77
+ export declare function createInMemoryPageCompositionRepository(initial?: readonly PageCompositionDefinition[]): PageCompositionRepository;
78
+ export {};
79
+ //# sourceMappingURL=compositions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compositions.d.ts","sourceRoot":"","sources":["../src/compositions.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import { VisibleWhen } from './schema';
2
+ export interface ConditionSources {
3
+ field: (path: string) => unknown;
4
+ context: (path: string) => unknown;
5
+ item?: (path: string) => unknown;
6
+ }
7
+ export declare function evaluateCondition(condition: VisibleWhen, sources: ConditionSources, depth?: number): boolean;
8
+ //# sourceMappingURL=conditions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conditions.d.ts","sourceRoot":"","sources":["../src/conditions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAkB3C,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAA;IAChC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAA;IAClC,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAA;CACjC;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,gBAAgB,EAAE,KAAK,SAAI,GAAG,OAAO,CAiCvG"}
package/dist/context.d.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { ComputedRef, InjectionKey, Ref } from 'vue';
2
- import { PageConfig, PageNode } from './schema';
2
+ import { ActionProps, NodeStyle, PageConfig, PageNode, RepeatSelection, RuntimeBinding } from './schema';
3
3
  import { PageElementRegistry } from './elements/registry';
4
4
  export type ActionValues = Record<string, unknown>;
5
5
  /**
@@ -24,6 +24,13 @@ export type CustomValidator = (values: ActionValues) => Record<string, string> |
24
24
  * error, but renders in the renderer's banner (default or `#form-error` slot).
25
25
  */
26
26
  export declare const FORM_ERROR_KEY = "_form";
27
+ export interface RepeatRenderScope {
28
+ item: unknown;
29
+ index: number;
30
+ itemKey: string;
31
+ allowedItemPaths: ReadonlySet<string>;
32
+ selection?: RepeatSelection;
33
+ }
27
34
  export interface PageRendererContext {
28
35
  actions?: Record<string, ActionHandler>;
29
36
  assetResolver?: (id: string) => string;
@@ -32,7 +39,12 @@ export interface PageRendererContext {
32
39
  /** Merged element registry (built-ins + consumer registrations) — the render dispatch table. */
33
40
  elements: ComputedRef<PageElementRegistry>;
34
41
  /** `visibleWhen` gate, evaluated against the live value model — PageNode skips hidden subtrees. */
35
- isVisible: (node: PageNode) => boolean;
42
+ isVisible: (node: PageNode, item?: unknown, allowedItemPaths?: ReadonlySet<string>) => boolean;
43
+ /** Responsive style resolved against this renderer's host-container width. */
44
+ resolveStyle: (node: PageNode) => NodeStyle;
45
+ /** Resolve bindings and localized values without exposing undeclared host paths. */
46
+ resolveNode: (node: PageNode, item?: unknown, allowedItemPaths?: ReadonlySet<string>, itemIndex?: number) => PageNode;
47
+ resolveBinding: (binding: RuntimeBinding, item?: unknown, allowedItemPaths?: ReadonlySet<string>, itemIndex?: number) => unknown;
36
48
  /** Called by PageNode when it skips a disallowed type — used to console.warn once. */
37
49
  reportDisallowed?: (type: string) => void;
38
50
  /** Called by PageNode when it skips an unregistered type — used to console.warn once. */
@@ -60,7 +72,9 @@ export interface PageRendererContext {
60
72
  getError: (name: string) => string;
61
73
  /** Mark a field as touched (called on blur). */
62
74
  markTouched: (name: string) => void;
63
- triggerAction: (id: string, validates?: boolean) => void;
75
+ triggerAction: (id: string, validates?: boolean, actionValues?: ActionValues) => void;
76
+ /** Shared path for every registry element that declares the ActionProps contract. */
77
+ triggerElementAction: (props: ActionProps, validates?: boolean) => void;
64
78
  }
65
79
  export declare const PAGE_RENDERER_KEY: InjectionKey<PageRendererContext>;
66
80
  //# sourceMappingURL=context.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AACrD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAE/D,MAAM,MAAM,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AACnD;;;;;;GAMG;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;AAC9E;;;;;;GAMG;AACH,MAAM,MAAM,eAAe,GAAG,CAC5B,MAAM,EAAE,YAAY,KACjB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;AAE9D;;;;GAIG;AACH,eAAO,MAAM,cAAc,UAAU,CAAC;AAEtC,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAA;IACvC,aAAa,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,MAAM,CAAA;IACtC,qFAAqF;IACrF,MAAM,CAAC,EAAE,UAAU,CAAA;IACnB,gGAAgG;IAChG,QAAQ,EAAE,WAAW,CAAC,mBAAmB,CAAC,CAAA;IAC1C,mGAAmG;IACnG,SAAS,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,OAAO,CAAA;IACtC,sFAAsF;IACtF,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IACzC,yFAAyF;IACzF,aAAa,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IACtC,mFAAmF;IACnF,WAAW,EAAE,WAAW,CAAC,OAAO,CAAC,CAAA;IACjC,yGAAyG;IACzG,YAAY,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;IAC1B,sFAAsF;IACtF,YAAY,EAAE,GAAG,CAAC,OAAO,CAAC,CAAA;IAC1B;;;;OAIG;IACH,aAAa,EAAE,GAAG,CAAC,MAAM,GAAG,IAAI,CAAC,CAAA;IACjC;;;OAGG;IACH,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAA;IACtB,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,CAAA;IACnC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,IAAI,CAAA;IAChD,iEAAiE;IACjE,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,CAAA;IAClC,gDAAgD;IAChD,WAAW,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IACnC,aAAa,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,OAAO,KAAK,IAAI,CAAA;CACzD;AAED,eAAO,MAAM,iBAAiB,EAAE,YAAY,CAAC,mBAAmB,CAA2B,CAAC"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { PageConfig, PageNode } from './schema';
2
+ export interface PageDocumentIssue {
3
+ nodeId?: string;
4
+ field: string;
5
+ message: string;
6
+ }
7
+ export interface PageDocumentValidationResult {
8
+ valid: boolean;
9
+ issues: PageDocumentIssue[];
10
+ }
11
+ export declare function validatePageDocument(schema: PageNode, config?: PageConfig): PageDocumentValidationResult;
12
+ //# sourceMappingURL=documentValidation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"documentValidation.d.ts","sourceRoot":"","sources":["../src/documentValidation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA4B,UAAU,EAAE,QAAQ,EAAyD,MAAM,UAAU,CAAA;AAMrI,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,4BAA4B;IAC3C,KAAK,EAAE,OAAO,CAAA;IACd,MAAM,EAAE,iBAAiB,EAAE,CAAA;CAC5B;AAmBD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,UAAU,GAAG,4BAA4B,CA+IxG"}
@@ -1 +1 @@
1
- {"version":3,"file":"builtins.d.ts","sourceRoot":"","sources":["../../src/elements/builtins.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,mBAAmB,EAAyB,MAAM,YAAY,CAAC;AAsD7E,eAAO,MAAM,gBAAgB,EAAE,mBAA2B,CAAC"}
1
+ {"version":3,"file":"builtins.d.ts","sourceRoot":"","sources":["../../src/elements/builtins.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,mBAAmB,EAAyB,MAAM,YAAY,CAAC;AA4D7E,eAAO,MAAM,gBAAgB,EAAE,mBAA2B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"ButtonInspector.vue.d.ts","sourceRoot":"","sources":["../../../src/elements/button/ButtonInspector.vue"],"names":[],"mappings":"AAyIA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG/C,KAAK,WAAW,GAAG;IACjB,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,GAAG;QAAE,KAAK,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAA;KAAE,KAAK,IAAI,CAAC;CACxG,CAAC;;AAgTF,wBAMG"}
1
+ {"version":3,"file":"ButtonInspector.vue.d.ts","sourceRoot":"","sources":["../../../src/elements/button/ButtonInspector.vue"],"names":[],"mappings":"AA0GA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG/C,KAAK,WAAW,GAAG;IACjB,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,GAAG;QAAE,KAAK,CAAC,EAAE,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAA;KAAE,KAAK,IAAI,CAAC;CACxG,CAAC;;AA2QF,wBAMG"}
@@ -1 +1 @@
1
- {"version":3,"file":"ButtonRenderer.vue.d.ts","sourceRoot":"","sources":["../../../src/elements/button/ButtonRenderer.vue"],"names":[],"mappings":"AA0DA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG/C,KAAK,WAAW,GAAG;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,CAAC;;AAyFxC,wBAMG"}
1
+ {"version":3,"file":"ButtonRenderer.vue.d.ts","sourceRoot":"","sources":["../../../src/elements/button/ButtonRenderer.vue"],"names":[],"mappings":"AA0DA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAG/C,KAAK,WAAW,GAAG;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,CAAC;;AA2FxC,wBAMG"}
@@ -1,6 +1,6 @@
1
- export declare const buttonElement: import('../registry').PageElementDefinition<{
1
+ export declare const buttonElement: import('../registry').PageElementDefinition<import('../..').ActionProps & {
2
2
  label: string;
3
- action?: string;
3
+ disabled?: boolean;
4
4
  validates?: boolean;
5
5
  default?: boolean;
6
6
  icon?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/button/index.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,aAAa;;;;;;;;EAUxB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/button/index.ts"],"names":[],"mappings":"AAMA,eAAO,MAAM,aAAa;;;;;;;;EAYxB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"CardInspector.vue.d.ts","sourceRoot":"","sources":["../../../src/elements/card/CardInspector.vue"],"names":[],"mappings":"AAyBA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAE7C,KAAK,WAAW,GAAG;IACjB,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC;CAC5C,CAAC;;AAsEF,wBAOG"}
1
+ {"version":3,"file":"CardInspector.vue.d.ts","sourceRoot":"","sources":["../../../src/elements/card/CardInspector.vue"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAE7C,KAAK,WAAW,GAAG;IACjB,IAAI,EAAE,QAAQ,CAAC;IACf,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC;CAC5C,CAAC;;AAwEF,wBAOG"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/card/index.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,WAAW;;EAWtB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/elements/card/index.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,WAAW;;EAetB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"CheckboxDefaultInput.vue.d.ts","sourceRoot":"","sources":["../../../src/elements/checkbox/CheckboxDefaultInput.vue"],"names":[],"mappings":"AA4BA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,KAAK,WAAW,GAAG;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;CAC9B,CAAC;;;;;;AAmEF,wBAQG"}
1
+ {"version":3,"file":"CheckboxDefaultInput.vue.d.ts","sourceRoot":"","sources":["../../../src/elements/checkbox/CheckboxDefaultInput.vue"],"names":[],"mappings":"AA6BA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAEjD,KAAK,WAAW,GAAG;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;CAC9B,CAAC;;;;;;AAqEF,wBAQG"}