efficient-web-builder 1.0.0 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +47 -0
- package/README.md +2 -1
- package/dist/components/AddBlockRow.d.ts +1 -7
- package/dist/components/AddBlockRow.js +1 -1
- package/dist/components/AddChildRow.d.ts +1 -6
- package/dist/components/AddChildRow.js +1 -1
- package/dist/components/AddSidePanel.d.ts +2 -39
- package/dist/components/AddSidePanel.js +1 -1
- package/dist/components/BlockGapField.js +1 -1
- package/dist/components/BlogPostSource.js +1 -1
- package/dist/components/Breadcrumb.js +1 -1
- package/dist/components/Btn.js +1 -1
- package/dist/components/CardShadowField.js +1 -1
- package/dist/components/CategoryBar.js +1 -1
- package/dist/components/ChartSection.js +1 -1
- package/dist/components/ChatSettingsPanel.js +1 -1
- package/dist/components/ClearColoursDialog.js +1 -1
- package/dist/components/ContactLocations.js +5 -5
- package/dist/components/CornersField.d.ts +0 -1
- package/dist/components/CornersField.js +1 -1
- package/dist/components/DocBody.js +1 -1
- package/dist/components/DuplicateToPageMenu.js +1 -1
- package/dist/components/EditorScreenMount.d.ts +1 -0
- package/dist/components/EditorScreenMount.js +1 -0
- package/dist/components/EditorStoreProvider.d.ts +1 -0
- package/dist/components/EditorStoreProvider.js +1 -0
- package/dist/components/FeaturedCover.js +1 -1
- package/dist/components/FieldGlyph.js +1 -1
- package/dist/components/Footprint.js +1 -1
- package/dist/components/HeadingAudit.js +1 -1
- package/dist/components/HeroImageField.js +1 -1
- package/dist/components/HeroSection.d.ts +2 -6
- package/dist/components/HeroSection.js +4 -4
- package/dist/components/HoverEffectField.js +1 -1
- package/dist/components/ImageBlock.js +1 -1
- package/dist/components/ImageFocusRow.js +1 -1
- package/dist/components/KeepHint.d.ts +5 -0
- package/dist/components/KeepHint.js +1 -0
- package/dist/components/LocationsGroupedField.js +1 -1
- package/dist/components/LongRead.js +1 -1
- package/dist/components/MediaSidePanel.d.ts +1 -6
- package/dist/components/MediaSidePanel.js +1 -1
- package/dist/components/MediaUploadField.js +1 -1
- package/dist/components/MockupSection.js +1 -1
- package/dist/components/MultiSelectField.d.ts +4 -1
- package/dist/components/MultiSelectField.js +1 -1
- package/dist/components/NodeContextMenu.d.ts +2 -96
- package/dist/components/NodeContextMenu.js +1 -1
- package/dist/components/PageEditGuardNotices.d.ts +1 -1
- package/dist/components/PageEditGuardNotices.js +1 -1
- package/dist/components/PagesPanel.js +1 -1
- package/dist/components/PanelToggleIcon.d.ts +1 -3
- package/dist/components/PanelToggleIcon.js +1 -1
- package/dist/components/PartResetDot.js +1 -1
- package/dist/components/PartSettingsPanel.d.ts +5 -0
- package/dist/components/PartSettingsPanel.js +1 -1
- package/dist/components/PhotographyField.js +1 -1
- package/dist/components/PostCard.js +1 -1
- package/dist/components/PreviewDeviceContext.d.ts +2 -4
- package/dist/components/PreviewDeviceContext.js +1 -1
- package/dist/components/PreviewPartsContext.d.ts +1 -3
- package/dist/components/PreviewPartsContext.js +1 -1
- package/dist/components/ProcessSteps.js +1 -1
- package/dist/components/RMark.js +1 -1
- package/dist/components/Reel.js +1 -1
- package/dist/components/SearchSelectField.d.ts +3 -1
- package/dist/components/SearchSelectField.js +1 -1
- package/dist/components/SectionEditor.d.ts +2 -5
- package/dist/components/SectionEditor.js +1 -1
- package/dist/components/SectionEditorShell.d.ts +1 -1
- package/dist/components/SectionEditorShell.js +1 -1
- package/dist/components/SectionHeader.js +1 -1
- package/dist/components/SectionThemePicker.d.ts +3 -1
- package/dist/components/SectionThemePicker.js +1 -1
- package/dist/components/SectionThumbnail.js +1 -1
- package/dist/components/ShadowColourField.js +1 -1
- package/dist/components/SidePanelHead.d.ts +1 -23
- package/dist/components/SidePanelHead.js +1 -1
- package/dist/components/SideSpaceField.d.ts +0 -1
- package/dist/components/SideSpaceField.js +1 -1
- package/dist/components/SiteEditorProvider.d.ts +3 -10
- package/dist/components/SiteEditorProvider.js +1 -1
- package/dist/components/SiteWidthField.d.ts +0 -1
- package/dist/components/SiteWidthField.js +1 -1
- package/dist/components/SlotChildActionsContext.d.ts +2 -13
- package/dist/components/SlotChildActionsContext.js +1 -1
- package/dist/components/SlotChildRows.js +1 -1
- package/dist/components/SocialLinksPanel.js +1 -1
- package/dist/components/SourceStatus.js +1 -1
- package/dist/components/Split.js +1 -1
- package/dist/components/StandaloneSectionEditor.d.ts +1 -0
- package/dist/components/StandaloneSectionEditor.js +1 -1
- package/dist/components/StorefrontDocumentContext.d.ts +2 -67
- package/dist/components/StorefrontDocumentContext.js +1 -1
- package/dist/components/StorefrontEditor.d.ts +1 -0
- package/dist/components/StorefrontEditor.js +1 -1
- package/dist/components/StorefrontEditorChrome.d.ts +1 -1
- package/dist/components/StorefrontEditorChrome.js +1 -1
- package/dist/components/StorefrontLinkField.d.ts +9 -0
- package/dist/components/StorefrontLinkField.js +1 -1
- package/dist/components/StylesPanel.js +1 -1
- package/dist/components/Testimonials.js +1 -1
- package/dist/components/TextStylesField.js +1 -1
- package/dist/components/ThemeCard.js +1 -1
- package/dist/components/ThemeColourField.js +1 -1
- package/dist/components/ThemeField.js +1 -1
- package/dist/components/TickerSettingsPanel.js +1 -1
- package/dist/components/Timeline.js +1 -1
- package/dist/components/TimelineTrack.js +1 -1
- package/dist/components/TitleWithButtons.js +1 -1
- package/dist/components/UiIcon.d.ts +2 -10
- package/dist/components/UiIcon.js +1 -1
- package/dist/components/WebsiteScreenParts.d.ts +2 -0
- package/dist/components/WebsiteScreenParts.js +1 -0
- package/dist/components/WebsiteSettingsPanel.js +1 -1
- package/dist/components/WidthFollowField.js +1 -1
- package/dist/components/goldPhrases.js +1 -1
- package/dist/components/panel-widths.d.ts +2 -12
- package/dist/components/panel-widths.js +1 -1
- package/dist/components/storefront-editor.css +147 -1195
- package/dist/components/useFooterFocus.d.ts +2 -0
- package/dist/components/useFooterFocus.js +1 -0
- package/dist/components/useLocationsTree.d.ts +6 -0
- package/dist/components/useLocationsTree.js +1 -0
- package/dist/components/usePartBridge.d.ts +1 -9
- package/dist/components/usePartBridge.js +1 -1
- package/dist/components/usePinnedChromeSeed.d.ts +2 -0
- package/dist/components/usePinnedChromeSeed.js +1 -0
- package/dist/components/useSocialSettings.js +1 -1
- package/dist/components/useStorefrontBlogPosts.js +1 -1
- package/dist/lib/client-only.d.ts +1 -0
- package/dist/lib/client-only.js +1 -0
- package/dist/lib/content/contact.js +3 -3
- package/dist/lib/content/subscribe.js +1 -1
- package/dist/lib/content/view-tiers.d.ts +2 -6
- package/dist/lib/content/view-tiers.js +1 -1
- package/dist/lib/editor-admin-bridge.d.ts +2 -29
- package/dist/lib/editor-admin-bridge.js +1 -1
- package/dist/lib/editor-backend-error.d.ts +2 -0
- package/dist/lib/editor-backend-error.js +1 -0
- package/dist/lib/editor-blocks.d.ts +2 -2
- package/dist/lib/editor-chrome.d.ts +2 -52
- package/dist/lib/editor-chrome.js +1 -1
- package/dist/lib/editor-document-adapter.d.ts +3 -51
- package/dist/lib/editor-document-adapter.js +1 -1
- package/dist/lib/editor-document-addressing.d.ts +2 -0
- package/dist/lib/editor-document-addressing.js +1 -0
- package/dist/lib/editor-document-contract.d.ts +1 -0
- package/dist/lib/editor-document-contract.js +0 -0
- package/dist/lib/editor-document-hooks.d.ts +1 -15
- package/dist/lib/editor-document-switch.d.ts +2 -0
- package/dist/lib/editor-document-switch.js +1 -0
- package/dist/lib/editor-failure.d.ts +1 -4
- package/dist/lib/editor-failure.js +1 -1
- package/dist/lib/editor-host-inbound.d.ts +1 -1
- package/dist/lib/editor-host-inbound.js +1 -1
- package/dist/lib/editor-host.d.ts +2 -135
- package/dist/lib/editor-host.js +1 -1
- package/dist/lib/editor-key-scope.d.ts +1 -3
- package/dist/lib/editor-key-scope.js +1 -1
- package/dist/lib/editor-load-error.d.ts +1 -4
- package/dist/lib/editor-load-error.js +1 -1
- package/dist/lib/editor-media-panel.d.ts +2 -23
- package/dist/lib/editor-media-panel.js +1 -1
- package/dist/lib/editor-media-picker.d.ts +2 -12
- package/dist/lib/editor-media-picker.js +1 -1
- package/dist/lib/editor-page-lock.d.ts +1 -1
- package/dist/lib/editor-page-lock.js +1 -1
- package/dist/lib/editor-screen.d.ts +2 -0
- package/dist/lib/editor-screen.js +1 -0
- package/dist/lib/editor-section-templates.d.ts +1 -2
- package/dist/lib/editor-section-templates.js +1 -1
- package/dist/lib/editor-session-context.d.ts +1 -7
- package/dist/lib/editor-session-context.js +1 -1
- package/dist/lib/editor-session.d.ts +2 -45
- package/dist/lib/editor-session.js +1 -1
- package/dist/lib/editor-site-slug.js +1 -1
- package/dist/lib/editor-theme.d.ts +1 -1
- package/dist/lib/editor-theme.js +1 -1
- package/dist/lib/hero-arrows.d.ts +1 -1
- package/dist/lib/links/link-filters.d.ts +1 -0
- package/dist/lib/links/link-filters.js +0 -0
- package/dist/lib/links/link-picker-setup.d.ts +29 -0
- package/dist/lib/links/link-picker-setup.js +1 -0
- package/dist/lib/puck/ColourControl.d.ts +4 -1
- package/dist/lib/puck/ColourControl.js +1 -1
- package/dist/lib/puck/MarkupToolbar.js +1 -1
- package/dist/lib/puck/add-palette.d.ts +3 -9
- package/dist/lib/puck/add-palette.js +1 -1
- package/dist/lib/puck/add-target-types.d.ts +1 -0
- package/dist/lib/puck/add-target-types.js +0 -0
- package/dist/lib/puck/add-target.d.ts +2 -9
- package/dist/lib/puck/block-choice.d.ts +2 -0
- package/dist/lib/puck/block-choice.js +1 -0
- package/dist/lib/puck/block-offer.js +1 -1
- package/dist/lib/puck/block-types-in.d.ts +1 -1
- package/dist/lib/puck/block-types-in.js +1 -1
- package/dist/lib/puck/blocks/general/CategoryBar/fields.js +1 -1
- package/dist/lib/puck/blocks/general/Chart/fields.js +1 -1
- package/dist/lib/puck/blocks/general/FAQ/render.js +1 -1
- package/dist/lib/puck/blocks/general/FeaturedCover/render.js +1 -1
- package/dist/lib/puck/blocks/general/Footprint/fields.js +1 -1
- package/dist/lib/puck/blocks/general/IntroBleed/render.js +1 -1
- package/dist/lib/puck/blocks/general/LogoBlock/fields.js +1 -1
- package/dist/lib/puck/blocks/general/LongRead/render.js +1 -1
- package/dist/lib/puck/blocks/general/Masthead/render.js +1 -1
- package/dist/lib/puck/blocks/general/Mockup/fields.js +1 -1
- package/dist/lib/puck/blocks/general/OrderSummary/render.js +1 -1
- package/dist/lib/puck/blocks/general/ParagraphsA/render.js +1 -1
- package/dist/lib/puck/blocks/general/PostCard/render.js +1 -1
- package/dist/lib/puck/blocks/general/ProcessSteps/render.js +1 -1
- package/dist/lib/puck/blocks/general/Series/render.js +1 -1
- package/dist/lib/puck/blocks/general/Split/render.js +1 -1
- package/dist/lib/puck/blocks/general/Testimonials/fields.js +1 -1
- package/dist/lib/puck/blocks/general/Testimonials/render.js +1 -1
- package/dist/lib/puck/blocks/general/TimelineTrack/render.js +1 -1
- package/dist/lib/puck/blocks/general/index.d.ts +2 -2
- package/dist/lib/puck/blocks/placeholders.js +1 -1
- package/dist/lib/puck/content-tree.d.ts +2 -43
- package/dist/lib/puck/content-tree.js +1 -1
- package/dist/lib/puck/controls.d.ts +11 -22
- package/dist/lib/puck/controls.js +1 -1
- package/dist/lib/puck/device-fields.d.ts +2 -24
- package/dist/lib/puck/device-fields.js +1 -1
- package/dist/lib/puck/field-buckets.d.ts +2 -0
- package/dist/lib/puck/field-buckets.js +1 -0
- package/dist/lib/puck/field-groups.d.ts +3 -3
- package/dist/lib/puck/field-groups.js +1 -1
- package/dist/lib/puck/field-markers.d.ts +2 -16
- package/dist/lib/puck/field-markers.js +1 -1
- package/dist/lib/puck/footer-block-row-name.d.ts +4 -0
- package/dist/lib/puck/footer-block-row-name.js +1 -0
- package/dist/lib/puck/footer-blocks.d.ts +2 -10
- package/dist/lib/puck/footer-blocks.js +1 -1
- package/dist/lib/puck/geocode-resolve.js +1 -1
- package/dist/lib/puck/hidable.d.ts +2 -9
- package/dist/lib/puck/hidable.js +1 -1
- package/dist/lib/puck/locations-tree.js +2 -2
- package/dist/lib/puck/neutralization-contracts.js +1 -1
- package/dist/lib/puck/palette-sections.d.ts +2 -0
- package/dist/lib/puck/palette-sections.js +1 -0
- package/dist/lib/puck/panel-fields.d.ts +2 -12
- package/dist/lib/puck/panel-fields.js +1 -1
- package/dist/lib/puck/panel-no-control-mark.d.ts +2 -7
- package/dist/lib/puck/panel-no-control-mark.js +1 -1
- package/dist/lib/puck/part-id.d.ts +1 -0
- package/dist/lib/puck/part-id.js +1 -0
- package/dist/lib/puck/part-rows.js +1 -1
- package/dist/lib/puck/pinned-seed-gate.d.ts +2 -12
- package/dist/lib/puck/pinned-seed-gate.js +1 -1
- package/dist/lib/puck/preview-click.d.ts +1 -2
- package/dist/lib/puck/preview-click.js +1 -1
- package/dist/lib/puck/preview-dom.d.ts +1 -6
- package/dist/lib/puck/preview-dom.js +1 -1
- package/dist/lib/puck/preview-events.d.ts +2 -0
- package/dist/lib/puck/preview-events.js +1 -0
- package/dist/lib/puck/preview-selection-context.d.ts +2 -19
- package/dist/lib/puck/preview-selection-context.js +1 -1
- package/dist/lib/puck/section-catalog.js +1 -1
- package/dist/lib/puck/section-descriptions.js +1 -1
- package/dist/lib/puck/section-doc.d.ts +1 -5
- package/dist/lib/puck/section-doc.js +1 -1
- package/dist/lib/puck/section-groups.d.ts +1 -1
- package/dist/lib/puck/slot-child-name.d.ts +2 -8
- package/dist/lib/puck/slot-child-name.js +1 -1
- package/dist/lib/puck/slot-heal.d.ts +1 -2
- package/dist/lib/puck/slot-heal.js +1 -1
- package/dist/lib/puck/slot-section-spec.d.ts +1 -0
- package/dist/lib/puck/slot-section-spec.js +0 -0
- package/dist/lib/puck/slot-specs.d.ts +2 -13
- package/dist/lib/puck/style-clipboard.d.ts +1 -19
- package/dist/lib/puck/style-clipboard.js +1 -1
- package/dist/lib/puck/text-control-kinds.d.ts +2 -13
- package/dist/lib/puck/text-control-kinds.js +1 -1
- package/dist/lib/puck/text-parts.d.ts +2 -5
- package/dist/lib/puck/text-parts.js +1 -1
- package/dist/lib/puck/tree-reveal.d.ts +1 -11
- package/dist/lib/puck/tree-reveal.js +1 -1
- package/dist/lib/puck/use-section-ops.d.ts +2 -25
- package/dist/lib/puck/use-section-ops.js +1 -1
- package/dist/lib/reel.d.ts +1 -1
- package/dist/lib/section-template-types.d.ts +1 -21
- package/dist/lib/sections/divider-style.js +1 -1
- package/dist/lib/sections/new-section-node.d.ts +2 -0
- package/dist/lib/sections/new-section-node.js +1 -0
- package/dist/lib/sections/product-card-style.js +1 -1
- package/dist/lib/sections/ticker-style.js +1 -1
- package/dist/lib/source-rules/accent-token-name.d.ts +20 -0
- package/dist/lib/source-rules/accent-token-name.js +4 -0
- package/dist/lib/source-rules/button-corners.d.ts +13 -0
- package/dist/lib/source-rules/button-corners.js +2 -0
- package/dist/lib/source-rules/editor-chrome-note.d.ts +16 -0
- package/dist/lib/source-rules/editor-chrome-note.js +13 -0
- package/dist/lib/source-rules/editor-context-menu.d.ts +5 -0
- package/dist/lib/source-rules/editor-context-menu.js +4 -0
- package/dist/lib/source-rules/editor-puck-drag-off.d.ts +8 -0
- package/dist/lib/source-rules/editor-puck-drag-off.js +4 -0
- package/dist/lib/source-rules/efficient-easel-version.d.ts +9 -0
- package/dist/lib/source-rules/efficient-easel-version.js +2 -0
- package/dist/lib/source-rules/every-button-follows-the-button-colour.d.ts +12 -0
- package/dist/lib/source-rules/every-button-follows-the-button-colour.js +7 -0
- package/dist/lib/source-rules/flat-theme-palette.d.ts +10 -0
- package/dist/lib/source-rules/flat-theme-palette.js +8 -0
- package/dist/lib/source-rules/full-width-means-full.d.ts +8 -0
- package/dist/lib/source-rules/full-width-means-full.js +2 -0
- package/dist/lib/source-rules/heading-ceiling-sweep.d.ts +11 -0
- package/dist/lib/source-rules/heading-ceiling-sweep.js +8 -0
- package/dist/lib/source-rules/label-hints.d.ts +7 -0
- package/dist/lib/source-rules/label-hints.js +5 -0
- package/dist/lib/source-rules/label-vocabulary.d.ts +14 -0
- package/dist/lib/source-rules/label-vocabulary.js +5 -0
- package/dist/lib/source-rules/mirrored-rows-agree.d.ts +19 -0
- package/dist/lib/source-rules/mirrored-rows-agree.js +10 -0
- package/dist/lib/source-rules/no-comment-in-jsx.d.ts +9 -0
- package/dist/lib/source-rules/no-comment-in-jsx.js +7 -0
- package/dist/lib/source-rules/no-glyph-rows.d.ts +15 -0
- package/dist/lib/source-rules/no-glyph-rows.js +4 -0
- package/dist/lib/source-rules/one-colour-control.d.ts +7 -0
- package/dist/lib/source-rules/one-colour-control.js +2 -0
- package/dist/lib/source-rules/one-dropdown.d.ts +10 -0
- package/dist/lib/source-rules/one-dropdown.js +4 -0
- package/dist/lib/source-rules/one-editable-list.d.ts +16 -0
- package/dist/lib/source-rules/one-editable-list.js +6 -0
- package/dist/lib/source-rules/one-editor-list.d.ts +7 -0
- package/dist/lib/source-rules/one-editor-list.js +3 -0
- package/dist/lib/source-rules/one-right-click.d.ts +10 -0
- package/dist/lib/source-rules/one-right-click.js +2 -0
- package/dist/lib/source-rules/one-switch.d.ts +9 -0
- package/dist/lib/source-rules/one-switch.js +7 -0
- package/dist/lib/source-rules/one-up-level-link.d.ts +16 -0
- package/dist/lib/source-rules/one-up-level-link.js +18 -0
- package/dist/lib/source-rules/panel-colour-tokens.d.ts +48 -0
- package/dist/lib/source-rules/panel-colour-tokens.js +20 -0
- package/dist/lib/source-rules/panel-no-divider-lines.d.ts +14 -0
- package/dist/lib/source-rules/panel-no-divider-lines.js +10 -0
- package/dist/lib/source-rules/panel-one-arrow.d.ts +21 -0
- package/dist/lib/source-rules/panel-one-arrow.js +1 -0
- package/dist/lib/source-rules/panel-one-hover.d.ts +8 -0
- package/dist/lib/source-rules/panel-one-hover.js +2 -0
- package/dist/lib/source-rules/panel-rows-use-the-shared-row.d.ts +23 -0
- package/dist/lib/source-rules/panel-rows-use-the-shared-row.js +22 -0
- package/dist/lib/source-rules/part-slider-fills-row.d.ts +11 -0
- package/dist/lib/source-rules/part-slider-fills-row.js +29 -0
- package/dist/lib/source-rules/part-style-naming.d.ts +10 -0
- package/dist/lib/source-rules/part-style-naming.js +2 -0
- package/dist/lib/source-rules/puck-document-surfaces.d.ts +16 -0
- package/dist/lib/source-rules/puck-document-surfaces.js +8 -0
- package/dist/lib/source-rules/reduced-motion.d.ts +26 -0
- package/dist/lib/source-rules/reduced-motion.js +9 -0
- package/dist/lib/source-rules/route-content-width.d.ts +22 -0
- package/dist/lib/source-rules/route-content-width.js +5 -0
- package/dist/lib/source-rules/rule.d.ts +21 -0
- package/dist/lib/source-rules/rule.js +1 -0
- package/dist/lib/source-rules/section-theme-preview.d.ts +9 -0
- package/dist/lib/source-rules/section-theme-preview.js +8 -0
- package/dist/lib/source-rules/site-gutter.d.ts +6 -0
- package/dist/lib/source-rules/site-gutter.js +4 -0
- package/dist/lib/source-rules/site-square-by-default.d.ts +17 -0
- package/dist/lib/source-rules/site-square-by-default.js +3 -0
- package/dist/lib/source-rules/site-width.d.ts +11 -0
- package/dist/lib/source-rules/site-width.js +7 -0
- package/dist/lib/source-rules/size-token-paints.d.ts +8 -0
- package/dist/lib/source-rules/size-token-paints.js +11 -0
- package/dist/lib/source-rules/social-icons-import.d.ts +6 -0
- package/dist/lib/source-rules/social-icons-import.js +6 -0
- package/dist/lib/source-rules/source-status-is-shared.d.ts +7 -0
- package/dist/lib/source-rules/source-status-is-shared.js +1 -0
- package/dist/lib/source-rules/style-face-matches-size.d.ts +10 -0
- package/dist/lib/source-rules/style-face-matches-size.js +4 -0
- package/dist/lib/source-rules/support/accent-rename-bytes.d.ts +5 -0
- package/dist/lib/source-rules/support/accent-rename-bytes.js +1 -0
- package/dist/lib/source-rules/support/css-box-model.d.ts +5 -0
- package/dist/lib/source-rules/support/css-box-model.js +1 -0
- package/dist/lib/source-rules/support/css-length.d.ts +2 -0
- package/dist/lib/source-rules/support/css-length.js +1 -0
- package/dist/lib/source-rules/support/css-rules.d.ts +12 -0
- package/dist/lib/source-rules/support/css-rules.js +1 -0
- package/dist/lib/source-rules/support/css-source.d.ts +2 -0
- package/dist/lib/source-rules/support/css-source.js +3 -0
- package/dist/lib/source-rules/support/label-extraction.d.ts +14 -0
- package/dist/lib/source-rules/support/label-extraction.js +5 -0
- package/dist/lib/source-rules/support/panel-select-cascade.d.ts +72 -0
- package/dist/lib/source-rules/support/panel-select-cascade.js +2 -0
- package/dist/lib/source-rules/support/part-slider-call-sites.d.ts +9 -0
- package/dist/lib/source-rules/support/part-slider-call-sites.js +17 -0
- package/dist/lib/source-rules/support/registry-source.d.ts +14 -0
- package/dist/lib/source-rules/support/registry-source.js +3 -0
- package/dist/lib/source-rules/support/ts-source.d.ts +2 -0
- package/dist/lib/source-rules/support/ts-source.js +3 -0
- package/dist/lib/source-rules/theme-mode-controls-gone.d.ts +10 -0
- package/dist/lib/source-rules/theme-mode-controls-gone.js +5 -0
- package/dist/lib/source-rules/upload-intake-guard.d.ts +11 -0
- package/dist/lib/source-rules/upload-intake-guard.js +6 -0
- package/dist/lib/source-rules/word-styles.d.ts +8 -0
- package/dist/lib/source-rules/word-styles.js +4 -0
- package/dist/lib/theme-row-persist.js +1 -1
- package/dist/lib/theme-save-message.js +1 -1
- package/dist/lib/web-backend.d.ts +4 -59
- package/dist/lib/web-backend.js +1 -1
- package/dist/lib/website-document-addressing.d.ts +2 -0
- package/dist/lib/website-document-addressing.js +1 -0
- package/dist/lib/website-host-inbound.d.ts +1 -0
- package/dist/lib/website-host-inbound.js +1 -0
- package/dist/lib/website-session.d.ts +5 -0
- package/dist/lib/website-session.js +1 -0
- package/package.json +18 -8
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{bucketByGroup as h}from"../locations-grid.js";const s=t=>String(t?.group??""),d=new WeakMap;let x=0;function b(t){let e=d.get(t);return e||(e=`loc${++x}`,d.set(t,e)),e}const w=(t,e)=>e||t||"Ungrouped",y={photo:"",group:"",groupName:"",name:"City name",state:"State",country:"Country",timezone:"GMT
|
|
2
|
-
Address line two`,phone:"+00 000 0000",hours:"Mon
|
|
1
|
+
import{bucketByGroup as h}from"../locations-grid.js";const s=t=>String(t?.group??""),d=new WeakMap;let x=0;function b(t){let e=d.get(t);return e||(e=`loc${++x}`,d.set(t,e)),e}const w=(t,e)=>e||t||"Ungrouped",y={photo:"",group:"",groupName:"",name:"City name",state:"State",country:"Country",timezone:"GMT · UTC +0",address:`Address line one
|
|
2
|
+
Address line two`,phone:"+00 000 0000",hours:"Mon–Fri 9:00–18:00",lat:0,lng:0,mapsUrl:""};function a(t){return h(t,s,e=>String(e?.groupName??"")).map(e=>({key:e.key,name:e.name,cards:e.items.map(n=>n.item)}))}const m=t=>t.flatMap(e=>e.cards),g=(t,e,n)=>Math.min(Math.max(t,e),n);function C(t,e,n){let r=0;for(let o=0;o<t.length;o++)if(s(t[o])===e){if(r===n)return o;r++}return-1}function G(t,e,n){const r=a(t);if(e<0||e>=r.length)return t;const[o]=r.splice(e,1),u=g(e<n?n-1:n,0,r.length);return r.splice(u,0,o),m(r)}function N(t,e,n,r,o){const u=a(t),c=u.find(f=>f.key===e),i=u.find(f=>f.key===r);if(!c||!i||n<0||n>=c.cards.length)return t;const[p]=c.cards.splice(n,1),l=e===r?p:{...p,group:i.key,groupName:i.name};l!==p&&d.set(l,b(p));const k=g(c===i&&n<o?o-1:o,0,i.cards.length);return i.cards.splice(k,0,l),m(u)}function S(t,e){const n=a(t),r=n.find(u=>u.key===e),o={...y,group:e,groupName:r?.name??""};return r?(r.cards.push(o),m(n)):[...t,o]}function O(t){const e=new Set(a(t).map(o=>o.key));let n=e.size+1,r=`Group ${n}`;for(;e.has(r);)r=`Group ${++n}`;return{cards:[...t,{...y,group:r,groupName:""}],key:r}}function _(t,e){return t.filter(n=>s(n)!==e)}function v(t,e,n){const r=C(t,e,n);return r<0?t:t.filter((o,u)=>u!==r)}function T(t,e,n){const r=t.flatMap((c,i)=>s(c)===e?[i]:[]),o=t.slice();r.forEach((c,i)=>{o[c]=n[i]});const u=n.slice(r.length);return[...o.filter(c=>c!==void 0),...u]}function U(t,e,n){return e.flatMap(r=>{const o=t.filter(u=>s(u)===r);return o.length?o:n(r)})}export{y as NEW_CITY,C as absCityIndex,S as addCity,O as addGroup,a as bucketsOf,b as cardKey,v as deleteCity,_ as deleteGroup,s as groupKeyOf,w as groupLabelOf,N as moveCity,G as moveGroup,T as writeGroupCities,U as writeGroupOrder};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{SNAPSHOT_OBJECTS as s,HYDRATED_LISTS as l}from"./snapshot-contracts.js";const b={heading:"Main heading",body:"Add supporting copy.",eyebrow:"Label",button:"Button label",alt:"Image description",caption:"Image caption",address:null,phone:null,email:null,legal:null,generic:"Label"},o=[{semantic:"alt",name:/(^|[a-z])alt$|^imageLabel$|Alt$/i,label:/\balt text\b/i},{semantic:"caption",name:/caption/i,label:/\bcaption\b/i},{semantic:"email",name:/email/i,label:/\be-?mail\b/i},{semantic:"phone",name:/phone|tel$|mobile/i,label:/\bphone\b|\btelephone\b/i},{semantic:"address",name:/address|street|postcode|suburb|^hours$|^timezone$/i,label:/\baddress\b|\bopening hours\b/i},{semantic:"legal",name:/consent|finePrint|legal|disclaimer|copyright|abn|acn/i,label:/\bconsent\b|\bfine print\b|\blegal\b|\bdisclaimer\b/i},{semantic:"button",name:/^cta|Cta|button|Button|submitText|linkText|readLabel|viewLabel|archiveText|subscribedText/i,label:/\bbutton\b|\bcta\b|\blink text\b/i},{semantic:"eyebrow",name:/eyebrow|kicker|badge|^tag$|^num$|Number$|^label$|Label$|^meta|Meta$|^value$/i,label:/\beyebrow\b|\bkicker\b|\bbadge\b|\blabel\b|\bnumber\b|\btag\b/i},{semantic:"heading",name:/heading|Heading|^title|Title$|titleTop|titleBottom|^name$|question/i,label:/\bheading\b|\btitle\b/i},{semantic:"body",name:/body|description|^desc$|^intro|^lead|^dek$|^deck$|blurb|^copy$|quote|tagline|answer|^note$|footnote|^text$/i,label:/\bbody\b|\bdescription\b|\bblurb\b|\bintro\b|\bparagraph\b/i}];function g(e,a="",r=!1){for(const t of o)if(t.name?.test(e))return t.semantic;for(const t of o)if(t.label?.test(a))return t.semantic;return r?"body":"generic"}const c=["anchor"],d=/^href$|Href$|^url$|Url$|^link$|^mailto$|^tel$/;function E(e){return c.includes(e)||d.test(e)}const T={Reviews:["designCode"],ReviewForm:["designCode"],Form:["formSlug"]},v={HeroSingle:[{path:"eyebrow",semantic:"eyebrow",shape:"hidable"},{path:"titleTop",semantic:"heading",shape:"hidable"}],Hero:[{path:"tickerItems",semantic:"eyebrow",shape:"textList"}],ContactLocations:[{path:"sectionNumber",semantic:"eyebrow"},{path:"heading",semantic:"heading"},{path:"tagline",semantic:"body"},{path:"galleryKicker",semantic:"eyebrow"},{path:"galleryHint",semantic:"body"},{path:"locations[].groupName",semantic:"eyebrow"},{path:"locations[].name",semantic:"heading",neutral:"City name"},{path:"locations[].address",semantic:"address"},{path:"locations[].phone",semantic:"phone"},{path:"locations[].email",semantic:"email"},{path:"locations[].state",semantic:"address"},{path:"locations[].country",semantic:"address"},{path:"locations[].region",semantic:"address"},{path:"locations[].hours",semantic:"address"},{path:"locations[].timezone",semantic:"address"}]},p={Gallery:{source:{verb:"snapshot",keep:[]}},ProductHero:{source:{verb:"snapshot",keep:[]}},SpecTable:{source:{verb:"snapshot",keep:[]},wheel:{verb:"reference"},finish:{verb:"reference"},size:{verb:"reference"}},CollectionCard:{collection:{verb:"snapshot",keep:[]}},FooterMenu:{menu:{verb:"snapshot",keep:[]}},MenuBlock:{menu:{verb:"snapshot",keep:[]}},BrandStrip:{picks:{verb:"reference"}},ProductGrid:{design_codes:{verb:"reference"}},ProductRef:{code:{verb:"reference"},finish:{verb:"reference"}},FitmentTable:{wheel:{verb:"reference"}},GalleryItem:{fromProduct:{verb:"reference"}},Footprint:{"offices[].group":{verb:"groupKey"},"offices[].lat":{verb:"pii"},"offices[].lng":{verb:"pii"},"offices[].geocode":{verb:"pii"}}};p.ContactLocations={"locations[].lat":{verb:"pii"},"locations[].lng":{verb:"pii"},"locations[].mapsUrl":{verb:"pii"},"locations[].geocode":{verb:"pii"}};const S=["previewProduct"],y=Object.fromEntries(Object.entries(s).map(([e,a])=>[e,Object.keys(a)])),_=Object.fromEntries(Object.entries(l).map(([e,a])=>[e,[...a]])),m=["email","phone","address"],u={email:"Email address",phone:"Phone number",address:"Address"},h=[{rule:"email address",re:/[\w.+-]+@[\w-]+\.[\w.]+/},{rule:"url or domain",re:/https?:\/\/|\bwww\.|\.(?:com|net|org|au|co|io)\b/i},{rule:"phone number",re:/(?:\+\d[\d\s-]{7,}|\b0\d[\d\s-]{7,})/},{rule:"street address",re:/\b\d+[a-z]?\s+[A-Z][a-z]+\s+(?:St|Street|Rd|Road|Ave|Avenue|Hwy|Highway|Dr|Drive)\b/}];function $(e,a){const r=(a??"").trim();if(r){const t=h.find(({re:i})=>i.test(r));if(!t)return{ok:!0,neutral:r,source:"declared"};const n=m.includes(e)?u[e]:void 0;return n?{ok:!0,neutral:n,source:"safe-substitute"}:{ok:!1,reason:`declared placeholder ${JSON.stringify(r)} looks like a ${t.rule}. A placeholder is copied verbatim into every platform template
|
|
1
|
+
import{SNAPSHOT_OBJECTS as s,HYDRATED_LISTS as l}from"./snapshot-contracts.js";const b={heading:"Main heading",body:"Add supporting copy.",eyebrow:"Label",button:"Button label",alt:"Image description",caption:"Image caption",address:null,phone:null,email:null,legal:null,generic:"Label"},o=[{semantic:"alt",name:/(^|[a-z])alt$|^imageLabel$|Alt$/i,label:/\balt text\b/i},{semantic:"caption",name:/caption/i,label:/\bcaption\b/i},{semantic:"email",name:/email/i,label:/\be-?mail\b/i},{semantic:"phone",name:/phone|tel$|mobile/i,label:/\bphone\b|\btelephone\b/i},{semantic:"address",name:/address|street|postcode|suburb|^hours$|^timezone$/i,label:/\baddress\b|\bopening hours\b/i},{semantic:"legal",name:/consent|finePrint|legal|disclaimer|copyright|abn|acn/i,label:/\bconsent\b|\bfine print\b|\blegal\b|\bdisclaimer\b/i},{semantic:"button",name:/^cta|Cta|button|Button|submitText|linkText|readLabel|viewLabel|archiveText|subscribedText/i,label:/\bbutton\b|\bcta\b|\blink text\b/i},{semantic:"eyebrow",name:/eyebrow|kicker|badge|^tag$|^num$|Number$|^label$|Label$|^meta|Meta$|^value$/i,label:/\beyebrow\b|\bkicker\b|\bbadge\b|\blabel\b|\bnumber\b|\btag\b/i},{semantic:"heading",name:/heading|Heading|^title|Title$|titleTop|titleBottom|^name$|question/i,label:/\bheading\b|\btitle\b/i},{semantic:"body",name:/body|description|^desc$|^intro|^lead|^dek$|^deck$|blurb|^copy$|quote|tagline|answer|^note$|footnote|^text$/i,label:/\bbody\b|\bdescription\b|\bblurb\b|\bintro\b|\bparagraph\b/i}];function g(e,a="",r=!1){for(const t of o)if(t.name?.test(e))return t.semantic;for(const t of o)if(t.label?.test(a))return t.semantic;return r?"body":"generic"}const c=["anchor"],d=/^href$|Href$|^url$|Url$|^link$|^mailto$|^tel$/;function E(e){return c.includes(e)||d.test(e)}const T={Reviews:["designCode"],ReviewForm:["designCode"],Form:["formSlug"]},v={HeroSingle:[{path:"eyebrow",semantic:"eyebrow",shape:"hidable"},{path:"titleTop",semantic:"heading",shape:"hidable"}],Hero:[{path:"tickerItems",semantic:"eyebrow",shape:"textList"}],ContactLocations:[{path:"sectionNumber",semantic:"eyebrow"},{path:"heading",semantic:"heading"},{path:"tagline",semantic:"body"},{path:"galleryKicker",semantic:"eyebrow"},{path:"galleryHint",semantic:"body"},{path:"locations[].groupName",semantic:"eyebrow"},{path:"locations[].name",semantic:"heading",neutral:"City name"},{path:"locations[].address",semantic:"address"},{path:"locations[].phone",semantic:"phone"},{path:"locations[].email",semantic:"email"},{path:"locations[].state",semantic:"address"},{path:"locations[].country",semantic:"address"},{path:"locations[].region",semantic:"address"},{path:"locations[].hours",semantic:"address"},{path:"locations[].timezone",semantic:"address"}]},p={Gallery:{source:{verb:"snapshot",keep:[]}},ProductHero:{source:{verb:"snapshot",keep:[]}},SpecTable:{source:{verb:"snapshot",keep:[]},wheel:{verb:"reference"},finish:{verb:"reference"},size:{verb:"reference"}},CollectionCard:{collection:{verb:"snapshot",keep:[]}},FooterMenu:{menu:{verb:"snapshot",keep:[]}},MenuBlock:{menu:{verb:"snapshot",keep:[]}},BrandStrip:{picks:{verb:"reference"}},ProductGrid:{design_codes:{verb:"reference"}},ProductRef:{code:{verb:"reference"},finish:{verb:"reference"}},FitmentTable:{wheel:{verb:"reference"}},GalleryItem:{fromProduct:{verb:"reference"}},Footprint:{"offices[].group":{verb:"groupKey"},"offices[].lat":{verb:"pii"},"offices[].lng":{verb:"pii"},"offices[].geocode":{verb:"pii"}}};p.ContactLocations={"locations[].lat":{verb:"pii"},"locations[].lng":{verb:"pii"},"locations[].mapsUrl":{verb:"pii"},"locations[].geocode":{verb:"pii"}};const S=["previewProduct"],y=Object.fromEntries(Object.entries(s).map(([e,a])=>[e,Object.keys(a)])),_=Object.fromEntries(Object.entries(l).map(([e,a])=>[e,[...a]])),m=["email","phone","address"],u={email:"Email address",phone:"Phone number",address:"Address"},h=[{rule:"email address",re:/[\w.+-]+@[\w-]+\.[\w.]+/},{rule:"url or domain",re:/https?:\/\/|\bwww\.|\.(?:com|net|org|au|co|io)\b/i},{rule:"phone number",re:/(?:\+\d[\d\s-]{7,}|\b0\d[\d\s-]{7,})/},{rule:"street address",re:/\b\d+[a-z]?\s+[A-Z][a-z]+\s+(?:St|Street|Rd|Road|Ave|Avenue|Hwy|Highway|Dr|Drive)\b/}];function $(e,a){const r=(a??"").trim();if(r){const t=h.find(({re:i})=>i.test(r));if(!t)return{ok:!0,neutral:r,source:"declared"};const n=m.includes(e)?u[e]:void 0;return n?{ok:!0,neutral:n,source:"safe-substitute"}:{ok:!1,reason:`declared placeholder ${JSON.stringify(r)} looks like a ${t.rule}. A placeholder is copied verbatim into every platform template — make it generic.`}}return{ok:!0,neutral:b[e],source:"fallback"}}export{v as CUSTOM_FIELD_TEXT,p as CUSTOM_FIELD_VALUES,_ as HYDRATED_PROPS_FROM_MEDIA_CONTRACT,d as LINK_TEXT_PROP_RE,h as PLACEHOLDER_FORBIDDEN,T as REFERENCE_TEXT_FIELDS,S as ROOT_REFERENCE_PROPS,u as SAFE_SEMANTIC_PLACEHOLDER,m as SEMANTICS_WITH_UNSAFE_PLACEHOLDERS,b as SEMANTIC_FALLBACKS,y as SNAPSHOT_PROPS_FROM_MEDIA_CONTRACT,c as STRUCTURAL_TEXT_PROPS,g as classifyTextSemantic,E as isStructuralTextProp,$ as resolveNeutralValue};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{buildPaletteSections as i,categoryLabel as n,matchesQuery as o,paletteWithoutPinned as a,pinnedSection as c}from"efficient-easel/screen/lib/puck/palette-sections";export{i as buildPaletteSections,n as categoryLabel,o as matchesQuery,a as paletteWithoutPinned,c as pinnedSection};
|
|
@@ -1,12 +1,2 @@
|
|
|
1
|
-
export
|
|
2
|
-
|
|
3
|
-
fields?: PanelFieldMap;
|
|
4
|
-
resolveFields?: (data: unknown, params: Record<string, unknown>) => unknown;
|
|
5
|
-
}
|
|
6
|
-
export declare function panelFieldsOf(config: {
|
|
7
|
-
components?: Record<string, PanelComponent>;
|
|
8
|
-
}, node: {
|
|
9
|
-
type: string;
|
|
10
|
-
props: Record<string, unknown>;
|
|
11
|
-
} | null | undefined): PanelFieldMap | null;
|
|
12
|
-
export {};
|
|
1
|
+
export { panelFieldsOf } from "efficient-easel/screen/lib/puck/panel-fields";
|
|
2
|
+
export type { PanelFieldMap } from "efficient-easel/screen/lib/puck/panel-fields";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
import{panelFieldsOf as l}from"efficient-easel/screen/lib/puck/panel-fields";export{l as panelFieldsOf};
|
|
@@ -1,7 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
export
|
|
3
|
-
export declare function NoControlMark(): ReactElement;
|
|
4
|
-
export declare const NO_CONTROL_FIELD: "__noControl";
|
|
5
|
-
export type NoControlFieldMeta = "always" | "authored-copy";
|
|
6
|
-
export declare function noControlMetaOf(field: unknown): NoControlFieldMeta | null;
|
|
7
|
-
export declare function noControlField<F>(field: F, reason: NoControlFieldMeta): F;
|
|
1
|
+
export { NO_CONTROL_ATTR, NO_CONTROL_FIELD, noControlField, NoControlMark, noControlMetaOf } from "efficient-easel/screen/lib/puck/panel-no-control-mark";
|
|
2
|
+
export type { NoControlFieldMeta } from "efficient-easel/screen/lib/puck/panel-no-control-mark";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{
|
|
1
|
+
"use client";import{NO_CONTROL_ATTR as n,NO_CONTROL_FIELD as r,noControlField as t,NoControlMark as e,noControlMetaOf as l}from"efficient-easel/screen/lib/puck/panel-no-control-mark";export{n as NO_CONTROL_ATTR,r as NO_CONTROL_FIELD,e as NoControlMark,t as noControlField,l as noControlMetaOf};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export { decodePartId, encodePartId, PART_SEP } from "efficient-easel/screen/lib/puck/part-id";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{decodePartId as o,encodePartId as r,PART_SEP as P}from"efficient-easel/screen/lib/puck/part-id";export{P as PART_SEP,o as decodePartId,r as encodePartId};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{TEXT_FIELD_MARKER as s}from"./field-markers.js";import{partText as p,partValueWithText as x,typeInPlaceKind as y}from"./part-text.js";import{decodePartKey as P,encodePartKey as b}from"./part-key.js";function d(t){if(!(!t||typeof t!="object"))return t[s]}function l(t){if(!t||typeof t!="object")return null;const r=t.arrayFields;return r&&typeof r=="object"?r:null}function A(t,r){if(!Array.isArray(r))return[];const e=d(t),i=[];if(e?.control==="textList"){const n=e.itemKey??"text";return r.forEach((u,a)=>{const c=u?.[n];typeof c=="string"&&c&&i.push({row:{index:a,rowKey:n},text:c})}),i}const o=l(t);return o?(r.forEach((n,u)=>{for(const[a,c]of Object.entries(o)){if(!y(c))continue;const f=p(n?.[a]);f&&i.push({row:{index:u,rowKey:a},text:f})}}),i):[]}function w(t,r){if(Array.isArray(t))return t[r.index]?.[r.rowKey]}function K(t,r,e,i){const o=t[r];return!Array.isArray(o)||e.index<0||e.index>=o.length?null:{...t,[r]:o.map((n,u)=>u===e.index?{...n,[e.rowKey]:i}:n)}}function R(t,r,e,i,o){const n=w(t[r],e);return p(n)===o?null:K(t,r,e,x(i,n,o))}function T(t,r){return r?`${t}
|
|
1
|
+
import{TEXT_FIELD_MARKER as s}from"./field-markers.js";import{partText as p,partValueWithText as x,typeInPlaceKind as y}from"./part-text.js";import{decodePartKey as P,encodePartKey as b}from"./part-key.js";function d(t){if(!(!t||typeof t!="object"))return t[s]}function l(t){if(!t||typeof t!="object")return null;const r=t.arrayFields;return r&&typeof r=="object"?r:null}function A(t,r){if(!Array.isArray(r))return[];const e=d(t),i=[];if(e?.control==="textList"){const n=e.itemKey??"text";return r.forEach((u,a)=>{const c=u?.[n];typeof c=="string"&&c&&i.push({row:{index:a,rowKey:n},text:c})}),i}const o=l(t);return o?(r.forEach((n,u)=>{for(const[a,c]of Object.entries(o)){if(!y(c))continue;const f=p(n?.[a]);f&&i.push({row:{index:u,rowKey:a},text:f})}}),i):[]}function w(t,r){if(Array.isArray(t))return t[r.index]?.[r.rowKey]}function K(t,r,e,i){const o=t[r];return!Array.isArray(o)||e.index<0||e.index>=o.length?null:{...t,[r]:o.map((n,u)=>u===e.index?{...n,[e.rowKey]:i}:n)}}function R(t,r,e,i,o){const n=w(t[r],e);return p(n)===o?null:K(t,r,e,x(i,n,o))}function T(t,r){return r?`${t} · row ${r.index+1}`:t}export{l as arrayFieldsOf,P as decodePartKey,b as encodePartKey,R as partPropsWithRowText,K as partPropsWithRowValue,T as partRowHeadLabel,A as partRowTexts,w as partRowValue,d as textMeta};
|
|
@@ -1,17 +1,7 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
|
|
3
|
-
export type SaveStatus = "idle" | "saving" | "saved" | "error";
|
|
4
|
-
export declare function saveStatusOf(state: AutosaveSnapshot): SaveStatus;
|
|
1
|
+
import type { SaveStatus } from "../editor-document-switch.js";
|
|
2
|
+
export { resetForDocumentSwitch, saveStatusForNewDocument, saveStatusOf, type DocumentSwitchSetters, type SaveStatus, } from "../editor-document-switch.js";
|
|
5
3
|
export declare function canSeedPinnedChrome(state: {
|
|
6
4
|
docId: string | null;
|
|
7
5
|
saveStatus: SaveStatus;
|
|
8
6
|
seededDocId: string | null;
|
|
9
7
|
}): boolean;
|
|
10
|
-
export declare function saveStatusForNewDocument(_previous: SaveStatus): SaveStatus;
|
|
11
|
-
export type DocumentSwitchSetters = {
|
|
12
|
-
resetAutosave: () => void;
|
|
13
|
-
setVersion: (version: string | null) => void;
|
|
14
|
-
setSaveConflict: (conflict: null) => void;
|
|
15
|
-
setAccess: (access: EditAccess) => void;
|
|
16
|
-
};
|
|
17
|
-
export declare function resetForDocumentSwitch(hasEditLock: boolean, apply: DocumentSwitchSetters): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{resetForDocumentSwitch as d,saveStatusForNewDocument as t,saveStatusOf as c}from"../editor-document-switch.js";function o(e){return!e.docId||e.saveStatus==="saving"?!1:e.seededDocId!==e.docId}export{o as canSeedPinnedChrome,d as resetForDocumentSwitch,t as saveStatusForNewDocument,c as saveStatusOf};
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
export
|
|
2
|
-
export declare function isPreviewClick(): boolean;
|
|
1
|
+
export { isPreviewClick, runAsPreviewClick } from "efficient-easel/screen/lib/puck/preview-click";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
import{isPreviewClick as r,runAsPreviewClick as c}from"efficient-easel/screen/lib/puck/preview-click";export{r as isPreviewClick,c as runAsPreviewClick};
|
|
@@ -1,6 +1 @@
|
|
|
1
|
-
export
|
|
2
|
-
export declare function scrollPreviewToSection(id: string): void;
|
|
3
|
-
export declare function gotoPreviewSlide(heroId: string, index: number): void;
|
|
4
|
-
export declare function scrollPreviewToTop(): void;
|
|
5
|
-
export declare function pinPreviewToSection(id: string): () => void;
|
|
6
|
-
export declare function pinPreviewToBottom(onPinned?: () => void): () => void;
|
|
1
|
+
export { gotoPreviewSlide, pinPreviewToBottom, pinPreviewToSection, previewFrame, scrollPreviewToSection, scrollPreviewToTop } from "efficient-easel/screen/lib/puck/preview-dom";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{gotoPreviewSlide as i,pinPreviewToBottom as r,pinPreviewToSection as t,previewFrame as v,scrollPreviewToSection as w,scrollPreviewToTop as l}from"efficient-easel/screen/lib/puck/preview-dom";export{i as gotoPreviewSlide,r as pinPreviewToBottom,t as pinPreviewToSection,v as previewFrame,w as scrollPreviewToSection,l as scrollPreviewToTop};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{HERO_SLIDER_GOTO_EVENT as _}from"efficient-easel/screen/lib/puck/preview-events";export{_ as HERO_SLIDER_GOTO_EVENT};
|
|
@@ -1,19 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
export
|
|
3
|
-
select: (...args: Args) => void;
|
|
4
|
-
setSelectHandler: (fn: (...args: Args) => void) => void;
|
|
5
|
-
};
|
|
6
|
-
export type PreviewIdSelection<Key extends string> = {
|
|
7
|
-
[P in Key]: string | null;
|
|
8
|
-
} & {
|
|
9
|
-
[P in Key as `set${Capitalize<P>}`]: (id: string | null) => void;
|
|
10
|
-
} & {
|
|
11
|
-
select: (id: string) => void;
|
|
12
|
-
setSelectHandler: (fn: (id: string) => void) => void;
|
|
13
|
-
};
|
|
14
|
-
export declare function createPreviewSelectionContext<Key extends string>(idKey: Key): {
|
|
15
|
-
Provider: ({ children }: {
|
|
16
|
-
children: ReactNode;
|
|
17
|
-
}) => import("react").JSX.Element;
|
|
18
|
-
useSelection: () => PreviewIdSelection<Key>;
|
|
19
|
-
};
|
|
1
|
+
export { createPreviewSelectionContext, useSelectHandler } from "efficient-easel/screen/lib/puck/preview-selection-context";
|
|
2
|
+
export type { PreviewIdSelection } from "efficient-easel/screen/lib/puck/preview-selection-context";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{
|
|
1
|
+
"use client";import{createPreviewSelectionContext as r,useSelectHandler as c}from"efficient-easel/screen/lib/puck/preview-selection-context";export{r as createPreviewSelectionContext,c as useSelectHandler};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const p=["general","commerce","service"],o=[{key:"openers",title:"Hero & intros",defaultExpanded:!0,templateable:!0,sections:[{type:"Hero",label:"Hero Slideshow",set:"general"},{type:"HeroSingle",label:"Hero",set:"general"},{type:"IntroBleed",label:"Scroll-Over Text",set:"general"}]},{key:"shop",title:"Shop & galleries",templateable:!0,sections:[{type:"Collections",label:"Collections",set:"commerce"},{type:"BrandStrip",label:"Brand Strip",set:"commerce"},{type:"AlloyWheelsListing",label:"List",set:"commerce"},{type:"CatalogFilterBar",label:"Catalog Filter Bar",set:"commerce"},{type:"ProductGrid",label:"Product Grid",set:"commerce"},{type:"FitmentFinder",label:"Fitment Form",set:"commerce"},{type:"Gallery",label:"Tabbed Gallery",set:"commerce"},{type:"GalleryB",label:"Customer Photo Grid",set:"commerce"},{type:"SpecStrip",label:"Spec Strip",set:"general"}]},{key:"product",title:"Product page",templateable:!0,sections:[{type:"ProductHero",label:"Product Hero",set:"commerce"},{type:"SpecTable",label:"Spec Table",set:"commerce"},{type:"ProcessSteps",label:"Image & Text Columns",set:"general"},{type:"DetailRows",label:"Feature Rows",set:"commerce"},{type:"FitmentTable",label:"Fitment Table",set:"commerce"},{type:"TyreSizes",label:"Tyre Sizes",set:"commerce"},{type:"TyreFitment",label:"Tyre Fitment Form",set:"commerce"},{type:"EuTyreLabel",label:"EU Tyre Label",set:"commerce"},{type:"RelatedProducts",label:"Related Products",set:"commerce"},{type:"BundleOffer",label:"Bundle Products",set:"commerce"}]},{key:"checkout",title:"Checkout & ordering",templateable:!0,sections:[{type:"OrderSummary",label:"Order Table",set:"general"},{type:"DeliveryOptions",label:"Delivery Options",set:"commerce"},{type:"PaymentBadges",label:"Payment Methods",set:"general"},{type:"CheckoutCTA",label:"Ready-to-Order Banner",set:"commerce"}]},{key:"about",title:"About & brand story",templateable:!0,sections:[{type:"Manifesto",label:"Brand Text",set:"general"},{type:"Timeline",label:"Story Timeline",set:"general"},{type:"TimelineTrack",label:"Milestone Timeline",set:"general"},{type:"Footprint",label:"Locations Map",set:"general"}]},{key:"content",title:"Text & content",templateable:!0,sections:[{type:"Prose",label:"Editorial Text",set:"general"},{type:"ParagraphsA",label:"Lead Text",set:"general"},{type:"Split",label:"Image & Text Split",set:"general"},{type:"Cards",label:"Cards",set:"general"},{type:"KeyFeatures",label:"Key Features",set:"general"}]},{key:"proof",title:"Stats & social proof",templateable:!0,sections:[{type:"Stats",label:"Stats",set:"general"},{type:"StatsParagraph",label:"Stats with Text",set:"general"},{type:"Chart",label:"Chart",set:"general"},{type:"Mockup",label:"Mockup Card",set:"general"},{type:"Testimonials",label:"Testimonials",set:"general"},{type:"Reviews",label:"Reviews",set:"service"},{type:"Logos",label:"Logos",set:"general"}]},{key:"promo",title:"Promotions & sign-ups",templateable:!0,sections:[{type:"Banner",label:"Banner",set:"general"},{type:"TitleWithButtons",label:"Call-to-Action Heading",set:"general"},{type:"Ticker",label:"Scrolling Bar",set:"general"},{type:"Subscribe",label:"Signup Form",set:"service"}]},{key:"blog",title:"Blog & journal",templateable:!0,sections:[{type:"Masthead",label:"Issue Header",set:"general"},{type:"FeaturedCover",label:"Feature Banner",set:"general"},{type:"LongRead",label:"Article Text",set:"general"},{type:"Series",label:"Recurring Columns",set:"general"},{type:"Events",label:"Latest Posts",set:"service"}]},{key:"navigation",title:"Navigation & wayfinding",templateable:!0,sections:[{type:"Breadcrumb",label:"Breadcrumb",set:"general"},{type:"CategoryBar",label:"Category Bar",set:"general"},{type:"DocTabs",label:"Document Tabs",set:"general"}]},{key:"legal",title:"Legal & documents",templateable:!0,sections:[{type:"DocMasthead",label:"Document Header",set:"general"},{type:"DocBody",label:"Document Text",set:"general"},{type:"DocMetaCards",label:"Document Detail Cards",set:"general"}]},{key:"contact",title:"Contact, FAQ & forms",templateable:!0,sections:[{type:"FAQ",label:"Q&A",set:"general"},{type:"ContactRouting",label:"Contact Form",set:"service"},{type:"ContactLocations",label:"Contact / Locations",set:"general"},{type:"SubmitBuild",label:"Photo Submission Form",set:"service"},{type:"ReviewForm",label:"Review Form",set:"service"},{type:"Form",label:"Form",set:"service"},{type:"AppointmentBooking",label:"Booking Form",set:"service"}]},{key:"structure",title:"Layout, structure & embeds",templateable:!1,sections:[{type:"SectionHeader",label:"Section Header",set:"general"},{type:"Flex",label:"Box",set:"general"},{type:"Spacer",label:"Spacer",set:"general"},{type:"Divider",label:"Divider",set:"general"},{type:"CustomHTML",label:"Custom HTML",set:"general"}]}];function h(){return Object.fromEntries(o.map(e=>[e.key,{title:e.title,components:e.sections.map(t=>t.type),...e.defaultExpanded?{defaultExpanded:!0}:{}}]))}const l={Grid:'Lewis, 2026-09-14: Box and Grid duplicate each other and it feels confusing. 2026-09-15 he chose the order: give Box uneven widths FIRST, then merge Grid into Box. Shown three ways to pick the widths (mockup "Uneven Box Widths"), he chose A \u2014 shape pictures on the Box\'s `Block widths` row, the same "a row is a shape, pick a picture of it" rule he set for the photo wall on 2026-09-07.\n\nWHAT REPLACES IT: a Box set to One row, with `Block widths` at Equal or a shape (Big left, Big right, Bigger left, Bigger right) and its own `Columns on phone`. Measured on PRODUCTION 2026-09-16 ~09:28 AEST (database `efficient-system`, all 10 tenant schemas, 128 storefront pages, both `layout` and `published_layout` \u2014 256 documents): 2 Grid nodes, and they are ONE Grid counted twice \u2014 the 9DIEM homepage on 9diem.com (`xtreme_mudder` schema), once as draft and once as published. It is top-level, holds three `ImageBlock`s at `columns` 3 \u2014 equal thirds \u2014 and NO block sets `Positions`. A Box draws that with `Block widths` at Equal.\n\n\u26A0\uFE0F THE COUNT MOVES; THE RULE MUST NOT DEPEND ON IT. This entry has already carried three different readings. A local-clone snapshot said no Grid used `Positions`. A PRODUCTION reading on 2026-09-15 ~13:15 AEST found 6 nodes on two sites, 4 of them spanned \u2014 hartesmetal.com.au homepage and about, 4 columns, spans 1 + 3. That one was TRUE when it was taken and stopped being true the same day: those two pages were rebuilt on Box (`Block widths: Bigger right`), and on 2026-09-16 they hold zero Grid nodes and are built from `Flex`. \u26D4 So the rule is NOT "there are still N spanned Grids". NEVER delete the Grid component or its `gridSpan` handling, whatever a census says \u2014 Grid still renders, still edits, still drags, and a merchant may rebuild a page either way on any day. Re-run the census on production before anyone PROPOSES deleting either, and read any number written here as the reading of its own day, not as the state of the world.\n\nWHAT A MERCHANT LOSES: a new Grid, and with it a fixed "N per row" that wraps by itself past three across, and the per-block `Positions` number. Box wraps with `Wrap`, but by content width, not by a fixed count.\n\nTHE TYPE KEY STAYS AND SO DOES THE COMPONENT. Every page holding a Grid still renders through it and can still be edited, dragged and added to; no document is rewritten and NO MIGRATION RUNS \u2014 the owner redoes live sections himself.\n\n\u26A0\uFE0F AND IT STAYS DROPPABLE WHERE IT LIVES. The drop rule in lib/puck/config.tsx read the nestable containers off the catalogue\'s `structure` row, so leaving the catalogue would have made every open slot \u2014 a Box included \u2014 refuse a Grid already stored inside one. `scripts/test-retired-grid-stays-editable.tsx` \xA73 pins it.',CompatibleTyres:'Lewis, 2026-09-09: "Do not bother counting. Delete Compatible Tyres and use the new one. The new one needs complete settings \u2014 it must have every setting our cards have." Shown three ways to finish it, he chose C: retire from the menu now, and take styling the card text as its own card.\n\nWHAT REPLACES IT: `RelatedProducts` with its `Show` dropdown set to "Tyres that fit this product". That block is the GENERIC relationship section from card 1128 \u2014 it knows nothing about wheels or tyres, it asks the registry for a relationship by name. The two have rendered through the SAME renderer (`DynamicRelatedProducts`) since that card; this one is the pre-registry one-off that was never removed.\n\n\u26A0\uFE0F THE SWAP WAS NOT SAFE UNTIL #1305, AND SAYING SO IS THE POINT. The first old-versus-new table put in front of the owner was WRONG. `DynamicRelatedProducts` returns EARLY on a tyre answer and draws this component, so the seven card settings, the head split and the Width control all stopped at that call \u2014 nine settings, measured NO EFFECT, on precisely the relationship that replaces this block. #1283 gave the new block the card settings, #1299 the head split and its own Width, #1305 carried all of it onto the tyre branch. Only then was the claim true.\n\nWHAT WAS MEASURED BEFORE RETIRING, four ways, because the premise decides the card:\n \u2022 settable text kinds (SECTION_TEXT_KINDS): both blocks ABSENT \u2014 the map holds only TimelineTrack and Footprint, both AUTHORED lists\n \u2022 read-only text regions: neither `components/CompatibleTyres` nor `components/TyreCard` stamps one\n \u2022 panel rows through resolveFields: this block 31, `RelatedProducts` 42. This block\'s only style-ish key is `_sStyle`, the bucket HEADER, not a control\n \u2022 head text (num/title/description) is authored on both, so `_partStyles` reaches it identically\nSo on the CARD runs the two are zero against zero \u2014 neither can style them \u2014 and everywhere else the new block is ahead. Styling those runs needs a section-level prop family and a paint path for DERIVED text, which no section has yet: a part is anchored by matching an AUTHORED prop\'s string against the DOM, and `lib/puck/source-bound-parts` keeps hydrated copy unreachable on purpose so a merchant cannot type into a copy of a product name and lose it at the next sync. That is its own card, and `lib/sections/text-regions` is the read-only half that already ships.\n\nTHE TYPE KEY STAYS AND SO DOES THE COMPONENT, the same contract Subscribe, Split and SubscribeBlogs have. Every page holding a `CompatibleTyres` still renders through it, no published document is rewritten, and NO MIGRATION RUNS \u2014 the owner\'s standing ruling of 2026-09-05: he redoes live sections himself and deletes the old ones when he does. He also said explicitly not to count them first.\n\n\u26A0\uFE0F AND THIS COMPONENT IS LOAD-BEARING FOR ITS OWN REPLACEMENT: `DynamicRelatedProducts` draws it for EVERY tyre answer. Deleting it would blank the block that replaces it, not just the pages still holding this one.',SubscribeBlogs:"card 66396 \u2014 folded into `Subscribe`, which now chooses its rail's content with a `Type` control (the newsletter's own issues, or live blog posts). The two shared 21 of their fields and rendered THE SAME BYTES from equivalent rows, so offering both asked a merchant to choose between two names for one section. The type key stays because it is stored on published pages, and the component stays because those pages still render through it."},m=["Grid"],y=Array.from(new Set([...o.flatMap(e=>e.sections.map(t=>t.type)),...Object.keys(l)])),u=Object.fromEntries(o.flatMap(e=>e.sections.map(t=>[t.type,t.label]))),i={Heading:"general",Text:"general",Eyebrow:"general",ImageBlock:"general",LogoBlock:"general",ButtonBlock:"general",PostCard:"general",HeroSlide:"general",HeroGroup:"general",Integrations:"general",Grid:"general",CollectionCard:"commerce",GalleryItem:"commerce",ProductRef:"commerce",CompatibleTyres:"commerce",Header:"commerce",SearchBlock:"commerce",CartBlock:"commerce",CountrySwitchBlock:"commerce",SubmitBox:"service",BookingBox:"service",SubscribeBlogs:"service",Footer:"service",FooterLogo:"service",FooterMenu:"service",FooterDivider:"service",FooterGroup:"service",FooterText:"service",FooterEmailSignup:"service",FooterSocial:"service",MenuBlock:"service",EmailFormBlock:"service",SocialLogosBlock:"service",LegalLineBlock:"service",SiteHeader:"service",SiteFooter:"service"},a={...i,...Object.fromEntries(o.flatMap(e=>e.sections.map(t=>[t.type,t.set])))};function b(e){return Object.prototype.hasOwnProperty.call(a,e)?a[e]:void 0}function r(e){return Object.keys(a).filter(t=>a[t]===e).sort()}const g=r("general"),T=r("commerce"),S=r("service"),c="Flex",s="Box",E=`${s}es`;function d(e){return e==="section"?"Blank section":s}function w(e,t,n){return e===c?d(t):n}export{y as ALL_SECTION_TYPES,p as BLOCK_SETS,s as BOX_LABEL,E as BOX_LABEL_PLURAL,T as COMMERCE_BLOCKS,g as GENERAL_BLOCKS,c as LEVEL_NAMED_TYPE,m as RETIRED_NESTABLE_SECTIONS,l as RETIRED_SECTIONS,o as SECTION_CATALOG,u as SECTION_LABELS,S as SERVICE_BLOCKS,i as UNLISTED_BLOCK_SETS,b as blockSetOf,r as blocksInSet,h as buildPuckCategories,w as labelAtLevel,d as labelForFlex};
|
|
1
|
+
const p=["general","commerce","service"],o=[{key:"openers",title:"Hero & intros",defaultExpanded:!0,templateable:!0,sections:[{type:"Hero",label:"Hero Slideshow",set:"general"},{type:"HeroSingle",label:"Hero",set:"general"},{type:"IntroBleed",label:"Scroll-Over Text",set:"general"}]},{key:"shop",title:"Shop & galleries",templateable:!0,sections:[{type:"Collections",label:"Collections",set:"commerce"},{type:"BrandStrip",label:"Brand Strip",set:"commerce"},{type:"AlloyWheelsListing",label:"List",set:"commerce"},{type:"CatalogFilterBar",label:"Catalog Filter Bar",set:"commerce"},{type:"ProductGrid",label:"Product Grid",set:"commerce"},{type:"FitmentFinder",label:"Fitment Form",set:"commerce"},{type:"Gallery",label:"Tabbed Gallery",set:"commerce"},{type:"GalleryB",label:"Customer Photo Grid",set:"commerce"},{type:"SpecStrip",label:"Spec Strip",set:"general"}]},{key:"product",title:"Product page",templateable:!0,sections:[{type:"ProductHero",label:"Product Hero",set:"commerce"},{type:"SpecTable",label:"Spec Table",set:"commerce"},{type:"ProcessSteps",label:"Image & Text Columns",set:"general"},{type:"DetailRows",label:"Feature Rows",set:"commerce"},{type:"FitmentTable",label:"Fitment Table",set:"commerce"},{type:"TyreSizes",label:"Tyre Sizes",set:"commerce"},{type:"TyreFitment",label:"Tyre Fitment Form",set:"commerce"},{type:"EuTyreLabel",label:"EU Tyre Label",set:"commerce"},{type:"RelatedProducts",label:"Related Products",set:"commerce"},{type:"BundleOffer",label:"Bundle Products",set:"commerce"}]},{key:"checkout",title:"Checkout & ordering",templateable:!0,sections:[{type:"OrderSummary",label:"Order Table",set:"general"},{type:"DeliveryOptions",label:"Delivery Options",set:"commerce"},{type:"PaymentBadges",label:"Payment Methods",set:"general"},{type:"CheckoutCTA",label:"Ready-to-Order Banner",set:"commerce"}]},{key:"about",title:"About & brand story",templateable:!0,sections:[{type:"Manifesto",label:"Brand Text",set:"general"},{type:"Timeline",label:"Story Timeline",set:"general"},{type:"TimelineTrack",label:"Milestone Timeline",set:"general"},{type:"Footprint",label:"Locations Map",set:"general"}]},{key:"content",title:"Text & content",templateable:!0,sections:[{type:"Prose",label:"Editorial Text",set:"general"},{type:"ParagraphsA",label:"Lead Text",set:"general"},{type:"Split",label:"Image & Text Split",set:"general"},{type:"Cards",label:"Cards",set:"general"},{type:"KeyFeatures",label:"Key Features",set:"general"}]},{key:"proof",title:"Stats & social proof",templateable:!0,sections:[{type:"Stats",label:"Stats",set:"general"},{type:"StatsParagraph",label:"Stats with Text",set:"general"},{type:"Chart",label:"Chart",set:"general"},{type:"Mockup",label:"Mockup Card",set:"general"},{type:"Testimonials",label:"Testimonials",set:"general"},{type:"Reviews",label:"Reviews",set:"service"},{type:"Logos",label:"Logos",set:"general"}]},{key:"promo",title:"Promotions & sign-ups",templateable:!0,sections:[{type:"Banner",label:"Banner",set:"general"},{type:"TitleWithButtons",label:"Call-to-Action Heading",set:"general"},{type:"Ticker",label:"Scrolling Bar",set:"general"},{type:"Subscribe",label:"Signup Form",set:"service"}]},{key:"blog",title:"Blog & journal",templateable:!0,sections:[{type:"Masthead",label:"Issue Header",set:"general"},{type:"FeaturedCover",label:"Feature Banner",set:"general"},{type:"LongRead",label:"Article Text",set:"general"},{type:"Series",label:"Recurring Columns",set:"general"},{type:"Events",label:"Latest Posts",set:"service"}]},{key:"navigation",title:"Navigation & wayfinding",templateable:!0,sections:[{type:"Breadcrumb",label:"Breadcrumb",set:"general"},{type:"CategoryBar",label:"Category Bar",set:"general"},{type:"DocTabs",label:"Document Tabs",set:"general"}]},{key:"legal",title:"Legal & documents",templateable:!0,sections:[{type:"DocMasthead",label:"Document Header",set:"general"},{type:"DocBody",label:"Document Text",set:"general"},{type:"DocMetaCards",label:"Document Detail Cards",set:"general"}]},{key:"contact",title:"Contact, FAQ & forms",templateable:!0,sections:[{type:"FAQ",label:"Q&A",set:"general"},{type:"ContactRouting",label:"Contact Form",set:"service"},{type:"ContactLocations",label:"Contact / Locations",set:"general"},{type:"SubmitBuild",label:"Photo Submission Form",set:"service"},{type:"ReviewForm",label:"Review Form",set:"service"},{type:"Form",label:"Form",set:"service"},{type:"AppointmentBooking",label:"Booking Form",set:"service"}]},{key:"structure",title:"Layout, structure & embeds",templateable:!1,sections:[{type:"SectionHeader",label:"Section Header",set:"general"},{type:"Flex",label:"Box",set:"general"},{type:"Spacer",label:"Spacer",set:"general"},{type:"Divider",label:"Divider",set:"general"},{type:"CustomHTML",label:"Custom HTML",set:"general"}]}];function h(){return Object.fromEntries(o.map(e=>[e.key,{title:e.title,components:e.sections.map(t=>t.type),...e.defaultExpanded?{defaultExpanded:!0}:{}}]))}const l={Grid:'Lewis, 2026-09-14: Box and Grid duplicate each other and it feels confusing. 2026-09-15 he chose the order: give Box uneven widths FIRST, then merge Grid into Box. Shown three ways to pick the widths (mockup "Uneven Box Widths"), he chose A — shape pictures on the Box\'s `Block widths` row, the same "a row is a shape, pick a picture of it" rule he set for the photo wall on 2026-09-07.\n\nWHAT REPLACES IT: a Box set to One row, with `Block widths` at Equal or a shape (Big left, Big right, Bigger left, Bigger right) and its own `Columns on phone`. Measured on PRODUCTION 2026-09-16 ~09:28 AEST (database `efficient-system`, all 10 tenant schemas, 128 storefront pages, both `layout` and `published_layout` — 256 documents): 2 Grid nodes, and they are ONE Grid counted twice — the 9DIEM homepage on 9diem.com (`xtreme_mudder` schema), once as draft and once as published. It is top-level, holds three `ImageBlock`s at `columns` 3 — equal thirds — and NO block sets `Positions`. A Box draws that with `Block widths` at Equal.\n\n⚠️ THE COUNT MOVES; THE RULE MUST NOT DEPEND ON IT. This entry has already carried three different readings. A local-clone snapshot said no Grid used `Positions`. A PRODUCTION reading on 2026-09-15 ~13:15 AEST found 6 nodes on two sites, 4 of them spanned — hartesmetal.com.au homepage and about, 4 columns, spans 1 + 3. That one was TRUE when it was taken and stopped being true the same day: those two pages were rebuilt on Box (`Block widths: Bigger right`), and on 2026-09-16 they hold zero Grid nodes and are built from `Flex`. ⛔ So the rule is NOT "there are still N spanned Grids". NEVER delete the Grid component or its `gridSpan` handling, whatever a census says — Grid still renders, still edits, still drags, and a merchant may rebuild a page either way on any day. Re-run the census on production before anyone PROPOSES deleting either, and read any number written here as the reading of its own day, not as the state of the world.\n\nWHAT A MERCHANT LOSES: a new Grid, and with it a fixed "N per row" that wraps by itself past three across, and the per-block `Positions` number. Box wraps with `Wrap`, but by content width, not by a fixed count.\n\nTHE TYPE KEY STAYS AND SO DOES THE COMPONENT. Every page holding a Grid still renders through it and can still be edited, dragged and added to; no document is rewritten and NO MIGRATION RUNS — the owner redoes live sections himself.\n\n⚠️ AND IT STAYS DROPPABLE WHERE IT LIVES. The drop rule in lib/puck/config.tsx read the nestable containers off the catalogue\'s `structure` row, so leaving the catalogue would have made every open slot — a Box included — refuse a Grid already stored inside one. `scripts/test-retired-grid-stays-editable.tsx` §3 pins it.',CompatibleTyres:'Lewis, 2026-09-09: "Do not bother counting. Delete Compatible Tyres and use the new one. The new one needs complete settings — it must have every setting our cards have." Shown three ways to finish it, he chose C: retire from the menu now, and take styling the card text as its own card.\n\nWHAT REPLACES IT: `RelatedProducts` with its `Show` dropdown set to "Tyres that fit this product". That block is the GENERIC relationship section from card 1128 — it knows nothing about wheels or tyres, it asks the registry for a relationship by name. The two have rendered through the SAME renderer (`DynamicRelatedProducts`) since that card; this one is the pre-registry one-off that was never removed.\n\n⚠️ THE SWAP WAS NOT SAFE UNTIL #1305, AND SAYING SO IS THE POINT. The first old-versus-new table put in front of the owner was WRONG. `DynamicRelatedProducts` returns EARLY on a tyre answer and draws this component, so the seven card settings, the head split and the Width control all stopped at that call — nine settings, measured NO EFFECT, on precisely the relationship that replaces this block. #1283 gave the new block the card settings, #1299 the head split and its own Width, #1305 carried all of it onto the tyre branch. Only then was the claim true.\n\nWHAT WAS MEASURED BEFORE RETIRING, four ways, because the premise decides the card:\n • settable text kinds (SECTION_TEXT_KINDS): both blocks ABSENT — the map holds only TimelineTrack and Footprint, both AUTHORED lists\n • read-only text regions: neither `components/CompatibleTyres` nor `components/TyreCard` stamps one\n • panel rows through resolveFields: this block 31, `RelatedProducts` 42. This block\'s only style-ish key is `_sStyle`, the bucket HEADER, not a control\n • head text (num/title/description) is authored on both, so `_partStyles` reaches it identically\nSo on the CARD runs the two are zero against zero — neither can style them — and everywhere else the new block is ahead. Styling those runs needs a section-level prop family and a paint path for DERIVED text, which no section has yet: a part is anchored by matching an AUTHORED prop\'s string against the DOM, and `lib/puck/source-bound-parts` keeps hydrated copy unreachable on purpose so a merchant cannot type into a copy of a product name and lose it at the next sync. That is its own card, and `lib/sections/text-regions` is the read-only half that already ships.\n\nTHE TYPE KEY STAYS AND SO DOES THE COMPONENT, the same contract Subscribe, Split and SubscribeBlogs have. Every page holding a `CompatibleTyres` still renders through it, no published document is rewritten, and NO MIGRATION RUNS — the owner\'s standing ruling of 2026-09-05: he redoes live sections himself and deletes the old ones when he does. He also said explicitly not to count them first.\n\n⚠️ AND THIS COMPONENT IS LOAD-BEARING FOR ITS OWN REPLACEMENT: `DynamicRelatedProducts` draws it for EVERY tyre answer. Deleting it would blank the block that replaces it, not just the pages still holding this one.',SubscribeBlogs:"card 66396 — folded into `Subscribe`, which now chooses its rail's content with a `Type` control (the newsletter's own issues, or live blog posts). The two shared 21 of their fields and rendered THE SAME BYTES from equivalent rows, so offering both asked a merchant to choose between two names for one section. The type key stays because it is stored on published pages, and the component stays because those pages still render through it."},m=["Grid"],y=Array.from(new Set([...o.flatMap(e=>e.sections.map(t=>t.type)),...Object.keys(l)])),u=Object.fromEntries(o.flatMap(e=>e.sections.map(t=>[t.type,t.label]))),i={Heading:"general",Text:"general",Eyebrow:"general",ImageBlock:"general",LogoBlock:"general",ButtonBlock:"general",PostCard:"general",HeroSlide:"general",HeroGroup:"general",Integrations:"general",Grid:"general",CollectionCard:"commerce",GalleryItem:"commerce",ProductRef:"commerce",CompatibleTyres:"commerce",Header:"commerce",SearchBlock:"commerce",CartBlock:"commerce",CountrySwitchBlock:"commerce",SubmitBox:"service",BookingBox:"service",SubscribeBlogs:"service",Footer:"service",FooterLogo:"service",FooterMenu:"service",FooterDivider:"service",FooterGroup:"service",FooterText:"service",FooterEmailSignup:"service",FooterSocial:"service",MenuBlock:"service",EmailFormBlock:"service",SocialLogosBlock:"service",LegalLineBlock:"service",SiteHeader:"service",SiteFooter:"service"},a={...i,...Object.fromEntries(o.flatMap(e=>e.sections.map(t=>[t.type,t.set])))};function b(e){return Object.prototype.hasOwnProperty.call(a,e)?a[e]:void 0}function r(e){return Object.keys(a).filter(t=>a[t]===e).sort()}const g=r("general"),T=r("commerce"),S=r("service"),c="Flex",s="Box",E=`${s}es`;function d(e){return e==="section"?"Blank section":s}function w(e,t,n){return e===c?d(t):n}export{y as ALL_SECTION_TYPES,p as BLOCK_SETS,s as BOX_LABEL,E as BOX_LABEL_PLURAL,T as COMMERCE_BLOCKS,g as GENERAL_BLOCKS,c as LEVEL_NAMED_TYPE,m as RETIRED_NESTABLE_SECTIONS,l as RETIRED_SECTIONS,o as SECTION_CATALOG,u as SECTION_LABELS,S as SERVICE_BLOCKS,i as UNLISTED_BLOCK_SETS,b as blockSetOf,r as blocksInSet,h as buildPuckCategories,w as labelAtLevel,d as labelForFlex};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
const e={Hero:"Full-screen opener with rotating slides.",HeroSingle:"Full-screen image or video with a headline.",IntroBleed:"Full-bleed intro image the next section scrolls over.",Collections:"Product collections in a tidy grid.",AlloyWheelsListing:"A full product-listing page: filter rail, sortable card grid and pagination, from the live catalog. Choose which product types it shows.",CatalogFilterBar:"Filters the collection grids below it
|
|
1
|
+
const e={Hero:"Full-screen opener with rotating slides.",HeroSingle:"Full-screen image or video with a headline.",IntroBleed:"Full-bleed intro image the next section scrolls over.",Collections:"Product collections in a tidy grid.",AlloyWheelsListing:"A full product-listing page: filter rail, sortable card grid and pagination, from the live catalog. Choose which product types it shows.",CatalogFilterBar:"Filters the collection grids below it — a sticky row of Pills (the default), or Columns, one per filter you switch on.",ProductGrid:"Hand-picked products in a tidy grid.",FitmentFinder:"A vehicle picker — make, model, year and trim resolve the OEM stock fitment live.",Gallery:"Two image galleries with tabs and filters.",GalleryB:"Customer photos in a card grid with a click-to-open lightbox.",SpecStrip:"A thin one-line spec strip — small-caps items spread across the width, as a dark band or a bare hairline row.",ProductHero:"A product hero — image beside price, bullets and a buy button.",SpecTable:"A spec sheet — labeled rows of product specifications.",ProcessSteps:"A heading over columns of image, title, blurb and specs.",DetailRows:"Repeating full-width rows — eyebrow, title and copy beside a numbered close-up image, alternating sides each row.",FitmentTable:"A fitment table — per-size bolt patterns, offsets and load ratings, filterable by diameter.",CompatibleTyres:"The current product's compatible tyres — image, size, key specs and price per tyre, with an inquiry link. Display only.",RelatedProducts:"The current product's related items in a tidy row — the product page's built-in 'Pair with' cross-sell.",OrderSummary:"A display order-summary panel — items, totals and a note.",DeliveryOptions:"Delivery tiers as cards — name, window and price, one highlighted.",PaymentBadges:"A payment-methods trust strip with reassurance lines.",CheckoutCTA:"A centered 'ready to order?' headline with the checkout button.",Manifesto:"A bold brand statement beside a full-height image, with a stat strip.",ParagraphsA:"An editorial text panel with a stat strip and founders' note.",StatsParagraph:"An editorial heading and paragraph over a row of theme-color-accented stat cards.",Chart:"A titled chart — bars, line or donut — drawn from your own labeled data points.",Mockup:"A headline beside a stylized product-UI mockup card — spec sheet, fitment, portal, kanban and more.",Prose:"A plain editorial text section — eyebrow, heading and body copy.",Timeline:"An editorial aside beside a rail-marked timeline of dated entries.",TimelineTrack:"A horizontal year track of milestones — company history or roadmap.",Footprint:"A world map of your locations with a legend — designed here, sold worldwide.",TitleWithButtons:"A big headline beside a stack of call-to-action buttons.",Split:"Side-by-side image and text in two columns.",Cards:"A heading over a grid of free-text title-and-blurb cards.",FAQ:"A frequently-asked-questions accordion with a header.",Testimonials:"Customer quotes in a grid — the quote, a name and a role.",Masthead:"A journal issue header with a lead statement and contents.",Breadcrumb:"A slim trail showing where the reader is (Home / Journal…).",CategoryBar:"A sticky row of category tabs with counts and links.",FeaturedCover:"A featured article — big cover image beside a headline and dek.",LongRead:"A long-form article spread with a pull-quote and cover image.",Series:"A section heading over a grid of column cards.",Subscribe:"A newsletter signup beside a list of recent issues.",SubscribeBlogs:"A newsletter signup beside your latest blog posts, pulled live.",Events:"Latest journal posts in a three-card row.",DocMasthead:"A document header — headline, metadata and standfirst.",DocTabs:"A sticky tab bar to switch between documents.",DocBody:"Long-form document body with an 'On this page' contents list.",DocMetaCards:"A three-up meta strip for the foot of a document.",Banner:"Wide promo strip with background image.",Stats:"Highlight key numbers — years, designs.",KeyFeatures:"A theme-color chip and heading over a grid of short feature labels.",Logos:"A row of partner or brand logos.",Ticker:"A scrolling marquee of short phrases, full width.",Reviews:"Approved customer reviews in a star-rated card grid, pulled live.",SubmitBuild:"A 'Show us yours.' headline with a photo-submission form.",ReviewForm:"A write-a-review form — submissions wait for your approval before they show.",ContactRouting:"Pick who to reach, then a form that routes the message.",ContactLocations:"Your locations as a city gallery plus address and map cards.",SectionHeader:"A numbered section title with optional link.",Grid:"Multi-column container for blocks.",Flex:"An empty section. Add whatever you want inside.",Spacer:"Vertical breathing room between sections.",Divider:"A thin horizontal rule between sections.",CustomHTML:"Drop in your own sanitized HTML.",Heading:"A single heading line.",Text:"A paragraph of body copy.",ImageBlock:"A standalone image, at the width you set.",ButtonBlock:"A call-to-action button."};export{e as SECTION_DESCRIPTIONS};
|
|
@@ -1,5 +1 @@
|
|
|
1
|
-
|
|
2
|
-
import { type TreeItem } from "./content-tree.js";
|
|
3
|
-
export declare function nodeToDoc(node: TreeItem): Data;
|
|
4
|
-
export declare function docToNode(data: Data): TreeItem | null;
|
|
5
|
-
export declare function cloneNodeWithFreshIds(node: TreeItem): TreeItem;
|
|
1
|
+
export { cloneNodeWithFreshIds, docToNode, nodeToDoc } from "efficient-easel/screen/lib/puck/section-doc";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{cloneNodeWithFreshIds as d,docToNode as c,nodeToDoc as r}from"efficient-easel/screen/lib/puck/section-doc";export{d as cloneNodeWithFreshIds,c as docToNode,r as nodeToDoc};
|
|
@@ -10,7 +10,7 @@ type Node = {
|
|
|
10
10
|
};
|
|
11
11
|
export declare const sectionGroupZone: (groupId: string) => string;
|
|
12
12
|
export declare function buildSectionGroup(type: SectionGroupType, id: string, sections?: Node[]): {
|
|
13
|
-
type: "
|
|
13
|
+
type: "SiteFooter" | "SiteHeader";
|
|
14
14
|
props: {
|
|
15
15
|
id: string;
|
|
16
16
|
sections: Node[];
|
|
@@ -1,8 +1,2 @@
|
|
|
1
|
-
export
|
|
2
|
-
|
|
3
|
-
props: Record<string, unknown>;
|
|
4
|
-
};
|
|
5
|
-
export declare function slotChildName(child: SlotChild, wheelName?: (code: string) => string | undefined): string;
|
|
6
|
-
export declare function slotChildRowName(child: SlotChild, compLabel: (type: string) => string, wheelName?: (code: string) => string | undefined): string;
|
|
7
|
-
export declare function slotChildRenameProp(fields: Record<string, unknown> | undefined): "name" | "altName" | null;
|
|
8
|
-
export declare function rootRowName(node: SlotChild, fallback: string): string;
|
|
1
|
+
export { rootRowName, slotChildName, slotChildRenameProp, slotChildRowName } from "efficient-easel/screen/lib/puck/slot-child-name";
|
|
2
|
+
export type { SlotChild } from "efficient-easel/screen/lib/puck/slot-child-name";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{rootRowName as l,slotChildName as m,slotChildRenameProp as t,slotChildRowName as a}from"efficient-easel/screen/lib/puck/slot-child-name";export{l as rootRowName,m as slotChildName,t as slotChildRenameProp,a as slotChildRowName};
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export declare function dedupeSlotChildren(item: TreeItem, slots: string[]): TreeItem["props"] | null;
|
|
1
|
+
export { dedupeSlotChildren } from "efficient-easel/screen/lib/puck/slot-heal";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
import{dedupeSlotChildren as o}from"efficient-easel/screen/lib/puck/slot-heal";export{o as dedupeSlotChildren};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type { NodeDefaults, SlotSectionSpec } from "efficient-easel/screen/lib/puck/slot-section-spec";
|
|
File without changes
|
|
@@ -1,17 +1,6 @@
|
|
|
1
1
|
import { type TreeItem } from "./content-tree.js";
|
|
2
|
-
|
|
3
|
-
export
|
|
4
|
-
slot: string;
|
|
5
|
-
childType: string;
|
|
6
|
-
addLabel: string;
|
|
7
|
-
fixed?: boolean;
|
|
8
|
-
slider?: boolean;
|
|
9
|
-
seeds: (defaultsFor?: NodeDefaults) => Record<string, unknown>[];
|
|
10
|
-
legacy?: (props: Record<string, unknown>) => Record<string, unknown>[];
|
|
11
|
-
addBlocked?: (children: readonly unknown[], incoming?: unknown) => string | null;
|
|
12
|
-
skipSeed?: (props: Record<string, unknown>) => boolean;
|
|
13
|
-
notice?: (children: readonly unknown[]) => string | null;
|
|
14
|
-
}
|
|
2
|
+
import type { NodeDefaults, SlotSectionSpec } from "./slot-section-spec.js";
|
|
3
|
+
export type { NodeDefaults, SlotSectionSpec } from "./slot-section-spec.js";
|
|
15
4
|
export declare const SLOT_SECTION_SPECS: Record<string, SlotSectionSpec>;
|
|
16
5
|
export declare function registerSlotSectionSpecs(specs: Record<string, SlotSectionSpec>): void;
|
|
17
6
|
export declare function buildSlotSeedChildren(type: string, defaultsFor?: NodeDefaults): {
|
|
@@ -1,19 +1 @@
|
|
|
1
|
-
|
|
2
|
-
import { panelFieldsOf } from "./panel-fields.js";
|
|
3
|
-
type Props = Record<string, unknown>;
|
|
4
|
-
type NodeLike = {
|
|
5
|
-
type: string;
|
|
6
|
-
props: Props;
|
|
7
|
-
};
|
|
8
|
-
type ConfigLike = Parameters<typeof panelFieldsOf>[0];
|
|
9
|
-
export declare function siteStyleScope(siteId: string | null | undefined): string;
|
|
10
|
-
export declare function shopFieldKind(field: unknown): string | null;
|
|
11
|
-
export declare function nodeStyleRows(config: ConfigLike, node: NodeLike): StyleRow[];
|
|
12
|
-
export declare function copyNodeStyle(config: ConfigLike, scope: string, node: NodeLike, label: string): void;
|
|
13
|
-
export declare function planNodePaste(config: ConfigLike, scope: string, node: NodeLike, label: string): {
|
|
14
|
-
props: Props;
|
|
15
|
-
changed: boolean;
|
|
16
|
-
pasted: number;
|
|
17
|
-
message: string;
|
|
18
|
-
} | null;
|
|
19
|
-
export {};
|
|
1
|
+
export { copyNodeStyle, nodeStyleRows, planNodePaste, shopFieldKind, siteStyleScope } from "efficient-easel/screen/lib/puck/style-clipboard";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{copyNodeStyle as t,nodeStyleRows as d,planNodePaste as l,shopFieldKind as p,siteStyleScope as s}from"efficient-easel/screen/lib/puck/style-clipboard";export{t as copyNodeStyle,d as nodeStyleRows,l as planNodePaste,p as shopFieldKind,s as siteStyleScope};
|
|
@@ -1,13 +1,2 @@
|
|
|
1
|
-
export
|
|
2
|
-
|
|
3
|
-
readonly textarea: "scalar";
|
|
4
|
-
readonly plainText: "scalar";
|
|
5
|
-
readonly copyText: "scalar";
|
|
6
|
-
readonly plainTextarea: "scalar";
|
|
7
|
-
readonly textList: "list";
|
|
8
|
-
};
|
|
9
|
-
export type TextControlKind = keyof typeof TEXT_CONTROL_KINDS;
|
|
10
|
-
export type ScalarTextControlKind = {
|
|
11
|
-
[K in TextControlKind]: (typeof TEXT_CONTROL_KINDS)[K] extends "scalar" ? K : never;
|
|
12
|
-
}[TextControlKind];
|
|
13
|
-
export declare const SCALAR_TEXT_CONTROLS: readonly ScalarTextControlKind[];
|
|
1
|
+
export { SCALAR_TEXT_CONTROLS, TEXT_CONTROL_KINDS } from "efficient-easel/screen/lib/puck/text-control-kinds";
|
|
2
|
+
export type { ScalarTextControlKind, TextControlKind } from "efficient-easel/screen/lib/puck/text-control-kinds";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
import{SCALAR_TEXT_CONTROLS as _,TEXT_CONTROL_KINDS as C}from"efficient-easel/screen/lib/puck/text-control-kinds";export{_ as SCALAR_TEXT_CONTROLS,C as TEXT_CONTROL_KINDS};
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { decodePartId, encodePartId } from "./part-id.js";
|
|
1
2
|
import { type TextFieldMeta } from "./field-markers.js";
|
|
2
3
|
import { type PartRow } from "./part-rows.js";
|
|
3
4
|
export declare const PART_ATTR = "data-sf-part";
|
|
@@ -9,11 +10,7 @@ export type PartNeedle = {
|
|
|
9
10
|
texts: string[];
|
|
10
11
|
row?: PartRow;
|
|
11
12
|
};
|
|
12
|
-
export
|
|
13
|
-
export declare function decodePartId(partId: string): {
|
|
14
|
-
nodeId: string;
|
|
15
|
-
propKey: string | null;
|
|
16
|
-
} | null;
|
|
13
|
+
export { decodePartId, encodePartId };
|
|
17
14
|
export declare function partOpenOn(selectedPartId: string | null, nodeId: string): boolean;
|
|
18
15
|
export declare function normalizePartText(value: string): string;
|
|
19
16
|
export declare function holdsAuthoredText(field: unknown): boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{stripMarkup as y}from"../markup.js";import{LINK_FIELD_MARKER as h,SCAFFOLD_FIELD_MARKER as
|
|
1
|
+
import{decodePartId as T,encodePartId as L}from"./part-id.js";import{stripMarkup as y}from"../markup.js";import{LINK_FIELD_MARKER as h,SCAFFOLD_FIELD_MARKER as b,TEXT_FIELD_MARKER as u}from"./field-markers.js";import{readHidable as R}from"./hidable.js";import{SCALAR_TEXT_CONTROLS as g}from"./text-control-kinds.js";import{isStructuralTextProp as A}from"./neutralization-contracts.js";import{partRowTexts as P}from"./part-rows.js";const k="data-sf-part",z="data-sf-part-selected",X="data-sf-part-kind",_=2;function H(t,e){if(!t)return!1;const r=T(t);return!!r?.propKey&&r.nodeId===e}function E(t){return y(t).replace(/\s+/gu,"")}function x(t,e,r){const n=t[u];if(n){if(n.control==="textList"){const o=n.itemKey??"text";if(!Array.isArray(e))return;for(const c of e){const i=c?.[o];typeof i=="string"&&r.push(i)}return}const{text:s}=R(e);s?r.push(s):n.placeholder&&r.push(n.placeholder);return}if(!t[h]){if(t.type==="text"||t.type==="textarea"){typeof e=="string"&&e&&r.push(e);return}if(t.arrayFields&&Array.isArray(e)){for(const s of e)for(const[o,c]of Object.entries(t.arrayFields))x(c,s?.[o],r);return}if(t.objectFields&&e&&typeof e=="object")for(const[s,o]of Object.entries(t.objectFields))x(o,e[s],r)}}function B(t){if(!t||typeof t!="object")return!1;const e=t;return e[h]?!1:!!e[u]||e.type==="text"||e.type==="textarea"}function w(t,e){const r=t[u];return r?.label?r.label:typeof t.label=="string"?t.label:e}function j(t){const e=t.indexOf(" (");return(e>0?t.slice(0,e):t).trim()}function Y(t,e){if(!t)return[];const r=[];for(const[n,s]of Object.entries(t)){if(!s||typeof s!="object"||A(n))continue;const o=s,c=[];x(o,e?.[n],c),!c.length&&o[b]!==void 0&&x(o,o[b],c);const i=w(o,n),a=new Set;for(const{row:d,text:f}of P(o,e?.[n])){const m=E(f);m.length<_||(a.add(m),r.push({key:n,label:i,texts:[m],row:d}))}const p=new Set(a),l=[];for(const d of c){const f=E(d);f.length<_||p.has(f)||(p.add(f),l.push(f))}l.length&&r.push({key:n,label:i,texts:l})}return r}const F=g;function O(t,e){if(!e||typeof e!="object"||A(t))return null;const r=e[u];return!r||!F.includes(r.control)?null:r}function q(t,e){const r=O(t,e);return r!==null&&r.identifier!==!0}function G(t,e){if(!t)return[];const r=[];for(const[n,s]of Object.entries(t)){const o=O(n,s);if(!o)continue;const{text:c,hidden:i}=R(e?.[n]),a=c||o.placeholder||"",p=y(a).replace(/\s+/gu," ").trim();r.push({key:n,label:j(w(s,n)),preview:p,offPage:o.offPage===!0,identifier:o.identifier===!0,hidden:!!i})}return r}export{k as PART_ATTR,X as PART_KIND_ATTR,z as PART_SELECTED_ATTR,T as decodePartId,L as encodePartId,O as entryPartMetaOf,q as fieldDrawsEntryRow,B as holdsAuthoredText,E as normalizePartText,j as partHeadLabel,w as partLabel,Y as partNeedles,H as partOpenOn,G as sectionTextParts};
|
|
@@ -1,11 +1 @@
|
|
|
1
|
-
|
|
2
|
-
index: number;
|
|
3
|
-
zone?: string;
|
|
4
|
-
} | null;
|
|
5
|
-
export declare function sameSelector(a: Selector, b: Selector, rootZone: string): boolean;
|
|
6
|
-
export declare function revealSelectedTreeRow(doc?: Document | undefined): boolean;
|
|
7
|
-
export declare function markedTreeNodeId(mode: {
|
|
8
|
-
kind: string;
|
|
9
|
-
nodeId?: string;
|
|
10
|
-
}, selectedId: string | null | undefined): string | null;
|
|
11
|
-
export {};
|
|
1
|
+
export { markedTreeNodeId, revealSelectedTreeRow, sameSelector } from "efficient-easel/screen/lib/puck/tree-reveal";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
import{markedTreeNodeId as o,revealSelectedTreeRow as d,sameSelector as a}from"efficient-easel/screen/lib/puck/tree-reveal";export{o as markedTreeNodeId,d as revealSelectedTreeRow,a as sameSelector};
|
|
@@ -1,25 +1,2 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
export type NodeSelector = {
|
|
4
|
-
index: number;
|
|
5
|
-
zone?: string;
|
|
6
|
-
} | null;
|
|
7
|
-
type ComponentData = TreeItem;
|
|
8
|
-
export type SectionOps = {
|
|
9
|
-
insertComponent: (zone: string, type: string, index: number) => string;
|
|
10
|
-
insertSection: (type: string, index: number) => string;
|
|
11
|
-
replaceComponent: (zone: string, index: number, data: ComponentData) => void;
|
|
12
|
-
seedChild: (zone: string, index: number, childType: string, props: Record<string, unknown>) => void;
|
|
13
|
-
insertNode: (zone: string, index: number, node: TreeItem) => string;
|
|
14
|
-
removeComponent: (zone: string, index: number) => void;
|
|
15
|
-
reorderComponent: (zone: string, sourceIndex: number, destinationIndex: number) => void;
|
|
16
|
-
duplicateComponent: (zone: string, index: number) => void;
|
|
17
|
-
select: (selector: NodeSelector) => void;
|
|
18
|
-
setDocument: (data: Data) => void;
|
|
19
|
-
commitDocument: (data: Data) => void;
|
|
20
|
-
};
|
|
21
|
-
export type SectionOpsOptions = {
|
|
22
|
-
readOnly?: boolean;
|
|
23
|
-
};
|
|
24
|
-
export declare function useSectionOps(options?: SectionOpsOptions): SectionOps;
|
|
25
|
-
export {};
|
|
1
|
+
export { useSectionOps } from "efficient-easel/screen/lib/puck/use-section-ops";
|
|
2
|
+
export type { NodeSelector, SectionOps, SectionOpsOptions } from "efficient-easel/screen/lib/puck/use-section-ops";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use client";import{
|
|
1
|
+
"use client";import{useSectionOps as s}from"efficient-easel/screen/lib/puck/use-section-ops";export{s as useSectionOps};
|
package/dist/lib/reel.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { type HeroGroupPlacement } from "./hero-group-placement.js";
|
|
2
2
|
export declare const REEL_PLACEMENTS: readonly ["top-left", "top-center", "top-right", "left", "center", "right", "bottom-left", "bottom-center", "bottom-right"];
|
|
3
3
|
export type ReelPlacement = HeroGroupPlacement;
|
|
4
|
-
export declare const REEL_PLACEMENT_LABELS: Readonly<Record<"left" | "
|
|
4
|
+
export declare const REEL_PLACEMENT_LABELS: Readonly<Record<"left" | "center" | "top-left" | "top-center" | "top-right" | "right" | "bottom-left" | "bottom-center" | "bottom-right", string>>;
|
|
5
5
|
export declare const REEL_PLACEMENT_DEFAULT: ReelPlacement;
|
|
6
6
|
export declare const REEL_SHAPES: readonly ["cards", "dots", "numbers", "bar", "tabs"];
|
|
7
7
|
export type ReelShape = (typeof REEL_SHAPES)[number];
|
|
@@ -1,21 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export interface SectionTemplateRecord {
|
|
3
|
-
id: string;
|
|
4
|
-
name: string;
|
|
5
|
-
component_type: string;
|
|
6
|
-
node: TreeItem | null;
|
|
7
|
-
created_at: string;
|
|
8
|
-
updated_at: string;
|
|
9
|
-
}
|
|
10
|
-
export interface SectionTemplate extends SectionTemplateRecord {
|
|
11
|
-
node: TreeItem;
|
|
12
|
-
}
|
|
13
|
-
export interface SectionTemplateStore {
|
|
14
|
-
list(): Promise<SectionTemplate[]>;
|
|
15
|
-
get(id: string): Promise<SectionTemplateRecord | null>;
|
|
16
|
-
ensure(id: string, name: string, node: TreeItem): Promise<SectionTemplate>;
|
|
17
|
-
save(name: string, node: TreeItem): Promise<SectionTemplate>;
|
|
18
|
-
update(id: string, node: TreeItem): Promise<SectionTemplate>;
|
|
19
|
-
rename(id: string, name: string): Promise<SectionTemplateRecord>;
|
|
20
|
-
remove(id: string): Promise<void>;
|
|
21
|
-
}
|
|
1
|
+
export type { SectionTemplate, SectionTemplateRecord, SectionTemplateStore } from "efficient-easel/screen/lib/section-template-types";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{parseOption as t}from"../parse-option.js";const n="line",o=[{label:"Line",value:"line"},{label:"Stripes
|
|
1
|
+
import{parseOption as t}from"../parse-option.js";const n="line",o=[{label:"Line",value:"line"},{label:"Stripes · fine",value:"stripes-fine"},{label:"Stripes · medium",value:"stripes-medium"},{label:"Stripes · bold",value:"stripes-bold"}],p={"stripes-fine":{ink:4,period:12},"stripes-medium":{ink:8,period:18},"stripes-bold":{ink:14,period:28}},d=28,s="-45deg",l="color-mix(in oklab, var(--accent) 50%, var(--bg))";function a(e){return e!=="line"}function c(e){return t(o,n,e)}function E(e){if(!a(e))return null;const{ink:r,period:i}=p[e];return`repeating-linear-gradient(${s}, ${l} 0 ${r}px, transparent ${r}px ${i}px)`}export{n as DEFAULT_DIVIDER_STYLE,o as DIVIDER_STYLE_OPTIONS,s as STRIPE_ANGLE,d as STRIPE_BAND_HEIGHT_PX,l as STRIPE_INK,a as isStriped,c as parseDividerStyle,E as stripeBackground};
|