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.
Files changed (77) hide show
  1. package/CHANGELOG.md +39 -0
  2. package/dist/blocks-internal/block-button/src/index.d.ts +6 -0
  3. package/dist/blocks-internal/block-heading/src/index.d.ts +2 -2
  4. package/dist/blocks-internal/block-list/src/index.d.ts +1 -1
  5. package/dist/editor-sample/App/InspectorDrawer/BehaviourPanel.d.ts +1 -1
  6. package/dist/editor-sample/App/InspectorDrawer/ConfigurationPanel/input-panels/MenuPickerSidebarPanel.d.ts +1 -1
  7. package/dist/editor-sample/App/InspectorDrawer/ConfigurationPanel/input-panels/helpers/inputs/VariableLinkHint.d.ts +34 -3
  8. package/dist/editor-sample/App/InspectorDrawer/LayersPanelStyles.d.ts +1 -1
  9. package/dist/editor-sample/App/InspectorDrawer/LayoutPanel/ChangeDesignFlow.d.ts +12 -0
  10. package/dist/editor-sample/App/InspectorDrawer/LayoutPanel/ChangeTemplateCompareDialog.d.ts +23 -0
  11. package/dist/editor-sample/App/InspectorDrawer/LayoutPanel/ChangeTemplateVariablesPane.d.ts +14 -0
  12. package/dist/editor-sample/App/InspectorDrawer/LayoutPanel/SectionsModal.d.ts +5 -0
  13. package/dist/editor-sample/App/InspectorDrawer/LayoutPanel/templateCategory.d.ts +1 -0
  14. package/dist/editor-sample/App/InspectorDrawer/LayoutPanel/templateHelpers.d.ts +22 -62
  15. package/dist/editor-sample/App/InspectorDrawer/VariablesPanel/AiGenerateButton.d.ts +5 -1
  16. package/dist/editor-sample/App/InspectorDrawer/VariablesPanel/EditVariableDialog.d.ts +9 -0
  17. package/dist/editor-sample/App/InspectorDrawer/VariablesPanel/ItemsArrayRepeatSection.d.ts +2 -3
  18. package/dist/editor-sample/App/InspectorDrawer/VariablesPanel/RowCard.d.ts +6 -2
  19. package/dist/editor-sample/App/InspectorDrawer/VariablesPanel/ScalarFieldRow.d.ts +3 -1
  20. package/dist/editor-sample/App/InspectorDrawer/VariablesPanel/aiFill.d.ts +42 -3
  21. package/dist/editor-sample/App/InspectorDrawer/VariablesPanel/useAutoRegisterTokenFields.d.ts +13 -0
  22. package/dist/editor-sample/App/InspectorDrawer/VariablesPanel/variableEditActions.d.ts +32 -0
  23. package/dist/editor-sample/App/InspectorDrawer/components/DateFieldControls.d.ts +2 -1
  24. package/dist/editor-sample/App/InspectorDrawer/components/DateTimeFieldControls.d.ts +2 -1
  25. package/dist/editor-sample/App/InspectorDrawer/components/MiniRichTextInput.d.ts +1 -0
  26. package/dist/editor-sample/App/InspectorDrawer/components/RichTextAiButton.d.ts +7 -0
  27. package/dist/editor-sample/App/InspectorDrawer/components/ScalarFieldInput.d.ts +2 -1
  28. package/dist/editor-sample/App/InspectorDrawer/components/TimeFieldControls.d.ts +2 -1
  29. package/dist/editor-sample/App/TemplatePanel/pageGuide/iframeSrcDoc.d.ts +3 -6
  30. package/dist/editor-sample/App/shared/PagePreviewFrame.d.ts +17 -2
  31. package/dist/editor-sample/App/shared/SectionsDropdown.d.ts +2 -2
  32. package/dist/editor-sample/App/shared/editor.styles.d.ts +2 -2
  33. package/dist/editor-sample/App/shared/pageSections.d.ts +7 -0
  34. package/dist/editor-sample/documents/blocks/EmailLayout/EmailLayoutPropsSchema.d.ts +4 -0
  35. package/dist/editor-sample/documents/blocks/MenuPicker/MenuPropsSchema.d.ts +8 -0
  36. package/dist/editor-sample/documents/blocks/MenuPicker/menuBlockLabel.d.ts +4 -0
  37. package/dist/editor-sample/documents/blocks/Table/TableImportDialog.styles.d.ts +6 -6
  38. package/dist/editor-sample/documents/blocks/helpers/EditorChildrenIds/AddBlockMenu/ScopePickerMenu.d.ts +3 -2
  39. package/dist/editor-sample/documents/blocks/helpers/EditorChildrenIds/AddBlockMenu/index.d.ts +2 -1
  40. package/dist/editor-sample/documents/blocks/helpers/InlineTextToolbar/popovers/TableResizeOverlay.d.ts +17 -0
  41. package/dist/editor-sample/documents/blocks/helpers/block-wrappers/saveAsTemplateUtils.d.ts +18 -6
  42. package/dist/editor-sample/documents/blocks/helpers/documentUtils.d.ts +28 -2
  43. package/dist/editor-sample/documents/blocks/helpers/responsiveStyle.d.ts +1 -1
  44. package/dist/editor-sample/documents/blocks/helpers/variableBinding.d.ts +0 -2
  45. package/dist/editor-sample/documents/editor/EditorContext.d.ts +10 -0
  46. package/dist/editor-sample/documents/editor/changeSectionDesign.d.ts +36 -0
  47. package/dist/editor-sample/documents/editor/core.d.ts +23 -2
  48. package/dist/editor-sample/documents/editor/sectionScope.d.ts +73 -0
  49. package/dist/editor-sample/documents/editor/templateVariables.d.ts +31 -14
  50. package/dist/email-builder-core/blocks/Container/ContainerReader.d.ts +1 -1
  51. package/dist/email-builder-core/blocks/EmailLayout/EmailLayoutPropsSchema.d.ts +4 -0
  52. package/dist/email-builder-core/blocks/FlexColumns/FlexColumnsPropsSchema.d.ts +3 -0
  53. package/dist/email-builder-core/blocks/FlexColumns/flexColumnsHelpers.d.ts +4 -2
  54. package/dist/email-builder-core/blocks/MenuPicker/MenuColumns.d.ts +15 -0
  55. package/dist/email-builder-core/blocks/MenuPicker/MenuPropsSchema.d.ts +16 -0
  56. package/dist/email-builder-core/renderers/themeTokens.d.ts +100 -4
  57. package/dist/host-stubs/modules/allSlugs/allSlugsActions.d.ts +1 -0
  58. package/dist/host-stubs/modules/allSlugs/allSlugsSelectors.d.ts +1 -0
  59. package/dist/host-stubs/modules/content/view/contentViewSelectors.d.ts +4 -0
  60. package/dist/host-stubs/modules/shared/axios/authAxios.d.ts +1 -0
  61. package/dist/host-stubs/modules/websiteV2/propagateFromPage.d.ts +4 -0
  62. package/dist/host-stubs/view/page/form/dialog/PageVariablesPreview.d.ts +5 -0
  63. package/dist/host-stubs/view/shared/styles/Table.styles.d.ts +1 -1
  64. package/dist/host-stubs/view/template/form/fields/renameFieldTokens.d.ts +26 -0
  65. package/dist/host-stubs/view/template/form/fields/types.d.ts +101 -0
  66. package/dist/{index-DVx38kGU.cjs → index-BksEeUhc.cjs} +340 -332
  67. package/dist/{index-B8pdGALF.js → index-Bqru3CFh.js} +59714 -56281
  68. package/dist/{index-C-KL2oQP.cjs → index-BszXspnA.cjs} +1 -1
  69. package/dist/{index-CStZQ7E0.js → index-CI-ydHOL.js} +1 -1
  70. package/dist/index.cjs +1 -1
  71. package/dist/index.js +1 -1
  72. package/dist/render.cjs +176 -168
  73. package/dist/render.js +4542 -4134
  74. package/dist/{xlsx-bYU68TCR.js → xlsx-BJAjl_m-.js} +1 -1
  75. package/dist/{xlsx-DUs4Mvqq.cjs → xlsx-D2eLxkb-.cjs} +1 -1
  76. package/package.json +1 -1
  77. 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 | 16 | 13 | 11;
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" | "light" | "absolute" | "variant" | "classes" | "sx" | "flexItem"> & 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>, "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
- /** Text hint shown under a locked, variable-bound input — jumps to the variable. */
6
- export default function VariableLinkHint({ value }: {
7
- value: string;
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" | "border" | "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>, {}, {}>;
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
- * Merge incoming formFields into the existing ones. Used by "Add this section"
83
- * so adding Template B that shares {{name}} with Template A keeps the typed
84
- * value and only appends B's new fields. Then jumps to Variables.
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": apply the incoming template's styling — both the root
114
- * canvas AND every individual block (menu, header, buttons, images, etc.) —
115
- * while leaving user content and structure exactly as they were.
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 applyChangeTemplate: (configuration: any, document: any, resetDocument: (doc: any) => void) => void;
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
- * Sidebar-side counterpart to `applyChangeTemplate`. The user's blocks
130
- * stay on the canvas, so any `{{token}}` they already contain must keep
131
- * a matching form-field entry — otherwise the token renders as an unbound
132
- * "Add X" pill. This helper therefore takes the union approach:
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 function mergeTemplateFormFieldsPreservingValues(templateRecord: any): void;
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` — same donor-matching + prop
165
- * overlay "Change template" uses; nothing is added, removed or re-keyed.
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
- * No block type currently opts in (see `ITEMS_ARRAY_BLOCK_TYPES` in
9
- * documentUtils), so this renders for nothing today — kept alongside the
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 {};
@@ -3,6 +3,7 @@ type Props = {
3
3
  value: string;
4
4
  onChange: (value: string) => void;
5
5
  fieldId?: string;
6
+ disabled?: boolean;
6
7
  };
7
8
  declare const MiniRichTextInput: React.FC<Props>;
8
9
  export default MiniRichTextInput;
@@ -0,0 +1,7 @@
1
+ type Props = {
2
+ content: string;
3
+ fieldId?: string;
4
+ onGenerated: (html: string) => void;
5
+ };
6
+ export default function RichTextAiButton({ content, fieldId, onGenerated }: Props): import("react/jsx-runtime").JSX.Element;
7
+ 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 {};