efficient-web-builder 44.0.0 → 45.0.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.
Files changed (368) hide show
  1. package/README.md +8 -0
  2. package/dist/editor/components/BlogPostSource.js +1 -1
  3. package/dist/editor/components/CanvasPartsBridge.js +1 -1
  4. package/dist/editor/components/CardShadowField.js +1 -1
  5. package/dist/editor/components/ChatSettingsPanel.js +1 -1
  6. package/dist/editor/components/FieldGlyph.js +1 -1
  7. package/dist/editor/components/LocationsGroupedField.js +1 -1
  8. package/dist/editor/components/PartInkControl.js +1 -1
  9. package/dist/editor/components/PartSettingsPanel.d.ts +0 -2
  10. package/dist/editor/components/PartSettingsPanel.js +1 -1
  11. package/dist/editor/components/PartTextBox.d.ts +6 -3
  12. package/dist/editor/components/PartTextBox.js +1 -1
  13. package/dist/editor/components/PreviewChatContext.d.ts +1 -2
  14. package/dist/editor/components/PreviewChatContext.js +1 -1
  15. package/dist/editor/components/PreviewPartAnchors.js +1 -1
  16. package/dist/editor/components/SectionIcon.js +1 -1
  17. package/dist/editor/components/SectionThemePicker.js +1 -1
  18. package/dist/editor/components/SectionWidthRows.d.ts +6 -13
  19. package/dist/editor/components/SectionWidthRows.js +1 -1
  20. package/dist/editor/components/SourceStatus.d.ts +2 -1
  21. package/dist/editor/components/SourceStatus.js +1 -1
  22. package/dist/editor/components/ThemeCard.js +1 -1
  23. package/dist/editor/components/ThemeColourField.js +1 -1
  24. package/dist/editor/components/ThemeField.js +1 -1
  25. package/dist/editor/components/TickerSettingsPanel.js +1 -1
  26. package/dist/editor/components/WebsiteScreenParts.js +1 -1
  27. package/dist/editor/components/WebsiteSettingsPanel.js +1 -1
  28. package/dist/editor/components/storefront-editor.css +90 -359
  29. package/dist/editor/components/useHostDocumentBridge.js +1 -1
  30. package/dist/editor/components/useLocationsTree.js +1 -1
  31. package/dist/editor/lib/animation/AnimationDurationRow.d.ts +3 -0
  32. package/dist/editor/lib/animation/AnimationDurationRow.js +1 -0
  33. package/dist/editor/lib/animation/entrance-fields.d.ts +4 -0
  34. package/dist/editor/lib/animation/entrance-fields.js +1 -0
  35. package/dist/editor/lib/animation/fields.d.ts +2 -0
  36. package/dist/editor/lib/animation/fields.js +1 -0
  37. package/dist/editor/lib/animation/loop-fields.d.ts +2 -0
  38. package/dist/editor/lib/animation/loop-fields.js +1 -0
  39. package/dist/editor/lib/document/ColourControl.js +1 -1
  40. package/dist/editor/lib/document/add-palette.js +1 -1
  41. package/dist/editor/lib/document/block-offer.js +1 -1
  42. package/dist/editor/lib/document/block-source-fields.d.ts +1 -1
  43. package/dist/editor/lib/document/block-source-fields.js +1 -1
  44. package/dist/editor/lib/document/blocks/general/Banner/fields.js +1 -1
  45. package/dist/editor/lib/document/blocks/general/Breadcrumb/fields.js +1 -1
  46. package/dist/editor/lib/document/blocks/general/ButtonBlock/fields.js +1 -1
  47. package/dist/editor/lib/document/blocks/general/Cards/fields.js +1 -1
  48. package/dist/editor/lib/document/blocks/general/CategoryBar/fields.js +1 -1
  49. package/dist/editor/lib/document/blocks/general/Chart/fields.js +1 -1
  50. package/dist/editor/lib/document/blocks/general/Divider/fields.js +1 -1
  51. package/dist/editor/lib/document/blocks/general/DocBody/fields.js +1 -1
  52. package/dist/editor/lib/document/blocks/general/DocMasthead/fields.js +1 -1
  53. package/dist/editor/lib/document/blocks/general/DocTabs/fields.js +1 -1
  54. package/dist/editor/lib/document/blocks/general/Eyebrow/fields.js +1 -1
  55. package/dist/editor/lib/document/blocks/general/FAQ/fields.js +1 -1
  56. package/dist/editor/lib/document/blocks/general/FeaturedCover/fields.js +1 -1
  57. package/dist/editor/lib/document/blocks/general/Flex/fields.js +1 -1
  58. package/dist/editor/lib/document/blocks/general/Footprint/fields.js +1 -1
  59. package/dist/editor/lib/document/blocks/general/Grid/fields.js +1 -1
  60. package/dist/editor/lib/document/blocks/general/Heading/fields.js +1 -1
  61. package/dist/editor/lib/document/blocks/general/Hero/fields.js +1 -1
  62. package/dist/editor/lib/document/blocks/general/HeroGroup/fields.js +1 -1
  63. package/dist/editor/lib/document/blocks/general/HeroSingle/fields.js +1 -1
  64. package/dist/editor/lib/document/blocks/general/HeroSlide/fields.js +1 -1
  65. package/dist/editor/lib/document/blocks/general/ImageBlock/fields.js +1 -1
  66. package/dist/editor/lib/document/blocks/general/Integrations/fields.js +2 -2
  67. package/dist/editor/lib/document/blocks/general/IntroBleed/fields.js +1 -1
  68. package/dist/editor/lib/document/blocks/general/KeyFeatures/fields.js +1 -1
  69. package/dist/editor/lib/document/blocks/general/LocationMap/fields.d.ts +10 -0
  70. package/dist/editor/lib/document/blocks/general/LocationMap/fields.js +1 -0
  71. package/dist/editor/lib/document/blocks/general/LogoBlock/fields.js +1 -1
  72. package/dist/editor/lib/document/blocks/general/Logos/fields.js +1 -1
  73. package/dist/editor/lib/document/blocks/general/LongRead/fields.js +1 -1
  74. package/dist/editor/lib/document/blocks/general/Manifesto/fields.js +2 -2
  75. package/dist/editor/lib/document/blocks/general/Masthead/fields.js +1 -1
  76. package/dist/editor/lib/document/blocks/general/Mockup/fields.js +2 -2
  77. package/dist/editor/lib/document/blocks/general/OrderSummary/fields.js +1 -1
  78. package/dist/editor/lib/document/blocks/general/ParagraphsA/fields.js +1 -1
  79. package/dist/editor/lib/document/blocks/general/PaymentBadges/fields.js +1 -1
  80. package/dist/editor/lib/document/blocks/general/PostCard/fields.js +1 -1
  81. package/dist/editor/lib/document/blocks/general/ProcessSteps/fields.js +1 -1
  82. package/dist/editor/lib/document/blocks/general/Prose/fields.js +1 -1
  83. package/dist/editor/lib/document/blocks/general/SectionHeader/fields.js +1 -1
  84. package/dist/editor/lib/document/blocks/general/Series/fields.js +1 -1
  85. package/dist/editor/lib/document/blocks/general/SpecStrip/fields.js +1 -1
  86. package/dist/editor/lib/document/blocks/general/Split/fields.js +1 -1
  87. package/dist/editor/lib/document/blocks/general/Stats/fields.js +1 -1
  88. package/dist/editor/lib/document/blocks/general/StatsParagraph/fields.js +1 -1
  89. package/dist/editor/lib/document/blocks/general/Testimonials/fields.js +1 -1
  90. package/dist/editor/lib/document/blocks/general/Text/fields.js +1 -1
  91. package/dist/editor/lib/document/blocks/general/Ticker/fields.js +1 -1
  92. package/dist/editor/lib/document/blocks/general/Timeline/fields.js +1 -1
  93. package/dist/editor/lib/document/blocks/general/TimelineTrack/fields.js +1 -1
  94. package/dist/editor/lib/document/blocks/general/TitleWithButtons/fields.js +1 -1
  95. package/dist/editor/lib/document/blocks/general/index.d.ts +2 -2
  96. package/dist/editor/lib/document/blocks/general/index.js +1 -1
  97. package/dist/editor/lib/document/blocks/shared-fields.d.ts +3 -4
  98. package/dist/editor/lib/document/blocks/shared-fields.js +1 -1
  99. package/dist/editor/lib/document/box-fields.d.ts +32 -0
  100. package/dist/editor/lib/document/box-fields.js +1 -0
  101. package/dist/editor/lib/document/box-gutter-field.d.ts +1 -0
  102. package/dist/editor/lib/document/box-gutter-field.js +1 -0
  103. package/dist/editor/lib/document/card-row-fields.d.ts +1 -1
  104. package/dist/editor/lib/document/card-row-fields.js +1 -1
  105. package/dist/editor/lib/document/consent-words-field.d.ts +2 -3
  106. package/dist/editor/lib/document/consent-words-field.js +1 -1
  107. package/dist/editor/lib/document/controls.d.ts +34 -94
  108. package/dist/editor/lib/document/controls.js +1 -1
  109. package/dist/editor/lib/document/enclosing-section.d.ts +5 -1
  110. package/dist/editor/lib/document/enclosing-section.js +1 -1
  111. package/dist/editor/lib/document/field-groups.js +1 -1
  112. package/dist/editor/lib/document/general-registry.js +1 -1
  113. package/dist/editor/lib/document/overrides.js +1 -1
  114. package/dist/editor/lib/document/page-root-fields.d.ts +1 -1
  115. package/dist/editor/lib/document/page-root-fields.js +1 -1
  116. package/dist/editor/lib/document/page-root.d.ts +2 -7
  117. package/dist/editor/lib/document/page-root.js +2 -2
  118. package/dist/editor/lib/document/part-anchors.d.ts +0 -1
  119. package/dist/editor/lib/document/part-anchors.js +1 -1
  120. package/dist/editor/lib/document/part-panel-rows.d.ts +75 -0
  121. package/dist/editor/lib/document/part-panel-rows.js +1 -0
  122. package/dist/editor/lib/document/passes/inspector.js +1 -1
  123. package/dist/editor/lib/document/separator-field.d.ts +10 -0
  124. package/dist/editor/lib/document/separator-field.js +1 -0
  125. package/dist/editor/lib/document/shell-glyph.d.ts +2 -0
  126. package/dist/editor/lib/document/shell-glyph.js +1 -0
  127. package/dist/{format → editor}/lib/host-document-bridge.d.ts +1 -3
  128. package/dist/editor/lib/host-document-bridge.js +1 -0
  129. package/dist/editor/lib/pinned-chrome-doc.js +1 -1
  130. package/dist/editor/lib/sections/new-section-node.js +1 -1
  131. package/dist/editor/lib/sections/section-dry-run.d.ts +13 -2
  132. package/dist/editor/lib/sections/section-dry-run.js +2 -2
  133. package/dist/editor/lib/sections/text-layouts.d.ts +6 -0
  134. package/dist/editor/lib/sections/text-layouts.js +1 -0
  135. package/dist/editor/lib/source-rules/part-slider-fills-row.d.ts +1 -0
  136. package/dist/editor/lib/source-rules/part-slider-fills-row.js +5 -5
  137. package/dist/format/lib/animation/index.d.ts +1 -0
  138. package/dist/format/lib/animation/index.js +1 -0
  139. package/dist/format/lib/animation/loop.d.ts +29 -0
  140. package/dist/format/lib/animation/loop.js +1 -0
  141. package/dist/format/lib/content/block-size.d.ts +59 -0
  142. package/dist/format/lib/content/block-size.js +1 -0
  143. package/dist/format/lib/content/box-background.js +1 -1
  144. package/dist/format/lib/content/box-layout.d.ts +16 -37
  145. package/dist/format/lib/content/box-layout.js +1 -1
  146. package/dist/format/lib/content/box-link.d.ts +13 -0
  147. package/dist/format/lib/content/box-link.js +13 -0
  148. package/dist/format/lib/content/box-separator.d.ts +10 -0
  149. package/dist/format/lib/content/box-separator.js +1 -0
  150. package/dist/format/lib/content/box-shape.d.ts +10 -0
  151. package/dist/format/lib/content/box-shape.js +1 -0
  152. package/dist/format/lib/content/button-icon.d.ts +1 -0
  153. package/dist/format/lib/content/button-icon.js +1 -1
  154. package/dist/format/lib/content/card-corners.d.ts +0 -3
  155. package/dist/format/lib/content/card-corners.js +1 -1
  156. package/dist/format/lib/content/card-template.d.ts +2 -0
  157. package/dist/format/lib/content/card-template.js +1 -1
  158. package/dist/format/lib/content/cart-drawer.d.ts +7 -0
  159. package/dist/format/lib/content/cart-drawer.js +1 -1
  160. package/dist/format/lib/content/chat-launcher.js +1 -1
  161. package/dist/format/lib/content/container-gap.d.ts +9 -1
  162. package/dist/format/lib/content/container-gap.js +1 -1
  163. package/dist/format/lib/content/gallery-card-layout.js +1 -1
  164. package/dist/format/lib/content/gallery-layout.d.ts +1 -0
  165. package/dist/format/lib/content/gallery-layout.js +1 -1
  166. package/dist/format/lib/content/page-background.js +1 -1
  167. package/dist/format/lib/content/post-date.d.ts +1 -0
  168. package/dist/format/lib/content/post-date.js +1 -0
  169. package/dist/format/lib/content/scrim.d.ts +1 -0
  170. package/dist/format/lib/content/scrim.js +1 -0
  171. package/dist/format/lib/content/section-min-height.d.ts +4 -0
  172. package/dist/format/lib/content/section-min-height.js +1 -1
  173. package/dist/format/lib/content/section-width.d.ts +2 -18
  174. package/dist/format/lib/content/section-width.js +1 -1
  175. package/dist/format/lib/content/site-gutter.d.ts +11 -1
  176. package/dist/format/lib/content/site-gutter.js +1 -1
  177. package/dist/format/lib/content/tint.d.ts +1 -0
  178. package/dist/format/lib/content/tint.js +1 -0
  179. package/dist/format/lib/document/blocks/block-types.d.ts +0 -1
  180. package/dist/format/lib/document/blocks/general/HeroSingle/meta.js +1 -1
  181. package/dist/format/lib/document/blocks/general/HeroSlide/meta.js +1 -1
  182. package/dist/format/lib/document/blocks/general/IntroBleed/meta.js +1 -1
  183. package/dist/format/lib/document/blocks/general/LocationMap/meta.d.ts +2 -0
  184. package/dist/format/lib/document/blocks/general/LocationMap/meta.js +1 -0
  185. package/dist/format/lib/document/blocks/general/SpecStrip/meta.d.ts +5 -0
  186. package/dist/format/lib/document/blocks/general/SpecStrip/meta.js +1 -1
  187. package/dist/format/lib/document/blocks/general/Ticker/meta.js +1 -1
  188. package/dist/format/lib/document/blocks/general/metas.d.ts +1 -0
  189. package/dist/format/lib/document/blocks/general/metas.js +1 -1
  190. package/dist/format/lib/document/blocks/general/text-part-shapes.json +30 -0
  191. package/dist/format/lib/document/box-footer.d.ts +1 -0
  192. package/dist/format/lib/document/box-footer.js +1 -1
  193. package/dist/format/lib/document/cap-hero-groups.js +1 -1
  194. package/dist/format/lib/document/container-blocks.js +1 -1
  195. package/dist/format/lib/document/editor-site-widths.d.ts +2 -0
  196. package/dist/format/lib/document/editor-site-widths.js +1 -0
  197. package/dist/format/lib/document/general-order.d.ts +1 -1
  198. package/dist/format/lib/document/general-order.js +1 -1
  199. package/dist/format/lib/document/media-manifest.json +3 -2
  200. package/dist/format/lib/document/part-inks.js +1 -1
  201. package/dist/format/lib/document/passes/document-position.js +1 -1
  202. package/dist/format/lib/document/passes/settings-groups.js +1 -1
  203. package/dist/format/lib/document/passes/types.d.ts +10 -5
  204. package/dist/format/lib/document/renamed-props.js +1 -1
  205. package/dist/format/lib/document/section-catalog.js +2 -2
  206. package/dist/format/lib/editor-words-catalogue.d.ts +32 -31
  207. package/dist/format/lib/editor-words-catalogue.js +6 -6
  208. package/dist/format/lib/fit-words.js +77 -18
  209. package/dist/format/lib/fonts.d.ts +1 -0
  210. package/dist/format/lib/fonts.js +1 -1
  211. package/dist/format/lib/hero-group-placement.js +1 -1
  212. package/dist/format/lib/hero-texture.d.ts +1 -1
  213. package/dist/format/lib/hero-texture.js +1 -1
  214. package/dist/format/lib/locations-grid.d.ts +1 -0
  215. package/dist/format/lib/locations-grid.js +1 -1
  216. package/dist/format/lib/map-styles.d.ts +0 -1
  217. package/dist/format/lib/map-styles.js +1 -1
  218. package/dist/format/lib/popup/look.js +1 -1
  219. package/dist/format/lib/popup/text-kinds.d.ts +0 -1
  220. package/dist/format/lib/popup/text-kinds.js +1 -1
  221. package/dist/format/lib/sections/hero-overlay.d.ts +1 -1
  222. package/dist/format/lib/sections/hero-overlay.js +1 -1
  223. package/dist/format/lib/sections/section-head-placement.d.ts +0 -4
  224. package/dist/format/lib/sections/section-head-placement.js +1 -1
  225. package/dist/format/lib/sections/section-presets.js +1 -1
  226. package/dist/format/lib/sections/strip-shape.d.ts +16 -0
  227. package/dist/format/lib/sections/strip-shape.js +1 -0
  228. package/dist/format/lib/sections/timeline-year-shape.d.ts +4 -0
  229. package/dist/format/lib/sections/timeline-year-shape.js +1 -0
  230. package/dist/format/lib/source-rules/box-fields-from-easel.d.ts +4 -0
  231. package/dist/format/lib/source-rules/box-fields-from-easel.js +8 -0
  232. package/dist/format/lib/source-rules/editor-chrome-note.js +1 -1
  233. package/dist/format/lib/source-rules/editor-words.js +2 -2
  234. package/dist/format/lib/source-rules/no-glyph-rows.d.ts +0 -4
  235. package/dist/format/lib/source-rules/no-glyph-rows.js +4 -4
  236. package/dist/format/lib/source-rules/one-loop-module.d.ts +7 -0
  237. package/dist/format/lib/source-rules/one-loop-module.js +6 -0
  238. package/dist/format/lib/source-rules/one-node-list.d.ts +2 -0
  239. package/dist/format/lib/source-rules/one-node-list.js +1 -0
  240. package/dist/format/lib/source-rules/one-page-theme-reader.d.ts +6 -0
  241. package/dist/format/lib/source-rules/one-page-theme-reader.js +6 -0
  242. package/dist/format/lib/source-rules/part-style-naming.js +1 -1
  243. package/dist/format/lib/source-rules/shell-width-token-not-colour.d.ts +5 -0
  244. package/dist/format/lib/source-rules/shell-width-token-not-colour.js +2 -0
  245. package/dist/format/lib/source-rules/site-square-by-default.js +3 -3
  246. package/dist/format/lib/source-rules/support/panel-select-cascade.js +2 -2
  247. package/dist/format/lib/theme.d.ts +3 -0
  248. package/dist/format/lib/theme.js +4 -4
  249. package/dist/render/components/Banner.js +1 -1
  250. package/dist/render/components/ButtonBlock.d.ts +1 -0
  251. package/dist/render/components/ButtonBlock.js +1 -1
  252. package/dist/render/components/CardRowContext.d.ts +4 -4
  253. package/dist/render/components/CardRowContext.js +1 -1
  254. package/dist/render/components/Cards.d.ts +1 -0
  255. package/dist/render/components/Cards.js +1 -1
  256. package/dist/render/components/ContactLocations.js +2 -14
  257. package/dist/render/components/FeaturedCover.js +1 -1
  258. package/dist/render/components/Flex.d.ts +19 -1
  259. package/dist/render/components/Flex.js +1 -1
  260. package/dist/render/components/Grid.js +1 -1
  261. package/dist/render/components/Heading.d.ts +1 -0
  262. package/dist/render/components/Heading.js +1 -1
  263. package/dist/render/components/HeroSection.js +1 -1
  264. package/dist/render/components/HeroSingle.js +1 -1
  265. package/dist/render/components/HeroSlide.js +1 -1
  266. package/dist/render/components/HeroVideoPlay.js +1 -1
  267. package/dist/render/components/ImageBlock.d.ts +1 -2
  268. package/dist/render/components/ImageBlock.js +1 -1
  269. package/dist/render/components/InBoxContext.d.ts +2 -0
  270. package/dist/render/components/InBoxContext.js +1 -0
  271. package/dist/render/components/KeyFeatures.js +1 -1
  272. package/dist/render/components/LocationMap.d.ts +23 -0
  273. package/dist/render/components/LocationMap.js +1 -0
  274. package/dist/render/components/Logo.js +1 -1
  275. package/dist/render/components/LongRead.js +1 -1
  276. package/dist/render/components/Manifesto.d.ts +2 -1
  277. package/dist/render/components/Manifesto.js +1 -1
  278. package/dist/render/components/PreviewHeaderContext.d.ts +1 -4
  279. package/dist/render/components/PreviewHeaderContext.js +1 -1
  280. package/dist/render/components/PreviewLocationPartContext.d.ts +1 -1
  281. package/dist/render/components/PreviewLocationPartContext.js +1 -1
  282. package/dist/render/components/ProcessSteps.js +1 -1
  283. package/dist/render/components/SectionAnimation.d.ts +16 -3
  284. package/dist/render/components/SectionAnimation.js +1 -1
  285. package/dist/render/components/SiteGutterFrame.d.ts +7 -1
  286. package/dist/render/components/SiteGutterFrame.js +1 -1
  287. package/dist/render/components/SiteMap.js +1 -1
  288. package/dist/render/components/SpecStrip.d.ts +2 -4
  289. package/dist/render/components/SpecStrip.js +1 -1
  290. package/dist/render/components/Split.d.ts +2 -1
  291. package/dist/render/components/Split.js +1 -1
  292. package/dist/render/components/Text.d.ts +2 -0
  293. package/dist/render/components/Text.js +1 -1
  294. package/dist/render/components/Ticker.d.ts +5 -4
  295. package/dist/render/components/Ticker.js +1 -1
  296. package/dist/render/components/TickerSection.d.ts +5 -4
  297. package/dist/render/components/TickerSection.js +1 -1
  298. package/dist/render/components/Timeline.js +1 -1
  299. package/dist/render/components/TimelineRail.d.ts +55 -0
  300. package/dist/render/components/TimelineRail.js +1 -0
  301. package/dist/render/components/TimelineTrack.js +1 -1
  302. package/dist/render/components/goldPhrases.js +1 -1
  303. package/dist/render/lib/animation/LoopTrack.d.ts +14 -0
  304. package/dist/render/lib/animation/LoopTrack.js +1 -0
  305. package/dist/render/lib/animation/entrance.d.ts +18 -0
  306. package/dist/render/lib/animation/entrance.js +1 -0
  307. package/dist/render/lib/document/blocks/general/ButtonBlock/render.js +1 -1
  308. package/dist/render/lib/document/blocks/general/Flex/render.js +1 -1
  309. package/dist/render/lib/document/blocks/general/ImageBlock/render.js +1 -1
  310. package/dist/render/lib/document/blocks/general/LocationMap/render.d.ts +2 -0
  311. package/dist/render/lib/document/blocks/general/LocationMap/render.js +1 -0
  312. package/dist/render/lib/document/blocks/general/Manifesto/render.js +1 -1
  313. package/dist/render/lib/document/blocks/general/SectionHeader/render.js +1 -1
  314. package/dist/render/lib/document/blocks/general/Split/render.js +1 -1
  315. package/dist/render/lib/document/blocks/general/Text/render.js +1 -1
  316. package/dist/render/lib/document/blocks/general/Ticker/render.js +1 -1
  317. package/dist/render/lib/document/blocks/general/renders.d.ts +1 -0
  318. package/dist/render/lib/document/blocks/general/renders.js +1 -1
  319. package/dist/render/lib/document/blocks/general/section-head-looks.d.ts +9 -0
  320. package/dist/render/lib/document/blocks/general/section-head-looks.js +2 -0
  321. package/dist/render/lib/document/blocks/general/section-to-box-row-parts.d.ts +9 -1
  322. package/dist/render/lib/document/blocks/general/section-to-box-row-parts.js +1 -1
  323. package/dist/render/lib/document/blocks/general/section-to-box-rows-cards.d.ts +2 -0
  324. package/dist/render/lib/document/blocks/general/section-to-box-rows-cards.js +1 -0
  325. package/dist/render/lib/document/blocks/general/section-to-box-rows-head.d.ts +4 -0
  326. package/dist/render/lib/document/blocks/general/section-to-box-rows-head.js +1 -0
  327. package/dist/render/lib/document/blocks/general/section-to-box-rows-locations.d.ts +2 -0
  328. package/dist/render/lib/document/blocks/general/section-to-box-rows-locations.js +1 -0
  329. package/dist/render/lib/document/blocks/general/section-to-box-rows-logos.js +1 -1
  330. package/dist/render/lib/document/blocks/general/section-to-box-rows-stats.js +1 -1
  331. package/dist/render/lib/document/blocks/general/section-to-box-rows-strip.d.ts +2 -0
  332. package/dist/render/lib/document/blocks/general/section-to-box-rows-strip.js +1 -0
  333. package/dist/render/lib/document/blocks/general/section-to-box-rows-timeline.d.ts +2 -0
  334. package/dist/render/lib/document/blocks/general/section-to-box-rows-timeline.js +3 -0
  335. package/dist/render/lib/document/blocks/general/section-to-box-rows.js +1 -1
  336. package/dist/render/lib/document/page-frame.d.ts +3 -21
  337. package/dist/render/lib/document/page-frame.js +1 -1
  338. package/dist/render/lib/document/part-styles.d.ts +14 -13
  339. package/dist/render/lib/document/part-styles.js +2 -2
  340. package/dist/render/lib/document/passes/block-size.d.ts +3 -0
  341. package/dist/render/lib/document/passes/block-size.js +1 -0
  342. package/dist/render/lib/document/passes/cell-width.d.ts +1 -0
  343. package/dist/render/lib/document/passes/cell-width.js +1 -1
  344. package/dist/render/lib/document/passes/clickable-parts.js +1 -1
  345. package/dist/render/lib/document/passes/corners.js +1 -1
  346. package/dist/render/lib/document/passes/index.js +1 -1
  347. package/dist/render/lib/document/passes/section-anchor.d.ts +1 -0
  348. package/dist/render/lib/document/passes/section-anchor.js +1 -1
  349. package/dist/render/lib/document/passes/section-animation.d.ts +1 -0
  350. package/dist/render/lib/document/passes/section-animation.js +1 -1
  351. package/dist/render/lib/document/passes/section-padding.js +1 -1
  352. package/dist/render/lib/document/passes/section-width.d.ts +1 -4
  353. package/dist/render/lib/document/passes/section-width.js +1 -1
  354. package/dist/render/lib/sections/section-to-box.d.ts +28 -7
  355. package/dist/render/lib/sections/section-to-box.js +1 -1
  356. package/dist/render/lib/text-styles/site-text-styles.js +2 -2
  357. package/package.json +5 -5
  358. package/dist/editor/components/PartResetDot.d.ts +0 -5
  359. package/dist/editor/components/PartResetDot.js +0 -1
  360. package/dist/editor/lib/document/section-width-fields.d.ts +0 -2
  361. package/dist/editor/lib/document/section-width-fields.js +0 -1
  362. package/dist/format/lib/content/image-width.d.ts +0 -9
  363. package/dist/format/lib/content/image-width.js +0 -1
  364. package/dist/format/lib/content/section-animation.d.ts +0 -13
  365. package/dist/format/lib/content/section-animation.js +0 -1
  366. package/dist/format/lib/host-document-bridge.js +0 -1
  367. package/dist/format/lib/sections/ticker-scroll.d.ts +0 -11
  368. package/dist/format/lib/sections/ticker-scroll.js +0 -1
@@ -1,4 +1,4 @@
1
- export type WidthMode = "contained" | "page" | "full";
1
+ export type WidthMode = "page" | "full";
2
2
  export declare const WIDTH_MODES: readonly WidthMode[];
3
3
  export declare const SECTION_WIDTH_CHOICES: readonly WidthMode[];
4
4
  export declare const WIDTH_CHOICE_LABEL: Record<"full" | "page", string>;
@@ -6,33 +6,17 @@ export declare const WIDTH_INHERIT: "inherit";
6
6
  export type WidthValue = WidthMode | typeof WIDTH_INHERIT;
7
7
  export interface WidthProps {
8
8
  widthMode?: unknown;
9
- contained?: unknown;
10
- fullWidth?: unknown;
11
- pageWidth?: unknown;
12
9
  }
13
10
  export declare const isInheritValue: (v: unknown) => boolean;
14
11
  export declare function resolveWidth(props: WidthProps, defaultMode: WidthMode): {
15
12
  mode: WidthMode;
16
- pageWidth: number;
17
13
  inherited: boolean;
18
14
  };
19
15
  export declare function sectionRunsFullWidth(props: Readonly<Record<string, unknown>>): boolean;
20
16
  export type WidthAnswer = "full" | "content";
21
- export interface SectionWidths {
22
- background: WidthAnswer | null;
23
- content: WidthAnswer | null;
24
- contentMax: number | null;
25
- }
26
- export declare const FOLLOW_SITE: "site";
27
- export interface SectionWidthProps {
28
- backgroundWidth?: unknown;
29
- contentWidth?: unknown;
30
- contentMax?: unknown;
31
- }
32
17
  export type SectionWidthFamily = "hero" | "scrollOver" | "background" | "both" | "contained" | "contentColumn" | "contentFull" | "productGrid" | "capped";
33
18
  export declare const SECTION_WIDTH_FAMILY: Readonly<Record<string, SectionWidthFamily>>;
34
- export declare function sectionHasWidthRows(type: string): boolean;
35
- export declare function resolveSectionWidth(type: string, props: Readonly<Record<string, unknown>>): SectionWidths;
19
+ export declare function hasWidthFamily(type: string): boolean;
36
20
  export declare const SITE_WIDTHS_KEY = "siteWidths";
37
21
  export interface SiteWidths {
38
22
  background: WidthAnswer | null;
@@ -1 +1 @@
1
- import{PAGE_WIDTH as b}from"./page-width.js";const p=["contained","page","full"],C=["full","page"],w={full:"Full width",page:"Content width"},k="inherit",m=e=>typeof e=="string"&&p.includes(e),u=e=>e===k;function c(e,n){const t=typeof e.pageWidth=="number"?e.pageWidth:b.default;return u(e.widthMode)?{mode:"full",pageWidth:t,inherited:!0}:e.widthMode==="contained"?{mode:"page",pageWidth:t,inherited:!1}:m(e.widthMode)?{mode:e.widthMode,pageWidth:t,inherited:!1}:e.contained===!0?{mode:"page",pageWidth:t,inherited:!1}:typeof e.fullWidth=="boolean"?{mode:e.fullWidth?"full":"page",pageWidth:t,inherited:!1}:e.contained===!1?{mode:"full",pageWidth:t,inherited:!1}:{mode:n,pageWidth:t,inherited:n==="full"}}function F(e){return c(e,"page").mode==="full"}const s="site",f={Hero:"hero",HeroSingle:"hero",IntroBleed:"scrollOver",SpecStrip:"background",Timeline:"background",Footprint:"background",Prose:"background",ParagraphsA:"background",Cards:"background",KeyFeatures:"background",Chart:"background",Mockup:"background",Testimonials:"background",TitleWithButtons:"background",Countdown:"background",DocMasthead:"background",DocBody:"background",DocMetaCards:"background",Gallery:"background",GalleryB:"background",Reviews:"background",ReviewForm:"background",Form:"background",AppointmentBooking:"background",FAQ:"background",Events:"background",Split:"both",Breadcrumb:"both",Collections:"both",CatalogFilterBar:"both",AlloyWheelsListing:"both",Banner:"contained",Stats:"contained",Logos:"contained",Divider:"contained",OrderSummary:"contained",DeliveryOptions:"contained",PaymentBadges:"contained",CheckoutCTA:"contained",Flex:"contained",Grid:"contained",Manifesto:"contentColumn",SectionHeader:"contentFull",ProductHero:"contentFull",ProductGrid:"productGrid",TimelineTrack:"capped",DetailRows:"capped",FitmentTable:"capped",TyreSizes:"capped",TyreFitment:"capped",EuTyreLabel:"capped",BundleOffer:"capped",CompatibleTyres:"capped",RelatedProducts:"capped",ProcessSteps:"capped",StatsParagraph:"capped",Masthead:"capped",FeaturedCover:"capped",LongRead:"capped",Series:"capped",ContactLocations:"capped",FitmentFinder:"capped",SpecTable:"capped",Subscribe:"capped",SubscribeBlogs:"capped",ContactRouting:"capped",SubmitBuild:"capped"};function W(e){return Object.prototype.hasOwnProperty.call(f,e)}const l=e=>e==="full"||e==="content",g=e=>typeof e=="number"&&Number.isFinite(e)&&e>0,i=({widthMode:e,fullWidth:n,pageWidth:t})=>({widthMode:e,fullWidth:n,pageWidth:t}),x=["widthMode","contained","fullWidth","pageWidth"];function M(e,n){if(e==="scrollOver")return n.fullWidth!==void 0&&n.fullWidth!==null;if(u(n.widthMode))return!1;const t=e==="contentColumn"||e==="contentFull"?i(n):n;return x.some(o=>t[o]!==void 0&&t[o]!==null)}function S(e,n){const t={background:null,content:null,contentMax:null};if(!M(e,n))return t;switch(e){case"hero":return u(n.widthMode)||n.widthMode!=="full"?t:{...t,background:"full"};case"scrollOver":return n.fullWidth===!1?t:{...t,content:"full"};case"background":return c(n,"full").mode==="full"?t:{...t,background:"content"};case"both":return c(n,"full").mode==="full"?{...t,content:"full"}:{...t,background:"content"};case"contained":return c(n,"page").mode==="full"?{...t,content:"full"}:{...t,background:"content"};case"contentColumn":return c(i(n),"page").mode==="full"?{...t,content:"full"}:t;case"contentFull":return c(i(n),"full").mode==="full"?{...t,content:"full"}:t;case"productGrid":return c(n,"full").mode==="full"?{...t,content:"full"}:{background:"content",content:"content",contentMax:g(n.pageWidth)?n.pageWidth:null};case"capped":return t}}function I(e,n){if(!W(e))return{background:null,content:null,contentMax:null};const t=f[e],o=n,a=S(t,o),r=o.backgroundWidth===s?null:l(o.backgroundWidth)?o.backgroundWidth:a.background;return o.contentWidth===s?{background:r,content:null,contentMax:null}:l(o.contentWidth)?{background:r,content:o.contentWidth,contentMax:o.contentWidth==="content"&&g(o.contentMax)?o.contentMax:null}:{background:r,content:a.content,contentMax:a.contentMax}}const h="siteWidths";function d(e){return l(e)?e:null}function O(e,n){return{[h]:{background:d(e),content:d(n)}}}function y(e){const t=e.editor?.metadata?.[h];return{background:d(t?.background),content:d(t?.content)}}export{s as FOLLOW_SITE,C as SECTION_WIDTH_CHOICES,f as SECTION_WIDTH_FAMILY,h as SITE_WIDTHS_KEY,w as WIDTH_CHOICE_LABEL,k as WIDTH_INHERIT,p as WIDTH_MODES,u as isInheritValue,d as normalizeSiteBackground,I as resolveSectionWidth,c as resolveWidth,W as sectionHasWidthRows,F as sectionRunsFullWidth,O as siteWidthsMetadata,y as siteWidthsOf};
1
+ const r=["page","full"],l=["full","page"],g={full:"Full width",page:"Content width"},d="inherit",c=e=>typeof e=="string"&&r.includes(e),i=e=>e===d;function u(e,t){return i(e.widthMode)?{mode:"full",inherited:!0}:c(e.widthMode)?{mode:e.widthMode,inherited:!1}:{mode:t,inherited:t==="full"}}function b(e){return u(e,"page").mode==="full"}const p={Hero:"hero",HeroSingle:"hero",IntroBleed:"scrollOver",SpecStrip:"background",Timeline:"background",Footprint:"background",Prose:"background",ParagraphsA:"background",Cards:"background",KeyFeatures:"background",Chart:"background",Mockup:"background",Testimonials:"background",TitleWithButtons:"background",Countdown:"background",DocMasthead:"background",DocBody:"background",DocMetaCards:"background",Gallery:"background",GalleryB:"background",Reviews:"background",ReviewForm:"background",Form:"background",AppointmentBooking:"background",FAQ:"background",Events:"background",Split:"both",Breadcrumb:"both",Collections:"both",CatalogFilterBar:"both",AlloyWheelsListing:"both",Banner:"contained",Stats:"contained",Logos:"contained",Divider:"contained",OrderSummary:"contained",DeliveryOptions:"contained",PaymentBadges:"contained",CheckoutCTA:"contained",Flex:"contained",Grid:"contained",ContactCards:"contained",MessagingCards:"contained",OpeningHours:"contained",RateTable:"contained",Manifesto:"contentColumn",SectionHeader:"contentFull",ProductHero:"contentFull",ProductGrid:"productGrid",TimelineTrack:"capped",DetailRows:"capped",FitmentTable:"capped",TyreSizes:"capped",TyreFitment:"capped",EuTyreLabel:"capped",BundleOffer:"capped",CompatibleTyres:"capped",RelatedProducts:"capped",ProcessSteps:"capped",StatsParagraph:"capped",Masthead:"capped",FeaturedCover:"capped",LongRead:"capped",Series:"capped",ContactLocations:"capped",FitmentFinder:"capped",SpecTable:"capped",Subscribe:"capped",SubscribeBlogs:"capped",ContactRouting:"capped",SubmitBuild:"capped"};function h(e){return Object.prototype.hasOwnProperty.call(p,e)}const a="siteWidths",s=e=>e==="full"||e==="content";function n(e){return s(e)?e:null}function k(e,t){return{[a]:{background:n(e),content:n(t)}}}function m(e){const o=e.editor?.metadata?.[a];return{background:n(o?.background),content:n(o?.content)}}export{l as SECTION_WIDTH_CHOICES,p as SECTION_WIDTH_FAMILY,a as SITE_WIDTHS_KEY,g as WIDTH_CHOICE_LABEL,d as WIDTH_INHERIT,r as WIDTH_MODES,h as hasWidthFamily,i as isInheritValue,n as normalizeSiteBackground,u as resolveWidth,b as sectionRunsFullWidth,k as siteWidthsMetadata,m as siteWidthsOf};
@@ -1,2 +1,12 @@
1
+ export declare function isFrameContainer(type: unknown): boolean;
2
+ export declare const BOX_GUTTER_KEY = "contentWidth";
3
+ export declare const BOX_GUTTER_OFF = "full";
4
+ export declare const BOX_GUTTER_ON = "content";
5
+ export declare function boxGutterOf(props: Readonly<Record<string, unknown>> | undefined): boolean | undefined;
1
6
  export declare function drawsSiteGutter(contained: boolean, insideGutter: boolean): boolean;
2
- export declare function isInsideSiteGutter(content: unknown, id: unknown): boolean | undefined;
7
+ export interface BoxPlace {
8
+ insideGutter: boolean;
9
+ inBox: boolean;
10
+ }
11
+ export declare function siteDrawsGutter(siteContent: unknown): boolean;
12
+ export declare function boxPlaceOf(content: unknown, id: unknown, site: boolean): BoxPlace | undefined;
@@ -1 +1 @@
1
- import{resolveSectionWidth as p}from"./section-width.js";const a=new Set(["Flex","Grid"]);function l(t,e){return t&&!e}const y=t=>Array.isArray(t)&&t.length>0&&typeof t[0]=="object"&&t[0]!==null&&"type"in t[0];function S(t,e){if(!Array.isArray(t)||typeof e!="string")return;const o=(c,r)=>{for(const s of c){const n=s?.props??{};if(n.id===e)return r;const i=String(s?.type??""),d=a.has(i)&&l(p(i,n).content!=="full",r);for(const f of Object.values(n)){if(!y(f))continue;const u=o(f,r||d);if(u!==void 0)return u}}};return o(t,!1)}export{l as drawsSiteGutter,S as isInsideSiteGutter};
1
+ import{isNodeList as p}from"efficient-easel/data";const G=new Set(["Flex","Grid"]);function l(t){return typeof t=="string"&&G.has(t)}const O="contentWidth",B="full",T="content";function _(t){const n=t?.[O];return n===B?!1:n===T?!0:void 0}function b(t,n){return t&&!n}function F(t){return t!=="full"}function R(t,n,r){if(!Array.isArray(t)||typeof n!="string")return;const i=(d,e)=>{for(const s of d){const o=s?.props??{};if(o.id===n)return e;const u=l(s?.type),x=u&&(e.inBox?_(o)??r:r),a={insideGutter:e.insideGutter||x,inBox:e.inBox||u};for(const f of Object.values(o)){if(!p(f))continue;const c=i(f,a);if(c!==void 0)return c}}};return i(t,{insideGutter:!1,inBox:!1})}export{O as BOX_GUTTER_KEY,B as BOX_GUTTER_OFF,T as BOX_GUTTER_ON,_ as boxGutterOf,R as boxPlaceOf,b as drawsSiteGutter,l as isFrameContainer,F as siteDrawsGutter};
@@ -0,0 +1 @@
1
+ export declare const DEFAULT_TINT: "#000000";
@@ -0,0 +1 @@
1
+ const T="#000000";export{T as DEFAULT_TINT};
@@ -8,7 +8,6 @@ export type BlockSlots = Record<string, {
8
8
  }>;
9
9
  export type BlockRender = Pick<Block, "label" | "defaultProps" | "render" | "inline"> & {
10
10
  fields?: BlockSlots;
11
- widthRows?: "two";
12
11
  };
13
12
  export type BlockMeta = Omit<BlockRender, "render">;
14
13
  export type BlockFields = Pick<Block, "fields" | "resolveFields" | "resolveData"> & {
@@ -1 +1 @@
1
- import{FOCAL_DEFAULT as o}from"efficient-shell/format";import{DEFAULT_OVERLAY_COLOR as e,DEFAULT_OVERLAY_POSITION as r}from"../../../../sections/hero-overlay.js";const t={boxes:{type:"slot",allow:["HeroGroup"]}},a={label:"Hero",fields:t,defaultProps:{mediaType:"image",imageFocal:o,tintColor:"#000000",tintOpacity:0,overlay:100,overlayColor:e,overlayPosition:r}};export{a as HeroSingleMeta,t as HeroSingleSlots};
1
+ import{FOCAL_DEFAULT as e}from"efficient-shell/format";import{DEFAULT_OVERLAY_POSITION as r}from"../../../../sections/hero-overlay.js";import{DEFAULT_TINT as o}from"../../../../content/tint.js";const t={boxes:{type:"slot",allow:["HeroGroup"]}},p={label:"Hero",fields:t,defaultProps:{mediaType:"image",imageFocal:e,tintColor:o,tintOpacity:0,overlay:100,overlayColor:o,overlayPosition:r}};export{p as HeroSingleMeta,t as HeroSingleSlots};
@@ -1 +1 @@
1
- import{FOCAL_DEFAULT as e}from"efficient-shell/format";const o={groups:{type:"slot",allow:["HeroGroup"]}},r={label:"Hero Slide",fields:o,defaultProps:{mediaType:"video",videoSpeed:100,imageFocal:e,tintColor:"#000000",overlay:0}};export{r as HeroSlideMeta,o as HeroSlideSlots};
1
+ import{FOCAL_DEFAULT as o}from"efficient-shell/format";import{DEFAULT_TINT as e}from"../../../../content/tint.js";const r={groups:{type:"slot",allow:["HeroGroup"]}},i={label:"Hero Slide",fields:r,defaultProps:{mediaType:"video",videoSpeed:100,imageFocal:o,tintColor:e,overlay:0}};export{i as HeroSlideMeta,r as HeroSlideSlots};
@@ -1,2 +1,2 @@
1
1
  import{TYPE_SIZE_INHERIT as e}from"../../../../content/section-type-size.js";const o={eyebrow:"— Label",title:`Section headline
2
- *Highlight line*`,body:"A sentence or two of supporting copy."},i={label:"Scroll-Over Text",defaultProps:{eyebrow:"",title:"",body:"",imageSrc:"",imageSrcMobile:"",heightDesktop:100,heightMobile:100,overlay:60,titleSizeDesktop:e,bodySizeDesktop:e,titleSizeMobile:e,bodySizeMobile:e,ctaText:"",ctaHref:"",buttonColor:"",buttonTextColor:"",sticky:!0,uppercase:!1,contentWidth:"site"}};export{o as INTRO_PH,i as IntroBleedMeta};
2
+ *Highlight line*`,body:"A sentence or two of supporting copy."},i={label:"Scroll-Over Text",defaultProps:{eyebrow:"",title:"",body:"",imageSrc:"",imageSrcMobile:"",heightDesktop:100,heightMobile:100,overlay:60,titleSizeDesktop:e,bodySizeDesktop:e,titleSizeMobile:e,bodySizeMobile:e,ctaText:"",ctaHref:"",buttonColor:"",buttonTextColor:"",sticky:!0,uppercase:!1}};export{o as INTRO_PH,i as IntroBleedMeta};
@@ -0,0 +1,2 @@
1
+ import type { BlockMeta } from "../../block-types.js";
2
+ export declare const LocationMapMeta: BlockMeta;
@@ -0,0 +1 @@
1
+ const a={label:"Map",defaultProps:{mapTheme:"auto"}};export{a as LocationMapMeta};
@@ -1,2 +1,7 @@
1
1
  import type { BlockMeta } from "../../block-types.js";
2
+ export interface StripCell {
3
+ text?: string;
4
+ tone?: "normal" | "muted";
5
+ }
6
+ export declare const specStripScaffold: () => StripCell[];
2
7
  export declare const SpecStripMeta: BlockMeta;
@@ -1 +1 @@
1
- const t={label:"Spec Strip",defaultProps:{cells:[{text:"",tone:"normal"},{text:"",tone:"normal"}],fill:"dark"}};export{t as SpecStripMeta};
1
+ import{say as e}from"../../../../editor-words.js";const l=()=>[{text:e("Spec label"),tone:"normal"},{text:e("Spec value"),tone:"muted"},{text:e("Spec label"),tone:"normal"},{text:e("Spec value"),tone:"muted"}],o={label:"Spec Strip",defaultProps:{cells:[{text:"",tone:"normal"},{text:"",tone:"normal"}],fill:"dark"}};export{o as SpecStripMeta,l as specStripScaffold};
@@ -1 +1 @@
1
- import{DEFAULT_TICKER_SEPARATOR as e,DEFAULT_TICKER_SIZE as t}from"../../../../sections/ticker-style.js";import{DEFAULT_TICKER_SCROLL as r}from"../../../../sections/ticker-scroll.js";const T=[{text:"Ticker item"},{text:"Ticker item"},{text:"Ticker item"},{text:"Ticker item"}],c={label:"Scrolling Bar",defaultProps:{items:[],tone:"scrim",borders:!0,size:t,separator:e,scrollDirection:r,speed:50}};export{T as TICKER_SCAFFOLD_ITEMS,c as TickerMeta};
1
+ import{DEFAULT_TICKER_SEPARATOR as e,DEFAULT_TICKER_SIZE as t}from"../../../../sections/ticker-style.js";import{DEFAULT_LOOP_DIRECTION as r}from"../../../../animation/index.js";const T=[{text:"Ticker item"},{text:"Ticker item"},{text:"Ticker item"},{text:"Ticker item"}],c={label:"Scrolling Bar",defaultProps:{items:[],tone:"scrim",borders:!0,size:t,separator:e,scrollDirection:r}};export{T as TICKER_SCAFFOLD_ITEMS,c as TickerMeta};
@@ -30,6 +30,7 @@ export declare const GENERAL_METAS: {
30
30
  IntroBleed: BlockMeta;
31
31
  Countdown: BlockMeta;
32
32
  KeyFeatures: BlockMeta;
33
+ LocationMap: BlockMeta;
33
34
  LogoBlock: BlockMeta;
34
35
  Logos: BlockMeta;
35
36
  LongRead: BlockMeta;
@@ -1 +1 @@
1
- import{GENERAL_REGISTRATION_ORDER as e}from"../../general-order.js";import{BannerMeta as a}from"./Banner/meta.js";import{BreadcrumbMeta as m}from"./Breadcrumb/meta.js";import{ButtonBlockMeta as i}from"./ButtonBlock/meta.js";import{CardsMeta as p}from"./Cards/meta.js";import{CategoryBarMeta as M}from"./CategoryBar/meta.js";import{ChartMeta as f}from"./Chart/meta.js";import{ContactLocationsMeta as s}from"./ContactLocations/meta.js";import{CountdownMeta as n}from"./Countdown/meta.js";import{CustomHTMLMeta as c}from"./CustomHTML/meta.js";import{DividerMeta as d}from"./Divider/meta.js";import{DocBodyMeta as S}from"./DocBody/meta.js";import{DocMastheadMeta as l}from"./DocMasthead/meta.js";import{DocMetaCardsMeta as u}from"./DocMetaCards/meta.js";import{DocTabsMeta as T}from"./DocTabs/meta.js";import{EyebrowMeta as g}from"./Eyebrow/meta.js";import{FAQMeta as B}from"./FAQ/meta.js";import{FeaturedCoverMeta as C}from"./FeaturedCover/meta.js";import{FlexMeta as H}from"./Flex/meta.js";import{FootprintMeta as P}from"./Footprint/meta.js";import{GridMeta as y}from"./Grid/meta.js";import{HeadingMeta as h}from"./Heading/meta.js";import{HeroGroupMeta as k}from"./HeroGroup/meta.js";import{HeroMeta as E}from"./Hero/meta.js";import{HeroSingleMeta as L}from"./HeroSingle/meta.js";import{HeroSlideMeta as A}from"./HeroSlide/meta.js";import{ImageBlockMeta as D}from"./ImageBlock/meta.js";import{IntegrationsMeta as F}from"./Integrations/meta.js";import{IntroBleedMeta as R}from"./IntroBleed/meta.js";import{KeyFeaturesMeta as I}from"./KeyFeatures/meta.js";import{LogoBlockMeta as x}from"./LogoBlock/meta.js";import{LogosMeta as G}from"./Logos/meta.js";import{LongReadMeta as b}from"./LongRead/meta.js";import{ManifestoMeta as _}from"./Manifesto/meta.js";import{MastheadMeta as v}from"./Masthead/meta.js";import{MockupMeta as w}from"./Mockup/meta.js";import{OrderSummaryMeta as O}from"./OrderSummary/meta.js";import{ParagraphsAMeta as N}from"./ParagraphsA/meta.js";import{PaymentBadgesMeta as K}from"./PaymentBadges/meta.js";import{PostCardMeta as Q}from"./PostCard/meta.js";import{ProcessStepsMeta as W}from"./ProcessSteps/meta.js";import{ProseMeta as X}from"./Prose/meta.js";import{SectionHeaderMeta as j}from"./SectionHeader/meta.js";import{SeriesMeta as q}from"./Series/meta.js";import{SpacerMeta as z}from"./Spacer/meta.js";import{SpecStripMeta as J}from"./SpecStrip/meta.js";import{SplitMeta as U}from"./Split/meta.js";import{StatsMeta as V}from"./Stats/meta.js";import{StatsParagraphMeta as Y}from"./StatsParagraph/meta.js";import{TestimonialsMeta as Z}from"./Testimonials/meta.js";import{TextMeta as $}from"./Text/meta.js";import{TickerMeta as oo}from"./Ticker/meta.js";import{TimelineMeta as to}from"./Timeline/meta.js";import{TimelineTrackMeta as ro}from"./TimelineTrack/meta.js";import{TitleWithButtonsMeta as eo}from"./TitleWithButtons/meta.js";import ao from"./text-part-shapes.json";const mo={Banner:a,Breadcrumb:m,ButtonBlock:i,Cards:p,CategoryBar:M,Chart:f,ContactLocations:s,CustomHTML:c,Divider:d,DocBody:S,DocMasthead:l,DocMetaCards:u,DocTabs:T,Eyebrow:g,FAQ:B,FeaturedCover:C,Flex:H,Footprint:P,Grid:y,Heading:h,Hero:E,HeroGroup:k,HeroSingle:L,HeroSlide:A,ImageBlock:D,Integrations:F,IntroBleed:R,Countdown:n,KeyFeatures:I,LogoBlock:x,Logos:G,LongRead:b,Manifesto:_,Masthead:v,Mockup:w,OrderSummary:O,ParagraphsA:N,PaymentBadges:K,PostCard:Q,ProcessSteps:W,Prose:X,SectionHeader:j,Series:q,Spacer:z,SpecStrip:J,Split:U,Stats:V,StatsParagraph:Y,Testimonials:Z,Text:$,Ticker:oo,Timeline:to,TimelineTrack:ro,TitleWithButtons:eo},io=ao;function st(){const t={};for(const o of e){const r=io[o];t[o]={...mo[o],...r?{textParts:r}:null}}return t}export{mo as GENERAL_METAS,st as generalRenderMetas};
1
+ import{GENERAL_REGISTRATION_ORDER as e}from"../../general-order.js";import{BannerMeta as a}from"./Banner/meta.js";import{BreadcrumbMeta as m}from"./Breadcrumb/meta.js";import{ButtonBlockMeta as i}from"./ButtonBlock/meta.js";import{CardsMeta as p}from"./Cards/meta.js";import{CategoryBarMeta as M}from"./CategoryBar/meta.js";import{ChartMeta as f}from"./Chart/meta.js";import{ContactLocationsMeta as n}from"./ContactLocations/meta.js";import{CountdownMeta as s}from"./Countdown/meta.js";import{CustomHTMLMeta as c}from"./CustomHTML/meta.js";import{DividerMeta as d}from"./Divider/meta.js";import{DocBodyMeta as S}from"./DocBody/meta.js";import{DocMastheadMeta as l}from"./DocMasthead/meta.js";import{DocMetaCardsMeta as u}from"./DocMetaCards/meta.js";import{DocTabsMeta as T}from"./DocTabs/meta.js";import{EyebrowMeta as g}from"./Eyebrow/meta.js";import{FAQMeta as B}from"./FAQ/meta.js";import{FeaturedCoverMeta as C}from"./FeaturedCover/meta.js";import{FlexMeta as H}from"./Flex/meta.js";import{FootprintMeta as P}from"./Footprint/meta.js";import{GridMeta as L}from"./Grid/meta.js";import{HeadingMeta as y}from"./Heading/meta.js";import{HeroGroupMeta as h}from"./HeroGroup/meta.js";import{HeroMeta as k}from"./Hero/meta.js";import{HeroSingleMeta as E}from"./HeroSingle/meta.js";import{HeroSlideMeta as A}from"./HeroSlide/meta.js";import{ImageBlockMeta as D}from"./ImageBlock/meta.js";import{IntegrationsMeta as F}from"./Integrations/meta.js";import{IntroBleedMeta as R}from"./IntroBleed/meta.js";import{KeyFeaturesMeta as I}from"./KeyFeatures/meta.js";import{LocationMapMeta as x}from"./LocationMap/meta.js";import{LogoBlockMeta as G}from"./LogoBlock/meta.js";import{LogosMeta as b}from"./Logos/meta.js";import{LongReadMeta as _}from"./LongRead/meta.js";import{ManifestoMeta as v}from"./Manifesto/meta.js";import{MastheadMeta as w}from"./Masthead/meta.js";import{MockupMeta as O}from"./Mockup/meta.js";import{OrderSummaryMeta as N}from"./OrderSummary/meta.js";import{ParagraphsAMeta as K}from"./ParagraphsA/meta.js";import{PaymentBadgesMeta as Q}from"./PaymentBadges/meta.js";import{PostCardMeta as W}from"./PostCard/meta.js";import{ProcessStepsMeta as X}from"./ProcessSteps/meta.js";import{ProseMeta as j}from"./Prose/meta.js";import{SectionHeaderMeta as q}from"./SectionHeader/meta.js";import{SeriesMeta as z}from"./Series/meta.js";import{SpacerMeta as J}from"./Spacer/meta.js";import{SpecStripMeta as U}from"./SpecStrip/meta.js";import{SplitMeta as V}from"./Split/meta.js";import{StatsMeta as Y}from"./Stats/meta.js";import{StatsParagraphMeta as Z}from"./StatsParagraph/meta.js";import{TestimonialsMeta as $}from"./Testimonials/meta.js";import{TextMeta as oo}from"./Text/meta.js";import{TickerMeta as to}from"./Ticker/meta.js";import{TimelineMeta as ro}from"./Timeline/meta.js";import{TimelineTrackMeta as eo}from"./TimelineTrack/meta.js";import{TitleWithButtonsMeta as ao}from"./TitleWithButtons/meta.js";import mo from"./text-part-shapes.json";const io={Banner:a,Breadcrumb:m,ButtonBlock:i,Cards:p,CategoryBar:M,Chart:f,ContactLocations:n,CustomHTML:c,Divider:d,DocBody:S,DocMasthead:l,DocMetaCards:u,DocTabs:T,Eyebrow:g,FAQ:B,FeaturedCover:C,Flex:H,Footprint:P,Grid:L,Heading:y,Hero:k,HeroGroup:h,HeroSingle:E,HeroSlide:A,ImageBlock:D,Integrations:F,IntroBleed:R,Countdown:s,KeyFeatures:I,LocationMap:x,LogoBlock:G,Logos:b,LongRead:_,Manifesto:v,Masthead:w,Mockup:O,OrderSummary:N,ParagraphsA:K,PaymentBadges:Q,PostCard:W,ProcessSteps:X,Prose:j,SectionHeader:q,Series:z,Spacer:J,SpecStrip:U,Split:V,Stats:Y,StatsParagraph:Z,Testimonials:$,Text:oo,Ticker:to,Timeline:ro,TimelineTrack:eo,TitleWithButtons:ao},po=mo;function ct(){const t={};for(const o of e){const r=po[o];t[o]={...io[o],...r?{textParts:r}:null}}return t}export{io as GENERAL_METAS,ct as generalRenderMetas};
@@ -798,6 +798,36 @@
798
798
  }
799
799
  }
800
800
  },
801
+ "LocationMap": {
802
+ "name": {
803
+ "type": "custom",
804
+ "__text": {
805
+ "control": "plainText",
806
+ "label": "Location name"
807
+ }
808
+ },
809
+ "state": {
810
+ "type": "custom",
811
+ "__text": {
812
+ "control": "plainText",
813
+ "label": "State / Province"
814
+ }
815
+ },
816
+ "country": {
817
+ "type": "custom",
818
+ "__text": {
819
+ "control": "plainText",
820
+ "label": "Country"
821
+ }
822
+ },
823
+ "address": {
824
+ "type": "custom",
825
+ "__text": {
826
+ "control": "textarea",
827
+ "label": "Address"
828
+ }
829
+ }
830
+ },
801
831
  "LogoBlock": {
802
832
  "alt": {
803
833
  "type": "custom",
@@ -4,6 +4,7 @@ type Node = {
4
4
  props: Props;
5
5
  };
6
6
  export type MakeNode = (type: string, props?: Props) => Node;
7
+ export declare const FOOTER_TEXT_PX: Record<"sm" | "md" | "lg", number>;
7
8
  export declare function pageBlocksFromFooterBlock(node: Node, make: MakeNode): Node[];
8
9
  export declare function boxFooterFromFooter(footer: Node | null, make: MakeNode, groupId: string): Node;
9
10
  export {};
@@ -1 +1 @@
1
- import{FOOTER_LOGO_PX as T}from"../logo/logo-size.js";import{resolveContainerGap as E}from"../content/container-gap.js";import{NESTED_BOX_PADDING as a}from"../content/box-layout.js";import{finiteNumber as p}from"../finite-number.js";import{buildSectionGroup as _,SITE_FOOTER_TYPE as O}from"./section-groups.js";const u="Flex",P={FooterMenu:"MenuBlock",FooterEmailSignup:"EmailFormBlock",FooterSocial:"SocialLogosBlock",FooterPayment:"PaymentLogosBlock"},x=o=>{const{id:e,...t}=o;return t},d=o=>typeof o=="string"?o:"",f={sm:12,md:13,lg:15},y="md",h=1.5,L={size:13,lineHeight:h,width:280},A=14,B=40,b=o=>o==="center"||o==="right"?o:"left";function G(o){const e={},t=[["padTop","sectionPaddingTop"],["padRight","sectionPaddingRight"],["padBottom","sectionPaddingBottom"],["padLeft","sectionPaddingLeft"]];for(const[s,r]of t){const n=p(o[s]);n&&(e[r]=n)}return e}function F(o,e){const t=o.props??{},s=P[o.type];if(s)return[e(s,x(t))];switch(o.type){case"FooterLogo":{const r=b(t.align),n=e("LogoBlock",{...t.reverse?{reverse:t.reverse}:{},...typeof t.customColor=="string"&&t.customColor?{customColor:t.customColor}:{},heightPx:Math.round(T*((p(t.widthPct)??100)/100)),href:"/",align:r,...G(t)}),i=d(t.tagline).trim();return i?[n,e("Text",{text:i,tone:"dim",align:r,_partStyles:{text:{...L}}})]:[n]}case"FooterText":{const r=typeof t.size=="string"&&t.size in f?t.size:y;return[e("Text",{text:d(t.text),tone:typeof t.tone=="string"?t.tone:"default",_partStyles:{text:{size:f[r],lineHeight:h}}})]}case"FooterDivider":{const r=p(t.thickness),n=p(t.lengthPct);return[e("Divider",{...r!==void 0?{thickness:r}:{},...n!==void 0?{lengthPct:n}:{},...t.hideOnMobile===!0?{hideOnMobile:!0}:{}})]}case"FooterGroup":{const r=Array.isArray(t.blocks)?t.blocks:[];return[e(u,{direction:t.direction==="horizontal"?"row":"column",gap:E("FooterGroup",t.gap),align:t.align==="center"||t.align==="end"?t.align:"start",...a,content:r.flatMap(n=>F(n,e))})]}default:return[]}}function M(o,e,t){const s=o&&Array.isArray(o.props?.blocks)?o.props.blocks:[],r=c=>e(u,{direction:"row",wrap:!0,share:"equal",gap:B,content:c}),n=[];let i=[];for(const c of s){const l=F(c,e);if(c.type==="FooterDivider"){i.length&&n.push(r(i)),i=[],n.push(...l);continue}l.length<=1?i.push(...l):i.push(e(u,{direction:"column",gap:A,align:"stretch",...a,content:l}))}(i.length||!n.length)&&n.push(r(i));const m=e(u,{direction:"column",content:[e("LegalLineBlock")]}),g=_(O,t,[...n,m]);return{...g,props:{...g.props,...o?.props?.width==="full"?{fullWidth:!0}:{}}}}export{M as boxFooterFromFooter,F as pageBlocksFromFooterBlock};
1
+ import{FOOTER_LOGO_PX as T}from"../logo/logo-size.js";import{resolveContainerGap as E}from"../content/container-gap.js";import{NESTED_BOX_PADDING as a}from"../content/box-layout.js";import{finiteNumber as p}from"../finite-number.js";import{buildSectionGroup as _,SITE_FOOTER_TYPE as O}from"./section-groups.js";const u="Flex",P={FooterMenu:"MenuBlock",FooterEmailSignup:"EmailFormBlock",FooterSocial:"SocialLogosBlock",FooterPayment:"PaymentLogosBlock"},x=o=>{const{id:e,...t}=o;return t},d=o=>typeof o=="string"?o:"",f={sm:12,md:13,lg:15},y="md",h=1.5,L={size:13,lineHeight:h,width:280},A=14,B=40,b=o=>o==="center"||o==="right"?o:"left";function G(o){const e={},t=[["padTop","sectionPaddingTop"],["padRight","sectionPaddingRight"],["padBottom","sectionPaddingBottom"],["padLeft","sectionPaddingLeft"]];for(const[s,r]of t){const n=p(o[s]);n&&(e[r]=n)}return e}function F(o,e){const t=o.props??{},s=P[o.type];if(s)return[e(s,x(t))];switch(o.type){case"FooterLogo":{const r=b(t.align),n=e("LogoBlock",{...t.reverse?{reverse:t.reverse}:{},...typeof t.customColor=="string"&&t.customColor?{customColor:t.customColor}:{},heightPx:Math.round(T*((p(t.widthPct)??100)/100)),href:"/",align:r,...G(t)}),i=d(t.tagline).trim();return i?[n,e("Text",{text:i,tone:"dim",align:r,_partStyles:{text:{...L}}})]:[n]}case"FooterText":{const r=typeof t.size=="string"&&t.size in f?t.size:y;return[e("Text",{text:d(t.text),tone:typeof t.tone=="string"?t.tone:"default",_partStyles:{text:{size:f[r],lineHeight:h}}})]}case"FooterDivider":{const r=p(t.thickness),n=p(t.lengthPct);return[e("Divider",{...r!==void 0?{thickness:r}:{},...n!==void 0?{lengthPct:n}:{},...t.hideOnMobile===!0?{hideOnMobile:!0}:{}})]}case"FooterGroup":{const r=Array.isArray(t.blocks)?t.blocks:[];return[e(u,{direction:t.direction==="horizontal"?"row":"column",gap:E("FooterGroup",t.gap),align:t.align==="center"||t.align==="end"?t.align:"start",...a,content:r.flatMap(n=>F(n,e))})]}default:return[]}}function M(o,e,t){const s=o&&Array.isArray(o.props?.blocks)?o.props.blocks:[],r=c=>e(u,{direction:"row",wrap:!0,share:"equal",gap:B,content:c}),n=[];let i=[];for(const c of s){const l=F(c,e);if(c.type==="FooterDivider"){i.length&&n.push(r(i)),i=[],n.push(...l);continue}l.length<=1?i.push(...l):i.push(e(u,{direction:"column",gap:A,align:"stretch",...a,content:l}))}(i.length||!n.length)&&n.push(r(i));const m=e(u,{direction:"column",content:[e("LegalLineBlock")]}),g=_(O,t,[...n,m]);return{...g,props:{...g.props,...o?.props?.width==="full"?{fullWidth:!0}:{}}}}export{f as FOOTER_TEXT_PX,M as boxFooterFromFooter,F as pageBlocksFromFooterBlock};
@@ -1 +1 @@
1
- import{HERO_GROUP_TYPE as a,HERO_SLIDE_TYPE as l,publishableGroups as m}from"../hero-group-placement.js";function b(t){return Array.isArray(t)&&t.length>0&&t.every(e=>!!e&&typeof e=="object"&&typeof e.type=="string")}function u(t){const e=t.props;if(!e)return t;let r=e,p=!1;for(const[c,o]of Object.entries(e)){if(!b(o))continue;const n=o.map(u),s=t.type===l&&n.every(f=>f.type===a)?m(n):n;(s.length!==o.length||s.some((f,i)=>f!==o[i]))&&(r===e&&(r={...e}),r[c]=s,p=!0)}return p?{...t,props:r}:t}function g(t){const e=t;if(!e||typeof e!="object")return t;let r=!1;const p={...t};if(Array.isArray(e.content)){const c=e.content.map(u);c.some((o,n)=>o!==e.content[n])&&(p.content=c,r=!0)}if(e.zones&&typeof e.zones=="object"){let c=!1;const o=Object.fromEntries(Object.entries(e.zones).map(([n,s])=>{if(!Array.isArray(s))return[n,s];const f=s.map(u);return f.some((i,y)=>i!==s[y])&&(c=!0),[n,f]}));c&&(p.zones=o,r=!0)}return r?p:t}export{g as capHeroGroups};
1
+ import{HERO_GROUP_TYPE as l,HERO_SLIDE_TYPE as m,publishableGroups as y}from"../hero-group-placement.js";import{isNodeList as b}from"efficient-easel/data";function u(t){const e=t.props;if(!e)return t;let r=e,p=!1;for(const[c,o]of Object.entries(e)){if(!b(o))continue;const n=o.map(u),s=t.type===m&&n.every(i=>i.type===l)?y(n):n;(s.length!==o.length||s.some((i,f)=>i!==o[f]))&&(r===e&&(r={...e}),r[c]=s,p=!0)}return p?{...t,props:r}:t}function h(t){const e=t;if(!e||typeof e!="object")return t;let r=!1;const p={...t};if(Array.isArray(e.content)){const c=e.content.map(u);c.some((o,n)=>o!==e.content[n])&&(p.content=c,r=!0)}if(e.zones&&typeof e.zones=="object"){let c=!1;const o=Object.fromEntries(Object.entries(e.zones).map(([n,s])=>{if(!Array.isArray(s))return[n,s];const i=s.map(u);return i.some((f,a)=>f!==s[a])&&(c=!0),[n,i]}));c&&(p.zones=o,r=!0)}return r?p:t}export{h as capHeroGroups};
@@ -1 +1 @@
1
- import{BOX_LABEL as r,SECTION_CATALOG as n}from"./section-catalog.js";const o="content",C="Flex",p="Text & media",y="Layout & structure",s=[{type:"Eyebrow",label:"Eyebrow",retired:!0},{type:"Heading",label:"Heading",retired:!0},{type:"Text",label:"Text"},{type:"ImageBlock",label:"Image"},{type:"LogoBlock",label:"Logo"},{type:"ButtonBlock",label:"Button"},{type:"Form",label:"Form"},{type:"PostCard",label:"Post Card"},{type:"Stats",label:"Stats"},{type:"MenuBlock",label:"Menu"},{type:"EmailFormBlock",label:"Email Form"},{type:"SocialLogosBlock",label:"Social Logos"},{type:"PaymentLogosBlock",label:"Payment Logos"},{type:"LegalLineBlock",label:"Legal Line"},{type:"SearchBlock",label:"Search"},{type:"CartBlock",label:"Cart"},{type:"CountrySwitchBlock",label:"Country Switch"},{type:"AccountBlock",label:"Account"},{type:"ThemeSwitchBlock",label:"Theme Switch"}].map(e=>({...e,group:p})),i=(n.find(e=>e.key==="structure")?.sections??[]).map(e=>({type:e.type,label:e.label,group:y})),c=[...s,...i],l=[{type:"Eyebrow",label:"Eyebrow",retired:!0},{type:"Heading",label:"Heading",retired:!0},{type:"Text",label:"Text"},{type:"ImageBlock",label:"Image"},{type:"LogoBlock",label:"Logo"},{type:"ButtonBlock",label:"Button"},{type:"HeroGroup",label:r}],T=l.map(e=>e.type),b=1,u=l.filter(e=>e.type!=="HeroGroup");function B(e){return e<b?l:u}const E={Flex:{slot:o,choices:()=>c},Grid:{slot:o,choices:()=>c},HeroGroup:{slot:o,choices:B}};function L(e,a=0){const t=E[e];return t?{slot:t.slot,choices:t.choices(a)}:null}export{C as BOX_TYPE,o as CONTAINER_BLOCKS_SLOT,c as CONTAINER_BLOCK_CHOICES,T as HERO_GROUP_BLOCK_TYPES,b as HERO_GROUP_NEST_DEPTH,L as containerBlocksFor};
1
+ import{BOX_LABEL as n,SECTION_CATALOG as p}from"./section-catalog.js";const o="content",T="Flex",s="Text & media",y="Layout & structure",c=[{type:"Eyebrow",label:"Eyebrow",retired:!0},{type:"Heading",label:"Heading",retired:!0},{type:"Text",label:"Text"},{type:"ImageBlock",label:"Image"},{type:"LogoBlock",label:"Logo"},{type:"LocationMap",label:"Map"},{type:"ButtonBlock",label:"Button"}],i=[...c,{type:"Form",label:"Form"},{type:"PostCard",label:"Post Card"},{type:"Stats",label:"Stats"},{type:"MenuBlock",label:"Menu"},{type:"EmailFormBlock",label:"Email Form"},{type:"SocialLogosBlock",label:"Social Logos"},{type:"PaymentLogosBlock",label:"Payment Logos"},{type:"LegalLineBlock",label:"Legal Line"},{type:"SearchBlock",label:"Search"},{type:"CartBlock",label:"Cart"},{type:"CountrySwitchBlock",label:"Country Switch"},{type:"AccountBlock",label:"Account"},{type:"ThemeSwitchBlock",label:"Theme Switch"}].map(e=>({...e,group:s})),E=(p.find(e=>e.key==="structure")?.sections??[]).map(e=>({type:e.type,label:e.label,group:y})),a=[...i,...E],l=[...c,{type:"HeroGroup",label:n}],B=l.map(e=>e.type),O=1,u=l.filter(e=>e.type!=="HeroGroup");function _(e){return e<O?l:u}const b={Flex:{slot:o,choices:()=>a},Grid:{slot:o,choices:()=>a},HeroGroup:{slot:o,choices:_}};function S(e,r=0){const t=b[e];return t?{slot:t.slot,choices:t.choices(r)}:null}export{T as BOX_TYPE,o as CONTAINER_BLOCKS_SLOT,a as CONTAINER_BLOCK_CHOICES,B as HERO_GROUP_BLOCK_TYPES,O as HERO_GROUP_NEST_DEPTH,S as containerBlocksFor};
@@ -0,0 +1,2 @@
1
+ export declare function setEditorSiteContentWidth(v: "full" | "content" | null): void;
2
+ export declare function getEditorSiteContentWidth(): "full" | "content" | null;
@@ -0,0 +1 @@
1
+ let t=null;function n(e){t=e}function i(){return t}export{i as getEditorSiteContentWidth,n as setEditorSiteContentWidth};
@@ -1,3 +1,3 @@
1
1
  import type { Config } from "efficient-easel/blocks";
2
- export declare const GENERAL_REGISTRATION_ORDER: readonly ["Heading", "Text", "Eyebrow", "ImageBlock", "LogoBlock", "ButtonBlock", "Spacer", "Divider", "Grid", "Flex", "Breadcrumb", "Masthead", "CategoryBar", "FeaturedCover", "LongRead", "Series", "Banner", "ParagraphsA", "StatsParagraph", "Timeline", "Footprint", "TimelineTrack", "TitleWithButtons", "Stats", "Integrations", "Mockup", "Chart", "KeyFeatures", "Testimonials", "Prose", "Cards", "Logos", "Ticker", "Countdown", "ContactLocations", "HeroSingle", "Hero", "HeroSlide", "HeroGroup", "PostCard", "DocMetaCards", "DocTabs", "DocMasthead", "DocBody", "FAQ", "SpecStrip", "Manifesto", "SectionHeader", "IntroBleed", "Split", "ProcessSteps", "OrderSummary", "PaymentBadges", "CustomHTML"];
2
+ export declare const GENERAL_REGISTRATION_ORDER: readonly ["Heading", "Text", "Eyebrow", "ImageBlock", "LogoBlock", "ButtonBlock", "Spacer", "Divider", "Grid", "Flex", "Breadcrumb", "Masthead", "CategoryBar", "FeaturedCover", "LongRead", "Series", "Banner", "ParagraphsA", "StatsParagraph", "Timeline", "Footprint", "TimelineTrack", "TitleWithButtons", "Stats", "Integrations", "Mockup", "Chart", "KeyFeatures", "Testimonials", "Prose", "Cards", "Logos", "Ticker", "Countdown", "ContactLocations", "LocationMap", "HeroSingle", "Hero", "HeroSlide", "HeroGroup", "PostCard", "DocMetaCards", "DocTabs", "DocMasthead", "DocBody", "FAQ", "SpecStrip", "Manifesto", "SectionHeader", "IntroBleed", "Split", "ProcessSteps", "OrderSummary", "PaymentBadges", "CustomHTML"];
3
3
  export declare function generalCategories(): Config["categories"];
@@ -1 +1 @@
1
- import{blockSetOf as n,buildBlockCategories as s}from"./section-catalog.js";const c=["Heading","Text","Eyebrow","ImageBlock","LogoBlock","ButtonBlock","Spacer","Divider","Grid","Flex","Breadcrumb","Masthead","CategoryBar","FeaturedCover","LongRead","Series","Banner","ParagraphsA","StatsParagraph","Timeline","Footprint","TimelineTrack","TitleWithButtons","Stats","Integrations","Mockup","Chart","KeyFeatures","Testimonials","Prose","Cards","Logos","Ticker","Countdown","ContactLocations","HeroSingle","Hero","HeroSlide","HeroGroup","PostCard","DocMetaCards","DocTabs","DocMasthead","DocBody","FAQ","SpecStrip","Manifesto","SectionHeader","IntroBleed","Split","ProcessSteps","OrderSummary","PaymentBadges","CustomHTML"];function d(){const e={};for(const[o,t]of Object.entries(s())){const r=t.components.filter(a=>n(a)==="general");(r.length>0||o==="structure")&&(e[o]={...t,components:r})}return e}export{c as GENERAL_REGISTRATION_ORDER,d as generalCategories};
1
+ import{blockSetOf as n,buildBlockCategories as s}from"./section-catalog.js";const c=["Heading","Text","Eyebrow","ImageBlock","LogoBlock","ButtonBlock","Spacer","Divider","Grid","Flex","Breadcrumb","Masthead","CategoryBar","FeaturedCover","LongRead","Series","Banner","ParagraphsA","StatsParagraph","Timeline","Footprint","TimelineTrack","TitleWithButtons","Stats","Integrations","Mockup","Chart","KeyFeatures","Testimonials","Prose","Cards","Logos","Ticker","Countdown","ContactLocations","LocationMap","HeroSingle","Hero","HeroSlide","HeroGroup","PostCard","DocMetaCards","DocTabs","DocMasthead","DocBody","FAQ","SpecStrip","Manifesto","SectionHeader","IntroBleed","Split","ProcessSteps","OrderSummary","PaymentBadges","CustomHTML"];function d(){const e={};for(const[o,t]of Object.entries(s())){const r=t.components.filter(a=>n(a)==="general");(r.length>0||o==="structure")&&(e[o]={...t,components:r})}return e}export{c as GENERAL_REGISTRATION_ORDER,d as generalCategories};
@@ -1,5 +1,5 @@
1
1
  {
2
- "contentHash": "f94be8c390bc1b18",
2
+ "contentHash": "035f4205f0351855",
3
3
  "schema": 1,
4
4
  "mediaFields": {
5
5
  "ImageBlock": [
@@ -96,7 +96,8 @@
96
96
  "photo",
97
97
  "poster",
98
98
  "src",
99
- "textBgSrc"
99
+ "textBgSrc",
100
+ "videoFrame"
100
101
  ],
101
102
  "snapshotObjects": {
102
103
  "ProductGrid": {
@@ -1 +1 @@
1
- import{say as m}from"../editor-words.js";import{COLOUR_TOKEN as p,WORD_STYLE_COLOURS as c,WORD_STYLE_COLOUR_LABELS as S}from"../word-styles.js";const d="#9ca3af";function O(e){return c.map(t=>({key:t,name:S[t],value:e?.[t]||d}))}function C(e){return O(e).map(t=>({name:t.key,label:m(t.name),value:t.value}))}function _(e){const t={},r=e.ownerDocument,n=r?.defaultView;if(!r||!n)return t;const u=n.getComputedStyle(e),o=r.createElement("canvas").getContext("2d");for(const s of c){const f=p[s].replace(/^var\((--[\w-]+)\)$/,"$1"),i=u.getPropertyValue(f).trim();if(!i)continue;let a=l(i);!a&&o&&(o.fillStyle="#000000",o.fillStyle=i,a=l(String(o.fillStyle))),a&&(t[s]=a)}return t}function l(e){const t=e.trim().toLowerCase();if(/^#[0-9a-f]{6}$/.test(t))return t;if(/^#[0-9a-f]{3}$/.test(t))return`#${[...t.slice(1)].map(n=>n+n).join("")}`;const r=t.match(/^rgba?\(\s*(\d+)[\s,]+(\d+)[\s,]+(\d+)/);return r?`#${r.slice(1,4).map(n=>Math.min(255,Number(n)).toString(16).padStart(2,"0")).join("")}`:null}export{O as partInks,C as partThemeColors,_ as readInks,l as toHex};
1
+ import{parseHexColor as f}from"efficient-shell/format";import{say as p}from"../editor-words.js";import{COLOUR_TOKEN as S,WORD_STYLE_COLOURS as c,WORD_STYLE_COLOUR_LABELS as d}from"../word-styles.js";const x="#9ca3af";function O(e){return c.map(t=>({key:t,name:d[t],value:e?.[t]||x}))}function g(e){return O(e).map(t=>({name:t.key,label:p(t.name),value:t.value}))}function v(e){const t={},r=e.ownerDocument,o=r?.defaultView;if(!r||!o)return t;const m=o.getComputedStyle(e),n=r.createElement("canvas").getContext("2d");for(const s of c){const u=S[s].replace(/^var\((--[\w-]+)\)$/,"$1"),i=m.getPropertyValue(u).trim();if(!i)continue;let a=l(i);!a&&n&&(n.fillStyle="#000000",n.fillStyle=i,a=l(String(n.fillStyle))),a&&(t[s]=a)}return t}function l(e){const t=e.trim().toLowerCase();if(t.startsWith("#"))return f(t);const r=t.match(/^rgba?\(\s*(\d+)[\s,]+(\d+)[\s,]+(\d+)/);return r?`#${r.slice(1,4).map(o=>Math.min(255,Number(o)).toString(16).padStart(2,"0")).join("")}`:null}export{O as partInks,g as partThemeColors,v as readInks,l as toHex};
@@ -1 +1 @@
1
- function d(o,e){const t=o.props?.id,n=e.appState?.data?.content;return!Array.isArray(n)||typeof t!="string"?!0:!n.some(i=>i?.props?.id===t)}function a(o,e){const t=o?.data?.content;if(!Array.isArray(t)||typeof e!="string")return;const n=(i,u)=>{for(const s of i){if(s?.props?.id===e)return u;for(const r of Object.values(s?.props??{}))if(Array.isArray(r)&&r.length>0&&typeof r[0]=="object"&&r[0]!==null&&"type"in r[0]){const f=n(r,s);if(f!==void 0)return f}}};return n(t,null)}export{a as findParentNode,d as isNestedNode};
1
+ import{isNodeList as u}from"efficient-easel/data";function a(o,n){const r=o.props?.id,t=n.appState?.data?.content;return!Array.isArray(t)||typeof r!="string"?!0:!t.some(e=>e?.props?.id===r)}function c(o,n){const r=o?.data?.content;if(!Array.isArray(r)||typeof n!="string")return;const t=(e,d)=>{for(const i of e){if(i?.props?.id===n)return d;for(const s of Object.values(i?.props??{}))if(u(s)){const f=t(s,i);if(f!==void 0)return f}}};return t(r,null)}export{c as findParentNode,a as isNestedNode};
@@ -1 +1 @@
1
- const i=new Set(["Reviews","Cards","FAQ","Prose","ProductHero","SpecTable","ProductGrid","ParagraphsA","KeyFeatures","Stats","StatsParagraph","Chart","Mockup","Testimonials","Logos","ContactRouting","ContactLocations","SubmitBuild","ReviewForm","Form","AppointmentBooking","OrderSummary","DeliveryOptions","PaymentBadges","CheckoutCTA","Collections","AlloyWheelsListing","CatalogFilterBar","FitmentFinder","GalleryB","DocMasthead","DocBody","DocMetaCards","Masthead","FeaturedCover","LongRead","Series","Events","SectionHeader","Grid","Flex","Spacer","Divider","CustomHTML","Breadcrumb","CategoryBar","DocTabs","Hero","HeroSingle","IntroBleed","Manifesto","Timeline","TimelineTrack","Footprint","Banner","TitleWithButtons","Ticker","SubscribeBlogs","TyreSizes","TyreFitment","EuTyreLabel","SpecStrip","ProcessSteps","DetailRows","FitmentTable","CompatibleTyres","RelatedProducts","BundleOffer","Split","Gallery","Subscribe","Countdown"]),a={name:"sectionGroups",applies:(e,o)=>o.isSection(e)&&(i.has(e)||o.isHostBlock(e)),panel(e,o,t){const r=t.assignSectionGroups;e?.fields&&(e.fields=r(e.fields,o))}},s=new Set(["HeroSlide","Heading","Text","ImageBlock","ButtonBlock","HeroGroup","GalleryItem","Footer","FooterLogo","FooterMenu","FooterGroup","FooterText","PostCard","LogoBlock","CollectionCard","Eyebrow","BookingBox","SubmitBox","FooterSocial","FooterPayment","MenuBlock","SocialLogosBlock","PaymentLogosBlock","EmailFormBlock","SearchBlock","CartBlock","CountrySwitchBlock","AccountBlock","LegalLineBlock"]),n={name:"blockGroups",applies:e=>s.has(e),panel(e,o,t){const r=t.assignSectionGroups;e?.fields&&(e.fields=r(e.fields,o))}};export{n as blockGroups,a as sectionGroups};
1
+ const i=new Set(["Reviews","Cards","FAQ","Prose","ProductHero","SpecTable","ProductGrid","ParagraphsA","KeyFeatures","Stats","StatsParagraph","Chart","Mockup","Testimonials","Logos","ContactRouting","ContactLocations","SubmitBuild","ReviewForm","Form","AppointmentBooking","OrderSummary","DeliveryOptions","PaymentBadges","CheckoutCTA","Collections","AlloyWheelsListing","CatalogFilterBar","FitmentFinder","GalleryB","DocMasthead","DocBody","DocMetaCards","Masthead","FeaturedCover","LongRead","Series","Events","SectionHeader","Grid","Flex","Spacer","Divider","CustomHTML","Breadcrumb","CategoryBar","DocTabs","Hero","HeroSingle","IntroBleed","Manifesto","Timeline","TimelineTrack","Footprint","Banner","TitleWithButtons","Ticker","SubscribeBlogs","TyreSizes","TyreFitment","EuTyreLabel","SpecStrip","ProcessSteps","DetailRows","FitmentTable","CompatibleTyres","RelatedProducts","BundleOffer","Split","Gallery","Subscribe","Countdown"]),a={name:"sectionGroups",applies:(e,o)=>o.isSection(e)&&(i.has(e)||o.isHostBlock(e)),panel(e,o,t){const r=t.assignSectionGroups;e?.fields&&(e.fields=r(e.fields,o))}},s=new Set(["HeroSlide","Heading","Text","ImageBlock","ButtonBlock","HeroGroup","GalleryItem","Footer","FooterLogo","FooterMenu","FooterGroup","FooterText","PostCard","LogoBlock","CollectionCard","LocationMap","Eyebrow","BookingBox","SubmitBox","FooterSocial","FooterPayment","MenuBlock","SocialLogosBlock","PaymentLogosBlock","EmailFormBlock","SearchBlock","CartBlock","CountrySwitchBlock","AccountBlock","LegalLineBlock","Integrations"]),n={name:"blockGroups",applies:e=>s.has(e),panel(e,o,t){const r=t.assignSectionGroups;e?.fields&&(e.fields=r(e.fields,o))}};export{n as blockGroups,a as sectionGroups};
@@ -1,4 +1,5 @@
1
- import type { ComponentType, ReactElement, ReactNode } from "react";
1
+ import type { ComponentType, ReactNode } from "react";
2
+ import type { AnimationTabKind } from "../../../../editor/lib/animation/fields.js";
2
3
  export type PassRenderProps = Record<string, unknown>;
3
4
  export type PassResolveFields = (data: {
4
5
  props?: Record<string, unknown>;
@@ -31,14 +32,18 @@ export type PassInspector = {
31
32
  cardShapeFields: () => FieldMap;
32
33
  cellWidthFields: () => FieldMap;
33
34
  widthField: (defaultMode: "full" | "page") => FieldMap;
34
- sectionWidthFields: (type: string) => FieldMap;
35
+ boxGutterFields: () => FieldMap;
35
36
  heightFields: () => FieldMap;
36
37
  anchorFields: () => FieldMap;
37
38
  stickFields: () => FieldMap;
38
39
  sectionThemeFields: (readValue?: (v: unknown) => unknown, followLabel?: string) => FieldMap;
39
- sectionAnimationFields: () => FieldMap;
40
- slider: (label: string, icon: ReactElement, min: number, max: number, step: number, fallback: number, suffix?: string) => unknown;
41
- WidthIcon: ComponentType;
40
+ animationTabFields: (kind: AnimationTabKind) => FieldMap;
41
+ blockSizeFields: (opts?: {
42
+ textFit?: "wrap" | "shrink";
43
+ }) => {
44
+ size: FieldMap;
45
+ text: FieldMap;
46
+ };
42
47
  assignSectionGroups: <T extends FieldMap>(fields: T, where: string) => T;
43
48
  dropEmptyHeadings: <T extends FieldMap>(fields: T) => T;
44
49
  rowsShownForNode: (fields: FieldMap, data: {
@@ -1 +1 @@
1
- const l={"Logos.logosPerRow":"columns","HeroSlide.tintOpacity":"overlay","Split.textBgTint":"overlay"};function u(t){return Array.isArray(t)&&t.length>0&&t.every(e=>!!e&&typeof e=="object"&&typeof e.type=="string")}function y(t){let e=t.props,c=!1;if(t.type&&e)for(const[o,r]of Object.entries(l)){const n=o.indexOf("."),i=o.slice(0,n),s=o.slice(n+1);if(i!==t.type||!(s in e))continue;const p=e[s],f={...e};delete f[s],(!(r in f)||f[r]===void 0)&&(f[r]=p),e=f,c=!0}if(e){let o=e;for(const[r,n]of Object.entries(e)){if(!u(n))continue;const i=n.map(y);i.some((s,p)=>s!==n[p])&&(o===e&&(o={...e}),o[r]=i,c=!0)}e=o}return c?{...t,props:e}:t}function m(t){const e=t;if(!e||typeof e!="object")return t;let c=!1;const o={...t};if(Array.isArray(e.content)){const r=e.content.map(y);r.some((n,i)=>n!==e.content[i])&&(o.content=r,c=!0)}if(e.zones&&typeof e.zones=="object"){let r=!1;const n=Object.fromEntries(Object.entries(e.zones).map(([i,s])=>{if(!Array.isArray(s))return[i,s];const p=s.map(y);return p.some((f,a)=>f!==s[a])&&(r=!0),[i,p]}));r&&(o.zones=n,c=!0)}return c?o:t}export{l as RENAMED_PROPS,m as migrateRenamedProps};
1
+ import{isNodeList as a}from"efficient-easel/data";const m={"Logos.logosPerRow":"columns","HeroSlide.tintOpacity":"overlay","Split.textBgTint":"overlay"};function l(n){let e=n.props,c=!1;if(n.type&&e)for(const[t,o]of Object.entries(m)){const r=t.indexOf("."),i=t.slice(0,r),s=t.slice(r+1);if(i!==n.type||!(s in e))continue;const p=e[s],f={...e};delete f[s],(!(o in f)||f[o]===void 0)&&(f[o]=p),e=f,c=!0}if(e){let t=e;for(const[o,r]of Object.entries(e)){if(!a(r))continue;const i=r.map(l);i.some((s,p)=>s!==r[p])&&(t===e&&(t={...e}),t[o]=i,c=!0)}e=t}return c?{...n,props:e}:n}function d(n){const e=n;if(!e||typeof e!="object")return n;let c=!1;const t={...n};if(Array.isArray(e.content)){const o=e.content.map(l);o.some((r,i)=>r!==e.content[i])&&(t.content=o,c=!0)}if(e.zones&&typeof e.zones=="object"){let o=!1;const r=Object.fromEntries(Object.entries(e.zones).map(([i,s])=>{if(!Array.isArray(s))return[i,s];const p=s.map(l);return p.some((f,u)=>f!==s[u])&&(o=!0),[i,p]}));o&&(t.zones=r,c=!0)}return c?t:n}export{m as RENAMED_PROPS,d as migrateRenamedProps};
@@ -1,4 +1,4 @@
1
- const h=["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:"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:"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"}]},{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:"Countdown",label:"Countdown",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:"Divider",label:"Divider",set:"general"},{type:"CustomHTML",label:"Custom HTML",set:"general"}]}];function p(){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` in the Phone view. 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/document/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/document/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.',TimelineTrack:"Lewis, 2026-10-09/10 (decisions.md ND, approved): the horizontal year rail and the Story Timeline do one job, so the rail becomes the Story Timeline's fourth Display, Track. Retired by card [MERGE] One Text Block And Click Through Parts (2026-10-22).\n\nWHAT REPLACES IT: a Story Timeline (`Timeline`) with Display set to Track. It draws this section's own component (`components/TimelineTrack`), so for the same words it draws the same bytes: the band colour (`Background color`, the same built-in), the padding, the CTA and each milestone's `Upcoming` switch (shown on each entry under Track only). An entry's `Body` is the rail's blurb. `scripts/test-timeline-track-display.tsx` §2 holds the bytes.\n\nWHAT A MERCHANT LOSES on a NEW rail, said plainly: (1) the head cannot move into a box of its own (`headPlacement`); the layered rebuild puts a head in one Box with its content anyway. (2) The year and title of every milestone are not one text kind: each run is styled on its own. (3) The Width rows follow the Story Timeline's family (`background`), not the rail's (`capped`).\n\nTHE TYPE KEY STAYS AND SO DOES THE COMPONENT. Every page holding a Milestone Timeline still renders through it and can still be edited; no document is rewritten and NO MIGRATION RUNS.",Spacer:`Lewis, 2026-10-10 (section-merges.md group 19, approved): one Divider holds space and lines. Style = None (was Spacer) / Line / Stripes; the space above and below as number boxes. Retired by card [MERGE] Spacer Into Divider (2026-10-26).
1
+ const h=["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:"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"}]},{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:"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:"Cards",label:"Cards",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:"Countdown",label:"Countdown",set:"general"}]},{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:"Divider",label:"Divider",set:"general"},{type:"CustomHTML",label:"Custom HTML",set:"general"}]},{key:"layouts",title:"Layouts",templateable:!0,sections:[{type:"Manifesto",label:"Brand Text",set:"general"},{type:"Split",label:"Image & Text Split",set:"general"},{type:"Subscribe",label:"Signup Form",set:"service"},{type:"Ticker",label:"Scrolling Bar",set:"general"},{type:"SpecStrip",label:"Spec Strip",set:"general"},{type:"TimelineTrack",label:"Milestone Timeline",set:"general"},{type:"Timeline",label:"Story Timeline",set:"general"}]}];function p(){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` in the Phone view. 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/document/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/document/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.',Spacer:`Lewis, 2026-10-10 (section-merges.md group 19, approved): one Divider holds space and lines. Style = None (was Spacer) / Line / Stripes; the space above and below as number boxes. Retired by card [MERGE] Spacer Into Divider (2026-10-26).
2
2
 
3
3
  WHAT REPLACES IT: a Divider with Style set to None. It draws no line, only its space, and that space is the Divider's Padding row (top and bottom, each with its phone value): the Spacer's 24 / 48 / 96 / 160 px are None with Padding 12 + 12, 24 + 24, 48 + 48, 80 + 80. \`scripts/test-divider-holds-the-spacer.tsx\` §5 holds it.
4
4
 
@@ -12,4 +12,4 @@ WHAT REPLACES IT: a Cards section with Card style set to Label only. It draws th
12
12
 
13
13
  WHAT A MERCHANT LOSES on a NEW Label only section: nothing this section had. It GAINS the Cards head split (its head can move into a box of its own), which Key Features never had: that head draws the shared \`simple\` head, eyebrow ABOVE the heading, where Key Features drew it beside.
14
14
 
15
- THE TYPE KEY STAYS AND SO DOES THE COMPONENT. Every page holding a Key Features still renders through it and can still be edited; no document is rewritten and NO MIGRATION RUNS.`,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","Spacer"],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",TimelineTrack:"general",KeyFeatures:"general",Spacer:"general",CollectionCard:"commerce",GalleryItem:"commerce",ProductRef:"commerce",CompatibleTyres:"commerce",Header:"commerce",SearchBlock:"commerce",CartBlock:"commerce",CountrySwitchBlock:"commerce",AccountBlock:"commerce",ThemeSwitchBlock:"commerce",ProductGallery:"commerce",EuTyreLabelBlock:"commerce",SubmitBox:"service",BookingBox:"service",SubscribeBlogs:"service",RatingBlock:"service",Footer:"service",FooterLogo:"service",FooterMenu:"service",FooterDivider:"service",FooterGroup:"service",FooterText:"service",FooterEmailSignup:"service",FooterSocial:"service",FooterPayment:"service",MenuBlock:"service",EmailFormBlock:"service",SocialLogosBlock:"service",PaymentLogosBlock:"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"),E=r("service"),c="Flex",s="Box",S=`${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,h as BLOCK_SETS,s as BOX_LABEL,S 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,E as SERVICE_BLOCKS,i as UNLISTED_BLOCK_SETS,b as blockSetOf,r as blocksInSet,p as buildBlockCategories,w as labelAtLevel,d as labelForFlex};
15
+ THE TYPE KEY STAYS AND SO DOES THE COMPONENT. Every page holding a Key Features still renders through it and can still be edited; no document is rewritten and NO MIGRATION RUNS.`,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","Spacer"],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",LocationMap:"general",ButtonBlock:"general",PostCard:"general",HeroSlide:"general",HeroGroup:"general",Integrations:"general",Grid:"general",KeyFeatures:"general",Spacer:"general",CollectionCard:"commerce",GalleryItem:"commerce",ProductRef:"commerce",CompatibleTyres:"commerce",Header:"commerce",SearchBlock:"commerce",CartBlock:"commerce",CountrySwitchBlock:"commerce",AccountBlock:"commerce",ThemeSwitchBlock:"commerce",ProductGallery:"commerce",EuTyreLabelBlock:"commerce",SubmitBox:"service",BookingBox:"service",SubscribeBlogs:"service",RatingBlock:"service",Footer:"service",FooterLogo:"service",FooterMenu:"service",FooterDivider:"service",FooterGroup:"service",FooterText:"service",FooterEmailSignup:"service",FooterSocial:"service",FooterPayment:"service",MenuBlock:"service",EmailFormBlock:"service",SocialLogosBlock:"service",PaymentLogosBlock:"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"),E=r("service"),c="Flex",s="Box",S=`${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,h as BLOCK_SETS,s as BOX_LABEL,S 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,E as SERVICE_BLOCKS,i as UNLISTED_BLOCK_SETS,b as blockSetOf,r as blocksInSet,p as buildBlockCategories,w as labelAtLevel,d as labelForFlex};