pagepilot-visual-editor 1.0.24 → 1.0.26
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/dist/blocks-internal/block-iframe/src/index.d.ts +6 -0
- package/dist/blocks-internal/block-list/src/index.d.ts +1 -1
- package/dist/blocks-internal/block-stepper/src/index.d.ts +1 -1
- package/dist/editor-sample/App/InspectorDrawer/ConfigurationPanel/input-panels/FormsPickerSidebarPanel.d.ts +1 -0
- package/dist/editor-sample/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/ColorInput/Picker.d.ts +4 -1
- package/dist/editor-sample/App/InspectorDrawer/LayersPanelStyles.d.ts +1 -1
- package/dist/editor-sample/App/InspectorDrawer/LayoutPanel/templateApplyHelpers.d.ts +22 -4
- package/dist/editor-sample/App/InspectorDrawer/VariablesPanel/GroupBlockPreview.d.ts +7 -0
- package/dist/editor-sample/App/InspectorDrawer/VariablesPanel/ItemsArrayRepeatSection.d.ts +14 -0
- package/dist/editor-sample/App/InspectorDrawer/VariablesPanel/ScalarDataReferencePanel.d.ts +24 -0
- package/dist/editor-sample/App/InspectorDrawer/VariablesPanel/ScalarFieldRow.d.ts +12 -0
- package/dist/editor-sample/App/InspectorDrawer/VariablesPanel/VariableGroupList.d.ts +8 -0
- package/dist/editor-sample/App/InspectorDrawer/VariablesPanel/VariablesPanelContext.d.ts +10 -0
- package/dist/editor-sample/App/InspectorDrawer/VariablesPanel/dataReferenceUtils.d.ts +24 -6
- package/dist/editor-sample/App/InspectorDrawer/VariablesPanel/index.d.ts +8 -1
- package/dist/editor-sample/App/InspectorDrawer/VariablesPanel/repeatRowActions.d.ts +27 -0
- package/dist/editor-sample/App/InspectorDrawer/VariablesPanel/styles.d.ts +20 -0
- package/dist/editor-sample/App/InspectorDrawer/components/DateFieldControls.d.ts +12 -0
- package/dist/editor-sample/App/InspectorDrawer/components/DateTimeFieldControls.d.ts +14 -0
- package/dist/editor-sample/App/InspectorDrawer/components/TimeFieldControls.d.ts +12 -0
- package/dist/editor-sample/App/shared/editor.styles.d.ts +2 -2
- package/dist/editor-sample/documents/blocks/FormsPicker/FormsPropsSchema.d.ts +2 -0
- package/dist/editor-sample/documents/blocks/Table/TableImportDialog.styles.d.ts +4 -4
- package/dist/editor-sample/documents/blocks/TabsBlock/TabsBlockPropsSchema.d.ts +14 -0
- package/dist/editor-sample/documents/blocks/helpers/EditorChildrenIds/AddBlockMenu/blockMenuStyles.d.ts +2 -0
- package/dist/editor-sample/documents/blocks/helpers/EditorChildrenIds/AddBlockMenu/buttons.d.ts +3 -4
- package/dist/editor-sample/documents/blocks/helpers/InlineTextToolbar/hooks/useToolbarCommands.d.ts +17 -1
- package/dist/editor-sample/documents/blocks/helpers/InlineTextToolbar/popovers/ResponsiveFontSizePopover.d.ts +43 -0
- package/dist/editor-sample/documents/blocks/helpers/InlineTextToolbar/types.d.ts +7 -0
- package/dist/editor-sample/documents/blocks/helpers/documentUtils.d.ts +93 -2
- package/dist/editor-sample/documents/blocks/helpers/responsiveFontSizeCss.d.ts +72 -0
- package/dist/editor-sample/documents/blocks/helpers/variableBinding.d.ts +5 -0
- package/dist/editor-sample/documents/editor/core.d.ts +23 -2
- package/dist/editor-sample/documents/editor/templateVariables.d.ts +3 -3
- package/dist/email-builder-core/blocks/FormsPicker/FormsPropsSchema.d.ts +1 -0
- package/dist/email-builder-core/blocks/TabsBlock/TabsBlockPropsSchema.d.ts +14 -0
- package/dist/email-builder-core/renderers/pageScripts.d.ts +1 -0
- package/dist/email-builder-core/utils/substituteTemplateVars.d.ts +32 -0
- package/dist/host-stubs/modules/_hostListShim.d.ts +1 -1
- package/dist/host-stubs/modules/forms/formsService.d.ts +2 -1
- package/dist/host-stubs/modules/forms/useFormsList.d.ts +12 -0
- package/dist/host-stubs/view/shared/common/InfoTooltip.d.ts +19 -0
- package/dist/host-stubs/view/shared/timeZones.d.ts +4 -0
- package/dist/{index-DC6qaxfh.cjs → index-BNqa-SV3.cjs} +317 -288
- package/dist/{index-QDgGEZCN.js → index-C4zNSWXe.js} +1 -1
- package/dist/{index-DUfdBPwm.cjs → index-Cu-dtp0Q.cjs} +1 -1
- package/dist/{index-n8k3yknQ.js → index-Dk7bp7l0.js} +30882 -27652
- package/dist/index.cjs +1 -1
- package/dist/index.d.ts +2 -2
- package/dist/index.js +15 -12
- package/dist/render-core/apiDataSource.d.ts +50 -0
- package/dist/render-core/dateFormats.d.ts +67 -0
- package/dist/render-core/templateBaking.d.ts +105 -2
- package/dist/render.cjs +178 -155
- package/dist/render.d.ts +2 -2
- package/dist/render.js +6364 -5686
- package/dist/renderToStaticHtml.d.ts +58 -3
- package/dist/{xlsx-pI-7Dj2H.cjs → xlsx-C6JQXDb3.cjs} +1 -1
- package/dist/{xlsx-rO__5tF8.js → xlsx-Cd1etxFW.js} +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { FontSizeDevice } from '../hooks/useToolbarCommands';
|
|
2
|
+
type ResponsiveFontSizePopoverProps = {
|
|
3
|
+
/**
|
|
4
|
+
* Currently-applied per-device values, read from the nearest wrapping
|
|
5
|
+
* responsive span at the caret. Empty string means "no override for this
|
|
6
|
+
* device" — the block-level font size shows through.
|
|
7
|
+
*/
|
|
8
|
+
values: {
|
|
9
|
+
desktop: string;
|
|
10
|
+
tablet: string;
|
|
11
|
+
mobile: string;
|
|
12
|
+
};
|
|
13
|
+
/** Block-level size (from `fmt.fontSize`) — shown in the trigger when no
|
|
14
|
+
* per-device override exists so the label matches the pre-responsive
|
|
15
|
+
* behavior of the single font-size dropdown. */
|
|
16
|
+
fallbackSize: string;
|
|
17
|
+
/** Which device tab should open by default. Wired to the canvas's
|
|
18
|
+
* currently-previewed device so the popover lands on whatever the user is
|
|
19
|
+
* looking at. */
|
|
20
|
+
initialDevice: FontSizeDevice;
|
|
21
|
+
/** Write a size to `data-fs-<device>` on the current selection's span. */
|
|
22
|
+
onApply: (px: number, device: FontSizeDevice) => void;
|
|
23
|
+
/** Remove `data-fs-<device>` from the current selection's span. */
|
|
24
|
+
onClear: (device: FontSizeDevice) => void;
|
|
25
|
+
};
|
|
26
|
+
/**
|
|
27
|
+
* Font-size control that lets the user set a distinct size per device
|
|
28
|
+
* (Desktop / Tablet / Mobile) on the current selection. Layout:
|
|
29
|
+
*
|
|
30
|
+
* [ 40 ▾ ] ← trigger (compact summary)
|
|
31
|
+
* └─ popover ────────────────────────────
|
|
32
|
+
* | 🖥 Desktop 40 · Clear |
|
|
33
|
+
* | 📱 Tablet Not set | ← device rows
|
|
34
|
+
* | 📱 Mobile 24 · Clear |
|
|
35
|
+
* | ───────────────────────────── |
|
|
36
|
+
* | ✓ 10 12 14 … | ← size list for the active row
|
|
37
|
+
*
|
|
38
|
+
* The device rows act as radio-style tabs — clicking one selects it as the
|
|
39
|
+
* "active" row and highlights its current value in the size list below. The
|
|
40
|
+
* size list writes to whichever device the active row represents.
|
|
41
|
+
*/
|
|
42
|
+
export declare function ResponsiveFontSizePopover({ values, fallbackSize, initialDevice, onApply, onClear, }: ResponsiveFontSizePopoverProps): import("react/jsx-runtime").JSX.Element;
|
|
43
|
+
export {};
|
|
@@ -2,6 +2,7 @@ export type ToolbarPosition = {
|
|
|
2
2
|
top: number;
|
|
3
3
|
left: number;
|
|
4
4
|
};
|
|
5
|
+
export declare const LINK_COLOR = "#2563eb";
|
|
5
6
|
export type FormatSnapshot = {
|
|
6
7
|
bold: boolean;
|
|
7
8
|
italic: boolean;
|
|
@@ -18,6 +19,12 @@ export type FormatSnapshot = {
|
|
|
18
19
|
blockLabel: string;
|
|
19
20
|
fontName: string;
|
|
20
21
|
fontSize: string;
|
|
22
|
+
/** Per-device font-size override read from the nearest wrapping
|
|
23
|
+
* `<span data-fs-*>` at the caret. Empty string means no override for
|
|
24
|
+
* that device — the block-level `fontSize` shows through. */
|
|
25
|
+
fontSizeDesktop: string;
|
|
26
|
+
fontSizeTablet: string;
|
|
27
|
+
fontSizeMobile: string;
|
|
21
28
|
/** Unitless multiplier (e.g. "1.5") if the block carries an inline
|
|
22
29
|
* line-height; empty string when the block inherits its default. */
|
|
23
30
|
lineHeight: string;
|
|
@@ -41,8 +41,8 @@ export type RepeatableSlot = {
|
|
|
41
41
|
};
|
|
42
42
|
export type RepeatableContainerInfo = {
|
|
43
43
|
containerId: string;
|
|
44
|
-
type: 'Grid' | 'FlexColumns' | 'Carousel';
|
|
45
|
-
/** Total fixed slots (grid cells / flex columns / carousel slides). */
|
|
44
|
+
type: 'Grid' | 'FlexColumns' | 'Carousel' | 'Marquee' | 'Pagination' | 'TabsBlock';
|
|
45
|
+
/** Total fixed slots (grid cells / flex columns / carousel slides / tab panels). */
|
|
46
46
|
slotCount: number;
|
|
47
47
|
/** Each slot's current child ids, normalized to `slotCount` length. */
|
|
48
48
|
slots: RepeatableSlot[];
|
|
@@ -62,6 +62,97 @@ export declare function getRepeatableContainerInfo(documentTree: Record<string,
|
|
|
62
62
|
/** Write a container's slots back onto the block (Grid → cells, Carousel →
|
|
63
63
|
* items[].contentChildrenIds, else → columns). */
|
|
64
64
|
export declare function writeContainerSlots(block: any, slots: RepeatableSlot[]): any;
|
|
65
|
+
export type ItemsArrayInfo = {
|
|
66
|
+
blockId: string;
|
|
67
|
+
type: string;
|
|
68
|
+
items: Record<string, any>[];
|
|
69
|
+
};
|
|
70
|
+
/** True if the block's repeatable content is a flat `props.items` array (no child blocks). */
|
|
71
|
+
export declare function isItemsArrayBlockType(type: string | undefined): boolean;
|
|
72
|
+
/**
|
|
73
|
+
* Describe an items-array block's current items. Returns null when the block
|
|
74
|
+
* isn't a supported items-array type. Used by the Variables tab to decide
|
|
75
|
+
* whether to show the items data-source controls for the selected block.
|
|
76
|
+
*/
|
|
77
|
+
export declare function getItemsArrayInfo(documentTree: Record<string, any>, blockId: string): ItemsArrayInfo | null;
|
|
78
|
+
/** Write an items-array block's `items` back onto the block. */
|
|
79
|
+
export declare function writeItemsArray(block: any, items: Record<string, any>[]): any;
|
|
80
|
+
export type VariableGroupKind = 'container' | 'itemsArray' | 'block' | 'page';
|
|
81
|
+
export type VariableGroup = {
|
|
82
|
+
/** Stable identity for selection — the owning block id, or `page` for page-level. */
|
|
83
|
+
id: string;
|
|
84
|
+
kind: VariableGroupKind;
|
|
85
|
+
/** Block id to select on the canvas when the group is opened. Null for page-level. */
|
|
86
|
+
blockId: string | null;
|
|
87
|
+
/** Block type (`Grid`, `FlexColumns`, …) — drives the list row's icon. Null for page-level. */
|
|
88
|
+
blockType: string | null;
|
|
89
|
+
/** How many variable fields this group holds. */
|
|
90
|
+
fieldCount: number;
|
|
91
|
+
/** Repeat slot total, when the group is a slot container. */
|
|
92
|
+
slotCount?: number;
|
|
93
|
+
/**
|
|
94
|
+
* Field names in this group, in order — rendered as the card's preview so
|
|
95
|
+
* the user can tell two same-type groups apart by their CONTENT rather than
|
|
96
|
+
* by a positional number.
|
|
97
|
+
*/
|
|
98
|
+
fieldNames: string[];
|
|
99
|
+
/**
|
|
100
|
+
* True when the block is a repeatable container the author has NOT set up
|
|
101
|
+
* yet — no field, no Repeat toggle, no row tokens. It owns nothing to edit,
|
|
102
|
+
* but its Repeat toggle is only reachable from its own screen, so it is
|
|
103
|
+
* listed separately rather than dropped. See `isVariableBoundBlock`.
|
|
104
|
+
*/
|
|
105
|
+
isCandidate?: boolean;
|
|
106
|
+
};
|
|
107
|
+
/**
|
|
108
|
+
* The block a field belongs to, or null when the field is page-level.
|
|
109
|
+
*
|
|
110
|
+
* `sourceBlockId` points at the template block sitting INSIDE a container slot,
|
|
111
|
+
* not at the container itself — and in practice `containerId` is usually absent
|
|
112
|
+
* (the repeat flow only ever writes `sourceBlockId`). So a source block is
|
|
113
|
+
* walked UP to its owning repeatable container: that container is what the user
|
|
114
|
+
* thinks of as "the group", and grouping by the raw `sourceBlockId` would both
|
|
115
|
+
* split one grid into a row per slot and fail every `getRepeatableContainerInfo`
|
|
116
|
+
* lookup downstream.
|
|
117
|
+
*
|
|
118
|
+
* A source block with no repeatable ancestor is a plain (non-repeatable) block
|
|
119
|
+
* with variables — it stays its own group, keyed on itself.
|
|
120
|
+
*/
|
|
121
|
+
export declare function getFieldOwnerBlockId(documentTree: Record<string, any>, field: {
|
|
122
|
+
containerId?: string;
|
|
123
|
+
sourceBlockId?: string;
|
|
124
|
+
itemsBlockId?: string;
|
|
125
|
+
}): string | null;
|
|
126
|
+
/**
|
|
127
|
+
* Cheap structural fingerprint of everything `collectVariableGroups` actually
|
|
128
|
+
* reads: each block's `type` + every child-id array (the `collectSubtreeIds`
|
|
129
|
+
* walk) + the slot-count props Grid/Pagination use, plus each field's owner ids
|
|
130
|
+
* / name / type. Text edits, colour/style tweaks, `data.style`, block `props`
|
|
131
|
+
* that aren't structural — none of it moves this string. Memo the group list on
|
|
132
|
+
* this instead of the whole `document` so ~90% of editor keystrokes skip the
|
|
133
|
+
* full tree re-scan.
|
|
134
|
+
*
|
|
135
|
+
* Must list the SAME shapes `collectSubtreeIds` + `readContainerSlots` walk —
|
|
136
|
+
* if a new container child-array is added there, mirror it here or the list can
|
|
137
|
+
* go stale until an unrelated structural edit flushes it.
|
|
138
|
+
*/
|
|
139
|
+
export declare function variableGroupsStructuralKey(documentTree: Record<string, any>, fields: Array<{
|
|
140
|
+
id?: string;
|
|
141
|
+
name?: string;
|
|
142
|
+
type?: string;
|
|
143
|
+
containerId?: string;
|
|
144
|
+
sourceBlockId?: string;
|
|
145
|
+
itemsBlockId?: string;
|
|
146
|
+
}>): string;
|
|
147
|
+
export declare function collectVariableGroups(documentTree: Record<string, any>, fields: Array<{
|
|
148
|
+
id?: string;
|
|
149
|
+
name?: string;
|
|
150
|
+
type?: string;
|
|
151
|
+
value?: unknown;
|
|
152
|
+
containerId?: string;
|
|
153
|
+
sourceBlockId?: string;
|
|
154
|
+
itemsBlockId?: string;
|
|
155
|
+
}>): VariableGroup[];
|
|
65
156
|
/**
|
|
66
157
|
* Grow a repeatable container so it has at least `neededSlots` cells/columns/slides.
|
|
67
158
|
*
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Global stylesheet that makes per-span `data-fs-<device>` attributes render
|
|
3
|
+
* at the picked size.
|
|
4
|
+
*
|
|
5
|
+
* The inline toolbar writes attributes only — no `style="font-size:…"` — so
|
|
6
|
+
* a single span can carry three independent sizes (Desktop / Tablet / Mobile)
|
|
7
|
+
* without fighting over a single inline slot. This module owns the CSS that
|
|
8
|
+
* turns those attributes into a live font-size.
|
|
9
|
+
*
|
|
10
|
+
* Rendering paths and how each finds the right rule:
|
|
11
|
+
*
|
|
12
|
+
* Real page viewport: `@media (max-width: 640px) { [data-fs-mobile="24"] … }`
|
|
13
|
+
* Fires on real pages where the browser viewport width is truthful. The
|
|
14
|
+
* published page loads its viewport-driven CSS this way.
|
|
15
|
+
*
|
|
16
|
+
* Editor canvas simulation: `@container ahd-page (max-width: 640px) …`
|
|
17
|
+
* The editor fakes device widths by RESIZING the `.ahd-page-root` box
|
|
18
|
+
* (378px mobile / 720px tablet) inside a full-width browser, so plain
|
|
19
|
+
* `@media` never fires in the editor. `.ahd-page-root` is set up as a
|
|
20
|
+
* `container-type: inline-size; container-name: ahd-page` context (see
|
|
21
|
+
* renderDynamicCss.ts), which `@container ahd-page (max-width: …)`
|
|
22
|
+
* queries against — so the same rule table works in both places.
|
|
23
|
+
*
|
|
24
|
+
* Emitting both queries around identical rule bodies is the shared pattern
|
|
25
|
+
* across the codebase (see MenuPicker, FlexColumns, EmailLayout responsive
|
|
26
|
+
* helpers). Desktop rules stay unscoped so they always apply as the base.
|
|
27
|
+
*
|
|
28
|
+
* The rule table is static (22 sizes × 3 devices × two queries) so no
|
|
29
|
+
* per-render work happens — the stylesheet is injected once into
|
|
30
|
+
* `document.head` on first import.
|
|
31
|
+
*/
|
|
32
|
+
export declare const RESPONSIVE_FONT_SIZE_CSS: string;
|
|
33
|
+
export declare function buildExtraResponsiveFontSizeCss(html: string): string;
|
|
34
|
+
/**
|
|
35
|
+
* Injects the responsive font-size stylesheet into `document.head` exactly
|
|
36
|
+
* once per document. Safe to call from any block renderer's top-level
|
|
37
|
+
* module load — a second call is a no-op if the element already exists.
|
|
38
|
+
*/
|
|
39
|
+
export declare function ensureResponsiveFontSizeCssInjected(): void;
|
|
40
|
+
/**
|
|
41
|
+
* Collapse chains of nested `<span data-fs-*>` wrappers so a single span
|
|
42
|
+
* carries all three device markers.
|
|
43
|
+
*
|
|
44
|
+
* A previous version of applyFontSize wrapped each write in a fresh <font
|
|
45
|
+
* size="7"> which turned into a fresh <span data-fs-<device>>. Applying
|
|
46
|
+
* three device sizes in a row produced three concentric spans, one per
|
|
47
|
+
* device, each seeing only its own attribute — which broke both the
|
|
48
|
+
* per-device readback (readLiveFormat surfaced only the innermost) and
|
|
49
|
+
* the published-page cascade (the outermost span's unscoped desktop rule
|
|
50
|
+
* shadowed inner mobile/tablet markers on their respective breakpoints).
|
|
51
|
+
*
|
|
52
|
+
* Runs on the editor DOM whenever it renders, so any legacy nested
|
|
53
|
+
* content authored under the old code path heals in place the moment it
|
|
54
|
+
* flows through this normalizer. Idempotent.
|
|
55
|
+
*
|
|
56
|
+
* The merge rule: if a responsive span has exactly one responsive-span
|
|
57
|
+
* child and no non-whitespace text siblings alongside that child, fold the
|
|
58
|
+
* two together. Attributes already on the child win over the parent's for
|
|
59
|
+
* the same device slot (the child was written more recently).
|
|
60
|
+
*/
|
|
61
|
+
export declare function normalizeResponsiveSpans(root: HTMLElement | null): void;
|
|
62
|
+
/**
|
|
63
|
+
* Copy the parent responsive span's inline style properties and class onto the
|
|
64
|
+
* child before the parent is unwrapped. Child values win, so the more
|
|
65
|
+
* recently-authored inner span keeps its own choices; the parent's `font-size`
|
|
66
|
+
* is skipped because per-device sizing is driven by `data-fs-*` + CSS rules.
|
|
67
|
+
*
|
|
68
|
+
* Exported so `applyFontSize` in the inline toolbar can share the exact same
|
|
69
|
+
* merge behavior when its slow-path parent-merge loop collapses nested
|
|
70
|
+
* responsive spans it just produced.
|
|
71
|
+
*/
|
|
72
|
+
export declare function mergeStylingFromParent(parent: HTMLElement, child: HTMLElement): void;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare function subtreeHasRowTokens(documentTree: Record<string, any>, rootId: string): boolean;
|
|
2
|
+
/** True if the author has switched the block's Repeat toggle on. */
|
|
3
|
+
export declare function hasRepeatEnabled(block: any): boolean;
|
|
4
|
+
export declare function isVariableBoundBlock(documentTree: Record<string, any>, blockId: string, fieldOwnerIds: Set<string>): boolean;
|
|
5
|
+
export declare function classifyVariableBlock(documentTree: Record<string, any>, blockId: string, fieldOwnerIds: Set<string>): 'bound' | 'candidate' | 'none';
|
|
@@ -475,8 +475,14 @@ export declare const EditorBlock: ({ type, data }: import('@usewaypoint/document
|
|
|
475
475
|
left: z.ZodNumber;
|
|
476
476
|
}, z.core.$strip>>>;
|
|
477
477
|
tabActiveColor: z.ZodNullable<z.ZodOptional<z.ZodString>>;
|
|
478
|
+
tabActiveBgColor: z.ZodNullable<z.ZodOptional<z.ZodString>>;
|
|
479
|
+
tabInactiveTextColor: z.ZodNullable<z.ZodOptional<z.ZodString>>;
|
|
480
|
+
tabInactiveBgColor: z.ZodNullable<z.ZodOptional<z.ZodString>>;
|
|
481
|
+
tabInactiveBorderColor: z.ZodNullable<z.ZodOptional<z.ZodString>>;
|
|
482
|
+
tabInactiveBorderWidth: z.ZodNullable<z.ZodOptional<z.ZodNumber>>;
|
|
478
483
|
tabTextColor: z.ZodNullable<z.ZodOptional<z.ZodString>>;
|
|
479
484
|
tabBgColor: z.ZodNullable<z.ZodOptional<z.ZodString>>;
|
|
485
|
+
tabBorderRadius: z.ZodNullable<z.ZodOptional<z.ZodNumber>>;
|
|
480
486
|
tabGap: z.ZodNullable<z.ZodOptional<z.ZodNumber>>;
|
|
481
487
|
contentGap: z.ZodNullable<z.ZodOptional<z.ZodNumber>>;
|
|
482
488
|
navBorderColor: z.ZodNullable<z.ZodOptional<z.ZodString>>;
|
|
@@ -505,6 +511,14 @@ export declare const EditorBlock: ({ type, data }: import('@usewaypoint/document
|
|
|
505
511
|
showSelectedSection: "showSelectedSection";
|
|
506
512
|
scrollToSelectedSection: "scrollToSelectedSection";
|
|
507
513
|
}>>>;
|
|
514
|
+
tabsAlign: z.ZodNullable<z.ZodOptional<z.ZodEnum<{
|
|
515
|
+
right: "right";
|
|
516
|
+
left: "left";
|
|
517
|
+
center: "center";
|
|
518
|
+
}>>>;
|
|
519
|
+
dropdown: z.ZodNullable<z.ZodOptional<z.ZodBoolean>>;
|
|
520
|
+
dropdownTablet: z.ZodNullable<z.ZodOptional<z.ZodBoolean>>;
|
|
521
|
+
dropdownMobile: z.ZodNullable<z.ZodOptional<z.ZodBoolean>>;
|
|
508
522
|
activeTabIndex: z.ZodNullable<z.ZodOptional<z.ZodNumber>>;
|
|
509
523
|
stickyNav: z.ZodNullable<z.ZodOptional<z.ZodBoolean>>;
|
|
510
524
|
items: z.ZodNullable<z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
@@ -1026,6 +1040,7 @@ export declare const EditorBlock: ({ type, data }: import('@usewaypoint/document
|
|
|
1026
1040
|
height: z.ZodDefault<z.ZodString>;
|
|
1027
1041
|
heightTablet: z.ZodOptional<z.ZodString>;
|
|
1028
1042
|
heightMobile: z.ZodOptional<z.ZodString>;
|
|
1043
|
+
autoHeight: z.ZodDefault<z.ZodBoolean>;
|
|
1029
1044
|
alignment: z.ZodDefault<z.ZodEnum<{
|
|
1030
1045
|
right: "right";
|
|
1031
1046
|
left: "left";
|
|
@@ -1681,6 +1696,12 @@ export declare const EditorBlock: ({ type, data }: import('@usewaypoint/document
|
|
|
1681
1696
|
right: z.ZodNumber;
|
|
1682
1697
|
left: z.ZodNumber;
|
|
1683
1698
|
}, z.core.$strip>>>;
|
|
1699
|
+
margin: z.ZodNullable<z.ZodOptional<z.ZodObject<{
|
|
1700
|
+
top: z.ZodNumber;
|
|
1701
|
+
bottom: z.ZodNumber;
|
|
1702
|
+
right: z.ZodNumber;
|
|
1703
|
+
left: z.ZodNumber;
|
|
1704
|
+
}, z.core.$strip>>>;
|
|
1684
1705
|
textAlign: z.ZodNullable<z.ZodOptional<z.ZodEnum<{
|
|
1685
1706
|
right: "right";
|
|
1686
1707
|
left: "left";
|
|
@@ -2126,8 +2147,8 @@ export declare const EditorBlock: ({ type, data }: import('@usewaypoint/document
|
|
|
2126
2147
|
}, z.core.$strip>>>;
|
|
2127
2148
|
props: z.ZodNullable<z.ZodOptional<z.ZodObject<{
|
|
2128
2149
|
stepperType: z.ZodNullable<z.ZodOptional<z.ZodEnum<{
|
|
2129
|
-
both: "both";
|
|
2130
2150
|
numeric: "numeric";
|
|
2151
|
+
both: "both";
|
|
2131
2152
|
dots: "dots";
|
|
2132
2153
|
}>>>;
|
|
2133
2154
|
totalDots: z.ZodNullable<z.ZodOptional<z.ZodNumber>>;
|
|
@@ -2180,8 +2201,8 @@ export declare const EditorBlock: ({ type, data }: import('@usewaypoint/document
|
|
|
2180
2201
|
marker: z.ZodNullable<z.ZodOptional<z.ZodEnum<{
|
|
2181
2202
|
none: "none";
|
|
2182
2203
|
check: "check";
|
|
2183
|
-
square: "square";
|
|
2184
2204
|
circle: "circle";
|
|
2205
|
+
square: "square";
|
|
2185
2206
|
decimal: "decimal";
|
|
2186
2207
|
disc: "disc";
|
|
2187
2208
|
dash: "dash";
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { TEditorConfiguration } from './core';
|
|
2
2
|
import { TemplateFormField } from '../../../render-core/templateBaking';
|
|
3
|
-
export { bakeTemplateValues, substituteBlockText, applyVariables, buildRepeatRowIndex, getTemplateForms, getTextFieldsForType, } from '../../../render-core/templateBaking';
|
|
3
|
+
export { bakeTemplateValues, substituteBlockText, applyVariables, buildRepeatRowIndex, getTemplateForms, getTextFieldsForType, TEMPLATE_SCALAR_TYPES, } from '../../../render-core/templateBaking';
|
|
4
4
|
export type { TemplateScalarType, TemplateFormType, TemplateItemFieldDef, TemplateArrayRow, TemplateFormField, } from '../../../render-core/templateBaking';
|
|
5
|
-
|
|
6
|
-
export
|
|
5
|
+
export type { DateFormatPreset, TimeFormatPreset } from '../../../render-core/dateFormats';
|
|
6
|
+
export { DATE_FORMAT_PRESETS, DEFAULT_DATE_FORMAT, DEFAULT_TIME_FORMAT, formatDateValue, formatRelativeDate, formatTimeValue, TIME_FORMAT_PRESETS, } from '../../../render-core/dateFormats';
|
|
7
7
|
/**
|
|
8
8
|
* Apply `sourceHtml`'s formatting shell to `targetHtml`'s text. If the source
|
|
9
9
|
* has no formatting, returns the target unchanged (keeps the copy's text as-is).
|
|
@@ -9,6 +9,7 @@ export declare const FormsPropsSchema: z.ZodObject<{
|
|
|
9
9
|
height: z.ZodDefault<z.ZodString>;
|
|
10
10
|
heightTablet: z.ZodOptional<z.ZodString>;
|
|
11
11
|
heightMobile: z.ZodOptional<z.ZodString>;
|
|
12
|
+
autoHeight: z.ZodDefault<z.ZodBoolean>;
|
|
12
13
|
alignment: z.ZodDefault<z.ZodEnum<{
|
|
13
14
|
right: "right";
|
|
14
15
|
left: "left";
|
|
@@ -31,8 +31,14 @@ export declare const TabsBlockPropsSchema: z.ZodObject<{
|
|
|
31
31
|
left: z.ZodNumber;
|
|
32
32
|
}, z.core.$strip>>>;
|
|
33
33
|
tabActiveColor: z.ZodNullable<z.ZodOptional<z.ZodString>>;
|
|
34
|
+
tabActiveBgColor: z.ZodNullable<z.ZodOptional<z.ZodString>>;
|
|
35
|
+
tabInactiveTextColor: z.ZodNullable<z.ZodOptional<z.ZodString>>;
|
|
36
|
+
tabInactiveBgColor: z.ZodNullable<z.ZodOptional<z.ZodString>>;
|
|
37
|
+
tabInactiveBorderColor: z.ZodNullable<z.ZodOptional<z.ZodString>>;
|
|
38
|
+
tabInactiveBorderWidth: z.ZodNullable<z.ZodOptional<z.ZodNumber>>;
|
|
34
39
|
tabTextColor: z.ZodNullable<z.ZodOptional<z.ZodString>>;
|
|
35
40
|
tabBgColor: z.ZodNullable<z.ZodOptional<z.ZodString>>;
|
|
41
|
+
tabBorderRadius: z.ZodNullable<z.ZodOptional<z.ZodNumber>>;
|
|
36
42
|
tabGap: z.ZodNullable<z.ZodOptional<z.ZodNumber>>;
|
|
37
43
|
contentGap: z.ZodNullable<z.ZodOptional<z.ZodNumber>>;
|
|
38
44
|
navBorderColor: z.ZodNullable<z.ZodOptional<z.ZodString>>;
|
|
@@ -61,6 +67,14 @@ export declare const TabsBlockPropsSchema: z.ZodObject<{
|
|
|
61
67
|
showSelectedSection: "showSelectedSection";
|
|
62
68
|
scrollToSelectedSection: "scrollToSelectedSection";
|
|
63
69
|
}>>>;
|
|
70
|
+
tabsAlign: z.ZodNullable<z.ZodOptional<z.ZodEnum<{
|
|
71
|
+
right: "right";
|
|
72
|
+
left: "left";
|
|
73
|
+
center: "center";
|
|
74
|
+
}>>>;
|
|
75
|
+
dropdown: z.ZodNullable<z.ZodOptional<z.ZodBoolean>>;
|
|
76
|
+
dropdownTablet: z.ZodNullable<z.ZodOptional<z.ZodBoolean>>;
|
|
77
|
+
dropdownMobile: z.ZodNullable<z.ZodOptional<z.ZodBoolean>>;
|
|
64
78
|
activeTabIndex: z.ZodNullable<z.ZodOptional<z.ZodNumber>>;
|
|
65
79
|
stickyNav: z.ZodNullable<z.ZodOptional<z.ZodBoolean>>;
|
|
66
80
|
items: z.ZodNullable<z.ZodOptional<z.ZodArray<z.ZodObject<{
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { TReaderDocument } from '../Reader/core';
|
|
2
|
+
export declare const buildTemplateVarSubstitutionMarkup: () => string;
|
|
2
3
|
export declare const hasTabsBlock: (document: TReaderDocument) => boolean;
|
|
3
4
|
export declare const hasDemoBlock: (document: TReaderDocument) => boolean;
|
|
4
5
|
export declare const hasCarouselBlock: (document: TReaderDocument) => boolean;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
export declare const TEMPLATE_VAR_ATTR = "data-ahd-var";
|
|
2
|
+
export declare function markTemplateVarsInHtml(html: string): string;
|
|
3
|
+
export declare function markTemplateVarsInPlainText(value: string): string;
|
|
4
|
+
export declare function fillTemplateVarsInUrlString(url: string, search?: string): string;
|
|
5
|
+
export declare function fillTemplateVarSpans(root: ParentNode, search?: string): void;
|
|
6
|
+
export declare const TEMPLATE_DATE_ATTR = "data-ahd-date";
|
|
7
|
+
export declare const TEMPLATE_DATE_FORMAT_ATTR = "data-ahd-date-format";
|
|
8
|
+
/**
|
|
9
|
+
* Marker span for a relative date token. Carries the raw ISO in `data-ahd-date`
|
|
10
|
+
* and `data-ahd-date-format="relative"`. Its text content is the label computed
|
|
11
|
+
* NOW (so the editor canvas and any non-runtime render already read sensibly);
|
|
12
|
+
* the client / saved-HTML runtime overwrites it on view so "Today" stays
|
|
13
|
+
* accurate on later opens. `data-ahd-var` is kept so the orphan-token / pill
|
|
14
|
+
* machinery still recognises the span.
|
|
15
|
+
*/
|
|
16
|
+
export declare function markDateVar(name: string, isoValue: string): string;
|
|
17
|
+
/**
|
|
18
|
+
* "Today" | "Tomorrow" | "Yesterday" | weekday | "Mmm D" | "Mmm D, YYYY",
|
|
19
|
+
* compared against `now` in the host's local timezone. Standalone (no imports)
|
|
20
|
+
* so the saved-HTML runtime in pageScripts.ts can inline the same logic.
|
|
21
|
+
*
|
|
22
|
+
* NOTE: keep in sync with formatRelativeDate in src/utils/dateFormats.ts and the
|
|
23
|
+
* inlined copy in pageScripts.ts (buildTemplateVarSubstitutionMarkup).
|
|
24
|
+
*/
|
|
25
|
+
export declare function formatRelativeDateLabel(iso: string, now?: Date): string;
|
|
26
|
+
/**
|
|
27
|
+
* Client-side fill for relative-date markers within `root`. Runs alongside
|
|
28
|
+
* fillTemplateVarSpans in the Reader's layout effect. Idempotent — re-running
|
|
29
|
+
* re-reads the ISO from the attribute, so it's safe to call on every document
|
|
30
|
+
* change.
|
|
31
|
+
*/
|
|
32
|
+
export declare function fillDateVarSpans(root: ParentNode, now?: Date): void;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export interface InfoTooltipLink {
|
|
2
|
+
label: string;
|
|
3
|
+
href: string;
|
|
4
|
+
}
|
|
5
|
+
interface InfoTooltipProps {
|
|
6
|
+
text: string;
|
|
7
|
+
link?: InfoTooltipLink;
|
|
8
|
+
placement?: 'top' | 'bottom' | 'left' | 'right' | 'top-start' | 'top-end' | 'bottom-start' | 'bottom-end';
|
|
9
|
+
iconSize?: number;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Common help-icon tooltip, ported from ahd-fe's host-app copy (which lives
|
|
13
|
+
* outside the email-builder package, at `src/view/shared/common/InfoTooltip.tsx`,
|
|
14
|
+
* and resolves relative links against a host-only `PRODUCT_DOCS_BASE_URL`
|
|
15
|
+
* constant VE doesn't have). Callers here pass a full `https://` URL instead —
|
|
16
|
+
* see VariablesPanel's `DOCS_TEMPLATE_VARIABLES` for the same convention.
|
|
17
|
+
*/
|
|
18
|
+
declare const InfoTooltip: React.FC<InfoTooltipProps>;
|
|
19
|
+
export default InfoTooltip;
|