efficient-web-builder 37.2.0 → 38.0.1

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 (265) hide show
  1. package/CHANGELOG.md +37 -0
  2. package/dist/editor/components/PagesPanel.js +1 -1
  3. package/dist/editor/components/StorefrontLinkField.js +1 -1
  4. package/dist/editor/components/TickerSettingsPanel.js +1 -1
  5. package/dist/editor/components/WebsiteScreenParts.js +1 -1
  6. package/dist/editor/lib/editor-document-adapter.js +1 -1
  7. package/dist/editor/lib/puck/blocks/general/Breadcrumb/fields.js +1 -1
  8. package/dist/editor/lib/puck/blocks/general/Cards/fields.js +1 -1
  9. package/dist/editor/lib/puck/blocks/general/Chart/fields.js +1 -1
  10. package/dist/editor/lib/puck/blocks/general/Countdown/fields.js +1 -1
  11. package/dist/editor/lib/puck/blocks/general/DocBody/fields.js +1 -1
  12. package/dist/editor/lib/puck/blocks/general/DocMasthead/fields.js +1 -1
  13. package/dist/editor/lib/puck/blocks/general/DocMetaCards/fields.js +1 -1
  14. package/dist/editor/lib/puck/blocks/general/DocTabs/fields.js +1 -1
  15. package/dist/editor/lib/puck/blocks/general/FAQ/fields.js +1 -1
  16. package/dist/editor/lib/puck/blocks/general/FeaturedCover/fields.js +1 -1
  17. package/dist/editor/lib/puck/blocks/general/Flex/fields.js +1 -1
  18. package/dist/editor/lib/puck/blocks/general/Footprint/fields.js +1 -1
  19. package/dist/editor/lib/puck/blocks/general/Grid/fields.js +1 -1
  20. package/dist/editor/lib/puck/blocks/general/Hero/fields.js +1 -1
  21. package/dist/editor/lib/puck/blocks/general/HeroGroup/fields.js +1 -1
  22. package/dist/editor/lib/puck/blocks/general/HeroSingle/fields.js +1 -1
  23. package/dist/editor/lib/puck/blocks/general/HeroSlide/fields.js +1 -1
  24. package/dist/editor/lib/puck/blocks/general/IntroBleed/fields.js +1 -1
  25. package/dist/editor/lib/puck/blocks/general/KeyFeatures/fields.js +1 -1
  26. package/dist/editor/lib/puck/blocks/general/LongRead/fields.js +1 -1
  27. package/dist/editor/lib/puck/blocks/general/Masthead/fields.js +1 -1
  28. package/dist/editor/lib/puck/blocks/general/OrderSummary/fields.js +1 -1
  29. package/dist/editor/lib/puck/blocks/general/ParagraphsA/fields.js +1 -1
  30. package/dist/editor/lib/puck/blocks/general/PaymentBadges/fields.js +1 -1
  31. package/dist/editor/lib/puck/blocks/general/PostCard/fields.js +1 -1
  32. package/dist/editor/lib/puck/blocks/general/ProcessSteps/fields.js +1 -1
  33. package/dist/editor/lib/puck/blocks/general/Prose/fields.js +1 -1
  34. package/dist/editor/lib/puck/blocks/general/Series/fields.js +1 -1
  35. package/dist/editor/lib/puck/blocks/general/Split/fields.js +1 -1
  36. package/dist/editor/lib/puck/blocks/general/StatsParagraph/fields.js +1 -1
  37. package/dist/editor/lib/puck/blocks/general/Testimonials/fields.js +1 -1
  38. package/dist/editor/lib/puck/blocks/general/Ticker/fields.js +1 -1
  39. package/dist/editor/lib/puck/blocks/general/Timeline/fields.js +1 -1
  40. package/dist/editor/lib/puck/blocks/general/TimelineTrack/fields.js +1 -1
  41. package/dist/editor/lib/puck/blocks/general/TitleWithButtons/fields.js +1 -1
  42. package/dist/format/lib/editor-words-catalogue.d.ts +5 -0
  43. package/dist/format/lib/editor-words-catalogue.js +3 -3
  44. package/dist/format/lib/hero-ticker.d.ts +1 -0
  45. package/dist/format/lib/hero-ticker.js +1 -0
  46. package/dist/format/lib/links/link-picker-setup.d.ts +4 -0
  47. package/dist/format/lib/links/link-picker-setup.js +1 -1
  48. package/dist/format/lib/links/page-link-rules.d.ts +5 -1
  49. package/dist/format/lib/links/page-link-rules.js +1 -1
  50. package/dist/format/lib/popup/new-popup.d.ts +5 -0
  51. package/dist/format/lib/popup/new-popup.js +1 -0
  52. package/dist/format/lib/post-card-layout.d.ts +16 -0
  53. package/dist/format/lib/post-card-layout.js +1 -0
  54. package/dist/format/lib/puck/blocks/block-types.d.ts +1 -0
  55. package/dist/format/lib/puck/blocks/general/Banner/meta.d.ts +2 -0
  56. package/dist/format/lib/puck/blocks/general/Banner/meta.js +1 -0
  57. package/dist/format/lib/puck/blocks/general/Breadcrumb/meta.d.ts +5 -0
  58. package/dist/format/lib/puck/blocks/general/Breadcrumb/meta.js +1 -0
  59. package/dist/format/lib/puck/blocks/general/ButtonBlock/meta.d.ts +2 -0
  60. package/dist/format/lib/puck/blocks/general/ButtonBlock/meta.js +1 -0
  61. package/dist/format/lib/puck/blocks/general/Cards/meta.d.ts +7 -0
  62. package/dist/format/lib/puck/blocks/general/Cards/meta.js +1 -0
  63. package/dist/format/lib/puck/blocks/general/CategoryBar/meta.d.ts +2 -0
  64. package/dist/format/lib/puck/blocks/general/CategoryBar/meta.js +1 -0
  65. package/dist/format/lib/puck/blocks/general/Chart/meta.d.ts +6 -0
  66. package/dist/format/lib/puck/blocks/general/Chart/meta.js +2 -0
  67. package/dist/format/lib/puck/blocks/general/ContactLocations/meta.d.ts +2 -0
  68. package/dist/format/lib/puck/blocks/general/ContactLocations/meta.js +1 -0
  69. package/dist/format/lib/puck/blocks/general/Countdown/meta.d.ts +6 -0
  70. package/dist/format/lib/puck/blocks/general/Countdown/meta.js +1 -0
  71. package/dist/format/lib/puck/blocks/general/CustomHTML/meta.d.ts +2 -0
  72. package/dist/format/lib/puck/blocks/general/CustomHTML/meta.js +3 -0
  73. package/dist/format/lib/puck/blocks/general/Divider/meta.d.ts +2 -0
  74. package/dist/format/lib/puck/blocks/general/Divider/meta.js +1 -0
  75. package/dist/format/lib/puck/blocks/general/DocBody/meta.d.ts +5 -0
  76. package/dist/format/lib/puck/blocks/general/DocBody/meta.js +1 -0
  77. package/dist/format/lib/puck/blocks/general/DocMasthead/meta.d.ts +7 -0
  78. package/dist/format/lib/puck/blocks/general/DocMasthead/meta.js +1 -0
  79. package/dist/format/lib/puck/blocks/general/DocMetaCards/meta.d.ts +4 -0
  80. package/dist/format/lib/puck/blocks/general/DocMetaCards/meta.js +1 -0
  81. package/dist/format/lib/puck/blocks/general/DocTabs/meta.d.ts +6 -0
  82. package/dist/format/lib/puck/blocks/general/DocTabs/meta.js +1 -0
  83. package/dist/format/lib/puck/blocks/general/Eyebrow/meta.d.ts +2 -0
  84. package/dist/format/lib/puck/blocks/general/Eyebrow/meta.js +1 -0
  85. package/dist/format/lib/puck/blocks/general/FAQ/meta.d.ts +7 -0
  86. package/dist/format/lib/puck/blocks/general/FAQ/meta.js +1 -0
  87. package/dist/format/lib/puck/blocks/general/FeaturedCover/meta.d.ts +13 -0
  88. package/dist/format/lib/puck/blocks/general/FeaturedCover/meta.js +1 -0
  89. package/dist/format/lib/puck/blocks/general/Flex/meta.d.ts +7 -0
  90. package/dist/format/lib/puck/blocks/general/Flex/meta.js +1 -0
  91. package/dist/format/lib/puck/blocks/general/Footprint/meta.d.ts +7 -0
  92. package/dist/format/lib/puck/blocks/general/Footprint/meta.js +2 -0
  93. package/dist/format/lib/puck/blocks/general/Grid/meta.d.ts +7 -0
  94. package/dist/format/lib/puck/blocks/general/Grid/meta.js +1 -0
  95. package/dist/format/lib/puck/blocks/general/Heading/meta.d.ts +2 -0
  96. package/dist/format/lib/puck/blocks/general/Heading/meta.js +1 -0
  97. package/dist/format/lib/puck/blocks/general/Hero/meta.d.ts +7 -0
  98. package/dist/format/lib/puck/blocks/general/Hero/meta.js +1 -0
  99. package/dist/format/lib/puck/blocks/general/HeroGroup/meta.d.ts +8 -0
  100. package/dist/format/lib/puck/blocks/general/HeroGroup/meta.js +1 -0
  101. package/dist/format/lib/puck/blocks/general/HeroSingle/meta.d.ts +8 -0
  102. package/dist/format/lib/puck/blocks/general/HeroSingle/meta.js +1 -0
  103. package/dist/format/lib/puck/blocks/general/HeroSlide/meta.d.ts +8 -0
  104. package/dist/format/lib/puck/blocks/general/HeroSlide/meta.js +1 -0
  105. package/dist/format/lib/puck/blocks/general/ImageBlock/meta.d.ts +2 -0
  106. package/dist/format/lib/puck/blocks/general/ImageBlock/meta.js +1 -0
  107. package/dist/format/lib/puck/blocks/general/Integrations/meta.d.ts +2 -0
  108. package/dist/format/lib/puck/blocks/general/Integrations/meta.js +1 -0
  109. package/dist/format/lib/puck/blocks/general/IntroBleed/meta.d.ts +7 -0
  110. package/dist/format/lib/puck/blocks/general/IntroBleed/meta.js +2 -0
  111. package/dist/format/lib/puck/blocks/general/KeyFeatures/meta.d.ts +8 -0
  112. package/dist/format/lib/puck/blocks/general/KeyFeatures/meta.js +1 -0
  113. package/dist/format/lib/puck/blocks/general/LogoBlock/meta.d.ts +2 -0
  114. package/dist/format/lib/puck/blocks/general/LogoBlock/meta.js +1 -0
  115. package/dist/format/lib/puck/blocks/general/Logos/meta.d.ts +2 -0
  116. package/dist/format/lib/puck/blocks/general/Logos/meta.js +1 -0
  117. package/dist/format/lib/puck/blocks/general/LongRead/meta.d.ts +19 -0
  118. package/dist/format/lib/puck/blocks/general/LongRead/meta.js +1 -0
  119. package/dist/format/lib/puck/blocks/general/Manifesto/meta.d.ts +2 -0
  120. package/dist/format/lib/puck/blocks/general/Manifesto/meta.js +1 -0
  121. package/dist/format/lib/puck/blocks/general/Masthead/meta.d.ts +8 -0
  122. package/dist/format/lib/puck/blocks/general/Masthead/meta.js +1 -0
  123. package/dist/format/lib/puck/blocks/general/Mockup/meta.d.ts +2 -0
  124. package/dist/format/lib/puck/blocks/general/Mockup/meta.js +1 -0
  125. package/dist/format/lib/puck/blocks/general/OrderSummary/meta.d.ts +6 -0
  126. package/dist/format/lib/puck/blocks/general/OrderSummary/meta.js +1 -0
  127. package/dist/format/lib/puck/blocks/general/ParagraphsA/meta.d.ts +9 -0
  128. package/dist/format/lib/puck/blocks/general/ParagraphsA/meta.js +1 -0
  129. package/dist/format/lib/puck/blocks/general/PaymentBadges/meta.d.ts +5 -0
  130. package/dist/format/lib/puck/blocks/general/PaymentBadges/meta.js +1 -0
  131. package/dist/format/lib/puck/blocks/general/PostCard/meta.d.ts +9 -0
  132. package/dist/format/lib/puck/blocks/general/PostCard/meta.js +1 -0
  133. package/dist/format/lib/puck/blocks/general/ProcessSteps/meta.d.ts +13 -0
  134. package/dist/format/lib/puck/blocks/general/ProcessSteps/meta.js +1 -0
  135. package/dist/format/lib/puck/blocks/general/Prose/meta.d.ts +7 -0
  136. package/dist/format/lib/puck/blocks/general/Prose/meta.js +1 -0
  137. package/dist/format/lib/puck/blocks/general/SectionHeader/meta.d.ts +2 -0
  138. package/dist/format/lib/puck/blocks/general/SectionHeader/meta.js +1 -0
  139. package/dist/format/lib/puck/blocks/general/Series/meta.d.ts +8 -0
  140. package/dist/format/lib/puck/blocks/general/Series/meta.js +1 -0
  141. package/dist/format/lib/puck/blocks/general/Spacer/meta.d.ts +2 -0
  142. package/dist/format/lib/puck/blocks/general/Spacer/meta.js +1 -0
  143. package/dist/format/lib/puck/blocks/general/SpecStrip/meta.d.ts +2 -0
  144. package/dist/format/lib/puck/blocks/general/SpecStrip/meta.js +1 -0
  145. package/dist/format/lib/puck/blocks/general/Split/meta.d.ts +10 -0
  146. package/dist/format/lib/puck/blocks/general/Split/meta.js +2 -0
  147. package/dist/format/lib/puck/blocks/general/Stats/meta.d.ts +2 -0
  148. package/dist/format/lib/puck/blocks/general/Stats/meta.js +1 -0
  149. package/dist/format/lib/puck/blocks/general/StatsParagraph/meta.d.ts +7 -0
  150. package/dist/format/lib/puck/blocks/general/StatsParagraph/meta.js +1 -0
  151. package/dist/format/lib/puck/blocks/general/Testimonials/meta.d.ts +6 -0
  152. package/dist/format/lib/puck/blocks/general/Testimonials/meta.js +1 -0
  153. package/dist/format/lib/puck/blocks/general/Text/meta.d.ts +2 -0
  154. package/dist/format/lib/puck/blocks/general/Text/meta.js +1 -0
  155. package/dist/format/lib/puck/blocks/general/Ticker/meta.d.ts +5 -0
  156. package/dist/format/lib/puck/blocks/general/Ticker/meta.js +1 -0
  157. package/dist/format/lib/puck/blocks/general/Timeline/meta.d.ts +12 -0
  158. package/dist/format/lib/puck/blocks/general/Timeline/meta.js +2 -0
  159. package/dist/format/lib/puck/blocks/general/TimelineTrack/meta.d.ts +10 -0
  160. package/dist/format/lib/puck/blocks/general/TimelineTrack/meta.js +1 -0
  161. package/dist/format/lib/puck/blocks/general/TitleWithButtons/meta.d.ts +5 -0
  162. package/dist/format/lib/puck/blocks/general/TitleWithButtons/meta.js +2 -0
  163. package/dist/format/lib/puck/blocks/general/metas.d.ts +62 -0
  164. package/dist/format/lib/puck/blocks/general/metas.js +1 -0
  165. package/dist/format/lib/puck/left-view.d.ts +2 -2
  166. package/dist/format/lib/puck/left-view.js +1 -1
  167. package/dist/format/lib/puck/media-drop.d.ts +3 -0
  168. package/dist/format/lib/puck/media-drop.js +1 -0
  169. package/dist/format/lib/source-rules/editor-words.js +2 -2
  170. package/dist/format/lib/web-backend.d.ts +1 -0
  171. package/dist/render/components/HeroSection.d.ts +0 -1
  172. package/dist/render/components/HeroSection.js +2 -2
  173. package/dist/render/components/PostCard.d.ts +0 -16
  174. package/dist/render/components/PostCard.js +1 -1
  175. package/dist/render/lib/puck/blocks/general/Banner/render.js +1 -1
  176. package/dist/render/lib/puck/blocks/general/Breadcrumb/render.d.ts +0 -3
  177. package/dist/render/lib/puck/blocks/general/Breadcrumb/render.js +1 -1
  178. package/dist/render/lib/puck/blocks/general/ButtonBlock/render.js +1 -1
  179. package/dist/render/lib/puck/blocks/general/Cards/render.d.ts +0 -5
  180. package/dist/render/lib/puck/blocks/general/Cards/render.js +1 -1
  181. package/dist/render/lib/puck/blocks/general/CategoryBar/render.js +1 -1
  182. package/dist/render/lib/puck/blocks/general/Chart/render.d.ts +0 -4
  183. package/dist/render/lib/puck/blocks/general/Chart/render.js +1 -2
  184. package/dist/render/lib/puck/blocks/general/ContactLocations/render.js +1 -1
  185. package/dist/render/lib/puck/blocks/general/Countdown/render.d.ts +0 -4
  186. package/dist/render/lib/puck/blocks/general/Countdown/render.js +1 -1
  187. package/dist/render/lib/puck/blocks/general/CustomHTML/render.js +1 -3
  188. package/dist/render/lib/puck/blocks/general/Divider/render.js +1 -1
  189. package/dist/render/lib/puck/blocks/general/DocBody/render.d.ts +0 -3
  190. package/dist/render/lib/puck/blocks/general/DocBody/render.js +1 -1
  191. package/dist/render/lib/puck/blocks/general/DocMasthead/render.d.ts +0 -5
  192. package/dist/render/lib/puck/blocks/general/DocMasthead/render.js +1 -1
  193. package/dist/render/lib/puck/blocks/general/DocMetaCards/render.d.ts +0 -2
  194. package/dist/render/lib/puck/blocks/general/DocMetaCards/render.js +1 -1
  195. package/dist/render/lib/puck/blocks/general/DocTabs/render.d.ts +0 -4
  196. package/dist/render/lib/puck/blocks/general/DocTabs/render.js +1 -1
  197. package/dist/render/lib/puck/blocks/general/Eyebrow/render.js +1 -1
  198. package/dist/render/lib/puck/blocks/general/FAQ/render.d.ts +0 -5
  199. package/dist/render/lib/puck/blocks/general/FAQ/render.js +1 -1
  200. package/dist/render/lib/puck/blocks/general/FeaturedCover/render.d.ts +0 -11
  201. package/dist/render/lib/puck/blocks/general/FeaturedCover/render.js +1 -1
  202. package/dist/render/lib/puck/blocks/general/Flex/render.d.ts +0 -5
  203. package/dist/render/lib/puck/blocks/general/Flex/render.js +1 -1
  204. package/dist/render/lib/puck/blocks/general/Footprint/render.d.ts +0 -5
  205. package/dist/render/lib/puck/blocks/general/Footprint/render.js +1 -2
  206. package/dist/render/lib/puck/blocks/general/Grid/render.d.ts +0 -5
  207. package/dist/render/lib/puck/blocks/general/Grid/render.js +1 -1
  208. package/dist/render/lib/puck/blocks/general/Heading/render.js +1 -1
  209. package/dist/render/lib/puck/blocks/general/Hero/render.d.ts +0 -5
  210. package/dist/render/lib/puck/blocks/general/Hero/render.js +1 -1
  211. package/dist/render/lib/puck/blocks/general/HeroGroup/render.d.ts +0 -6
  212. package/dist/render/lib/puck/blocks/general/HeroGroup/render.js +1 -1
  213. package/dist/render/lib/puck/blocks/general/HeroSingle/render.d.ts +0 -6
  214. package/dist/render/lib/puck/blocks/general/HeroSingle/render.js +1 -1
  215. package/dist/render/lib/puck/blocks/general/HeroSlide/render.d.ts +0 -6
  216. package/dist/render/lib/puck/blocks/general/HeroSlide/render.js +1 -1
  217. package/dist/render/lib/puck/blocks/general/ImageBlock/render.js +1 -1
  218. package/dist/render/lib/puck/blocks/general/Integrations/render.js +2 -2
  219. package/dist/render/lib/puck/blocks/general/IntroBleed/render.d.ts +0 -5
  220. package/dist/render/lib/puck/blocks/general/IntroBleed/render.js +1 -2
  221. package/dist/render/lib/puck/blocks/general/KeyFeatures/render.d.ts +0 -6
  222. package/dist/render/lib/puck/blocks/general/KeyFeatures/render.js +1 -1
  223. package/dist/render/lib/puck/blocks/general/LogoBlock/render.js +1 -1
  224. package/dist/render/lib/puck/blocks/general/Logos/render.js +1 -1
  225. package/dist/render/lib/puck/blocks/general/LongRead/render.d.ts +0 -17
  226. package/dist/render/lib/puck/blocks/general/LongRead/render.js +1 -1
  227. package/dist/render/lib/puck/blocks/general/Manifesto/render.js +1 -1
  228. package/dist/render/lib/puck/blocks/general/Masthead/render.d.ts +0 -6
  229. package/dist/render/lib/puck/blocks/general/Masthead/render.js +1 -1
  230. package/dist/render/lib/puck/blocks/general/Mockup/render.js +2 -2
  231. package/dist/render/lib/puck/blocks/general/OrderSummary/render.d.ts +0 -4
  232. package/dist/render/lib/puck/blocks/general/OrderSummary/render.js +1 -1
  233. package/dist/render/lib/puck/blocks/general/ParagraphsA/render.d.ts +0 -7
  234. package/dist/render/lib/puck/blocks/general/ParagraphsA/render.js +1 -1
  235. package/dist/render/lib/puck/blocks/general/PaymentBadges/render.d.ts +0 -3
  236. package/dist/render/lib/puck/blocks/general/PaymentBadges/render.js +1 -1
  237. package/dist/render/lib/puck/blocks/general/PostCard/render.d.ts +0 -7
  238. package/dist/render/lib/puck/blocks/general/PostCard/render.js +1 -1
  239. package/dist/render/lib/puck/blocks/general/ProcessSteps/render.d.ts +0 -11
  240. package/dist/render/lib/puck/blocks/general/ProcessSteps/render.js +1 -1
  241. package/dist/render/lib/puck/blocks/general/Prose/render.d.ts +0 -5
  242. package/dist/render/lib/puck/blocks/general/Prose/render.js +1 -1
  243. package/dist/render/lib/puck/blocks/general/SectionHeader/render.js +1 -1
  244. package/dist/render/lib/puck/blocks/general/Series/render.d.ts +0 -6
  245. package/dist/render/lib/puck/blocks/general/Series/render.js +1 -1
  246. package/dist/render/lib/puck/blocks/general/Spacer/render.js +1 -1
  247. package/dist/render/lib/puck/blocks/general/SpecStrip/render.js +1 -1
  248. package/dist/render/lib/puck/blocks/general/Split/render.d.ts +0 -8
  249. package/dist/render/lib/puck/blocks/general/Split/render.js +1 -2
  250. package/dist/render/lib/puck/blocks/general/Stats/render.js +1 -1
  251. package/dist/render/lib/puck/blocks/general/StatsParagraph/render.d.ts +0 -5
  252. package/dist/render/lib/puck/blocks/general/StatsParagraph/render.js +1 -1
  253. package/dist/render/lib/puck/blocks/general/Testimonials/render.d.ts +0 -4
  254. package/dist/render/lib/puck/blocks/general/Testimonials/render.js +1 -1
  255. package/dist/render/lib/puck/blocks/general/Text/render.js +1 -1
  256. package/dist/render/lib/puck/blocks/general/Ticker/render.d.ts +0 -3
  257. package/dist/render/lib/puck/blocks/general/Ticker/render.js +1 -1
  258. package/dist/render/lib/puck/blocks/general/Timeline/render.d.ts +0 -10
  259. package/dist/render/lib/puck/blocks/general/Timeline/render.js +1 -2
  260. package/dist/render/lib/puck/blocks/general/TimelineTrack/render.d.ts +0 -8
  261. package/dist/render/lib/puck/blocks/general/TimelineTrack/render.js +1 -1
  262. package/dist/render/lib/puck/blocks/general/TitleWithButtons/render.d.ts +0 -3
  263. package/dist/render/lib/puck/blocks/general/TitleWithButtons/render.js +1 -2
  264. package/dist/render/lib/puck/blocks/general/render-config.js +1 -1
  265. package/package.json +5 -5
package/CHANGELOG.md CHANGED
@@ -2,18 +2,55 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 38.0.1 - 2026-10-23
6
+
7
+ ### Fixed
8
+
9
+ - **Only a wheel's own page reads back as a Product link.** A saved link is a Product only when it is `/wheels/<slug>` (one segment, `isProductPath` in `lib/links/page-link-rules`). Every path under `/wheels/` used to count, so a menu link onto a collection page (`/wheels/collections/precision-forged`) re-opened in the Product box as "(unavailable)", and picking from that list swapped the link for a wheel and renamed the item after it (Hartes US header, 2026-10-23). A deeper `/wheels/…` path now reads as a Custom URL. `inferLinkKind` and the older `inferKind` share the one rule.
10
+
11
+ ## 38.0.0 - 2026-10-23
12
+
13
+ **MAJOR for hosts:** the left-panel media view is gone (easel 19 media popup); peers efficient-easel ^19.0.0 and efficient-shell ^8.39.0 (#266). Each general block is meta.ts + render.tsx with GENERAL_METAS (#264; three constants moved, no host imports them). Also the Page / Popup add menu and popup links (#265).
14
+
15
+ ### Added
16
+
17
+ - **A popup is a page the merchant adds** (merchant-designed popups, design final 2026-10-23; plan PR 7). The Pages panel head's + stays the one way to add (Lewis 2026-10-14): where a popup can be added, it opens the shell's `PopupMenu` with "Page" and "Popup" (GG for Lewis, 2026-10-23). "Popup" makes the page at once through the adapter, with no admin form and no server command: `lib/popup/new-popup` `newPopupPage` gives it a free `popup-xxxxxx` handle, `kind: "lightbox"` and a document that says `kind: "popup"`, Auto open off. `NewPageInput.kind` (`"normal"` · `"lightbox"`) is optional, so a host's create is unchanged until it reads it.
18
+ - **A popup page opens alone.** The editor no longer puts the site's header and footer (the site-footer document's groups) into a popup page (`isPopupPageLayout`); every other page still gets them.
19
+ - **The Popup link kind.** A link can open a popup: `#popup:<slug>` (`popupPath`, `popupSlugOf`, `lib/links/page-link-rules`), a hash, so it never leaves the page. The link picker lists the site's popups (`LinkPickerSetupInput.popups`, the old site popup included) and hides the kind when there are none; popup pages are no longer offered as Page targets.
20
+ - **Each general block's meta is its own module, so a host can load a block's draw only on a page that has it** (render/editor split, wave 2; GG 2026-10-23). Every published page loaded the draw of every block while the home page draws five: on the storefront's `/` the blocks a page does not have pulled in about 170 KB gzip of a 633 KB page (measured 2026-10-23). Each of the 54 general blocks is now two files: `<Block>/meta.ts` (name, defaults, slots — a `BlockMeta`, no component; on the `format` side) and `<Block>/render.tsx`, which is `{ ...meta, render }` as before. `format/lib/puck/blocks/general/metas` exports `GENERAL_METAS` and `generalRenderMetas()` (the metas with their text shapes, as `generalRenderBlocks()` less the draws). A host builds its registry from them and gives each block a render that loads `render/lib/puck/blocks/general/<Block>/render` by its own `import()`: the import path must sit in the host, where its bundler can read it (Next preloads a `next/dynamic` chunk only then). `generalRenderBlocks()`, `GENERAL_RENDERS` and the editor's registry do not change, and every block draws byte for byte what it drew.
21
+
22
+ ### Changed
23
+
24
+ - **Three defaults left their components**, so a block's meta loads no component: `DEFAULT_TICKER_ITEMS` is `format/lib/hero-ticker` (was exported by `components/HeroSection`); `PostCardLayout`, `POST_CARD_LAYOUTS`, `POST_CARD_LAYOUT_FALLBACK` and `POST_CARD_HEIGHT` are `format/lib/post-card-layout` (were exported by `components/PostCard`). No re-export is left behind: a host that imports one of them from the component moves to the new path (none found in efficient-storefront-blocks, efficient-storefront or the admin portal, 2026-10-23), so the release that ships this is a MAJOR.
25
+ - A block's own placeholder words and scaffolds (`KEY_FEATURES_PH` and the other `…_PH` constants, `HeroSlots`, `keyFeaturesScaffoldItems`, …) moved with its defaults from `<Block>/render` to `<Block>/meta`, and every importer here imports them from there.
26
+ - The editor-words rule (`lib/source-rules/editor-words`) reads a block's name as a `label` beside `defaultProps` too, so a meta with no slots keeps its name in the catalogue.
27
+
28
+ ### Guards
29
+
30
+ - New `scripts/test-popup-pages.ts` (red first: `lib/popup/new-popup` did not exist).
31
+ - `scripts/test-pages-panel-one-add.ts` holds the menu shape: one head button, "Page" and "Popup" in its menu, no "Add popup" button.
32
+ - New `scripts/test-site-styles-one-rhythm.tsx`, from efficient-storefront's guard of the same name: Site styles keeps one row style and one rhythm. It mounts the real panel in happy-dom under easel's store and a session whose backend records every theme-row write: every row is the shell's `.es-field` and a known leaf (§0, §1, §1b), the panel heads its settings with tabs only (§2), every control still draws (§3), every save sends the same patch at the same timing (§5, §5b). It also sweeps the Site styles SOURCE, which the storefront could not read (it said a builder guard of this name did; none existed): no `sf-field` class (§6), no Tailwind zinc (§7), every control class has a rule (§7b), the panel's class names are used by no other `src/` file (§7c), and the `--sf-*` → `--es-*` aliases (§8). The Corners reset is test-site-styles-visual §4 and §2c, so it is not repeated. No source change. Red check: `sf-field` written in `CardShadowField.tsx` fails §6.
33
+ - New `scripts/test-segmented-controls.tsx`: the builder's half of efficient-storefront's guard of the same name, whose header named a builder guard that never existed. Over `src/`: every `is-active` element carries an aria selection marker; no file draws the old `.sf-seg2` or `.sf-rungs` strip or a device strip, or declares a second `Segmented`; `lib/puck/controls`'s `Segmented` is easel's `SettingsSegmented` byte for byte; `MEDIA_TYPE_OPTIONS` and the HeroSlide strip are Image then Video with no second copy; `PREVIEW_DEVICES` is the view tiers and easel's `DeviceSwitch` presses and asks for one; the width FOLLOW row lights one answer in each state; Card shadow, Hover effect, Background and Photography light the unset answer and write their value. No source change. Red checks: the media list reversed fails §5 twice; `aria-selected` taken off the section theme picker's follow row fails §0.
34
+ - New `scripts/test-block-metas.tsx` (red first: no `meta.ts` and no `GENERAL_METAS` on 37.2.0): every general block has a meta, each meta is its render half less its draw (the same values), `generalRenderMetas()` is `generalRenderBlocks()` less the draws, and no meta (and not the map) reaches a component or a render module through the import graph.
35
+ - `scripts/test-panel-parts-from-the-shell.ts` reads `FOCAL_DEFAULT` in the two heroes' metas, and holds a meta, like a render module, to no `efficient-shell/ui` import.
36
+
5
37
  ## 37.2.0 - 2026-10-23
6
38
 
7
39
  A MINOR: the group office list on the Locations Map (#254), a full-bleed group band lane (#256), Styles naming and the anchor switch (#258), guard moves (#255, #259) and per-popup rules (#261). `ANCHOR_HINT` is removed; no host imported it.
8
40
 
9
41
  ### Added
10
42
 
43
+ - **A picture from the media popup drops on the canvas** (harness UI-20, owner decision Lewis 2026-10-23). `WEBSITE_SCREEN.canvasDrag.media` (`lib/puck/media-drop`, `WEBSITE_MEDIA_DROP`) tells efficient-easel what a picture is on a page: dropped between blocks it is an `ImageBlock` at the places Add offers one; dropped on a block it replaces that block's ONE main picture (`mainPicturePath`: the first top-level image prop in the media manifest, never a video, poster, focus point, phone twin or a list's item). The page saves the file's URL, after the host's pick path (a file another website holds arrives as this website's copy, as a pick does). Needs the efficient-easel release with `ScreenCanvasDrag.media`.
44
+ - New `scripts/test-media-drop.ts` (red first: `media-drop` did not exist).
11
45
  - **The Locations Map reads the group's office list** (Hartes office list, option A, Lewis 2026-10-23). A host that declares a block source for the `Footprint` (the EFFICIENT backend's `group-offices`) adds it to the section's own **Source** row, after "Typed in" and "Dealers": one row, no second row for where the offices come from. The pick is kept in `dataSource` (`resolveData`), where the backend reads it, and "Typed in" or "Dealers" clears it. A published section draws the rows it was served, in the backend's order (the website's own country first); the editor draws two sample offices. **A section never goes blank because the list is empty** (GG 2026-10-23): a source that sends no office (a branch that has not imported the brand yet) leaves the section's own typed offices on the page. A host that declares no source sees the Source row it always saw, and a typed section draws byte for byte what it drew.
12
46
  - **An office can link to its country's website.** `FootprintOffice.href` / `linkLabel`, filled only from a served row (`footprintOfficeOfRow`, `lib/content/footprint`; a link that is not an http(s) address is dropped). The tile draws one line "→ Visit the Australia site" in the contact page's accent link style, as a real link laid over the tile's foot, not inside its button. An office with no link draws nothing for it: no "This site", no "No site yet".
13
47
  - **Popup rules, one set per popup** (merchant-designed popups, design final 2026-10-23; plan PR 4). `format/lib/popup/behavior`: `resolvePopupBehavior(rootProps)` reads one popup's behaviour from its page's root props, with the stored keys the site popup already uses, and four new ones: `devices` (`all` · `desktop` · `phone`), `afterSubmit` (`stop` · `continue`), `startDate` / `endDate` (`YYYY-MM-DD`). Two answers join existing lists: `showOn: "except"` (Excluded pages) and `hideAfter: "once"` (Once). The default is Every X days, 7, and Stop after a sent form. `format/lib/popup/rules`: `mayAutoOpen`, `pickAutoPopup` (at most ONE popup opens by itself on a page: the first in the list), `markPopupClosed`, `markPopupSent`, the page / device / schedule rules, and per-popup browser keys (`popupStorageKeys`), so closing one popup never hides another. The site popup keeps the keys its visitors already have. Pure, no React. `format/lib/popup/look`: `resolvePopupLook(rootProps)` reads a popup page's frame (`placement`, the Hero's nine anchors; `fullWidth`; `width`; `height` `auto` · `full`; `tintColor` / `tintOpacity`; `outsideClick`; `closeButton` `inside` · `outside` · `none`), and `POPUP_PAGE_KIND = "popup"` marks a popup page a merchant added.
14
48
 
15
49
  ### Changed
16
50
 
51
+ - **efficient-easel ^19.0.0 and efficient-shell ^8.39.0**, peer and dev (the media popup and the canvas drop are easel 19; easel 19 needs shell 8.39). `scripts/test-two-ways-to-add.ts` reads the easel 19 range. `scripts/test-theme-reset-clears.tsx` reads the clear-colours dialog's words from the shell Dialog's own props: from shell 8.3x the Dialog portals into the page once hydrated, so a server render of it is empty and tested nothing.
52
+ - **No media view in the left panel** (BREAKING for a caller of `lib/puck/left-view`): the editors' media library is a popup since harness UI-20 changed on 2026-10-23. `LeftView` loses `"media"` (a stored one reads as the default, `"pages"`), and `resolveLeftView(view, hasSiteTheme)` loses its `hasMedia`, as efficient-easel's `ScreenBridges.resolveLeftView(view)` did. `scripts/test-editor-left-view.ts` and `scripts/test-editor-media-panel.tsx` follow.
53
+
17
54
  - **The settings body's end inset is named `--es-insp-pad-end`** (was `--sf-insp-pad-end`; same value: the panel inset less the scrollbar lane). efficient-easel's group band (Lewis 2026-10-14 and 2026-10-23: square, edge to edge) reads this name to reach the panel's right edge without running into the lane. No change on screen until the easel release that reads it; with it, the band stops at the lane, 8px from the right edge, and never makes the body scroll sideways.
18
55
  - **The left rail's "Site styles" is now "Styles"** (Lewis 2026-10-13, decisions.md A2c). The rail item, the panel's title and every sentence that points a merchant to it (`Follows Styles ▸ Basics ▸ Corners…`, `from Styles`, `the Text style in Styles`) say one word. Hosts that translate the editor: the catalogue keys with "Site styles" in them are renamed (`Site styles` → `Styles`, and six sentences).
19
56
  - **A section's anchor is a switch, a name and a link** (Lewis 2026-10-09, settings item 12). The Anchor band holds `Add an anchor` (a switch); while it is on, a `Name` box and, under it, the section's live link (the site's address, the page, `#name`) on the shell's `Snippet` with its copy button. The always-on sentence under the old `Anchor name` box is gone: the link says what the name is for. Stored data does not change: the switch is on when `anchor` holds a name, and turning it off clears the name. `components/AnchorField`. A template draws no link (it has no page address).
@@ -1 +1 @@
1
- "use client";import{jsx as n,Fragment as J,jsxs as w}from"react/jsx-runtime";import{Fragment as be,useEffect as ye,useId as Pe,useMemo as Q,useState as c}from"react";import{useScreenDocument as ke}from"efficient-easel/screen/components/ScreenDocumentContext";import{UiIcon as S}from"efficient-easel/draw/client";import we from"efficient-easel/screen/components/SidePanelHead";import{useWebsiteName as Se}from"./WebsiteSettingsPanel.js";import{InspectorIconButton as Ce}from"efficient-easel/chrome";import{Button as V,Dialog as Ie,FormField as De,Input as X,toast as Z}from"efficient-shell/ui";import{LayersTree as Ae,TreeGroupLabel as Re,TreeRow as $,TreeRowAction as C}from"efficient-easel/tree";import{AddIcon as xe,DuplicateIcon as Ne,PageIcon as Ee}from"efficient-easel/icons";import{PagesIcon as ve}from"efficient-easel/rail";import{useEaselHost as Oe}from"efficient-easel/screen/lib/host";import{bucketEditorPageRows as Le,DYNAMIC_PAGES_GROUP_KEY as Fe,isDynamicPageRow as _e,MAIN_PAGES_GROUP as ze}from"../../format/lib/editor-page-rows.js";import{useEaselSession as Ge}from"efficient-easel/screen/lib/session-context";import{holdPageRow as F,usePageRows as Be}from"../lib/page-rows.js";import{say as t}from"../../format/lib/editor-words.js";import{canDuplicatePage as He,uniqueSlug as ee,usePageDuplicate as Me}from"../lib/page-copy.js";import Te from"./DuplicatePageDialog.js";const ne="sf-editor-pages-collapsed-groups";function Ue({onNavigate:u,onClose:te,activeSurface:_,onPreviewSurface:ae}){const h=Ge().chrome?.pageRows,z=Oe(),{adapter:I,capabilities:m,ready:G,currentSlug:B}=ke(),oe=Se(),{rows:r,reload:H,setRows:M,getRows:se}=Be(),[D,le]=c(""),[d,T]=c(!1),[b,y]=c(null),[U,P]=c(!1),[p,A]=c(""),W=Pe(),R=Me(),[ie,x]=c(null),[N,re]=c(()=>{if(typeof window>"u")return new Set;try{const e=window.localStorage.getItem(ne);return new Set(e?JSON.parse(e):[])}catch{return new Set}});ye(()=>{try{window.localStorage.setItem(ne,JSON.stringify([...N]))}catch{}},[N]);const ce=e=>re(o=>{const a=new Set(o);return a.has(e)?a.delete(e):a.add(e),a}),de=Q(()=>Le(r??[]),[r]),E=D.trim().toLowerCase(),j=e=>!E||e.toLowerCase().includes(E),ue=e=>E?!0:!N.has(e),v=Q(()=>new Set((r??[]).map(e=>e.slug)),[r]),me=()=>{if(m.pageCreationInAdminForm){z.send("storefront-editor:new-page");return}A(""),y(null),P(!0)},q=async()=>{const e=p.trim();if(!(!e||!G||d||!I.createPage)){T(!0),y(null);try{const o=await I.createPage({slug:ee(e,v),title:e,layout:{}});await H(),P(!1),A(""),u(o.slug)}catch{y(t("Couldn’t add the page — please retry."))}finally{T(!1)}}},pe=e=>{const o=r??[],a=I.deletePage;if(!G||d||!a||o.length<=1)return;const l=o.findIndex(s=>s.id===e.id),i=o.filter(s=>s.id!==e.id),g=e.slug===B;F(e.id,!0),M(i),y(null),g&&i[0]&&u(i[0].slug);const k=()=>{F(e.id,!1);const s=se()??[];if(s.some(he=>he.id===e.id))return;const f=[...s];f.splice(Math.max(0,Math.min(l,f.length)),0,e),M(f)};Z.undoable(t("Deleted “{name}”",{name:e.label}),{actionLabel:t("Undo"),commit:async s=>{await a(e.id,s),F(e.id,!1)},undo:()=>{k(),g&&u(e.slug)},onFail:()=>{k(),Z.error(t("Couldn’t delete the page — please retry."))}})},ge=e=>z.send("storefront-editor:open-page",{slug:e}),fe=e=>{if(!j(e.label))return null;const o=!_&&e.slug===B,a=m.canDeletePagesInline&&(r??[]).length>1,l=_e(e),i=e.kind==="lightbox",g=[...l?[{label:t("Dynamic"),tone:"info"}]:[],...i?[{label:t("Lightbox"),tone:"success"}]:[],...e.draft?[{label:t("draft"),tone:"draft"}]:[]],k=g.length>0?g:void 0,s=!!R&&He(e),f=s||m.pageCreationInAdminForm||a?w(J,{children:[s&&n(C,{kind:"plain",label:t("Duplicate “{name}”",{name:e.label}),disabled:d,onClick:()=>x(e),children:n(Ne,{size:13})}),m.pageCreationInAdminForm&&n(C,{kind:"plain",label:t("Edit “{name}” in {place}",{name:e.label,place:t("the admin")}),onClick:()=>ge(e.slug),children:n(S,{name:"pencil",size:13,strokeWidth:1.7,rounded:!0})}),a&&n(C,{kind:"delete",label:t("Delete “{name}”",{name:e.label}),disabled:d,onClick:()=>pe(e),children:n(S,{name:"trash",size:13,strokeWidth:1.7,rounded:!0})})]}):void 0;return n($,{icon:n(Ee,{size:14}),name:e.label,selected:o,onSelect:()=>u(e.slug),badge:k,actions:f,rowProps:{"data-page-slug":e.slug}},e.id)},O=(e,o,a)=>{const l=a.filter(Boolean);if(l.length===0)return null;const i=ue(e);return w(be,{children:[n(Re,{count:l.length,expanded:i,onToggle:()=>ce(e),children:o}),i&&l]},e)},K=(h?.rows??[]).filter(e=>j(e.label)).map(e=>{const o=_===e.key;return n($,{icon:e.icon,name:e.label,selected:o,onSelect:()=>ae(e.key),badge:{label:t("Preview"),tone:"warning"},actions:n(C,{kind:"plain",label:t("Open the {name} in a new tab",{name:e.label}),onClick:()=>window.open(e.href,"_blank","noopener,noreferrer"),children:n(S,{name:"external-link",size:13,strokeWidth:1.7,rounded:!0})}),rowProps:{"data-shop-surface":e.key}},e.key)}),Y=m.hasSiteSettings&&!!h,L=(()=>{if(r===null)return null;const e=[];let o=!1;for(const a of de){Y&&!o&&a.key.startsWith("system:")&&(e.push(O("shop",h.title,K)),o=!0);const l=a.key===Fe||a.label===ze?t(a.label):a.label;e.push(O(a.key,l,a.rows.map(fe)))}return Y&&!o&&e.push(O("shop",h.title,K)),e})();return w("div",{className:"sf-pages",children:[n(we,{icon:n(ve,{}),title:t("Pages"),context:oe,actions:n(Ce,{label:t("New page"),onClick:me,children:n(xe,{size:15})}),onHide:te}),n("div",{className:"sf-pages-find",children:n(X,{type:"search",leftIcon:n(S,{name:"search",size:14,rounded:!0}),placeholder:t("Search all pages…"),value:D,onChange:e=>le(e.target.value),"aria-label":t("Search all pages")})}),b&&!U&&n("div",{className:"sf-note sf-note--error",role:"alert",children:b}),L===null?n("div",{className:"sf-note",children:t("Loading…")}):L.some(Boolean)?n(Ae,{ariaLabel:t("Pages"),className:"sf-scroll",children:L}):n("div",{className:"sf-note",children:D.trim()?t("No pages match your search"):t("No pages yet. Add one with + above.")}),R&&n(Te,{source:ie,taken:v,duplicate:R,onClose:()=>x(null),onDuplicated:e=>{x(null),H(),u(e.slug)}}),n(Ie,{open:U,onClose:()=>P(!1),size:"sm",title:t("Add a page"),description:t("Give the new template page a name. It starts blank — add sections once it opens."),footer:w(J,{children:[n(V,{variant:"secondary",onClick:()=>P(!1),children:t("Cancel")}),n(V,{onClick:()=>{q()},disabled:d||!p.trim(),loading:d,children:t("Add page")})]}),children:n(De,{label:t("Page name"),htmlFor:W,hint:p.trim()?t("URL: /{slug}",{slug:ee(p,v)}):void 0,error:b??void 0,children:n(X,{id:W,value:p,invalid:!!b,onChange:e=>A(e.target.value),onKeyDown:e=>{e.key==="Enter"&&q()},placeholder:t("e.g. About")})})})]})}export{Ue as default};
1
+ "use client";import{jsx as t,Fragment as $,jsxs as w}from"react/jsx-runtime";import{Fragment as Ae,useEffect as Ie,useId as Re,useMemo as ee,useRef as De,useState as d}from"react";import{useScreenDocument as xe}from"efficient-easel/screen/components/ScreenDocumentContext";import{UiIcon as x}from"efficient-easel/draw/client";import Ne from"efficient-easel/screen/components/SidePanelHead";import{useWebsiteName as ve}from"./WebsiteSettingsPanel.js";import{InspectorIconButton as Ee}from"efficient-easel/chrome";import{Button as ne,Dialog as Oe,FormField as Le,Input as te,PopupMenu as Be,PopupMenuItem as ae,toast as oe}from"efficient-shell/ui";import{LayersTree as Fe,TreeGroupLabel as Me,TreeRow as le,TreeRowAction as N}from"efficient-easel/tree";import{AddIcon as _e,DuplicateIcon as ze,PageIcon as Ge}from"efficient-easel/icons";import{PagesIcon as He}from"efficient-easel/rail";import{useEaselHost as We}from"efficient-easel/screen/lib/host";import{bucketEditorPageRows as Te,DYNAMIC_PAGES_GROUP_KEY as Ue,isDynamicPageRow as je,MAIN_PAGES_GROUP as qe}from"../../format/lib/editor-page-rows.js";import{useEaselSession as Ke}from"efficient-easel/screen/lib/session-context";import{holdPageRow as H,usePageRows as Ye}from"../lib/page-rows.js";import{say as n}from"../../format/lib/editor-words.js";import{canDuplicatePage as Je,uniqueSlug as se,usePageDuplicate as Qe}from"../lib/page-copy.js";import Ve from"./DuplicatePageDialog.js";import{newPopupPage as Xe}from"../../format/lib/popup/new-popup.js";const ie="sf-editor-pages-collapsed-groups";function Ze({onNavigate:u,onClose:re,activeSurface:W,onPreviewSurface:de}){const k=Ke().chrome?.pageRows,T=We(),{adapter:p,capabilities:m,ready:v,currentSlug:U}=xe(),ce=ve(),{rows:c,reload:E,setRows:j,getRows:ue}=Ye(),[O,pe]=d(""),[i,C]=d(!1),[S,g]=d(null),[q,A]=d(!1),[f,L]=d(""),K=Re(),B=Qe(),[me,F]=d(null),[M,ge]=d(()=>{if(typeof window>"u")return new Set;try{const e=window.localStorage.getItem(ie);return new Set(e?JSON.parse(e):[])}catch{return new Set}});Ie(()=>{try{window.localStorage.setItem(ie,JSON.stringify([...M]))}catch{}},[M]);const fe=e=>ge(o=>{const a=new Set(o);return a.has(e)?a.delete(e):a.add(e),a}),he=ee(()=>Te(c??[]),[c]),_=O.trim().toLowerCase(),Y=e=>!_||e.toLowerCase().includes(_),be=e=>_?!0:!M.has(e),I=ee(()=>new Set((c??[]).map(e=>e.slug)),[c]),J=()=>{if(m.pageCreationInAdminForm){T.send("storefront-editor:new-page");return}L(""),g(null),A(!0)},Q=async()=>{const e=f.trim();if(!(!e||!v||i||!p.createPage)){C(!0),g(null);try{const o=await p.createPage({slug:se(e,I),title:e,layout:{}});await E(),A(!1),L(""),u(o.slug)}catch{g(n("Couldn’t add the page — please retry."))}finally{C(!1)}}},R=m.hasSiteSettings&&!!p.createPage,Pe=async()=>{if(!(!v||i||!p.createPage)){C(!0),g(null);try{const e=await p.createPage(Xe(n("New popup"),I));await E(),u(e.slug)}catch{g(n("Couldn’t add the popup — please retry."))}finally{C(!1)}}},V=De(null),[h,b]=d(null),ye=()=>{if(!R)return J();if(h)return b(null);const e=V.current?.getBoundingClientRect();e&&b({top:e.bottom+6,right:Math.max(8,window.innerWidth-e.right)})},we=e=>{const o=c??[],a=p.deletePage;if(!v||i||!a||o.length<=1)return;const s=o.findIndex(l=>l.id===e.id),r=o.filter(l=>l.id!==e.id),P=e.slug===U;H(e.id,!0),j(r),g(null),P&&r[0]&&u(r[0].slug);const D=()=>{H(e.id,!1);const l=ue()??[];if(l.some(Se=>Se.id===e.id))return;const y=[...l];y.splice(Math.max(0,Math.min(s,y.length)),0,e),j(y)};oe.undoable(n("Deleted “{name}”",{name:e.label}),{actionLabel:n("Undo"),commit:async l=>{await a(e.id,l),H(e.id,!1)},undo:()=>{D(),P&&u(e.slug)},onFail:()=>{D(),oe.error(n("Couldn’t delete the page — please retry."))}})},ke=e=>T.send("storefront-editor:open-page",{slug:e}),Ce=e=>{if(!Y(e.label))return null;const o=!W&&e.slug===U,a=m.canDeletePagesInline&&(c??[]).length>1,s=je(e),r=e.kind==="lightbox",P=[...s?[{label:n("Dynamic"),tone:"info"}]:[],...r?[{label:n("Lightbox"),tone:"success"}]:[],...e.draft?[{label:n("draft"),tone:"draft"}]:[]],D=P.length>0?P:void 0,l=!!B&&Je(e),y=l||m.pageCreationInAdminForm||a?w($,{children:[l&&t(N,{kind:"plain",label:n("Duplicate “{name}”",{name:e.label}),disabled:i,onClick:()=>F(e),children:t(ze,{size:13})}),m.pageCreationInAdminForm&&t(N,{kind:"plain",label:n("Edit “{name}” in {place}",{name:e.label,place:n("the admin")}),onClick:()=>ke(e.slug),children:t(x,{name:"pencil",size:13,strokeWidth:1.7,rounded:!0})}),a&&t(N,{kind:"delete",label:n("Delete “{name}”",{name:e.label}),disabled:i,onClick:()=>we(e),children:t(x,{name:"trash",size:13,strokeWidth:1.7,rounded:!0})})]}):void 0;return t(le,{icon:t(Ge,{size:14}),name:e.label,selected:o,onSelect:()=>u(e.slug),badge:D,actions:y,rowProps:{"data-page-slug":e.slug}},e.id)},z=(e,o,a)=>{const s=a.filter(Boolean);if(s.length===0)return null;const r=be(e);return w(Ae,{children:[t(Me,{count:s.length,expanded:r,onToggle:()=>fe(e),children:o}),r&&s]},e)},X=(k?.rows??[]).filter(e=>Y(e.label)).map(e=>{const o=W===e.key;return t(le,{icon:e.icon,name:e.label,selected:o,onSelect:()=>de(e.key),badge:{label:n("Preview"),tone:"warning"},actions:t(N,{kind:"plain",label:n("Open the {name} in a new tab",{name:e.label}),onClick:()=>window.open(e.href,"_blank","noopener,noreferrer"),children:t(x,{name:"external-link",size:13,strokeWidth:1.7,rounded:!0})}),rowProps:{"data-shop-surface":e.key}},e.key)}),Z=m.hasSiteSettings&&!!k,G=(()=>{if(c===null)return null;const e=[];let o=!1;for(const a of he){Z&&!o&&a.key.startsWith("system:")&&(e.push(z("shop",k.title,X)),o=!0);const s=a.key===Ue||a.label===qe?n(a.label):a.label;e.push(z(a.key,s,a.rows.map(Ce)))}return Z&&!o&&e.push(z("shop",k.title,X)),e})();return w("div",{className:"sf-pages",children:[t(Ne,{icon:t(He,{}),title:n("Pages"),context:ce,actions:t(Ee,{buttonRef:V,label:R?n("Add"):n("New page"),hasPopup:R?"menu":void 0,expanded:R?h!==null:void 0,onClick:ye,children:t(_e,{size:15})}),onHide:re}),h&&t(Be,{portal:!0,style:{top:h.top,right:h.right},onClose:()=>b(null),children:w("div",{role:"menu","aria-label":n("Add"),children:[t(ae,{role:"menuitem",onClick:()=>{b(null),J()},children:n("Page")}),t(ae,{role:"menuitem",disabled:i,onClick:()=>{b(null),Pe()},children:n("Popup")})]})}),t("div",{className:"sf-pages-find",children:t(te,{type:"search",leftIcon:t(x,{name:"search",size:14,rounded:!0}),placeholder:n("Search all pages…"),value:O,onChange:e=>pe(e.target.value),"aria-label":n("Search all pages")})}),S&&!q&&t("div",{className:"sf-note sf-note--error",role:"alert",children:S}),G===null?t("div",{className:"sf-note",children:n("Loading…")}):G.some(Boolean)?t(Fe,{ariaLabel:n("Pages"),className:"sf-scroll",children:G}):t("div",{className:"sf-note",children:O.trim()?n("No pages match your search"):n("No pages yet. Add one with + above.")}),B&&t(Ve,{source:me,taken:I,duplicate:B,onClose:()=>F(null),onDuplicated:e=>{F(null),E(),u(e.slug)}}),t(Oe,{open:q,onClose:()=>A(!1),size:"sm",title:n("Add a page"),description:n("Give the new template page a name. It starts blank — add sections once it opens."),footer:w($,{children:[t(ne,{variant:"secondary",onClick:()=>A(!1),children:n("Cancel")}),t(ne,{onClick:()=>{Q()},disabled:i||!f.trim(),loading:i,children:n("Add page")})]}),children:t(Le,{label:n("Page name"),htmlFor:K,hint:f.trim()?n("URL: /{slug}",{slug:se(f,I)}):void 0,error:S??void 0,children:t(te,{id:K,value:f,invalid:!!S,onChange:e=>L(e.target.value),onKeyDown:e=>{e.key==="Enter"&&Q()},placeholder:n("e.g. About")})})})]})}export{Ze as default};
@@ -1 +1 @@
1
- "use client";import{jsx as m,jsxs as w}from"react/jsx-runtime";import{SettingsField as F}from"efficient-easel/panel";import{LinkIcon as _}from"efficient-easel/icons";import{LinkPicker as B,TextLinkField as D}from"efficient-shell/ui";import{useEffect as b,useMemo as h,useRef as H,useState as S}from"react";import{getEditorToken as M}from"../../render/lib/editor-auth.js";import{say as v}from"../../format/lib/editor-words.js";import{currentEaselSession as O}from"efficient-easel/screen/lib/session";import{backendOf as T}from"../lib/website-session.js";import{useScreenDocument as q}from"efficient-easel/screen/components/ScreenDocumentContext";import{pagePath as z}from"../../format/lib/links/page-link-rules.js";import{linkPickerSetup as C}from"../../format/lib/links/link-picker-setup.js";import{useEaselSession as A}from"efficient-easel/screen/lib/session-context";import{isSystemPageSlug as G}from"../../format/lib/content/subscribe.js";function E(r){const n=new Map;return(t="")=>{const e=M(),s=n.get(t);if(!s||s.token===null&&e!==null){const i=e||!O().usesBridgedToken?r(e??"",t).catch(()=>[]):Promise.resolve([]);return n.set(t,{promise:i,token:e}),i}return s.promise}}const I=E(async(r,n)=>{const t=n?{siteId:n}:void 0,{pages:e}=T();return e.linkTargets?e.linkTargets(t):(await e.list(t)).map(s=>({id:s.id,slug:s.slug,label:s.label,layout:null}))}),J=E(async(r,n)=>await T().blog?.posts(n?{siteId:n}:void 0)??[]);function K({value:r,onChange:n,label:t="Link",data:e,filters:s}){const i=h(()=>C(e,s),[e,s]),l=v(t);return m(F,{label:l,icon:m(_,{}),children:m(B,{value:r,onChange:a=>n(a),kinds:i.kinds,rules:i.rules,filtersFor:i.filtersFor,label:l})})}function R(){const{siteId:r,capabilities:n}=q(),{offersCommerce:t,hasBlog:e}=n,[s,i]=S([]),[l,a]=S([]),[u,d]=S([]),[c,g]=S(null),L=A().chrome,P=L?.products?.list,k=L?.linkFilters,y=k?void 0:L?.linkRow,p=H(!0);b(()=>(p.current=!0,()=>{p.current=!1}),[]),b(()=>{let o=!0;return I(r??void 0).then(f=>o&&p.current&&i(f)),e&&J(r??void 0).then(f=>o&&p.current&&a(f)),t&&P?.().then(f=>o&&p.current&&d(f)),t&&k?k.load(r).catch(()=>null).then(f=>o&&p.current&&g(()=>f)):g(null),()=>{o=!1}},[r,t,e,P,k]);const x=h(()=>({pages:s.filter(o=>!G(o.slug)).map(o=>({slug:o.slug,title:o.label,docs:[o.layout]})),posts:e?l.map(o=>({slug:o.slug,title:o.title})):[],products:t?u.map(o=>({href:o.href,name:o.name})):[],offers:{offersCommerce:t,offersService:e}}),[s,l,u,t,e]),j=h(()=>c?c(x.pages):null,[c,x]);return{data:x,filters:j,pages:s,offersCommerce:t,HostLinkRow:y}}function ie({label:r,icon:n,text:t,onTextChange:e,link:s,onLinkChange:i}){const{data:l,filters:a}=R(),u=h(()=>C(l,a),[l,a]),d=v(r);return m(F,{label:d,icon:n,children:m(D,{label:d,text:t,onTextChange:e,link:s,onLinkChange:c=>i(c),kinds:u.kinds,rules:u.rules,filtersFor:u.filtersFor})})}function N({value:r,onChange:n,label:t="Link"}){const e=typeof r=="string"?r:"",{data:s,filters:i,pages:l,offersCommerce:a,HostLinkRow:u}=R(),d=s.pages.map(g=>z(g.slug)),c=a&&u&&(e==="/"||d.includes(e))?u:void 0;return w("div",{children:[m(K,{value:e,onChange:n,label:t,data:s,filters:i}),c&&m(c,{value:e,onChange:n,pages:l})]})}export{K as StorefrontLinkPicker,ie as StorefrontTextLinkField,N as default,I as loadPages,J as loadPosts};
1
+ "use client";import{jsx as m,jsxs as j}from"react/jsx-runtime";import{SettingsField as b}from"efficient-easel/panel";import{LinkIcon as w}from"efficient-easel/icons";import{LinkPicker as D,TextLinkField as U}from"efficient-shell/ui";import{useEffect as F,useMemo as h,useRef as H,useState as S}from"react";import{getEditorToken as M}from"../../render/lib/editor-auth.js";import{say as v}from"../../format/lib/editor-words.js";import{currentEaselSession as O}from"efficient-easel/screen/lib/session";import{backendOf as y}from"../lib/website-session.js";import{useScreenDocument as G}from"efficient-easel/screen/components/ScreenDocumentContext";import{pagePath as I}from"../../format/lib/links/page-link-rules.js";import{linkPickerSetup as T}from"../../format/lib/links/link-picker-setup.js";import{useEaselSession as q}from"efficient-easel/screen/lib/session-context";import{isSystemPageSlug as z,SUBSCRIBE_POPUP_SLUG as A}from"../../format/lib/content/subscribe.js";import{isPopupPageLayout as C}from"../../format/lib/popup/new-popup.js";function E(r){const n=new Map;return(s="")=>{const e=M(),o=n.get(s);if(!o||o.token===null&&e!==null){const i=e||!O().usesBridgedToken?r(e??"",s).catch(()=>[]):Promise.resolve([]);return n.set(s,{promise:i,token:e}),i}return o.promise}}const J=E(async(r,n)=>{const s=n?{siteId:n}:void 0,{pages:e}=y();return e.linkTargets?e.linkTargets(s):(await e.list(s)).map(o=>({id:o.id,slug:o.slug,label:o.label,layout:null}))}),K=E(async(r,n)=>await y().blog?.posts(n?{siteId:n}:void 0)??[]);function N({value:r,onChange:n,label:s="Link",data:e,filters:o}){const i=h(()=>T(e,o),[e,o]),l=v(s);return m(b,{label:l,icon:m(w,{}),children:m(D,{value:r,onChange:a=>n(a),kinds:i.kinds,rules:i.rules,filtersFor:i.filtersFor,label:l})})}function R(){const{siteId:r,capabilities:n}=G(),{offersCommerce:s,hasBlog:e}=n,[o,i]=S([]),[l,a]=S([]),[u,d]=S([]),[c,g]=S(null),P=q().chrome,x=P?.products?.list,k=P?.linkFilters,_=k?void 0:P?.linkRow,p=H(!0);F(()=>(p.current=!0,()=>{p.current=!1}),[]),F(()=>{let t=!0;return J(r??void 0).then(f=>t&&p.current&&i(f)),e&&K(r??void 0).then(f=>t&&p.current&&a(f)),s&&x?.().then(f=>t&&p.current&&d(f)),s&&k?k.load(r).catch(()=>null).then(f=>t&&p.current&&g(()=>f)):g(null),()=>{t=!1}},[r,s,e,x,k]);const L=h(()=>({pages:o.filter(t=>!z(t.slug)&&!C(t.layout)).map(t=>({slug:t.slug,title:t.label,docs:[t.layout]})),popups:o.filter(t=>t.slug===A||C(t.layout)).map(t=>({slug:t.slug,title:t.label})),posts:e?l.map(t=>({slug:t.slug,title:t.title})):[],products:s?u.map(t=>({href:t.href,name:t.name})):[],offers:{offersCommerce:s,offersService:e}}),[o,l,u,s,e]),B=h(()=>c?c(L.pages):null,[c,L]);return{data:L,filters:B,pages:o,offersCommerce:s,HostLinkRow:_}}function ae({label:r,icon:n,text:s,onTextChange:e,link:o,onLinkChange:i}){const{data:l,filters:a}=R(),u=h(()=>T(l,a),[l,a]),d=v(r);return m(b,{label:d,icon:n,children:m(U,{label:d,text:s,onTextChange:e,link:o,onLinkChange:c=>i(c),kinds:u.kinds,rules:u.rules,filtersFor:u.filtersFor})})}function Q({value:r,onChange:n,label:s="Link"}){const e=typeof r=="string"?r:"",{data:o,filters:i,pages:l,offersCommerce:a,HostLinkRow:u}=R(),d=o.pages.map(g=>I(g.slug)),c=a&&u&&(e==="/"||d.includes(e))?u:void 0;return j("div",{children:[m(N,{value:e,onChange:n,label:s,data:o,filters:i}),c&&m(c,{value:e,onChange:n,pages:l})]})}export{N as StorefrontLinkPicker,ae as StorefrontTextLinkField,Q as default,J as loadPages,K as loadPosts};
@@ -1 +1 @@
1
- "use client";import{jsx as o,jsxs as f}from"react/jsx-runtime";import{useId as T,useMemo as I}from"react";import{useEasel as k}from"efficient-easel/easel";import{SettingsField as x,SettingsSwitch as b}from"efficient-easel/panel";import{EyeIcon as E}from"efficient-easel/icons";import{DEFAULT_TICKER_ITEMS as S}from"../../render/components/HeroSection.js";import{GroupLabel as g,TextListField as w,TICKER_ITEMS_ROW as a}from"../lib/puck/controls.js";import{say as c}from"../../format/lib/editor-words.js";const _="root:default-zone";function y({heroId:p}){const{appState:l,dispatch:m}=k(e=>e),s=l.data.content??[],r=s.findIndex(e=>e.props.id===p),t=r>=0?s[r]:null,d=t?t.props.showTicker??!0:!0,h=I(()=>{const e=t?.props.tickerItems;return Array.isArray(e)?e:S.map(u=>({text:u}))},[t]),n=T();if(!t)return o("p",{className:"sf-note",children:c("This ticker’s hero is no longer on the page.")});const i=e=>m({type:"replace",destinationZone:_,destinationIndex:r,data:{...t,props:{...t.props,...e}}});return f("div",{children:[o(g,{label:"Ticker"}),o(x,{label:c("Show ticker"),labelId:n,icon:o(E,{}),action:o(b,{checked:d,onChange:e=>i({showTicker:e}),ariaLabelledBy:n})}),o(w,{label:a.label,icon:a.icon,items:h,placeholder:"item",onChange:e=>i({tickerItems:e}),markup:!0})]})}export{y as default};
1
+ "use client";import{jsx as o,jsxs as f}from"react/jsx-runtime";import{useId as T,useMemo as I}from"react";import{useEasel as k}from"efficient-easel/easel";import{SettingsField as x,SettingsSwitch as b}from"efficient-easel/panel";import{EyeIcon as E}from"efficient-easel/icons";import{DEFAULT_TICKER_ITEMS as S}from"../../format/lib/hero-ticker.js";import{GroupLabel as g,TextListField as w,TICKER_ITEMS_ROW as a}from"../lib/puck/controls.js";import{say as c}from"../../format/lib/editor-words.js";const _="root:default-zone";function y({heroId:p}){const{appState:l,dispatch:m}=k(e=>e),s=l.data.content??[],r=s.findIndex(e=>e.props.id===p),t=r>=0?s[r]:null,d=t?t.props.showTicker??!0:!0,h=I(()=>{const e=t?.props.tickerItems;return Array.isArray(e)?e:S.map(u=>({text:u}))},[t]),n=T();if(!t)return o("p",{className:"sf-note",children:c("This ticker’s hero is no longer on the page.")});const i=e=>m({type:"replace",destinationZone:_,destinationIndex:r,data:{...t,props:{...t.props,...e}}});return f("div",{children:[o(g,{label:"Ticker"}),o(x,{label:c("Show ticker"),labelId:n,icon:o(E,{}),action:o(b,{checked:d,onChange:e=>i({showTicker:e}),ariaLabelledBy:n})}),o(w,{label:a.label,icon:a.icon,items:h,placeholder:"item",onChange:e=>i({tickerItems:e}),markup:!0})]})}export{y as default};
@@ -1 +1 @@
1
- "use client";import{jsx as i,Fragment as B,jsxs as _}from"react/jsx-runtime";import{useCallback as C,useEffect as P,useRef as oe,useState as re}from"react";import{Button as ne,Tooltip as ie}from"efficient-shell/ui";import{SettingsSwitch as se}from"efficient-easel/panel";import{PagesIcon as ae,StylesIcon as ce}from"efficient-easel/rail";import{PaletteIcon as de}from"efficient-shell/icons/efficient";import{TemplateIcon as le}from"efficient-easel/icons";import{Subtree as pe,TreeRow as y}from"efficient-easel/tree";import{useEasel as H}from"efficient-easel/easel";import{useEaselStrings as N}from"efficient-easel/strings";import{LocationsTreeContext as me}from"./LocationsTreeContext.js";import fe from"./PagesPanel.js";import{usePreviewChat as ue}from"./PreviewChatContext.js";import{PREVIEW_DEVICES as Se}from"./preview-devices.js";import{PreviewDeviceContext as he}from"efficient-easel/draw/client";import{usePreviewHeader as Ee}from"../../render/components/PreviewHeaderContext.js";import{usePreviewSocial as we}from"../../render/components/PreviewSocialContext.js";import{usePreviewSurface as Te}from"./PreviewSurfaceContext.js";import{TICKER_PART_LABEL as Pe,usePreviewTicker as be}from"../../render/components/PreviewTickerContext.js";import{usePreviewHeroPart as ge}from"../../render/components/PreviewHeroPartContext.js";import{HERO_MEDIA_PARTS as Ie,HERO_PART_MODE as D,heroMediaRows as ve,heroPartId as W,readHeroPartId as ke}from"../../render/lib/puck/hero-media-parts.js";import _e,{CHAT_MODE as Ce,HEADER_MODE as V,SOCIAL_MODE as Re,WEBSITE_MODE as M}from"./SectionEditor.js";import R from"./SectionIcon.js";import Le from"./SectionThumbnail.js";import{useScreenDocument as L}from"efficient-easel/screen/components/ScreenDocumentContext";import Oe from"./StylesPanel.js";import{LOCATIONS_TYPE as Ae,useLocationsTree as Be}from"./useLocationsTree.js";import{usePinnedChromeSeed as ye}from"./usePinnedChromeSeed.js";import{usePreviewHref as He}from"./usePreviewHref.js";import{WebsitePreviewButton as Ne}from"./WebsitePreviewButton.js";import{SITE_STYLES_TABS as De,SITE_STYLES_TEXT_TAB as We,useWebsiteName as Ve}from"./WebsiteSettingsPanel.js";import{useWebsiteMainAction as Me}from"./useWebsiteMainAction.js";import{VersionHistory as xe}from"./VersionHistoryDrawer.js";import{useEaselSession as x}from"efficient-easel/screen/lib/session-context";import{useOpenPageName as Ye}from"../lib/page-rows.js";import{HERO_GROUP_TYPE as Fe,heroGroupNestDepth as Ge}from"../../format/lib/hero-group-placement.js";import{stripMarkup as ze}from"../../format/lib/markup.js";import{categoryShortLabel as Ke,PINNED_SECTION_TYPE as je}from"../lib/puck/add-palette.js";import{canAddTo as Ue}from"../lib/puck/add-target.js";import{blockIsOffered as Ze}from"../lib/puck/block-offer.js";import{sectionIdOfBoxZone as qe,setBookingPreview as Xe}from"../../render/lib/puck/booking-preview.js";import{footerBlockRowName as Je}from"../../format/lib/puck/footer-block-row-name.js";import{FOOTER_TYPE as Qe,HEADER_TYPE as Y}from"../lib/puck/footer-blocks.js";import{leftViewForSelection as $e,readLeftView as et,resolveLeftView as tt,writeLeftView as ot}from"../../format/lib/puck/left-view.js";import{websiteIsLockedBlock as rt}from"../lib/puck/locked-blocks.js";import{everyPageNotice as nt,noOwnTab as it,pinnedReach as F,websiteDuplicateBlocked as st}from"../lib/puck/every-page.js";import{sharedSectionReach as at,WEBSITE_SHARED_SECTIONS as ct}from"../lib/shared-sections-layer.js";import{activeSharedSections as O,setSharedEditor as G}from"../../format/lib/shared-sections-active.js";import{sharedSectionsOf as dt}from"efficient-easel/screen/lib/shared-sections";import{pinnedChromeInPlace as v}from"../../format/lib/pinned-chrome-lock.js";import{scrollPreviewToSection as lt,scrollPreviewToTop as z}from"efficient-easel/screen/lib/puck/preview-dom";import{SiteCanvas as pt}from"../lib/puck/overrides.js";import{labelAtLevel as mt}from"../../format/lib/puck/section-catalog.js";import{editorWords as ft,say as p}from"../../format/lib/editor-words.js";import{SECTION_DESCRIPTIONS as ut}from"../../format/lib/puck/section-descriptions.js";import{groupAccepts as St,isSectionGroupType as ht,sectionGroupZone as Et,SITE_FOOTER_TYPE as K,SITE_HEADER_TYPE as wt}from"../../format/lib/puck/section-groups.js";import{resolveSaveAsTemplateAction as Tt,SAVE_AS_TEMPLATE_EVENT as Pt}from"../../format/lib/save-as-template-action.js";import{newSectionNode as bt}from"../lib/sections/new-section-node.js";import{useHostProducts as gt}from"../lib/use-host-products.js";import{backendOf as It}from"../lib/website-session.js";function j({mode:e,open:t}){const{setSelectedHeroId:o,setSelectHandler:r}=be(),c=N().tree,d=e,n=d.kind==="ticker"?d.heroId:null,a=C(s=>{if(!s)return;t({kind:"ticker",heroId:s}),lt(s)},[t]);return P(()=>{o(n)},[n,o]),P(()=>{r(a)},[r,a]),{partRows:(s,{rowClick:u})=>{const m=String(s.props.id);return s.type==="Hero"&&i(y,{icon:i(R,{type:"ticker",size:13}),name:p(Pe),onSelect:()=>a(m),selected:n===m,rowProps:{onClick:u(()=>a(m))},words:c})}}}function U({mode:e,select:t}){const{setSelectedHeroPart:o,setSelectHandler:r}=ge(),c=N().tree,{appState:d}=H(f=>f),n=d.data.content??[],a=oe(n);a.current=n;const s=e,u=Ie.find(f=>D[f]===s.kind),m=u&&"nodeId"in s?W(String(s.nodeId),u):null,E=C(f=>{const l=ke(f);if(!l)return;const w=a.current.findIndex(S=>String(S.props.id)===l.nodeId);if(w<0)return;const b={kind:D[l.part],nodeId:l.nodeId};t({index:w},b)},[t]);return P(()=>{o(m)},[m,o]),P(()=>{r(E)},[r,E]),{partRows:(f,{rowClick:l})=>{const w=String(f.props.id),b=ve(f);if(b.length===0)return null;const S=I=>{const g=W(w,I.part);return i(y,{icon:i(R,{type:I.part==="media"?"heroMedia":"heroImage",size:13}),name:p(I.label),onSelect:()=>E(g),selected:m===g,rowProps:{onClick:l(()=>E(g))},words:c},g)},[h,...T]=b;return _(B,{children:[S(h),T.length>0&&i(pe,{children:T.map(S)})]})}}}function Z(e,t){return{partRows:(o,r)=>_(B,{children:[e.partRows?.(o,r),t.partRows?.(o,r)]})}}function vt(e){const{adapter:t,capabilities:o,currentSlug:r,siteId:c,docId:d,hasUnsavedEdits:n,bridgeCapabilities:a,notifyParent:s,token:u}=L(),{hasPreviewLink:m}=o,E=It(x()).preview?.draftLink,f=Me(e.data),l=Tt({hasTrustedConsole:!!u,canCreatePlatformTemplate:a.canCreatePlatformTemplate,capabilities:o,siteId:c,hasUnsavedEdits:n}),w=C(()=>{!c||!r||s(Pt,{siteId:c,slug:r})},[s,c,r]),b=He({pageSlug:r,siteId:c,token:u}),S=t.previewHref?.(r)??b;return{barLead:()=>l.visible&&i(ie,{side:"bottom",content:l.enabled?p("Save this website as a platform template"):p(l.disabledReason),children:i("span",{className:"sf-tip-disabled",tabIndex:l.enabled?void 0:0,children:i(ne,{variant:"secondary",disabled:!l.enabled,onClick:w,rightIcon:i(le,{size:15}),children:p("Save as Template")})})}),barTrail:()=>m&&r&&i(Ne,{liveHref:S,pageId:d??null,draftLink:E}),mainAction:f}}function kt(e,t){const{capabilities:o,templateId:r,siteId:c,tokenRef:d,navigate:n}=L(),{hasSiteTheme:a,explainsSiteSettings:s}=o,u=h=>t.setView(h),[m,E]=re(De[0].id),{surface:f,setSurface:l}=Te(),w=()=>{if(a){u("styles"),t.reveal(),z();return}e.show(M),e.reveal(),z()},b={id:"pages",label:p("Pages"),icon:i(ae,{}),panel:({onHide:h})=>i(fe,{activeSurface:f,onPreviewSurface:l,onNavigate:T=>{l(null),n(r?{kind:"template",id:r,pageSlug:T}:{kind:"page",slug:T,siteId:c??void 0})},onClose:h})},S=[];return!a&&s&&S.push({id:"appearance",label:p("Appearance"),icon:i(de,{}),active:e.kind==="website",onSelect:w}),a&&S.push({id:"styles",label:p("Styles"),icon:i(ce,{}),panel:({onHide:h,notify:T})=>i(Oe,{tokenRef:d,siteId:c??void 0,onClose:h,onNotify:T,tab:m,onTabChange:E})}),{railLead:[b],railTrail:S,resolveLeftView:(h,T)=>tt(h,a,T),openSettings:w,openStyles:()=>{E(We),u("styles")}}}function _t(){const{navigate:e,siteId:t,reloadFromServer:o,docId:r}=L(),c=H(n=>n.config),d=x();P(()=>(G({openPage:n=>e({kind:"page",slug:n.slug,siteId:t??void 0}),reload:()=>{o()},config:c}),()=>G(null)),[e,t,o,c]),P(()=>{const n=O();if(!n||!r)return;let a=!1;return dt(d).list().then(s=>{a||n.learn(s)}).catch(()=>{}),()=>{a=!0}},[r,d])}function Ct(e,t,o,r){const{kind:c,open:d}=e,{selected:n,zoneOf:a}=t;P(()=>{Xe(n?.type==="BookingBox"&&n.props.region==="confirm"?qe(a(String(n.props.id))):null)},[n?.props.id]);const s=Be(e,t),{capabilities:{hasSiteSettings:u}}=L();_t();const{setSelected:m,setSelectHandler:E}=Ee(),{chat:f,setChat:l,setSelected:w,setSelectHandler:b}=ue(),S=c==="header";P(()=>{m(S)},[S,m]),P(()=>{E(()=>d(V))},[E,d]);const h=C(()=>d(Ce),[d]),T=c==="chat";P(()=>{w(T)},[T,w]),P(()=>{b(h)},[b,h]);const{setOpenHandler:I}=we(),g=C(()=>d(Re),[d]);P(()=>{I(g)},[I,g]);const J=Z(j(e),U(e)),Q=vt(t),$=kt(e,r),ee=o.device;return{...J,...Q,...$,hasOwnRows:k=>k.type===Ae,ownRows:s.renderLocationTree,sectionPressed:s.sectionPressed,wrap:k=>i(me.Provider,{value:!0,children:_(he.Provider,{value:ee,children:[k,i(xe,{})]})}),addPanelRow:k=>u?_("div",{className:"sf-addside-sitewide",children:[i("span",{className:"sf-addside-sitewide-glyph","aria-hidden":"true",children:i(R,{type:"chat",size:16})}),_("button",{type:"button",className:"sf-addside-sitewide-name",onClick:()=>{k(),h()},children:[p("Live chat"),i("span",{className:"sf-addside-sitewide-desc",children:p("A chat bubble on every page")})]}),i(se,{checked:f.enabled,onChange:te=>l({enabled:te}),ariaLabel:p("Show the chat bubble on the whole site")})]}):void 0}}let q=null,A=new WeakMap;function Rt(e){const t=ft();if(!e||!t)return e;q!==t&&(q=t,A=new WeakMap);let o=A.get(e);return o||(o={...e,choices:e.choices?e.choices.map(r=>({...r,label:p(r.label)})):null,spec:e.spec?{...e.spec,addLabel:p(e.spec.addLabel)}:null},A.set(e,o)),o}const Lt={isLockedBlock:(e,t)=>rt(e)||!!(t&&O()?.heldElsewhere(t.props.id)),duplicateBlocked:st,nestDepth:(e,t,o)=>t===Fe?Ge(e,o):0,newSectionNode:bt,canAddTo:(e,t)=>Rt(Ue(e,t)),blockIsOffered:Ze},Ot=new Proxy(ut,{get:(e,t)=>{const o=Reflect.get(e,t);return typeof o=="string"?p(o):o}}),At={labelAtLevel:(e,t,o)=>p(mt(e,t,o)),descriptions:Ot,categoryLabel:e=>{const t=Ke(e);return t===void 0?void 0:p(t)},firstSection:je,blockRowName:Je,plainText:ze,Icon:R,Thumbnail:Le,useProducts:gt},Bt={desktop:2e3,tablet:800,mobile:390},X="desktop",yt={options:Se,initial:X,fluid:X,widths:Bt},Ht={read:et,write:e=>ot(e),forSelection:(e,t)=>$e(e,t)},Nt={first:Y,last:Qe,firstGroup:wt,lastGroup:K,isSectionGroup:ht,sectionGroupZone:Et,panelOf:e=>e===Y?V:null,get sharedReach(){return v()?Wt:void 0},get shared(){return O()?ct:void 0},get groupTab(){return v()?it:void 0},get groupBadge(){return v()?F({type:K})??void 0:void 0},get changeNotice(){return v()?nt():void 0},get band(){return v()?Dt:void 0},get groupAccepts(){return v()?St:void 0}},Dt={foldable:!0},Wt=e=>F(e)??at(e);function Vt(e){return{...Z(j(e),U(e)),openSettings:()=>e.show(M)}}const jo={useOwnerName:Ve,useDocumentLabel:Ye,useBridges:Ct,useStandaloneBridges:Vt,useDocumentPass:ye,blockRules:Lt,blockLook:At,devices:yt,leftView:Ht,pinned:Nt,Canvas:pt,Inspector:_e};export{jo as WEBSITE_SCREEN};
1
+ "use client";import{jsx as i,Fragment as B,jsxs as _}from"react/jsx-runtime";import{useCallback as R,useEffect as T,useRef as oe,useState as re}from"react";import{Button as ne,Tooltip as ie}from"efficient-shell/ui";import{SettingsSwitch as se}from"efficient-easel/panel";import{PagesIcon as ae,StylesIcon as ce}from"efficient-easel/rail";import{PaletteIcon as de}from"efficient-shell/icons/efficient";import{TemplateIcon as le}from"efficient-easel/icons";import{Subtree as pe,TreeRow as y}from"efficient-easel/tree";import{useEasel as D}from"efficient-easel/easel";import{useEaselStrings as H}from"efficient-easel/strings";import{LocationsTreeContext as me}from"./LocationsTreeContext.js";import fe from"./PagesPanel.js";import{usePreviewChat as ue}from"./PreviewChatContext.js";import{PREVIEW_DEVICES as Se}from"./preview-devices.js";import{PreviewDeviceContext as Ee}from"efficient-easel/draw/client";import{usePreviewHeader as he}from"../../render/components/PreviewHeaderContext.js";import{usePreviewSocial as we}from"../../render/components/PreviewSocialContext.js";import{usePreviewSurface as Te}from"./PreviewSurfaceContext.js";import{TICKER_PART_LABEL as Pe,usePreviewTicker as be}from"../../render/components/PreviewTickerContext.js";import{usePreviewHeroPart as ge}from"../../render/components/PreviewHeroPartContext.js";import{HERO_MEDIA_PARTS as Ie,HERO_PART_MODE as N,heroMediaRows as ve,heroPartId as W,readHeroPartId as ke}from"../../render/lib/puck/hero-media-parts.js";import _e,{CHAT_MODE as Re,HEADER_MODE as M,SOCIAL_MODE as Ce,WEBSITE_MODE as V}from"./SectionEditor.js";import C from"./SectionIcon.js";import Oe from"./SectionThumbnail.js";import{useScreenDocument as O}from"efficient-easel/screen/components/ScreenDocumentContext";import Le from"./StylesPanel.js";import{LOCATIONS_TYPE as Ae,useLocationsTree as Be}from"./useLocationsTree.js";import{usePinnedChromeSeed as ye}from"./usePinnedChromeSeed.js";import{usePreviewHref as De}from"./usePreviewHref.js";import{WebsitePreviewButton as He}from"./WebsitePreviewButton.js";import{SITE_STYLES_TABS as Ne,SITE_STYLES_TEXT_TAB as We,useWebsiteName as Me}from"./WebsiteSettingsPanel.js";import{useWebsiteMainAction as Ve}from"./useWebsiteMainAction.js";import{VersionHistory as xe}from"./VersionHistoryDrawer.js";import{useEaselSession as x}from"efficient-easel/screen/lib/session-context";import{useOpenPageName as Ye}from"../lib/page-rows.js";import{HERO_GROUP_TYPE as Fe,heroGroupNestDepth as Ge}from"../../format/lib/hero-group-placement.js";import{stripMarkup as ze}from"../../format/lib/markup.js";import{categoryShortLabel as Ke,PINNED_SECTION_TYPE as je}from"../lib/puck/add-palette.js";import{canAddTo as Ue}from"../lib/puck/add-target.js";import{blockIsOffered as Ze}from"../lib/puck/block-offer.js";import{sectionIdOfBoxZone as qe,setBookingPreview as Xe}from"../../render/lib/puck/booking-preview.js";import{footerBlockRowName as Je}from"../../format/lib/puck/footer-block-row-name.js";import{FOOTER_TYPE as Qe,HEADER_TYPE as Y}from"../lib/puck/footer-blocks.js";import{leftViewForSelection as $e,readLeftView as et,resolveLeftView as tt,writeLeftView as ot}from"../../format/lib/puck/left-view.js";import{websiteIsLockedBlock as rt}from"../lib/puck/locked-blocks.js";import{everyPageNotice as nt,noOwnTab as it,pinnedReach as F,websiteDuplicateBlocked as st}from"../lib/puck/every-page.js";import{sharedSectionReach as at,WEBSITE_SHARED_SECTIONS as ct}from"../lib/shared-sections-layer.js";import{activeSharedSections as L,setSharedEditor as G}from"../../format/lib/shared-sections-active.js";import{sharedSectionsOf as dt}from"efficient-easel/screen/lib/shared-sections";import{pinnedChromeInPlace as v}from"../../format/lib/pinned-chrome-lock.js";import{scrollPreviewToSection as lt,scrollPreviewToTop as z}from"efficient-easel/screen/lib/puck/preview-dom";import{SiteCanvas as pt}from"../lib/puck/overrides.js";import{labelAtLevel as mt}from"../../format/lib/puck/section-catalog.js";import{WEBSITE_MEDIA_DROP as ft}from"../../format/lib/puck/media-drop.js";import{editorWords as ut,say as p}from"../../format/lib/editor-words.js";import{SECTION_DESCRIPTIONS as St}from"../../format/lib/puck/section-descriptions.js";import{groupAccepts as Et,isSectionGroupType as ht,sectionGroupZone as wt,SITE_FOOTER_TYPE as K,SITE_HEADER_TYPE as Tt}from"../../format/lib/puck/section-groups.js";import{resolveSaveAsTemplateAction as Pt,SAVE_AS_TEMPLATE_EVENT as bt}from"../../format/lib/save-as-template-action.js";import{newSectionNode as gt}from"../lib/sections/new-section-node.js";import{useHostProducts as It}from"../lib/use-host-products.js";import{backendOf as vt}from"../lib/website-session.js";function j({mode:e,open:t}){const{setSelectedHeroId:o,setSelectHandler:r}=be(),c=H().tree,d=e,n=d.kind==="ticker"?d.heroId:null,a=R(s=>{if(!s)return;t({kind:"ticker",heroId:s}),lt(s)},[t]);return T(()=>{o(n)},[n,o]),T(()=>{r(a)},[r,a]),{partRows:(s,{rowClick:u})=>{const m=String(s.props.id);return s.type==="Hero"&&i(y,{icon:i(C,{type:"ticker",size:13}),name:p(Pe),onSelect:()=>a(m),selected:n===m,rowProps:{onClick:u(()=>a(m))},words:c})}}}function U({mode:e,select:t}){const{setSelectedHeroPart:o,setSelectHandler:r}=ge(),c=H().tree,{appState:d}=D(f=>f),n=d.data.content??[],a=oe(n);a.current=n;const s=e,u=Ie.find(f=>N[f]===s.kind),m=u&&"nodeId"in s?W(String(s.nodeId),u):null,h=R(f=>{const l=ke(f);if(!l)return;const w=a.current.findIndex(S=>String(S.props.id)===l.nodeId);if(w<0)return;const P={kind:N[l.part],nodeId:l.nodeId};t({index:w},P)},[t]);return T(()=>{o(m)},[m,o]),T(()=>{r(h)},[r,h]),{partRows:(f,{rowClick:l})=>{const w=String(f.props.id),P=ve(f);if(P.length===0)return null;const S=I=>{const g=W(w,I.part);return i(y,{icon:i(C,{type:I.part==="media"?"heroMedia":"heroImage",size:13}),name:p(I.label),onSelect:()=>h(g),selected:m===g,rowProps:{onClick:l(()=>h(g))},words:c},g)},[E,...b]=P;return _(B,{children:[S(E),b.length>0&&i(pe,{children:b.map(S)})]})}}}function Z(e,t){return{partRows:(o,r)=>_(B,{children:[e.partRows?.(o,r),t.partRows?.(o,r)]})}}function kt(e){const{adapter:t,capabilities:o,currentSlug:r,siteId:c,docId:d,hasUnsavedEdits:n,bridgeCapabilities:a,notifyParent:s,token:u}=O(),{hasPreviewLink:m}=o,h=vt(x()).preview?.draftLink,f=Ve(e.data),l=Pt({hasTrustedConsole:!!u,canCreatePlatformTemplate:a.canCreatePlatformTemplate,capabilities:o,siteId:c,hasUnsavedEdits:n}),w=R(()=>{!c||!r||s(bt,{siteId:c,slug:r})},[s,c,r]),P=De({pageSlug:r,siteId:c,token:u}),S=t.previewHref?.(r)??P;return{barLead:()=>l.visible&&i(ie,{side:"bottom",content:l.enabled?p("Save this website as a platform template"):p(l.disabledReason),children:i("span",{className:"sf-tip-disabled",tabIndex:l.enabled?void 0:0,children:i(ne,{variant:"secondary",disabled:!l.enabled,onClick:w,rightIcon:i(le,{size:15}),children:p("Save as Template")})})}),barTrail:()=>m&&r&&i(He,{liveHref:S,pageId:d??null,draftLink:h}),mainAction:f}}function _t(e,t){const{capabilities:o,templateId:r,siteId:c,tokenRef:d,navigate:n}=O(),{hasSiteTheme:a,explainsSiteSettings:s}=o,u=E=>t.setView(E),[m,h]=re(Ne[0].id),{surface:f,setSurface:l}=Te(),w=()=>{if(a){u("styles"),t.reveal(),z();return}e.show(V),e.reveal(),z()},P={id:"pages",label:p("Pages"),icon:i(ae,{}),panel:({onHide:E})=>i(fe,{activeSurface:f,onPreviewSurface:l,onNavigate:b=>{l(null),n(r?{kind:"template",id:r,pageSlug:b}:{kind:"page",slug:b,siteId:c??void 0})},onClose:E})},S=[];return!a&&s&&S.push({id:"appearance",label:p("Appearance"),icon:i(de,{}),active:e.kind==="website",onSelect:w}),a&&S.push({id:"styles",label:p("Styles"),icon:i(ce,{}),panel:({onHide:E,notify:b})=>i(Le,{tokenRef:d,siteId:c??void 0,onClose:E,onNotify:b,tab:m,onTabChange:h})}),{railLead:[P],railTrail:S,resolveLeftView:E=>tt(E,a),openSettings:w,openStyles:()=>{h(We),u("styles")}}}function Rt(){const{navigate:e,siteId:t,reloadFromServer:o,docId:r}=O(),c=D(n=>n.config),d=x();T(()=>(G({openPage:n=>e({kind:"page",slug:n.slug,siteId:t??void 0}),reload:()=>{o()},config:c}),()=>G(null)),[e,t,o,c]),T(()=>{const n=L();if(!n||!r)return;let a=!1;return dt(d).list().then(s=>{a||n.learn(s)}).catch(()=>{}),()=>{a=!0}},[r,d])}function Ct(e,t,o,r){const{kind:c,open:d}=e,{selected:n,zoneOf:a}=t;T(()=>{Xe(n?.type==="BookingBox"&&n.props.region==="confirm"?qe(a(String(n.props.id))):null)},[n?.props.id]);const s=Be(e,t),{capabilities:{hasSiteSettings:u}}=O();Rt();const{setSelected:m,setSelectHandler:h}=he(),{chat:f,setChat:l,setSelected:w,setSelectHandler:P}=ue(),S=c==="header";T(()=>{m(S)},[S,m]),T(()=>{h(()=>d(M))},[h,d]);const E=R(()=>d(Re),[d]),b=c==="chat";T(()=>{w(b)},[b,w]),T(()=>{P(E)},[P,E]);const{setOpenHandler:I}=we(),g=R(()=>d(Ce),[d]);T(()=>{I(g)},[I,g]);const J=Z(j(e),U(e)),Q=kt(t),$=_t(e,r),ee=o.device;return{...J,...Q,...$,hasOwnRows:k=>k.type===Ae,ownRows:s.renderLocationTree,sectionPressed:s.sectionPressed,wrap:k=>i(me.Provider,{value:!0,children:_(Ee.Provider,{value:ee,children:[k,i(xe,{})]})}),addPanelRow:k=>u?_("div",{className:"sf-addside-sitewide",children:[i("span",{className:"sf-addside-sitewide-glyph","aria-hidden":"true",children:i(C,{type:"chat",size:16})}),_("button",{type:"button",className:"sf-addside-sitewide-name",onClick:()=>{k(),E()},children:[p("Live chat"),i("span",{className:"sf-addside-sitewide-desc",children:p("A chat bubble on every page")})]}),i(se,{checked:f.enabled,onChange:te=>l({enabled:te}),ariaLabel:p("Show the chat bubble on the whole site")})]}):void 0}}let q=null,A=new WeakMap;function Ot(e){const t=ut();if(!e||!t)return e;q!==t&&(q=t,A=new WeakMap);let o=A.get(e);return o||(o={...e,choices:e.choices?e.choices.map(r=>({...r,label:p(r.label)})):null,spec:e.spec?{...e.spec,addLabel:p(e.spec.addLabel)}:null},A.set(e,o)),o}const Lt={isLockedBlock:(e,t)=>rt(e)||!!(t&&L()?.heldElsewhere(t.props.id)),duplicateBlocked:st,nestDepth:(e,t,o)=>t===Fe?Ge(e,o):0,newSectionNode:gt,canAddTo:(e,t)=>Ot(Ue(e,t)),blockIsOffered:Ze},At=new Proxy(St,{get:(e,t)=>{const o=Reflect.get(e,t);return typeof o=="string"?p(o):o}}),Bt={labelAtLevel:(e,t,o)=>p(mt(e,t,o)),descriptions:At,categoryLabel:e=>{const t=Ke(e);return t===void 0?void 0:p(t)},firstSection:je,blockRowName:Je,plainText:ze,Icon:C,Thumbnail:Oe,useProducts:It},yt={desktop:2e3,tablet:800,mobile:390},X="desktop",Dt={options:Se,initial:X,fluid:X,widths:yt},Ht={read:et,write:e=>ot(e),forSelection:(e,t)=>$e(e,t)},Nt={first:Y,last:Qe,firstGroup:Tt,lastGroup:K,isSectionGroup:ht,sectionGroupZone:wt,panelOf:e=>e===Y?M:null,get sharedReach(){return v()?Mt:void 0},get shared(){return L()?ct:void 0},get groupTab(){return v()?it:void 0},get groupBadge(){return v()?F({type:K})??void 0:void 0},get changeNotice(){return v()?nt():void 0},get band(){return v()?Wt:void 0},get groupAccepts(){return v()?Et:void 0}},Wt={foldable:!0},Mt=e=>F(e)??at(e);function Vt(e){return{...Z(j(e),U(e)),openSettings:()=>e.show(V)}}const Zo={useOwnerName:Me,useDocumentLabel:Ye,useBridges:Ct,useStandaloneBridges:Vt,useDocumentPass:ye,blockRules:Lt,blockLook:Bt,devices:Dt,leftView:Ht,pinned:Nt,Canvas:pt,canvasDrag:{media:ft},Inspector:_e};export{Zo as WEBSITE_SCREEN};
@@ -1 +1 @@
1
- "use client";import{SITE_FOOTER_SLUG as H}from"../../format/lib/content/footer.js";import{offeredSetsOf as x}from"./editor-blocks.js";import{isBackendError as F}from"efficient-easel/screen/lib/backend-error";import{isEfficientBackend as z}from"efficient-easel/screen/lib/session";import{noteLoaded as M,notePublished as _,noteSaved as T,pageLiveState as Z}from"./page-live-state.js";import{noteSiteLiveState as ee,refreshSiteLiveState as A}from"./site-live-state.js";import{say as te}from"../../format/lib/editor-words.js";import{sendSiteWrites as ne}from"../../format/lib/site-writes.js";import{spliceChrome as oe,splitChrome as G}from"./pinned-chrome-doc.js";import{references as ie,sectionNodeOf as se,spliceShared as re,splitShared as le}from"../../format/lib/shared-section-docs.js";import{setActiveSharedSections as W}from"../../format/lib/shared-sections-active.js";import{setActivePinnedChrome as Y}from"../../format/lib/pinned-chrome-lock.js";import{backendOf as $}from"./website-session.js";function I(n){return!!(n?.publish&&n.liveState)}function ae(n,i){if(!I(n))return;const{versions:c,nameVersion:d,restoreVersion:a,previewVersion:o}=n;if(!(!c||!d||!a||!o))return{list:()=>c.call(n,i),name:(f,w)=>d.call(n,f,w,i),restore:(f,w)=>a.call(n,f,w??{},i),preview:f=>o.call(n,f,i)}}function ce(n,i){return async(c,d)=>{try{await ne()}catch(o){throw new Error(te("A change waiting to go live could not be saved."),{cause:o})}return(await n.publish(i)).state==="live"?ee({state:"live",changes:[]}):A(0),{version:d??null}}}function N(n,i,c){const d=i?{siteId:i}:void 0;return{resolve:a=>n.load({slug:a,...d}).then(o=>(o&&M(o.id,o.live),o)),saveLayout:(a,o,f,w)=>n.save(a,{layout:o},{version:f,clientId:w??""}).then(m=>(T(a,m.live),A(),m)),rereadVersion:n.version?a=>n.version(a):void 0,publish:I(c)?ce(c,d):n.publish?(a,o)=>n.publish(a,o?{version:o}:void 0).then(f=>(_(a,f.live),f)):void 0,listPages:()=>n.list(d),createPage:n.create?a=>n.create({...a,...d}):void 0,deletePage:n.remove?(a,o)=>n.remove(a,o):void 0}}function de(n,i,c,d,a=!1){let o=null;const f=new Set;let w=!1,m=new Map,y=new Map,h=new Map,g=new Map,P={docId:null,lockHolder:null,conflict:null,saveFailed:!1,unpublished:!1,loadFailed:!1,sections:[]};const B=new Set,D=()=>{if(!o)return!1;const e=Z(o.id);return e==="changed"||e==="never"||e===void 0&&w},S=e=>{P={...P,...e,docId:o?.id??null,unpublished:D(),sections:[...h.values()]};for(const t of B)t()},k=(e,t,s)=>{t?h.set(e,{section:e,title:m.get(e)?.title??"",problem:t,holder:s}):h.delete(e)},C=e=>e&&typeof e=="object"&&!Array.isArray(e)?e:{},O=e=>f.has(e),R=()=>new Map([...m].map(([e,t])=>[e,t.layout])),V=()=>`SharedSection-${typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():Math.random().toString(36).slice(2)}`,J=(e,t,s,r)=>{const l=C(t);m.set(e,{layout:l,version:s,savedJson:JSON.stringify(l),title:r})},U={state:()=>P,subscribe:e=>(B.add(e),()=>{B.delete(e)})},K={sectionOf:e=>y.get(e)?.section??null,heldElsewhere:e=>{const t=y.get(e)?.section;return!!(t&&h.get(t)?.problem==="lock")},adopt:(e,t)=>{J(t.id,t.layout,t.layout_updated_at,t.title),y.set(e,{section:t.id,refId:V()}),g.set(t.id,t.used_on),S({})},place:e=>{if([...y.values()].some(r=>r.section===e.id))return null;const t=se(C(e.layout)),s=typeof t?.props?.id=="string"?t.props.id:null;return!t||!s||!t.type?null:(J(e.id,e.layout,e.layout_updated_at,e.title),y.set(s,{section:e.id,refId:V()}),g.set(e.id,e.used_on),t)},usedOn:e=>g.get(e)??null,learn:e=>{for(const t of e){g.set(t.id,t.used_on);const s=m.get(t.id);s&&(s.title=t.title);const r=h.get(t.id);r&&h.set(t.id,{...r,title:t.title})}S({})}},Q=async(e,t)=>{for(const[s,r]of e){const l=m.get(s),u=JSON.stringify(r);if(!(!l||u===l.savedJson||h.get(s)?.problem==="lock"))try{const v=await n.save(s,{layout:r},{version:l.version,clientId:t??""});T(s,v.live),l.layout=r,l.version=v.version,l.savedJson=u,k(s,null)}catch(v){F(v,"changed-elsewhere")?k(s,"conflict"):F(v,"lock-taken")?k(s,"lock",v.holder??void 0):k(s,"save")}}e.size&&A(),S({})};return{resolve:async e=>{if(Y(e===H?null:U),W(e===H?null:K),m=new Map,y=new Map,h=new Map,g=new Map,e===H)return c.resolve(e);let t=!1;const[s,r]=await Promise.all([c.resolve(e),n.load({slug:H,...i}).catch(()=>(t=!0,null))]);if(r){M(r.id,r.live);const p=C(r.layout);o={id:r.id,layout:p,version:r.version,savedJson:""}}else o=null;if(w=!1,!s)return S({conflict:null,saveFailed:!1,loadFailed:t}),s;const l=C(s.layout),u=ie(l),v=await Promise.all(u.map(p=>n.load({id:p.section,...i}).catch(()=>null)));u.forEach((p,X)=>{const L=v[X];L?(M(L.id,L.live),J(p.section,L.layout,L.version,"")):(m.delete(p.section),h.set(p.section,{section:p.section,title:"",problem:"load"}))});const E=re(l,R());if(y=E.held,!o)return y.size&&f.add(s.id),S({conflict:null,saveFailed:!1,loadFailed:t}),y.size?{...s,layout:E.working}:s;const b=oe(E.working,o.layout);return o.savedJson=JSON.stringify(G(b,o.layout).chrome),f.add(s.id),S({conflict:null,saveFailed:!1,loadFailed:!1}),{...s,layout:b}},saveLayout:async(e,t,s,r)=>{if(!O(e))return c.saveLayout(e,t,s,r);const l=o,u=l?G(t,l.layout):{page:t,chrome:null},v=le(u.page,y,R()),E=await c.saveLayout(e,v.page,s,r);if(await Q(v.docs,r),!l)return E;const b=JSON.stringify(u.chrome);if(!u.chrome||b===l.savedJson||P.lockHolder)return E;try{const p=await n.save(l.id,{layout:u.chrome},{version:l.version,clientId:r??""});T(l.id,p.live),A(),l.layout=u.chrome,l.version=p.version,l.savedJson=b,w=!0,S({conflict:null,saveFailed:!1})}catch(p){F(p,"changed-elsewhere")?S({conflict:p.conflict??{savedBy:"",savedByYou:!1,secondsAgo:0}}):F(p,"lock-taken")?S({lockHolder:p.holder??{name:"",secondsSinceSeen:0,secondsSinceHeld:0}}):S({saveFailed:!0})}return E},publish:c.publish?async(e,t)=>{const s=await c.publish(e,t),r=o;if(r&&O(e)&&!a&&n.publish&&D()&&!P.lockHolder){const l=await n.publish(r.id,r.version?{version:r.version}:void 0);_(r.id,l.live),l.version!==null&&(r.version=l.version),w=!1,S({})}if(O(e)&&!a&&n.publish)for(const[l,u]of m){if(h.get(l)?.problem==="lock")continue;const v=await n.publish(l,u.version?{version:u.version}:void 0);_(l,v.live),v.version!==null&&(u.version=v.version)}return s}:void 0,lock:d?{claim:async(e,t,s)=>{const r=await d.claim(e,t,s);if(!O(e))return r;const l=o;if(l)try{await d.claim(l.id,t,!1),P.lockHolder&&S({lockHolder:null})}catch(u){F(u,"lock-taken")&&S({lockHolder:u.holder??{name:"",secondsSinceSeen:0,secondsSinceHeld:0}})}for(const u of m.keys())try{await d.claim(u,t,!1),h.get(u)?.problem==="lock"&&k(u,null)}catch(v){F(v,"lock-taken")&&k(u,"lock",v.holder??void 0)}return m.size&&S({}),r},release:async(e,t)=>{if(await d.release(e,t),!O(e))return;const s=o;s&&!P.lockHolder&&await d.release(s.id,t).catch(()=>{});for(const r of m.keys())h.get(r)?.problem!=="lock"&&await d.release(r,t).catch(()=>{})}}:void 0,pinnedChrome:U}}function ke(n,i=$(),c=x(),d={}){const a=z(i),o=n?{siteId:n}:void 0,f=a?!!n:!0,w=i.site.update,m=a&&c.commerce&&c.service,y=!!d.editsPinnedInPlace&&m,h=I(i.site)?i.site:void 0,g=N(i.pages,n,h),P=y?de(i.pages,o,g,i.lock,!!h):null;return{capabilities:{canPublish:!!h||!!i.pages.publish,hasSiteSettings:a,hasSiteTheme:!!i.theme,placeholderFrames:!1,mediaEditing:!0,pageCreationInAdminForm:!i.pages.create,canDeletePagesInline:!!i.pages.remove,hasEditLock:!!i.lock,hasEditGuard:!0,hasPinnedChrome:m,editsPinnedInPlace:y,explainsSiteSettings:!1,hasSiteRecord:f,canEditSiteRecord:f&&!!w,hasPreviewLink:a||!!i.preview,hasCatalog:a&&c.commerce,hasForms:a&&c.service,hasBlog:!!i.blog&&c.service,offersCommerce:c.commerce,offersService:c.service},...g,...q(g.resolve),lock:i.lock,...P,site:f?()=>i.site.get(o):void 0,siteLiveState:h?()=>h.liveState(o):void 0,siteVersions:ae(h,o),updateSite:f&&w?B=>w(B,o):void 0,previewHref:i.preview?B=>i.preview.href(B):void 0}}function Fe(n,i=$(),c=x()){const d=z(i),a=i.templates,o=a?a.pages(n):{list:()=>Promise.reject(new Error(j)),load:()=>Promise.reject(new Error(j)),save:()=>Promise.reject(new Error(j))};return{capabilities:{canPublish:!1,hasSiteSettings:!1,hasSiteTheme:!1,placeholderFrames:!0,mediaEditing:!1,pageCreationInAdminForm:!o.create,canDeletePagesInline:!!o.remove,hasEditLock:!1,hasEditGuard:!1,hasPinnedChrome:d&&c.commerce&&c.service,editsPinnedInPlace:!1,explainsSiteSettings:d,hasSiteRecord:!1,canEditSiteRecord:!1,hasPreviewLink:!1,hasCatalog:d&&c.commerce,hasForms:d&&c.service,hasBlog:!!i.blog&&c.service,offersCommerce:c.commerce,offersService:c.service},...N(o,void 0),...q(N(o,void 0).resolve),publish:void 0,templateName:a?()=>a.get(n).then(f=>f.name):void 0}}function q(n){return{resolve:i=>(Y(null),W(null),n(i))}}const j="This editor's backend has no website templates.";export{ke as makeSitePageAdapter,Fe as makeTemplatePageAdapter};
1
+ "use client";import{SITE_FOOTER_SLUG as H}from"../../format/lib/content/footer.js";import{offeredSetsOf as x}from"./editor-blocks.js";import{isBackendError as F}from"efficient-easel/screen/lib/backend-error";import{isEfficientBackend as z}from"efficient-easel/screen/lib/session";import{noteLoaded as M,notePublished as _,noteSaved as T,pageLiveState as Z}from"./page-live-state.js";import{noteSiteLiveState as ee,refreshSiteLiveState as A}from"./site-live-state.js";import{say as te}from"../../format/lib/editor-words.js";import{sendSiteWrites as ne}from"../../format/lib/site-writes.js";import{isPopupPageLayout as oe}from"../../format/lib/popup/new-popup.js";import{spliceChrome as ie,splitChrome as G}from"./pinned-chrome-doc.js";import{references as se,sectionNodeOf as re,spliceShared as le,splitShared as ae}from"../../format/lib/shared-section-docs.js";import{setActiveSharedSections as W}from"../../format/lib/shared-sections-active.js";import{setActivePinnedChrome as Y}from"../../format/lib/pinned-chrome-lock.js";import{backendOf as $}from"./website-session.js";function I(n){return!!(n?.publish&&n.liveState)}function ce(n,s){if(!I(n))return;const{versions:c,nameVersion:d,restoreVersion:a,previewVersion:o}=n;if(!(!c||!d||!a||!o))return{list:()=>c.call(n,s),name:(f,w)=>d.call(n,f,w,s),restore:(f,w)=>a.call(n,f,w??{},s),preview:f=>o.call(n,f,s)}}function de(n,s){return async(c,d)=>{try{await ne()}catch(o){throw new Error(te("A change waiting to go live could not be saved."),{cause:o})}return(await n.publish(s)).state==="live"?ee({state:"live",changes:[]}):A(0),{version:d??null}}}function N(n,s,c){const d=s?{siteId:s}:void 0;return{resolve:a=>n.load({slug:a,...d}).then(o=>(o&&M(o.id,o.live),o)),saveLayout:(a,o,f,w)=>n.save(a,{layout:o},{version:f,clientId:w??""}).then(v=>(T(a,v.live),A(),v)),rereadVersion:n.version?a=>n.version(a):void 0,publish:I(c)?de(c,d):n.publish?(a,o)=>n.publish(a,o?{version:o}:void 0).then(f=>(_(a,f.live),f)):void 0,listPages:()=>n.list(d),createPage:n.create?a=>n.create({...a,...d}):void 0,deletePage:n.remove?(a,o)=>n.remove(a,o):void 0}}function ue(n,s,c,d,a=!1){let o=null;const f=new Set;let w=!1,v=new Map,y=new Map,h=new Map,g=new Map,P={docId:null,lockHolder:null,conflict:null,saveFailed:!1,unpublished:!1,loadFailed:!1,sections:[]};const B=new Set,D=()=>{if(!o)return!1;const e=Z(o.id);return e==="changed"||e==="never"||e===void 0&&w},S=e=>{P={...P,...e,docId:o?.id??null,unpublished:D(),sections:[...h.values()]};for(const t of B)t()},k=(e,t,i)=>{t?h.set(e,{section:e,title:v.get(e)?.title??"",problem:t,holder:i}):h.delete(e)},C=e=>e&&typeof e=="object"&&!Array.isArray(e)?e:{},L=e=>f.has(e),R=()=>new Map([...v].map(([e,t])=>[e,t.layout])),V=()=>`SharedSection-${typeof crypto<"u"&&crypto.randomUUID?crypto.randomUUID():Math.random().toString(36).slice(2)}`,J=(e,t,i,r)=>{const l=C(t);v.set(e,{layout:l,version:i,savedJson:JSON.stringify(l),title:r})},U={state:()=>P,subscribe:e=>(B.add(e),()=>{B.delete(e)})},K={sectionOf:e=>y.get(e)?.section??null,heldElsewhere:e=>{const t=y.get(e)?.section;return!!(t&&h.get(t)?.problem==="lock")},adopt:(e,t)=>{J(t.id,t.layout,t.layout_updated_at,t.title),y.set(e,{section:t.id,refId:V()}),g.set(t.id,t.used_on),S({})},place:e=>{if([...y.values()].some(r=>r.section===e.id))return null;const t=re(C(e.layout)),i=typeof t?.props?.id=="string"?t.props.id:null;return!t||!i||!t.type?null:(J(e.id,e.layout,e.layout_updated_at,e.title),y.set(i,{section:e.id,refId:V()}),g.set(e.id,e.used_on),t)},usedOn:e=>g.get(e)??null,learn:e=>{for(const t of e){g.set(t.id,t.used_on);const i=v.get(t.id);i&&(i.title=t.title);const r=h.get(t.id);r&&h.set(t.id,{...r,title:t.title})}S({})}},Q=async(e,t)=>{for(const[i,r]of e){const l=v.get(i),u=JSON.stringify(r);if(!(!l||u===l.savedJson||h.get(i)?.problem==="lock"))try{const m=await n.save(i,{layout:r},{version:l.version,clientId:t??""});T(i,m.live),l.layout=r,l.version=m.version,l.savedJson=u,k(i,null)}catch(m){F(m,"changed-elsewhere")?k(i,"conflict"):F(m,"lock-taken")?k(i,"lock",m.holder??void 0):k(i,"save")}}e.size&&A(),S({})};return{resolve:async e=>{if(Y(e===H?null:U),W(e===H?null:K),v=new Map,y=new Map,h=new Map,g=new Map,e===H)return c.resolve(e);let t=!1;const[i,r]=await Promise.all([c.resolve(e),n.load({slug:H,...s}).catch(()=>(t=!0,null))]);if(r&&!oe(i?.layout)){M(r.id,r.live);const p=C(r.layout);o={id:r.id,layout:p,version:r.version,savedJson:""}}else o=null;if(w=!1,!i)return S({conflict:null,saveFailed:!1,loadFailed:t}),i;const l=C(i.layout),u=se(l),m=await Promise.all(u.map(p=>n.load({id:p.section,...s}).catch(()=>null)));u.forEach((p,X)=>{const b=m[X];b?(M(b.id,b.live),J(p.section,b.layout,b.version,"")):(v.delete(p.section),h.set(p.section,{section:p.section,title:"",problem:"load"}))});const E=le(l,R());if(y=E.held,!o)return y.size&&f.add(i.id),S({conflict:null,saveFailed:!1,loadFailed:t}),y.size?{...i,layout:E.working}:i;const O=ie(E.working,o.layout);return o.savedJson=JSON.stringify(G(O,o.layout).chrome),f.add(i.id),S({conflict:null,saveFailed:!1,loadFailed:!1}),{...i,layout:O}},saveLayout:async(e,t,i,r)=>{if(!L(e))return c.saveLayout(e,t,i,r);const l=o,u=l?G(t,l.layout):{page:t,chrome:null},m=ae(u.page,y,R()),E=await c.saveLayout(e,m.page,i,r);if(await Q(m.docs,r),!l)return E;const O=JSON.stringify(u.chrome);if(!u.chrome||O===l.savedJson||P.lockHolder)return E;try{const p=await n.save(l.id,{layout:u.chrome},{version:l.version,clientId:r??""});T(l.id,p.live),A(),l.layout=u.chrome,l.version=p.version,l.savedJson=O,w=!0,S({conflict:null,saveFailed:!1})}catch(p){F(p,"changed-elsewhere")?S({conflict:p.conflict??{savedBy:"",savedByYou:!1,secondsAgo:0}}):F(p,"lock-taken")?S({lockHolder:p.holder??{name:"",secondsSinceSeen:0,secondsSinceHeld:0}}):S({saveFailed:!0})}return E},publish:c.publish?async(e,t)=>{const i=await c.publish(e,t),r=o;if(r&&L(e)&&!a&&n.publish&&D()&&!P.lockHolder){const l=await n.publish(r.id,r.version?{version:r.version}:void 0);_(r.id,l.live),l.version!==null&&(r.version=l.version),w=!1,S({})}if(L(e)&&!a&&n.publish)for(const[l,u]of v){if(h.get(l)?.problem==="lock")continue;const m=await n.publish(l,u.version?{version:u.version}:void 0);_(l,m.live),m.version!==null&&(u.version=m.version)}return i}:void 0,lock:d?{claim:async(e,t,i)=>{const r=await d.claim(e,t,i);if(!L(e))return r;const l=o;if(l)try{await d.claim(l.id,t,!1),P.lockHolder&&S({lockHolder:null})}catch(u){F(u,"lock-taken")&&S({lockHolder:u.holder??{name:"",secondsSinceSeen:0,secondsSinceHeld:0}})}for(const u of v.keys())try{await d.claim(u,t,!1),h.get(u)?.problem==="lock"&&k(u,null)}catch(m){F(m,"lock-taken")&&k(u,"lock",m.holder??void 0)}return v.size&&S({}),r},release:async(e,t)=>{if(await d.release(e,t),!L(e))return;const i=o;i&&!P.lockHolder&&await d.release(i.id,t).catch(()=>{});for(const r of v.keys())h.get(r)?.problem!=="lock"&&await d.release(r,t).catch(()=>{})}}:void 0,pinnedChrome:U}}function Le(n,s=$(),c=x(),d={}){const a=z(s),o=n?{siteId:n}:void 0,f=a?!!n:!0,w=s.site.update,v=a&&c.commerce&&c.service,y=!!d.editsPinnedInPlace&&v,h=I(s.site)?s.site:void 0,g=N(s.pages,n,h),P=y?ue(s.pages,o,g,s.lock,!!h):null;return{capabilities:{canPublish:!!h||!!s.pages.publish,hasSiteSettings:a,hasSiteTheme:!!s.theme,placeholderFrames:!1,mediaEditing:!0,pageCreationInAdminForm:!s.pages.create,canDeletePagesInline:!!s.pages.remove,hasEditLock:!!s.lock,hasEditGuard:!0,hasPinnedChrome:v,editsPinnedInPlace:y,explainsSiteSettings:!1,hasSiteRecord:f,canEditSiteRecord:f&&!!w,hasPreviewLink:a||!!s.preview,hasCatalog:a&&c.commerce,hasForms:a&&c.service,hasBlog:!!s.blog&&c.service,offersCommerce:c.commerce,offersService:c.service},...g,...q(g.resolve),lock:s.lock,...P,site:f?()=>s.site.get(o):void 0,siteLiveState:h?()=>h.liveState(o):void 0,siteVersions:ce(h,o),updateSite:f&&w?B=>w(B,o):void 0,previewHref:s.preview?B=>s.preview.href(B):void 0}}function Oe(n,s=$(),c=x()){const d=z(s),a=s.templates,o=a?a.pages(n):{list:()=>Promise.reject(new Error(j)),load:()=>Promise.reject(new Error(j)),save:()=>Promise.reject(new Error(j))};return{capabilities:{canPublish:!1,hasSiteSettings:!1,hasSiteTheme:!1,placeholderFrames:!0,mediaEditing:!1,pageCreationInAdminForm:!o.create,canDeletePagesInline:!!o.remove,hasEditLock:!1,hasEditGuard:!1,hasPinnedChrome:d&&c.commerce&&c.service,editsPinnedInPlace:!1,explainsSiteSettings:d,hasSiteRecord:!1,canEditSiteRecord:!1,hasPreviewLink:!1,hasCatalog:d&&c.commerce,hasForms:d&&c.service,hasBlog:!!s.blog&&c.service,offersCommerce:c.commerce,offersService:c.service},...N(o,void 0),...q(N(o,void 0).resolve),publish:void 0,templateName:a?()=>a.get(n).then(f=>f.name):void 0}}function q(n){return{resolve:s=>(Y(null),W(null),n(s))}}const j="This editor's backend has no website templates.";export{Le as makeSitePageAdapter,Oe as makeTemplatePageAdapter};
@@ -1 +1 @@
1
- import{group as r,plainText as e,text as a,withOffPage as m}from"../../../controls.js";import{BREADCRUMB_PH as l}from"../../../../../../render/lib/puck/blocks/general/Breadcrumb/render.js";const n={fields:{_gContent:r("Content"),items:{type:"array",label:"Crumbs",arrayFields:{label:e("Label"),href:m(e("Link"))},getItemSummary:t=>t?.label||"Crumb"},meta:a("Trailing note",l.meta)}};export{n as BreadcrumbFields};
1
+ import{group as r,plainText as e,text as a,withOffPage as m}from"../../../controls.js";import{BREADCRUMB_PH as l}from"../../../../../../format/lib/puck/blocks/general/Breadcrumb/meta.js";const n={fields:{_gContent:r("Content"),items:{type:"array",label:"Crumbs",arrayFields:{label:e("Label"),href:m(e("Link"))},getItemSummary:t=>t?.label||"Crumb"},meta:a("Trailing note",l.meta)}};export{n as BreadcrumbFields};
@@ -1 +1 @@
1
- import{jsx as o}from"react/jsx-runtime";import{ColumnsIcon as p,StylesIcon as a}from"efficient-easel/icons";import{copyText as s,group as i,plainText as c,plainTextarea as f,select as d,slider as C,text as S,textarea as u,withOffPage as w}from"../../../controls.js";import{SPLITTABLE_SECTIONS as F,headFieldsForPlacement as L,widthFieldsForParent as _}from"../../../../../../format/lib/sections/section-head-placement.js";import{SECTION_EYEBROW_LOOK_OPTIONS as I,eyebrowLookFor as y}from"../../../../../../format/lib/sections/section-eyebrow-look.js";import{WIDTH_ROW_KEYS as O}from"../../shared-fields.js";import{CARDS_PH as m}from"../../../../../../render/lib/puck/blocks/general/Cards/render.js";const R={fields:{_gContent:i("Content"),eyebrow:S("Eyebrow",m.eyebrow),eyebrowLook:d("Eyebrow style",o(a,{}),[...I],y("Cards")),title:u("Heading",m.title),items:{type:"array",label:"Cards",arrayFields:{title:s("Card title"),body:f("Card body")},defaultItemProps:{title:"",body:""},getItemSummary:e=>e?.title||e?.body||"Card"},_gStyle:i("Style"),cardStyle:d("Card style",o(a,{}),[{label:"Cards",value:"cards"},{label:"Label only",value:"label-only"}],"cards"),columns:C("Columns",o(p,{}),2,4,1,3)},resolveFields:(e,{fields:n,parent:b})=>{const r=L(_(n,b,O),e.props.headPlacement,F.Cards.headRows);if(e.props.cardStyle!=="label-only")return r;const t=r.items,l=r.eyebrowLook;return{...r,...t?{items:{...t,arrayFields:{title:s("Feature label"),href:w(c("Link"))}}}:{},...l?{eyebrowLook:{...l,fallback:y("KeyFeatures")}}:{}}}};export{R as CardsFields};
1
+ import{jsx as o}from"react/jsx-runtime";import{ColumnsIcon as p,StylesIcon as a}from"efficient-easel/icons";import{copyText as s,group as i,plainText as c,plainTextarea as f,select as d,slider as C,text as S,textarea as u,withOffPage as w}from"../../../controls.js";import{SPLITTABLE_SECTIONS as F,headFieldsForPlacement as L,widthFieldsForParent as _}from"../../../../../../format/lib/sections/section-head-placement.js";import{SECTION_EYEBROW_LOOK_OPTIONS as I,eyebrowLookFor as y}from"../../../../../../format/lib/sections/section-eyebrow-look.js";import{WIDTH_ROW_KEYS as O}from"../../shared-fields.js";import{CARDS_PH as m}from"../../../../../../format/lib/puck/blocks/general/Cards/meta.js";const R={fields:{_gContent:i("Content"),eyebrow:S("Eyebrow",m.eyebrow),eyebrowLook:d("Eyebrow style",o(a,{}),[...I],y("Cards")),title:u("Heading",m.title),items:{type:"array",label:"Cards",arrayFields:{title:s("Card title"),body:f("Card body")},defaultItemProps:{title:"",body:""},getItemSummary:e=>e?.title||e?.body||"Card"},_gStyle:i("Style"),cardStyle:d("Card style",o(a,{}),[{label:"Cards",value:"cards"},{label:"Label only",value:"label-only"}],"cards"),columns:C("Columns",o(p,{}),2,4,1,3)},resolveFields:(e,{fields:n,parent:b})=>{const r=L(_(n,b,O),e.props.headPlacement,F.Cards.headRows);if(e.props.cardStyle!=="label-only")return r;const t=r.items,l=r.eyebrowLook;return{...r,...t?{items:{...t,arrayFields:{title:s("Feature label"),href:w(c("Link"))}}}:{},...l?{eyebrowLook:{...l,fallback:y("KeyFeatures")}}:{}}}};export{R as CardsFields};
@@ -1 +1 @@
1
- import{jsx as r}from"react/jsx-runtime";import{StylesIcon as i}from"efficient-easel/icons";import{copyText as n,group as t,plainText as s,select as u,text as e,textarea as a,withPanelOnly as p}from"../../../controls.js";import{CHART_PH as o}from"../../../../../../render/lib/puck/blocks/general/Chart/render.js";const x={fields:{_gContent:t("Content"),eyebrow:e("Chip label",o.eyebrow),title:a("Heading",o.title),body:a("Body",""),items:{type:"array",label:"Data points",arrayFields:{label:n("Label"),value:s("Value")},defaultItemProps:{label:"",value:""},getItemSummary:l=>[l?.label,l?.value].filter(Boolean).join(" · ")||"Point"},caption:e("Caption","Illustrative example"),_gStyle:t("Style"),chartStyle:u("Chart style",r(i,{}),[{label:"Bars (comparison / funnel)",value:"bars"},{label:"Line (trend)",value:"line"},{label:"Donut (split of a whole)",value:"donut"}],"bars"),valueSuffix:p(e("Value suffix","%"))}};export{x as ChartFields};
1
+ import{jsx as r}from"react/jsx-runtime";import{StylesIcon as i}from"efficient-easel/icons";import{copyText as n,group as t,plainText as s,select as u,text as e,textarea as a,withPanelOnly as p}from"../../../controls.js";import{CHART_PH as o}from"../../../../../../format/lib/puck/blocks/general/Chart/meta.js";const x={fields:{_gContent:t("Content"),eyebrow:e("Chip label",o.eyebrow),title:a("Heading",o.title),body:a("Body",""),items:{type:"array",label:"Data points",arrayFields:{label:n("Label"),value:s("Value")},defaultItemProps:{label:"",value:""},getItemSummary:l=>[l?.label,l?.value].filter(Boolean).join(" · ")||"Point"},caption:e("Caption","Illustrative example"),_gStyle:t("Style"),chartStyle:u("Chart style",r(i,{}),[{label:"Bars (comparison / funnel)",value:"bars"},{label:"Line (trend)",value:"line"},{label:"Donut (split of a whole)",value:"donut"}],"bars"),valueSuffix:p(e("Value suffix","%"))}};export{x as ChartFields};
@@ -1 +1 @@
1
- import{jsx as t}from"react/jsx-runtime";import{ClockIcon as n,TagIcon as i}from"efficient-easel/icons";import{dateTime as r,text as o,toggle as s,withPanelOnly as m}from"../../../controls.js";import{COUNTDOWN_DEFAULTS as e}from"../../../../../../render/lib/puck/blocks/general/Countdown/render.js";const T={fields:{title:o("Heading",e.title),zeroText:m(o("At zero",e.zeroText)),endsAt:r("Ends",t(n,{}),"In your own time zone. Every visitor counts down to the same moment."),showUnits:s("Unit labels",!0,t(i,{}))}};export{T as CountdownFields};
1
+ import{jsx as t}from"react/jsx-runtime";import{ClockIcon as n,TagIcon as i}from"efficient-easel/icons";import{dateTime as r,text as o,toggle as s,withPanelOnly as m}from"../../../controls.js";import{COUNTDOWN_DEFAULTS as e}from"../../../../../../format/lib/puck/blocks/general/Countdown/meta.js";const T={fields:{title:o("Heading",e.title),zeroText:m(o("At zero",e.zeroText)),endsAt:r("Ends",t(n,{}),"In your own time zone. Every visitor counts down to the same moment."),showUnits:s("Unit labels",!0,t(i,{}))}};export{T as CountdownFields};
@@ -1 +1 @@
1
- import{copyText as t,group as o,plainTextarea as n,text as a}from"../../../controls.js";import{DOC_BODY_PH as l}from"../../../../../../render/lib/puck/blocks/general/DocBody/render.js";const s={fields:{_gContent:o("Contents"),tocTitle:a("Contents heading",l.toc),_gSections:o("Sections"),sections:{type:"array",label:"Sections",arrayFields:{label:t("Contents label"),heading:t("Title"),body:n("Body")},defaultItemProps:{label:"",heading:"",body:""},getItemSummary:e=>e?.label||e?.heading||"Section"}}};export{s as DocBodyFields};
1
+ import{copyText as t,group as o,plainTextarea as n,text as a}from"../../../controls.js";import{DOC_BODY_PH as l}from"../../../../../../format/lib/puck/blocks/general/DocBody/meta.js";const s={fields:{_gContent:o("Contents"),tocTitle:a("Contents heading",l.toc),_gSections:o("Sections"),sections:{type:"array",label:"Sections",arrayFields:{label:t("Contents label"),heading:t("Title"),body:n("Body")},defaultItemProps:{label:"",heading:"",body:""},getItemSummary:e=>e?.label||e?.heading||"Section"}}};export{s as DocBodyFields};
@@ -1 +1 @@
1
- import{copyText as t,group as a,text as o,textarea as l}from"../../../controls.js";import{DOC_MASTHEAD_PH as e}from"../../../../../../render/lib/puck/blocks/general/DocMasthead/render.js";const i={fields:{_gContent:a("Content"),eyebrow:o("Eyebrow",e.eyebrow),title:l("Heading",e.title),deck:l("Deck / standfirst",e.deck),_gMeta:a("Metadata"),meta:{type:"array",label:"Metadata rows",arrayFields:{label:t("Label"),value:t("Value")},defaultItemProps:{label:"Label",value:""},getItemSummary:r=>r?.label||"Row"}}};export{i as DocMastheadFields};
1
+ import{copyText as t,group as a,text as o,textarea as l}from"../../../controls.js";import{DOC_MASTHEAD_PH as e}from"../../../../../../format/lib/puck/blocks/general/DocMasthead/meta.js";const i={fields:{_gContent:a("Content"),eyebrow:o("Eyebrow",e.eyebrow),title:l("Heading",e.title),deck:l("Deck / standfirst",e.deck),_gMeta:a("Metadata"),meta:{type:"array",label:"Metadata rows",arrayFields:{label:t("Label"),value:t("Value")},defaultItemProps:{label:"Label",value:""},getItemSummary:r=>r?.label||"Row"}}};export{i as DocMastheadFields};
@@ -1 +1 @@
1
- import{copyText as e,plainTextarea as l,withScaffold as r}from"../../../controls.js";import{DOC_META_SCAFFOLD_CARDS as d}from"../../../../../../render/lib/puck/blocks/general/DocMetaCards/render.js";const s={fields:{cards:r({type:"array",label:"Cards",arrayFields:{label:e("Label"),value:e("Value"),desc:l("Body")},defaultItemProps:{label:"Label",value:"",desc:""},getItemSummary:a=>a?.label||a?.value||"Card"},d)}};export{s as DocMetaCardsFields};
1
+ import{copyText as e,plainTextarea as l,withScaffold as r}from"../../../controls.js";import{DOC_META_SCAFFOLD_CARDS as d}from"../../../../../../format/lib/puck/blocks/general/DocMetaCards/meta.js";const s={fields:{cards:r({type:"array",label:"Cards",arrayFields:{label:e("Label"),value:e("Value"),desc:l("Body")},defaultItemProps:{label:"Label",value:"",desc:""},getItemSummary:a=>a?.label||a?.value||"Card"},d)}};export{s as DocMetaCardsFields};
@@ -1 +1 @@
1
- import{jsx as t}from"react/jsx-runtime";import{PageIcon as r}from"efficient-easel/icons";import{group as o,linkField as m,plainText as b,text as e,toggle as s}from"../../../controls.js";import{DOC_TABS_PH as a}from"../../../../../../render/lib/puck/blocks/general/DocTabs/render.js";const u={fields:{tabs:{type:"array",label:"Tabs",arrayFields:{label:b("Tab label"),href:m("Links to"),current:s("Current page",!1,t(r,{}))},defaultItemProps:{label:"Tab",href:"",current:!1},getItemSummary:l=>l?.label||"Tab"},_gNote:o("Trailing note"),metaLabel:e("Note label",a.metaLabel),metaValue:e("Note value",a.metaValue)}};export{u as DocTabsFields};
1
+ import{jsx as t}from"react/jsx-runtime";import{PageIcon as r}from"efficient-easel/icons";import{group as o,linkField as m,plainText as b,text as e,toggle as s}from"../../../controls.js";import{DOC_TABS_PH as a}from"../../../../../../format/lib/puck/blocks/general/DocTabs/meta.js";const u={fields:{tabs:{type:"array",label:"Tabs",arrayFields:{label:b("Tab label"),href:m("Links to"),current:s("Current page",!1,t(r,{}))},defaultItemProps:{label:"Tab",href:"",current:!1},getItemSummary:l=>l?.label||"Tab"},_gNote:o("Trailing note"),metaLabel:e("Note label",a.metaLabel),metaValue:e("Note value",a.metaValue)}};export{u as DocTabsFields};
@@ -1 +1 @@
1
- import{jsx as s}from"react/jsx-runtime";import{ChevronIcon as a}from"efficient-easel/icons";import{copyText as l,group as t,linkField as m,plainTextarea as u,text as r,textarea as p,toggle as d}from"../../../controls.js";import{SPLITTABLE_SECTIONS as f,headFieldsForPlacement as F,widthFieldsForParent as g}from"../../../../../../format/lib/sections/section-head-placement.js";import{WIDTH_ROW_KEYS as x}from"../../shared-fields.js";import{FAQ_PH as o}from"../../../../../../render/lib/puck/blocks/general/FAQ/render.js";const k={fields:{_gContent:t("Content"),num:r("Number",o.num),title:p("Heading",o.title),linkText:r("Button",o.link),linkHref:m("Link"),_gQuestions:t("Questions"),items:{type:"array",label:"Questions",arrayFields:{question:l("Question"),answer:u("Answer")},getItemSummary:e=>e.question||"Question"},_gLayout:t("Layout"),defaultOpen:d("Open first answer",!0,s(a,{}))},resolveFields:(e,{fields:i,parent:n})=>F(g(i,n,x),e.props.headPlacement,f.FAQ.headRows)};export{k as FAQFields};
1
+ import{jsx as s}from"react/jsx-runtime";import{ChevronIcon as a}from"efficient-easel/icons";import{copyText as l,group as t,linkField as m,plainTextarea as u,text as r,textarea as p,toggle as d}from"../../../controls.js";import{SPLITTABLE_SECTIONS as f,headFieldsForPlacement as F,widthFieldsForParent as g}from"../../../../../../format/lib/sections/section-head-placement.js";import{WIDTH_ROW_KEYS as x}from"../../shared-fields.js";import{FAQ_PH as o}from"../../../../../../format/lib/puck/blocks/general/FAQ/meta.js";const k={fields:{_gContent:t("Content"),num:r("Number",o.num),title:p("Heading",o.title),linkText:r("Button",o.link),linkHref:m("Link"),_gQuestions:t("Questions"),items:{type:"array",label:"Questions",arrayFields:{question:l("Question"),answer:u("Answer")},getItemSummary:e=>e.question||"Question"},_gLayout:t("Layout"),defaultOpen:d("Open first answer",!0,s(a,{}))},resolveFields:(e,{fields:i,parent:n})=>F(g(i,n,x),e.props.headPlacement,f.FAQ.headRows)};export{k as FAQFields};
@@ -1 +1 @@
1
- import o from"../../../../../components/BlogPostSource.js";import{BOUND_TO_POST as i,BOUND_TO_POST_NOTE as r,NOT_BOUND_TO_POST as d,group as g,linkField as m,panelNote as n,sourceField as O,text as t,textarea as a,upload as l}from"../../../controls.js";import{withRowsShownWhen as _,withShowWhen as D}from"../../../../../../render/lib/puck/show-when.js";import{FEATUREDCOVER_PH as e}from"../../../../../../render/lib/puck/blocks/general/FeaturedCover/render.js";const T=["image","imageDate","date","title","dek","ctaHref"],B={fields:_({source:O(o),_nBound:D(n(r),i),image:l("Cover image","image/*"),badge:t("Badge",e.badge),imageDate:t("Image date",e.imageDate),_gContent:g("Content"),category:t("Category",e.category),readLabel:t("Read time",e.readLabel),date:t("Date",e.date),title:a("Heading",e.title),dek:a("Dek",e.dek),ctaText:t("Button",e.ctaText),ctaHref:m("Link")},T,d)};export{B as FeaturedCoverFields};
1
+ import o from"../../../../../components/BlogPostSource.js";import{BOUND_TO_POST as i,BOUND_TO_POST_NOTE as r,NOT_BOUND_TO_POST as d,group as g,linkField as m,panelNote as n,sourceField as O,text as t,textarea as a,upload as l}from"../../../controls.js";import{withRowsShownWhen as _,withShowWhen as D}from"../../../../../../render/lib/puck/show-when.js";import{FEATUREDCOVER_PH as e}from"../../../../../../format/lib/puck/blocks/general/FeaturedCover/meta.js";const T=["image","imageDate","date","title","dek","ctaHref"],B={fields:_({source:O(o),_nBound:D(n(r),i),image:l("Cover image","image/*"),badge:t("Badge",e.badge),imageDate:t("Image date",e.imageDate),_gContent:g("Content"),category:t("Category",e.category),readLabel:t("Read time",e.readLabel),date:t("Date",e.date),title:a("Heading",e.title),dek:a("Dek",e.dek),ctaText:t("Button",e.ctaText),ctaHref:m("Link")},T,d)};export{B as FeaturedCoverFields};
@@ -1 +1 @@
1
- import{jsx as s}from"react/jsx-runtime";import{BOX_CARD_PAD as l,BOX_DARKEN as t,BOX_DARKEN_STYLES as p,isBackgroundBox as b}from"../../../../../../format/lib/content/box-background.js";import{containerDirectionPoints as u}from"../../../../../../format/lib/content/container-direction.js";import{deviceField as c}from"efficient-easel/screen/lib/puck/device-fields";import{OpacityIcon as k,StylesIcon as x}from"efficient-easel/icons";import{boxAlignField as F,boxBlockSpacingField as y,boxJustifyField as S,boxPhoneRowField as _,boxShareField as B,boxWrapField as O,gapField as h,group as r,placementField as D,plainText as I,select as R,sidesPaddingFields as d,slider as w,upload as m,withPanelOnly as A}from"../../../controls.js";import{withRowRules as P}from"../../../../../../render/lib/puck/show-when.js";import{FlexSlots as j}from"../../../../../../render/lib/puck/blocks/general/Flex/render.js";const C={field:"bgImage",set:!0},H={fields:P({_gContent:r("Content"),content:j.content,_gLayout:r("Layout"),direction:{type:"radio",options:u("Flex")},label:A(I("Tab name")),gap:h("Flex"),justify:S(),align:F(),wrap:O(),share:B(),phoneRow:_(),blockSpacing:y(),_gBackground:r("Background image"),bgImage:c("desktop",m("Image","image/*")),bgImagePhone:c("mobile",m("Image","image/*")),darken:w("Darken",s(k,{}),t.min,t.max,t.step,t.fallback,t.unit),darkenStyle:R("Darken style",s(x,{}),p,p[0].value),placement:D("Content position",{stacking:!1})},[[["darken","darkenStyle","placement"],C]]),resolveFields:(i,{fields:e})=>{const o=i.props;if(b(o.bgImage)){const a=d({fallback:{top:l.desktop,bottom:l.desktop,left:l.side,right:l.side}});return g(e,a)}return i.props.padV2!==!0?g(e,d({fallback:{top:24,bottom:24}})):e}};function g(i,e){const o={};let n=!1;for(const[a,f]of Object.entries(i)){if(a in e){n||Object.assign(o,e),n=!0;continue}o[a]=f}return n||Object.assign(o,e),o}export{H as FlexFields};
1
+ import{jsx as s}from"react/jsx-runtime";import{BOX_CARD_PAD as l,BOX_DARKEN as t,BOX_DARKEN_STYLES as p,isBackgroundBox as b}from"../../../../../../format/lib/content/box-background.js";import{containerDirectionPoints as u}from"../../../../../../format/lib/content/container-direction.js";import{deviceField as c}from"efficient-easel/screen/lib/puck/device-fields";import{OpacityIcon as k,StylesIcon as x}from"efficient-easel/icons";import{boxAlignField as F,boxBlockSpacingField as y,boxJustifyField as S,boxPhoneRowField as _,boxShareField as B,boxWrapField as O,gapField as h,group as r,placementField as D,plainText as I,select as R,sidesPaddingFields as d,slider as w,upload as m,withPanelOnly as A}from"../../../controls.js";import{withRowRules as P}from"../../../../../../render/lib/puck/show-when.js";import{FlexSlots as j}from"../../../../../../format/lib/puck/blocks/general/Flex/meta.js";const C={field:"bgImage",set:!0},H={fields:P({_gContent:r("Content"),content:j.content,_gLayout:r("Layout"),direction:{type:"radio",options:u("Flex")},label:A(I("Tab name")),gap:h("Flex"),justify:S(),align:F(),wrap:O(),share:B(),phoneRow:_(),blockSpacing:y(),_gBackground:r("Background image"),bgImage:c("desktop",m("Image","image/*")),bgImagePhone:c("mobile",m("Image","image/*")),darken:w("Darken",s(k,{}),t.min,t.max,t.step,t.fallback,t.unit),darkenStyle:R("Darken style",s(x,{}),p,p[0].value),placement:D("Content position",{stacking:!1})},[[["darken","darkenStyle","placement"],C]]),resolveFields:(i,{fields:e})=>{const o=i.props;if(b(o.bgImage)){const a=d({fallback:{top:l.desktop,bottom:l.desktop,left:l.side,right:l.side}});return g(e,a)}return i.props.padV2!==!0?g(e,d({fallback:{top:24,bottom:24}})):e}};function g(i,e){const o={};let n=!1;for(const[a,f]of Object.entries(i)){if(a in e){n||Object.assign(o,e),n=!0;continue}o[a]=f}return n||Object.assign(o,e),o}export{H as FlexFields};
@@ -1 +1 @@
1
- import{jsx as i}from"react/jsx-runtime";import{FOOTPRINT_DEFAULTS as _}from"../../../../../../format/lib/content/footprint.js";import{HeadquartersIcon as L,LayoutIcon as E,LocationIcon as I,SearchIcon as P,StoreIcon as k,ThemeIcon as C}from"efficient-easel/icons";import{CoordsField as D,copyText as x,group as l,plainText as a,section as N,segmented as u,sourceField as A,text as f,textarea as S,toggle as d}from"../../../controls.js";import{withShowWhen as n}from"../../../../../../render/lib/puck/show-when.js";import{needsGeocodeWork as H,resolveGeocodeRows as W}from"../../../geocode-resolve.js";import{SPLITTABLE_SECTIONS as B,headFieldsForPlacement as M,widthFieldsForParent as U}from"../../../../../../format/lib/sections/section-head-placement.js";import{innerSpacingFields as j,WIDTH_ROW_KEYS as q}from"../../shared-fields.js";import{BLOCK_SOURCE_PROP as g,blockSources as z,blockSourcesRevision as w}from"../../../../../../format/lib/content/block-sources.js";import{FOOTPRINT_PH as m}from"../../../../../../render/lib/puck/blocks/general/Footprint/render.js";const G={field:"source",is:"typed",default:"typed"},c={field:"source",is:"dealers",default:"typed"},b={all:[c,{field:"search",is:!0,default:!1}]},y=[{label:"Typed in",value:"typed"},{label:"Dealers",value:"dealers"}],K=new Set(y.map(e=>e.value)),R=e=>u("Source",i(k,{}),e,"typed");function v(e){const t=typeof e=="string"?e.trim():"";return t&&!K.has(t)&&/^[a-z][a-z0-9]*(-[a-z0-9]+)*$/.test(t)?t:""}const h=new Map;let F=-1;function Y(e){const t=z("Footprint"),o=e&&!t.some(s=>s.key===e)?e:"";if(!t.length&&!o)return null;F!==w()&&(F=w(),h.clear());let r=h.get(o);return r||(r=R([...y,...t.map(s=>({label:s.label,value:s.key})),...o?[{label:o,value:o}]:[]]),h.set(o,r)),r}const T=new WeakMap;function Q(e,t){const o=Y(t);if(!o)return e;let r=T.get(e);r||T.set(e,r=new Map);let s=r.get(o);return s||(s={...e,source:o},r.set(o,s)),s}const ie={fields:{_gContent:l("Section"),sectionNumber:f("Section number",m.sectionNumber),heading:S("Heading",m.heading),tagline:S("Body",m.tagline),_gOffices:l("Offices"),source:R(y),offices:n({type:"array",label:"Offices",arrayFields:{role:a("Role"),city:a("City"),country:a("Region · country"),address:x("Address"),group:a("Group"),hq:d("HQ",!1,i(L,{})),geocode:A(D,{label:"Coordinates"})},defaultItemProps:{role:"Sales & Distribution",city:"City",country:"Country",address:"",group:"",hq:!1,lat:0,lng:0},getItemSummary:e=>e?.city||"Office"},G),mapTheme:u("Map theme",i(C,{}),[{label:"Auto",value:"auto"},{label:"Dark",value:"dark"},{label:"Light",value:"light"}],_.mapTheme),_gSearch:l("Search"),search:n(d("Show",!1,i(P,{})),c),searchHint:n(f("Hint","Type a postcode or address"),b),noMatchText:n(f("No match","No place found. Try another postcode."),b),_gList:l("List"),listPosition:n(u("Position",i(E,{}),[{label:"Left",value:"left"},{label:"Right",value:"right"},{label:"Below",value:"below"}],"below"),c),showDistance:n(d("Distance",!0,i(I,{})),c),_dLayout:N("Layout"),...j("Footprint")},resolveData:async e=>{const t=v(e.props.source);(e.props[g]??"")!==t&&(e={...e,props:{...e.props,[g]:t}});const o=e.props,r=o.offices??[];if(!H(r))return e;const s=await W(r,p=>[p.address,p.city,p.country].map(O=>String(O??"").replace(/\*/g,"").trim()).filter(Boolean).join(", "));return{...e,props:{...o,offices:s}}},resolveFields:(e,{fields:t,parent:o})=>M(U(Q(t,v(e.props.source)),o,q),e.props.headPlacement,B.Footprint.headRows)};export{ie as FootprintFields,v as footprintBlockSource};
1
+ import{jsx as i}from"react/jsx-runtime";import{FOOTPRINT_DEFAULTS as _}from"../../../../../../format/lib/content/footprint.js";import{HeadquartersIcon as L,LayoutIcon as E,LocationIcon as I,SearchIcon as P,StoreIcon as k,ThemeIcon as C}from"efficient-easel/icons";import{CoordsField as D,copyText as x,group as l,plainText as a,section as N,segmented as u,sourceField as A,text as f,textarea as S,toggle as d}from"../../../controls.js";import{withShowWhen as n}from"../../../../../../render/lib/puck/show-when.js";import{needsGeocodeWork as H,resolveGeocodeRows as W}from"../../../geocode-resolve.js";import{SPLITTABLE_SECTIONS as B,headFieldsForPlacement as M,widthFieldsForParent as U}from"../../../../../../format/lib/sections/section-head-placement.js";import{innerSpacingFields as j,WIDTH_ROW_KEYS as q}from"../../shared-fields.js";import{BLOCK_SOURCE_PROP as g,blockSources as z,blockSourcesRevision as w}from"../../../../../../format/lib/content/block-sources.js";import{FOOTPRINT_PH as m}from"../../../../../../format/lib/puck/blocks/general/Footprint/meta.js";const G={field:"source",is:"typed",default:"typed"},c={field:"source",is:"dealers",default:"typed"},b={all:[c,{field:"search",is:!0,default:!1}]},y=[{label:"Typed in",value:"typed"},{label:"Dealers",value:"dealers"}],K=new Set(y.map(e=>e.value)),R=e=>u("Source",i(k,{}),e,"typed");function v(e){const t=typeof e=="string"?e.trim():"";return t&&!K.has(t)&&/^[a-z][a-z0-9]*(-[a-z0-9]+)*$/.test(t)?t:""}const h=new Map;let F=-1;function Y(e){const t=z("Footprint"),o=e&&!t.some(s=>s.key===e)?e:"";if(!t.length&&!o)return null;F!==w()&&(F=w(),h.clear());let r=h.get(o);return r||(r=R([...y,...t.map(s=>({label:s.label,value:s.key})),...o?[{label:o,value:o}]:[]]),h.set(o,r)),r}const T=new WeakMap;function Q(e,t){const o=Y(t);if(!o)return e;let r=T.get(e);r||T.set(e,r=new Map);let s=r.get(o);return s||(s={...e,source:o},r.set(o,s)),s}const ie={fields:{_gContent:l("Section"),sectionNumber:f("Section number",m.sectionNumber),heading:S("Heading",m.heading),tagline:S("Body",m.tagline),_gOffices:l("Offices"),source:R(y),offices:n({type:"array",label:"Offices",arrayFields:{role:a("Role"),city:a("City"),country:a("Region · country"),address:x("Address"),group:a("Group"),hq:d("HQ",!1,i(L,{})),geocode:A(D,{label:"Coordinates"})},defaultItemProps:{role:"Sales & Distribution",city:"City",country:"Country",address:"",group:"",hq:!1,lat:0,lng:0},getItemSummary:e=>e?.city||"Office"},G),mapTheme:u("Map theme",i(C,{}),[{label:"Auto",value:"auto"},{label:"Dark",value:"dark"},{label:"Light",value:"light"}],_.mapTheme),_gSearch:l("Search"),search:n(d("Show",!1,i(P,{})),c),searchHint:n(f("Hint","Type a postcode or address"),b),noMatchText:n(f("No match","No place found. Try another postcode."),b),_gList:l("List"),listPosition:n(u("Position",i(E,{}),[{label:"Left",value:"left"},{label:"Right",value:"right"},{label:"Below",value:"below"}],"below"),c),showDistance:n(d("Distance",!0,i(I,{})),c),_dLayout:N("Layout"),...j("Footprint")},resolveData:async e=>{const t=v(e.props.source);(e.props[g]??"")!==t&&(e={...e,props:{...e.props,[g]:t}});const o=e.props,r=o.offices??[];if(!H(r))return e;const s=await W(r,p=>[p.address,p.city,p.country].map(O=>String(O??"").replace(/\*/g,"").trim()).filter(Boolean).join(", "));return{...e,props:{...o,offices:s}}},resolveFields:(e,{fields:t,parent:o})=>M(U(Q(t,v(e.props.source)),o,q),e.props.headPlacement,B.Footprint.headRows)};export{ie as FootprintFields,v as footprintBlockSource};
@@ -1 +1 @@
1
- import{jsx as o}from"react/jsx-runtime";import{GRID_COLUMNS_FALLBACK as r,GRID_MAX_COLUMNS as i,GRID_MOBILE_MAX_COLUMNS as s,GRID_MOBILE_MIN_COLUMNS as m}from"../../../../../../format/lib/content/grid-span.js";import{ColumnsIcon as t,PhoneIcon as l}from"efficient-easel/icons";import{gapField as _,slider as n}from"../../../controls.js";import{GridSlots as e}from"../../../../../../render/lib/puck/blocks/general/Grid/render.js";const d={fields:{columns:n("Columns",o(t,{}),1,i,1,r),mobileColumns:n("Columns on phone",o(l,{}),m,s,1,m),gap:_("Grid"),content:e.content}};export{d as GridFields};
1
+ import{jsx as o}from"react/jsx-runtime";import{GRID_COLUMNS_FALLBACK as r,GRID_MAX_COLUMNS as i,GRID_MOBILE_MAX_COLUMNS as s,GRID_MOBILE_MIN_COLUMNS as m}from"../../../../../../format/lib/content/grid-span.js";import{ColumnsIcon as t,PhoneIcon as l}from"efficient-easel/icons";import{gapField as _,slider as n}from"../../../controls.js";import{GridSlots as e}from"../../../../../../format/lib/puck/blocks/general/Grid/meta.js";const d={fields:{columns:n("Columns",o(t,{}),1,i,1,r),mobileColumns:n("Columns on phone",o(l,{}),m,s,1,m),gap:_("Grid"),content:e.content}};export{d as GridFields};
@@ -1 +1 @@
1
- import{jsx as e}from"react/jsx-runtime";import{REEL_PLACEMENT_DEFAULT as S,REEL_SHAPE_DEFAULT as p,HERO_REEL_SHAPES as d,REEL_SHAPE_LABELS as A,REEL_SHOWN_DEFAULT as m}from"../../../../../../format/lib/reel.js";import{HERO_TEXTURE_COLOUR_DEFAULT as R,HERO_TEXTURE_SHOWN_DEFAULT as O}from"../../../../../../format/lib/hero-texture.js";import{HERO_ARROW_SHAPE_DEFAULT as P,HERO_ARROW_SHAPE_LABELS as L,HERO_ARROW_SHAPES as H,HERO_ARROWS_PLACEMENT_DEFAULT as u,HERO_ARROWS_SHOWN_DEFAULT as h}from"../../../../../../format/lib/hero-arrows.js";import{ClockIcon as T,EyeIcon as l,OpacityIcon as w,PhoneIcon as E,PlayIcon as I,SlideArrowsBareIcon as k,SlideArrowsRoundIcon as g,SlideArrowsSquareIcon as D,SlidePickerBarIcon as U,SlidePickerCardsIcon as f,SlidePickerDotsIcon as F,SlidePickerNumbersIcon as y,SlidePickerSquaresIcon as b,SquareIcon as c}from"efficient-easel/icons";import{SlideArrowsRoundSolidIcon as N}from"efficient-shell/icons/efficient-looks";const W=N,x={cards:e(f,{}),dots:e(F,{}),numbers:e(y,{}),bar:e(U,{}),squares:e(b,{})},C={outline:e(g,{}),solid:e(W,{}),square:e(D,{}),bare:e(k,{})};import{colorInput as B,group as o,placementField as n,segmented as i,slider as _,toggle as t}from"../../../controls.js";import{deviceField as s,deviceNote as q}from"efficient-easel/screen/lib/puck/device-fields";import{HERO_PHONE_SIDEWAYS_DEFAULT as M,HERO_PHONE_SIDEWAYS_LABEL as j,HERO_PHONE_UPDOWN_DEFAULT as X,HERO_PHONE_UPDOWN_LABEL as Y,phoneSidewaysPoints as v,phoneUpDownPoints as K}from"../../../../../../format/lib/hero-phone-stack.js";import{heightField as a,alignField as z}from"../../shared-fields.js";import{HeroSlots as G}from"../../../../../../render/lib/puck/blocks/general/Hero/render.js";const se={fields:{_dDevice:q(),_gContent:o("Content"),slides:G.slides,_gStyle:o("Style"),alignment:z(),_gTexture:o("Texture"),showTexture:t("Show texture",O,e(l,{})),textureColor:B("Texture color",R),textureOpacity:_("Texture opacity",e(w,{}),0,100,1,40,"%"),_gLayout:o("Layout"),heightDesktop:a("desktop"),heightMobile:a("mobile"),_gAutoplay:o("Auto-slide"),autoplay:t("Auto-advance slides",!1,e(I,{})),autoplayInterval:_("Still time per slide",e(T,{}),2,15,1,6,"s"),_gPicker:o("Slide picker"),showPicker:t("Show slide picker",m,e(l,{})),pickerShape:i("Slide picker shape",e(c,{}),d.map(r=>({label:A[r],value:r,picture:x[r]})),p),pickerPlacement:n("Slide picker placement",{stacking:!1,fallback:S}),_gArrows:o("Arrows"),showArrows:t("Show arrows",h,e(l,{})),arrowsShape:i("Arrows shape",e(c,{}),H.map(r=>({label:L[r],value:r,picture:C[r]})),P),arrowsPlacement:n("Arrows placement",{stacking:!1,fallback:u}),_gPhone:s("mobile",o("On a phone")),phoneUpDown:s("mobile",i(Y,e(E,{}),K(),X)),phoneSideways:s("mobile",i(j,e(E,{}),v(),M))}};export{se as HeroFields};
1
+ import{jsx as e}from"react/jsx-runtime";import{REEL_PLACEMENT_DEFAULT as S,REEL_SHAPE_DEFAULT as p,HERO_REEL_SHAPES as d,REEL_SHAPE_LABELS as A,REEL_SHOWN_DEFAULT as m}from"../../../../../../format/lib/reel.js";import{HERO_TEXTURE_COLOUR_DEFAULT as R,HERO_TEXTURE_SHOWN_DEFAULT as O}from"../../../../../../format/lib/hero-texture.js";import{HERO_ARROW_SHAPE_DEFAULT as P,HERO_ARROW_SHAPE_LABELS as L,HERO_ARROW_SHAPES as H,HERO_ARROWS_PLACEMENT_DEFAULT as u,HERO_ARROWS_SHOWN_DEFAULT as h}from"../../../../../../format/lib/hero-arrows.js";import{ClockIcon as T,EyeIcon as l,OpacityIcon as w,PhoneIcon as E,PlayIcon as I,SlideArrowsBareIcon as k,SlideArrowsRoundIcon as g,SlideArrowsSquareIcon as D,SlidePickerBarIcon as U,SlidePickerCardsIcon as f,SlidePickerDotsIcon as F,SlidePickerNumbersIcon as y,SlidePickerSquaresIcon as b,SquareIcon as c}from"efficient-easel/icons";import{SlideArrowsRoundSolidIcon as N}from"efficient-shell/icons/efficient-looks";const W=N,x={cards:e(f,{}),dots:e(F,{}),numbers:e(y,{}),bar:e(U,{}),squares:e(b,{})},C={outline:e(g,{}),solid:e(W,{}),square:e(D,{}),bare:e(k,{})};import{colorInput as B,group as o,placementField as n,segmented as i,slider as _,toggle as t}from"../../../controls.js";import{deviceField as s,deviceNote as q}from"efficient-easel/screen/lib/puck/device-fields";import{HERO_PHONE_SIDEWAYS_DEFAULT as M,HERO_PHONE_SIDEWAYS_LABEL as j,HERO_PHONE_UPDOWN_DEFAULT as X,HERO_PHONE_UPDOWN_LABEL as Y,phoneSidewaysPoints as v,phoneUpDownPoints as K}from"../../../../../../format/lib/hero-phone-stack.js";import{heightField as a,alignField as z}from"../../shared-fields.js";import{HeroSlots as G}from"../../../../../../format/lib/puck/blocks/general/Hero/meta.js";const se={fields:{_dDevice:q(),_gContent:o("Content"),slides:G.slides,_gStyle:o("Style"),alignment:z(),_gTexture:o("Texture"),showTexture:t("Show texture",O,e(l,{})),textureColor:B("Texture color",R),textureOpacity:_("Texture opacity",e(w,{}),0,100,1,40,"%"),_gLayout:o("Layout"),heightDesktop:a("desktop"),heightMobile:a("mobile"),_gAutoplay:o("Auto-slide"),autoplay:t("Auto-advance slides",!1,e(I,{})),autoplayInterval:_("Still time per slide",e(T,{}),2,15,1,6,"s"),_gPicker:o("Slide picker"),showPicker:t("Show slide picker",m,e(l,{})),pickerShape:i("Slide picker shape",e(c,{}),d.map(r=>({label:A[r],value:r,picture:x[r]})),p),pickerPlacement:n("Slide picker placement",{stacking:!1,fallback:S}),_gArrows:o("Arrows"),showArrows:t("Show arrows",h,e(l,{})),arrowsShape:i("Arrows shape",e(c,{}),H.map(r=>({label:L[r],value:r,picture:C[r]})),P),arrowsPlacement:n("Arrows placement",{stacking:!1,fallback:u}),_gPhone:s("mobile",o("On a phone")),phoneUpDown:s("mobile",i(Y,e(E,{}),K(),X)),phoneSideways:s("mobile",i(j,e(E,{}),v(),M))}};export{se as HeroFields};
@@ -1 +1 @@
1
- import{jsx as r}from"react/jsx-runtime";import{HERO_GROUP_NUDGE_LIMIT as n,HERO_GROUP_WIDTH_DEFAULT as u,HERO_GROUP_WIDTH_MAX as p,HERO_GROUP_WIDTH_MIN as d,HERO_GROUP_WIDTH_NESTED_DEFAULT as _,heroGroupNestDepth as g}from"../../../../../../format/lib/hero-group-placement.js";import{WidthIcon as l}from"efficient-easel/icons";import{boxAlignField as f,boxJustifyField as c,boxWrapField as H,directionField as h,gapField as x,group as e,placementField as F,plainText as G,positionFields as O,sidesPaddingFields as R,slider as s,withIdentifier as D,withOffPage as E,withPanelOnly as P}from"../../../controls.js";import{PH as I}from"../../../../../../format/lib/puck/blocks/placeholders.js";import{withRowRules as T}from"../../../../../../render/lib/puck/show-when.js";import{HeroGroupSlots as w}from"../../../../../../render/lib/puck/blocks/general/HeroGroup/render.js";const j={fields:T({_gContent:e("Content"),name:P(D(E(G("Box name",I.boxName)))),content:w.content,_gLayout:e("Layout"),placement:F("Placement",{stacking:!0}),width:s("Width",r(l,{}),d,p,5,u,"%"),direction:h("HeroGroup"),gap:x("HeroGroup"),justify:c(),align:f(),wrap:H(),_gNudge:e("Nudge"),...O({keys:{x:"nudgeX",y:"nudgeY"},min:-n,max:n,label:null}),...R()},[[["placement"],{context:"heroGroupDepth",is:0}]]),resolveFields:(o,{fields:t,appState:m})=>{const a=typeof o.props.id=="string"?o.props.id:"";if(g(m?.data,a)===0)return t;const i={...t};return i.width=s("Width",r(l,{}),d,p,5,_,"%"),i}};export{j as HeroGroupFields};
1
+ import{jsx as r}from"react/jsx-runtime";import{HERO_GROUP_NUDGE_LIMIT as n,HERO_GROUP_WIDTH_DEFAULT as u,HERO_GROUP_WIDTH_MAX as p,HERO_GROUP_WIDTH_MIN as d,HERO_GROUP_WIDTH_NESTED_DEFAULT as _,heroGroupNestDepth as g}from"../../../../../../format/lib/hero-group-placement.js";import{WidthIcon as l}from"efficient-easel/icons";import{boxAlignField as f,boxJustifyField as c,boxWrapField as H,directionField as h,gapField as x,group as e,placementField as F,plainText as G,positionFields as O,sidesPaddingFields as R,slider as s,withIdentifier as D,withOffPage as E,withPanelOnly as P}from"../../../controls.js";import{PH as I}from"../../../../../../format/lib/puck/blocks/placeholders.js";import{withRowRules as T}from"../../../../../../render/lib/puck/show-when.js";import{HeroGroupSlots as w}from"../../../../../../format/lib/puck/blocks/general/HeroGroup/meta.js";const j={fields:T({_gContent:e("Content"),name:P(D(E(G("Box name",I.boxName)))),content:w.content,_gLayout:e("Layout"),placement:F("Placement",{stacking:!0}),width:s("Width",r(l,{}),d,p,5,u,"%"),direction:h("HeroGroup"),gap:x("HeroGroup"),justify:c(),align:f(),wrap:H(),_gNudge:e("Nudge"),...O({keys:{x:"nudgeX",y:"nudgeY"},min:-n,max:n,label:null}),...R()},[[["placement"],{context:"heroGroupDepth",is:0}]]),resolveFields:(o,{fields:t,appState:m})=>{const a=typeof o.props.id=="string"?o.props.id:"";if(g(m?.data,a)===0)return t;const i={...t};return i.width=s("Width",r(l,{}),d,p,5,_,"%"),i}};export{j as HeroGroupFields};
@@ -1 +1 @@
1
- import{jsx as o}from"react/jsx-runtime";import{ImageIcon as O,ImagesIcon as n,MediaIcon as _,MediaLayoutSideBySideIcon as E,MediaLayoutStackedIcon as P,OpacityIcon as m,PlacementIcon as S,PlayIcon as A,UploadIcon as F}from"efficient-easel/icons";import{colorInput as d,edgePad as T,focusKeptField as i,group as a,MEDIA_TYPE_OPTIONS as b,phoneChoiceField as h,plainText as f,segmented as t,slider as c,upload as l}from"../../../controls.js";import{MEDIA_LAYOUT_DEFAULT as D,MEDIA_LAYOUT_LABELS as g,MEDIA_LAYOUTS as p,resolvePhoneLayout as U}from"../../../../../../format/lib/hero-media-layout.js";import{deviceNote as v}from"efficient-easel/screen/lib/puck/device-fields";import{DEFAULT_OVERLAY_COLOR as C,DEFAULT_OVERLAY_POSITION as V,OVERLAY_POSITION_OPTIONS as k}from"../../../../../../format/lib/sections/hero-overlay.js";import{heightField as y,slotNoticeField as M}from"../../shared-fields.js";import{forMediaType as s,heroMediaFields as Y,VIDEO_FILE_LABEL as B,VIDEO_FILE_PROMPT as x}from"../../../../../../render/lib/puck/hero-media-parts.js";import{VIDEO_PLAYBACK_DEFAULT as N,VIDEO_PLAYBACK_LABELS as R,VIDEO_PLAYBACKS as K,VIDEO_SOURCE_DEFAULT as r,VIDEO_SOURCE_LABELS as w,VIDEO_SOURCES as H}from"../../../../../../format/lib/hero-video.js";const u=s("video","image"),I=s("image","image"),L={one:o(O,{}),side:o(E,{}),stacked:o(P,{})};import{HeroSingleSlots as j}from"../../../../../../render/lib/puck/blocks/general/HeroSingle/render.js";const oe={fields:Y({_dDevice:v(),boxNotice:M("HeroSingle"),boxes:j.boxes,_gStyle:a("Style"),overlay:c("Overlay",o(m,{}),0,100,5,100,"%"),overlayColor:d("Overlay color",C),overlayPosition:T("Overlay position",k,V,"A corner would need a diagonal ramp, which this overlay does not draw.",o(S,{})),_gLayout:a("Layout"),heightDesktop:y("desktop"),heightMobile:y("mobile"),_gMedia:a("Media"),mediaType:t("Type",o(_,{}),b,"image"),mediaLayout:t("Layout",o(n,{}),p.map(e=>({label:g[e],value:e,picture:L[e]})),D),mediaLayoutPhone:h({label:"Layout",icon:o(n,{}),options:p.map(e=>({label:g[e],value:e,picture:L[e]})),desktopKey:"mediaLayout",resolve:U}),mediaImage:l("Background image","image/*","Upload a background image",{focus:"imageFocal"}),imageFocal:i(),imageFocalPhone:i(),videoSource:t("Source",o(F,{}),H.map(e=>({label:w[e],value:e})),r),mediaVideo:l(B,"video/*",x),youtubeUrl:f("YouTube link","https://youtu.be/…"),videoPlayback:t("Playback",o(A,{}),K.map(e=>({label:R[e],value:e})),N),poster:l("Video poster","image/*","Upload a poster still"),_gTint:a("Image tint"),tintColor:d("Tint color","#000000"),tintOpacity:c("Tint opacity",o(m,{}),0,100,5,0,"%"),mediaImage2:l("Background image","image/*","Upload a background image",{focus:"imageFocal2"}),imageFocal2:i(),imageFocal2Phone:i(),tintColor2:d("Tint color","#000000"),tintOpacity2:c("Tint opacity",o(m,{}),0,100,5,0,"%")},{parts:{media:["mediaType","mediaLayout","mediaLayoutPhone","videoSource","mediaVideo","youtubeUrl","videoPlayback","poster"],image:["mediaImage","imageFocal","imageFocalPhone","tintColor","tintOpacity"],image2:["mediaImage2","imageFocal2","imageFocal2Phone","tintColor2","tintOpacity2"]},onlyFor:{image:["mediaImage","imageFocal","imageFocalPhone","_gTint","tintColor","tintOpacity","mediaImage2","imageFocal2","imageFocal2Phone","tintColor2","tintOpacity2"],video:["videoSource","videoPlayback","poster"]},rules:{mediaVideo:{all:[u,{field:"videoSource",is:"upload",default:r}]},youtubeUrl:{all:[u,{field:"videoSource",is:"youtube",default:r}]},mediaLayout:{all:[I,{not:{context:"device",is:"mobile"}}]},mediaLayoutPhone:{all:[I,{context:"device",is:"mobile"}]}},fallback:"image"})};export{oe as HeroSingleFields};
1
+ import{jsx as o}from"react/jsx-runtime";import{ImageIcon as O,ImagesIcon as n,MediaIcon as _,MediaLayoutSideBySideIcon as E,MediaLayoutStackedIcon as P,OpacityIcon as m,PlacementIcon as S,PlayIcon as A,UploadIcon as F}from"efficient-easel/icons";import{colorInput as d,edgePad as T,focusKeptField as i,group as a,MEDIA_TYPE_OPTIONS as b,phoneChoiceField as h,plainText as f,segmented as t,slider as c,upload as l}from"../../../controls.js";import{MEDIA_LAYOUT_DEFAULT as D,MEDIA_LAYOUT_LABELS as g,MEDIA_LAYOUTS as p,resolvePhoneLayout as U}from"../../../../../../format/lib/hero-media-layout.js";import{deviceNote as v}from"efficient-easel/screen/lib/puck/device-fields";import{DEFAULT_OVERLAY_COLOR as C,DEFAULT_OVERLAY_POSITION as V,OVERLAY_POSITION_OPTIONS as k}from"../../../../../../format/lib/sections/hero-overlay.js";import{heightField as y,slotNoticeField as M}from"../../shared-fields.js";import{forMediaType as s,heroMediaFields as Y,VIDEO_FILE_LABEL as B,VIDEO_FILE_PROMPT as x}from"../../../../../../render/lib/puck/hero-media-parts.js";import{VIDEO_PLAYBACK_DEFAULT as N,VIDEO_PLAYBACK_LABELS as R,VIDEO_PLAYBACKS as K,VIDEO_SOURCE_DEFAULT as r,VIDEO_SOURCE_LABELS as w,VIDEO_SOURCES as H}from"../../../../../../format/lib/hero-video.js";const u=s("video","image"),I=s("image","image"),L={one:o(O,{}),side:o(E,{}),stacked:o(P,{})};import{HeroSingleSlots as j}from"../../../../../../format/lib/puck/blocks/general/HeroSingle/meta.js";const oe={fields:Y({_dDevice:v(),boxNotice:M("HeroSingle"),boxes:j.boxes,_gStyle:a("Style"),overlay:c("Overlay",o(m,{}),0,100,5,100,"%"),overlayColor:d("Overlay color",C),overlayPosition:T("Overlay position",k,V,"A corner would need a diagonal ramp, which this overlay does not draw.",o(S,{})),_gLayout:a("Layout"),heightDesktop:y("desktop"),heightMobile:y("mobile"),_gMedia:a("Media"),mediaType:t("Type",o(_,{}),b,"image"),mediaLayout:t("Layout",o(n,{}),p.map(e=>({label:g[e],value:e,picture:L[e]})),D),mediaLayoutPhone:h({label:"Layout",icon:o(n,{}),options:p.map(e=>({label:g[e],value:e,picture:L[e]})),desktopKey:"mediaLayout",resolve:U}),mediaImage:l("Background image","image/*","Upload a background image",{focus:"imageFocal"}),imageFocal:i(),imageFocalPhone:i(),videoSource:t("Source",o(F,{}),H.map(e=>({label:w[e],value:e})),r),mediaVideo:l(B,"video/*",x),youtubeUrl:f("YouTube link","https://youtu.be/…"),videoPlayback:t("Playback",o(A,{}),K.map(e=>({label:R[e],value:e})),N),poster:l("Video poster","image/*","Upload a poster still"),_gTint:a("Image tint"),tintColor:d("Tint color","#000000"),tintOpacity:c("Tint opacity",o(m,{}),0,100,5,0,"%"),mediaImage2:l("Background image","image/*","Upload a background image",{focus:"imageFocal2"}),imageFocal2:i(),imageFocal2Phone:i(),tintColor2:d("Tint color","#000000"),tintOpacity2:c("Tint opacity",o(m,{}),0,100,5,0,"%")},{parts:{media:["mediaType","mediaLayout","mediaLayoutPhone","videoSource","mediaVideo","youtubeUrl","videoPlayback","poster"],image:["mediaImage","imageFocal","imageFocalPhone","tintColor","tintOpacity"],image2:["mediaImage2","imageFocal2","imageFocal2Phone","tintColor2","tintOpacity2"]},onlyFor:{image:["mediaImage","imageFocal","imageFocalPhone","_gTint","tintColor","tintOpacity","mediaImage2","imageFocal2","imageFocal2Phone","tintColor2","tintOpacity2"],video:["videoSource","videoPlayback","poster"]},rules:{mediaVideo:{all:[u,{field:"videoSource",is:"upload",default:r}]},youtubeUrl:{all:[u,{field:"videoSource",is:"youtube",default:r}]},mediaLayout:{all:[I,{not:{context:"device",is:"mobile"}}]},mediaLayoutPhone:{all:[I,{context:"device",is:"mobile"}]}},fallback:"image"})};export{oe as HeroSingleFields};
@@ -1 +1 @@
1
- import{jsx as e}from"react/jsx-runtime";import{MediaIcon as r,OpacityIcon as d,PlayIcon as m}from"efficient-easel/icons";import{colorInput as p,focusKeptField as a,group as o,MEDIA_TYPE_OPTIONS as n,plainText as g,segmented as s,slider as l,text as c,upload as i,withIdentifier as I,withPanelOnly as t}from"../../../controls.js";import{PH as f}from"../../../../../../format/lib/puck/blocks/placeholders.js";import{slotNoticeField as F}from"../../shared-fields.js";import{heroMediaFields as _,VIDEO_FILE_LABEL as u,VIDEO_FILE_PROMPT as y}from"../../../../../../render/lib/puck/hero-media-parts.js";import{HeroSlideSlots as P}from"../../../../../../render/lib/puck/blocks/general/HeroSlide/render.js";const h={fields:_({_gContent:o("Content"),name:t(I(g("Slide name",f.slideName))),process:t(c("Reel label","Label")),groupNotice:F("HeroSlide"),groups:P.groups,_gMedia:o("Media"),mediaType:s("Type",e(r,{}),n,"video"),mediaVideo:i(u,"video/*",y),videoSpeed:l("Playback speed",e(m,{}),25,100,5,100,"%"),mediaImage:i("Background image","image/*","Upload a background image",{focus:"imageFocal"}),imageFocal:a(),imageFocalPhone:a(),poster:i("Video poster","image/*","Upload a poster still"),_gTint:o("Image tint"),tintColor:p("Tint color","#000000"),overlay:l("Overlay",e(d,{}),0,100,5,0,"%")},{onlyFor:{image:["mediaImage","imageFocal","imageFocalPhone","_gTint","tintColor","overlay"],video:["mediaVideo","videoSpeed","poster"]},fallback:"video"})};export{h as HeroSlideFields};
1
+ import{jsx as e}from"react/jsx-runtime";import{MediaIcon as r,OpacityIcon as d,PlayIcon as m}from"efficient-easel/icons";import{colorInput as p,focusKeptField as a,group as o,MEDIA_TYPE_OPTIONS as n,plainText as g,segmented as s,slider as l,text as c,upload as i,withIdentifier as I,withPanelOnly as t}from"../../../controls.js";import{PH as f}from"../../../../../../format/lib/puck/blocks/placeholders.js";import{slotNoticeField as F}from"../../shared-fields.js";import{heroMediaFields as _,VIDEO_FILE_LABEL as u,VIDEO_FILE_PROMPT as y}from"../../../../../../render/lib/puck/hero-media-parts.js";import{HeroSlideSlots as P}from"../../../../../../format/lib/puck/blocks/general/HeroSlide/meta.js";const h={fields:_({_gContent:o("Content"),name:t(I(g("Slide name",f.slideName))),process:t(c("Reel label","Label")),groupNotice:F("HeroSlide"),groups:P.groups,_gMedia:o("Media"),mediaType:s("Type",e(r,{}),n,"video"),mediaVideo:i(u,"video/*",y),videoSpeed:l("Playback speed",e(m,{}),25,100,5,100,"%"),mediaImage:i("Background image","image/*","Upload a background image",{focus:"imageFocal"}),imageFocal:a(),imageFocalPhone:a(),poster:i("Video poster","image/*","Upload a poster still"),_gTint:o("Image tint"),tintColor:p("Tint color","#000000"),overlay:l("Overlay",e(d,{}),0,100,5,0,"%")},{onlyFor:{image:["mediaImage","imageFocal","imageFocalPhone","_gTint","tintColor","overlay"],video:["mediaVideo","videoSpeed","poster"]},fallback:"video"})};export{h as HeroSlideFields};
@@ -1 +1 @@
1
- import{jsx as t}from"react/jsx-runtime";import{CaseIcon as g,OpacityIcon as b,PlacementIcon as y,StickyIcon as u,TextLinesIcon as a}from"efficient-easel/icons";import{colorInput as d,group as i,select as k,sizeField as l,slider as r,text as h,textarea as s,toggle as m,upload as p}from"../../../controls.js";import{NoControlMark as _,noControlField as x}from"efficient-easel/screen/lib/puck/panel-no-control-mark";import{deviceField as e,deviceNote as T}from"efficient-easel/screen/lib/puck/device-fields";import{DEFAULT_INTRO_BLEED_LAYOUT as f,INTRO_BLEED_COPY_SHARE as o,INTRO_BLEED_LAYOUT_OPTIONS as S}from"../../../../../../format/lib/sections/intro-bleed-layout.js";import{heightField as c,ctaField as B}from"../../shared-fields.js";import{INTRO_PH as n}from"../../../../../../render/lib/puck/blocks/general/IntroBleed/render.js";const M={fields:{_dDevice:T(),_gContent:i("Content"),eyebrow:h("Eyebrow",n.eyebrow),title:s("Heading",n.title),body:s("Subtitle",n.body),uppercase:m("Uppercase heading",!1,t(g,{})),_gBackground:i("Background images"),imageSrc:e("desktop",p("Background image","image/*")),imageSrcMobile:e("mobile",p("Background image","image/*")),_gLayout:i("Layout"),layout:k("Text position",t(y,{}),S,f),heightDesktop:c("desktop"),heightMobile:c("mobile"),copyShareDesktop:e("desktop",r("Text height",t(a,{}),o.min,o.max,o.step,o.desktop,"%")),copyShareMobile:e("mobile",r("Text height",t(a,{}),o.min,o.max,o.step,o.mobile,"%")),sticky:m("Stick to top",!0,t(u,{})),fullWidth:{...x({type:"custom",render:()=>t(_,{})},"always"),reachedBy:"contentWidth"},overlay:r("Overlay",t(b,{}),0,100,5,60,"%"),_gTextDesktop:e("desktop",i("Text style")),titleSizeDesktop:e("desktop",l("Heading font size",32,120,1,96,"heading")),bodySizeDesktop:e("desktop",l("Subtitle font size",12,28,1,17,"body")),_gTextMobile:e("mobile",i("Text style")),titleSizeMobile:e("mobile",l("Heading font size",24,72,1,44,"heading")),bodySizeMobile:e("mobile",l("Subtitle font size",12,22,1,16,"body")),_gButton:i("Button"),...B,buttonColor:d("Button color","#C9A461"),buttonTextColor:d("Button text color","#000000")}};export{M as IntroBleedFields};
1
+ import{jsx as t}from"react/jsx-runtime";import{CaseIcon as g,OpacityIcon as b,PlacementIcon as y,StickyIcon as u,TextLinesIcon as a}from"efficient-easel/icons";import{colorInput as d,group as i,select as k,sizeField as l,slider as r,text as h,textarea as s,toggle as m,upload as p}from"../../../controls.js";import{NoControlMark as _,noControlField as x}from"efficient-easel/screen/lib/puck/panel-no-control-mark";import{deviceField as e,deviceNote as T}from"efficient-easel/screen/lib/puck/device-fields";import{DEFAULT_INTRO_BLEED_LAYOUT as f,INTRO_BLEED_COPY_SHARE as o,INTRO_BLEED_LAYOUT_OPTIONS as S}from"../../../../../../format/lib/sections/intro-bleed-layout.js";import{heightField as c,ctaField as B}from"../../shared-fields.js";import{INTRO_PH as n}from"../../../../../../format/lib/puck/blocks/general/IntroBleed/meta.js";const M={fields:{_dDevice:T(),_gContent:i("Content"),eyebrow:h("Eyebrow",n.eyebrow),title:s("Heading",n.title),body:s("Subtitle",n.body),uppercase:m("Uppercase heading",!1,t(g,{})),_gBackground:i("Background images"),imageSrc:e("desktop",p("Background image","image/*")),imageSrcMobile:e("mobile",p("Background image","image/*")),_gLayout:i("Layout"),layout:k("Text position",t(y,{}),S,f),heightDesktop:c("desktop"),heightMobile:c("mobile"),copyShareDesktop:e("desktop",r("Text height",t(a,{}),o.min,o.max,o.step,o.desktop,"%")),copyShareMobile:e("mobile",r("Text height",t(a,{}),o.min,o.max,o.step,o.mobile,"%")),sticky:m("Stick to top",!0,t(u,{})),fullWidth:{...x({type:"custom",render:()=>t(_,{})},"always"),reachedBy:"contentWidth"},overlay:r("Overlay",t(b,{}),0,100,5,60,"%"),_gTextDesktop:e("desktop",i("Text style")),titleSizeDesktop:e("desktop",l("Heading font size",32,120,1,96,"heading")),bodySizeDesktop:e("desktop",l("Subtitle font size",12,28,1,17,"body")),_gTextMobile:e("mobile",i("Text style")),titleSizeMobile:e("mobile",l("Heading font size",24,72,1,44,"heading")),bodySizeMobile:e("mobile",l("Subtitle font size",12,22,1,16,"body")),_gButton:i("Button"),...B,buttonColor:d("Button color","#C9A461"),buttonTextColor:d("Button text color","#000000")}};export{M as IntroBleedFields};
@@ -1 +1 @@
1
- import{jsx as e}from"react/jsx-runtime";import{ColumnsIcon as l,StylesIcon as a}from"efficient-easel/icons";import{copyText as s,group as t,plainText as m,select as y,slider as i,text as n,textarea as b,withOffPage as f}from"../../../controls.js";import{SECTION_EYEBROW_LOOK_OPTIONS as p,eyebrowLookFor as u}from"../../../../../../format/lib/sections/section-eyebrow-look.js";import{KEY_FEATURES_PH as r}from"../../../../../../render/lib/puck/blocks/general/KeyFeatures/render.js";const O={fields:{_gContent:t("Content"),eyebrow:n("Eyebrow",r.eyebrow),eyebrowLook:y("Eyebrow style",e(a,{}),[...p],u("KeyFeatures")),title:b("Heading",r.title),items:{type:"array",label:"Features",arrayFields:{label:s("Feature label"),href:f(m("Link"))},defaultItemProps:{label:"",href:""},getItemSummary:o=>o?.label||"Feature"},_gStyle:t("Style"),columns:i("Columns",e(l,{}),2,4,1,3)}};export{O as KeyFeaturesFields};
1
+ import{jsx as e}from"react/jsx-runtime";import{ColumnsIcon as l,StylesIcon as a}from"efficient-easel/icons";import{copyText as s,group as t,plainText as m,select as y,slider as i,text as n,textarea as b,withOffPage as f}from"../../../controls.js";import{SECTION_EYEBROW_LOOK_OPTIONS as p,eyebrowLookFor as u}from"../../../../../../format/lib/sections/section-eyebrow-look.js";import{KEY_FEATURES_PH as r}from"../../../../../../format/lib/puck/blocks/general/KeyFeatures/meta.js";const O={fields:{_gContent:t("Content"),eyebrow:n("Eyebrow",r.eyebrow),eyebrowLook:y("Eyebrow style",e(a,{}),[...p],u("KeyFeatures")),title:b("Heading",r.title),items:{type:"array",label:"Features",arrayFields:{label:s("Feature label"),href:f(m("Link"))},defaultItemProps:{label:"",href:""},getItemSummary:o=>o?.label||"Feature"},_gStyle:t("Style"),columns:i("Columns",e(l,{}),2,4,1,3)}};export{O as KeyFeaturesFields};
@@ -1 +1 @@
1
- import r from"../../../../../components/BlogPostSource.js";import{BOUND_TO_POST as m,BOUND_TO_POST_NOTE as n,NOT_BOUND_TO_POST as u,group as a,linkField as s,panelNote as g,sourceField as h,text as t,textarea as i,upload as _}from"../../../controls.js";import{SPLITTABLE_SECTIONS as c,headFieldsForPlacement as O,widthFieldsForParent as T}from"../../../../../../format/lib/sections/section-head-placement.js";import{WIDTH_ROW_KEYS as P}from"../../shared-fields.js";import{withRowsShownWhen as b,withShowWhen as p}from"../../../../../../render/lib/puck/show-when.js";import{LONGREAD_PH as e}from"../../../../../../render/lib/puck/blocks/general/LongRead/render.js";const L=["image","title","dek","ctaHref","metaPublished"],k={fields:b({source:h(r),_nBound:p(g(n),m),_gHead:a("Section header"),headNum:t("Number",e.headNum),headTitle:i("Heading",e.headTitle),headDesc:i("Body",e.headDesc),_gMeta:a("Article"),category:t("Category",e.category),metaMiddle:t("Middle meta",e.metaMiddle),readLabel:t("Read time",e.readLabel),title:i("Article title",e.title),dek:i("Dek",e.dek),_gQuote:a("Pull quote"),quote:i("Quote",e.quote),quoteAttribution:t("Attribution",e.quoteAttribution),_gLink:a("Link"),ctaText:t("Button",e.ctaText),ctaHref:s("Link"),image:_("Image","image/*"),imageLabel:t("Image label",e.imageLabel),_gOverlay:a("Image caption"),metaPublished:t("Published",e.metaPublished),metaReads:t("Reads in",e.metaReads)},L,u),resolveFields:(o,{fields:d,parent:l})=>O(T(d,l,P),o.props.headPlacement,c.LongRead.headRows)};export{k as LongReadFields};
1
+ import r from"../../../../../components/BlogPostSource.js";import{BOUND_TO_POST as m,BOUND_TO_POST_NOTE as n,NOT_BOUND_TO_POST as u,group as a,linkField as s,panelNote as g,sourceField as h,text as t,textarea as i,upload as _}from"../../../controls.js";import{SPLITTABLE_SECTIONS as c,headFieldsForPlacement as O,widthFieldsForParent as T}from"../../../../../../format/lib/sections/section-head-placement.js";import{WIDTH_ROW_KEYS as P}from"../../shared-fields.js";import{withRowsShownWhen as b,withShowWhen as p}from"../../../../../../render/lib/puck/show-when.js";import{LONGREAD_PH as e}from"../../../../../../format/lib/puck/blocks/general/LongRead/meta.js";const L=["image","title","dek","ctaHref","metaPublished"],k={fields:b({source:h(r),_nBound:p(g(n),m),_gHead:a("Section header"),headNum:t("Number",e.headNum),headTitle:i("Heading",e.headTitle),headDesc:i("Body",e.headDesc),_gMeta:a("Article"),category:t("Category",e.category),metaMiddle:t("Middle meta",e.metaMiddle),readLabel:t("Read time",e.readLabel),title:i("Article title",e.title),dek:i("Dek",e.dek),_gQuote:a("Pull quote"),quote:i("Quote",e.quote),quoteAttribution:t("Attribution",e.quoteAttribution),_gLink:a("Link"),ctaText:t("Button",e.ctaText),ctaHref:s("Link"),image:_("Image","image/*"),imageLabel:t("Image label",e.imageLabel),_gOverlay:a("Image caption"),metaPublished:t("Published",e.metaPublished),metaReads:t("Reads in",e.metaReads)},L,u),resolveFields:(o,{fields:d,parent:l})=>O(T(d,l,P),o.props.headPlacement,c.LongRead.headRows)};export{k as LongReadFields};
@@ -1 +1 @@
1
- import{jsx as r}from"react/jsx-runtime";import{TextLinesIcon as l}from"efficient-easel/icons";import{copyText as t,group as s,text as i,textarea as o,textList as d}from"../../../controls.js";import{MASTHEAD_PH as e}from"../../../../../../render/lib/puck/blocks/general/Masthead/render.js";const g={fields:{_gTop:s("Top row"),eyebrow:i("Eyebrow",e.eyebrow),issueMeta:{type:"array",label:"Issue meta lines",arrayFields:{lead:t("Bold word"),rest:t("Rest")},getItemSummary:a=>[a?.lead,a?.rest].filter(Boolean).join(" ")||"Line"},_gLead:s("Lead"),lead:o("Lead",e.lead),_gIssue:s("In this issue"),issueHeading:o("Panel heading",e.issueHeading),issueList:d("Issue lines",r(l,{}),"Line","markup"),issueTotal:i("Total line",e.issueTotal)}};export{g as MastheadFields};
1
+ import{jsx as r}from"react/jsx-runtime";import{TextLinesIcon as l}from"efficient-easel/icons";import{copyText as t,group as s,text as i,textarea as o,textList as d}from"../../../controls.js";import{MASTHEAD_PH as e}from"../../../../../../format/lib/puck/blocks/general/Masthead/meta.js";const g={fields:{_gTop:s("Top row"),eyebrow:i("Eyebrow",e.eyebrow),issueMeta:{type:"array",label:"Issue meta lines",arrayFields:{lead:t("Bold word"),rest:t("Rest")},getItemSummary:a=>[a?.lead,a?.rest].filter(Boolean).join(" ")||"Line"},_gLead:s("Lead"),lead:o("Lead",e.lead),_gIssue:s("In this issue"),issueHeading:o("Panel heading",e.issueHeading),issueList:d("Issue lines",r(l,{}),"Line","markup"),issueTotal:i("Total line",e.issueTotal)}};export{g as MastheadFields};
@@ -1 +1 @@
1
- import{blockSourceField as s,blockSourceFields as i}from"../../../block-source-fields.js";import{copyText as t,group as o,text as a,textarea as r}from"../../../controls.js";import{PH as u}from"../../../../../../format/lib/puck/blocks/placeholders.js";import{ORDER_SUMMARY_PH as l}from"../../../../../../render/lib/puck/blocks/general/OrderSummary/render.js";const p={fields:{_gContent:o("Content"),eyebrow:a("Eyebrow",u.eyebrow),title:r("Heading",l.title),_gItems:o("Items"),dataSource:s("Items from","Typed here"),rows:{type:"array",label:"Items",arrayFields:{label:t("Item"),meta:t("Meta line"),amount:t("Amount")},getItemSummary:e=>e.label||"Item"},subRows:{type:"array",label:"Sub-total lines",arrayFields:{label:t("Label"),amount:t("Amount")},getItemSummary:e=>e.label||"Line"},_gTotal:o("Total"),totalLabel:a("Total label","Total"),totalAmount:a("Total amount","$0,000"),note:r("Note",l.note),_gLayout:o("Layout")},resolveFields:(e,{fields:m})=>i("OrderSummary",m,e.props,{hides:["rows"]})};export{p as OrderSummaryFields};
1
+ import{blockSourceField as s,blockSourceFields as i}from"../../../block-source-fields.js";import{copyText as t,group as o,text as a,textarea as r}from"../../../controls.js";import{PH as u}from"../../../../../../format/lib/puck/blocks/placeholders.js";import{ORDER_SUMMARY_PH as l}from"../../../../../../format/lib/puck/blocks/general/OrderSummary/meta.js";const p={fields:{_gContent:o("Content"),eyebrow:a("Eyebrow",u.eyebrow),title:r("Heading",l.title),_gItems:o("Items"),dataSource:s("Items from","Typed here"),rows:{type:"array",label:"Items",arrayFields:{label:t("Item"),meta:t("Meta line"),amount:t("Amount")},getItemSummary:e=>e.label||"Item"},subRows:{type:"array",label:"Sub-total lines",arrayFields:{label:t("Label"),amount:t("Amount")},getItemSummary:e=>e.label||"Line"},_gTotal:o("Total"),totalLabel:a("Total label","Total"),totalAmount:a("Total amount","$0,000"),note:r("Note",l.note),_gLayout:o("Layout")},resolveFields:(e,{fields:m})=>i("OrderSummary",m,e.props,{hides:["rows"]})};export{p as OrderSummaryFields};
@@ -1 +1 @@
1
- import{copyText as a,group as t,text as n,textarea as r}from"../../../controls.js";import{PH as d}from"../../../../../../format/lib/puck/blocks/placeholders.js";import{innerSpacingFields as i}from"../../shared-fields.js";import{PARAGRAPHS_A_PH as e}from"../../../../../../render/lib/puck/blocks/general/ParagraphsA/render.js";const m={fields:{_gContent:t("Content"),eyebrow:n("Eyebrow",e.eyebrow),lead:r("Lead",d.body),stats:{type:"array",label:"Stats",arrayFields:{value:a("Number"),label:a("Unit")},getItemSummary:o=>o.label||o.value||"Stat"},_gFounders:t("Founders"),foundersHeading:r("Founders heading",e.foundersHeading),foundersBody:r("Founders statement",e.foundersBody),attribution:n("Attribution",e.attribution),_gStyle:t("Style"),...i("ParagraphsA")}};export{m as ParagraphsAFields};
1
+ import{copyText as a,group as t,text as n,textarea as r}from"../../../controls.js";import{PH as d}from"../../../../../../format/lib/puck/blocks/placeholders.js";import{innerSpacingFields as i}from"../../shared-fields.js";import{PARAGRAPHS_A_PH as e}from"../../../../../../format/lib/puck/blocks/general/ParagraphsA/meta.js";const m={fields:{_gContent:t("Content"),eyebrow:n("Eyebrow",e.eyebrow),lead:r("Lead",d.body),stats:{type:"array",label:"Stats",arrayFields:{value:a("Number"),label:a("Unit")},getItemSummary:o=>o.label||o.value||"Stat"},_gFounders:t("Founders"),foundersHeading:r("Founders heading",e.foundersHeading),foundersBody:r("Founders statement",e.foundersBody),attribution:n("Attribution",e.attribution),_gStyle:t("Style"),...i("ParagraphsA")}};export{m as ParagraphsAFields};
@@ -1 +1 @@
1
- import{copyText as a,group as t,text as r,upload as o}from"../../../controls.js";import{PAYMENT_PH as s}from"../../../../../../render/lib/puck/blocks/general/PaymentBadges/render.js";const m={fields:{_gContent:t("Content"),heading:r("Heading",s.heading),badges:{type:"array",label:"Payment methods",arrayFields:{label:a("Name"),src:o("Logo","image/*")},getItemSummary:e=>e.label||e.src||"Method"},assurances:{type:"array",label:"Reassurance lines",arrayFields:{text:a("Line")},getItemSummary:e=>e.text||"Line"},_gLayout:t("Layout")}};export{m as PaymentBadgesFields};
1
+ import{copyText as a,group as t,text as r,upload as o}from"../../../controls.js";import{PAYMENT_PH as s}from"../../../../../../format/lib/puck/blocks/general/PaymentBadges/meta.js";const m={fields:{_gContent:t("Content"),heading:r("Heading",s.heading),badges:{type:"array",label:"Payment methods",arrayFields:{label:a("Name"),src:o("Logo","image/*")},getItemSummary:e=>e.label||e.src||"Method"},assurances:{type:"array",label:"Reassurance lines",arrayFields:{text:a("Line")},getItemSummary:e=>e.text||"Line"},_gLayout:t("Layout")}};export{m as PaymentBadgesFields};