efficient-web-builder 44.0.1 → 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/CHANGELOG.md +0 -4
  2. package/README.md +8 -0
  3. package/dist/editor/components/BlogPostSource.js +1 -1
  4. package/dist/editor/components/CanvasPartsBridge.js +1 -1
  5. package/dist/editor/components/CardShadowField.js +1 -1
  6. package/dist/editor/components/ChatSettingsPanel.js +1 -1
  7. package/dist/editor/components/FieldGlyph.js +1 -1
  8. package/dist/editor/components/LocationsGroupedField.js +1 -1
  9. package/dist/editor/components/PartInkControl.js +1 -1
  10. package/dist/editor/components/PartSettingsPanel.d.ts +0 -2
  11. package/dist/editor/components/PartSettingsPanel.js +1 -1
  12. package/dist/editor/components/PartTextBox.d.ts +6 -3
  13. package/dist/editor/components/PartTextBox.js +1 -1
  14. package/dist/editor/components/PreviewChatContext.d.ts +1 -2
  15. package/dist/editor/components/PreviewChatContext.js +1 -1
  16. package/dist/editor/components/PreviewPartAnchors.js +1 -1
  17. package/dist/editor/components/SectionIcon.js +1 -1
  18. package/dist/editor/components/SectionThemePicker.js +1 -1
  19. package/dist/editor/components/SectionWidthRows.d.ts +6 -13
  20. package/dist/editor/components/SectionWidthRows.js +1 -1
  21. package/dist/editor/components/SourceStatus.d.ts +2 -1
  22. package/dist/editor/components/SourceStatus.js +1 -1
  23. package/dist/editor/components/ThemeCard.js +1 -1
  24. package/dist/editor/components/ThemeColourField.js +1 -1
  25. package/dist/editor/components/ThemeField.js +1 -1
  26. package/dist/editor/components/TickerSettingsPanel.js +1 -1
  27. package/dist/editor/components/WebsiteScreenParts.js +1 -1
  28. package/dist/editor/components/WebsiteSettingsPanel.js +1 -1
  29. package/dist/editor/components/storefront-editor.css +90 -359
  30. package/dist/editor/components/useHostDocumentBridge.js +1 -1
  31. package/dist/editor/components/useLocationsTree.js +1 -1
  32. package/dist/editor/lib/animation/AnimationDurationRow.d.ts +3 -0
  33. package/dist/editor/lib/animation/AnimationDurationRow.js +1 -0
  34. package/dist/editor/lib/animation/entrance-fields.d.ts +4 -0
  35. package/dist/editor/lib/animation/entrance-fields.js +1 -0
  36. package/dist/editor/lib/animation/fields.d.ts +2 -0
  37. package/dist/editor/lib/animation/fields.js +1 -0
  38. package/dist/editor/lib/animation/loop-fields.d.ts +2 -0
  39. package/dist/editor/lib/animation/loop-fields.js +1 -0
  40. package/dist/editor/lib/document/ColourControl.js +1 -1
  41. package/dist/editor/lib/document/add-palette.js +1 -1
  42. package/dist/editor/lib/document/block-offer.js +1 -1
  43. package/dist/editor/lib/document/block-source-fields.d.ts +1 -1
  44. package/dist/editor/lib/document/block-source-fields.js +1 -1
  45. package/dist/editor/lib/document/blocks/general/Banner/fields.js +1 -1
  46. package/dist/editor/lib/document/blocks/general/Breadcrumb/fields.js +1 -1
  47. package/dist/editor/lib/document/blocks/general/ButtonBlock/fields.js +1 -1
  48. package/dist/editor/lib/document/blocks/general/Cards/fields.js +1 -1
  49. package/dist/editor/lib/document/blocks/general/CategoryBar/fields.js +1 -1
  50. package/dist/editor/lib/document/blocks/general/Chart/fields.js +1 -1
  51. package/dist/editor/lib/document/blocks/general/Divider/fields.js +1 -1
  52. package/dist/editor/lib/document/blocks/general/DocBody/fields.js +1 -1
  53. package/dist/editor/lib/document/blocks/general/DocMasthead/fields.js +1 -1
  54. package/dist/editor/lib/document/blocks/general/DocTabs/fields.js +1 -1
  55. package/dist/editor/lib/document/blocks/general/Eyebrow/fields.js +1 -1
  56. package/dist/editor/lib/document/blocks/general/FAQ/fields.js +1 -1
  57. package/dist/editor/lib/document/blocks/general/FeaturedCover/fields.js +1 -1
  58. package/dist/editor/lib/document/blocks/general/Flex/fields.js +1 -1
  59. package/dist/editor/lib/document/blocks/general/Footprint/fields.js +1 -1
  60. package/dist/editor/lib/document/blocks/general/Grid/fields.js +1 -1
  61. package/dist/editor/lib/document/blocks/general/Heading/fields.js +1 -1
  62. package/dist/editor/lib/document/blocks/general/Hero/fields.js +1 -1
  63. package/dist/editor/lib/document/blocks/general/HeroGroup/fields.js +1 -1
  64. package/dist/editor/lib/document/blocks/general/HeroSingle/fields.js +1 -1
  65. package/dist/editor/lib/document/blocks/general/HeroSlide/fields.js +1 -1
  66. package/dist/editor/lib/document/blocks/general/ImageBlock/fields.js +1 -1
  67. package/dist/editor/lib/document/blocks/general/Integrations/fields.js +2 -2
  68. package/dist/editor/lib/document/blocks/general/IntroBleed/fields.js +1 -1
  69. package/dist/editor/lib/document/blocks/general/KeyFeatures/fields.js +1 -1
  70. package/dist/editor/lib/document/blocks/general/LocationMap/fields.d.ts +10 -0
  71. package/dist/editor/lib/document/blocks/general/LocationMap/fields.js +1 -0
  72. package/dist/editor/lib/document/blocks/general/LogoBlock/fields.js +1 -1
  73. package/dist/editor/lib/document/blocks/general/Logos/fields.js +1 -1
  74. package/dist/editor/lib/document/blocks/general/LongRead/fields.js +1 -1
  75. package/dist/editor/lib/document/blocks/general/Manifesto/fields.js +2 -2
  76. package/dist/editor/lib/document/blocks/general/Masthead/fields.js +1 -1
  77. package/dist/editor/lib/document/blocks/general/Mockup/fields.js +2 -2
  78. package/dist/editor/lib/document/blocks/general/OrderSummary/fields.js +1 -1
  79. package/dist/editor/lib/document/blocks/general/ParagraphsA/fields.js +1 -1
  80. package/dist/editor/lib/document/blocks/general/PaymentBadges/fields.js +1 -1
  81. package/dist/editor/lib/document/blocks/general/PostCard/fields.js +1 -1
  82. package/dist/editor/lib/document/blocks/general/ProcessSteps/fields.js +1 -1
  83. package/dist/editor/lib/document/blocks/general/Prose/fields.js +1 -1
  84. package/dist/editor/lib/document/blocks/general/SectionHeader/fields.js +1 -1
  85. package/dist/editor/lib/document/blocks/general/Series/fields.js +1 -1
  86. package/dist/editor/lib/document/blocks/general/SpecStrip/fields.js +1 -1
  87. package/dist/editor/lib/document/blocks/general/Split/fields.js +1 -1
  88. package/dist/editor/lib/document/blocks/general/Stats/fields.js +1 -1
  89. package/dist/editor/lib/document/blocks/general/StatsParagraph/fields.js +1 -1
  90. package/dist/editor/lib/document/blocks/general/Testimonials/fields.js +1 -1
  91. package/dist/editor/lib/document/blocks/general/Text/fields.js +1 -1
  92. package/dist/editor/lib/document/blocks/general/Ticker/fields.js +1 -1
  93. package/dist/editor/lib/document/blocks/general/Timeline/fields.js +1 -1
  94. package/dist/editor/lib/document/blocks/general/TimelineTrack/fields.js +1 -1
  95. package/dist/editor/lib/document/blocks/general/TitleWithButtons/fields.js +1 -1
  96. package/dist/editor/lib/document/blocks/general/index.d.ts +2 -2
  97. package/dist/editor/lib/document/blocks/general/index.js +1 -1
  98. package/dist/editor/lib/document/blocks/shared-fields.d.ts +3 -4
  99. package/dist/editor/lib/document/blocks/shared-fields.js +1 -1
  100. package/dist/editor/lib/document/box-fields.d.ts +32 -0
  101. package/dist/editor/lib/document/box-fields.js +1 -0
  102. package/dist/editor/lib/document/box-gutter-field.d.ts +1 -0
  103. package/dist/editor/lib/document/box-gutter-field.js +1 -0
  104. package/dist/editor/lib/document/card-row-fields.d.ts +1 -1
  105. package/dist/editor/lib/document/card-row-fields.js +1 -1
  106. package/dist/editor/lib/document/consent-words-field.d.ts +2 -3
  107. package/dist/editor/lib/document/consent-words-field.js +1 -1
  108. package/dist/editor/lib/document/controls.d.ts +34 -94
  109. package/dist/editor/lib/document/controls.js +1 -1
  110. package/dist/editor/lib/document/enclosing-section.d.ts +5 -1
  111. package/dist/editor/lib/document/enclosing-section.js +1 -1
  112. package/dist/editor/lib/document/field-groups.js +1 -1
  113. package/dist/editor/lib/document/general-registry.js +1 -1
  114. package/dist/editor/lib/document/overrides.js +1 -1
  115. package/dist/editor/lib/document/page-root-fields.d.ts +1 -1
  116. package/dist/editor/lib/document/page-root-fields.js +1 -1
  117. package/dist/editor/lib/document/page-root.d.ts +2 -7
  118. package/dist/editor/lib/document/page-root.js +2 -2
  119. package/dist/editor/lib/document/part-anchors.d.ts +0 -1
  120. package/dist/editor/lib/document/part-anchors.js +1 -1
  121. package/dist/editor/lib/document/part-panel-rows.d.ts +75 -0
  122. package/dist/editor/lib/document/part-panel-rows.js +1 -0
  123. package/dist/editor/lib/document/passes/inspector.js +1 -1
  124. package/dist/editor/lib/document/separator-field.d.ts +10 -0
  125. package/dist/editor/lib/document/separator-field.js +1 -0
  126. package/dist/editor/lib/document/shell-glyph.d.ts +2 -0
  127. package/dist/editor/lib/document/shell-glyph.js +1 -0
  128. package/dist/{format → editor}/lib/host-document-bridge.d.ts +1 -3
  129. package/dist/editor/lib/host-document-bridge.js +1 -0
  130. package/dist/editor/lib/pinned-chrome-doc.js +1 -1
  131. package/dist/editor/lib/sections/new-section-node.js +1 -1
  132. package/dist/editor/lib/sections/section-dry-run.d.ts +13 -2
  133. package/dist/editor/lib/sections/section-dry-run.js +2 -2
  134. package/dist/editor/lib/sections/text-layouts.d.ts +6 -0
  135. package/dist/editor/lib/sections/text-layouts.js +1 -0
  136. package/dist/editor/lib/source-rules/part-slider-fills-row.d.ts +1 -0
  137. package/dist/editor/lib/source-rules/part-slider-fills-row.js +5 -5
  138. package/dist/format/lib/animation/index.d.ts +1 -0
  139. package/dist/format/lib/animation/index.js +1 -0
  140. package/dist/format/lib/animation/loop.d.ts +29 -0
  141. package/dist/format/lib/animation/loop.js +1 -0
  142. package/dist/format/lib/content/block-size.d.ts +59 -0
  143. package/dist/format/lib/content/block-size.js +1 -0
  144. package/dist/format/lib/content/box-background.js +1 -1
  145. package/dist/format/lib/content/box-layout.d.ts +16 -37
  146. package/dist/format/lib/content/box-layout.js +1 -1
  147. package/dist/format/lib/content/box-link.d.ts +13 -0
  148. package/dist/format/lib/content/box-link.js +13 -0
  149. package/dist/format/lib/content/box-separator.d.ts +10 -0
  150. package/dist/format/lib/content/box-separator.js +1 -0
  151. package/dist/format/lib/content/box-shape.d.ts +10 -0
  152. package/dist/format/lib/content/box-shape.js +1 -0
  153. package/dist/format/lib/content/button-icon.d.ts +1 -0
  154. package/dist/format/lib/content/button-icon.js +1 -1
  155. package/dist/format/lib/content/card-corners.d.ts +0 -3
  156. package/dist/format/lib/content/card-corners.js +1 -1
  157. package/dist/format/lib/content/card-template.d.ts +2 -0
  158. package/dist/format/lib/content/card-template.js +1 -1
  159. package/dist/format/lib/content/cart-drawer.d.ts +7 -0
  160. package/dist/format/lib/content/cart-drawer.js +1 -1
  161. package/dist/format/lib/content/chat-launcher.js +1 -1
  162. package/dist/format/lib/content/container-gap.d.ts +9 -1
  163. package/dist/format/lib/content/container-gap.js +1 -1
  164. package/dist/format/lib/content/gallery-card-layout.js +1 -1
  165. package/dist/format/lib/content/gallery-layout.d.ts +1 -0
  166. package/dist/format/lib/content/gallery-layout.js +1 -1
  167. package/dist/format/lib/content/page-background.js +1 -1
  168. package/dist/format/lib/content/post-date.d.ts +1 -0
  169. package/dist/format/lib/content/post-date.js +1 -0
  170. package/dist/format/lib/content/scrim.d.ts +1 -0
  171. package/dist/format/lib/content/scrim.js +1 -0
  172. package/dist/format/lib/content/section-min-height.d.ts +4 -0
  173. package/dist/format/lib/content/section-min-height.js +1 -1
  174. package/dist/format/lib/content/section-width.d.ts +2 -18
  175. package/dist/format/lib/content/section-width.js +1 -1
  176. package/dist/format/lib/content/site-gutter.d.ts +11 -1
  177. package/dist/format/lib/content/site-gutter.js +1 -1
  178. package/dist/format/lib/content/tint.d.ts +1 -0
  179. package/dist/format/lib/content/tint.js +1 -0
  180. package/dist/format/lib/document/blocks/block-types.d.ts +0 -1
  181. package/dist/format/lib/document/blocks/general/HeroSingle/meta.js +1 -1
  182. package/dist/format/lib/document/blocks/general/HeroSlide/meta.js +1 -1
  183. package/dist/format/lib/document/blocks/general/IntroBleed/meta.js +1 -1
  184. package/dist/format/lib/document/blocks/general/LocationMap/meta.d.ts +2 -0
  185. package/dist/format/lib/document/blocks/general/LocationMap/meta.js +1 -0
  186. package/dist/format/lib/document/blocks/general/SpecStrip/meta.d.ts +5 -0
  187. package/dist/format/lib/document/blocks/general/SpecStrip/meta.js +1 -1
  188. package/dist/format/lib/document/blocks/general/Ticker/meta.js +1 -1
  189. package/dist/format/lib/document/blocks/general/metas.d.ts +1 -0
  190. package/dist/format/lib/document/blocks/general/metas.js +1 -1
  191. package/dist/format/lib/document/blocks/general/text-part-shapes.json +30 -0
  192. package/dist/format/lib/document/box-footer.d.ts +1 -0
  193. package/dist/format/lib/document/box-footer.js +1 -1
  194. package/dist/format/lib/document/cap-hero-groups.js +1 -1
  195. package/dist/format/lib/document/container-blocks.js +1 -1
  196. package/dist/format/lib/document/editor-site-widths.d.ts +2 -0
  197. package/dist/format/lib/document/editor-site-widths.js +1 -0
  198. package/dist/format/lib/document/general-order.d.ts +1 -1
  199. package/dist/format/lib/document/general-order.js +1 -1
  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
@@ -110,7 +110,8 @@
110
110
  /* The site's name sits in the shell's Tooltip (harness UI-24), which carries
111
111
  the whole name and where to change it. Its wrapper is block-level and gives
112
112
  way like the name did, so the name still ellipsises inside it rather than
113
- the wrapper's inline box ending the ellipsis. */
113
+ the wrapper's inline box ending the ellipsis. The one such wrapper: the
114
+ Coordinates result line (lib/document/controls CoordsField) takes it too. */
114
115
  .sf-name-tip {
115
116
  position: relative;
116
117
  display: block;
@@ -802,6 +803,21 @@
802
803
  flex: 1;
803
804
  overflow-y: auto;
804
805
  scrollbar-gutter: stable;
806
+ /* THE STANDARD THIN SCROLLBAR, NOT A FORCED ONE (Lewis 2026-10-28, section
807
+ panel rule plan §3 1f, option 1). A sized `::-webkit-scrollbar` here forced
808
+ a CLASSIC lane, also on a Mac, and the gutter above held it whether or not
809
+ anything scrolled: the lane sits outside the padding box, where content is
810
+ clipped, so the full-bleed group band stopped 8px short of the panel edge.
811
+ With the standard properties Chrome ignores every `::-webkit-scrollbar`
812
+ rule on this body (easel's 11px `.sf-scroll` one too), and an OVERLAY
813
+ system scrollbar (a Mac on its default setting) takes no lane: the band
814
+ reaches the edge and the strip keeps one width. Where the system scrollbar
815
+ takes space (Windows, "always show"), the gutter still holds a thin lane so
816
+ the strip never moves (`scripts/test-panel-strip-width-stable.ts`); an
817
+ overlay there needs a shell scroll area (a follow-up for the shell). The
818
+ thumb is easel's `--sf-scrollbar`, on a clear track. */
819
+ scrollbar-width: thin;
820
+ scrollbar-color: var(--sf-scrollbar) transparent;
805
821
  /* THE SIDE PADDING, ONCE. It was the literal `14px` below and a second
806
822
  literal `8px` in the container query further down, and the module rule this
807
823
  card adds needed a THIRD copy to cancel it — which is exactly how that rule
@@ -814,16 +830,11 @@
814
830
  This sheet keeps no alias of its own; the rules below that reach the
815
831
  panel's edge read easel's token. */
816
832
  padding-block: var(--space-4) var(--space-20);
817
- /* THE RIGHT INSET COUNTS THE SCROLLBAR'S LANE (2026-10-20). The gutter above
818
- is held whether or not the scrollbar is drawn, so the rows' right side was
819
- the inset PLUS the lane: 16 + 11 at a 320px panel, against 16 on the left
820
- and 16 in the head. Now the lane is part of the inset: the end padding is
821
- the inset less the lane, so both sides and the head read one number — 16,
822
- and 12 under a 260px panel. The lane is 8px for that reason: the narrow
823
- inset must hold all of it (`@supports` below). A browser that draws its
824
- own scrollbar (Firefox) keeps a 0px lane here and the full inset. */
825
- --sf-insp-bar-w: 0px;
826
- --es-insp-pad-end: calc(var(--es-insp-pad-x) - var(--sf-insp-bar-w));
833
+ /* THE RIGHT INSET IS THE INSET (2026-10-28). From 2026-10-20 it was the inset
834
+ less a forced 8px lane; with an overlay scrollbar there is no lane, so the
835
+ end padding is the same 16 (12 under a 260px panel) as the left and the
836
+ head. The band reads this token to cancel exactly it. */
837
+ --es-insp-pad-end: var(--es-insp-pad-x);
827
838
  padding-inline-end: var(--es-insp-pad-end);
828
839
 
829
840
  /* THE DROPDOWN ARROW, WRITTEN ONCE — card 66399.c.
@@ -898,16 +909,6 @@
898
909
  /* The narrow inset (12px under a 260px panel) is easel's, on the side panel
899
910
  (`--es-insp-pad-x`, 14.1.0); every reader here narrows with it. */
900
911
 
901
- /* The lane the right inset counts (see `.sf-insp-body`): the body's own
902
- scrollbar, 8px where this sheet can size it. easel's `.sf-scroll` draws 11px,
903
- which the 8px narrow inset could not hold. The thumb keeps its transparent
904
- frame, 2px a side instead of 3. */
905
- @supports selector(::-webkit-scrollbar) {
906
- .sf-insp-body { --sf-insp-bar-w: var(--space-8); }
907
- .sf-insp-body::-webkit-scrollbar { width: var(--sf-insp-bar-w); }
908
- .sf-insp-body::-webkit-scrollbar-thumb { border-width: var(--space-2); }
909
- }
910
-
911
912
  /* Floating-styled form controls for the old editor library's native fields — and ONLY those.
912
913
 
913
914
  ⚠️ A FIELD THE SHELL DRAWS IS SKIPPED: `:not(:where(.rosh-focus-ring))` on
@@ -1058,7 +1059,7 @@
1058
1059
  what this looks like is his call, not a later card's.
1059
1060
 
1060
1061
  RULE ZERO, ONE GRAMMAR: `--sf-hover` is already what `.sf-row`, `.sf-chooser`,
1061
- `.sf-rung`, `.sf-seg2 button` and the shell's own `.es-drill` do on hover. The
1062
+ `.sf-seg2 button` and the shell's own `.es-drill` do on hover. The
1062
1063
  dropdowns join that vocabulary instead of inventing a fifth one — which is
1063
1064
  also why nothing needs to change in `efficient-easel`: the shell already owns the
1064
1065
  VALUE (`--es-hover`), and this is the shop agreeing with it.
@@ -1123,7 +1124,6 @@
1123
1124
  box-shadow: 0 0 0 3px var(--sf-accent-ring);
1124
1125
  }
1125
1126
  .sf-multi-caret {
1126
- font-size: var(--text-2xs);
1127
1127
  color: var(--sf-text-secondary);
1128
1128
  flex: none;
1129
1129
  }
@@ -1343,8 +1343,7 @@
1343
1343
  background: var(--sf-accent-ring);
1344
1344
  font-weight: 600;
1345
1345
  }
1346
- .sf-secttheme-item:focus-visible,
1347
- .sf-secttheme-done:focus-visible {
1346
+ .sf-secttheme-item:focus-visible {
1348
1347
  outline: 2px solid var(--sf-accent);
1349
1348
  outline-offset: -2px;
1350
1349
  border-radius: var(--radius-sm);
@@ -1371,15 +1370,9 @@
1371
1370
  font-weight: 600;
1372
1371
  color: var(--sf-field-text);
1373
1372
  }
1373
+ /* The shell's `Button` (harness UI-24); placement only. */
1374
1374
  .sf-secttheme-done {
1375
1375
  margin-left: auto;
1376
- padding: 2px 4px;
1377
- border: 0;
1378
- background: transparent;
1379
- color: var(--sf-text-secondary);
1380
- font-size: var(--text-2xs);
1381
- font-family: var(--sf-font);
1382
- cursor: pointer;
1383
1376
  }
1384
1377
  /* ⚠️ THE SHEET'S FIVE COLOUR ROWS ARE `ThemeColourRow` SINCE CARD 66503 — the
1385
1378
  shell's `SettingsField` wearing the shop's picker, the same row the Site
@@ -1903,19 +1896,6 @@
1903
1896
  white-space: nowrap;
1904
1897
  }
1905
1898
 
1906
- /* The Position boxes with no row of their own (the Hero Box, Lewis 2026-10-21):
1907
- the two boxes, then the shared ↺ reset at the end of the same line — the
1908
- band above already names them, so there is no label row to hold the reset. */
1909
- .sf-position-line {
1910
- display: flex;
1911
- align-items: center;
1912
- gap: 8px;
1913
- }
1914
- .sf-position-line > :first-child {
1915
- flex: 1;
1916
- min-width: 0;
1917
- }
1918
-
1919
1899
  /* Text field with a visibility eye: leading type glyph · label · trailing eye.
1920
1900
  The eye flips a stored `hidden` flag that drops the element from the slide
1921
1901
  render — see controls.tsx. The input stays editable (dimmed) while hidden. */
@@ -1932,26 +1912,6 @@
1932
1912
  min-width: 0;
1933
1913
  margin-bottom: 0;
1934
1914
  }
1935
- .sf-field-eye {
1936
- flex: none;
1937
- width: 22px;
1938
- height: 22px;
1939
- border: none;
1940
- background: transparent;
1941
- border-radius: var(--radius-md);
1942
- cursor: pointer;
1943
- color: var(--sf-muted);
1944
- display: flex;
1945
- align-items: center;
1946
- justify-content: center;
1947
- opacity: 0.6;
1948
- transition: background 0.12s, color 0.12s, opacity 0.12s;
1949
- }
1950
- .sf-field-eye:hover {
1951
- background: var(--sf-hover);
1952
- opacity: 1;
1953
- color: var(--sf-text-secondary);
1954
- }
1955
1915
  /* Hidden: the element is dropped from the slide, but the input stays so the copy
1956
1916
  is preserved and editable. Strike the label + dim the input + light the eye —
1957
1917
  mirroring the section tree's hidden-row cue. */
@@ -1959,10 +1919,6 @@
1959
1919
  color: var(--sf-muted);
1960
1920
  text-decoration: line-through;
1961
1921
  }
1962
- .es-field.is-hidden .sf-field-eye {
1963
- opacity: 1;
1964
- color: var(--sf-text-secondary);
1965
- }
1966
1922
  .es-field.is-hidden input,
1967
1923
  .es-field.is-hidden textarea {
1968
1924
  opacity: 0.5;
@@ -2066,18 +2022,7 @@
2066
2022
  align-items: center;
2067
2023
  gap: var(--space-12);
2068
2024
  }
2069
- .sf-swatch {
2070
- width: 26px;
2071
- height: 26px;
2072
- border-radius: var(--radius-lg);
2073
- border: none;
2074
- cursor: pointer;
2075
- padding: 0;
2076
- box-shadow: inset 0 0 0 1px var(--line-strong);
2077
- }
2078
- .sf-swatch.is-active {
2079
- box-shadow: 0 0 0 2px var(--sf-panel), 0 0 0 4px var(--sf-accent);
2080
- }
2025
+ /* Each swatch is the shell's `ColorSwatch` (harness UI-24). */
2081
2026
  .sf-swatch-hex {
2082
2027
  font-size: var(--text-2xs);
2083
2028
  color: var(--sf-muted);
@@ -2244,59 +2189,21 @@
2244
2189
  background: var(--sf-hover);
2245
2190
  }
2246
2191
 
2247
- /* The choice rungs: two or three buttons in a row, one of them held down.
2248
-
2249
- ⏳ LEAVING. Every pick-one row draws efficient-easel's SettingsSegmented since
2250
- [MERGE] One Pick-One Control (2026-10-06); no row draws this strip of its own
2251
- any more (W1b-1, 2026-10-16, retired TextStylesField; the Accent row's B · I
2252
- are the shell's IconButton, laid out in a `.sf-rungs` row), and `.sf-rung`
2253
- alone is the hints switch's base. `test-segmented-controls` §8 stops a new strip. Delete
2254
- these rules when the last of those two moves.
2255
-
2256
- `--sf-disabled` on the pressed border is not a disabled state -- it is the one
2257
- token on the gray ramp that lands where `zinc-400` did, a mid-grey a step
2258
- darker than a field border. */
2259
- .sf-rungs {
2260
- display: flex;
2261
- width: 100%;
2262
- gap: 4px;
2263
- }
2264
- .sf-rung {
2265
- flex: 1;
2266
- padding: 4px 8px;
2267
- border: 1px solid var(--sf-input-border);
2268
- border-radius: var(--sf-field-radius);
2269
- background: var(--sf-field-bg);
2270
- color: var(--sf-text-secondary);
2271
- font-size: var(--text-xs);
2272
- cursor: pointer;
2273
- }
2274
- .sf-rung:hover:not(.is-active) {
2275
- background: var(--sf-hover);
2276
- }
2277
- .sf-rung.is-active {
2278
- border-color: var(--sf-disabled);
2279
- background: var(--sf-chip-bg);
2280
- color: var(--sf-text);
2281
- font-weight: 600;
2282
- }
2283
- /* The Card shadow miniature: a tiny card showing the shadow each option casts,
2284
- drawn in the package's segmented-control glyph slot beside the word (it was
2285
- `.sf-rung-chip` in the hand-built `.sf-rung--inline` strip until [MERGE] One
2286
- Pick-One Control, 2026-10-06). Its shadow is set inline, per option, because
2287
- that IS what the option is showing.
2192
+ /* The Card shadow miniature: a tiny card showing the shadow each option casts, drawn as the glyph of each
2193
+ cell of the shell's IconPicker (it was in a segmented strip's glyph slot, and before that the hand-built
2194
+ `.sf-rung--inline` strip). Its shadow is set inline, per option, because that IS what the option is showing.
2195
+ Its border and fill are the shell's tokens, written as classes on the element (`border-line bg-surface`),
2196
+ NOT this sheet's `--sf-*` variables: the picker's popup is drawn outside the editor, where those variables
2197
+ are not defined, and the "None" cell turned blank.
2288
2198
 
2289
- 16px wide to sit inside the slot (`--es-chip-icon`). Small, but it only has
2290
- to answer "none, a little, or a lot", and the 1px border keeps all three
2291
- legible at this size. */
2199
+ 16px wide to sit in a cell. Small, but it only has to answer "none, a little, or a lot", and the 1px
2200
+ border keeps all three legible at this size. */
2292
2201
  .sf-shadow-chip {
2293
2202
  display: block;
2294
2203
  flex: none;
2295
2204
  box-sizing: border-box;
2296
2205
  width: 16px;
2297
2206
  height: 11px;
2298
- border: 1px solid var(--sf-disabled);
2299
- background: var(--sf-field-bg);
2300
2207
  }
2301
2208
 
2302
2209
  /* The one control that folds the Basics tab's five explanations (card 66177).
@@ -2307,19 +2214,6 @@
2307
2214
  display: flex;
2308
2215
  margin-top: var(--space-32);
2309
2216
  }
2310
- /* A rung that is not part of a strip: it sizes to its own word rather than
2311
- sharing a row, so the `flex: 1` every rung takes has to come back off. */
2312
- .sf-hints-toggle {
2313
- display: inline-flex;
2314
- flex: none;
2315
- align-items: center;
2316
- gap: var(--space-8);
2317
- color: var(--sf-muted);
2318
- }
2319
- .sf-hints-toggle svg {
2320
- flex: none;
2321
- }
2322
-
2323
2217
  /* A heading INSIDE one control, below the row's own label: "Dark surfaces",
2324
2218
  "Light surfaces". Deliberately not `.sf-field-group`, which heads a group of
2325
2219
  settings -- these head a group of colours inside ONE setting. */
@@ -2523,33 +2417,6 @@
2523
2417
  font-size: var(--text-xs);
2524
2418
  cursor: pointer;
2525
2419
  }
2526
- /* A rung showing a LETTERFORM rather than a word -- the B and the I. It is the
2527
- letter's own shape that carries the meaning, so it is sized to be read as a
2528
- glyph and it keeps its accessible name in `aria-label`. */
2529
- .sf-rung--glyph {
2530
- flex: 0 0 34px;
2531
- font-size: var(--text-sm);
2532
- line-height: 18px;
2533
- text-align: center;
2534
- }
2535
- .sf-rung--glyph:disabled {
2536
- color: var(--sf-disabled);
2537
- cursor: not-allowed;
2538
- }
2539
- .sf-rung--glyph:disabled:hover {
2540
- background: var(--sf-field-bg);
2541
- }
2542
- /* The B and the I each sit in the shell's Tooltip (harness UI-24), whose
2543
- wrapper is the strip's flex item now: it takes the glyph's 34px and the
2544
- rung fills it. */
2545
- .sf-rung-tip {
2546
- position: relative;
2547
- display: inline-flex;
2548
- flex: 0 0 34px;
2549
- }
2550
- .sf-rung-tip .sf-rung--glyph {
2551
- flex: 1;
2552
- }
2553
2420
  /* A DISABLED BUTTON GETS NO HOVER AND NO FOCUS, so a reason written on it is
2554
2421
  never shown. The reason sits on a focusable wrapper instead, and the button
2555
2422
  lets the pointer through to it. Used wherever a disabled control explains
@@ -2557,9 +2424,6 @@
2557
2424
  .sf-tip-disabled {
2558
2425
  display: inline-flex;
2559
2426
  }
2560
- .sf-rung-tip > .sf-tip-disabled {
2561
- flex: 1;
2562
- }
2563
2427
  .sf-tip-disabled > button:disabled {
2564
2428
  pointer-events: none;
2565
2429
  }
@@ -2736,21 +2600,10 @@
2736
2600
  margin-top: var(--es-rhythm-between-tight);
2737
2601
  }
2738
2602
 
2603
+ /* The shell's secondary `Button` (harness UI-24); placement only. */
2739
2604
  .sf-theme-add {
2740
- display: flex;
2741
- align-items: center;
2742
- gap: var(--space-8);
2743
- margin-top: 8px;
2744
- border: 0;
2745
- background: none;
2746
- font: inherit;
2747
- font-size: var(--text-xs);
2748
- font-weight: 600;
2749
- color: var(--sf-accent-text);
2750
- padding: 4px 0;
2751
- cursor: pointer;
2605
+ margin-top: var(--space-8);
2752
2606
  }
2753
- .sf-theme-add:hover { text-decoration: underline; }
2754
2607
 
2755
2608
  /* `.sf-ink-row` / `.sf-ink-hex` RETIRED — the second colour control.
2756
2609
  It drew Page settings' Background, the five rows a theme carries and Theme
@@ -2865,22 +2718,9 @@
2865
2718
  gap: var(--space-8);
2866
2719
  margin-top: 8px;
2867
2720
  }
2721
+ /* The shell's secondary `Button`, medium (32) (harness UI-24); the ratios line up. */
2868
2722
  .sf-readability-suggestion {
2869
- display: inline-flex;
2870
- align-items: center;
2871
- gap: var(--space-8);
2872
- height: 26px;
2873
- padding: 0 var(--space-12);
2874
- border: 1px solid var(--sf-input-border);
2875
- border-radius: var(--sf-field-radius);
2876
- background: var(--sf-field-bg);
2877
- color: var(--sf-btn-text);
2878
- font-size: var(--text-2xs);
2879
2723
  font-variant-numeric: tabular-nums;
2880
- cursor: pointer;
2881
- }
2882
- .sf-readability-suggestion:hover {
2883
- background: var(--sf-hover);
2884
2724
  }
2885
2725
  .sf-readability-chip {
2886
2726
  width: 9px;
@@ -2898,55 +2738,11 @@
2898
2738
  being the darkest in the row on a grey track (66138 / 66302), and its suite
2899
2739
  bans the tint token package-wide, so the retired look could not travel. */
2900
2740
 
2901
- /* Slider */
2902
- .sf-slider {
2903
- display: flex;
2904
- align-items: center;
2905
- gap: 12px;
2906
- }
2907
- /* …AND IT TAKES THE WHOLE ROW WHEREVER THE SHELL STACKS IT (card 66247, owner
2908
- 2026-08-31: the slider fills the row).
2909
-
2910
- `efficient-easel`'s `SettingsField` puts a control on its own line for one stated
2911
- reason — its own comment, `src/panel/SettingsField.tsx`: "The row is stacked
2912
- rather than side-by-side so the control gets the panel's full width — a 308px
2913
- panel cannot afford a label column AND a usable slider." The slot it stacks
2914
- into is `.es-field-ctl`, and that slot is `display: flex`.
2915
-
2916
- A block-level `.sf-slider` fills its parent, which is why the sliders in this
2917
- panel's OWN `.sf-field` rows always looked right. As a flex ITEM it does not:
2918
- with no `flex` and no `width` it is `flex: 0 1 auto` and sizes to its content,
2919
- a bare `input[type=range]` — 129px in Chromium, and 129px whatever the panel
2920
- is dragged to. Measured before this rule existed (scripts/harness/part-slider-width.tsx):
2921
-
2922
- panel 220 (MIN_PANEL_W) field content 192 track 129 67% of the row
2923
- panel 320 (the default) field content 280 track 129 46% of the row
2924
- panel 560 (MAX_PANEL_W) field content 520 track 129 25% of the row
2925
-
2926
- So the slot fills the row and the track inside it did not, and the wider a
2927
- merchant dragged the panel the smaller a fraction of it the control took.
2928
-
2929
- `flex: 1`, not `width: 100%`, and that is the same call the rule ten lines
2930
- below already made for the range input inside this box: a percentage width is
2931
- right only while the slider is alone in the slot, and would overflow the row
2932
- the day a second thing joined it. Written against `.es-field-ctl` rather than
2933
- against this panel or that one, because the promise being kept is the SHELL's
2934
- and every row it stacks is owed it — `PartSettingsPanel`'s Size / Line
2935
- spacing / Letter spacing and the Site styles Content number are the four this
2936
- reaches today. Guarded by `scripts/test-part-slider-fills-row.ts`. */
2937
- .es-field-ctl > .sf-slider {
2938
- flex: 1;
2939
- min-width: 0;
2940
- }
2941
- /* The track and the typed number are efficient-shell's `Slider` (harness
2942
- UI-24); until it had one, this sheet drew a 4px rail and a ringed thumb on a
2943
- native range here, and a readout that was pressed to type into (card
2944
- 66275). The shell's control does both, so those rules went with them. Its
2945
- box fills `.sf-slider` like the input did. */
2946
- .sf-slider > .sf-slider-track {
2947
- flex: 1;
2948
- min-width: 0;
2949
- }
2741
+ /* Slider. The box the shell's `Slider` sits in (`.sf-slider`), and the rule that
2742
+ lets it fill the row `SettingsField` stacks it into (card 66247), are
2743
+ efficient-easel's since 24.0.0 (`screen.css`), with the Box rows that draw it
2744
+ (Banner PR 2, 2026-10-28). The notch below stays: it is the website's.
2745
+ Guarded by `scripts/test-part-slider-fills-row.ts`. */
2950
2746
  /* THE NOTCH — where the style is, on a track that overrides it (card 66116).
2951
2747
  Drag away from it to override; land on it and the override is cleared, so the
2952
2748
  way back is on the control the merchant is already holding.
@@ -3045,9 +2841,6 @@
3045
2841
  than per-control. (The top bar's buttons are the shell's `Button` since
3046
2842
  efficient-easel 1.0 and ring themselves.) */
3047
2843
  .sf-seg2 button:focus-visible,
3048
- .sf-readability-suggestion:focus-visible,
3049
- .sf-swatch:focus-visible,
3050
- .sf-field-eye:focus-visible,
3051
2844
  .sf-insp-body select:focus-visible {
3052
2845
  outline: 2px solid var(--sf-accent);
3053
2846
  outline-offset: 2px;
@@ -3248,6 +3041,13 @@ input.sf-list-marking {
3248
3041
  .sf-blogsource-status[data-state="error"] {
3249
3042
  color: var(--sf-danger);
3250
3043
  }
3044
+ /* SourceStatus compact: the status words and their text links (Refresh now, and
3045
+ the edit action where there is one) on ONE line. The links keep the shell's
3046
+ look; this only lets them sit inside the sentence. */
3047
+ .sf-blogsource-link {
3048
+ display: inline;
3049
+ vertical-align: baseline;
3050
+ }
3251
3051
  /* The "Open" control inside a source note — the route the sentence names.
3252
3052
  [ADD] Source Note Opens The Record, 2026-09-06.
3253
3053
 
@@ -3260,23 +3060,6 @@ input.sf-list-marking {
3260
3060
  It is a real <button> and not an <a>: the editor is embedded and reaches the
3261
3061
  admin over postMessage, so there is no href to give. Styled as a link because
3262
3062
  that is what it does, named as a button because that is what it is. */
3263
- .sf-source-open {
3264
- display: inline;
3265
- padding: 0;
3266
- border: 0;
3267
- background: none;
3268
- font: inherit;
3269
- color: var(--sf-accent-text);
3270
- text-decoration: underline;
3271
- text-underline-offset: 2px;
3272
- cursor: pointer;
3273
- }
3274
- .sf-source-open:hover { color: var(--sf-accent); }
3275
- .sf-source-open:focus-visible {
3276
- outline: 2px solid var(--sf-accent);
3277
- outline-offset: 2px;
3278
- border-radius: calc(var(--radius-sm) / 2);
3279
- }
3280
3063
 
3281
3064
  /* Form picker — the "which form does this section show" control. Reuses the
3282
3065
  blog-source card for its frame, buttons and hint, and adds the read-only
@@ -3749,47 +3532,6 @@ input.sf-list-marking {
3749
3532
  gap: var(--space-8);
3750
3533
  }
3751
3534
 
3752
- /* The override mark, half two — and it IS the reset button, which is why it is
3753
- a real <button> with a name and not a painted dot. The dot shrinks away under
3754
- the pointer and the reset arrow takes its place, so the affordance is
3755
- discovered by hovering the only new thing on the row. */
3756
- .sf-part-mark {
3757
- width: 18px;
3758
- height: 18px;
3759
- flex: none;
3760
- display: grid;
3761
- place-items: center;
3762
- padding: 0;
3763
- border: 0;
3764
- border-radius: 50%;
3765
- background: none;
3766
- color: var(--sf-accent);
3767
- cursor: pointer;
3768
- }
3769
- .sf-part-mark-dot {
3770
- transform-origin: center;
3771
- transition: transform 0.15s ease, opacity 0.15s ease;
3772
- }
3773
- .sf-part-mark-arrow {
3774
- opacity: 0;
3775
- transition: opacity 0.15s ease;
3776
- }
3777
- .sf-part-mark:hover .sf-part-mark-dot,
3778
- .sf-part-mark:focus-visible .sf-part-mark-dot {
3779
- transform: scale(0);
3780
- opacity: 0;
3781
- }
3782
- .sf-part-mark:hover .sf-part-mark-arrow,
3783
- .sf-part-mark:focus-visible .sf-part-mark-arrow {
3784
- opacity: 1;
3785
- }
3786
- @media (prefers-reduced-motion: reduce) {
3787
- .sf-part-mark-dot,
3788
- .sf-part-mark-arrow {
3789
- transition: none;
3790
- }
3791
- }
3792
-
3793
3535
  /* The copy box at the TOP of the drill (card 8819). Clicking a word drills
3794
3536
  straight to its editor, so the box is the first thing on the part screen —
3795
3537
  right under the way back, above the style it follows. It is the plain copy box
@@ -3873,31 +3615,6 @@ input.sf-list-marking {
3873
3615
  THE STRIP FILLS BY TILE WIDTH, NOT BY A COLUMN COUNT. `auto-fill` with a 58px
3874
3616
  minimum gives four across the 320px panel and three at the 220px minimum, so
3875
3617
  nothing is cut off and nothing scrolls sideways at either width. */
3876
- .sf-gallery-filter {
3877
- display: flex;
3878
- gap: var(--space-8);
3879
- flex-wrap: wrap;
3880
- }
3881
- .sf-gallery-filter button {
3882
- border: 1px solid var(--sf-input-border);
3883
- background: var(--sf-field-bg);
3884
- border-radius: 999px;
3885
- padding: var(--space-4) var(--space-12);
3886
- font-size: var(--text-xs);
3887
- font-weight: 600;
3888
- color: var(--sf-icon);
3889
- cursor: pointer;
3890
- transition: background 0.12s, color 0.12s, border-color 0.12s;
3891
- }
3892
- .sf-gallery-filter button:hover {
3893
- background: var(--sf-hover);
3894
- }
3895
- .sf-gallery-filter button[aria-pressed="true"] {
3896
- background: var(--sf-accent);
3897
- border-color: var(--sf-accent);
3898
- color: var(--sf-on-accent);
3899
- }
3900
-
3901
3618
  /* The strip itself — the grid, the tiles, the chosen tile's edge and ring, each
3902
3619
  tile's hover name — is efficient-shell's `PictureTiles` (one copy since the
3903
3620
  header's country picker became its third row). What stays here is where the
@@ -3926,27 +3643,12 @@ input.sf-list-marking {
3926
3643
  or a second control beside the strip. `min-width: 0` because a flex item's
3927
3644
  automatic minimum is its content size, which is what stops it shrinking.
3928
3645
 
3929
- ⚠️ BOTH GALLERY CONTROLS ARE NAMED, and the second one is why this is a rule
3930
- and not a patch. `.sf-gallery-filter` — the `Photos in a row` chips — is the
3931
- same shape, and it did NOT look broken: measured 291px before and 185px after
3932
- at a 320px panel, with the row a pixel and a half SHORTER, because the chips
3933
- simply stopped stretching. Nothing wrapped at the two widths that were
3934
- measured, so every height check passed. What it had was a smaller box to wrap
3935
- inside at any width nobody happened to measure.
3936
-
3937
- ⚠️ SO THIS IS A DEFECT A HEIGHT RULE CANNOT CATCH, AND THAT IS THE POINT.
3938
- The card that made this change stops at a row moving more than about 6px
3939
- (GG, 2026-09-22). This row moved 1.5px, in the RIGHT direction, and was
3940
- wrong. Measuring how tall a row stands cannot see a control that quietly
3941
- stopped filling it — only asking the width can, which is why
3942
- `scripts/probe-settings-rows-shared.mjs` now asks it of every row on both
3943
- sides, and why that question found both of these on its first run.
3944
-
3945
- A rule that fixed the strip and left the chips would be a trap wearing a fix
3946
- — which is exactly what the shell says about naming both of its own `-fit`
3947
- wrappers. This is the FOURTH instance of this collapse in this repo:
3948
- `.sf-slider` carries the same two lines from card 66247, and the shell
3949
- carries them for `.es-tabs-fit` and `.es-segs-fit`.
3646
+ The `Photos in a row` chips were the second control on this list until they
3647
+ became the shared `SettingsSegmented`, whose own `.es-segs-fit` carries the
3648
+ same two lines; they now sit inside the Gallery Layout popup, and only the
3649
+ Block widths strip still uses this selector. Measuring how tall a row stands
3650
+ cannot see a control that quietly stopped filling it — only asking the width
3651
+ can, which is what `scripts/probe-settings-rows-shared.mjs` does.
3950
3652
 
3951
3653
  `.sf-linkstack` was on this list until the link field became the shared
3952
3654
  picker ([MERGE] One Link Picker For Both Editors): its stack is now the
@@ -3954,8 +3656,7 @@ input.sf-list-marking {
3954
3656
  Every consumer control that is a flex or grid box written for a block row
3955
3657
  belongs on this selector; the day one is fixed somewhere else instead, the
3956
3658
  list stops being the place to look. */
3957
- .es-field-ctl > .sf-gallery-layouts,
3958
- .es-field-ctl > .sf-gallery-filter {
3659
+ .es-field-ctl > .sf-gallery-layouts {
3959
3660
  flex: 1 1 auto;
3960
3661
  min-width: 0;
3961
3662
  }
@@ -3980,11 +3681,41 @@ input.sf-list-marking {
3980
3681
  background: var(--sf-accent);
3981
3682
  }
3982
3683
 
3983
- /* How many the filter left. Without it an empty-looking strip is a mystery. */
3984
- .sf-gallery-count {
3684
+ /* The Entrance kinds (lib/animation/entrance-fields): the shell's IconPicker, three
3685
+ across. Each picture is the approved drawing of its kind, and it plays that kind
3686
+ when the mouse rests on its cell, by the page's engine and keyframes
3687
+ (efficient-shell/motion.css). The word under a drawing shows in the popup only;
3688
+ the closed button names the kind beside it, so there it is hidden (the closed
3689
+ button is inside the panel's control slot, the popup is not). */
3690
+ .sf-entrance-pic {
3691
+ display: flex;
3692
+ flex-direction: column;
3693
+ align-items: center;
3694
+ gap: 2px;
3695
+ }
3696
+ .sf-entrance-stage {
3697
+ display: flex;
3698
+ align-items: center;
3699
+ justify-content: center;
3700
+ width: 40px;
3701
+ height: 40px;
3702
+ overflow: hidden;
3703
+ }
3704
+ .sf-entrance-stage > i {
3705
+ display: block;
3706
+ line-height: 0;
3707
+ }
3708
+ .sf-entrance-cap {
3985
3709
  font-size: var(--text-2xs);
3986
- color: var(--sf-disabled);
3987
- margin-top: var(--space-8);
3710
+ line-height: 1;
3711
+ }
3712
+ .es-field-ctl .sf-entrance-cap {
3713
+ display: none;
3714
+ }
3715
+ .es-field-ctl .sf-entrance-stage {
3716
+ width: auto;
3717
+ height: auto;
3718
+ overflow: visible;
3988
3719
  }
3989
3720
 
3990
3721
  /* ── Side panel heads (components/SidePanelHead) ─────────────────────────
@@ -1 +1 @@
1
- "use client";import{useEffect as b,useMemo as w,useRef as k}from"react";import{useEasel as O}from"efficient-easel/easel";import{useEaselHost as B}from"efficient-easel/screen/lib/host";import{applyPageEdits as D,describeBlocks as H,describeSelection as J}from"../../format/lib/host-document-bridge.js";import{nonEmptyString as N}from"../../format/lib/non-empty-string.js";const p=t=>N(t.requestId)??null;function $(){const t=B(),{appState:n,selectedItem:I,dispatch:l,history:f,config:S}=O(s=>s),i=S,g=k({appState:n,dispatch:l,history:f,blockConfig:i});g.current={appState:n,dispatch:l,history:f,blockConfig:i};const c=k(new Map),h=I?.props?.id,a=w(()=>J(i,n.data,h),[i,n.data,h]),q=a?JSON.stringify(a):"";b(()=>{t.connected&&t.send("storefront-editor:selection",{selection:a})},[t,q]),b(()=>t.subscribe(s=>{const{appState:d,dispatch:y,history:u,blockConfig:m}=g.current;switch(s.type){case"storefront-editor:request-document":{const e=p(s);if(!e)return;t.send("storefront-editor:document",{requestId:e,document:d.data,blocks:H(m)});return}case"storefront-editor:apply-page-edits":{const e=p(s);if(!e)return;const r=Array.isArray(s.ops)?s.ops:[],o=r.length?D(m,d.data,r,E=>`${E}-${crypto.randomUUID()}`):{ok:!1,reason:"no changes"};o.ok&&(y({type:"setData",data:o.document,recordHistory:!0}),c.current.set(e,JSON.stringify(o.document.content??[]))),t.send("storefront-editor:page-edits-result",{requestId:e,applied:o.ok,reason:o.ok?null:o.reason});return}case"storefront-editor:undo-page-edits":{const e=p(s);if(!e)return;const r=c.current.get(e),o=r!==void 0&&r===JSON.stringify(d.data.content??[]);o&&u.hasPast&&(u.back(),c.current.delete(e)),t.send("storefront-editor:page-edits-result",{requestId:e,applied:o&&u.hasPast,reason:o?null:"the page has changed since"});return}case"storefront-editor:set-right-panel":typeof s.shown=="boolean"&&y({type:"setUi",ui:{rightSideBarVisible:s.shown}});return;default:return}}),[t])}export{$ as useHostDocumentBridge};
1
+ "use client";import{useEffect as b,useMemo as w,useRef as k}from"react";import{useEasel as O}from"efficient-easel/easel";import{useEaselHost as B}from"efficient-easel/screen/lib/host";import{applyPageEdits as D,describeBlocks as H,describeSelection as J}from"../lib/host-document-bridge.js";import{nonEmptyString as N}from"../../format/lib/non-empty-string.js";const p=t=>N(t.requestId)??null;function $(){const t=B(),{appState:n,selectedItem:I,dispatch:l,history:f,config:S}=O(s=>s),i=S,g=k({appState:n,dispatch:l,history:f,blockConfig:i});g.current={appState:n,dispatch:l,history:f,blockConfig:i};const c=k(new Map),h=I?.props?.id,a=w(()=>J(i,n.data,h),[i,n.data,h]),q=a?JSON.stringify(a):"";b(()=>{t.connected&&t.send("storefront-editor:selection",{selection:a})},[t,q]),b(()=>t.subscribe(s=>{const{appState:d,dispatch:y,history:u,blockConfig:m}=g.current;switch(s.type){case"storefront-editor:request-document":{const e=p(s);if(!e)return;t.send("storefront-editor:document",{requestId:e,document:d.data,blocks:H(m)});return}case"storefront-editor:apply-page-edits":{const e=p(s);if(!e)return;const r=Array.isArray(s.ops)?s.ops:[],o=r.length?D(m,d.data,r,E=>`${E}-${crypto.randomUUID()}`):{ok:!1,reason:"no changes"};o.ok&&(y({type:"setData",data:o.document,recordHistory:!0}),c.current.set(e,JSON.stringify(o.document.content??[]))),t.send("storefront-editor:page-edits-result",{requestId:e,applied:o.ok,reason:o.ok?null:o.reason});return}case"storefront-editor:undo-page-edits":{const e=p(s);if(!e)return;const r=c.current.get(e),o=r!==void 0&&r===JSON.stringify(d.data.content??[]);o&&u.hasPast&&(u.back(),c.current.delete(e)),t.send("storefront-editor:page-edits-result",{requestId:e,applied:o&&u.hasPast,reason:o?null:"the page has changed since"});return}case"storefront-editor:set-right-panel":typeof s.shown=="boolean"&&y({type:"setUi",ui:{rightSideBarVisible:s.shown}});return;default:return}}),[t])}export{$ as useHostDocumentBridge};