pagepilot-visual-editor 1.0.30 → 1.0.34
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/CHANGELOG.md +39 -0
- package/dist/blocks-internal/block-button/src/index.d.ts +6 -0
- package/dist/blocks-internal/block-heading/src/index.d.ts +2 -2
- package/dist/blocks-internal/block-list/src/index.d.ts +1 -1
- package/dist/editor-sample/App/InspectorDrawer/BehaviourPanel.d.ts +1 -1
- package/dist/editor-sample/App/InspectorDrawer/ConfigurationPanel/input-panels/MenuPickerSidebarPanel.d.ts +1 -1
- package/dist/editor-sample/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/VariableLinkHint.d.ts +34 -3
- package/dist/editor-sample/App/InspectorDrawer/LayersPanelStyles.d.ts +1 -1
- package/dist/editor-sample/App/InspectorDrawer/LayoutPanel/ChangeDesignFlow.d.ts +12 -0
- package/dist/editor-sample/App/InspectorDrawer/LayoutPanel/ChangeTemplateCompareDialog.d.ts +23 -0
- package/dist/editor-sample/App/InspectorDrawer/LayoutPanel/ChangeTemplateVariablesPane.d.ts +14 -0
- package/dist/editor-sample/App/InspectorDrawer/LayoutPanel/SectionsModal.d.ts +5 -0
- package/dist/editor-sample/App/InspectorDrawer/LayoutPanel/templateCategory.d.ts +1 -0
- package/dist/editor-sample/App/InspectorDrawer/LayoutPanel/templateHelpers.d.ts +22 -62
- package/dist/editor-sample/App/InspectorDrawer/VariablesPanel/AiGenerateButton.d.ts +5 -1
- package/dist/editor-sample/App/InspectorDrawer/VariablesPanel/EditVariableDialog.d.ts +9 -0
- package/dist/editor-sample/App/InspectorDrawer/VariablesPanel/ItemsArrayRepeatSection.d.ts +2 -3
- package/dist/editor-sample/App/InspectorDrawer/VariablesPanel/RowCard.d.ts +6 -2
- package/dist/editor-sample/App/InspectorDrawer/VariablesPanel/ScalarFieldRow.d.ts +3 -1
- package/dist/editor-sample/App/InspectorDrawer/VariablesPanel/aiFill.d.ts +42 -3
- package/dist/editor-sample/App/InspectorDrawer/VariablesPanel/useAutoRegisterTokenFields.d.ts +13 -0
- package/dist/editor-sample/App/InspectorDrawer/VariablesPanel/variableEditActions.d.ts +32 -0
- package/dist/editor-sample/App/InspectorDrawer/components/DateFieldControls.d.ts +2 -1
- package/dist/editor-sample/App/InspectorDrawer/components/DateTimeFieldControls.d.ts +2 -1
- package/dist/editor-sample/App/InspectorDrawer/components/MiniRichTextInput.d.ts +1 -0
- package/dist/editor-sample/App/InspectorDrawer/components/RichTextAiButton.d.ts +7 -0
- package/dist/editor-sample/App/InspectorDrawer/components/ScalarFieldInput.d.ts +2 -1
- package/dist/editor-sample/App/InspectorDrawer/components/TimeFieldControls.d.ts +2 -1
- package/dist/editor-sample/App/TemplatePanel/pageGuide/iframeSrcDoc.d.ts +3 -6
- package/dist/editor-sample/App/shared/PagePreviewFrame.d.ts +17 -2
- package/dist/editor-sample/App/shared/SectionsDropdown.d.ts +2 -2
- package/dist/editor-sample/App/shared/editor.styles.d.ts +2 -2
- package/dist/editor-sample/App/shared/pageSections.d.ts +7 -0
- package/dist/editor-sample/documents/blocks/EmailLayout/EmailLayoutPropsSchema.d.ts +4 -0
- package/dist/editor-sample/documents/blocks/MenuPicker/MenuPropsSchema.d.ts +8 -0
- package/dist/editor-sample/documents/blocks/MenuPicker/menuBlockLabel.d.ts +4 -0
- package/dist/editor-sample/documents/blocks/Table/TableImportDialog.styles.d.ts +6 -6
- package/dist/editor-sample/documents/blocks/helpers/EditorChildrenIds/AddBlockMenu/ScopePickerMenu.d.ts +3 -2
- package/dist/editor-sample/documents/blocks/helpers/EditorChildrenIds/AddBlockMenu/index.d.ts +2 -1
- package/dist/editor-sample/documents/blocks/helpers/InlineTextToolbar/popovers/TableResizeOverlay.d.ts +17 -0
- package/dist/editor-sample/documents/blocks/helpers/block-wrappers/saveAsTemplateUtils.d.ts +18 -6
- package/dist/editor-sample/documents/blocks/helpers/documentUtils.d.ts +28 -2
- package/dist/editor-sample/documents/blocks/helpers/responsiveStyle.d.ts +1 -1
- package/dist/editor-sample/documents/blocks/helpers/variableBinding.d.ts +0 -2
- package/dist/editor-sample/documents/editor/EditorContext.d.ts +10 -0
- package/dist/editor-sample/documents/editor/changeSectionDesign.d.ts +36 -0
- package/dist/editor-sample/documents/editor/core.d.ts +23 -2
- package/dist/editor-sample/documents/editor/sectionScope.d.ts +73 -0
- package/dist/editor-sample/documents/editor/templateVariables.d.ts +31 -14
- package/dist/email-builder-core/blocks/Container/ContainerReader.d.ts +1 -1
- package/dist/email-builder-core/blocks/EmailLayout/EmailLayoutPropsSchema.d.ts +4 -0
- package/dist/email-builder-core/blocks/FlexColumns/FlexColumnsPropsSchema.d.ts +3 -0
- package/dist/email-builder-core/blocks/FlexColumns/flexColumnsHelpers.d.ts +4 -2
- package/dist/email-builder-core/blocks/MenuPicker/MenuColumns.d.ts +15 -0
- package/dist/email-builder-core/blocks/MenuPicker/MenuPropsSchema.d.ts +16 -0
- package/dist/email-builder-core/renderers/themeTokens.d.ts +100 -4
- package/dist/host-stubs/modules/allSlugs/allSlugsActions.d.ts +1 -0
- package/dist/host-stubs/modules/allSlugs/allSlugsSelectors.d.ts +1 -0
- package/dist/host-stubs/modules/content/view/contentViewSelectors.d.ts +4 -0
- package/dist/host-stubs/modules/shared/axios/authAxios.d.ts +1 -0
- package/dist/host-stubs/modules/websiteV2/propagateFromPage.d.ts +4 -0
- package/dist/host-stubs/view/page/form/dialog/PageVariablesPreview.d.ts +5 -0
- package/dist/host-stubs/view/shared/styles/Table.styles.d.ts +1 -1
- package/dist/host-stubs/view/template/form/fields/renameFieldTokens.d.ts +26 -0
- package/dist/host-stubs/view/template/form/fields/types.d.ts +101 -0
- package/dist/{index-DVx38kGU.cjs → index-BksEeUhc.cjs} +340 -332
- package/dist/{index-B8pdGALF.js → index-Bqru3CFh.js} +59714 -56281
- package/dist/{index-C-KL2oQP.cjs → index-BszXspnA.cjs} +1 -1
- package/dist/{index-CStZQ7E0.js → index-CI-ydHOL.js} +1 -1
- package/dist/index.cjs +1 -1
- package/dist/index.js +1 -1
- package/dist/render.cjs +176 -168
- package/dist/render.js +4542 -4134
- package/dist/{xlsx-bYU68TCR.js → xlsx-BJAjl_m-.js} +1 -1
- package/dist/{xlsx-DUs4Mvqq.cjs → xlsx-D2eLxkb-.cjs} +1 -1
- package/package.json +1 -1
- package/dist/editor-sample/App/InspectorDrawer/VariablesPanel/AiFillAllDialog.d.ts +0 -21
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,45 @@ adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
9
|
### Changed
|
|
10
|
+
- Re-synced the vendored editor with ahd-fe `plugin-integration` (2aa96315d),
|
|
11
|
+
covering everything since the 67f2b933 sync. Upstream behaviour pulled in
|
|
12
|
+
includes:
|
|
13
|
+
- "Change design" in the block tune menu: swap a template section for
|
|
14
|
+
another design, carrying content over (`sectionScope`,
|
|
15
|
+
`changeSectionDesign`, `ChangeDesignFlow`, compare dialog + variables pane).
|
|
16
|
+
- "Edit variable" dialog: rename a `{{token}}` across the page or convert it
|
|
17
|
+
back to plain text, from the Variables tab, bound inputs or the canvas.
|
|
18
|
+
- MenuPicker: sub-menu text color / font size / font weight, header /
|
|
19
|
+
footer / navigation labels, page-link picker for site pages.
|
|
20
|
+
- Layers panel: section category in labels, copy/paste whole page buttons
|
|
21
|
+
disabled when there's nothing to copy/paste.
|
|
22
|
+
- Add-block keeps preassigned IDs, "Edit Content" in the add menu, Section
|
|
23
|
+
Library "View all" / "All sections", Video / Rating / Progress token fields.
|
|
24
|
+
- Inline text caret is restored correctly on undo/redo.
|
|
25
|
+
- Host stubs: `modules/content/view/contentViewSelectors` (no record),
|
|
26
|
+
trimmed `view/page/form/dialog/PageVariablesPreview`, full
|
|
27
|
+
`view/template/form/fields/types` + `renameFieldTokens`; i18n defaults
|
|
28
|
+
regenerated with the new keys.
|
|
29
|
+
- Re-synced the vendored editor with ahd-fe `master` (9661ba36b), on top of
|
|
30
|
+
the 82ec6ec4b sync below. Upstream behaviour pulled in includes:
|
|
31
|
+
- Host-application theme support (theme slots, surface lock, dark-host
|
|
32
|
+
`light-dark()` adaptation) across readers, the canvas and previews.
|
|
33
|
+
- Selecting a block no longer switches the sidebar tab; a variable-bound
|
|
34
|
+
block highlights its variable for the Variables tab.
|
|
35
|
+
- AI: per-field `RichTextAiButton` / `AiGenerateButton` (the AI Fill All
|
|
36
|
+
dialog is removed), and scalar `{{token}}` fields are auto-registered.
|
|
37
|
+
- Token editing inside inline text keeps `{{token}}` wrappers intact
|
|
38
|
+
(`splitEditedTokenHtml`, `htmlToPlainText`).
|
|
39
|
+
- Inline toolbar table resizing, MenuPicker items-array / columns plus a
|
|
40
|
+
page-link picker, FlexColumns column widths, container responsive
|
|
41
|
+
height, removing a repeat row deletes its subtree.
|
|
42
|
+
- Section Library defaults to "My templates" when the tenant has any.
|
|
43
|
+
- Debounced inputs and fewer re-renders in the sidebar and minimap.
|
|
44
|
+
- Host stubs: `modules/allSlugs` (empty list) and
|
|
45
|
+
`modules/websiteV2/propagateFromPage` (no-op), and `authAxios` accepts
|
|
46
|
+
`signal` so AI requests can be cancelled without axios.
|
|
47
|
+
- ahd-fe-only template-switch UI (Templates / SavedTemplates / compare
|
|
48
|
+
dialogs) is not vendored.
|
|
10
49
|
- Re-synced the vendored editor (`editor-sample/`, `email-builder-core/`,
|
|
11
50
|
`blocks-internal/`) with ahd-fe `master` (82ec6ec4b). 358 of 453 shared
|
|
12
51
|
files are now byte-identical. The rest differ only where the standalone
|
|
@@ -42,6 +42,12 @@ export declare const ButtonPropsSchema: z.ZodObject<{
|
|
|
42
42
|
normal: "normal";
|
|
43
43
|
bold: "bold";
|
|
44
44
|
}>>>;
|
|
45
|
+
textDecoration: z.ZodNullable<z.ZodOptional<z.ZodEnum<{
|
|
46
|
+
none: "none";
|
|
47
|
+
underline: "underline";
|
|
48
|
+
"line-through": "line-through";
|
|
49
|
+
"underline line-through": "underline line-through";
|
|
50
|
+
}>>>;
|
|
45
51
|
textAlign: z.ZodNullable<z.ZodOptional<z.ZodEnum<{
|
|
46
52
|
right: "right";
|
|
47
53
|
left: "left";
|
|
@@ -11,8 +11,8 @@ export declare const HeadingPropsSchema: z.ZodObject<{
|
|
|
11
11
|
h6: "h6";
|
|
12
12
|
}>>>;
|
|
13
13
|
linkType: z.ZodNullable<z.ZodOptional<z.ZodEnum<{
|
|
14
|
-
link: "link";
|
|
15
14
|
text: "text";
|
|
15
|
+
link: "link";
|
|
16
16
|
}>>>;
|
|
17
17
|
url: z.ZodNullable<z.ZodOptional<z.ZodString>>;
|
|
18
18
|
openInNewTab: z.ZodNullable<z.ZodOptional<z.ZodBoolean>>;
|
|
@@ -132,4 +132,4 @@ export declare const HeadingPropsDefaults: {
|
|
|
132
132
|
readonly openInNewTab: false;
|
|
133
133
|
};
|
|
134
134
|
export declare function Heading({ props, style }: HeadingProps): import("react/jsx-runtime").JSX.Element;
|
|
135
|
-
export declare function getFontSize(level: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6'): 32 | 24 | 19 |
|
|
135
|
+
export declare function getFontSize(level: 'h1' | 'h2' | 'h3' | 'h4' | 'h5' | 'h6'): 16 | 32 | 24 | 19 | 13 | 11;
|
|
@@ -53,8 +53,8 @@ export declare const ListPropsSchema: z.ZodObject<{
|
|
|
53
53
|
"upper-roman": "upper-roman";
|
|
54
54
|
}>>>;
|
|
55
55
|
numberSuffix: z.ZodPreprocess<z.ZodNullable<z.ZodOptional<z.ZodEnum<{
|
|
56
|
-
".": ".";
|
|
57
56
|
")": ")";
|
|
57
|
+
".": ".";
|
|
58
58
|
}>>>>;
|
|
59
59
|
startNumber: z.ZodNullable<z.ZodOptional<z.ZodNumber>>;
|
|
60
60
|
markerColor: z.ZodOptional<z.ZodNullable<z.ZodUnion<readonly [z.ZodString, z.ZodString, z.ZodLiteral<"transparent">]>>>;
|
|
@@ -5,7 +5,7 @@ export declare const gridContainerSx: {
|
|
|
5
5
|
py: string;
|
|
6
6
|
};
|
|
7
7
|
export declare const StyledElementIdContainer: import('@emotion/styled').StyledComponent<import('@mui/system').BoxOwnProps<import('@mui/material').Theme> & Omit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof import('@mui/system').BoxOwnProps<import('@mui/material').Theme>> & import('@mui/system').MUIStyledCommonProps<import('@mui/material').Theme>, {}, {}>;
|
|
8
|
-
export declare const StyledDivider: import('@emotion/styled').StyledComponent<import('@mui/material').DividerOwnProps & import('@mui/material/OverridableComponent').CommonProps & Omit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLHRElement>, HTMLHRElement>, "style" | "children" | "className" | "textAlign" | "orientation" | "
|
|
8
|
+
export declare const StyledDivider: import('@emotion/styled').StyledComponent<import('@mui/material').DividerOwnProps & import('@mui/material/OverridableComponent').CommonProps & Omit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLHRElement>, HTMLHRElement>, "light" | "style" | "children" | "className" | "textAlign" | "orientation" | "absolute" | "variant" | "classes" | "sx" | "flexItem"> & import('@mui/system').MUIStyledCommonProps<import('@mui/material').Theme>, {}, {}>;
|
|
9
9
|
export declare const StyledPositionGrid: any;
|
|
10
10
|
export declare const StyledTriggerGrid: any;
|
|
11
11
|
export declare const StyledAnimationGrid: any;
|
|
@@ -8,7 +8,7 @@ type Props = {
|
|
|
8
8
|
stickyNavTablet?: boolean | null;
|
|
9
9
|
stickyNavMobile?: boolean | null;
|
|
10
10
|
position: 'left' | 'center' | 'right';
|
|
11
|
-
orientation: 'horizontal' | 'vertical';
|
|
11
|
+
orientation: 'horizontal' | 'vertical' | 'columns';
|
|
12
12
|
menuItems?: any[];
|
|
13
13
|
layout?: 'menu-only' | 'logo-menu' | 'menu-cta' | 'logo-menu-cta';
|
|
14
14
|
startChildrenIds?: string[];
|
|
@@ -1,8 +1,39 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
/** Inline "Edit variable" link — rename the token(s) behind `value` or convert them to text. */
|
|
3
|
+
export declare function EditVariableLink({ value }: {
|
|
4
|
+
value: string;
|
|
5
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
6
|
+
/**
|
|
7
|
+
* Compact pencil (fits inside a locked input's end adornment) opening "Edit
|
|
8
|
+
* variable". Opts back into pointer events — VariableBoundClickArea switches
|
|
9
|
+
* them off on the input — and stops the click reaching that wrapper.
|
|
10
|
+
*/
|
|
11
|
+
export declare function EditVariableIcon({ value }: {
|
|
12
|
+
value: string;
|
|
13
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
/**
|
|
15
|
+
* Wraps a locked, variable-bound input so clicking anywhere on it jumps to the
|
|
16
|
+
* Variables tab (a disabled input swallows clicks itself, so its own pointer
|
|
17
|
+
* events are switched off and the wrapper catches them). Passes children
|
|
18
|
+
* through untouched when not bound.
|
|
19
|
+
*/
|
|
20
|
+
export declare function VariableBoundClickArea({ bound, value, fieldId, children, }: {
|
|
21
|
+
bound: boolean;
|
|
22
|
+
value: string;
|
|
23
|
+
/** Known owning field (e.g. a menu's items-array) when `value` has no token. */
|
|
24
|
+
fieldId?: string;
|
|
25
|
+
children: React.ReactNode;
|
|
26
|
+
}): import("react/jsx-runtime").JSX.Element;
|
|
1
27
|
/** Compact icon (fits inside an input) linking a locked, variable-bound value to its variable. */
|
|
2
28
|
export declare function VariableLinkIcon({ value }: {
|
|
3
29
|
value: string;
|
|
4
30
|
}): import("react/jsx-runtime").JSX.Element;
|
|
5
|
-
/**
|
|
6
|
-
|
|
7
|
-
|
|
31
|
+
/**
|
|
32
|
+
* Text hint shown under a locked, variable-bound input — jumps to the variable.
|
|
33
|
+
* Pass `fieldId` when the variable is known directly (e.g. a repeatable block's
|
|
34
|
+
* array field) instead of being derived from a `{{token}}` in `value`.
|
|
35
|
+
*/
|
|
36
|
+
export default function VariableLinkHint({ value, fieldId }: {
|
|
37
|
+
value?: string;
|
|
38
|
+
fieldId?: string;
|
|
8
39
|
}): import("react/jsx-runtime").JSX.Element;
|
|
@@ -4,7 +4,7 @@ export declare const PanelRoot: import('@emotion/styled').StyledComponent<import
|
|
|
4
4
|
export declare const PanelHeader: import('@emotion/styled').StyledComponent<import('@mui/system').BoxOwnProps<Theme> & Omit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof import('@mui/system').BoxOwnProps<Theme>> & import('@mui/system').MUIStyledCommonProps<Theme>, {}, {}>;
|
|
5
5
|
export declare const PanelContent: import('@emotion/styled').StyledComponent<import('@mui/system').BoxOwnProps<Theme> & Omit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof import('@mui/system').BoxOwnProps<Theme>> & import('@mui/system').MUIStyledCommonProps<Theme>, {}, {}>;
|
|
6
6
|
export declare const HeaderBox: import('@emotion/styled').StyledComponent<import('@mui/system').BoxOwnProps<Theme> & Omit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof import('@mui/system').BoxOwnProps<Theme>> & import('@mui/system').MUIStyledCommonProps<Theme>, {}, {}>;
|
|
7
|
-
export declare const HeaderTitle: import('@emotion/styled').StyledComponent<import('@mui/material').TypographyOwnProps & import('@mui/material/OverridableComponent').CommonProps & Omit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, "top" | "bottom" | "right" | "left" | "padding" | "margin" | "style" | "lineHeight" | "children" | "className" | "fontSize" | "fontFamily" | "fontWeight" | "fontStyle" | "textAlign" | "marginBottom" | "width" | "height" | "borderRadius" | "borderColor" | "gap" | "p" | "color" | "flex" | "display" | "position" | "
|
|
7
|
+
export declare const HeaderTitle: import('@emotion/styled').StyledComponent<import('@mui/material').TypographyOwnProps & import('@mui/material/OverridableComponent').CommonProps & Omit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, "border" | "top" | "bottom" | "right" | "left" | "padding" | "margin" | "style" | "lineHeight" | "children" | "className" | "fontSize" | "fontFamily" | "fontWeight" | "fontStyle" | "textAlign" | "marginBottom" | "width" | "height" | "borderRadius" | "borderColor" | "gap" | "p" | "color" | "flex" | "display" | "position" | "paddingBottom" | "align" | "bgcolor" | "borderTop" | "px" | "boxShadow" | "overflow" | "variant" | "paddingX" | "paddingY" | "marginX" | "marginY" | "maxWidth" | "maxHeight" | "classes" | "sx" | "letterSpacing" | "order" | "visibility" | "zIndex" | "alignContent" | "alignItems" | "alignSelf" | "boxSizing" | "columnGap" | "flexBasis" | "flexDirection" | "flexGrow" | "flexShrink" | "flexWrap" | "gridAutoColumns" | "gridAutoFlow" | "gridAutoRows" | "gridTemplateAreas" | "gridTemplateColumns" | "gridTemplateRows" | "justifyContent" | "justifyItems" | "justifySelf" | "marginBlockEnd" | "marginBlockStart" | "marginInlineEnd" | "marginInlineStart" | "marginLeft" | "marginRight" | "marginTop" | "minHeight" | "minWidth" | "paddingBlockEnd" | "paddingBlockStart" | "paddingInlineEnd" | "paddingInlineStart" | "paddingLeft" | "paddingRight" | "paddingTop" | "rowGap" | "textOverflow" | "textTransform" | "whiteSpace" | "borderBottom" | "borderLeft" | "borderRight" | "gridArea" | "gridColumn" | "gridRow" | "marginBlock" | "marginInline" | "paddingBlock" | "paddingInline" | "m" | "mt" | "mr" | "mb" | "ml" | "mx" | "my" | "pt" | "pr" | "pb" | "pl" | "py" | "typography" | "displayPrint" | "gutterBottom" | "noWrap" | "paragraph" | "variantMapping"> & import('@mui/system').MUIStyledCommonProps<Theme>, {}, {}>;
|
|
8
8
|
export declare const ClipboardBar: import('@emotion/styled').StyledComponent<import('@mui/system').BoxOwnProps<Theme> & Omit<import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLDivElement>, HTMLDivElement>, keyof import('@mui/system').BoxOwnProps<Theme>> & import('@mui/system').MUIStyledCommonProps<Theme>, {}, {}>;
|
|
9
9
|
export declare const ActionSpan: import('@emotion/styled').StyledComponent<import('@mui/system').MUIStyledCommonProps<Theme>, import('react').DetailedHTMLProps<import('react').HTMLAttributes<HTMLSpanElement>, HTMLSpanElement>, {}>;
|
|
10
10
|
export declare const ActionButton: import('@emotion/styled').StyledComponent<import('@mui/material').ButtonOwnProps & Omit<import('@mui/material').ButtonBaseOwnProps, "classes"> & import('@mui/material/OverridableComponent').CommonProps & Omit<import('react').DetailedHTMLProps<import('react').ButtonHTMLAttributes<HTMLButtonElement>, HTMLButtonElement>, "style" | "children" | "className" | "size" | "color" | "disabled" | "action" | "href" | "tabIndex" | "fullWidth" | "variant" | "classes" | "sx" | "loading" | "centerRipple" | "disableRipple" | "disableTouchRipple" | "focusRipple" | "focusVisibleClassName" | "LinkComponent" | "onFocusVisible" | "TouchRippleProps" | "touchRippleRef" | "disableFocusRipple" | "loadingIndicator" | "disableElevation" | "endIcon" | "loadingPosition" | "startIcon"> & import('@mui/system').MUIStyledCommonProps<Theme>, {}, {}>;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
/**
|
|
3
|
+
* "Change design" for one section: pick a block template (the library opens
|
|
4
|
+
* on the section's category), review the section before/after, then swap it
|
|
5
|
+
* in place keeping the section's content. See changeSectionDesign.
|
|
6
|
+
*/
|
|
7
|
+
declare const ChangeDesignFlow: React.FC<{
|
|
8
|
+
blockId: string;
|
|
9
|
+
open: boolean;
|
|
10
|
+
onClose: () => void;
|
|
11
|
+
}>;
|
|
12
|
+
export default ChangeDesignFlow;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
import { FieldPatches } from './templateHelpers';
|
|
3
|
+
interface ChangeTemplateCompareDialogProps {
|
|
4
|
+
open: boolean;
|
|
5
|
+
templateId?: string;
|
|
6
|
+
before: any;
|
|
7
|
+
after: any;
|
|
8
|
+
loading?: boolean;
|
|
9
|
+
onConfirm: (fieldPatches?: FieldPatches) => void;
|
|
10
|
+
onClose: () => void;
|
|
11
|
+
title?: string;
|
|
12
|
+
description?: string;
|
|
13
|
+
confirmLabel?: string;
|
|
14
|
+
notes?: string[];
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* "Change template" confirm: the current page on the left, the page as it
|
|
18
|
+
* will look after the change on the right — either rendered, or as each
|
|
19
|
+
* side's variables. The right side's variable values can be edited; the
|
|
20
|
+
* edits ride along with the confirm.
|
|
21
|
+
*/
|
|
22
|
+
declare const ChangeTemplateCompareDialog: React.FC<ChangeTemplateCompareDialogProps>;
|
|
23
|
+
export default ChangeTemplateCompareDialog;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { default as React } from 'react';
|
|
2
|
+
import { TemplateFormField } from '../../../documents/editor/templateVariables';
|
|
3
|
+
/**
|
|
4
|
+
* A page's variables (`root.data.formFields`), grouped the way the editor's
|
|
5
|
+
* Variables tab groups them. The "Change template" compare shows one per
|
|
6
|
+
* side, so the user sees which values the new template keeps; with
|
|
7
|
+
* `onPatch` the values can be edited before the change is applied, without
|
|
8
|
+
* it the same fields render disabled.
|
|
9
|
+
*/
|
|
10
|
+
declare const ChangeTemplateVariablesPane: React.FC<{
|
|
11
|
+
document: any;
|
|
12
|
+
onPatch?: (fieldId: string, patch: Partial<TemplateFormField>) => void;
|
|
13
|
+
}>;
|
|
14
|
+
export default ChangeTemplateVariablesPane;
|
|
@@ -2,6 +2,11 @@ interface SectionsModalProps {
|
|
|
2
2
|
open: boolean;
|
|
3
3
|
onClose: () => void;
|
|
4
4
|
onInsert?: (block: any, preassignedId?: string) => void;
|
|
5
|
+
/** Category tab to open on (falls back to "Overall" when it has no templates). */
|
|
6
|
+
initialCategory?: string;
|
|
7
|
+
/** Pick mode ("Change design"): hand the fetched template back instead of inserting it. */
|
|
8
|
+
onPick?: (record: any) => void;
|
|
9
|
+
title?: string;
|
|
5
10
|
}
|
|
6
11
|
declare const SectionsModal: React.FC<SectionsModalProps>;
|
|
7
12
|
export default SectionsModal;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function humanizeCategory(category: string): string;
|
|
@@ -79,75 +79,35 @@ export declare function mergeTemplateFormFields(templateRecord: any, idMapping?:
|
|
|
79
79
|
[oldId: string]: string;
|
|
80
80
|
}): void;
|
|
81
81
|
/**
|
|
82
|
-
*
|
|
83
|
-
*
|
|
84
|
-
*
|
|
85
|
-
*
|
|
86
|
-
* Two dedupe rules — different because these fields mean different things:
|
|
87
|
-
*
|
|
88
|
-
* - Scalar / plain-array fields are dedupe'd by `id`. A page-level `{{name}}`
|
|
89
|
-
* is a single slot; inserting Template B that also references `{{name}}`
|
|
90
|
-
* should reuse Template A's (possibly user-filled) value, not stomp it.
|
|
91
|
-
*
|
|
92
|
-
* - Container-repeat fields (`type === 'array' && sourceBlockId`) are dedupe'd
|
|
93
|
-
* by `sourceBlockId`. Each such field is scoped to ONE container instance
|
|
94
|
-
* (a specific Grid / FlexColumns / Carousel), and its `sourceBlockId` gets
|
|
95
|
-
* remapped per insertion. Inserting a testimonial section twice produces
|
|
96
|
-
* two independent grid instances; BOTH need their own field or the second
|
|
97
|
-
* grid's `{{this.subField}}` tokens can't find their row in
|
|
98
|
-
* `buildRepeatRowIndex` (which keys off sourceBlockId/rowIds) and render as
|
|
99
|
-
* bare pills. Same-token-id but different sourceBlockId → different field.
|
|
100
|
-
*
|
|
101
|
-
* When a new container-repeat field's id collides with an already-registered
|
|
102
|
-
* field (either a scalar sharing that name, or the same section inserted
|
|
103
|
-
* before), we suffix the id with its sourceBlockId so `buildContext` doesn't
|
|
104
|
-
* silently overwrite the earlier field. Sub-field tokens (`{{this.X}}`) are
|
|
105
|
-
* resolved via the row index by block id, so they don't care about the outer
|
|
106
|
-
* field's id.
|
|
82
|
+
* "Choose design" with a multi-section page template: replaces the page's
|
|
83
|
+
* sections with the template's (each carrying its own prefilled variables),
|
|
84
|
+
* loads the first internal section onto the canvas and returns its index so
|
|
85
|
+
* the caller can make it active.
|
|
107
86
|
*/
|
|
87
|
+
export declare function applyPageSectionsTemplate(configuration: any, templateRecord: any, record: any, onUpdateRecord: (record: any) => void, resetDocument: (doc: any) => void): number;
|
|
108
88
|
export declare function appendTemplateFormFields(templateRecord: any, idMapping?: {
|
|
109
89
|
[oldId: string]: string;
|
|
110
90
|
}): void;
|
|
111
91
|
export declare const applyFullDocumentTemplate: (configuration: any, document: any, resetDocument: (doc: any) => void) => void;
|
|
112
92
|
/**
|
|
113
|
-
* "Change template"
|
|
114
|
-
*
|
|
115
|
-
*
|
|
116
|
-
*
|
|
117
|
-
* Root overlay: root-level style keys copied via `PURE_STYLE_KEYS` (the wide
|
|
118
|
-
* list — "Change template" is the confirm-gated aggressive restyle).
|
|
119
|
-
* Per-block overlay: `overlayBlockStylesFromTemplate`.
|
|
120
|
-
*
|
|
121
|
-
* Confirmation copy the user sees before this fires:
|
|
122
|
-
* "You can change the template, but please note that only the common
|
|
123
|
-
* fields will be retained; any unused data will be removed."
|
|
124
|
-
* "Common fields" is the form-fields half — see
|
|
125
|
-
* `mergeTemplateFormFieldsPreservingValues`.
|
|
93
|
+
* Build the document "Change template" would produce, without touching the
|
|
94
|
+
* editor. `applyChangeTemplate` commits it; the template preview dialog
|
|
95
|
+
* renders it beside the current page.
|
|
126
96
|
*/
|
|
127
|
-
export declare const
|
|
97
|
+
export declare const buildChangeTemplateDocument: (configuration: any, document: any, templateRecord?: any) => {
|
|
98
|
+
doc: any;
|
|
99
|
+
fields: any[];
|
|
100
|
+
current: any;
|
|
101
|
+
} | null;
|
|
102
|
+
export type FieldPatches = Record<string, Record<string, any>>;
|
|
128
103
|
/**
|
|
129
|
-
*
|
|
130
|
-
*
|
|
131
|
-
*
|
|
132
|
-
*
|
|
133
|
-
*
|
|
134
|
-
* - Every existing form field the user has is retained VERBATIM (id,
|
|
135
|
-
* type, value, everything). Tokens keep resolving to the values the
|
|
136
|
-
* user typed.
|
|
137
|
-
* - Any field the incoming template defines that the user doesn't
|
|
138
|
-
* already have is appended with its prefilled default. New template
|
|
139
|
-
* structure that references brand-new tokens still lights up.
|
|
140
|
-
* - Nothing is deleted. "Unused data will be removed" from the confirm
|
|
141
|
-
* copy cannot apply here: removing a field whose token still lives
|
|
142
|
-
* on the canvas would break the very content we just promised not
|
|
143
|
-
* to touch.
|
|
144
|
-
*
|
|
145
|
-
* Container-repeat fields (`type === 'array'` with `sourceBlockId`)
|
|
146
|
-
* follow the same "already there? keep it" rule; the underlying
|
|
147
|
-
* container blocks weren't remapped by `applyChangeTemplate`, so
|
|
148
|
-
* `sourceBlockId` and `rowIds` stay valid.
|
|
104
|
+
* Apply field edits (field id → patch) made in the "Change template" compare
|
|
105
|
+
* to a document's `root.data.formFields`. An items-array field's rows are
|
|
106
|
+
* mirrored onto its block's items too — those blocks render from their own
|
|
107
|
+
* props, not from the field.
|
|
149
108
|
*/
|
|
150
|
-
export declare
|
|
109
|
+
export declare const applyFieldPatches: (doc: any, patches: FieldPatches) => any;
|
|
110
|
+
export declare const applyChangeTemplate: (configuration: any, document: any, resetDocument: (doc: any) => void, templateRecord?: any, fieldPatches?: FieldPatches) => void;
|
|
151
111
|
/**
|
|
152
112
|
* "Use this Styles" for non-tour modules (pages, FAQ, app-banner, tooltip,
|
|
153
113
|
* template). Applies the template's styling — the root canvas AND every
|
|
@@ -161,8 +121,8 @@ export declare function mergeTemplateFormFieldsPreservingValues(templateRecord:
|
|
|
161
121
|
* so the canvas geometry, background, CTA-existence and block list stay the
|
|
162
122
|
* user's — the page never resizes and no root CTA button appears/moves.
|
|
163
123
|
*
|
|
164
|
-
* Per-block: `overlayBlockStylesFromTemplate` —
|
|
165
|
-
* overlay
|
|
124
|
+
* Per-block: `overlayBlockStylesFromTemplate` — donor-matching + prop
|
|
125
|
+
* overlay; nothing is added, removed or re-keyed.
|
|
166
126
|
*
|
|
167
127
|
* History: a much older version of this function matched blocks by type,
|
|
168
128
|
* replaced each with the template's, and DELETED every unmatched block —
|
|
@@ -3,6 +3,10 @@ type AiGenerateButtonProps = {
|
|
|
3
3
|
/** The fields eligible for AI fill — id/name/type. */
|
|
4
4
|
fields: AiTargetField[];
|
|
5
5
|
onGenerated: (values: AiValue[]) => void;
|
|
6
|
+
/** Overrides the default text-button trigger (label, look) and popover side. */
|
|
7
|
+
label?: string;
|
|
8
|
+
variant?: 'text' | 'outlined';
|
|
9
|
+
popoverBelow?: boolean;
|
|
6
10
|
};
|
|
7
11
|
/**
|
|
8
12
|
* Footer-level "Generate with AI" button for the variable group dialog. One
|
|
@@ -10,5 +14,5 @@ type AiGenerateButtonProps = {
|
|
|
10
14
|
* fields are sent as `context.formFields` and the AI returns the same array
|
|
11
15
|
* back with `value` populated, at `generation.data.response.data.formFields`.
|
|
12
16
|
*/
|
|
13
|
-
export default function AiGenerateButton({ fields, onGenerated }: AiGenerateButtonProps): import("react/jsx-runtime").JSX.Element;
|
|
17
|
+
export default function AiGenerateButton({ fields, onGenerated, label, variant, popoverBelow, }: AiGenerateButtonProps): import("react/jsx-runtime").JSX.Element;
|
|
14
18
|
export {};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* "Edit variable" — rename a declared `{{token}}` / `{{this.token}}` (every
|
|
3
|
+
* use on the page is rewritten, the value is kept) or turn it back into plain
|
|
4
|
+
* text. Opened via `openEditVariable` from the Variables tab, a bound input in
|
|
5
|
+
* the block sidebar, or the canvas tune menu — the last two pass EVERY
|
|
6
|
+
* variable they use (a Button's label + link), so one "Convert to text" frees
|
|
7
|
+
* the whole block.
|
|
8
|
+
*/
|
|
9
|
+
export default function EditVariableDialog(): import("react/jsx-runtime").JSX.Element;
|
|
@@ -5,9 +5,8 @@
|
|
|
5
5
|
* `TemplateFormField` bound to this block's own items via `itemsBlockId`,
|
|
6
6
|
* seeded from whatever items already exist.
|
|
7
7
|
*
|
|
8
|
-
*
|
|
9
|
-
*
|
|
10
|
-
* block-agnostic helpers for the next items-array block.
|
|
8
|
+
* Opt-in list: `ITEMS_ARRAY_BLOCK_TYPES` in documentUtils (today MenuPicker,
|
|
9
|
+
* custom-menu mode).
|
|
11
10
|
*/
|
|
12
11
|
export default function ItemsArrayRepeatSection({ blockId }: {
|
|
13
12
|
blockId: string;
|
|
@@ -9,15 +9,19 @@ type RowCardProps = {
|
|
|
9
9
|
onRemove: null | (() => void);
|
|
10
10
|
updateCell: (rowIndex: number, key: string, value: string) => void;
|
|
11
11
|
headerLabel: string;
|
|
12
|
+
/** Read-only: the row still expands, its inputs are disabled. */
|
|
13
|
+
disabled?: boolean;
|
|
14
|
+
/** Shows an "Edit variable" icon per sub-field (`{{this.subId}}` rename/unlink/delete). */
|
|
15
|
+
onEditSub?: (subId: string) => void;
|
|
12
16
|
};
|
|
13
17
|
/**
|
|
14
18
|
* The bare list of sub-field inputs for one row — no card chrome. Used inside
|
|
15
19
|
* RowCard (behind its collapse) and directly by the Template Modifier, which
|
|
16
20
|
* doesn't need a second collapsible layer around its single template row.
|
|
17
21
|
*/
|
|
18
|
-
export declare function RowFields({ rowIndex, row, itemFields, updateCell, sx, }: Pick<RowCardProps, 'rowIndex' | 'row' | 'itemFields' | 'updateCell'> & {
|
|
22
|
+
export declare function RowFields({ rowIndex, row, itemFields, updateCell, sx, disabled, onEditSub, }: Pick<RowCardProps, 'rowIndex' | 'row' | 'itemFields' | 'updateCell' | 'disabled' | 'onEditSub'> & {
|
|
19
23
|
sx?: object;
|
|
20
24
|
}): import("react/jsx-runtime").JSX.Element;
|
|
21
25
|
/** One collapsible copy/template card in the Variables array editor. */
|
|
22
|
-
export default function RowCard({ rowIndex, row, itemFields, isExpanded, onToggle, onRemove, updateCell, headerLabel, }: RowCardProps): import("react/jsx-runtime").JSX.Element;
|
|
26
|
+
export default function RowCard({ rowIndex, row, itemFields, isExpanded, onToggle, onRemove, updateCell, headerLabel, disabled, onEditSub, }: RowCardProps): import("react/jsx-runtime").JSX.Element;
|
|
23
27
|
export {};
|
|
@@ -5,11 +5,13 @@ type Props = {
|
|
|
5
5
|
onPatch: (patch: Partial<TemplateFormField>) => void;
|
|
6
6
|
/** Optional control rendered at the right of the label row (e.g. "locate in canvas"). */
|
|
7
7
|
headerAction?: ReactNode;
|
|
8
|
+
/** Read-only: shows the value and its controls, all disabled. */
|
|
9
|
+
disabled?: boolean;
|
|
8
10
|
};
|
|
9
11
|
/**
|
|
10
12
|
* One scalar variable row: name, a type selector (Text / Number / Date / Time /
|
|
11
13
|
* Image), the value input, and — for `date` / `time` — the format + timezone
|
|
12
14
|
* controls.
|
|
13
15
|
*/
|
|
14
|
-
export default function ScalarFieldRow({ field, onPatch, headerAction }: Props): import("react/jsx-runtime").JSX.Element;
|
|
16
|
+
export default function ScalarFieldRow({ field, onPatch, headerAction, disabled }: Props): import("react/jsx-runtime").JSX.Element;
|
|
15
17
|
export {};
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { TemplateFormField, TemplateScalarType } from '../../../documents/editor/templateVariables';
|
|
1
|
+
import { TemplateArrayRow, TemplateFormField, TemplateScalarType } from '../../../documents/editor/templateVariables';
|
|
2
2
|
export type VisibleForm = {
|
|
3
3
|
field: TemplateFormField;
|
|
4
4
|
index: number;
|
|
@@ -28,9 +28,48 @@ export declare function buildAiFields(visibleForms: VisibleForm[]): {
|
|
|
28
28
|
};
|
|
29
29
|
/** Writes generated values back onto scalar fields and array rows. */
|
|
30
30
|
export declare function applyAiValues(values: AiValue[], visibleForms: VisibleForm[], scalarIndexById: Map<string, number>, updateFields: UpdateFields): void;
|
|
31
|
+
/**
|
|
32
|
+
* Template variables (root.data.formFields) serialized for an AI request's
|
|
33
|
+
* `context.formFields`, so text generation can see field names + current values.
|
|
34
|
+
* Same per-field shape `requestAiFill` sends; array fields also carry their
|
|
35
|
+
* sub-field defs and current rows.
|
|
36
|
+
*/
|
|
37
|
+
export declare function toAiFormFieldsContext(forms: TemplateFormField[]): ({
|
|
38
|
+
itemFields: {
|
|
39
|
+
id: string;
|
|
40
|
+
name: string;
|
|
41
|
+
type: TemplateScalarType;
|
|
42
|
+
}[];
|
|
43
|
+
value: TemplateArrayRow[];
|
|
44
|
+
id: string;
|
|
45
|
+
name: string;
|
|
46
|
+
type: import('../../../documents/editor/templateVariables').TemplateFormType;
|
|
47
|
+
defaultValue: string;
|
|
48
|
+
} | {
|
|
49
|
+
value: string;
|
|
50
|
+
id: string;
|
|
51
|
+
name: string;
|
|
52
|
+
type: import('../../../documents/editor/templateVariables').TemplateFormType;
|
|
53
|
+
defaultValue: string;
|
|
54
|
+
})[];
|
|
55
|
+
/**
|
|
56
|
+
* Only the fields whose `{{id}}` (or `{{#each id}}`) token appears in `text` —
|
|
57
|
+
* i.e. the variables a single block actually uses. Same token pattern as
|
|
58
|
+
* templateVariables' collectUsedTokenIds.
|
|
59
|
+
*/
|
|
60
|
+
export declare function formFieldsUsedInText(text: string, forms: TemplateFormField[]): TemplateFormField[];
|
|
61
|
+
/**
|
|
62
|
+
* AI-fill only the variables a block's text uses, writing the generated values
|
|
63
|
+
* onto root.data.formFields — the block text itself (with its {{tokens}}) is
|
|
64
|
+
* left untouched. Returns null when the text uses no variables (caller falls
|
|
65
|
+
* back to generating the text), false when the request failed (already
|
|
66
|
+
* toasted), true once values are written.
|
|
67
|
+
*/
|
|
68
|
+
export declare function fillTextFormFieldsWithAi(prompt: string, text: string, extraContext?: Record<string, unknown>): Promise<boolean | null>;
|
|
69
|
+
export declare function requestRichTextAi(prompt: string, content: string, fieldId?: string): Promise<string | null>;
|
|
31
70
|
/**
|
|
32
71
|
* One prompt → values for every field. Returns null (after toasting) when the
|
|
33
|
-
* request fails or yields nothing usable.
|
|
72
|
+
* request fails or yields nothing usable; null silently when `signal` aborts it.
|
|
34
73
|
*/
|
|
35
|
-
export declare function requestAiFill(prompt: string, fields: AiTargetField[]): Promise<AiValue[] | null>;
|
|
74
|
+
export declare function requestAiFill(prompt: string, fields: AiTargetField[], signal?: AbortSignal, extraContext?: Record<string, unknown>): Promise<AiValue[] | null>;
|
|
36
75
|
export {};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A `{{token}}` typed anywhere on the page becomes a variable right away — not
|
|
3
|
+
* only once the page is saved as a template. Appends a field for every scalar
|
|
4
|
+
* token with no matching form field. Once added it's no longer "missing", so
|
|
5
|
+
* this can't loop. Mounted from the always-present inspector drawer so the
|
|
6
|
+
* variable already exists when the Variables tab is opened.
|
|
7
|
+
*
|
|
8
|
+
* A token edited away (present on the previous scan, gone now) drops its
|
|
9
|
+
* field. When exactly one token vanished and one new token appeared it's a
|
|
10
|
+
* rename (`{{old}}` → `{{new}}`): the field is re-keyed in place so its value
|
|
11
|
+
* and settings carry over instead of leaving both variables behind.
|
|
12
|
+
*/
|
|
13
|
+
export default function useAutoRegisterTokenFields(): void;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A variable the "Edit variable" dialog acts on: a top-level `{{id}}` field,
|
|
3
|
+
* or a `{{this.subId}}` sub-field of a container-repeat field.
|
|
4
|
+
*/
|
|
5
|
+
export type VariableEditTarget = {
|
|
6
|
+
fieldId: string;
|
|
7
|
+
subId?: string;
|
|
8
|
+
};
|
|
9
|
+
export type VariableIdError = 'invalid' | 'duplicate';
|
|
10
|
+
/** Opens the dialog for one variable, or every variable a block / input uses. */
|
|
11
|
+
export declare const openEditVariable: (targets: VariableEditTarget | VariableEditTarget[]) => void;
|
|
12
|
+
export declare const closeEditVariable: () => void;
|
|
13
|
+
export declare const useEditVariableState: () => {
|
|
14
|
+
open: boolean;
|
|
15
|
+
targets: VariableEditTarget[];
|
|
16
|
+
openId: number;
|
|
17
|
+
};
|
|
18
|
+
export declare const VARIABLE_ID_RE: RegExp;
|
|
19
|
+
/** All variables a block's own token-bearing props use (a Button: label + link). */
|
|
20
|
+
export declare const getBlockVariableTargets: (blockId: string) => VariableEditTarget[];
|
|
21
|
+
/** All variables behind one bound input value. */
|
|
22
|
+
export declare const getValueVariableTargets: (value: string, blockId: string | null) => VariableEditTarget[];
|
|
23
|
+
/**
|
|
24
|
+
* Per-target reason `nextIds[i]` can't be used, or null when it's fine (or
|
|
25
|
+
* unchanged). Keys must be unique against the page's other variables and
|
|
26
|
+
* against each other within the dialog.
|
|
27
|
+
*/
|
|
28
|
+
export declare function validateVariableIds(targets: VariableEditTarget[], nextIds: string[]): (VariableIdError | null)[];
|
|
29
|
+
/** Renames every changed key, as ONE undo step. */
|
|
30
|
+
export declare function renameVariables(targets: VariableEditTarget[], nextIds: string[]): void;
|
|
31
|
+
/** Turns every target back into plain text, as ONE undo step. */
|
|
32
|
+
export declare function unlinkVariables(targets: VariableEditTarget[]): void;
|
|
@@ -2,11 +2,12 @@ import { TemplateFormField } from '../../../documents/editor/templateVariables';
|
|
|
2
2
|
type Props = {
|
|
3
3
|
field: TemplateFormField;
|
|
4
4
|
onPatch: (patch: Partial<TemplateFormField>) => void;
|
|
5
|
+
disabled?: boolean;
|
|
5
6
|
};
|
|
6
7
|
/**
|
|
7
8
|
* Format + timezone controls for a `date` scalar variable, shown under the
|
|
8
9
|
* datetime input. `relative` recomputes in the reader's browser at view time;
|
|
9
10
|
* every other preset is a fixed string baked in `dateTz` on publish.
|
|
10
11
|
*/
|
|
11
|
-
export default function DateFieldControls({ field, onPatch }: Props): import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
export default function DateFieldControls({ field, onPatch, disabled }: Props): import("react/jsx-runtime").JSX.Element;
|
|
12
13
|
export {};
|
|
@@ -2,6 +2,7 @@ import { TemplateFormField } from '../../../documents/editor/templateVariables';
|
|
|
2
2
|
type Props = {
|
|
3
3
|
field: TemplateFormField;
|
|
4
4
|
onPatch: (patch: Partial<TemplateFormField>) => void;
|
|
5
|
+
disabled?: boolean;
|
|
5
6
|
};
|
|
6
7
|
/**
|
|
7
8
|
* Controls for a `datetime` scalar variable: one ISO value, exposed as two
|
|
@@ -10,5 +11,5 @@ type Props = {
|
|
|
10
11
|
* may be `relative` (recomputed in the reader's browser); the time part is
|
|
11
12
|
* always a fixed string.
|
|
12
13
|
*/
|
|
13
|
-
export default function DateTimeFieldControls({ field, onPatch }: Props): import("react/jsx-runtime").JSX.Element;
|
|
14
|
+
export default function DateTimeFieldControls({ field, onPatch, disabled }: Props): import("react/jsx-runtime").JSX.Element;
|
|
14
15
|
export {};
|
|
@@ -6,6 +6,7 @@ type Props = {
|
|
|
6
6
|
onChange: (value: string) => void;
|
|
7
7
|
onPaperBackground?: boolean;
|
|
8
8
|
fieldId?: string;
|
|
9
|
+
disabled?: boolean;
|
|
9
10
|
};
|
|
10
|
-
declare const ScalarFieldInput: ({ type, label, value, onChange, onPaperBackground, fieldId }: Props) => import("react/jsx-runtime").JSX.Element;
|
|
11
|
+
declare const ScalarFieldInput: ({ type, label, value, onChange, onPaperBackground, fieldId, disabled, }: Props) => import("react/jsx-runtime").JSX.Element;
|
|
11
12
|
export default ScalarFieldInput;
|
|
@@ -2,11 +2,12 @@ import { TemplateFormField } from '../../../documents/editor/templateVariables';
|
|
|
2
2
|
type Props = {
|
|
3
3
|
field: TemplateFormField;
|
|
4
4
|
onPatch: (patch: Partial<TemplateFormField>) => void;
|
|
5
|
+
disabled?: boolean;
|
|
5
6
|
};
|
|
6
7
|
/**
|
|
7
8
|
* Format + timezone controls for a `time` scalar variable, shown under the
|
|
8
9
|
* datetime input. `time` always bakes to a fixed string (24h or AM/PM) rendered
|
|
9
10
|
* in the chosen timezone — there's no view-time / relative mode.
|
|
10
11
|
*/
|
|
11
|
-
export default function TimeFieldControls({ field, onPatch }: Props): import("react/jsx-runtime").JSX.Element;
|
|
12
|
+
export default function TimeFieldControls({ field, onPatch, disabled }: Props): import("react/jsx-runtime").JSX.Element;
|
|
12
13
|
export {};
|