@improba/page-builder 0.1.0 → 0.2.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.
- package/README.md +26 -26
- package/dist/core.cjs +2 -0
- package/dist/core.cjs.map +1 -0
- package/dist/core.js +29 -0
- package/dist/core.js.map +1 -0
- package/dist/index-D79WbFRY.cjs +2 -0
- package/dist/index-D79WbFRY.cjs.map +1 -0
- package/dist/index-c6HOrx9r.js +523 -0
- package/dist/index-c6HOrx9r.js.map +1 -0
- package/dist/index.cjs +10 -5
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +2402 -3312
- package/dist/index.js.map +1 -1
- package/dist/style.css +1 -0
- package/dist/types/built-in/PbColumn.vue.d.ts +41 -0
- package/dist/types/built-in/PbContainer.vue.d.ts +32 -0
- package/dist/types/built-in/PbImage.vue.d.ts +42 -0
- package/dist/types/built-in/PbRow.vue.d.ts +41 -0
- package/dist/types/built-in/PbSection.vue.d.ts +50 -0
- package/dist/types/built-in/PbText.vue.d.ts +25 -0
- package/dist/types/built-in/PbVideo.vue.d.ts +27 -0
- package/dist/types/built-in/index.d.ts +10 -0
- package/dist/types/components/PageBuilder.vue.d.ts +50 -0
- package/dist/types/components/editor/EditorCanvas.vue.d.ts +67 -0
- package/dist/types/components/editor/EditorToolbar.vue.d.ts +97 -0
- package/dist/types/components/editor/IframeCanvas.vue.d.ts +102 -0
- package/dist/types/components/editor/LeftDrawer.vue.d.ts +46 -0
- package/dist/types/components/editor/NodeContextMenu.vue.d.ts +66 -0
- package/dist/types/components/editor/PageEditor.vue.d.ts +20 -0
- package/dist/types/components/editor/RightDrawer.vue.d.ts +43 -0
- package/dist/types/components/editor/TreePanel.vue.d.ts +28 -0
- package/dist/types/components/editor/prop-editors/MediaPicker.vue.d.ts +20 -0
- package/dist/types/components/editor/prop-editors/PropBooleanEditor.vue.d.ts +18 -0
- package/dist/types/components/editor/prop-editors/PropColorEditor.vue.d.ts +18 -0
- package/dist/types/components/editor/prop-editors/PropNumberEditor.vue.d.ts +36 -0
- package/dist/types/components/editor/prop-editors/PropSelectEditor.vue.d.ts +31 -0
- package/dist/types/components/editor/prop-editors/PropTextEditor.vue.d.ts +27 -0
- package/dist/types/components/editor/prop-editors/RichTextEditor.vue.d.ts +27 -0
- package/dist/types/components/editor/prop-editors/index.d.ts +29 -0
- package/dist/types/components/reader/NodeRenderer.vue.d.ts +33 -0
- package/dist/types/components/reader/PageReader.vue.d.ts +14 -0
- package/dist/types/components/shared/ErrorBoundary.vue.d.ts +21 -0
- package/dist/types/composables/use-drag-drop.d.ts +23 -0
- package/dist/types/composables/use-editor.d.ts +40 -0
- package/dist/types/composables/use-node-tree.d.ts +23 -0
- package/dist/types/composables/use-page-builder.d.ts +28 -0
- package/dist/types/core/drop-slot.d.ts +12 -0
- package/dist/types/core/errors.d.ts +14 -0
- package/dist/types/core/iframe-bridge.d.ts +85 -0
- package/dist/types/core/index.d.ts +18 -0
- package/dist/types/core/registry.d.ts +43 -0
- package/dist/types/core/sanitize.d.ts +3 -0
- package/dist/types/core/tree.d.ts +56 -0
- package/dist/types/core/validation.d.ts +10 -0
- package/dist/types/core/virtual-tree.d.ts +44 -0
- package/dist/types/i18n/context.d.ts +13 -0
- package/dist/types/i18n/index.d.ts +3 -0
- package/dist/types/i18n/messages.d.ts +3 -0
- package/dist/types/i18n/translator.d.ts +14 -0
- package/dist/types/index.d.ts +27 -0
- package/dist/types/plugin.d.ts +18 -0
- package/dist/types/types/component.d.ts +68 -0
- package/dist/types/types/editor.d.ts +54 -0
- package/dist/types/types/index.d.ts +6 -0
- package/dist/types/types/keys.d.ts +13 -0
- package/dist/types/types/node.d.ts +54 -0
- package/package.json +8 -3
- package/dist/index.css +0 -1
package/dist/style.css
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
.ipb-error-boundary[data-v-5b429c0c]{width:100%;padding:.75rem;border:1px solid #f3d1d1;border-radius:.375rem;background-color:#fff5f5;color:#7a1f1f}.ipb-error-boundary__message[data-v-5b429c0c]{margin:0;font-size:.9rem;line-height:1.4}.ipb-error-boundary__details[data-v-5b429c0c]{margin:.5rem 0 0;font-size:.75rem;line-height:1.4;white-space:pre-wrap;word-break:break-word;color:#5f1b1b}.ipb-node-renderer__invalid[data-v-f60d41e1]{width:100%;padding:.75rem;border:1px solid #f3d1d1;border-radius:.375rem;background-color:#fff5f5;color:#7a1f1f;font-size:.825rem;line-height:1.35}.ipb-page-reader[data-v-d9bf9b29]{width:100%;min-height:100%}.ipb-page-reader__invalid[data-v-d9bf9b29]{padding:.75rem;border:1px solid #f3d1d1;border-radius:.375rem;background-color:#fff5f5;color:#7a1f1f;font-size:.875rem}.ipb-toolbar[data-v-7086d88b]{display:flex;align-items:center;justify-content:space-between;height:48px;padding:0 16px;background:var(--ipb-toolbar-bg, #fff);border-bottom:1px solid var(--ipb-border-color, #e0e0e0);flex-shrink:0}.ipb-toolbar__left[data-v-7086d88b],.ipb-toolbar__center[data-v-7086d88b],.ipb-toolbar__right[data-v-7086d88b]{display:flex;align-items:center;gap:8px}.ipb-toolbar__btn[data-v-7086d88b]{padding:6px 12px;border:1px solid var(--ipb-border-color, #e0e0e0);border-radius:4px;background:transparent;cursor:pointer;font-size:13px;transition:background .15s}.ipb-toolbar__btn[data-v-7086d88b]:focus-visible,.ipb-toolbar__size-input[data-v-7086d88b]:focus-visible{outline:2px solid var(--ipb-focus-color, #2563eb);outline-offset:1px}.ipb-toolbar__custom-size[data-v-7086d88b]{display:inline-flex;align-items:center;gap:8px;margin-left:8px;padding-left:8px;border-left:1px solid var(--ipb-border-color, #e0e0e0)}.ipb-toolbar__size-control[data-v-7086d88b]{display:inline-flex;align-items:center;gap:4px;font-size:12px;color:var(--ipb-text-secondary, #4b5563)}.ipb-toolbar__size-input[data-v-7086d88b]{width:72px;padding:4px 6px;border:1px solid var(--ipb-border-color, #e0e0e0);border-radius:4px;font-size:12px}.ipb-toolbar__viewport-size[data-v-7086d88b]{margin-left:8px;color:var(--ipb-text-secondary, #6b7280);font-size:12px;font-variant-numeric:tabular-nums}.ipb-toolbar__btn[data-v-7086d88b]:hover:not(:disabled){background:var(--ipb-hover-bg, #f5f5f5)}.ipb-toolbar__btn[data-v-7086d88b]:disabled{opacity:.4;cursor:not-allowed}.ipb-toolbar__btn--active[data-v-7086d88b]{background:var(--ipb-active-bg, #e8f0fe);border-color:var(--ipb-primary-color, #1a73e8);color:var(--ipb-primary-color, #1a73e8)}.ipb-toolbar__btn--primary[data-v-7086d88b]{background:var(--ipb-primary-color, #1a73e8);color:#fff;border-color:var(--ipb-primary-color, #1a73e8)}.ipb-toolbar__btn--primary[data-v-7086d88b]:hover{background:var(--ipb-primary-hover, #1557b0)}.ipb-toolbar__dirty-indicator[data-v-7086d88b]{color:var(--ipb-warning-color, #f59e0b);font-size:10px}.ipb-tree-panel[data-v-f50f228d]{min-width:0}.ipb-tree-panel__list[data-v-f50f228d]{display:flex;flex-direction:column;gap:2px}.ipb-tree-panel__row-wrapper[data-v-f50f228d]{display:flex;flex-direction:column;gap:0}.ipb-tree-panel__drop-line[data-v-f50f228d]{min-height:8px;margin:0 8px;padding:3px 0;flex-shrink:0;display:flex;align-items:center;cursor:default}.ipb-tree-panel__drop-line[data-v-f50f228d]:before{content:"";display:block;width:100%;height:2px;border-radius:1px;background:var(--ipb-primary-color, #1d4ed8)}.ipb-tree-panel__item[data-v-f50f228d]{display:flex;align-items:center;gap:6px;width:100%;min-width:0;padding:6px 8px;border:0;border-radius:4px;background:transparent;color:inherit;text-align:left;cursor:pointer;font-size:12px;line-height:1.3}.ipb-tree-panel__item[data-v-f50f228d]:hover{background:var(--ipb-hover-bg, #f5f5f5)}.ipb-tree-panel__item[data-v-f50f228d]:focus-visible{outline:2px solid var(--ipb-focus-color, #2563eb);outline-offset:-1px}.ipb-tree-panel__item--selected[data-v-f50f228d]{background:var(--ipb-primary-soft, rgba(37, 99, 235, .14));color:var(--ipb-primary-color, #1d4ed8)}.ipb-tree-panel__item--readonly[data-v-f50f228d]{opacity:.8}.ipb-tree-panel__item--drop-target[data-v-f50f228d]{background:var(--ipb-primary-soft, rgba(37, 99, 235, .2));outline:2px dashed var(--ipb-primary-color, #1d4ed8);outline-offset:2px}.ipb-tree-panel__item--draggable[data-v-f50f228d]{cursor:grab}.ipb-tree-panel__item--draggable[data-v-f50f228d]:active{cursor:grabbing}.ipb-tree-panel__name[data-v-f50f228d]{font-weight:500;white-space:nowrap}.ipb-tree-panel__id[data-v-f50f228d]{color:var(--ipb-text-muted, #6b7280);font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,Liberation Mono,Courier New,monospace;font-size:11px;white-space:nowrap}.ipb-tree-panel__readonly[data-v-f50f228d]{margin-left:auto;font-size:10px;text-transform:uppercase;letter-spacing:.03em;color:var(--ipb-text-muted, #6b7280);border:1px solid var(--ipb-border-color, #d1d5db);border-radius:3px;padding:1px 4px}.ipb-left-drawer[data-v-2bb04ccb]{width:48px;background:var(--ipb-drawer-bg, #fff);border-right:1px solid var(--ipb-border-color, #e0e0e0);transition:width .2s ease;overflow:hidden;flex-shrink:0;display:flex;flex-direction:column}.ipb-left-drawer--open[data-v-2bb04ccb]{width:260px}.ipb-left-drawer__header[data-v-2bb04ccb]{display:flex;align-items:center;justify-content:space-between;gap:8px;min-width:0;padding:12px;border-bottom:1px solid var(--ipb-border-color, #e0e0e0)}.ipb-left-drawer__title[data-v-2bb04ccb]{font-weight:600;font-size:14px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ipb-left-drawer__toggle[data-v-2bb04ccb]{flex-shrink:0;background:none;border:none;cursor:pointer;font-size:12px;padding:4px}.ipb-left-drawer__toggle[data-v-2bb04ccb]:focus-visible,.ipb-left-drawer__section-toggle[data-v-2bb04ccb]:focus-visible{outline:2px solid var(--ipb-focus-color, #2563eb);outline-offset:1px;border-radius:4px}.ipb-left-drawer__content[data-v-2bb04ccb]{flex:1;overflow-y:auto;padding:12px;display:flex;flex-direction:column;gap:12px}.ipb-left-drawer__section[data-v-2bb04ccb]{min-width:0}.ipb-left-drawer__search[data-v-2bb04ccb]{margin-top:8px;margin-bottom:8px}.ipb-left-drawer__search-input[data-v-2bb04ccb]{width:100%;padding:6px 8px;border:1px solid var(--ipb-border-color, #e0e0e0);border-radius:4px;background:var(--ipb-input-bg, #fff);color:var(--ipb-text-color, #111827);font-size:12px}.ipb-left-drawer__search-input[data-v-2bb04ccb]:focus-visible{outline:2px solid var(--ipb-focus-color, #2563eb);outline-offset:1px}.ipb-left-drawer__section--tree[data-v-2bb04ccb]{padding-top:8px;border-top:1px solid var(--ipb-border-color, #e0e0e0)}.ipb-left-drawer__section-header[data-v-2bb04ccb]{display:flex;align-items:center;justify-content:space-between;margin-bottom:8px}.ipb-left-drawer__section-title[data-v-2bb04ccb]{margin:0;font-size:12px;text-transform:uppercase;letter-spacing:.05em;color:var(--ipb-text-muted, #6b7280)}.ipb-left-drawer__section-toggle[data-v-2bb04ccb]{background:none;border:none;cursor:pointer;padding:2px 4px;font-size:14px;line-height:1}.ipb-left-drawer__category-title[data-v-2bb04ccb]{font-size:11px;font-weight:600;margin:10px 0 8px}.ipb-left-drawer__component-list[data-v-2bb04ccb]{display:flex;flex-direction:column;gap:4px}.ipb-left-drawer__component-item[data-v-2bb04ccb]{display:flex;align-items:center;gap:8px;padding:8px;border-radius:4px;cursor:grab;transition:background .15s;font-size:13px;width:100%;border:0;background:transparent;color:inherit;text-align:left}.ipb-left-drawer__component-item[data-v-2bb04ccb]:hover{background:var(--ipb-hover-bg, #f5f5f5)}.ipb-left-drawer__component-item[data-v-2bb04ccb]:focus-visible{outline:2px solid var(--ipb-focus-color, #2563eb);outline-offset:-1px}.ipb-left-drawer__component-icon[data-v-2bb04ccb]{font-size:16px;width:24px;text-align:center}.ipb-left-drawer__empty[data-v-2bb04ccb]{margin:8px 0 0;font-size:12px;color:var(--ipb-text-muted, #6b7280)}.ipb-prop-editor[data-v-f48156f6]{width:100%;padding:6px 8px;border:1px solid var(--ipb-border-color, #e0e0e0);border-radius:4px;font-size:13px;box-sizing:border-box}.ipb-prop-editor[data-v-f48156f6]:focus-visible{outline:2px solid var(--ipb-focus-color, #2563eb);outline-offset:1px}.ipb-prop-editor[data-v-11786ace]{width:100%;padding:6px 8px;border:1px solid var(--ipb-border-color, #e0e0e0);border-radius:4px;font-size:13px;box-sizing:border-box}.ipb-prop-editor[data-v-11786ace]:focus-visible{outline:2px solid var(--ipb-focus-color, #2563eb);outline-offset:1px}.ipb-prop-editor--boolean[data-v-cfba94a9]{display:inline-flex;align-items:center;gap:8px;font-size:13px;-webkit-user-select:none;user-select:none}.ipb-prop-editor--boolean input[data-v-cfba94a9]:focus-visible{outline:2px solid var(--ipb-focus-color, #2563eb);outline-offset:2px}.ipb-prop-editor[data-v-8c477cbd]{width:100%;padding:6px 8px;border:1px solid var(--ipb-border-color, #e0e0e0);border-radius:4px;font-size:13px;box-sizing:border-box;background:var(--ipb-drawer-bg, #fff)}.ipb-prop-editor[data-v-8c477cbd]:focus-visible{outline:2px solid var(--ipb-focus-color, #2563eb);outline-offset:1px}.ipb-prop-editor--color[data-v-b0f904c5]{display:flex;align-items:center;gap:8px}.ipb-prop-editor__picker[data-v-b0f904c5]{width:40px;height:32px;padding:2px;border:1px solid var(--ipb-border-color, #e0e0e0);border-radius:4px;background:var(--ipb-drawer-bg, #fff)}.ipb-prop-editor__text[data-v-b0f904c5]{flex:1;min-width:0;padding:6px 8px;border:1px solid var(--ipb-border-color, #e0e0e0);border-radius:4px;font-size:13px;box-sizing:border-box}.ipb-prop-editor__picker[data-v-b0f904c5]:focus-visible,.ipb-prop-editor__text[data-v-b0f904c5]:focus-visible{outline:2px solid var(--ipb-focus-color, #2563eb);outline-offset:1px}.ipb-richtext-editor[data-v-d9cdfb46]{border:1px solid var(--ipb-border-color, #e0e0e0);border-radius:4px;overflow:hidden}.ipb-richtext-editor__toolbar[data-v-d9cdfb46]{display:flex;flex-wrap:wrap;gap:4px;padding:6px;border-bottom:1px solid var(--ipb-border-color, #e0e0e0);background:var(--ipb-surface-muted, #f8fafc)}.ipb-richtext-editor__toolbar button[data-v-d9cdfb46]{min-width:30px;height:28px;padding:0 8px;border:1px solid var(--ipb-border-color, #d1d5db);border-radius:4px;background:var(--ipb-drawer-bg, #fff);cursor:pointer;font-size:12px}.ipb-richtext-editor__toolbar button[data-v-d9cdfb46]:hover{background:var(--ipb-surface-hover, #f3f4f6)}.ipb-richtext-editor__toolbar button[data-v-d9cdfb46]:focus-visible,.ipb-richtext-editor__content[data-v-d9cdfb46]:focus-visible{outline:2px solid var(--ipb-focus-color, #2563eb);outline-offset:1px}.ipb-richtext-editor__content[data-v-d9cdfb46]{min-height:120px;padding:8px;font-size:13px;line-height:1.5;outline:none}.ipb-richtext-editor__content[data-v-d9cdfb46]:empty:before{content:attr(data-placeholder);color:var(--ipb-text-muted, #9ca3af);pointer-events:none}.ipb-media-picker[data-v-743fe73e]{display:flex;flex-direction:column;gap:8px}.ipb-media-picker__controls[data-v-743fe73e]{display:grid;grid-template-columns:minmax(0,1fr) auto auto;gap:8px;align-items:center}.ipb-media-picker__input[data-v-743fe73e]{min-width:0;width:100%;padding:6px 8px;border:1px solid var(--ipb-border-color, #e0e0e0);border-radius:4px;font-size:13px;box-sizing:border-box}.ipb-media-picker__btn[data-v-743fe73e]{padding:6px 8px;border:1px solid var(--ipb-border-color, #e0e0e0);border-radius:4px;background:var(--ipb-drawer-bg, #fff);cursor:pointer;font-size:12px}.ipb-media-picker__input[data-v-743fe73e]:focus-visible,.ipb-media-picker__btn[data-v-743fe73e]:focus-visible{outline:2px solid var(--ipb-focus-color, #2563eb);outline-offset:1px}.ipb-media-picker__btn[data-v-743fe73e]:disabled{opacity:.5;cursor:not-allowed}.ipb-media-picker__preview[data-v-743fe73e]{border:1px dashed var(--ipb-border-color, #e0e0e0);border-radius:4px;padding:6px;min-height:88px;display:flex;align-items:center;justify-content:center;background:var(--ipb-bg-subtle, #fafafa)}.ipb-media-picker__image[data-v-743fe73e]{max-width:100%;max-height:140px;object-fit:contain;display:block}.ipb-media-picker__empty[data-v-743fe73e]{margin:0;font-size:12px;color:var(--ipb-text-muted, #6b7280);text-align:center}.ipb-right-drawer[data-v-a25cd890]{width:48px;background:var(--ipb-drawer-bg, #fff);border-left:1px solid var(--ipb-border-color, #e0e0e0);transition:width .2s ease;overflow:hidden;flex-shrink:0;display:flex;flex-direction:column}.ipb-right-drawer--open[data-v-a25cd890]{width:320px}.ipb-right-drawer__header[data-v-a25cd890]{display:flex;align-items:center;justify-content:space-between;gap:8px;min-width:0;padding:12px;border-bottom:1px solid var(--ipb-border-color, #e0e0e0)}.ipb-right-drawer__title[data-v-a25cd890]{font-weight:600;font-size:14px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.ipb-right-drawer__toggle[data-v-a25cd890]{flex-shrink:0;background:none;border:none;cursor:pointer;font-size:12px;padding:4px}.ipb-right-drawer__toggle[data-v-a25cd890]:focus-visible,.ipb-right-drawer__btn[data-v-a25cd890]:focus-visible{outline:2px solid var(--ipb-focus-color, #2563eb);outline-offset:1px}.ipb-right-drawer__content[data-v-a25cd890]{flex:1;overflow-y:auto;padding:16px}.ipb-right-drawer__section[data-v-a25cd890]{margin-bottom:20px}.ipb-right-drawer__section-title[data-v-a25cd890]{font-size:16px;font-weight:600;margin:0 0 4px}.ipb-right-drawer__section-subtitle[data-v-a25cd890]{font-size:12px;text-transform:uppercase;letter-spacing:.05em;color:var(--ipb-text-muted, #6b7280);margin:0 0 12px}.ipb-right-drawer__description[data-v-a25cd890]{font-size:13px;color:var(--ipb-text-muted, #6b7280);margin:0}.ipb-right-drawer__prop[data-v-a25cd890]{margin-bottom:12px}.ipb-right-drawer__prop-label[data-v-a25cd890]{display:block;font-size:12px;font-weight:500;margin-bottom:4px}.ipb-right-drawer__prop-editor[data-v-a25cd890]{width:100%}.ipb-right-drawer__actions[data-v-a25cd890]{display:flex;gap:8px;padding-top:16px;border-top:1px solid var(--ipb-border-color, #e0e0e0)}.ipb-right-drawer__btn[data-v-a25cd890]{flex:1;padding:8px;border:1px solid var(--ipb-border-color, #e0e0e0);border-radius:4px;background:transparent;cursor:pointer;font-size:13px}.ipb-right-drawer__btn--danger[data-v-a25cd890]{color:var(--ipb-danger-color, #dc2626);border-color:var(--ipb-danger-color, #dc2626)}.ipb-right-drawer__btn--danger[data-v-a25cd890]:disabled{opacity:.4;cursor:not-allowed}.ipb-right-drawer__empty[data-v-a25cd890]{padding:24px 16px;text-align:center;color:var(--ipb-text-muted, #6b7280);font-size:13px}.ipb-node-context-menu[data-v-7a59845f]{position:absolute;z-index:30;display:flex;flex-direction:column;min-width:148px;padding:6px;border:1px solid var(--ipb-border-color, #d1d5db);border-radius:8px;background:#fff;box-shadow:0 8px 24px #0f172a29}.ipb-node-context-menu__item[data-v-7a59845f]{border:0;border-radius:6px;background:transparent;color:var(--ipb-text-color, #111827);font-size:13px;line-height:1.4;text-align:left;padding:7px 10px;cursor:pointer}.ipb-node-context-menu__item[data-v-7a59845f]:hover:not(:disabled){background:#3b82f61a}.ipb-node-context-menu__item[data-v-7a59845f]:focus-visible{outline:2px solid var(--ipb-focus-color, #2563eb);outline-offset:-1px}.ipb-node-context-menu__item--danger[data-v-7a59845f]{color:var(--ipb-danger-color, #dc2626)}.ipb-node-context-menu__item[data-v-7a59845f]:disabled{opacity:.45;cursor:not-allowed}.ipb-canvas[data-v-866e17d3]{flex:1;display:flex;align-items:flex-start;justify-content:center;padding:24px;overflow:auto;background:var(--ipb-canvas-bg, #e5e7eb)}.ipb-canvas__viewport[data-v-866e17d3]{position:relative;flex:0 0 auto;background:#fff;box-shadow:0 1px 3px #0000001f,0 1px 2px #0000000f;border-radius:4px;overflow:hidden;transition:width .2s ease,height .2s ease}.ipb-iframe-canvas__stage[data-v-866e17d3]{position:relative;width:100%;height:100%;background:#fff}.ipb-iframe-canvas__frame[data-v-866e17d3]{width:100%;height:100%;border:0;display:block;background:#fff}.ipb-iframe-canvas__fallback[data-v-866e17d3]{position:relative;width:100%;height:100%;background:#fff}.ipb-canvas__overlay[data-v-866e17d3]{position:absolute;pointer-events:none;border-radius:4px;box-sizing:border-box}.ipb-canvas__overlay--hovered[data-v-866e17d3]{border:1px dashed rgba(59,130,246,.75);background:#3b82f614;z-index:10}.ipb-canvas__overlay--drop[data-v-866e17d3]{border:2px dashed rgba(16,185,129,.9);background:#10b98124;z-index:12}.ipb-canvas__overlay--selected[data-v-866e17d3]{border:2px solid rgba(37,99,235,.95);background:#2563eb24;box-shadow:0 0 0 1px #ffffffd9 inset;z-index:11}.ipb-page-editor[data-v-5fd2d41f]{display:flex;flex-direction:column;height:100vh;width:100vw;overflow:hidden;background:var(--ipb-editor-bg, #f0f2f5)}.ipb-page-editor__body[data-v-5fd2d41f]{display:flex;flex:1;overflow:hidden}.ipb-page-builder__warning[data-v-84b8d079]{margin-bottom:.5rem;padding:.625rem .75rem;border:1px solid #f8d7a8;border-radius:.375rem;background-color:#fff8ec;color:#7d4a00;font-size:.875rem}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { IComponentDefinition } from '@/types/component';
|
|
2
|
+
export declare const builderOptions: IComponentDefinition;
|
|
3
|
+
declare const _default: __VLS_WithSlots<import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
4
|
+
gap: {
|
|
5
|
+
type: StringConstructor;
|
|
6
|
+
default: string;
|
|
7
|
+
};
|
|
8
|
+
padding: {
|
|
9
|
+
type: StringConstructor;
|
|
10
|
+
default: string;
|
|
11
|
+
};
|
|
12
|
+
align: {
|
|
13
|
+
type: StringConstructor;
|
|
14
|
+
default: string;
|
|
15
|
+
};
|
|
16
|
+
}>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
17
|
+
gap: {
|
|
18
|
+
type: StringConstructor;
|
|
19
|
+
default: string;
|
|
20
|
+
};
|
|
21
|
+
padding: {
|
|
22
|
+
type: StringConstructor;
|
|
23
|
+
default: string;
|
|
24
|
+
};
|
|
25
|
+
align: {
|
|
26
|
+
type: StringConstructor;
|
|
27
|
+
default: string;
|
|
28
|
+
};
|
|
29
|
+
}>> & Readonly<{}>, {
|
|
30
|
+
gap: string;
|
|
31
|
+
padding: string;
|
|
32
|
+
align: string;
|
|
33
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>, {
|
|
34
|
+
default?: (props: {}) => any;
|
|
35
|
+
}>;
|
|
36
|
+
export default _default;
|
|
37
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
38
|
+
new (): {
|
|
39
|
+
$slots: S;
|
|
40
|
+
};
|
|
41
|
+
};
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { IComponentDefinition } from '@/types/component';
|
|
2
|
+
export declare const builderOptions: IComponentDefinition;
|
|
3
|
+
declare const _default: __VLS_WithSlots<import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
4
|
+
maxWidth: {
|
|
5
|
+
type: StringConstructor;
|
|
6
|
+
default: string;
|
|
7
|
+
};
|
|
8
|
+
padding: {
|
|
9
|
+
type: StringConstructor;
|
|
10
|
+
default: string;
|
|
11
|
+
};
|
|
12
|
+
}>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
13
|
+
maxWidth: {
|
|
14
|
+
type: StringConstructor;
|
|
15
|
+
default: string;
|
|
16
|
+
};
|
|
17
|
+
padding: {
|
|
18
|
+
type: StringConstructor;
|
|
19
|
+
default: string;
|
|
20
|
+
};
|
|
21
|
+
}>> & Readonly<{}>, {
|
|
22
|
+
padding: string;
|
|
23
|
+
maxWidth: string;
|
|
24
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>, {
|
|
25
|
+
default?: (props: {}) => any;
|
|
26
|
+
}>;
|
|
27
|
+
export default _default;
|
|
28
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
29
|
+
new (): {
|
|
30
|
+
$slots: S;
|
|
31
|
+
};
|
|
32
|
+
};
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import type { IComponentDefinition } from '@/types/component';
|
|
2
|
+
export declare const builderOptions: IComponentDefinition;
|
|
3
|
+
declare const _default: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
4
|
+
src: {
|
|
5
|
+
type: StringConstructor;
|
|
6
|
+
required: true;
|
|
7
|
+
};
|
|
8
|
+
alt: {
|
|
9
|
+
type: StringConstructor;
|
|
10
|
+
default: string;
|
|
11
|
+
};
|
|
12
|
+
width: {
|
|
13
|
+
type: StringConstructor;
|
|
14
|
+
default: string;
|
|
15
|
+
};
|
|
16
|
+
objectFit: {
|
|
17
|
+
type: StringConstructor;
|
|
18
|
+
default: string;
|
|
19
|
+
};
|
|
20
|
+
}>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
21
|
+
src: {
|
|
22
|
+
type: StringConstructor;
|
|
23
|
+
required: true;
|
|
24
|
+
};
|
|
25
|
+
alt: {
|
|
26
|
+
type: StringConstructor;
|
|
27
|
+
default: string;
|
|
28
|
+
};
|
|
29
|
+
width: {
|
|
30
|
+
type: StringConstructor;
|
|
31
|
+
default: string;
|
|
32
|
+
};
|
|
33
|
+
objectFit: {
|
|
34
|
+
type: StringConstructor;
|
|
35
|
+
default: string;
|
|
36
|
+
};
|
|
37
|
+
}>> & Readonly<{}>, {
|
|
38
|
+
width: string;
|
|
39
|
+
alt: string;
|
|
40
|
+
objectFit: string;
|
|
41
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
42
|
+
export default _default;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { IComponentDefinition } from '@/types/component';
|
|
2
|
+
export declare const builderOptions: IComponentDefinition;
|
|
3
|
+
declare const _default: __VLS_WithSlots<import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
4
|
+
gap: {
|
|
5
|
+
type: StringConstructor;
|
|
6
|
+
default: string;
|
|
7
|
+
};
|
|
8
|
+
wrap: {
|
|
9
|
+
type: BooleanConstructor;
|
|
10
|
+
default: boolean;
|
|
11
|
+
};
|
|
12
|
+
justify: {
|
|
13
|
+
type: StringConstructor;
|
|
14
|
+
default: string;
|
|
15
|
+
};
|
|
16
|
+
}>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
17
|
+
gap: {
|
|
18
|
+
type: StringConstructor;
|
|
19
|
+
default: string;
|
|
20
|
+
};
|
|
21
|
+
wrap: {
|
|
22
|
+
type: BooleanConstructor;
|
|
23
|
+
default: boolean;
|
|
24
|
+
};
|
|
25
|
+
justify: {
|
|
26
|
+
type: StringConstructor;
|
|
27
|
+
default: string;
|
|
28
|
+
};
|
|
29
|
+
}>> & Readonly<{}>, {
|
|
30
|
+
gap: string;
|
|
31
|
+
wrap: boolean;
|
|
32
|
+
justify: string;
|
|
33
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>, {
|
|
34
|
+
default?: (props: {}) => any;
|
|
35
|
+
}>;
|
|
36
|
+
export default _default;
|
|
37
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
38
|
+
new (): {
|
|
39
|
+
$slots: S;
|
|
40
|
+
};
|
|
41
|
+
};
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import type { IComponentDefinition } from '@/types/component';
|
|
2
|
+
export declare const builderOptions: IComponentDefinition;
|
|
3
|
+
declare const _default: __VLS_WithSlots<import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
4
|
+
backgroundColor: {
|
|
5
|
+
type: StringConstructor;
|
|
6
|
+
default: string;
|
|
7
|
+
};
|
|
8
|
+
backgroundImage: {
|
|
9
|
+
type: StringConstructor;
|
|
10
|
+
default: string;
|
|
11
|
+
};
|
|
12
|
+
padding: {
|
|
13
|
+
type: StringConstructor;
|
|
14
|
+
default: string;
|
|
15
|
+
};
|
|
16
|
+
maxWidth: {
|
|
17
|
+
type: StringConstructor;
|
|
18
|
+
default: string;
|
|
19
|
+
};
|
|
20
|
+
}>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
21
|
+
backgroundColor: {
|
|
22
|
+
type: StringConstructor;
|
|
23
|
+
default: string;
|
|
24
|
+
};
|
|
25
|
+
backgroundImage: {
|
|
26
|
+
type: StringConstructor;
|
|
27
|
+
default: string;
|
|
28
|
+
};
|
|
29
|
+
padding: {
|
|
30
|
+
type: StringConstructor;
|
|
31
|
+
default: string;
|
|
32
|
+
};
|
|
33
|
+
maxWidth: {
|
|
34
|
+
type: StringConstructor;
|
|
35
|
+
default: string;
|
|
36
|
+
};
|
|
37
|
+
}>> & Readonly<{}>, {
|
|
38
|
+
padding: string;
|
|
39
|
+
maxWidth: string;
|
|
40
|
+
backgroundColor: string;
|
|
41
|
+
backgroundImage: string;
|
|
42
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>, {
|
|
43
|
+
default?: (props: {}) => any;
|
|
44
|
+
}>;
|
|
45
|
+
export default _default;
|
|
46
|
+
type __VLS_WithSlots<T, S> = T & {
|
|
47
|
+
new (): {
|
|
48
|
+
$slots: S;
|
|
49
|
+
};
|
|
50
|
+
};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { IComponentDefinition } from '@/types/component';
|
|
2
|
+
export declare const builderOptions: IComponentDefinition;
|
|
3
|
+
declare const _default: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
4
|
+
content: {
|
|
5
|
+
type: StringConstructor;
|
|
6
|
+
default: string;
|
|
7
|
+
};
|
|
8
|
+
tag: {
|
|
9
|
+
type: StringConstructor;
|
|
10
|
+
default: string;
|
|
11
|
+
};
|
|
12
|
+
}>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
13
|
+
content: {
|
|
14
|
+
type: StringConstructor;
|
|
15
|
+
default: string;
|
|
16
|
+
};
|
|
17
|
+
tag: {
|
|
18
|
+
type: StringConstructor;
|
|
19
|
+
default: string;
|
|
20
|
+
};
|
|
21
|
+
}>> & Readonly<{}>, {
|
|
22
|
+
content: string;
|
|
23
|
+
tag: string;
|
|
24
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
25
|
+
export default _default;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { IComponentDefinition } from '@/types/component';
|
|
2
|
+
export declare const builderOptions: IComponentDefinition;
|
|
3
|
+
declare const _default: import("vue").DefineComponent<{
|
|
4
|
+
src: string;
|
|
5
|
+
poster?: string;
|
|
6
|
+
width?: string;
|
|
7
|
+
controls?: boolean;
|
|
8
|
+
autoplay?: boolean;
|
|
9
|
+
muted?: boolean;
|
|
10
|
+
loop?: boolean;
|
|
11
|
+
}, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {}, string, import("vue").PublicProps, Readonly<{
|
|
12
|
+
src: string;
|
|
13
|
+
poster?: string;
|
|
14
|
+
width?: string;
|
|
15
|
+
controls?: boolean;
|
|
16
|
+
autoplay?: boolean;
|
|
17
|
+
muted?: boolean;
|
|
18
|
+
loop?: boolean;
|
|
19
|
+
}> & Readonly<{}>, {
|
|
20
|
+
width: string;
|
|
21
|
+
poster: string;
|
|
22
|
+
controls: boolean;
|
|
23
|
+
autoplay: boolean;
|
|
24
|
+
muted: boolean;
|
|
25
|
+
loop: boolean;
|
|
26
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, false, {}, any>;
|
|
27
|
+
export default _default;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { IComponentDefinition } from '@/types/component';
|
|
2
|
+
import PbColumn from './PbColumn.vue';
|
|
3
|
+
import PbRow from './PbRow.vue';
|
|
4
|
+
import PbText from './PbText.vue';
|
|
5
|
+
import PbImage from './PbImage.vue';
|
|
6
|
+
import PbVideo from './PbVideo.vue';
|
|
7
|
+
import PbSection from './PbSection.vue';
|
|
8
|
+
import PbContainer from './PbContainer.vue';
|
|
9
|
+
export declare const builtInComponents: IComponentDefinition[];
|
|
10
|
+
export { PbColumn, PbRow, PbText, PbImage, PbVideo, PbSection, PbContainer, };
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { type PropType } from 'vue';
|
|
2
|
+
import type { IPageData, INode, IPageSavePayload } from '@/types/node';
|
|
3
|
+
import type { PageBuilderMode } from '@/types/editor';
|
|
4
|
+
import { type TranslationDictionary } from '@/i18n';
|
|
5
|
+
declare const _default: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
6
|
+
pageData: {
|
|
7
|
+
type: PropType<IPageData>;
|
|
8
|
+
required: true;
|
|
9
|
+
};
|
|
10
|
+
mode: {
|
|
11
|
+
type: PropType<PageBuilderMode>;
|
|
12
|
+
default: string;
|
|
13
|
+
};
|
|
14
|
+
locale: {
|
|
15
|
+
type: StringConstructor;
|
|
16
|
+
default: undefined;
|
|
17
|
+
};
|
|
18
|
+
messages: {
|
|
19
|
+
type: PropType<TranslationDictionary>;
|
|
20
|
+
default: undefined;
|
|
21
|
+
};
|
|
22
|
+
}>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
23
|
+
save: (payload: IPageSavePayload) => any;
|
|
24
|
+
change: (tree: INode) => any;
|
|
25
|
+
}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
26
|
+
pageData: {
|
|
27
|
+
type: PropType<IPageData>;
|
|
28
|
+
required: true;
|
|
29
|
+
};
|
|
30
|
+
mode: {
|
|
31
|
+
type: PropType<PageBuilderMode>;
|
|
32
|
+
default: string;
|
|
33
|
+
};
|
|
34
|
+
locale: {
|
|
35
|
+
type: StringConstructor;
|
|
36
|
+
default: undefined;
|
|
37
|
+
};
|
|
38
|
+
messages: {
|
|
39
|
+
type: PropType<TranslationDictionary>;
|
|
40
|
+
default: undefined;
|
|
41
|
+
};
|
|
42
|
+
}>> & Readonly<{
|
|
43
|
+
onSave?: ((payload: IPageSavePayload) => any) | undefined;
|
|
44
|
+
onChange?: ((tree: INode) => any) | undefined;
|
|
45
|
+
}>, {
|
|
46
|
+
locale: string;
|
|
47
|
+
messages: TranslationDictionary;
|
|
48
|
+
mode: PageBuilderMode;
|
|
49
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
50
|
+
export default _default;
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
import { type PropType } from 'vue';
|
|
2
|
+
import type { INode } from '@/types/node';
|
|
3
|
+
import type { ViewportPreset } from '@/types/editor';
|
|
4
|
+
import { type NodeContextMenuAction } from './NodeContextMenu.vue';
|
|
5
|
+
declare const _default: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
6
|
+
content: {
|
|
7
|
+
type: PropType<INode>;
|
|
8
|
+
required: true;
|
|
9
|
+
};
|
|
10
|
+
variables: {
|
|
11
|
+
type: PropType<Record<string, string>>;
|
|
12
|
+
default: () => {};
|
|
13
|
+
};
|
|
14
|
+
selectedNodeId: {
|
|
15
|
+
type: PropType<number | null>;
|
|
16
|
+
default: null;
|
|
17
|
+
};
|
|
18
|
+
hoveredNodeId: {
|
|
19
|
+
type: PropType<number | null>;
|
|
20
|
+
default: null;
|
|
21
|
+
};
|
|
22
|
+
viewport: {
|
|
23
|
+
type: PropType<ViewportPreset>;
|
|
24
|
+
default: string;
|
|
25
|
+
};
|
|
26
|
+
}>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
27
|
+
select: (nodeId: number | null) => any;
|
|
28
|
+
hover: (nodeId: number | null) => any;
|
|
29
|
+
"context-action": (payload: {
|
|
30
|
+
action: NodeContextMenuAction;
|
|
31
|
+
nodeId: number;
|
|
32
|
+
}) => any;
|
|
33
|
+
}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
34
|
+
content: {
|
|
35
|
+
type: PropType<INode>;
|
|
36
|
+
required: true;
|
|
37
|
+
};
|
|
38
|
+
variables: {
|
|
39
|
+
type: PropType<Record<string, string>>;
|
|
40
|
+
default: () => {};
|
|
41
|
+
};
|
|
42
|
+
selectedNodeId: {
|
|
43
|
+
type: PropType<number | null>;
|
|
44
|
+
default: null;
|
|
45
|
+
};
|
|
46
|
+
hoveredNodeId: {
|
|
47
|
+
type: PropType<number | null>;
|
|
48
|
+
default: null;
|
|
49
|
+
};
|
|
50
|
+
viewport: {
|
|
51
|
+
type: PropType<ViewportPreset>;
|
|
52
|
+
default: string;
|
|
53
|
+
};
|
|
54
|
+
}>> & Readonly<{
|
|
55
|
+
onSelect?: ((nodeId: number | null) => any) | undefined;
|
|
56
|
+
onHover?: ((nodeId: number | null) => any) | undefined;
|
|
57
|
+
"onContext-action"?: ((payload: {
|
|
58
|
+
action: NodeContextMenuAction;
|
|
59
|
+
nodeId: number;
|
|
60
|
+
}) => any) | undefined;
|
|
61
|
+
}>, {
|
|
62
|
+
variables: Record<string, string>;
|
|
63
|
+
selectedNodeId: number | null;
|
|
64
|
+
hoveredNodeId: number | null;
|
|
65
|
+
viewport: ViewportPreset;
|
|
66
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
67
|
+
export default _default;
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { type PropType } from 'vue';
|
|
2
|
+
import type { ViewportPreset } from '@/types/editor';
|
|
3
|
+
declare const _default: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
4
|
+
canUndo: {
|
|
5
|
+
type: BooleanConstructor;
|
|
6
|
+
default: boolean;
|
|
7
|
+
};
|
|
8
|
+
canRedo: {
|
|
9
|
+
type: BooleanConstructor;
|
|
10
|
+
default: boolean;
|
|
11
|
+
};
|
|
12
|
+
isDirty: {
|
|
13
|
+
type: BooleanConstructor;
|
|
14
|
+
default: boolean;
|
|
15
|
+
};
|
|
16
|
+
viewport: {
|
|
17
|
+
type: PropType<ViewportPreset>;
|
|
18
|
+
default: string;
|
|
19
|
+
};
|
|
20
|
+
customViewportWidth: {
|
|
21
|
+
type: NumberConstructor;
|
|
22
|
+
default: number;
|
|
23
|
+
};
|
|
24
|
+
customViewportHeight: {
|
|
25
|
+
type: NumberConstructor;
|
|
26
|
+
default: number;
|
|
27
|
+
};
|
|
28
|
+
activeViewportWidth: {
|
|
29
|
+
type: PropType<number | null>;
|
|
30
|
+
default: null;
|
|
31
|
+
};
|
|
32
|
+
activeViewportHeight: {
|
|
33
|
+
type: PropType<number | null>;
|
|
34
|
+
default: null;
|
|
35
|
+
};
|
|
36
|
+
}>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
37
|
+
undo: () => any;
|
|
38
|
+
redo: () => any;
|
|
39
|
+
save: () => any;
|
|
40
|
+
"viewport-change": (preset: ViewportPreset) => any;
|
|
41
|
+
"custom-viewport-change": (payload: {
|
|
42
|
+
width: number;
|
|
43
|
+
height: number;
|
|
44
|
+
}) => any;
|
|
45
|
+
}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
46
|
+
canUndo: {
|
|
47
|
+
type: BooleanConstructor;
|
|
48
|
+
default: boolean;
|
|
49
|
+
};
|
|
50
|
+
canRedo: {
|
|
51
|
+
type: BooleanConstructor;
|
|
52
|
+
default: boolean;
|
|
53
|
+
};
|
|
54
|
+
isDirty: {
|
|
55
|
+
type: BooleanConstructor;
|
|
56
|
+
default: boolean;
|
|
57
|
+
};
|
|
58
|
+
viewport: {
|
|
59
|
+
type: PropType<ViewportPreset>;
|
|
60
|
+
default: string;
|
|
61
|
+
};
|
|
62
|
+
customViewportWidth: {
|
|
63
|
+
type: NumberConstructor;
|
|
64
|
+
default: number;
|
|
65
|
+
};
|
|
66
|
+
customViewportHeight: {
|
|
67
|
+
type: NumberConstructor;
|
|
68
|
+
default: number;
|
|
69
|
+
};
|
|
70
|
+
activeViewportWidth: {
|
|
71
|
+
type: PropType<number | null>;
|
|
72
|
+
default: null;
|
|
73
|
+
};
|
|
74
|
+
activeViewportHeight: {
|
|
75
|
+
type: PropType<number | null>;
|
|
76
|
+
default: null;
|
|
77
|
+
};
|
|
78
|
+
}>> & Readonly<{
|
|
79
|
+
onUndo?: (() => any) | undefined;
|
|
80
|
+
onRedo?: (() => any) | undefined;
|
|
81
|
+
onSave?: (() => any) | undefined;
|
|
82
|
+
"onViewport-change"?: ((preset: ViewportPreset) => any) | undefined;
|
|
83
|
+
"onCustom-viewport-change"?: ((payload: {
|
|
84
|
+
width: number;
|
|
85
|
+
height: number;
|
|
86
|
+
}) => any) | undefined;
|
|
87
|
+
}>, {
|
|
88
|
+
isDirty: boolean;
|
|
89
|
+
viewport: ViewportPreset;
|
|
90
|
+
canUndo: boolean;
|
|
91
|
+
canRedo: boolean;
|
|
92
|
+
customViewportWidth: number;
|
|
93
|
+
customViewportHeight: number;
|
|
94
|
+
activeViewportWidth: number | null;
|
|
95
|
+
activeViewportHeight: number | null;
|
|
96
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
97
|
+
export default _default;
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { type PropType } from 'vue';
|
|
2
|
+
import { type IframeBridgeKeydownPayload } from '@/core/iframe-bridge';
|
|
3
|
+
import type { INode } from '@/types/node';
|
|
4
|
+
import type { IViewportSize, ViewportPreset } from '@/types/editor';
|
|
5
|
+
import { type NodeContextMenuAction } from './NodeContextMenu.vue';
|
|
6
|
+
interface IframeCanvasKeydownPayload extends IframeBridgeKeydownPayload {
|
|
7
|
+
preventDefault: () => void;
|
|
8
|
+
}
|
|
9
|
+
declare const _default: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
10
|
+
content: {
|
|
11
|
+
type: PropType<INode>;
|
|
12
|
+
required: true;
|
|
13
|
+
};
|
|
14
|
+
layout: {
|
|
15
|
+
type: PropType<INode | null>;
|
|
16
|
+
default: null;
|
|
17
|
+
};
|
|
18
|
+
variables: {
|
|
19
|
+
type: PropType<Record<string, string>>;
|
|
20
|
+
default: () => {};
|
|
21
|
+
};
|
|
22
|
+
selectedNodeId: {
|
|
23
|
+
type: PropType<number | null>;
|
|
24
|
+
default: null;
|
|
25
|
+
};
|
|
26
|
+
hoveredNodeId: {
|
|
27
|
+
type: PropType<number | null>;
|
|
28
|
+
default: null;
|
|
29
|
+
};
|
|
30
|
+
viewport: {
|
|
31
|
+
type: PropType<ViewportPreset>;
|
|
32
|
+
default: string;
|
|
33
|
+
};
|
|
34
|
+
viewportWidth: {
|
|
35
|
+
type: PropType<number | null>;
|
|
36
|
+
default: null;
|
|
37
|
+
};
|
|
38
|
+
viewportHeight: {
|
|
39
|
+
type: PropType<number | null>;
|
|
40
|
+
default: null;
|
|
41
|
+
};
|
|
42
|
+
}>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
43
|
+
select: (nodeId: number | null) => any;
|
|
44
|
+
hover: (nodeId: number | null) => any;
|
|
45
|
+
"context-action": (payload: {
|
|
46
|
+
action: NodeContextMenuAction;
|
|
47
|
+
nodeId: number;
|
|
48
|
+
}) => any;
|
|
49
|
+
"iframe-keydown": (payload: IframeCanvasKeydownPayload) => any;
|
|
50
|
+
"viewport-size-change": (payload: IViewportSize) => any;
|
|
51
|
+
}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
52
|
+
content: {
|
|
53
|
+
type: PropType<INode>;
|
|
54
|
+
required: true;
|
|
55
|
+
};
|
|
56
|
+
layout: {
|
|
57
|
+
type: PropType<INode | null>;
|
|
58
|
+
default: null;
|
|
59
|
+
};
|
|
60
|
+
variables: {
|
|
61
|
+
type: PropType<Record<string, string>>;
|
|
62
|
+
default: () => {};
|
|
63
|
+
};
|
|
64
|
+
selectedNodeId: {
|
|
65
|
+
type: PropType<number | null>;
|
|
66
|
+
default: null;
|
|
67
|
+
};
|
|
68
|
+
hoveredNodeId: {
|
|
69
|
+
type: PropType<number | null>;
|
|
70
|
+
default: null;
|
|
71
|
+
};
|
|
72
|
+
viewport: {
|
|
73
|
+
type: PropType<ViewportPreset>;
|
|
74
|
+
default: string;
|
|
75
|
+
};
|
|
76
|
+
viewportWidth: {
|
|
77
|
+
type: PropType<number | null>;
|
|
78
|
+
default: null;
|
|
79
|
+
};
|
|
80
|
+
viewportHeight: {
|
|
81
|
+
type: PropType<number | null>;
|
|
82
|
+
default: null;
|
|
83
|
+
};
|
|
84
|
+
}>> & Readonly<{
|
|
85
|
+
onSelect?: ((nodeId: number | null) => any) | undefined;
|
|
86
|
+
onHover?: ((nodeId: number | null) => any) | undefined;
|
|
87
|
+
"onContext-action"?: ((payload: {
|
|
88
|
+
action: NodeContextMenuAction;
|
|
89
|
+
nodeId: number;
|
|
90
|
+
}) => any) | undefined;
|
|
91
|
+
"onIframe-keydown"?: ((payload: IframeCanvasKeydownPayload) => any) | undefined;
|
|
92
|
+
"onViewport-size-change"?: ((payload: IViewportSize) => any) | undefined;
|
|
93
|
+
}>, {
|
|
94
|
+
layout: INode | null;
|
|
95
|
+
variables: Record<string, string>;
|
|
96
|
+
selectedNodeId: number | null;
|
|
97
|
+
hoveredNodeId: number | null;
|
|
98
|
+
viewport: ViewportPreset;
|
|
99
|
+
viewportWidth: number | null;
|
|
100
|
+
viewportHeight: number | null;
|
|
101
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
102
|
+
export default _default;
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { type PropType } from 'vue';
|
|
2
|
+
import type { INode } from '@/types/node';
|
|
3
|
+
declare const _default: import("vue").DefineComponent<import("vue").ExtractPropTypes<{
|
|
4
|
+
open: {
|
|
5
|
+
type: BooleanConstructor;
|
|
6
|
+
default: boolean;
|
|
7
|
+
};
|
|
8
|
+
content: {
|
|
9
|
+
type: PropType<INode | null>;
|
|
10
|
+
default: null;
|
|
11
|
+
};
|
|
12
|
+
selectedNodeId: {
|
|
13
|
+
type: PropType<number | null>;
|
|
14
|
+
default: null;
|
|
15
|
+
};
|
|
16
|
+
}>, {}, {}, {}, {}, import("vue").ComponentOptionsMixin, import("vue").ComponentOptionsMixin, {
|
|
17
|
+
select: (nodeId: number) => any;
|
|
18
|
+
add: (componentName: string) => any;
|
|
19
|
+
toggle: () => any;
|
|
20
|
+
dragStart: (componentName: string) => any;
|
|
21
|
+
dragEnd: () => any;
|
|
22
|
+
}, string, import("vue").PublicProps, Readonly<import("vue").ExtractPropTypes<{
|
|
23
|
+
open: {
|
|
24
|
+
type: BooleanConstructor;
|
|
25
|
+
default: boolean;
|
|
26
|
+
};
|
|
27
|
+
content: {
|
|
28
|
+
type: PropType<INode | null>;
|
|
29
|
+
default: null;
|
|
30
|
+
};
|
|
31
|
+
selectedNodeId: {
|
|
32
|
+
type: PropType<number | null>;
|
|
33
|
+
default: null;
|
|
34
|
+
};
|
|
35
|
+
}>> & Readonly<{
|
|
36
|
+
onSelect?: ((nodeId: number) => any) | undefined;
|
|
37
|
+
onAdd?: ((componentName: string) => any) | undefined;
|
|
38
|
+
onToggle?: (() => any) | undefined;
|
|
39
|
+
onDragStart?: ((componentName: string) => any) | undefined;
|
|
40
|
+
onDragEnd?: (() => any) | undefined;
|
|
41
|
+
}>, {
|
|
42
|
+
content: INode | null;
|
|
43
|
+
selectedNodeId: number | null;
|
|
44
|
+
open: boolean;
|
|
45
|
+
}, {}, {}, {}, string, import("vue").ComponentProvideOptions, true, {}, any>;
|
|
46
|
+
export default _default;
|