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
@@ -1,8 +1,8 @@
1
- import{DEFAULT_PANEL_W as k,MAX_PANEL_W as N,MIN_PANEL_W as y}from"efficient-easel/screen/components/panel-widths";import{isRuleSource as A,ruleChecks as F}from"../../../format/lib/source-rules/rule.js";import{parseRules as w}from"../../../format/lib/source-rules/support/css-box-model.js";import{readSliderCallSites as E,sliderFields as v}from"../../../format/lib/source-rules/support/part-slider-call-sites.js";const m=[["sf-editor","es-editor"],["sf-panel","sf-panel--right"],["sf-insp-body","sf-scroll"],["sf-part-panel"],["es-group"],["es-group-body"],["es-field","sf-part-field"],["es-field-ctl"]],_=["sf-slider","has-notch"],S=129;function $(r){const e=r.trim();if(!e.startsWith("."))return null;const s=e.split(".").filter(Boolean);return s.every(o=>/^[a-zA-Z0-9_-]+$/.test(o))?s:null}function c(r){if(/[+~:]/.test(r))return!1;const e=r.trim().split(/\s*(>)\s*|\s+/).filter(Boolean);if(!e.length)return!1;const s=$(e[e.length-1]);if(!s||!s.every(a=>_.includes(a)))return!1;let o=e.length-2,d=m.length-1,i=!1;for(;o>=0;){const a=e[o];if(a===">"){i=!0,o-=1;continue}const f=$(a);if(!f)return!1;let t=-1;for(let n=d;n>=0;n-=1){if(f.every(l=>m[n].includes(l))){t=n;break}if(i)break}if(t===-1)return!1;d=t-1,i=!1,o-=1}return!0}function W(r){const e=r.trim();if(e==="none")return 0;if(e==="auto"||e==="initial")return e==="auto"?1:0;const s=Number.parseFloat(e);return Number.isFinite(s)?s:0}function P(r){const e={grow:0,width:"auto",from:[]};for(const s of r)for(const o of w(s.css)){if(!o.selector.split(",").some(i=>c(i)))continue;let d=!1;for(const[i,a]of o.declarations)i==="flex"?(e.grow=W(a),d=!0):i==="flex-grow"?(e.grow=Number.parseFloat(a)||0,d=!0):i==="width"&&(e.width=a.trim(),d=!0);d&&e.from.push(`${s.name} ${o.selector}`)}return e}function x(r,e){return r.grow>=1||/^100%$/.test(r.width)?e:S}function j(r){return r.filter(e=>{const s=e.text.replace(/\/\*[\s\S]*?\*\//g,"").replace(/\/\/[^\n]*/g,"");return/SettingsField/.test(s)&&/<Slider[\s/>]/.test(s)}).map(e=>e.path).sort()}function I(r,e){const{check:s,report:o}=F("part slider fills row"),d=new Map(r.map(t=>[t.path,t]));if(s("the walk reaches the slot's own slider, and not the notch, a hover or another panel's row",c(".es-field-ctl > .sf-slider")&&c(".sf-insp-body .sf-slider")&&!c(".sf-slider.has-notch::before")&&!c(".es-field-ctl > .sf-slider:hover")&&!c(".sf-field .sf-slider")&&!c(".es-field-ctl > div > .sf-slider")),e.partPanel!==void 0){const t=d.get(e.partPanel);let n=null,l="";try{n=t?E(t.text):null}catch(u){l=u instanceof Error?u.message:String(u)}s(`read the part panel ${e.partPanel}`,!!t&&n!==null,l||"the file is not among those handed in"),s("§1 the part panel draws no slider since plan S2",n!==null&&n.length===0,`${e.partPanel} draws ${n?.length??"?"} slider(s) again — fields ${v(n??[]).join(", ")}. Since plan S2 its numbers are the text box's cells; if a slider is meant to come back, it comes back into the hosts and this section moves with it.`)}if(e.shellSheet!==void 0){const t=w(e.shellSheet.text).filter(n=>n.selector.trim()===".es-field-ctl");s(`§2 ${e.shellSheet.path} declares the control slot \`.es-field-ctl\``,t.length>0,"that is the slot `SettingsField` stacks a control into, and this rule is about how an item sizes inside it"),s("§2 the shell's control slot is still a flex row",t.length>0&&t[t.length-1].declarations.get("display")==="flex","`.es-field-ctl` is no longer `display: flex` in the installed shell. How a flex ITEM sizes is then not the question, and this rule would be answering the old one. Re-read the shell before trusting a verdict from here.")}if(e.sheet!==void 0){const t=d.get(e.sheet);s(`read the stylesheet ${e.sheet}`,!!t),s("§3 the installed shell stylesheet was handed in beside it",e.shellSheet!==void 0);const n=[...t?[{name:t.path,css:t.text}]:[],...e.shellSheet?[{name:e.shellSheet.path,css:e.shellSheet.text}]:[]],l=P(n),u=[{panel:y,content:192,what:"MIN_PANEL_W"},{panel:k.right,content:280,what:"the default"},{panel:N,content:520,what:"MAX_PANEL_W"}],b=u.map(h=>{const p=x(l,h.content),g=h.content-p;return` panel ${String(h.panel).padStart(3)} (${h.what.padEnd(11)}) field content ${String(h.content).padStart(3)} track ${String(p).padStart(3)} `+(g>0?`SHORT BY ${g} — ${Math.round(p/h.content*100)}% of the row`:"fills")}).join(`
1
+ import{DEFAULT_PANEL_W as k,MAX_PANEL_W as N,MIN_PANEL_W as y}from"efficient-easel/screen/components/panel-widths";import{isRuleSource as A,ruleChecks as F}from"../../../format/lib/source-rules/rule.js";import{parseRules as w}from"../../../format/lib/source-rules/support/css-box-model.js";import{readSliderCallSites as E,sliderFields as v}from"../../../format/lib/source-rules/support/part-slider-call-sites.js";const m=[["sf-editor","es-editor"],["sf-panel","sf-panel--right"],["sf-insp-body","sf-scroll"],["sf-part-panel"],["es-group"],["es-group-body"],["es-field","sf-part-field"],["es-field-ctl"]],_=["sf-slider","has-notch"],S=129;function $(r){const e=r.trim();if(!e.startsWith("."))return null;const s=e.split(".").filter(Boolean);return s.every(a=>/^[a-zA-Z0-9_-]+$/.test(a))?s:null}function c(r){if(/[+~:]/.test(r))return!1;const e=r.trim().split(/\s*(>)\s*|\s+/).filter(Boolean);if(!e.length)return!1;const s=$(e[e.length-1]);if(!s||!s.every(o=>_.includes(o)))return!1;let a=e.length-2,d=m.length-1,i=!1;for(;a>=0;){const o=e[a];if(o===">"){i=!0,a-=1;continue}const f=$(o);if(!f)return!1;let t=-1;for(let n=d;n>=0;n-=1){if(f.every(l=>m[n].includes(l))){t=n;break}if(i)break}if(t===-1)return!1;d=t-1,i=!1,a-=1}return!0}function W(r){const e=r.trim();if(e==="none")return 0;if(e==="auto"||e==="initial")return e==="auto"?1:0;const s=Number.parseFloat(e);return Number.isFinite(s)?s:0}function j(r){const e={grow:0,width:"auto",from:[]};for(const s of r)for(const a of w(s.css)){if(!a.selector.split(",").some(i=>c(i)))continue;let d=!1;for(const[i,o]of a.declarations)i==="flex"?(e.grow=W(o),d=!0):i==="flex-grow"?(e.grow=Number.parseFloat(o)||0,d=!0):i==="width"&&(e.width=o.trim(),d=!0);d&&e.from.push(`${s.name} ${a.selector}`)}return e}function x(r,e){return r.grow>=1||/^100%$/.test(r.width)?e:S}function P(r){return r.filter(e=>{const s=e.text.replace(/\/\*[\s\S]*?\*\//g,"").replace(/\/\/[^\n]*/g,"");return/SettingsField/.test(s)&&/<Slider[\s/>]/.test(s)}).map(e=>e.path).sort()}function B(r,e){const{check:s,report:a}=F("part slider fills row"),d=new Map(r.map(t=>[t.path,t]));if(s("the walk reaches the slot's own slider, and not the notch, a hover or another panel's row",c(".es-field-ctl > .sf-slider")&&c(".sf-insp-body .sf-slider")&&!c(".sf-slider.has-notch::before")&&!c(".es-field-ctl > .sf-slider:hover")&&!c(".sf-field .sf-slider")&&!c(".es-field-ctl > div > .sf-slider")),e.partPanel!==void 0){const t=d.get(e.partPanel);let n=null,l="";try{n=t?E(t.text):null}catch(u){l=u instanceof Error?u.message:String(u)}s(`read the part panel ${e.partPanel}`,!!t&&n!==null,l||"the file is not among those handed in"),s("§1 the part panel draws no slider since plan S2",n!==null&&n.length===0,`${e.partPanel} draws ${n?.length??"?"} slider(s) again — fields ${v(n??[]).join(", ")}. Since plan S2 its numbers are the text box's cells; if a slider is meant to come back, it comes back into the hosts and this section moves with it.`)}if(e.shellSheet!==void 0){const t=w(e.shellSheet.text).filter(n=>n.selector.trim()===".es-field-ctl");s(`§2 ${e.shellSheet.path} declares the control slot \`.es-field-ctl\``,t.length>0,"that is the slot `SettingsField` stacks a control into, and this rule is about how an item sizes inside it"),s("§2 the shell's control slot is still a flex row",t.length>0&&t[t.length-1].declarations.get("display")==="flex","`.es-field-ctl` is no longer `display: flex` in the installed shell. How a flex ITEM sizes is then not the question, and this rule would be answering the old one. Re-read the shell before trusting a verdict from here.")}if(e.sheet!==void 0){const t=d.get(e.sheet);s(`read the stylesheet ${e.sheet}`,!!t),s("§3 the installed shell stylesheet was handed in beside it",e.shellSheet!==void 0);const n=[...e.screenSheet?[{name:e.screenSheet.path,css:e.screenSheet.text}]:[],...t?[{name:t.path,css:t.text}]:[],...e.shellSheet?[{name:e.shellSheet.path,css:e.shellSheet.text}]:[]],l=j(n),u=[{panel:y,content:192,what:"MIN_PANEL_W"},{panel:k.right,content:280,what:"the default"},{panel:N,content:520,what:"MAX_PANEL_W"}],b=u.map(h=>{const p=x(l,h.content),g=h.content-p;return` panel ${String(h.panel).padStart(3)} (${h.what.padEnd(11)}) field content ${String(h.content).padStart(3)} track ${String(p).padStart(3)} `+(g>0?`SHORT BY ${g} — ${Math.round(p/h.content*100)}% of the row`:"fills")}).join(`
2
2
  `);for(const h of u)s(`§3 the stacked slider fills its row at ${h.what} (field content ${h.content}px)`,!!t&&x(l,h.content)===h.content,`the shell's stacked sliders do not fill their row.
3
3
 
4
4
  ${e.hosts.length} host(s) — ${e.hosts.join(", ")} — draw the shared \`Slider\` inside
5
- \`SettingsField\`, whose control slot \`.es-field-ctl\` is \`display: flex\`. Nothing in ${e.sheet} makes \`.sf-slider\` take
5
+ \`SettingsField\`, whose control slot \`.es-field-ctl\` is \`display: flex\`. Nothing in ${[e.screenSheet?.path,e.sheet].filter(Boolean).join(" or ")} makes \`.sf-slider\` take
6
6
  that row, so it is \`flex: 0 1 auto\` and collapses to the UA's own ${S}px range input — the
7
7
  same width whatever the panel is dragged to:
8
8
 
@@ -15,15 +15,15 @@ ${b}
15
15
 
16
16
  The shell asks for this in its own words (src/panel/SettingsField.tsx):
17
17
  "The row is stacked rather than side-by-side so the control gets the panel's full
18
- width — a 308px panel cannot afford a label column AND a usable slider."`)}const i=r.filter(t=>/\.tsx?$/.test(t.path)&&!A(t.path)&&(t.path.startsWith("components/")||t.path.startsWith("lib/")));s(`read the source (${i.length} .ts/.tsx files under components/ and lib/, at least ${e.minFiles})`,i.length>=e.minFiles);const a=j(i),f=[...e.hosts].sort();s(`§4 the files that draw a \`Slider\` inside a \`SettingsField\` are the ${f.length} known host(s)`,a.join(`
18
+ width — a 308px panel cannot afford a label column AND a usable slider."`)}const i=r.filter(t=>/\.tsx?$/.test(t.path)&&!A(t.path)&&(t.path.startsWith("components/")||t.path.startsWith("lib/")));s(`read the source (${i.length} .ts/.tsx files under components/ and lib/, at least ${e.minFiles})`,i.length>=e.minFiles);const o=P(i),f=[...e.hosts].sort();s(`§4 the files that draw a \`Slider\` inside a \`SettingsField\` are the ${f.length} known host(s)`,o.join(`
19
19
  `)===f.join(`
20
20
  `),`the set has changed.
21
21
 
22
22
  known: ${f.join(", ")||"(none)"}
23
- found: ${a.join(", ")||"(none)"}
23
+ found: ${o.join(", ")||"(none)"}
24
24
 
25
25
  A NEW one is a row \`.es-field-ctl > .sf-slider\` now fills and nothing here watches — add it to the hosts
26
26
  (and render it for the direct-child check). One REMOVED is a guard pointing at nothing.`);for(const[t,n]of Object.entries(e.renderedHosts??{})){const l=/class="es-field-ctl"><([a-z]+) class="([^"]*)"/.exec(n);s(`§4 ${t}: the rendered row has a \`.es-field-ctl\` slot with an element child`,l!==null,"has it stopped going through `SettingsField`?"),l&&s(`§4 ${t}: the slot's first child is the \`.sf-slider\` itself`,l[2].split(/\s+/).includes("sf-slider"),`the control slot's first child is <${l[1]} class="${l[2]}">. Something wraps the slider, so
27
27
  \`.es-field-ctl > .sf-slider\` no longer reaches it and that row is back to the UA's 129px — the wrapper is the
28
28
  flex item now. Widening the selector to a descendant would NOT fix it; it would paint \`flex: 1\` on an element
29
- whose parent is the wrapper and leave the measurement unchanged. Card 66247.`)}return o()}export{I as partSliderFillsRow,c as reachesSlider};
29
+ whose parent is the wrapper and leave the measurement unchanged. Card 66247.`)}return a()}export{B as partSliderFillsRow,c as reachesSlider};
@@ -0,0 +1 @@
1
+ export * from "./loop.js";
@@ -0,0 +1 @@
1
+ export*from"./loop.js";
@@ -0,0 +1,29 @@
1
+ import type { EdgeCell } from "efficient-easel/draw";
2
+ import type { ShowWhenRule } from "efficient-shell/format";
3
+ export type Loop = "none" | "scroll";
4
+ export declare const LOOP_NONE: Loop;
5
+ export declare const LOOP_OPTIONS: readonly {
6
+ label: string;
7
+ value: Loop;
8
+ }[];
9
+ export declare function parseLoop(value: unknown): Loop;
10
+ export declare const LOOP_SCROLLS: ShowWhenRule;
11
+ export type LoopDirection = "left" | "right" | "up" | "down";
12
+ export declare const DEFAULT_LOOP_DIRECTION: LoopDirection;
13
+ export declare const LOOP_DIRECTION_OPTIONS: readonly {
14
+ label: string;
15
+ value: LoopDirection;
16
+ cell: EdgeCell;
17
+ }[];
18
+ export declare function parseLoopDirection(value: unknown): LoopDirection;
19
+ export declare function isVerticalLoop(direction: LoopDirection): boolean;
20
+ export declare function loopSecondsOf(props: {
21
+ loopDuration?: unknown;
22
+ speed?: unknown;
23
+ }): number;
24
+ export declare const DEFAULT_LOOP_SECONDS: number;
25
+ export declare const DEFAULT_LOOP_DELAY: number;
26
+ export declare function loopDelayOf(props: {
27
+ loopDelay?: unknown;
28
+ }): number;
29
+ export declare function loopAnimation(direction: LoopDirection, seconds: number, delay?: number): string;
@@ -0,0 +1 @@
1
+ import{MOTION_EASING as p,MOTION_TIMING as e,motionSeconds as l}from"efficient-shell/format";import{parseOption as r}from"../parse-option.js";const i="none",O=[{label:"None",value:"none"},{label:"Scroll",value:"scroll"}];function x(o){return r(O,i,o)}const D={field:"loop",is:"scroll"},u="left",c=[{label:"Left",value:"left",cell:"left"},{label:"Right",value:"right",cell:"right"},{label:"Up",value:"up",cell:"top"},{label:"Down",value:"down",cell:"bottom"}],a={left:"storefront-ticker",right:"storefront-ticker-right",up:"storefront-ticker-up",down:"storefront-ticker-down"};function _(o){return r(c,u,o)}function d(o){return o==="up"||o==="down"}function N(o){return l("loop","duration",o.loopDuration!=null?o.loopDuration:o.speed)}const E=e.loop.duration.default,f=e.loop.delay.default;function I(o){return l("loop","delay",o.loopDelay)}function S(o,n,t=f){return`${a[o]} ${n}s ${p.loop}${t?` ${t}s`:""} infinite`}export{f as DEFAULT_LOOP_DELAY,u as DEFAULT_LOOP_DIRECTION,E as DEFAULT_LOOP_SECONDS,c as LOOP_DIRECTION_OPTIONS,i as LOOP_NONE,O as LOOP_OPTIONS,D as LOOP_SCROLLS,d as isVerticalLoop,S as loopAnimation,I as loopDelayOf,N as loopSecondsOf,x as parseLoop,_ as parseLoopDirection};
@@ -0,0 +1,59 @@
1
+ export declare const BLOCK_SIZE_CLASS = "sf-block-size";
2
+ export declare const BLOCK_WIDTH_FIT_POINTS: readonly [{
3
+ readonly label: "Fit content";
4
+ readonly value: "fit";
5
+ }, {
6
+ readonly label: "Fill";
7
+ readonly value: "fill";
8
+ }, {
9
+ readonly label: "Fixed";
10
+ readonly value: "fixed";
11
+ }];
12
+ export type BlockWidthFit = (typeof BLOCK_WIDTH_FIT_POINTS)[number]["value"];
13
+ export declare const BLOCK_WIDTH_FIT_DEFAULT: BlockWidthFit;
14
+ export declare function parseBlockWidthFit(value: unknown): BlockWidthFit | undefined;
15
+ export declare const BLOCK_FIXED_WIDTH: {
16
+ readonly min: 40;
17
+ readonly max: 2000;
18
+ readonly step: 10;
19
+ readonly fallback: 480;
20
+ };
21
+ export declare const BLOCK_WIDTH_LIMIT: {
22
+ readonly min: 40;
23
+ readonly max: 2000;
24
+ readonly step: 10;
25
+ };
26
+ export declare const TEXT_FIT_POINTS: readonly [{
27
+ readonly label: "Wrap";
28
+ readonly value: "wrap";
29
+ }, {
30
+ readonly label: "Shrink to fit";
31
+ readonly value: "shrink";
32
+ }];
33
+ export type TextFit = (typeof TEXT_FIT_POINTS)[number]["value"];
34
+ export declare function parseTextFit(value: unknown): TextFit | undefined;
35
+ export declare const TEXT_FIT_MIN_FONT: {
36
+ readonly min: 8;
37
+ readonly max: 120;
38
+ readonly step: 1;
39
+ readonly fallback: 16;
40
+ };
41
+ export declare const TEXT_FIT_ATTR: {
42
+ readonly fit: "data-fit";
43
+ readonly fitPhone: "data-fit-phone";
44
+ readonly min: "data-fit-min";
45
+ readonly minPhone: "data-fit-min-phone";
46
+ };
47
+ export declare const BLOCK_SIZE_KEYS: readonly ["widthFit", "width", "minWidth", "maxWidth", "textFit", "minFont"];
48
+ export type BlockSizeKey = (typeof BLOCK_SIZE_KEYS)[number];
49
+ export type BlockSizeTwin = {
50
+ desktop?: unknown;
51
+ phone?: unknown;
52
+ };
53
+ export type BlockSizeValues = Partial<Record<BlockSizeKey, BlockSizeTwin>>;
54
+ export type BlockSize = {
55
+ className: string;
56
+ style: Record<string, string>;
57
+ attrs: Record<string, string>;
58
+ };
59
+ export declare function blockSizeOf(values: BlockSizeValues): BlockSize | null;
@@ -0,0 +1 @@
1
+ const u="sf-block-size",W=[{label:"Fit content",value:"fit"},{label:"Fill",value:"fill"},{label:"Fixed",value:"fixed"}],E="fit";function b(t){return W.some(n=>n.value===t)?t:void 0}const S={min:40,max:2e3,step:10,fallback:480},P={min:40,max:2e3,step:10},L=[{label:"Wrap",value:"wrap"},{label:"Shrink to fit",value:"shrink"}];function k(t){return L.some(n=>n.value===t)?t:void 0}const g={min:8,max:120,step:1,fallback:16},p={fit:"data-fit",fitPhone:"data-fit-phone",min:"data-fit-min",minPhone:"data-fit-min-phone"},B=["widthFit","width","minWidth","maxWidth","textFit","minFont"],s=t=>typeof t=="number"&&Number.isFinite(t)&&t>=0?t:void 0,O={desktop:{fill:"min-[800px]:w-full min-[800px]:[.flex-row>&]:grow",fixed:"min-[800px]:w-[min(var(--sf-bw),100%)] min-[800px]:basis-auto! min-[800px]:grow-0! min-[800px]:shrink-0"},phone:{fill:"max-[800px]:w-full",fixed:"max-[800px]:w-[min(var(--sf-bw-p),100%)] max-[800px]:basis-auto! max-[800px]:grow-0! max-[800px]:shrink-0"}},C={desktop:"--sf-bw",phone:"--sf-bw-p"},D={minWidth:{desktop:["--sf-bmin","min-[800px]:min-w-[var(--sf-bmin)]"],phone:["--sf-bmin-p","max-[800px]:min-w-[var(--sf-bmin-p)]"]},maxWidth:{desktop:["--sf-bmax","min-[800px]:max-w-[var(--sf-bmax)]"],phone:["--sf-bmax-p","max-[800px]:max-w-[var(--sf-bmax-p)]"]}};function K(t){const n=[],f={},o={},x=b(t.widthFit?.desktop),T=b(t.widthFit?.phone)??x,d=s(t.width?.desktop),w=s(t.width?.phone)??d;for(const[e,i,m]of[["desktop",x,d],["phone",T,w]])!i||i==="fit"||(n.push(O[e][i]),i==="fixed"&&(f[C[e]]=`${m??S.fallback}px`));for(const e of["minWidth","maxWidth"]){const i=s(t[e]?.desktop),m=s(t[e]?.phone)??i;for(const[F,l]of[["desktop",i],["phone",m]]){if(l===void 0)continue;const[_,I]=D[e][F];f[_]=`${l}px`,n.push(I)}}const a=k(t.textFit?.desktop),c=k(t.textFit?.phone),h=s(t.minFont?.desktop),r=s(t.minFont?.phone);return a&&(o[p.fit]=a),c&&(o[p.fitPhone]=c),h!==void 0&&(o[p.min]=String(h)),r!==void 0&&(o[p.minPhone]=String(r)),n.length===0&&Object.keys(o).length===0?null:{className:[u,...n].join(" "),style:f,attrs:o}}export{S as BLOCK_FIXED_WIDTH,u as BLOCK_SIZE_CLASS,B as BLOCK_SIZE_KEYS,E as BLOCK_WIDTH_FIT_DEFAULT,W as BLOCK_WIDTH_FIT_POINTS,P as BLOCK_WIDTH_LIMIT,p as TEXT_FIT_ATTR,g as TEXT_FIT_MIN_FONT,L as TEXT_FIT_POINTS,K as blockSizeOf,b as parseBlockWidthFit,k as parseTextFit};
@@ -1 +1 @@
1
- const p="sf-card",s={min:0,max:100,step:5,fallback:0,unit:"%"},u=[{label:"Even",value:"even"},{label:"From the bottom",value:"bottom"}],l="68%",b={desktop:20,phone:20,side:40,sidePhone:24},d="sf-box-sides",x={min:0,max:200,step:10};function S(t){return typeof t=="string"&&t.trim()!==""}function f(t,r){const e=typeof t=="number"?t:Number.parseFloat(String(t??""));if(!Number.isFinite(e)||e<=0)return null;const n=(Math.min(s.max,Math.max(s.min,e))/100).toFixed(2);return r!=="bottom"?{background:`rgba(0,0,0,${n})`}:{background:`linear-gradient(0deg, rgba(0,0,0,${n}) 0%, rgba(0,0,0,0) ${l})`}}function _(t,r){const e={"top-left":["start","start"],"top-center":["center","start"],"top-right":["end","start"],left:["start","center"],center:["center","center"],right:["end","center"],"bottom-left":["start","end"],"bottom-center":["center","end"],"bottom-right":["end","end"]},[o,n]=e[t]??e.center,[c,a]=r==="column"?[n,o]:[o,n],i={start:"justify-start",center:"justify-center",end:"justify-end"},m={start:"items-start",center:"items-center",end:"items-end"};return`${i[c]} ${m[a]}`}export{b as BOX_CARD_PAD,x as BOX_CARD_SIDE,s as BOX_DARKEN,u as BOX_DARKEN_STYLES,d as BOX_OWNS_SIDES_CLASS,p as CARD_SHADOW_CLASS,f as boxDarkenStyle,_ as boxPlacementClasses,S as isBackgroundBox};
1
+ import{scrim as s}from"./scrim.js";const b="sf-card",c={min:0,max:100,step:5,fallback:0,unit:"%"},d=[{label:"Even",value:"even"},{label:"From the bottom",value:"bottom"}],p="68%",x={desktop:20,phone:20,side:40,sidePhone:24},f="sf-box-sides",S={min:0,max:200,step:10};function _(t){return typeof t=="string"&&t.trim()!==""}function A(t,r){const e=typeof t=="number"?t:Number.parseFloat(String(t??""));if(!Number.isFinite(e)||e<=0)return null;const n=(Math.min(c.max,Math.max(c.min,e))/100).toFixed(2);return r!=="bottom"?{background:s(Number(n))}:{background:`linear-gradient(0deg, ${s(Number(n))} 0%, ${s(0)} ${p})`}}function D(t,r){const e={"top-left":["start","start"],"top-center":["center","start"],"top-right":["end","start"],left:["start","center"],center:["center","center"],right:["end","center"],"bottom-left":["start","end"],"bottom-center":["center","end"],"bottom-right":["end","end"]},[o,n]=e[t]??e.center,[i,a]=r==="column"?[n,o]:[o,n],m={start:"justify-start",center:"justify-center",end:"justify-end"},u={start:"items-start",center:"items-center",end:"items-end"};return`${m[i]} ${u[a]}`}export{x as BOX_CARD_PAD,S as BOX_CARD_SIDE,c as BOX_DARKEN,d as BOX_DARKEN_STYLES,f as BOX_OWNS_SIDES_CLASS,b as CARD_SHADOW_CLASS,A as boxDarkenStyle,D as boxPlacementClasses,_ as isBackgroundBox};
@@ -1,43 +1,7 @@
1
- export declare const BOX_JUSTIFY_POINTS: readonly [{
2
- readonly label: "Start";
3
- readonly value: "start";
4
- }, {
5
- readonly label: "Center";
6
- readonly value: "center";
7
- }, {
8
- readonly label: "Space between";
9
- readonly value: "between";
10
- }, {
11
- readonly label: "End";
12
- readonly value: "end";
13
- }];
14
- export declare const BOX_ALIGN_POINTS: readonly [{
15
- readonly label: "Start";
16
- readonly value: "start";
17
- }, {
18
- readonly label: "Center";
19
- readonly value: "center";
20
- }, {
21
- readonly label: "End";
22
- readonly value: "end";
23
- }, {
24
- readonly label: "Stretch";
25
- readonly value: "stretch";
26
- }];
27
1
  export declare const NESTED_BOX_PADDING: {
28
2
  readonly sectionPaddingTop: 0;
29
3
  readonly sectionPaddingBottom: 0;
30
4
  };
31
- export declare const BOX_WRAP_LABEL = "Wrap";
32
- export declare const BOX_WRAP_POINTS: readonly [{
33
- readonly label: "Wrap";
34
- readonly value: "wrap";
35
- }, {
36
- readonly label: "No wrap";
37
- readonly value: "nowrap";
38
- }];
39
- export type BoxJustify = (typeof BOX_JUSTIFY_POINTS)[number]["value"];
40
- export type BoxAlign = (typeof BOX_ALIGN_POINTS)[number]["value"];
41
5
  export declare function boxLayoutClasses(justify: unknown, align: unknown): string;
42
6
  export declare function boxWrapClass(wrap: unknown): string;
43
7
  export declare const BOX_SHARE_LABEL = "Block widths";
@@ -65,6 +29,10 @@ export declare const BOX_SHARE_POINTS: readonly [{
65
29
  readonly label: "Bigger right";
66
30
  readonly value: "biggerRight";
67
31
  readonly weights: readonly [1, 3];
32
+ }, {
33
+ readonly label: "2 : 3";
34
+ readonly value: "twoThree";
35
+ readonly weights: readonly [2, 3];
68
36
  }];
69
37
  export type BoxShare = (typeof BOX_SHARE_POINTS)[number]["value"];
70
38
  export declare function boxShareClasses(share: unknown): string;
@@ -72,7 +40,18 @@ export declare function boxFitContentClass(share: unknown): string;
72
40
  export declare const BOX_PHONE_ROW_LABEL = "Columns";
73
41
  export declare const BOX_PHONE_ROW_MIN = 1;
74
42
  export declare const BOX_PHONE_ROW_MAX = 3;
75
- export declare function boxPhoneRowClasses(perRow: unknown): string;
43
+ export declare const BOX_SHARE_PHONE_POINTS: ({
44
+ readonly label: "Fit content";
45
+ readonly value: "content";
46
+ readonly weights: null;
47
+ } | {
48
+ readonly label: "Equal";
49
+ readonly value: "equal";
50
+ readonly weights: readonly [1, 1];
51
+ })[];
52
+ export declare const BOX_SHARE_PHONE_DEFAULT = "equal";
53
+ export declare function boxPhoneRowClasses(perRow: unknown, sharePhone?: unknown): string;
54
+ export declare function boxPhoneRowFits(perRow: unknown, sharePhone: unknown): boolean;
76
55
  export declare const BOX_BLOCK_SPACING_LABEL = "Block spacing";
77
56
  export declare const BOX_BLOCK_SPACING_POINTS: readonly [{
78
57
  readonly label: "Each block";
@@ -1 +1 @@
1
- const _=[{label:"Start",value:"start"},{label:"Center",value:"center"},{label:"Space between",value:"between"},{label:"End",value:"end"}],g=[{label:"Start",value:"start"},{label:"Center",value:"center"},{label:"End",value:"end"},{label:"Stretch",value:"stretch"}],b={sectionPaddingTop:0,sectionPaddingBottom:0},u="Wrap",S=[{label:"Wrap",value:"wrap"},{label:"No wrap",value:"nowrap"}],a={start:"justify-start",center:"justify-center",between:"justify-between",end:"justify-end"},l={start:"items-start",center:"items-center",end:"items-end",stretch:"items-stretch"};function O(e,t){const o=typeof e=="string"&&e in a?a[e]:"",r=typeof t=="string"&&t in l?l[t]:"";return[o,r].filter(Boolean).join(" ")}function f(e){return e===!0||e==="wrap"?"flex-wrap":""}const B="Block widths",L=[{label:"Fit content",value:"content",weights:null},{label:"Equal",value:"equal",weights:[1,1]},{label:"Big left",value:"bigLeft",weights:[2,1]},{label:"Big right",value:"bigRight",weights:[1,2]},{label:"Bigger left",value:"biggerLeft",weights:[3,1]},{label:"Bigger right",value:"biggerRight",weights:[1,3]}],n="[&>*]:min-w-0 [&>*]:flex-1 [&>*]:basis-0",s={equal:n,bigLeft:`${n} [&>*:first-child]:min-[800px]:grow-[2]`,bigRight:`${n} [&>*:last-child]:min-[800px]:grow-[2]`,biggerLeft:`${n} [&>*:first-child]:min-[800px]:grow-[3]`,biggerRight:`${n} [&>*:last-child]:min-[800px]:grow-[3]`};function i(e){return typeof e=="string"?s[e]??"":""}const c="[&>*]:min-[800px]:basis-[content]";function w(e){return i(e)===""?c:""}const h="Columns",A=1,m=3,p={2:"max-[800px]:flex-wrap [&>*]:max-[800px]:min-w-0 [&>*]:max-[800px]:basis-[calc((100%_-_var(--sf-gap-len,0px))/2)]",3:"max-[800px]:flex-wrap [&>*]:max-[800px]:min-w-0 [&>*]:max-[800px]:basis-[calc((100%_-_var(--sf-gap-len,0px)_*_2)/3)]"};function C(e){const t=Number(e);return p[t]??"max-[800px]:flex-col"}const N="Block spacing",v=[{label:"Each block",value:"each"},{label:"Gap only",value:"gap"}],x="sf-box-gap-only";function E(e){return e==="gap"?x:""}export{g as BOX_ALIGN_POINTS,N as BOX_BLOCK_SPACING_LABEL,v as BOX_BLOCK_SPACING_POINTS,x as BOX_GAP_ONLY_CLASS,_ as BOX_JUSTIFY_POINTS,h as BOX_PHONE_ROW_LABEL,m as BOX_PHONE_ROW_MAX,A as BOX_PHONE_ROW_MIN,B as BOX_SHARE_LABEL,L as BOX_SHARE_POINTS,u as BOX_WRAP_LABEL,S as BOX_WRAP_POINTS,b as NESTED_BOX_PADDING,E as boxBlockSpacingClass,w as boxFitContentClass,O as boxLayoutClasses,C as boxPhoneRowClasses,i as boxShareClasses,f as boxWrapClass};
1
+ const f={sectionPaddingTop:0,sectionPaddingBottom:0},s={start:"justify-start",center:"justify-center",between:"justify-between",end:"justify-end"},i={start:"items-start",center:"items-center",end:"items-end",stretch:"items-stretch"};function b(t,e){const o=typeof t=="string"&&t in s?s[t]:"",a=typeof e=="string"&&e in i?i[e]:"";return[o,a].filter(Boolean).join(" ")}function m(t){return t===!0||t==="wrap"?"flex-wrap":""}const S="Block widths",l=[{label:"Fit content",value:"content",weights:null},{label:"Equal",value:"equal",weights:[1,1]},{label:"Big left",value:"bigLeft",weights:[2,1]},{label:"Big right",value:"bigRight",weights:[1,2]},{label:"Bigger left",value:"biggerLeft",weights:[3,1]},{label:"Bigger right",value:"biggerRight",weights:[1,3]},{label:"2 : 3",value:"twoThree",weights:[2,3]}],n="[&>*]:min-w-0 [&>*]:flex-1 [&>*]:basis-0",x={equal:n,bigLeft:`${n} [&>*:first-child]:min-[800px]:grow-[2]`,bigRight:`${n} [&>*:last-child]:min-[800px]:grow-[2]`,biggerLeft:`${n} [&>*:first-child]:min-[800px]:grow-[3]`,biggerRight:`${n} [&>*:last-child]:min-[800px]:grow-[3]`,twoThree:`${n} [&>*:first-child]:min-[800px]:grow-[2] [&>*:last-child]:min-[800px]:grow-[3]`};function c(t){return typeof t=="string"?x[t]??"":""}const p="[&>*]:min-[800px]:basis-[content]";function h(t){return c(t)===""?p:""}const O="Columns",w=1,B=3,r={2:"max-[800px]:flex-wrap [&>*]:max-[800px]:min-w-0 [&>*]:max-[800px]:basis-[calc((100%_-_var(--sf-gap-len-phone,var(--sf-gap-len,0px)))/2)]",3:"max-[800px]:flex-wrap [&>*]:max-[800px]:min-w-0 [&>*]:max-[800px]:basis-[calc((100%_-_var(--sf-gap-len-phone,var(--sf-gap-len,0px))_*_2)/3)]"},L=l.filter(t=>t.value==="content"||t.value==="equal"),A="equal",g="max-[800px]:flex-wrap [&>*]:max-[800px]:min-w-0 [&>*]:max-[800px]:grow-0 [&>*]:max-[800px]:basis-[content]";function E(t,e){const o=r[Number(t)];return o?_(t,e)?g:o:"max-[800px]:flex-col"}function _(t,e){return Number(t)in r&&e==="content"}const C="Block spacing",N=[{label:"Each block",value:"each"},{label:"Gap only",value:"gap"}],u="sf-box-gap-only";function P(t){return t==="gap"?u:""}export{C as BOX_BLOCK_SPACING_LABEL,N as BOX_BLOCK_SPACING_POINTS,u as BOX_GAP_ONLY_CLASS,O as BOX_PHONE_ROW_LABEL,B as BOX_PHONE_ROW_MAX,w as BOX_PHONE_ROW_MIN,S as BOX_SHARE_LABEL,A as BOX_SHARE_PHONE_DEFAULT,L as BOX_SHARE_PHONE_POINTS,l as BOX_SHARE_POINTS,f as NESTED_BOX_PADDING,P as boxBlockSpacingClass,h as boxFitContentClass,b as boxLayoutClasses,E as boxPhoneRowClasses,_ as boxPhoneRowFits,c as boxShareClasses,m as boxWrapClass};
@@ -0,0 +1,13 @@
1
+ export declare function boxLinkOf(value: unknown): string;
2
+ export declare const BOX_LINK_ATTR = "data-sf-box-link";
3
+ export declare const BOX_LINK_CLASS = "absolute inset-0 -z-[1] outline-none focus-visible:z-[2] focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-accent";
4
+ export declare const BOX_LINKED_CLASS = "relative isolate pointer-events-none [&_a]:pointer-events-auto [&_button]:pointer-events-auto [&_input]:pointer-events-auto [&_select]:pointer-events-auto [&_textarea]:pointer-events-auto [&_label]:pointer-events-auto [&_summary]:pointer-events-auto [&_iframe]:pointer-events-auto [&_video]:pointer-events-auto [&_audio]:pointer-events-auto [&_[role=button]]:pointer-events-auto [&_[tabindex]:not([tabindex='-1'])]:pointer-events-auto";
5
+ export declare const BOX_JUMP_ATTR = "data-sf-box-jump";
6
+ export declare function boxJumpBlocksClass(slug: string): string;
7
+ export declare function boxJumpSlug(on: unknown, anchor: unknown): string;
8
+ export declare function jumpHighlightCss({ box, lit, first, }: {
9
+ box: string;
10
+ lit: readonly string[];
11
+ first: (scope: string) => readonly string[];
12
+ }): string;
13
+ export declare function boxJumpCss(slug: string): string;
@@ -0,0 +1,13 @@
1
+ import{slugify as a}from"efficient-shell/format";function f(t){return typeof t=="string"?t.trim():""}const b="data-sf-box-link",v="absolute inset-0 -z-[1] outline-none focus-visible:z-[2] focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-accent",x="relative isolate pointer-events-none [&_a]:pointer-events-auto [&_button]:pointer-events-auto [&_input]:pointer-events-auto [&_select]:pointer-events-auto [&_textarea]:pointer-events-auto [&_label]:pointer-events-auto [&_summary]:pointer-events-auto [&_iframe]:pointer-events-auto [&_video]:pointer-events-auto [&_audio]:pointer-events-auto [&_[role=button]]:pointer-events-auto [&_[tabindex]:not([tabindex='-1'])]:pointer-events-auto",u="data-sf-box-jump";function c(t){return`sf-box-jump-${t}`}function $(t,o){return t!==!0?"":a(typeof o=="string"?o:"")}function p({box:t,lit:o,first:n}){const e=r=>r.join(`,
2
+ `),i=n(t),s=o.flatMap(n);return`
3
+ ${t} {
4
+ outline: 2px solid transparent;
5
+ outline-offset: -2px;
6
+ transition: outline-color 600ms ease-out;
7
+ }
8
+ ${e(i)} { transition: background-color 600ms ease-out; }
9
+ ${e(i.map(r=>`${r} *`))} { transition: color 600ms ease-out; }
10
+ ${e(o)} { outline-color: var(--accent); }
11
+ ${e(s)} { background-color: var(--accent); }
12
+ ${e([...s,...s.map(r=>`${r} *`)])} { color: var(--bg) !important; }
13
+ `}function _(t){const o=`[${u}="${t}"]`,n=`.${c(t)}`,e=`[id="${t}"]:target`;return p({box:o,lit:[`${e}~${o}`,`${e}~* ${o}`],first:i=>[`${i} ${n}>:first-child:not(.sf-section-anchor)`,`${i} ${n}>.sf-section-anchor:first-child+*`]})}export{u as BOX_JUMP_ATTR,x as BOX_LINKED_CLASS,b as BOX_LINK_ATTR,v as BOX_LINK_CLASS,c as boxJumpBlocksClass,_ as boxJumpCss,$ as boxJumpSlug,f as boxLinkOf,p as jumpHighlightCss};
@@ -0,0 +1,10 @@
1
+ import type { CSSProperties } from "react";
2
+ import { type TickerSeparator } from "../sections/ticker-style.js";
3
+ export declare const BOX_SEPARATOR_POINTS: readonly {
4
+ value: TickerSeparator;
5
+ }[];
6
+ export declare function boxSeparatorOf(value: unknown): TickerSeparator | undefined;
7
+ export declare function isStripBox(direction: unknown, separator: unknown): boolean;
8
+ export declare function boxSeparatorClasses(direction: unknown, separator: unknown): string;
9
+ export declare function boxSeparatorSeamClass(direction: unknown, separator: unknown): string;
10
+ export declare function boxSeparatorStyle(direction: unknown, separator: unknown): CSSProperties;
@@ -0,0 +1 @@
1
+ import{parseTickerSeparator as a,SEPARATOR_GLYPH as l,separatorScaleClass as f,TICKER_SEPARATOR_OPTIONS as c}from"../sections/ticker-style.js";const d=[{value:"none"},{value:"dot"},{value:"cross"},{value:"slash"},{value:"triangle"}];function r(h){return c.some(e=>e.value===h)?a(h):void 0}const n="overflow-hidden [&>*]:shrink-0 [&>*]:max-[800px]:basis-[content] [&>*+*]:relative [&>*+*_:is(p,h1,h2,h3,h4,h5,h6):first-child]:before:absolute [&>*+*_:is(p,h1,h2,h3,h4,h5,h6):first-child]:before:top-1/2 [&>*+*_:is(p,h1,h2,h3,h4,h5,h6):first-child]:before:left-[calc(var(--sf-gap-len,0px)/-2)] [&>*+*_:is(p,h1,h2,h3,h4,h5,h6):first-child]:max-[800px]:before:left-[calc(var(--sf-gap-len-phone,calc(var(--sf-gap-len,0px)/2))/-2)] [&>*+*_:is(p,h1,h2,h3,h4,h5,h6):first-child]:before:-translate-x-1/2 [&>*+*_:is(p,h1,h2,h3,h4,h5,h6):first-child]:before:-translate-y-1/2 [&>*+*_:is(p,h1,h2,h3,h4,h5,h6):first-child]:before:leading-none [&>*+*_:is(p,h1,h2,h3,h4,h5,h6):first-child]:before:text-accent [&>*+*_:is(p,h1,h2,h3,h4,h5,h6):first-child]:before:text-[length:var(--sf-sep-size,1em)] [&>*+*_:is(p,h1,h2,h3,h4,h5,h6):first-child]:before:content-[var(--sf-sep-mark)]";function t(h,e){return h==="row"&&r(e)!==void 0}function x(h,e){return t(h,e)?n:""}const p="[&>*:last-child]:relative [&>*:last-child_:is(p,h1,h2,h3,h4,h5,h6):first-child]:after:absolute [&>*:last-child_:is(p,h1,h2,h3,h4,h5,h6):first-child]:after:top-1/2 [&>*:last-child_:is(p,h1,h2,h3,h4,h5,h6):first-child]:after:right-[calc(var(--sf-gap-len,0px)/-2)] [&>*:last-child_:is(p,h1,h2,h3,h4,h5,h6):first-child]:max-[800px]:after:right-[calc(var(--sf-gap-len,0px)/-4)] [&>*:last-child_:is(p,h1,h2,h3,h4,h5,h6):first-child]:after:translate-x-1/2 [&>*:last-child_:is(p,h1,h2,h3,h4,h5,h6):first-child]:after:-translate-y-1/2 [&>*:last-child_:is(p,h1,h2,h3,h4,h5,h6):first-child]:after:leading-none [&>*:last-child_:is(p,h1,h2,h3,h4,h5,h6):first-child]:after:text-accent [&>*:last-child_:is(p,h1,h2,h3,h4,h5,h6):first-child]:after:text-[length:var(--sf-sep-size,1em)] [&>*:last-child_:is(p,h1,h2,h3,h4,h5,h6):first-child]:after:content-[var(--sf-sep-mark)]";function _(h,e){return t(h,e)?p:""}function S(h,e){if(!t(h,e))return{};const s=r(e),i=/^text-\[(.+)\]$/.exec(f("small",s))?.[1];return{"--sf-sep-mark":JSON.stringify(l[s]),...i?{"--sf-sep-size":i}:{}}}export{d as BOX_SEPARATOR_POINTS,x as boxSeparatorClasses,r as boxSeparatorOf,_ as boxSeparatorSeamClass,S as boxSeparatorStyle,t as isStripBox};
@@ -0,0 +1,10 @@
1
+ export declare const BOX_SHAPES: readonly ["auto", "tall", "square", "wide"];
2
+ export type BoxShape = (typeof BOX_SHAPES)[number];
3
+ export declare const BOX_SHAPE_OPTIONS: readonly {
4
+ label: string;
5
+ value: BoxShape;
6
+ }[];
7
+ export declare function boxShapeOf(value: unknown): BoxShape;
8
+ export declare function boxShapeClass(value: unknown): string;
9
+ export declare function boxShapePhoneOf(desktop: unknown, phone: unknown): BoxShape | null;
10
+ export declare function boxShapeClasses(desktop: unknown, phone: unknown): string;
@@ -0,0 +1 @@
1
+ import{galleryCardRatioClass as n}from"./gallery-card-layout.js";const u=["auto","tall","square","wide"],c=[{label:"Auto",value:"auto"},{label:"Tall (3:4)",value:"tall"},{label:"Square (1:1)",value:"square"},{label:"Wide (2:1)",value:"wide"}];function e(a){return u.includes(String(a??""))?a:"auto"}function r(a){const t=e(a);return t==="auto"?"":n(t)}const s={tall:"min-[800px]:aspect-[3/4]",square:"min-[800px]:aspect-square",wide:"min-[800px]:aspect-[2/1]"},x={auto:"max-[800px]:aspect-auto",tall:"max-[800px]:h-auto max-[800px]:aspect-[3/4]",square:"max-[800px]:h-auto max-[800px]:aspect-square",wide:"max-[800px]:h-auto max-[800px]:aspect-[2/1]"};function p(a,t){return u.includes(String(t??""))?t===e(a)?null:t:null}function m(a,t){const l=p(a,t);if(l===null)return r(a);const o=e(a);return[o==="auto"?"":s[o],x[l]].filter(Boolean).join(" ")}export{u as BOX_SHAPES,c as BOX_SHAPE_OPTIONS,r as boxShapeClass,m as boxShapeClasses,e as boxShapeOf,p as boxShapePhoneOf};
@@ -8,3 +8,4 @@ export declare function buttonIconChoice(icon: unknown, arrow: unknown): ButtonI
8
8
  export declare function buttonIconSide(value: unknown): ButtonIconSide;
9
9
  export declare function buttonIconAtEnd(side: unknown, width: unknown): boolean;
10
10
  export declare function buttonWidth(value: unknown): ButtonWidth;
11
+ export declare function buttonWidthClass(desktop: unknown, phone: unknown): string;
@@ -1 +1 @@
1
- import{buttonArrowShown as o}from"./button-arrow.js";const r=["none","arrow-right","arrow-long-right","arrow-up-right","chevron-right","external","cart","bag","tag","email","location","play","download","search","car"];function e(t){return typeof t=="string"&&r.includes(t)?t:void 0}function f(t,n){return e(t)??(o(n)?"arrow-right":"none")}function i(t){return t==="before"?"before":t==="end"?"end":"after"}function a(t,n){return i(t)==="end"&&c(n)==="fill"}function c(t){return t==="fill"?"fill":"fit"}export{r as BUTTON_ICONS,a as buttonIconAtEnd,f as buttonIconChoice,i as buttonIconSide,c as buttonWidth,e as storedButtonIcon};
1
+ import{buttonArrowShown as f}from"./button-arrow.js";import{nonEmptyString as u}from"../non-empty-string.js";const c=["none","arrow-right","arrow-long-right","arrow-up-right","chevron-right","external","cart","bag","tag","email","location","play","download","search","car"];function l(t){return typeof t=="string"&&c.includes(t)?t:void 0}function x(t,o){return l(t)??(f(o)?"arrow-right":"none")}function p(t){return t==="before"?"before":t==="end"?"end":"after"}function h(t,o){return p(t)==="end"&&n(o)==="fill"}function n(t){return t==="fill"||t==="fixed"?"fill":"fit"}function s(t,o){const r=n(t),e=r==="fill"?["w-full"]:[];if(u(o)){const i=n(o);i!==r&&e.push(i==="fill"?"max-[800px]:w-full":"max-[800px]:w-auto")}return e.join(" ")}export{c as BUTTON_ICONS,h as buttonIconAtEnd,x as buttonIconChoice,p as buttonIconSide,n as buttonWidth,s as buttonWidthClass,l as storedButtonIcon};
@@ -1,11 +1,8 @@
1
1
  import type { CSSProperties } from "react";
2
2
  export { CORNER_SIDES, CORNER_SIDE_POINTS, cornerSidesShorthand, hasCornerSubset, normalizeCornerSides, type CornerSide, } from "./section-corners.js";
3
3
  export declare const CARD_BOX_RADIUS_PROP = "--sf-card-box-radius";
4
- export declare const SITE_CARD_RADIUS_PROP = "--sf-site-card-radius";
5
- export declare const CARD_FOLLOWS_SITE_CLASS = "sf-section-bleeds";
6
4
  export declare function hasOwnCardCorners(value: unknown): boolean;
7
5
  export declare function cardCornerStyle(value: unknown, sides?: unknown): CSSProperties | undefined;
8
- export declare function siteCardRadiusTokens(rootTokens: Record<string, string>): Record<string, string>;
9
6
  type CardNode = {
10
7
  props?: Record<string, unknown>;
11
8
  };
@@ -1 +1 @@
1
- import{cornerRadiusTokens as d,normalizeCornerRadius as p}from"../theme.js";import{CARD_RADIUS_PROP as t,cornerSidesShorthand as S,hasCornerSubset as u,normalizeCornerSides as c}from"./section-corners.js";import{CORNER_SIDES as b,CORNER_SIDE_POINTS as I,cornerSidesShorthand as P,hasCornerSubset as E,normalizeCornerSides as T}from"./section-corners.js";const C="--sf-card-box-radius",a="--sf-site-card-radius",m="sf-section-bleeds";function f(r){return typeof r=="number"&&Number.isFinite(r)}function x(r,o){if(!f(r))return;const e=d(p(r))[t];if(typeof e!="string")return;const s=u(o)?S(e,c(o)??[]):e;return{[C]:s}}function O(r){const o=r[t];return typeof o=="string"?{[a]:o}:{}}function h(r,o){const e=r.find(n=>n?.props?.id===o);if(!e)return[...r];const s=e.props?.cardCorners,i=e.props?.cardCornerSides;return r.map(n=>n?.props?.id===o?n:{...n,props:{...n.props,cardCorners:s,cardCornerSides:i}})}export{C as CARD_BOX_RADIUS_PROP,m as CARD_FOLLOWS_SITE_CLASS,b as CORNER_SIDES,I as CORNER_SIDE_POINTS,a as SITE_CARD_RADIUS_PROP,x as cardCornerStyle,h as cardsWithSharedCorners,P as cornerSidesShorthand,E as hasCornerSubset,f as hasOwnCardCorners,T as normalizeCornerSides,O as siteCardRadiusTokens};
1
+ import{cornerRadiusTokens as i,normalizeCornerRadius as d}from"../theme.js";import{CARD_RADIUS_PROP as p,cornerSidesShorthand as S,hasCornerSubset as u,normalizeCornerSides as C}from"./section-corners.js";import{CORNER_SIDES as O,CORNER_SIDE_POINTS as b,cornerSidesShorthand as D,hasCornerSubset as P,normalizeCornerSides as A}from"./section-corners.js";const a="--sf-card-box-radius";function c(r){return typeof r=="number"&&Number.isFinite(r)}function m(r,e){if(!c(r))return;const o=i(d(r))[p];if(typeof o!="string")return;const s=u(e)?S(o,C(e)??[]):o;return{[a]:s}}function h(r,e){const o=r.find(n=>n?.props?.id===e);if(!o)return[...r];const s=o.props?.cardCorners,t=o.props?.cardCornerSides;return r.map(n=>n?.props?.id===e?n:{...n,props:{...n.props,cardCorners:s,cardCornerSides:t}})}export{a as CARD_BOX_RADIUS_PROP,O as CORNER_SIDES,b as CORNER_SIDE_POINTS,m as cardCornerStyle,h as cardsWithSharedCorners,D as cornerSidesShorthand,P as hasCornerSubset,c as hasOwnCardCorners,A as normalizeCornerSides};
@@ -26,6 +26,8 @@ export declare function cardTemplateField(type: string | undefined, key: string)
26
26
  export declare function namedRowField(props: Record<string, unknown> | null | undefined, prop?: string): string;
27
27
  export declare function cardRow(value: unknown): SourceRow;
28
28
  export declare function rowBound(type: string, props: Record<string, unknown> | null | undefined, key: string): boolean;
29
+ export declare function rowFieldText(row: SourceRow | null | undefined, key: string): string | null;
30
+ export declare function rowFilledProps(type: string, props: Record<string, unknown>, row: SourceRow | null | undefined): Record<string, unknown>;
29
31
  type DocNode = {
30
32
  type?: unknown;
31
33
  props?: Record<string, unknown>;
@@ -1 +1 @@
1
- const y="template",_="Card template",k=["Text","ImageBlock","ButtonBlock","Flex"],c="rowField",b="rowLinkField";function E(){return{type:"slot",allow:[...k]}}const x=[{block:"OrderSummary",fields:[{key:"label",label:"Item"},{key:"meta",label:"Meta line"},{key:"amount",label:"Amount"}]}],p=Symbol.for("efficient.card-templates");function i(){const t=globalThis;let e=t[p];return e||(e=new Map(x.map(o=>[o.block,o])),t[p]=e),e}function O(t){for(const e of t){if(typeof e.block!="string"||!e.block)throw new Error("A card template names no block.");i().set(e.block,{block:e.block,fields:e.fields.map(o=>({...o}))})}}function T(t){return typeof t=="string"&&i().has(t)}function g(t,e){const o=i().get(t)?.fields??[];return e?o.filter(n=>(n.kind??"text")===e):o}function B(t,e){return t?i().get(t)?.fields.find(o=>o.key===e)??null:null}function A(t,e=c){const o=t?.[e];return typeof o=="string"?o.trim():""}function L(t){const e={};if(t&&typeof t=="object"&&!Array.isArray(t))for(const[o,n]of Object.entries(t))typeof n=="string"&&(e[o]=n);return e}const R={Text:{text:c},ImageBlock:{src:c},ButtonBlock:{label:c,href:b}};function w(t,e,o){const n=R[t]?.[o];return!!(n&&A(e,n))}function C(t,e){const o=t?.data?.content;if(!Array.isArray(o)||typeof e!="string")return;const n=(u,f)=>{for(const l of u){if(l?.props?.id===e)return f;for(const[d,r]of Object.entries(l?.props??{})){if(!Array.isArray(r)||!r.length||typeof r[0]!="object"||r[0]===null||!("type"in r[0]))continue;const m=d===y&&T(l.type)?l:f,a=n(r,m);if(a!==void 0)return a}}},s=n(o,null);return s===void 0?null:s}export{c as CARD_ROW_FIELD_PROP,b as CARD_ROW_LINK_PROP,k as CARD_TEMPLATE_BLOCKS,_ as CARD_TEMPLATE_LABEL,y as CARD_TEMPLATE_SLOT,L as cardRow,B as cardTemplateField,g as cardTemplateFields,C as cardTemplateOwner,E as cardTemplateSlot,T as hasCardTemplate,A as namedRowField,O as registerCardTemplates,w as rowBound};
1
+ import{isNodeList as b}from"efficient-easel/data";const k="template",L="Card template",y=["Text","ImageBlock","ButtonBlock","Flex"],c="rowField",A="rowLinkField";function B(){return{type:"slot",allow:[...y]}}const O=[{block:"OrderSummary",fields:[{key:"label",label:"Item"},{key:"meta",label:"Meta line"},{key:"amount",label:"Amount"}]}],d=Symbol.for("efficient.card-templates");function f(){const e=globalThis;let t=e[d];return t||(t=new Map(O.map(o=>[o.block,o])),e[d]=t),t}function g(e){for(const t of e){if(typeof t.block!="string"||!t.block)throw new Error("A card template names no block.");f().set(t.block,{block:t.block,fields:t.fields.map(o=>({...o}))})}}function R(e){return typeof e=="string"&&f().has(e)}function w(e,t){const o=f().get(e)?.fields??[];return t?o.filter(n=>(n.kind??"text")===t):o}function C(e,t){return e?f().get(e)?.fields.find(o=>o.key===t)??null:null}function p(e,t=c){const o=e?.[t];return typeof o=="string"?o.trim():""}function F(e){const t={};if(e&&typeof e=="object"&&!Array.isArray(e))for(const[o,n]of Object.entries(e))typeof n=="string"&&(t[o]=n);return t}const m={Text:{text:c},ImageBlock:{src:c},ButtonBlock:{label:c,href:A}};function P(e,t,o){const n=m[e]?.[o];return!!(n&&p(t,n))}function _(e,t){return!t||!e?null:e[t]??""}function D(e,t,o){if(!o)return t;let n=null;for(const[l,s]of Object.entries(m[e]??{})){const r=_(o,p(t,s));r!==null&&(n??={...t},n[l]=r)}return n??t}function h(e,t){const o=e?.data?.content;if(!Array.isArray(o)||typeof t!="string")return;const n=(s,r)=>{for(const i of s){if(i?.props?.id===t)return r;for(const[x,u]of Object.entries(i?.props??{})){if(!b(u))continue;const T=x===k&&R(i.type)?i:r,a=n(u,T);if(a!==void 0)return a}}},l=n(o,null);return l===void 0?null:l}export{c as CARD_ROW_FIELD_PROP,A as CARD_ROW_LINK_PROP,y as CARD_TEMPLATE_BLOCKS,L as CARD_TEMPLATE_LABEL,k as CARD_TEMPLATE_SLOT,F as cardRow,C as cardTemplateField,w as cardTemplateFields,h as cardTemplateOwner,B as cardTemplateSlot,R as hasCardTemplate,p as namedRowField,g as registerCardTemplates,P as rowBound,_ as rowFieldText,D as rowFilledProps};
@@ -1,3 +1,4 @@
1
+ import { type PopupLook } from "../popup/look.js";
1
2
  export declare const CART_DRAWER_SLUG = "cart-drawer";
2
3
  export declare const CART_DRAWER_KIND = "cart-drawer";
3
4
  export interface CartDrawerContent {
@@ -17,3 +18,9 @@ export interface CartDrawerContent {
17
18
  export declare const CART_DRAWER_DEFAULTS: CartDrawerContent;
18
19
  export declare function cartSubtitle(content: CartDrawerContent, count: number): string;
19
20
  export declare function resolveCartDrawerContent(rootProps: Record<string, unknown> | undefined | null): CartDrawerContent;
21
+ export declare const CART_DRAWER_PLACEMENTS: readonly ["right", "left"];
22
+ export type CartDrawerPlacement = (typeof CART_DRAWER_PLACEMENTS)[number];
23
+ export interface CartDrawerLook extends PopupLook {
24
+ autoOpen: boolean;
25
+ }
26
+ export declare function resolveCartDrawerLook(rootProps: Record<string, unknown> | undefined | null): CartDrawerLook;
@@ -1 +1 @@
1
- import{authoredString as i,authoredStringList as a}from"./authored-props.js";const c="cart-drawer",o="cart-drawer",l={kickerBadge:"",kickerText:"Your order",titleLead:"Your",titleAccent:"cart.",subtitleEmpty:"Empty for now.",subtitleOne:"One set in your cart.",subtitleMany:"{count} sets in your cart.",leadTimeValue:"",shipsToFallback:"",promises:[],emptyKicker:"No wheels yet",emptyBody:"Your cart is empty. Pick a wheel to get started."};function u(r,e){return e===0?r.subtitleEmpty:e===1?r.subtitleOne:r.subtitleMany.replace("{count}",String(e))}function n(r){const e=r??{},t=l;return{kickerBadge:i(e.kickerBadge,t.kickerBadge),kickerText:i(e.kickerText,t.kickerText),titleLead:i(e.titleLead,t.titleLead),titleAccent:i(e.titleAccent,t.titleAccent),subtitleEmpty:i(e.subtitleEmpty,t.subtitleEmpty),subtitleOne:i(e.subtitleOne,t.subtitleOne),subtitleMany:i(e.subtitleMany,t.subtitleMany),leadTimeValue:i(e.leadTimeValue,t.leadTimeValue),shipsToFallback:i(e.shipsToFallback,t.shipsToFallback),promises:a(e.promises,t.promises),emptyKicker:i(e.emptyKicker,t.emptyKicker),emptyBody:i(e.emptyBody,t.emptyBody)}}export{l as CART_DRAWER_DEFAULTS,o as CART_DRAWER_KIND,c as CART_DRAWER_SLUG,u as cartSubtitle,n as resolveCartDrawerContent};
1
+ import{authoredBoolean as o,authoredString as r,authoredStringList as l}from"./authored-props.js";import{oneOf as a}from"../popup/behavior.js";import{POPUP_LOOK_DEFAULTS as s,resolvePopupLook as c}from"../popup/look.js";const d="cart-drawer",T="cart-drawer",n={kickerBadge:"",kickerText:"Your order",titleLead:"Your",titleAccent:"cart.",subtitleEmpty:"Empty for now.",subtitleOne:"One set in your cart.",subtitleMany:"{count} sets in your cart.",leadTimeValue:"",shipsToFallback:"",promises:[],emptyKicker:"No wheels yet",emptyBody:"Your cart is empty. Pick a wheel to get started."};function b(i,t){return t===0?i.subtitleEmpty:t===1?i.subtitleOne:i.subtitleMany.replace("{count}",String(t))}function A(i){const t=i??{},e=n;return{kickerBadge:r(t.kickerBadge,e.kickerBadge),kickerText:r(t.kickerText,e.kickerText),titleLead:r(t.titleLead,e.titleLead),titleAccent:r(t.titleAccent,e.titleAccent),subtitleEmpty:r(t.subtitleEmpty,e.subtitleEmpty),subtitleOne:r(t.subtitleOne,e.subtitleOne),subtitleMany:r(t.subtitleMany,e.subtitleMany),leadTimeValue:r(t.leadTimeValue,e.leadTimeValue),shipsToFallback:r(t.shipsToFallback,e.shipsToFallback),promises:l(t.promises,e.promises),emptyKicker:r(t.emptyKicker,e.emptyKicker),emptyBody:r(t.emptyBody,e.emptyBody)}}const p=["right","left"],u={...s,width:520,tintOpacity:68};function E(i){const t=i??{};return{...c(t,u),placement:a(p,t.placement,"right"),height:"full",fullWidth:!1,autoOpen:o(t.autoOpen,!0)}}export{n as CART_DRAWER_DEFAULTS,T as CART_DRAWER_KIND,p as CART_DRAWER_PLACEMENTS,d as CART_DRAWER_SLUG,b as cartSubtitle,A as resolveCartDrawerContent,E as resolveCartDrawerLook};
@@ -1 +1 @@
1
- const e=["chat-bubble-left-right","chat-bubble-oval-left-ellipsis","chat","megaphone","phone","sparkles"],o=e[0],n=["right","left"],r="right";function c(t){return e.includes(t??"")?t:o}function h(t){return t==="left"?"left":r}function a(t){return/^#[0-9a-fA-F]{6}$/.test(t??"")?t.toLowerCase():""}export{e as CHAT_LAUNCHER_ICONS,n as CHAT_LAUNCHER_POSITIONS,o as DEFAULT_CHAT_LAUNCHER_ICON,r as DEFAULT_CHAT_LAUNCHER_POSITION,a as chatLauncherColor,c as chatLauncherIcon,h as chatLauncherPosition};
1
+ import{parseHexColor as e}from"efficient-shell/format";const o=["chat-bubble-left-right","chat-bubble-oval-left-ellipsis","chat","megaphone","phone","sparkles"],r=o[0],h=["right","left"],n="right";function C(t){return o.includes(t??"")?t:r}function p(t){return t==="left"?"left":n}function s(t){return t&&e(t)===t.toLowerCase()?t.toLowerCase():""}export{o as CHAT_LAUNCHER_ICONS,h as CHAT_LAUNCHER_POSITIONS,r as DEFAULT_CHAT_LAUNCHER_ICON,n as DEFAULT_CHAT_LAUNCHER_POSITION,s as chatLauncherColor,C as chatLauncherIcon,p as chatLauncherPosition};
@@ -25,7 +25,15 @@ export declare function siteBlockGapTokens(v?: number | null): Record<string, st
25
25
  export declare const GAP_ZONE_CLASS = "sf-gap-zone";
26
26
  export declare const GAP_LENGTH_VAR = "--sf-gap-len";
27
27
  export declare function hasOwnContainerGap(container: GapContainer, value: unknown): boolean;
28
- export declare function containerGapProps(container: GapContainer, value: unknown, axis: GapAxis): {
28
+ export declare const GAP_PHONE_LENGTH_VAR = "--sf-gap-len-phone";
29
+ export declare const CONTAINER_GAP_PHONE: {
30
+ readonly min: 0;
31
+ readonly max: 64;
32
+ readonly step: 2;
33
+ };
34
+ export declare function hasOwnPhoneGap(value: unknown): value is number;
35
+ export declare function resolvePhoneContainerGap(container: GapContainer, phone: unknown, desktop: unknown, siteGap?: number | null): number;
36
+ export declare function containerGapProps(container: GapContainer, value: unknown, axis: GapAxis, phone?: unknown): {
29
37
  className: string;
30
38
  style: CSSProperties;
31
39
  };
@@ -1 +1 @@
1
- const g="sf.gapContainer",o={min:-32,max:64,step:2},i={Grid:{sm:12,md:24,lg:40},Flex:{sm:12,md:24,lg:40},FooterGroup:{sm:8,md:16,lg:32},HeroGroup:null,Events:null,GalleryB:null,ProductGrid:null},l={Grid:24,Flex:24,FooterGroup:16,HeroGroup:0,Events:24,GalleryB:8,ProductGrid:2},u=new Set(["Events","GalleryB"]);function x(r,t,n){if(typeof t=="number"&&Number.isFinite(t)&&t>=o.min)return t;if(typeof t=="string"){const e=i[r]?.[t];if(typeof e=="number")return e}return typeof n=="number"&&Number.isFinite(n)?n:l[r]}const A="sf-gap-overlap",_="--sf-gap-overlap",a="--sf-block-gap",G="--sf-block-gap-rem",p={min:0,max:o.max,step:o.step};function N(r){if(typeof r!="number"||!Number.isFinite(r))return null;const t=Math.min(Math.max(Math.round(r),p.min),p.max);return t-t%p.step}function P(r){const t=N(r);return t===null?{}:{[a]:`${t}px`,[G]:`${t/16}rem`}}const c="sf-gap-zone",f="--sf-gap-len";function E(r,t){return typeof t=="number"&&Number.isFinite(t)&&t>=o.min?!0:typeof t=="string"&&typeof i[r]?.[t]=="number"}const b={block:"sf-gap-overlap-block",inline:"sf-gap-overlap-inline",both:"sf-gap-overlap-both"};function C(r,t,n){if(!E(r,t)){const s=`${l[r]}px`,m=u.has(r)?`var(--sf-card-gap, ${s})`:s;return{className:` ${c}`,style:{[f]:`var(${a}, ${m})`}}}const e=x(r,t);return e>=0?{className:` ${c}`,style:{[f]:`${e}px`}}:{className:` ${A} ${b[n]}`,style:{gap:"0px",[_]:`${-e/2}px`}}}export{u as CARD_GRID_CONTAINERS,o as CONTAINER_GAP,l as CONTAINER_GAP_BUILT_IN,i as CONTAINER_GAP_LEGACY,g as GAP_FIELD_CONTAINER,f as GAP_LENGTH_VAR,A as GAP_OVERLAP_CLASS,_ as GAP_OVERLAP_VAR,c as GAP_ZONE_CLASS,p as SITE_BLOCK_GAP,G as SITE_BLOCK_GAP_REM_VAR,a as SITE_BLOCK_GAP_VAR,C as containerGapProps,E as hasOwnContainerGap,N as normalizeSiteBlockGap,x as resolveContainerGap,P as siteBlockGapTokens};
1
+ const y="sf.gapContainer",o={min:-32,max:64,step:2},m={Grid:{sm:12,md:24,lg:40},Flex:{sm:12,md:24,lg:40},FooterGroup:{sm:8,md:16,lg:32},HeroGroup:null,Events:null,GalleryB:null,ProductGrid:null},x={Grid:24,Flex:24,FooterGroup:16,HeroGroup:0,Events:24,GalleryB:8,ProductGrid:2},G=new Set(["Events","GalleryB"]);function c(n,t,e){if(typeof t=="number"&&Number.isFinite(t)&&t>=o.min)return t;if(typeof t=="string"){const r=m[n]?.[t];if(typeof r=="number")return r}return typeof e=="number"&&Number.isFinite(e)?e:x[n]}const N="sf-gap-overlap",E="--sf-gap-overlap",f="--sf-block-gap",P="--sf-block-gap-rem",s={min:0,max:o.max,step:o.step};function b(n){if(typeof n!="number"||!Number.isFinite(n))return null;const t=Math.min(Math.max(Math.round(n),s.min),s.max);return t-t%s.step}function I(n){const t=b(n);return t===null?{}:{[f]:`${t}px`,[P]:`${t/16}rem`}}const u="sf-gap-zone",l="--sf-gap-len";function g(n,t){return typeof t=="number"&&Number.isFinite(t)&&t>=o.min?!0:typeof t=="string"&&typeof m[n]?.[t]=="number"}const C="--sf-gap-len-phone",O={min:0,max:o.max,step:o.step};function _(n){return typeof n=="number"&&Number.isFinite(n)&&n>=O.min}function L(n,t,e,r){return _(t)?t:c(n,e,r)/2}const R={block:"sf-gap-overlap-block",inline:"sf-gap-overlap-inline",both:"sf-gap-overlap-both"};function S(n,t,e,r){const i=_(r)?{[C]:`${r}px`}:{};if(!g(n,t)){const a=`${x[n]}px`,A=G.has(n)?`var(--sf-card-gap, ${a})`:a;return{className:` ${u}`,style:{[l]:`var(${f}, ${A})`,...i}}}const p=c(n,t);return p>=0?{className:` ${u}`,style:{[l]:`${p}px`,...i}}:{className:` ${N} ${R[e]}`,style:{gap:"0px",[E]:`${-p/2}px`}}}export{G as CARD_GRID_CONTAINERS,o as CONTAINER_GAP,x as CONTAINER_GAP_BUILT_IN,m as CONTAINER_GAP_LEGACY,O as CONTAINER_GAP_PHONE,y as GAP_FIELD_CONTAINER,l as GAP_LENGTH_VAR,N as GAP_OVERLAP_CLASS,E as GAP_OVERLAP_VAR,C as GAP_PHONE_LENGTH_VAR,u as GAP_ZONE_CLASS,s as SITE_BLOCK_GAP,P as SITE_BLOCK_GAP_REM_VAR,f as SITE_BLOCK_GAP_VAR,S as containerGapProps,g as hasOwnContainerGap,_ as hasOwnPhoneGap,b as normalizeSiteBlockGap,c as resolveContainerGap,L as resolvePhoneContainerGap,I as siteBlockGapTokens};
@@ -1 +1 @@
1
- import{normalisePlacement as r,placementParts as a}from"../hero-group-placement.js";const p=["square","tall","wide","landscape","portrait","auto"],A="square";function d(t){switch(t){case"tall":return"aspect-[3/4]";case"wide":return"aspect-[2/1]";case"landscape":return"aspect-[4/3]";case"portrait":return"aspect-[4/5]";case"auto":return"";default:return"aspect-square"}}const g=["overlay","below"];function _(t){return t==="below"}const f="bottom-left";function C(t){const{band:n,column:e}=a(r(t));return["justify-start","justify-center","justify-end"][n]+(e==="center"?" text-center":e==="end"?" text-right":"")}const s="linear-gradient(180deg, transparent 40%, rgba(10,10,10,.85) 100%)",o="linear-gradient(0deg, transparent 40%, rgba(10,10,10,.85) 100%)",c="rgba(10,10,10,.45)";function L(t){return[o,c,s][a(r(t)).band]}export{f as GALLERY_CAPTION_ANCHOR_DEFAULT,g as GALLERY_CAPTION_PLACES,p as GALLERY_CARD_RATIOS,A as GALLERY_CARD_RATIO_DEFAULT,C as galleryCaptionAnchorClass,_ as galleryCaptionIsBelow,L as galleryCaptionWash,d as galleryCardRatioClass};
1
+ import{normalisePlacement as a,placementParts as n}from"../hero-group-placement.js";import{scrim as e}from"./scrim.js";const d=["square","tall","wide","landscape","portrait","auto"],f="square";function _(t){switch(t){case"tall":return"aspect-[3/4]";case"wide":return"aspect-[2/1]";case"landscape":return"aspect-[4/3]";case"portrait":return"aspect-[4/5]";case"auto":return"";default:return"aspect-square"}}const C=["overlay","below"];function L(t){return t==="below"}const g="bottom-left";function m(t){const{band:o,column:r}=n(a(t));return["justify-start","justify-center","justify-end"][o]+(r==="center"?" text-center":r==="end"?" text-right":"")}const s=`linear-gradient(180deg, transparent 40%, ${e(.85)} 100%)`,c=`linear-gradient(0deg, transparent 40%, ${e(.85)} 100%)`,l=e(.45);function x(t){return[c,l,s][n(a(t)).band]}export{g as GALLERY_CAPTION_ANCHOR_DEFAULT,C as GALLERY_CAPTION_PLACES,d as GALLERY_CARD_RATIOS,f as GALLERY_CARD_RATIO_DEFAULT,m as galleryCaptionAnchorClass,L as galleryCaptionIsBelow,x as galleryCaptionWash,_ as galleryCardRatioClass};
@@ -158,6 +158,7 @@ export declare const GALLERY_LAYOUTS: {
158
158
  export type GalleryLayoutKey = keyof typeof GALLERY_LAYOUTS;
159
159
  export declare const GALLERY_LAYOUT_KEYS: GalleryLayoutKey[];
160
160
  export declare const GALLERY_ACROSS_BUCKETS: readonly (2 | 3 | 4 | 6)[];
161
+ export declare function galleryChoices(across: number | null, chosen: string): GalleryLayoutKey[];
161
162
  export declare function resolveGalleryLayout(value: unknown): GalleryLayout | null;
162
163
  export declare function galleryTailSpan(layout: GalleryLayout, phone: boolean): number;
163
164
  export declare function galleryPictureCells(layout: GalleryLayout): readonly GalleryCell[];
@@ -1 +1 @@
1
- const f=12,k=6,E=800,h={twoAcross:{label:"Two across",across:2,acrossPhone:2,desktop:[[6,1],[6,1]],phone:[[3,1],[3,1]]},zigzag:{label:"Zigzag",across:2,acrossPhone:2,desktop:[[8,1],[4,1],[4,1],[8,1]],phone:[[4,1],[2,1],[2,1],[4,1]]},brick:{label:"Brick",across:2,acrossPhone:2,desktop:[[5,1],[7,1],[7,1],[5,1]],phone:[[2,1],[4,1],[4,1],[2,1]]},twoTall:{label:"Two tall",across:2,acrossPhone:2,desktop:[[6,2],[6,2]],phone:[[3,2],[3,2]]},offsetTall:{label:"Offset tall",across:2,acrossPhone:2,desktop:[[5,2],[7,1],[3,1],[4,1]],phone:[[3,2],[3,1],[3,1]]},ladder:{label:"Ladder",across:2,acrossPhone:2,desktop:[[3,2],[9,1],[5,1],[4,1]],phone:[[2,2],[4,1],[2,1],[2,1]]},threeAcross:{label:"Three across",across:3,acrossPhone:3,desktop:[[4,1],[4,1],[4,1]],phone:[[2,1],[2,1],[2,1]]},bigLeft:{label:"Big left",across:3,acrossPhone:3,desktop:[[6,1],[3,1],[3,1]],phone:[[4,1],[1,1],[1,1]]},bigRight:{label:"Big right",across:3,acrossPhone:3,desktop:[[3,1],[3,1],[6,1]],phone:[[1,1],[1,1],[4,1]]},threeStagger:{label:"Three stagger",across:3,acrossPhone:3,desktop:[[5,1],[4,1],[3,1],[3,1],[4,1],[5,1]],phone:[[3,1],[2,1],[1,1],[1,1],[2,1],[3,1]]},threeLadder:{label:"Three ladder",across:3,acrossPhone:3,desktop:[[3,1],[4,1],[5,1],[5,1],[4,1],[3,1]],phone:[[1,1],[2,1],[3,1],[3,1],[2,1],[1,1]]},tallMiddle:{label:"Tall middle",across:3,acrossPhone:3,desktop:[[4,1],[4,2],[4,1],[4,1],[4,1]],phone:[[2,1],[2,2],[2,1],[2,1],[2,1]]},fourAcross:{label:"Four across",across:4,acrossPhone:2,desktop:[[3,1],[3,1],[3,1],[3,1]],phone:[[3,1],[3,1]]},bigFirst:{label:"Big first",across:4,acrossPhone:2,desktop:[[6,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1]],phone:[[6,1],[3,1],[3,1]]},fourStagger:{label:"Four stagger",across:4,acrossPhone:2,desktop:[[4,1],[3,1],[2,1],[3,1],[2,1],[3,1],[4,1],[3,1]],phone:[[4,1],[2,1],[2,1],[4,1]]},tallFirst:{label:"Tall first",across:4,acrossPhone:2,desktop:[[3,2],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1]],phone:[[3,2],[3,1],[3,1]]},oneThenFour:{label:"One then four",across:4,acrossPhone:2,desktop:[[12,1],[3,1],[3,1],[3,1],[3,1]],phone:[[6,1],[3,1],[3,1]]},sixAcross:{label:"Six across",across:6,acrossPhone:3,desktop:[[2,1],[2,1],[2,1],[2,1],[2,1],[2,1]],phone:[[2,1],[2,1],[2,1]]},sixStagger:{label:"Six stagger",across:6,acrossPhone:6,desktop:[[3,1],[2,1],[1,1],[2,1],[1,1],[3,1],[1,1],[3,1],[2,1],[2,1],[1,1],[3,1]],phone:[[1,1],[1,1],[1,1],[1,1],[1,1],[1,1]]},twoThenThrees:{label:"Two, then threes",across:3,acrossPhone:3,lead:[[6,1],[6,1]],desktop:[[4,1],[4,1],[4,1]],leadPhone:[[3,1],[3,1]],phone:[[2,1],[2,1],[2,1]]}},A=Object.keys(h),$=[2,3,4,6];function _(s){return typeof s!="string"||s===""?null:h[s]??null}function g(s,o){return o?6/s.acrossPhone:12/s.across}function x(s){return[...s.lead??[],...s.desktop]}const P="sf-wall--";function b(s){return`${P}${s}`}function O(s){const o=h[s],a=`.${b(s)}`,r=[],p=(d,u,i=[])=>{const t=[],n=d.length,L=i.length;i.forEach(([e,l],c)=>{t.push(`${a} > :nth-child(${c+1}){grid-column:span ${e};grid-row:span ${l}}`)}),d.forEach(([e,l],c)=>{t.push(`${a} > :nth-child(${n}n+${L+c+1}){grid-column:span ${e};grid-row:span ${l}}`)});for(let e=1;e<n;e+=1)t.push(`${a}:has(> :nth-child(${n}n+${L+e}):last-child) > :nth-last-child(-n+${e}){grid-column:span ${u};grid-row:span 1}`);return t};return r.push(`${a}{grid-template-columns:repeat(12,minmax(0,1fr))}`),r.push(...p(o.desktop,g(o,!1),o.lead)),r.push("@media (max-width:800px){"),r.push(`${a}{grid-template-columns:repeat(6,minmax(0,1fr))}`),r.push(...p(o.phone,g(o,!0),o.leadPhone)),r.push("}"),r.join("")}export{$ as GALLERY_ACROSS_BUCKETS,f as GALLERY_COLUMNS,k as GALLERY_COLUMNS_PHONE,h as GALLERY_LAYOUTS,P as GALLERY_LAYOUT_CLASS_PREFIX,A as GALLERY_LAYOUT_KEYS,E as GALLERY_PHONE_BREAKPOINT,b as galleryLayoutClass,O as galleryLayoutCss,x as galleryPictureCells,g as galleryTailSpan,_ as resolveGalleryLayout};
1
+ const k=12,E=6,A=800,n={twoAcross:{label:"Two across",across:2,acrossPhone:2,desktop:[[6,1],[6,1]],phone:[[3,1],[3,1]]},zigzag:{label:"Zigzag",across:2,acrossPhone:2,desktop:[[8,1],[4,1],[4,1],[8,1]],phone:[[4,1],[2,1],[2,1],[4,1]]},brick:{label:"Brick",across:2,acrossPhone:2,desktop:[[5,1],[7,1],[7,1],[5,1]],phone:[[2,1],[4,1],[4,1],[2,1]]},twoTall:{label:"Two tall",across:2,acrossPhone:2,desktop:[[6,2],[6,2]],phone:[[3,2],[3,2]]},offsetTall:{label:"Offset tall",across:2,acrossPhone:2,desktop:[[5,2],[7,1],[3,1],[4,1]],phone:[[3,2],[3,1],[3,1]]},ladder:{label:"Ladder",across:2,acrossPhone:2,desktop:[[3,2],[9,1],[5,1],[4,1]],phone:[[2,2],[4,1],[2,1],[2,1]]},threeAcross:{label:"Three across",across:3,acrossPhone:3,desktop:[[4,1],[4,1],[4,1]],phone:[[2,1],[2,1],[2,1]]},bigLeft:{label:"Big left",across:3,acrossPhone:3,desktop:[[6,1],[3,1],[3,1]],phone:[[4,1],[1,1],[1,1]]},bigRight:{label:"Big right",across:3,acrossPhone:3,desktop:[[3,1],[3,1],[6,1]],phone:[[1,1],[1,1],[4,1]]},threeStagger:{label:"Three stagger",across:3,acrossPhone:3,desktop:[[5,1],[4,1],[3,1],[3,1],[4,1],[5,1]],phone:[[3,1],[2,1],[1,1],[1,1],[2,1],[3,1]]},threeLadder:{label:"Three ladder",across:3,acrossPhone:3,desktop:[[3,1],[4,1],[5,1],[5,1],[4,1],[3,1]],phone:[[1,1],[2,1],[3,1],[3,1],[2,1],[1,1]]},tallMiddle:{label:"Tall middle",across:3,acrossPhone:3,desktop:[[4,1],[4,2],[4,1],[4,1],[4,1]],phone:[[2,1],[2,2],[2,1],[2,1],[2,1]]},fourAcross:{label:"Four across",across:4,acrossPhone:2,desktop:[[3,1],[3,1],[3,1],[3,1]],phone:[[3,1],[3,1]]},bigFirst:{label:"Big first",across:4,acrossPhone:2,desktop:[[6,1],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1]],phone:[[6,1],[3,1],[3,1]]},fourStagger:{label:"Four stagger",across:4,acrossPhone:2,desktop:[[4,1],[3,1],[2,1],[3,1],[2,1],[3,1],[4,1],[3,1]],phone:[[4,1],[2,1],[2,1],[4,1]]},tallFirst:{label:"Tall first",across:4,acrossPhone:2,desktop:[[3,2],[3,1],[3,1],[3,1],[3,1],[3,1],[3,1]],phone:[[3,2],[3,1],[3,1]]},oneThenFour:{label:"One then four",across:4,acrossPhone:2,desktop:[[12,1],[3,1],[3,1],[3,1],[3,1]],phone:[[6,1],[3,1],[3,1]]},sixAcross:{label:"Six across",across:6,acrossPhone:3,desktop:[[2,1],[2,1],[2,1],[2,1],[2,1],[2,1]],phone:[[2,1],[2,1],[2,1]]},sixStagger:{label:"Six stagger",across:6,acrossPhone:6,desktop:[[3,1],[2,1],[1,1],[2,1],[1,1],[3,1],[1,1],[3,1],[2,1],[2,1],[1,1],[3,1]],phone:[[1,1],[1,1],[1,1],[1,1],[1,1],[1,1]]},twoThenThrees:{label:"Two, then threes",across:3,acrossPhone:3,lead:[[6,1],[6,1]],desktop:[[4,1],[4,1],[4,1]],leadPhone:[[3,1],[3,1]],phone:[[2,1],[2,1],[2,1]]}},P=Object.keys(n),$=[2,3,4,6];function x(o,s){return P.filter(e=>e===s||o===null||n[e].across===o)}function _(o){return typeof o!="string"||o===""?null:n[o]??null}function u(o,s){return s?6/o.acrossPhone:12/o.across}function O(o){return[...o.lead??[],...o.desktop]}const f="sf-wall--";function b(o){return`${f}${o}`}function T(o){const s=n[o],e=`.${b(o)}`,a=[],p=(d,L,i=[])=>{const t=[],l=d.length,g=i.length;i.forEach(([r,c],h)=>{t.push(`${e} > :nth-child(${h+1}){grid-column:span ${r};grid-row:span ${c}}`)}),d.forEach(([r,c],h)=>{t.push(`${e} > :nth-child(${l}n+${g+h+1}){grid-column:span ${r};grid-row:span ${c}}`)});for(let r=1;r<l;r+=1)t.push(`${e}:has(> :nth-child(${l}n+${g+r}):last-child) > :nth-last-child(-n+${r}){grid-column:span ${L};grid-row:span 1}`);return t};return a.push(`${e}{grid-template-columns:repeat(12,minmax(0,1fr))}`),a.push(...p(s.desktop,u(s,!1),s.lead)),a.push("@media (max-width:800px){"),a.push(`${e}{grid-template-columns:repeat(6,minmax(0,1fr))}`),a.push(...p(s.phone,u(s,!0),s.leadPhone)),a.push("}"),a.join("")}export{$ as GALLERY_ACROSS_BUCKETS,k as GALLERY_COLUMNS,E as GALLERY_COLUMNS_PHONE,n as GALLERY_LAYOUTS,f as GALLERY_LAYOUT_CLASS_PREFIX,P as GALLERY_LAYOUT_KEYS,A as GALLERY_PHONE_BREAKPOINT,x as galleryChoices,b as galleryLayoutClass,T as galleryLayoutCss,O as galleryPictureCells,u as galleryTailSpan,_ as resolveGalleryLayout};
@@ -1 +1 @@
1
- const t="#ffffff",e=/^#[0-9a-fA-F]{6}$/;function n(r){return o(r)?r:t}function o(r){return typeof r=="string"&&e.test(r)}function f(r){return{"--bg":n(r)}}export{t as PAGE_BACKGROUND_DEFAULT,o as isPageBackgroundAuthored,f as pageBackgroundVars,n as resolvePageBackground};
1
+ import{parseHexColor as o}from"efficient-shell/format";const e="#ffffff";function t(r){return n(r)?r:e}function n(r){return typeof r=="string"&&o(r)===r.toLowerCase()}function u(r){return{"--bg":t(r)}}export{e as PAGE_BACKGROUND_DEFAULT,n as isPageBackgroundAuthored,u as pageBackgroundVars,t as resolvePageBackground};
@@ -0,0 +1 @@
1
+ export declare function postDateLabel(iso: string | null | undefined): string;
@@ -0,0 +1 @@
1
+ import{formatDate as t}from"efficient-shell/format";const r={locale:"en-US",style:{year:"numeric",month:"short",day:"2-digit"},timeZone:"UTC"};function a(e){return!e||Number.isNaN(new Date(e).getTime())?"":t(e,r)}export{a as postDateLabel};
@@ -0,0 +1 @@
1
+ export declare function scrim(alpha: number): string;
@@ -0,0 +1 @@
1
+ function n(r){return`color-mix(in srgb, var(--overlay-scrim) ${Math.round(Math.min(1,Math.max(0,r))*1e3)/10}%, transparent)`}export{n as scrim};
@@ -58,3 +58,7 @@ export declare function sectionMinHeightAttrs(props: SectionMinHeightProps & Sec
58
58
  style: CSSProperties;
59
59
  } | null;
60
60
  export declare function sectionFillsHeight(props: Record<string, unknown>): boolean;
61
+ export declare const SECTION_FILL_PASS_CLASS = "grid";
62
+ export declare const SECTION_FILL_CLASS = "h-full";
63
+ export declare const SECTION_FILL_PASS_PHONE_CLASS = "max-[720px]:grid";
64
+ export declare function sectionFillPassClass(props: Record<string, unknown>): string;
@@ -1 +1 @@
1
- const u=["auto","fixed","screen"],I=["px","%"],M="svh",m="vh",_="var(--sf-header-h, 88px)",f={min:40,max:2e3,step:10,fallback:600},g={min:10,max:200,step:5,fallback:100},E="sf-section-minh",h={base:"--sf-section-minh",small:"--sf-section-minh-s"},l=e=>typeof e=="string"&&u.includes(e),T=e=>typeof e=="string"&&I.includes(e);function H(e){const t=l(e.sectionHeightMode)?e.sectionHeightMode:"auto",n=t==="screen"?"%":T(e.sectionHeightUnit)?e.sectionHeightUnit:"px",o=t==="screen"?g.fallback:f.fallback,i=typeof e.sectionHeightValue=="number"?e.sectionHeightValue:o;return{mode:t,value:i,unit:n}}function r(e){const{mode:t,value:n,unit:o}=H(e);if(t==="auto")return;if(t==="fixed"&&o==="px")return[`${n}px`,null];const i=n/100,s=c=>t==="screen"?`(100${c} - ${_})`:`100${c}`;return[`calc(${s("vh")} * ${i})`,`calc(${s("svh")} * ${i})`]}function x(e){const t=r(e);if(!t)return;const[n,o]=t;return{display:"grid",[h.base]:n,...o?{[h.small]:o}:{}}}const C=new Set(["Hero","HeroSingle","IntroBleed","CategoryBar","DocTabs"]),O="Height",N="sf-section-minh-phone",a={base:"--sf-section-minh-p",small:"--sf-section-minh-ps"};function d(e){return l(e.sectionHeightModePhone)}function P(e){return H({sectionHeightMode:e.sectionHeightModePhone,sectionHeightValue:e.sectionHeightValuePhone,sectionHeightUnit:e.sectionHeightUnitPhone})}function S(e){const t=x(e),n=d(e)?r({sectionHeightMode:e.sectionHeightModePhone,sectionHeightValue:e.sectionHeightValuePhone,sectionHeightUnit:e.sectionHeightUnitPhone}):void 0;if(!t&&!n)return null;const o=[E],i={...t??{}};return n&&(o.push(N),i[a.base]=n[0],n[1]&&(i[a.small]=n[1])),{className:o.join(" "),style:i}}function p(e){return S(e)!==null}export{_ as HEADER_HEIGHT_VAR,u as SECTION_HEIGHT_MODES,I as SECTION_HEIGHT_UNITS,f as SECTION_MIN_HEIGHT,E as SECTION_MIN_HEIGHT_CLASS,C as SECTION_MIN_HEIGHT_EXCLUDED,O as SECTION_MIN_HEIGHT_GROUP_LABEL,N as SECTION_MIN_HEIGHT_PHONE_CLASS,a as SECTION_MIN_HEIGHT_PHONE_VARS,h as SECTION_MIN_HEIGHT_VARS,g as SECTION_SCREEN_PCT,M as VIEWPORT_UNIT,m as VIEWPORT_UNIT_FALLBACK,d as hasPhoneHeight,P as resolvePhoneHeight,H as resolveSectionMinHeight,p as sectionFillsHeight,S as sectionMinHeightAttrs,r as sectionMinHeightLengths,x as sectionMinHeightStyle};
1
+ const _=["auto","fixed","screen"],I=["px","%"],m="svh",M="vh",f="var(--sf-header-h, 88px)",E={min:40,max:2e3,step:10,fallback:600},g={min:10,max:200,step:5,fallback:100},S="sf-section-minh",r={base:"--sf-section-minh",small:"--sf-section-minh-s"},l=e=>typeof e=="string"&&_.includes(e),x=e=>typeof e=="string"&&I.includes(e);function h(e){const t=l(e.sectionHeightMode)?e.sectionHeightMode:"auto",n=t==="screen"?"%":x(e.sectionHeightUnit)?e.sectionHeightUnit:"px",o=t==="screen"?g.fallback:E.fallback,i=typeof e.sectionHeightValue=="number"?e.sectionHeightValue:o;return{mode:t,value:i,unit:n}}function H(e){const{mode:t,value:n,unit:o}=h(e);if(t==="auto")return;if(t==="fixed"&&o==="px")return[`${n}px`,null];const i=n/100,s=c=>t==="screen"?`(100${c} - ${f})`:`100${c}`;return[`calc(${s("vh")} * ${i})`,`calc(${s("svh")} * ${i})`]}function a(e){const t=H(e);if(!t)return;const[n,o]=t;return{display:"grid",[r.base]:n,...o?{[r.small]:o}:{}}}const L=new Set(["Hero","HeroSingle","IntroBleed","CategoryBar","DocTabs"]),p="Height",T="sf-section-minh-phone",u={base:"--sf-section-minh-p",small:"--sf-section-minh-ps"};function N(e){return l(e.sectionHeightModePhone)}function A(e){return h({sectionHeightMode:e.sectionHeightModePhone,sectionHeightValue:e.sectionHeightValuePhone,sectionHeightUnit:e.sectionHeightUnitPhone})}function d(e){const t=a(e),n=N(e)?H({sectionHeightMode:e.sectionHeightModePhone,sectionHeightValue:e.sectionHeightValuePhone,sectionHeightUnit:e.sectionHeightUnitPhone})??(t?["auto",null]:void 0):void 0;if(!t&&!n)return null;const o=[S],i={...t??{}};return n&&(o.push(T),i[u.base]=n[0],n[1]&&(i[u.small]=n[1])),{className:o.join(" "),style:i}}function C(e){return d(e)!==null}const O="grid",U="h-full",P="max-[720px]:grid";function V(e){return C(e)?a(e)?O:P:""}export{f as HEADER_HEIGHT_VAR,U as SECTION_FILL_CLASS,O as SECTION_FILL_PASS_CLASS,P as SECTION_FILL_PASS_PHONE_CLASS,_ as SECTION_HEIGHT_MODES,I as SECTION_HEIGHT_UNITS,E as SECTION_MIN_HEIGHT,S as SECTION_MIN_HEIGHT_CLASS,L as SECTION_MIN_HEIGHT_EXCLUDED,p as SECTION_MIN_HEIGHT_GROUP_LABEL,T as SECTION_MIN_HEIGHT_PHONE_CLASS,u as SECTION_MIN_HEIGHT_PHONE_VARS,r as SECTION_MIN_HEIGHT_VARS,g as SECTION_SCREEN_PCT,m as VIEWPORT_UNIT,M as VIEWPORT_UNIT_FALLBACK,N as hasPhoneHeight,A as resolvePhoneHeight,h as resolveSectionMinHeight,V as sectionFillPassClass,C as sectionFillsHeight,d as sectionMinHeightAttrs,H as sectionMinHeightLengths,a as sectionMinHeightStyle};