efficient-web-builder 1.0.0 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (406) hide show
  1. package/CHANGELOG.md +47 -0
  2. package/README.md +2 -1
  3. package/dist/components/AddBlockRow.d.ts +1 -7
  4. package/dist/components/AddBlockRow.js +1 -1
  5. package/dist/components/AddChildRow.d.ts +1 -6
  6. package/dist/components/AddChildRow.js +1 -1
  7. package/dist/components/AddSidePanel.d.ts +2 -39
  8. package/dist/components/AddSidePanel.js +1 -1
  9. package/dist/components/BlockGapField.js +1 -1
  10. package/dist/components/BlogPostSource.js +1 -1
  11. package/dist/components/Breadcrumb.js +1 -1
  12. package/dist/components/Btn.js +1 -1
  13. package/dist/components/CardShadowField.js +1 -1
  14. package/dist/components/CategoryBar.js +1 -1
  15. package/dist/components/ChartSection.js +1 -1
  16. package/dist/components/ChatSettingsPanel.js +1 -1
  17. package/dist/components/ClearColoursDialog.js +1 -1
  18. package/dist/components/ContactLocations.js +5 -5
  19. package/dist/components/CornersField.d.ts +0 -1
  20. package/dist/components/CornersField.js +1 -1
  21. package/dist/components/DocBody.js +1 -1
  22. package/dist/components/DuplicateToPageMenu.js +1 -1
  23. package/dist/components/EditorScreenMount.d.ts +1 -0
  24. package/dist/components/EditorScreenMount.js +1 -0
  25. package/dist/components/EditorStoreProvider.d.ts +1 -0
  26. package/dist/components/EditorStoreProvider.js +1 -0
  27. package/dist/components/FeaturedCover.js +1 -1
  28. package/dist/components/FieldGlyph.js +1 -1
  29. package/dist/components/Footprint.js +1 -1
  30. package/dist/components/HeadingAudit.js +1 -1
  31. package/dist/components/HeroImageField.js +1 -1
  32. package/dist/components/HeroSection.d.ts +2 -6
  33. package/dist/components/HeroSection.js +4 -4
  34. package/dist/components/HoverEffectField.js +1 -1
  35. package/dist/components/ImageBlock.js +1 -1
  36. package/dist/components/ImageFocusRow.js +1 -1
  37. package/dist/components/KeepHint.d.ts +5 -0
  38. package/dist/components/KeepHint.js +1 -0
  39. package/dist/components/LocationsGroupedField.js +1 -1
  40. package/dist/components/LongRead.js +1 -1
  41. package/dist/components/MediaSidePanel.d.ts +1 -6
  42. package/dist/components/MediaSidePanel.js +1 -1
  43. package/dist/components/MediaUploadField.js +1 -1
  44. package/dist/components/MockupSection.js +1 -1
  45. package/dist/components/MultiSelectField.d.ts +4 -1
  46. package/dist/components/MultiSelectField.js +1 -1
  47. package/dist/components/NodeContextMenu.d.ts +2 -96
  48. package/dist/components/NodeContextMenu.js +1 -1
  49. package/dist/components/PageEditGuardNotices.d.ts +1 -1
  50. package/dist/components/PageEditGuardNotices.js +1 -1
  51. package/dist/components/PagesPanel.js +1 -1
  52. package/dist/components/PanelToggleIcon.d.ts +1 -3
  53. package/dist/components/PanelToggleIcon.js +1 -1
  54. package/dist/components/PartResetDot.js +1 -1
  55. package/dist/components/PartSettingsPanel.d.ts +5 -0
  56. package/dist/components/PartSettingsPanel.js +1 -1
  57. package/dist/components/PhotographyField.js +1 -1
  58. package/dist/components/PostCard.js +1 -1
  59. package/dist/components/PreviewDeviceContext.d.ts +2 -4
  60. package/dist/components/PreviewDeviceContext.js +1 -1
  61. package/dist/components/PreviewPartsContext.d.ts +1 -3
  62. package/dist/components/PreviewPartsContext.js +1 -1
  63. package/dist/components/ProcessSteps.js +1 -1
  64. package/dist/components/RMark.js +1 -1
  65. package/dist/components/Reel.js +1 -1
  66. package/dist/components/SearchSelectField.d.ts +3 -1
  67. package/dist/components/SearchSelectField.js +1 -1
  68. package/dist/components/SectionEditor.d.ts +2 -5
  69. package/dist/components/SectionEditor.js +1 -1
  70. package/dist/components/SectionEditorShell.d.ts +1 -1
  71. package/dist/components/SectionEditorShell.js +1 -1
  72. package/dist/components/SectionHeader.js +1 -1
  73. package/dist/components/SectionThemePicker.d.ts +3 -1
  74. package/dist/components/SectionThemePicker.js +1 -1
  75. package/dist/components/SectionThumbnail.js +1 -1
  76. package/dist/components/ShadowColourField.js +1 -1
  77. package/dist/components/SidePanelHead.d.ts +1 -23
  78. package/dist/components/SidePanelHead.js +1 -1
  79. package/dist/components/SideSpaceField.d.ts +0 -1
  80. package/dist/components/SideSpaceField.js +1 -1
  81. package/dist/components/SiteEditorProvider.d.ts +3 -10
  82. package/dist/components/SiteEditorProvider.js +1 -1
  83. package/dist/components/SiteWidthField.d.ts +0 -1
  84. package/dist/components/SiteWidthField.js +1 -1
  85. package/dist/components/SlotChildActionsContext.d.ts +2 -13
  86. package/dist/components/SlotChildActionsContext.js +1 -1
  87. package/dist/components/SlotChildRows.js +1 -1
  88. package/dist/components/SocialLinksPanel.js +1 -1
  89. package/dist/components/SourceStatus.js +1 -1
  90. package/dist/components/Split.js +1 -1
  91. package/dist/components/StandaloneSectionEditor.d.ts +1 -0
  92. package/dist/components/StandaloneSectionEditor.js +1 -1
  93. package/dist/components/StorefrontDocumentContext.d.ts +2 -67
  94. package/dist/components/StorefrontDocumentContext.js +1 -1
  95. package/dist/components/StorefrontEditor.d.ts +1 -0
  96. package/dist/components/StorefrontEditor.js +1 -1
  97. package/dist/components/StorefrontEditorChrome.d.ts +1 -1
  98. package/dist/components/StorefrontEditorChrome.js +1 -1
  99. package/dist/components/StorefrontLinkField.d.ts +9 -0
  100. package/dist/components/StorefrontLinkField.js +1 -1
  101. package/dist/components/StylesPanel.js +1 -1
  102. package/dist/components/Testimonials.js +1 -1
  103. package/dist/components/TextStylesField.js +1 -1
  104. package/dist/components/ThemeCard.js +1 -1
  105. package/dist/components/ThemeColourField.js +1 -1
  106. package/dist/components/ThemeField.js +1 -1
  107. package/dist/components/TickerSettingsPanel.js +1 -1
  108. package/dist/components/Timeline.js +1 -1
  109. package/dist/components/TimelineTrack.js +1 -1
  110. package/dist/components/TitleWithButtons.js +1 -1
  111. package/dist/components/UiIcon.d.ts +2 -10
  112. package/dist/components/UiIcon.js +1 -1
  113. package/dist/components/WebsiteScreenParts.d.ts +2 -0
  114. package/dist/components/WebsiteScreenParts.js +1 -0
  115. package/dist/components/WebsiteSettingsPanel.js +1 -1
  116. package/dist/components/WidthFollowField.js +1 -1
  117. package/dist/components/goldPhrases.js +1 -1
  118. package/dist/components/panel-widths.d.ts +2 -12
  119. package/dist/components/panel-widths.js +1 -1
  120. package/dist/components/storefront-editor.css +147 -1195
  121. package/dist/components/useFooterFocus.d.ts +2 -0
  122. package/dist/components/useFooterFocus.js +1 -0
  123. package/dist/components/useLocationsTree.d.ts +6 -0
  124. package/dist/components/useLocationsTree.js +1 -0
  125. package/dist/components/usePartBridge.d.ts +1 -9
  126. package/dist/components/usePartBridge.js +1 -1
  127. package/dist/components/usePinnedChromeSeed.d.ts +2 -0
  128. package/dist/components/usePinnedChromeSeed.js +1 -0
  129. package/dist/components/useSocialSettings.js +1 -1
  130. package/dist/components/useStorefrontBlogPosts.js +1 -1
  131. package/dist/lib/client-only.d.ts +1 -0
  132. package/dist/lib/client-only.js +1 -0
  133. package/dist/lib/content/contact.js +3 -3
  134. package/dist/lib/content/subscribe.js +1 -1
  135. package/dist/lib/content/view-tiers.d.ts +2 -6
  136. package/dist/lib/content/view-tiers.js +1 -1
  137. package/dist/lib/editor-admin-bridge.d.ts +2 -29
  138. package/dist/lib/editor-admin-bridge.js +1 -1
  139. package/dist/lib/editor-backend-error.d.ts +2 -0
  140. package/dist/lib/editor-backend-error.js +1 -0
  141. package/dist/lib/editor-blocks.d.ts +2 -2
  142. package/dist/lib/editor-chrome.d.ts +2 -52
  143. package/dist/lib/editor-chrome.js +1 -1
  144. package/dist/lib/editor-document-adapter.d.ts +3 -51
  145. package/dist/lib/editor-document-adapter.js +1 -1
  146. package/dist/lib/editor-document-addressing.d.ts +2 -0
  147. package/dist/lib/editor-document-addressing.js +1 -0
  148. package/dist/lib/editor-document-contract.d.ts +1 -0
  149. package/dist/lib/editor-document-contract.js +0 -0
  150. package/dist/lib/editor-document-hooks.d.ts +1 -15
  151. package/dist/lib/editor-document-switch.d.ts +2 -0
  152. package/dist/lib/editor-document-switch.js +1 -0
  153. package/dist/lib/editor-failure.d.ts +1 -4
  154. package/dist/lib/editor-failure.js +1 -1
  155. package/dist/lib/editor-host-inbound.d.ts +1 -1
  156. package/dist/lib/editor-host-inbound.js +1 -1
  157. package/dist/lib/editor-host.d.ts +2 -135
  158. package/dist/lib/editor-host.js +1 -1
  159. package/dist/lib/editor-key-scope.d.ts +1 -3
  160. package/dist/lib/editor-key-scope.js +1 -1
  161. package/dist/lib/editor-load-error.d.ts +1 -4
  162. package/dist/lib/editor-load-error.js +1 -1
  163. package/dist/lib/editor-media-panel.d.ts +2 -23
  164. package/dist/lib/editor-media-panel.js +1 -1
  165. package/dist/lib/editor-media-picker.d.ts +2 -12
  166. package/dist/lib/editor-media-picker.js +1 -1
  167. package/dist/lib/editor-page-lock.d.ts +1 -1
  168. package/dist/lib/editor-page-lock.js +1 -1
  169. package/dist/lib/editor-screen.d.ts +2 -0
  170. package/dist/lib/editor-screen.js +1 -0
  171. package/dist/lib/editor-section-templates.d.ts +1 -2
  172. package/dist/lib/editor-section-templates.js +1 -1
  173. package/dist/lib/editor-session-context.d.ts +1 -7
  174. package/dist/lib/editor-session-context.js +1 -1
  175. package/dist/lib/editor-session.d.ts +2 -45
  176. package/dist/lib/editor-session.js +1 -1
  177. package/dist/lib/editor-site-slug.js +1 -1
  178. package/dist/lib/editor-theme.d.ts +1 -1
  179. package/dist/lib/editor-theme.js +1 -1
  180. package/dist/lib/hero-arrows.d.ts +1 -1
  181. package/dist/lib/links/link-filters.d.ts +1 -0
  182. package/dist/lib/links/link-filters.js +0 -0
  183. package/dist/lib/links/link-picker-setup.d.ts +29 -0
  184. package/dist/lib/links/link-picker-setup.js +1 -0
  185. package/dist/lib/puck/ColourControl.d.ts +4 -1
  186. package/dist/lib/puck/ColourControl.js +1 -1
  187. package/dist/lib/puck/MarkupToolbar.js +1 -1
  188. package/dist/lib/puck/add-palette.d.ts +3 -9
  189. package/dist/lib/puck/add-palette.js +1 -1
  190. package/dist/lib/puck/add-target-types.d.ts +1 -0
  191. package/dist/lib/puck/add-target-types.js +0 -0
  192. package/dist/lib/puck/add-target.d.ts +2 -9
  193. package/dist/lib/puck/block-choice.d.ts +2 -0
  194. package/dist/lib/puck/block-choice.js +1 -0
  195. package/dist/lib/puck/block-offer.js +1 -1
  196. package/dist/lib/puck/block-types-in.d.ts +1 -1
  197. package/dist/lib/puck/block-types-in.js +1 -1
  198. package/dist/lib/puck/blocks/general/CategoryBar/fields.js +1 -1
  199. package/dist/lib/puck/blocks/general/Chart/fields.js +1 -1
  200. package/dist/lib/puck/blocks/general/FAQ/render.js +1 -1
  201. package/dist/lib/puck/blocks/general/FeaturedCover/render.js +1 -1
  202. package/dist/lib/puck/blocks/general/Footprint/fields.js +1 -1
  203. package/dist/lib/puck/blocks/general/IntroBleed/render.js +1 -1
  204. package/dist/lib/puck/blocks/general/LogoBlock/fields.js +1 -1
  205. package/dist/lib/puck/blocks/general/LongRead/render.js +1 -1
  206. package/dist/lib/puck/blocks/general/Masthead/render.js +1 -1
  207. package/dist/lib/puck/blocks/general/Mockup/fields.js +1 -1
  208. package/dist/lib/puck/blocks/general/OrderSummary/render.js +1 -1
  209. package/dist/lib/puck/blocks/general/ParagraphsA/render.js +1 -1
  210. package/dist/lib/puck/blocks/general/PostCard/render.js +1 -1
  211. package/dist/lib/puck/blocks/general/ProcessSteps/render.js +1 -1
  212. package/dist/lib/puck/blocks/general/Series/render.js +1 -1
  213. package/dist/lib/puck/blocks/general/Split/render.js +1 -1
  214. package/dist/lib/puck/blocks/general/Testimonials/fields.js +1 -1
  215. package/dist/lib/puck/blocks/general/Testimonials/render.js +1 -1
  216. package/dist/lib/puck/blocks/general/TimelineTrack/render.js +1 -1
  217. package/dist/lib/puck/blocks/general/index.d.ts +2 -2
  218. package/dist/lib/puck/blocks/placeholders.js +1 -1
  219. package/dist/lib/puck/content-tree.d.ts +2 -43
  220. package/dist/lib/puck/content-tree.js +1 -1
  221. package/dist/lib/puck/controls.d.ts +11 -22
  222. package/dist/lib/puck/controls.js +1 -1
  223. package/dist/lib/puck/device-fields.d.ts +2 -24
  224. package/dist/lib/puck/device-fields.js +1 -1
  225. package/dist/lib/puck/field-buckets.d.ts +2 -0
  226. package/dist/lib/puck/field-buckets.js +1 -0
  227. package/dist/lib/puck/field-groups.d.ts +3 -3
  228. package/dist/lib/puck/field-groups.js +1 -1
  229. package/dist/lib/puck/field-markers.d.ts +2 -16
  230. package/dist/lib/puck/field-markers.js +1 -1
  231. package/dist/lib/puck/footer-block-row-name.d.ts +4 -0
  232. package/dist/lib/puck/footer-block-row-name.js +1 -0
  233. package/dist/lib/puck/footer-blocks.d.ts +2 -10
  234. package/dist/lib/puck/footer-blocks.js +1 -1
  235. package/dist/lib/puck/geocode-resolve.js +1 -1
  236. package/dist/lib/puck/hidable.d.ts +2 -9
  237. package/dist/lib/puck/hidable.js +1 -1
  238. package/dist/lib/puck/locations-tree.js +2 -2
  239. package/dist/lib/puck/neutralization-contracts.js +1 -1
  240. package/dist/lib/puck/palette-sections.d.ts +2 -0
  241. package/dist/lib/puck/palette-sections.js +1 -0
  242. package/dist/lib/puck/panel-fields.d.ts +2 -12
  243. package/dist/lib/puck/panel-fields.js +1 -1
  244. package/dist/lib/puck/panel-no-control-mark.d.ts +2 -7
  245. package/dist/lib/puck/panel-no-control-mark.js +1 -1
  246. package/dist/lib/puck/part-id.d.ts +1 -0
  247. package/dist/lib/puck/part-id.js +1 -0
  248. package/dist/lib/puck/part-rows.js +1 -1
  249. package/dist/lib/puck/pinned-seed-gate.d.ts +2 -12
  250. package/dist/lib/puck/pinned-seed-gate.js +1 -1
  251. package/dist/lib/puck/preview-click.d.ts +1 -2
  252. package/dist/lib/puck/preview-click.js +1 -1
  253. package/dist/lib/puck/preview-dom.d.ts +1 -6
  254. package/dist/lib/puck/preview-dom.js +1 -1
  255. package/dist/lib/puck/preview-events.d.ts +2 -0
  256. package/dist/lib/puck/preview-events.js +1 -0
  257. package/dist/lib/puck/preview-selection-context.d.ts +2 -19
  258. package/dist/lib/puck/preview-selection-context.js +1 -1
  259. package/dist/lib/puck/section-catalog.js +1 -1
  260. package/dist/lib/puck/section-descriptions.js +1 -1
  261. package/dist/lib/puck/section-doc.d.ts +1 -5
  262. package/dist/lib/puck/section-doc.js +1 -1
  263. package/dist/lib/puck/section-groups.d.ts +1 -1
  264. package/dist/lib/puck/slot-child-name.d.ts +2 -8
  265. package/dist/lib/puck/slot-child-name.js +1 -1
  266. package/dist/lib/puck/slot-heal.d.ts +1 -2
  267. package/dist/lib/puck/slot-heal.js +1 -1
  268. package/dist/lib/puck/slot-section-spec.d.ts +1 -0
  269. package/dist/lib/puck/slot-section-spec.js +0 -0
  270. package/dist/lib/puck/slot-specs.d.ts +2 -13
  271. package/dist/lib/puck/style-clipboard.d.ts +1 -19
  272. package/dist/lib/puck/style-clipboard.js +1 -1
  273. package/dist/lib/puck/text-control-kinds.d.ts +2 -13
  274. package/dist/lib/puck/text-control-kinds.js +1 -1
  275. package/dist/lib/puck/text-parts.d.ts +2 -5
  276. package/dist/lib/puck/text-parts.js +1 -1
  277. package/dist/lib/puck/tree-reveal.d.ts +1 -11
  278. package/dist/lib/puck/tree-reveal.js +1 -1
  279. package/dist/lib/puck/use-section-ops.d.ts +2 -25
  280. package/dist/lib/puck/use-section-ops.js +1 -1
  281. package/dist/lib/reel.d.ts +1 -1
  282. package/dist/lib/section-template-types.d.ts +1 -21
  283. package/dist/lib/sections/divider-style.js +1 -1
  284. package/dist/lib/sections/new-section-node.d.ts +2 -0
  285. package/dist/lib/sections/new-section-node.js +1 -0
  286. package/dist/lib/sections/product-card-style.js +1 -1
  287. package/dist/lib/sections/ticker-style.js +1 -1
  288. package/dist/lib/source-rules/accent-token-name.d.ts +20 -0
  289. package/dist/lib/source-rules/accent-token-name.js +4 -0
  290. package/dist/lib/source-rules/button-corners.d.ts +13 -0
  291. package/dist/lib/source-rules/button-corners.js +2 -0
  292. package/dist/lib/source-rules/editor-chrome-note.d.ts +16 -0
  293. package/dist/lib/source-rules/editor-chrome-note.js +13 -0
  294. package/dist/lib/source-rules/editor-context-menu.d.ts +5 -0
  295. package/dist/lib/source-rules/editor-context-menu.js +4 -0
  296. package/dist/lib/source-rules/editor-puck-drag-off.d.ts +8 -0
  297. package/dist/lib/source-rules/editor-puck-drag-off.js +4 -0
  298. package/dist/lib/source-rules/efficient-easel-version.d.ts +9 -0
  299. package/dist/lib/source-rules/efficient-easel-version.js +2 -0
  300. package/dist/lib/source-rules/every-button-follows-the-button-colour.d.ts +12 -0
  301. package/dist/lib/source-rules/every-button-follows-the-button-colour.js +7 -0
  302. package/dist/lib/source-rules/flat-theme-palette.d.ts +10 -0
  303. package/dist/lib/source-rules/flat-theme-palette.js +8 -0
  304. package/dist/lib/source-rules/full-width-means-full.d.ts +8 -0
  305. package/dist/lib/source-rules/full-width-means-full.js +2 -0
  306. package/dist/lib/source-rules/heading-ceiling-sweep.d.ts +11 -0
  307. package/dist/lib/source-rules/heading-ceiling-sweep.js +8 -0
  308. package/dist/lib/source-rules/label-hints.d.ts +7 -0
  309. package/dist/lib/source-rules/label-hints.js +5 -0
  310. package/dist/lib/source-rules/label-vocabulary.d.ts +14 -0
  311. package/dist/lib/source-rules/label-vocabulary.js +5 -0
  312. package/dist/lib/source-rules/mirrored-rows-agree.d.ts +19 -0
  313. package/dist/lib/source-rules/mirrored-rows-agree.js +10 -0
  314. package/dist/lib/source-rules/no-comment-in-jsx.d.ts +9 -0
  315. package/dist/lib/source-rules/no-comment-in-jsx.js +7 -0
  316. package/dist/lib/source-rules/no-glyph-rows.d.ts +15 -0
  317. package/dist/lib/source-rules/no-glyph-rows.js +4 -0
  318. package/dist/lib/source-rules/one-colour-control.d.ts +7 -0
  319. package/dist/lib/source-rules/one-colour-control.js +2 -0
  320. package/dist/lib/source-rules/one-dropdown.d.ts +10 -0
  321. package/dist/lib/source-rules/one-dropdown.js +4 -0
  322. package/dist/lib/source-rules/one-editable-list.d.ts +16 -0
  323. package/dist/lib/source-rules/one-editable-list.js +6 -0
  324. package/dist/lib/source-rules/one-editor-list.d.ts +7 -0
  325. package/dist/lib/source-rules/one-editor-list.js +3 -0
  326. package/dist/lib/source-rules/one-right-click.d.ts +10 -0
  327. package/dist/lib/source-rules/one-right-click.js +2 -0
  328. package/dist/lib/source-rules/one-switch.d.ts +9 -0
  329. package/dist/lib/source-rules/one-switch.js +7 -0
  330. package/dist/lib/source-rules/one-up-level-link.d.ts +16 -0
  331. package/dist/lib/source-rules/one-up-level-link.js +18 -0
  332. package/dist/lib/source-rules/panel-colour-tokens.d.ts +48 -0
  333. package/dist/lib/source-rules/panel-colour-tokens.js +20 -0
  334. package/dist/lib/source-rules/panel-no-divider-lines.d.ts +14 -0
  335. package/dist/lib/source-rules/panel-no-divider-lines.js +10 -0
  336. package/dist/lib/source-rules/panel-one-arrow.d.ts +21 -0
  337. package/dist/lib/source-rules/panel-one-arrow.js +1 -0
  338. package/dist/lib/source-rules/panel-one-hover.d.ts +8 -0
  339. package/dist/lib/source-rules/panel-one-hover.js +2 -0
  340. package/dist/lib/source-rules/panel-rows-use-the-shared-row.d.ts +23 -0
  341. package/dist/lib/source-rules/panel-rows-use-the-shared-row.js +22 -0
  342. package/dist/lib/source-rules/part-slider-fills-row.d.ts +11 -0
  343. package/dist/lib/source-rules/part-slider-fills-row.js +29 -0
  344. package/dist/lib/source-rules/part-style-naming.d.ts +10 -0
  345. package/dist/lib/source-rules/part-style-naming.js +2 -0
  346. package/dist/lib/source-rules/puck-document-surfaces.d.ts +16 -0
  347. package/dist/lib/source-rules/puck-document-surfaces.js +8 -0
  348. package/dist/lib/source-rules/reduced-motion.d.ts +26 -0
  349. package/dist/lib/source-rules/reduced-motion.js +9 -0
  350. package/dist/lib/source-rules/route-content-width.d.ts +22 -0
  351. package/dist/lib/source-rules/route-content-width.js +5 -0
  352. package/dist/lib/source-rules/rule.d.ts +21 -0
  353. package/dist/lib/source-rules/rule.js +1 -0
  354. package/dist/lib/source-rules/section-theme-preview.d.ts +9 -0
  355. package/dist/lib/source-rules/section-theme-preview.js +8 -0
  356. package/dist/lib/source-rules/site-gutter.d.ts +6 -0
  357. package/dist/lib/source-rules/site-gutter.js +4 -0
  358. package/dist/lib/source-rules/site-square-by-default.d.ts +17 -0
  359. package/dist/lib/source-rules/site-square-by-default.js +3 -0
  360. package/dist/lib/source-rules/site-width.d.ts +11 -0
  361. package/dist/lib/source-rules/site-width.js +7 -0
  362. package/dist/lib/source-rules/size-token-paints.d.ts +8 -0
  363. package/dist/lib/source-rules/size-token-paints.js +11 -0
  364. package/dist/lib/source-rules/social-icons-import.d.ts +6 -0
  365. package/dist/lib/source-rules/social-icons-import.js +6 -0
  366. package/dist/lib/source-rules/source-status-is-shared.d.ts +7 -0
  367. package/dist/lib/source-rules/source-status-is-shared.js +1 -0
  368. package/dist/lib/source-rules/style-face-matches-size.d.ts +10 -0
  369. package/dist/lib/source-rules/style-face-matches-size.js +4 -0
  370. package/dist/lib/source-rules/support/accent-rename-bytes.d.ts +5 -0
  371. package/dist/lib/source-rules/support/accent-rename-bytes.js +1 -0
  372. package/dist/lib/source-rules/support/css-box-model.d.ts +5 -0
  373. package/dist/lib/source-rules/support/css-box-model.js +1 -0
  374. package/dist/lib/source-rules/support/css-length.d.ts +2 -0
  375. package/dist/lib/source-rules/support/css-length.js +1 -0
  376. package/dist/lib/source-rules/support/css-rules.d.ts +12 -0
  377. package/dist/lib/source-rules/support/css-rules.js +1 -0
  378. package/dist/lib/source-rules/support/css-source.d.ts +2 -0
  379. package/dist/lib/source-rules/support/css-source.js +3 -0
  380. package/dist/lib/source-rules/support/label-extraction.d.ts +14 -0
  381. package/dist/lib/source-rules/support/label-extraction.js +5 -0
  382. package/dist/lib/source-rules/support/panel-select-cascade.d.ts +72 -0
  383. package/dist/lib/source-rules/support/panel-select-cascade.js +2 -0
  384. package/dist/lib/source-rules/support/part-slider-call-sites.d.ts +9 -0
  385. package/dist/lib/source-rules/support/part-slider-call-sites.js +17 -0
  386. package/dist/lib/source-rules/support/registry-source.d.ts +14 -0
  387. package/dist/lib/source-rules/support/registry-source.js +3 -0
  388. package/dist/lib/source-rules/support/ts-source.d.ts +2 -0
  389. package/dist/lib/source-rules/support/ts-source.js +3 -0
  390. package/dist/lib/source-rules/theme-mode-controls-gone.d.ts +10 -0
  391. package/dist/lib/source-rules/theme-mode-controls-gone.js +5 -0
  392. package/dist/lib/source-rules/upload-intake-guard.d.ts +11 -0
  393. package/dist/lib/source-rules/upload-intake-guard.js +6 -0
  394. package/dist/lib/source-rules/word-styles.d.ts +8 -0
  395. package/dist/lib/source-rules/word-styles.js +4 -0
  396. package/dist/lib/theme-row-persist.js +1 -1
  397. package/dist/lib/theme-save-message.js +1 -1
  398. package/dist/lib/web-backend.d.ts +4 -59
  399. package/dist/lib/web-backend.js +1 -1
  400. package/dist/lib/website-document-addressing.d.ts +2 -0
  401. package/dist/lib/website-document-addressing.js +1 -0
  402. package/dist/lib/website-host-inbound.d.ts +1 -0
  403. package/dist/lib/website-host-inbound.js +1 -0
  404. package/dist/lib/website-session.d.ts +5 -0
  405. package/dist/lib/website-session.js +1 -0
  406. package/package.json +18 -8
package/CHANGELOG.md CHANGED
@@ -1,5 +1,52 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.1.0 - 2026-10-10
4
+
5
+ - **The editor's chrome takes its UI from `efficient-shell`** (#44, harness
6
+ UI-24): the Clear colours and add-page dialogs are the shell's Dialog, the
7
+ duplicate-to-page menu its PopupMenu, the toolbar and theme-card buttons its
8
+ Button and IconButton, the controls' checkbox its Checkbox, the font picker
9
+ easel's FieldSelect, and eleven native tooltips the shell's Tooltip. Their
10
+ own `.sf-cleardlg` and `.sf-dupmenu` sheets are gone.
11
+ - **`dist/` is written in UTF-8.** A character outside ASCII is itself in the
12
+ compiled files, not an escape (`·`, not `\xB7`). A host that builds a
13
+ stylesheet by scanning `dist/` for class names now reads
14
+ `before:content-['·']` as the code writes it, and its sheet has the rule
15
+ (efficient-storefront-blocks builds its editor canvas this way).
16
+ `scripts/verify-dist.mjs` §6 holds it.
17
+ - **Peer dependencies.** `efficient-shell` ^4.145.0 (was ^4.131.0; its Dialog
18
+ role); `react-dom` is no longer one, since nothing here imports it.
19
+
20
+ ## 2.0.0 - 2026-10-10
21
+
22
+ - **The editor's screen comes from `efficient-easel`.** The screen's 67
23
+ modules (the canvas, the side panels, the context menu, the toolbar, the
24
+ document context) live in `efficient-easel/screen` now. Each keeps its path
25
+ here as a re-export under its old names, so `efficient-web-builder/components/
26
+ AddSidePanel` and `.../StorefrontDocumentContext` still import as before. The
27
+ website hands the screen what is its own: its block rules, its panel wiring,
28
+ its toolbar and devices, its left views and rail, its pinned chrome, how a
29
+ block is named and drawn, and how a document is addressed. The screen's
30
+ stylesheet is `efficient-easel/screen.css`, loaded before
31
+ `components/storefront-editor.css`.
32
+ - **Settings rows are easel's.** Every settings row is one `SettingsField` with
33
+ one hint line; the part panel's and the Locations panel's backs are easel's
34
+ up-level link; the text region's Style row opens easel's `FieldSelect`; the
35
+ Link field is easel's shared `LinkPicker`; one Default / Reset part, drawn as
36
+ a revert icon with grey defaults.
37
+ - **Tree-wide rules ship with the package** (`lib/source-rules/`): 41 rules
38
+ over source text, and the N10 label vocabulary, written once here and run by
39
+ each repository over its own files. `typescript` is an optional peer
40
+ dependency, handed in by a repository that runs them.
41
+ - **Breaking.** `components/CornersField`, `components/SideSpaceField` and
42
+ `components/SiteWidthField` export `CORNERS_LABEL`, `SIDE_SPACE_LABEL` and
43
+ `SITE_WIDTH_LABEL` in place of their `*_UNSET_LABEL` constants, and
44
+ `lib/puck/controls` no longer exports `InheritBadge`, `SiteGapInheritBadge`,
45
+ `WidthInheritBadge` or `TypeGlyph` (the Default / Reset part replaced them).
46
+ No other module or export was removed; 81 modules were added.
47
+ - **Peer dependencies.** `efficient-easel` ^0.106.0 (was ^0.101.0), and
48
+ `typescript` ^5, optional.
49
+
3
50
  ## 1.0.0 - 2026-10-07
4
51
 
5
52
  - **`efficient-web-builder` is published from its own repository.** The
package/README.md CHANGED
@@ -111,7 +111,8 @@ pnpm install
111
111
  pnpm run verify
112
112
  ```
113
113
 
114
- `verify` is the typecheck, the boundary check, the build and
114
+ `verify` is the typecheck, the boundary check, the screen rule
115
+ (`scripts/test-screen-in-easel.mjs`, `doc/adr/0004`), the build and
115
116
  `scripts/verify-dist.mjs`, which reads `dist/` as a host would: every file
116
117
  there, every import resolving, every `"use client"` kept, no source in it.
117
118
 
@@ -1,7 +1 @@
1
- import { type BlockChoice } from "../lib/puck/footer-blocks.js";
2
- export default function AddBlockRow({ choices, onPick, open, onToggle, }: {
3
- choices: BlockChoice[];
4
- onPick: (type: string) => void;
5
- open?: boolean;
6
- onToggle?: () => void;
7
- }): import("react").JSX.Element;
1
+ export { default } from "efficient-easel/screen/components/AddBlockRow";
@@ -1 +1 @@
1
- "use client";import{jsx as s,jsxs as n,Fragment as p}from"react/jsx-runtime";import{Fragment as d,useState as u}from"react";import f from"./SectionIcon.js";import{blockRuns as g}from"../lib/puck/footer-blocks.js";function h({choices:o,onPick:m,open:c,onToggle:r}){const[i,a]=u(!1),t=c??i;return n(p,{children:[n("button",{type:"button",className:"sf-add-card","aria-expanded":t,onClick:r??(()=>a(e=>!e)),children:[s("span",{className:"sf-plus sf-plus--sm",children:"+"}),"Add block"]}),t&&s("div",{className:"sf-blockmenu",role:"menu",children:g(o).map(e=>n(d,{children:[e.group&&n("div",{className:"sf-menugroup-head",role:"presentation",children:[s("span",{className:"sf-menugroup-title",children:e.group}),s("span",{className:"sf-menugroup-count",children:e.items.length})]}),e.items.map(l=>n("button",{type:"button",className:"sf-blockmenu-item",role:"menuitem",onClick:()=>{a(!1),m(l.type)},children:[s("span",{className:"sf-chip",children:s(f,{type:l.type,size:13})}),s("span",{className:"sf-row-name",children:l.label})]},l.type))]},e.group??"all"))})]})}export{h as default};
1
+ "use client";import{default as f}from"efficient-easel/screen/components/AddBlockRow";export{f as default};
@@ -1,6 +1 @@
1
- export default function AddChildRow({ label, blocked, onAdd, small, }: {
2
- label: string;
3
- blocked: string | null;
4
- onAdd: () => void;
5
- small?: boolean;
6
- }): import("react").JSX.Element;
1
+ export { default } from "efficient-easel/screen/components/AddChildRow";
@@ -1 +1 @@
1
- "use client";import{jsx as t,jsxs as a}from"react/jsx-runtime";function d({label:l,blocked:s,onAdd:e,small:n=!1}){return a("button",{type:"button",className:"sf-add-card",disabled:s!==null,title:s??void 0,onClick:e,children:[t("span",{className:n?"sf-plus sf-plus--sm":"sf-plus",children:"+"}),l]})}export{d as default};
1
+ "use client";import{default as f}from"efficient-easel/screen/components/AddChildRow";export{f as default};
@@ -1,39 +1,2 @@
1
- import { type DragSession } from "efficient-easel/drag";
2
- import type { SectionTemplate } from "../lib/section-template-types.js";
3
- import { type BlockChoice } from "../lib/puck/footer-blocks.js";
4
- export type AddKey = {
5
- kind: "section";
6
- type: string;
7
- } | {
8
- kind: "template";
9
- template: SectionTemplate;
10
- } | {
11
- kind: "block";
12
- type: string;
13
- };
14
- export declare const sectionKey: (type: string) => string;
15
- export declare const blockKey: (type: string) => string;
16
- export declare const templateKey: (id: string) => string;
17
- export type AddSidePanelProps<I> = {
18
- blocks: {
19
- parentName: string;
20
- choices: BlockChoice[];
21
- } | null;
22
- blocksOnly: boolean;
23
- at?: {
24
- label: string;
25
- onClear: () => void;
26
- };
27
- onAdd: (key: AddKey) => void;
28
- itemFor: (key: AddKey) => I;
29
- session: DragSession<I>;
30
- siteWide?: {
31
- chatEnabled: boolean;
32
- onToggleChat: (on: boolean) => void;
33
- onOpenChat: () => void;
34
- };
35
- onClose: () => void;
36
- onHide?: () => void;
37
- readOnly?: boolean;
38
- };
39
- export default function AddSidePanel<I>({ blocks, blocksOnly, at, onAdd, itemFor, session, siteWide, onClose, onHide, readOnly, }: AddSidePanelProps<I>): import("react").JSX.Element;
1
+ export { blockKey, default, sectionKey, templateKey } from "efficient-easel/screen/components/AddSidePanel";
2
+ export type { AddKey, AddSidePanelProps } from "efficient-easel/screen/components/AddSidePanel";
@@ -1 +1 @@
1
- "use client";import{jsx as s,jsxs as m,Fragment as T}from"react/jsx-runtime";import{useEffect as L,useMemo as g,useState as P}from"react";import{useEasel as j}from"efficient-easel/easel";import{AddPanel as D}from"efficient-easel/drag";import y from"./SectionIcon.js";import _,{PanelModeExit as z}from"./SidePanelHead.js";import{AddIcon as F}from"efficient-easel/icons";import S from"./SectionThumbnail.js";import{sectionTemplates as K}from"../lib/editor-section-templates.js";import{useEditorSession as O}from"../lib/editor-session-context.js";import{buildPaletteSections as B,categoryLabel as H,paletteWithoutPinned as M,pinnedSection as R}from"../lib/puck/add-palette.js";import{blockOfferOf as Y}from"../lib/puck/block-offer.js";import{blockTypesIn as q}from"../lib/puck/block-types-in.js";import{SettingsSwitch as G}from"efficient-easel/panel";import{blockRuns as J}from"../lib/puck/footer-blocks.js";import{SECTION_DESCRIPTIONS as Q}from"../lib/puck/section-descriptions.js";import{labelAtLevel as U}from"../lib/puck/section-catalog.js";const V=o=>`section:${o}`,X=o=>`block:${o}`,Z=o=>`template:${o}`;function W({blocks:o,blocksOnly:l,at:k,onAdd:x,itemFor:w,session:$,siteWide:d,onClose:A,onHide:v,readOnly:C}){const a=j(e=>e.config),h=O(),[p,E]=P([]);L(()=>{let e=!1;const n=Y(h);return K.list().then(c=>{if(e)return;const t=a.components;E(c.filter(i=>i.node?.type&&t[i.node.type]&&(!n||q(i.node).every(n.offers))))}).catch(()=>{}),()=>{e=!0}},[a,h]);const f=g(()=>B(a,Q),[a]),I=e=>U(e,"section",a.components[e]?.label??e),u=e=>({type:V(e.type),label:e.name,cover:s(S,{type:e.type}),title:e.desc?`${e.name} \u2014 ${e.desc}`:`Add ${e.name}`,keywords:[e.alias??"",e.desc,e.type,e.catLabel].filter(Boolean)}),N=g(()=>{const e=[];if(o&&o.choices.length>0&&J(o.choices).forEach((t,i)=>{e.push({title:i===0?`Inside ${o.parentName}${t.group?` \xB7 ${t.group}`:""}`:t.group??"",tiles:t.items.map(r=>({type:X(r.type),label:r.label,icon:s(y,{type:r.type,size:18}),title:`Add ${r.label}`}))})}),l)return e;const n=R(f);n&&e.push({title:"Start blank",tiles:[u(n)]}),p.length>0&&e.push({title:"Your templates",tiles:p.map(t=>({type:Z(t.id),label:t.name,cover:s(S,{type:t.node.type}),keywords:[I(t.node.type),t.node.type]}))});const c=M(f);for(const t of Object.keys(a.categories??{})){const i=c.filter(r=>r.cat===t);i.length!==0&&e.push({title:H(a,t),tiles:i.map(u)})}return e},[o,l,p,f,a]),b=e=>{const n=e.indexOf(":"),c=e.slice(0,n),t=e.slice(n+1);if(c==="section")return{kind:"section",type:t};if(c==="block")return{kind:"block",type:t};if(c==="template"){const i=p.find(r=>r.id===t);return i?{kind:"template",template:i}:null}return null};return m(T,{children:[s(_,{icon:s(F,{size:15}),title:"Add",context:l?"Blocks for this place":"Sections and blocks",actions:s(z,{label:"Done",description:"Close Add and go back",onClick:A}),onHide:v}),m("div",{className:"sf-addside sf-scroll",children:[s(D,{groups:N,session:$,itemFor:e=>w(b(e)??{kind:"section",type:e}),onInsert:e=>{const n=b(e);n&&x(n)},at:k,hint:l?"Drag into the page, or click to add.":"Drag onto the page, or click to add.",searchLabel:l?"Search blocks":"Search sections",readOnly:C}),d&&!l?m("div",{className:"sf-addside-sitewide",children:[s("span",{className:"sf-addside-sitewide-glyph","aria-hidden":"true",children:s(y,{type:"chat",size:16})}),m("button",{type:"button",className:"sf-addside-sitewide-name",onClick:d.onOpenChat,children:["Live chat",s("span",{className:"sf-addside-sitewide-desc",children:"A chat bubble on every page"})]}),s(G,{checked:d.chatEnabled,onChange:d.onToggleChat,ariaLabel:"Show the chat bubble on the whole site"})]}):null]})]})}export{X as blockKey,W as default,V as sectionKey,Z as templateKey};
1
+ "use client";import{blockKey as l,default as o,sectionKey as c,templateKey as y}from"efficient-easel/screen/components/AddSidePanel";export{l as blockKey,o as default,c as sectionKey,y as templateKey};
@@ -1 +1 @@
1
- "use client";import{jsx as t}from"react/jsx-runtime";import{SettingsField as l}from"efficient-easel/panel";import{PartResetDot as s}from"./PartResetDot.js";import{AlignSeparateIcon as c}from"efficient-easel/icons";import{CONTAINER_GAP_BUILT_IN as m,SITE_BLOCK_GAP as a}from"../lib/content/container-gap.js";import{Slider as p}from"../lib/puck/controls.js";const d="The space between the blocks inside a row, a grid or a box. Not set means each one keeps the spacing it already has.",n="Block gap",f=m.Grid;function _({value:o,onChange:i,showHint:r=!0}){const e=o===null;return t(l,{label:n,labelId:"sf-block-gap",icon:t(c,{}),value:e?"Not set":`${o}px`,changed:!e,action:e?void 0:t(s,{label:n,what:"change",onClear:()=>i(null)}),hint:r?d:void 0,children:t(p,{min:a.min,max:a.max,step:a.step,value:e?f:o,readout:!1,ariaLabel:n,onChange:i})})}export{_ as default};
1
+ "use client";import{jsx as a}from"react/jsx-runtime";import{SettingsDefaultReset as s,SettingsField as r}from"efficient-easel/panel";import{AlignSeparateIcon as c}from"efficient-easel/icons";import{CONTAINER_GAP_BUILT_IN as d,SITE_BLOCK_GAP as t}from"../lib/content/container-gap.js";import{Slider as p}from"../lib/puck/controls.js";const m="The space between the blocks inside a row, a grid or a box. Default means each one keeps the spacing it already has.",o="Block gap",f=d.Grid;function u({value:n,onChange:i,showHint:l=!0}){const e=n===null;return a(r,{label:o,labelId:"sf-block-gap",icon:a(c,{}),value:e?void 0:`${n}px`,changed:!e,action:a(s,{label:o,changed:!e,detail:"each block's own spacing",onReset:()=>i(null)}),hint:l?m:void 0,children:a(p,{min:t.min,max:t.max,step:t.step,value:e?f:n,readout:!1,ariaLabel:o,onChange:i})})}export{u as default};
@@ -1 +1 @@
1
- "use client";import{jsx as e,Fragment as u,jsxs as c}from"react/jsx-runtime";import{useContext as B}from"react";import{SettingsField as g}from"efficient-easel/panel";import{FieldSelect as d}from"efficient-easel/fields";import{BlogPostIcon as f}from"efficient-easel/icons";import{StorefrontDocumentContext as x}from"./StorefrontDocumentContext.js";import{loadStorefrontBlogPosts as N}from"./useStorefrontBlogPosts.js";import{useSnapshotSource as L}from"./useSnapshotSource.js";import P from"./SourceStatus.js";function T(o){if(!o)return"";const t=new Date(o);return Number.isNaN(t.getTime())?"":t.toLocaleDateString("en-US",{year:"numeric",month:"short",day:"2-digit"})}function m(o){return{slug:o.slug,image:o.coverImage,title:o.title,dek:o.excerpt,date:T(o.publishedAt),href:o.href}}function C({value:o,onChange:t}){const r=B(x);return r&&!r.capabilities.hasBlog?o?.slug?e(D,{value:o,onChange:t}):e(u,{}):e(F,{value:o,onChange:t})}function D({value:o,onChange:t}){return c("div",{children:[e(g,{label:"Blog post source",icon:e(f,{}),children:e(d,{value:o.slug,ariaLabel:"Blog post source",onChange:r=>r?void 0:t(null),options:[{label:"None (manual)",value:""},{label:o.title||o.slug,value:o.slug}]})}),e("p",{className:"sf-blogsource-hint",style:{marginTop:7},children:"Linked to a blog post. This editor has no blog to pick another from; choose \u201CNone (manual)\u201D to author the section yourself."})]})}function F({value:o,onChange:t}){const{rows:r,loading:h,refreshing:l,errored:a,refresh:p}=L({load:N,resolve:(s,n)=>s.find(i=>i.slug===n.slug),snapshot:m,value:o,onChange:t}),b=s=>{if(!s){t(null);return}const n=(r??[]).find(i=>i.slug===s);n&&t(m(n))},S=o?.slug&&!(r??[]).some(s=>s.slug===o.slug),k=a?"error":l?"loading":"idle",y=a?"Couldn\u2019t reach Storefront \u2192 Blog.":l?"Syncing from Storefront \u2192 Blog\u2026":`Linked to \u201C${o?.title||o?.slug||""}\u201D`;return c("div",{children:[e(g,{label:"Blog post source",icon:e(f,{}),children:e(d,{value:o?.slug??"",ariaLabel:"Blog post source",onChange:b,readOnly:h,options:[{label:"None (manual)",value:""},...S?[{label:`${o.title||o.slug} (unavailable)`,value:o.slug}]:[],...(r??[]).map(s=>({label:s.title,value:s.slug}))]})}),o?.slug?e(P,{status:k,statusText:y,onRefresh:p,busy:l,hint:e(u,{children:"Auto-fills the cover image, headline, dek, date and link from this post each time you open the editor. Those fields are hidden while a post is linked; the remaining fields stay yours to set."})}):e("p",{className:"sf-blogsource-hint",style:{marginTop:7},children:"Pick a post from Storefront \u2192 Blog to auto-fill this section, or keep \u201CNone (manual)\u201D to author it yourself below."})]})}export{C as default};
1
+ "use client";import{jsx as t,Fragment as l,jsxs as B}from"react/jsx-runtime";import{useContext as y}from"react";import{SettingsField as c}from"efficient-easel/panel";import{FieldSelect as d}from"efficient-easel/fields";import{BlogPostIcon as g}from"efficient-easel/icons";import{StorefrontDocumentContext as x}from"./StorefrontDocumentContext.js";import{loadStorefrontBlogPosts as L}from"./useStorefrontBlogPosts.js";import{useSnapshotSource as N}from"./useSnapshotSource.js";import P from"./SourceStatus.js";function C(o){if(!o)return"";const e=new Date(o);return Number.isNaN(e.getTime())?"":e.toLocaleDateString("en-US",{year:"numeric",month:"short",day:"2-digit"})}function f(o){return{slug:o.slug,image:o.coverImage,title:o.title,dek:o.excerpt,date:C(o.publishedAt),href:o.href}}function D({value:o,onChange:e}){const r=y(x);return r&&!r.capabilities.hasBlog?o?.slug?t(F,{value:o,onChange:e}):t(l,{}):t(T,{value:o,onChange:e})}function F({value:o,onChange:e}){return t("div",{children:t(c,{label:"Blog post source",icon:t(g,{}),hint:t(l,{children:"Linked to a blog post. This editor has no blog to pick another from; choose “None (manual)” to author the section yourself."}),children:t(d,{value:o.slug,ariaLabel:"Blog post source",onChange:r=>r?void 0:e(null),options:[{label:"None (manual)",value:""},{label:o.title||o.slug,value:o.slug}]})})})}function T({value:o,onChange:e}){const{rows:r,loading:h,refreshing:i,errored:u,refresh:m}=N({load:L,resolve:(n,s)=>n.find(a=>a.slug===s.slug),snapshot:f,value:o,onChange:e}),p=n=>{if(!n){e(null);return}const s=(r??[]).find(a=>a.slug===n);s&&e(f(s))},b=o?.slug&&!(r??[]).some(n=>n.slug===o.slug),S=u?"error":i?"loading":"idle",k=u?"Couldn’t reach Storefront → Blog.":i?"Syncing from Storefront → Blog…":`Linked to “${o?.title||o?.slug||""}”`;return B("div",{children:[t(c,{label:"Blog post source",icon:t(g,{}),hint:o?.slug?void 0:t(l,{children:"Pick a post from Storefront → Blog to auto-fill this section, or keep “None (manual)” to author it yourself below."}),children:t(d,{value:o?.slug??"",ariaLabel:"Blog post source",onChange:p,readOnly:h,options:[{label:"None (manual)",value:""},...b?[{label:`${o.title||o.slug} (unavailable)`,value:o.slug}]:[],...(r??[]).map(n=>({label:n.title,value:n.slug}))]})}),o?.slug?t(P,{status:S,statusText:k,onRefresh:m,busy:i,hint:t(l,{children:"Auto-fills the cover image, headline, dek, date and link from this post each time you open the editor. Those fields are hidden while a post is linked; the remaining fields stay yours to set."})}):null]})}export{D as default};
@@ -1 +1 @@
1
- import{jsx as r,jsxs as s,Fragment as c}from"react/jsx-runtime";import{Fragment as f}from"react";import{SiteLink as x}from"../lib/site-runtime.js";import{renderChrome as m,renderGold as d}from"./goldPhrases.js";function h({items:p,meta:n,editing:o=!1}){const l=(p??[]).filter(e=>e?.label?.trim()),t=l.length>0?l:o?[{label:"Breadcrumb"}]:[];return t.length===0&&!n?null:s("nav",{className:"flex items-center gap-4 border-b border-line px-[var(--sf-site-gutter,40px)] py-6 font-mono text-[length:var(--size-label,13px)] uppercase tracking-[0.2em] text-fg-dim max-[720px]:px-[min(20px,var(--sf-site-gutter,40px))] max-[720px]:py-4",children:[t.map((e,a)=>{const i=a===t.length-1;return s(f,{children:[a>0&&r("span",{className:"opacity-40",children:"/"}),e.href&&!i?r(x,{href:e.href,className:"hover:text-fg",children:m(e.label)}):r("span",{className:i?"text-fg":void 0,children:m(e.label)})]},a)}),n&&s(c,{children:[r("span",{className:"opacity-40",children:"\xB7"}),r("span",{children:d(n)})]})]})}export{h as default};
1
+ import{jsx as r,jsxs as s,Fragment as c}from"react/jsx-runtime";import{Fragment as f}from"react";import{SiteLink as x}from"../lib/site-runtime.js";import{renderChrome as m,renderGold as d}from"./goldPhrases.js";function h({items:p,meta:n,editing:o=!1}){const l=(p??[]).filter(e=>e?.label?.trim()),t=l.length>0?l:o?[{label:"Breadcrumb"}]:[];return t.length===0&&!n?null:s("nav",{className:"flex items-center gap-4 border-b border-line px-[var(--sf-site-gutter,40px)] py-6 font-mono text-[length:var(--size-label,13px)] uppercase tracking-[0.2em] text-fg-dim max-[720px]:px-[min(20px,var(--sf-site-gutter,40px))] max-[720px]:py-4",children:[t.map((e,a)=>{const i=a===t.length-1;return s(f,{children:[a>0&&r("span",{className:"opacity-40",children:"/"}),e.href&&!i?r(x,{href:e.href,className:"hover:text-fg",children:m(e.label)}):r("span",{className:i?"text-fg":void 0,children:m(e.label)})]},a)}),n&&s(c,{children:[r("span",{className:"opacity-40",children:"·"}),r("span",{children:d(n)})]})]})}export{h as default};
@@ -1 +1 @@
1
- import{jsx as r,Fragment as h,jsxs as u}from"react/jsx-runtime";import{SiteLink as f}from"../lib/site-runtime.js";const g="sf-button group inline-flex items-center justify-center gap-2.5 border px-[22px] py-4 font-mono text-[length:var(--size-label,14px)] uppercase tracking-[0.2em] transition-colors",o={primary:"border-btn bg-btn text-btn-ink hover:border-btn-2 hover:bg-btn-2",ghost:"border-current bg-transparent hover:bg-white/10"};function x(i){const{variant:l="primary",arrow:e,className:c,style:t,children:p,href:n,newTab:b,...m}=i,s=`${g} ${o[l]??o.primary} ${c??""}`,a=u(h,{children:[p,e!==null&&r("span",{"aria-hidden":!0,className:"transition-transform group-hover:translate-x-[3px]",children:e??"\u2192"})]});return n?r(f,{href:n,className:s,style:t,...b?{target:"_blank",rel:"noopener noreferrer"}:{},children:a}):r("button",{type:"button",className:s,style:t,...m,children:a})}export{x as default};
1
+ import{jsx as r,Fragment as h,jsxs as u}from"react/jsx-runtime";import{SiteLink as f}from"../lib/site-runtime.js";const g="sf-button group inline-flex items-center justify-center gap-2.5 border px-[22px] py-4 font-mono text-[length:var(--size-label,14px)] uppercase tracking-[0.2em] transition-colors",o={primary:"border-btn bg-btn text-btn-ink hover:border-btn-2 hover:bg-btn-2",ghost:"border-current bg-transparent hover:bg-white/10"};function x(i){const{variant:l="primary",arrow:e,className:c,style:t,children:p,href:n,newTab:b,...m}=i,s=`${g} ${o[l]??o.primary} ${c??""}`,a=u(h,{children:[p,e!==null&&r("span",{"aria-hidden":!0,className:"transition-transform group-hover:translate-x-[3px]",children:e??"→"})]});return n?r(f,{href:n,className:s,style:t,...b?{target:"_blank",rel:"noopener noreferrer"}:{},children:a}):r("button",{type:"button",className:s,style:t,...m,children:a})}export{x as default};
@@ -1 +1 @@
1
- "use client";import{jsx as e}from"react/jsx-runtime";import{SettingsField as i,SettingsSegmented as l}from"efficient-easel/panel";import{ShadowIcon as p}from"efficient-easel/icons";import{CARD_SHADOWS as c,DEFAULT_CARD_SHADOW as f}from"../lib/theme.js";import{PartResetDot as S}from"./PartResetDot.js";import{SITE_STYLE_UNSET_LABEL as h}from"./SiteStyleUnset.js";const s={none:"None",soft:"Soft",lifted:"Lifted"},x="Applies to cards \u2014 products, brands, journal entries and filter cells. Round things like swatches and status dots are never shadowed.",m={none:"none",soft:"0 1px 1px rgba(20, 20, 22, 0.10), 0 2px 4px -1px rgba(20, 20, 22, 0.14)",lifted:"0 1px 2px rgba(20, 20, 22, 0.10), 0 4px 7px -2px rgba(20, 20, 22, 0.30)"},u={labelsPx:90.25,widestLabelPx:34.6};function A({value:t,onChange:a,showHint:r=!0}){const o=t===null,d=t??f;return e(i,{label:"Card shadow",icon:e(p,{}),value:o?h:s[t],changed:!o,action:o?void 0:e(S,{label:"Card shadow",what:"change",onClear:()=>a(null)}),hint:r?x:void 0,children:e(l,{options:c.map(n=>({id:n,label:s[n],icon:e("span",{className:"sf-shadow-chip",style:{boxShadow:m[n]}})})),value:d,ariaLabel:"Card shadow",fit:u,onChange:a})})}export{A as default};
1
+ "use client";import{jsx as e}from"react/jsx-runtime";import{SettingsDefaultReset as r,SettingsField as c,SettingsSegmented as p}from"efficient-easel/panel";import{ShadowIcon as f}from"efficient-easel/icons";import{CARD_SHADOWS as x,DEFAULT_CARD_SHADOW as i}from"../lib/theme.js";const n={none:"None",soft:"Soft",lifted:"Lifted"},h="Applies to cards — products, brands, journal entries and filter cells. Round things like swatches and status dots are never shadowed.",u={none:"none",soft:"0 1px 1px rgba(20, 20, 22, 0.10), 0 2px 4px -1px rgba(20, 20, 22, 0.14)",lifted:"0 1px 2px rgba(20, 20, 22, 0.10), 0 4px 7px -2px rgba(20, 20, 22, 0.30)"},S={labelsPx:90.25,widestLabelPx:34.6};function b({value:a,onChange:o,showHint:l=!0}){const s=a===null,d=a??i;return e(c,{label:"Card shadow",icon:e(f,{}),value:n[d],changed:!s,action:e(r,{label:"Card shadow",changed:!s,detail:n[i],onReset:()=>o(null)}),hint:l?h:void 0,children:e(p,{options:x.map(t=>({id:t,label:n[t],icon:e("span",{className:"sf-shadow-chip",style:{boxShadow:u[t]}})})),value:d,ariaLabel:"Card shadow",fit:S,onChange:o})})}export{b as default};
@@ -1 +1 @@
1
- import{jsx as r,jsxs as n}from"react/jsx-runtime";import{SiteLink as g}from"../lib/site-runtime.js";import{renderChrome as l}from"./goldPhrases.js";import{STICKY_UNDERHEADER_CLASS as u}from"../lib/puck/header-clearance.js";function v({tabs:m,activeTab:o,links:d,sticky:b=!0,editing:h=!1}){const i=(m??[]).filter(e=>e?.label?.trim()),a=i.length>0?i:h?[{label:"Tab"}]:[],s=(d??[]).filter(e=>e?.label?.trim());if(a.length===0&&s.length===0)return null;const c=o?a.findIndex(e=>e.label.toLowerCase()===o.toLowerCase()):-1,f=c===-1?0:c;return r("nav",{className:`${b?`${u} sticky top-[var(--sf-header-h,88px)] z-40 `:""}border-b border-line px-[var(--sf-site-gutter,40px)] backdrop-blur-md max-[1100px]:px-[min(16px,var(--sf-site-gutter,40px))]`,style:{background:"color-mix(in oklab, var(--bg) 92%, transparent)"},children:n("div",{className:"mx-auto flex max-w-[calc(var(--sf-site-width,1600px)_-_var(--sf-site-gutter,40px)*2)] items-stretch gap-0 overflow-auto [scrollbar-width:none] [&::-webkit-scrollbar]:hidden",children:[a.map((e,t)=>{const p=t===f,x=e.count?.trim()?e.count:"";return n("span",{className:["relative whitespace-nowrap border-r border-line px-[22px] py-[18px] font-mono text-[length:var(--size-label,13px)] uppercase tracking-[0.22em] transition-colors",t===0?"border-l border-line":"",p?"text-fg":"text-fg-dim hover:text-fg"].join(" "),children:[l(e.label),x&&r("span",{className:"ml-2 text-[length:var(--size-body,12px)] text-accent opacity-70",children:l(x)}),p&&r("span",{className:"absolute inset-x-0 -bottom-px h-[2px] bg-accent"})]},t)}),s.length>0&&r("div",{className:"ml-auto flex border-l border-line",children:s.map((e,t)=>n(g,{href:e.href||"#",className:"flex items-center gap-2.5 px-[22px] py-[18px] font-mono text-[length:var(--size-label,13px)] uppercase tracking-[0.22em] text-fg-dim hover:text-fg",children:[l(e.label)," ",r("span",{className:"text-accent",children:"\u2197"})]},t))})]})})}export{v as default};
1
+ import{jsx as r,jsxs as n}from"react/jsx-runtime";import{SiteLink as g}from"../lib/site-runtime.js";import{renderChrome as l}from"./goldPhrases.js";import{STICKY_UNDERHEADER_CLASS as u}from"../lib/puck/header-clearance.js";function v({tabs:m,activeTab:o,links:d,sticky:b=!0,editing:h=!1}){const i=(m??[]).filter(e=>e?.label?.trim()),a=i.length>0?i:h?[{label:"Tab"}]:[],s=(d??[]).filter(e=>e?.label?.trim());if(a.length===0&&s.length===0)return null;const c=o?a.findIndex(e=>e.label.toLowerCase()===o.toLowerCase()):-1,f=c===-1?0:c;return r("nav",{className:`${b?`${u} sticky top-[var(--sf-header-h,88px)] z-40 `:""}border-b border-line px-[var(--sf-site-gutter,40px)] backdrop-blur-md max-[1100px]:px-[min(16px,var(--sf-site-gutter,40px))]`,style:{background:"color-mix(in oklab, var(--bg) 92%, transparent)"},children:n("div",{className:"mx-auto flex max-w-[calc(var(--sf-site-width,1600px)_-_var(--sf-site-gutter,40px)*2)] items-stretch gap-0 overflow-auto [scrollbar-width:none] [&::-webkit-scrollbar]:hidden",children:[a.map((e,t)=>{const p=t===f,x=e.count?.trim()?e.count:"";return n("span",{className:["relative whitespace-nowrap border-r border-line px-[22px] py-[18px] font-mono text-[length:var(--size-label,13px)] uppercase tracking-[0.22em] transition-colors",t===0?"border-l border-line":"",p?"text-fg":"text-fg-dim hover:text-fg"].join(" "),children:[l(e.label),x&&r("span",{className:"ml-2 text-[length:var(--size-body,12px)] text-accent opacity-70",children:l(x)}),p&&r("span",{className:"absolute inset-x-0 -bottom-px h-[2px] bg-accent"})]},t)}),s.length>0&&r("div",{className:"ml-auto flex border-l border-line",children:s.map((e,t)=>n(g,{href:e.href||"#",className:"flex items-center gap-2.5 px-[22px] py-[18px] font-mono text-[length:var(--size-label,13px)] uppercase tracking-[0.22em] text-fg-dim hover:text-fg",children:[l(e.label)," ",r("span",{className:"text-accent",children:"↗"})]},t))})]})})}export{v as default};
@@ -1 +1 @@
1
- import{jsx as a,jsxs as o}from"react/jsx-runtime";import{renderGold as u,renderHeadline as y}from"./goldPhrases.js";function g(e){return Number.isInteger(e)?String(e):String(Math.round(e*10)/10)}const v=[100,70,46,30,19,12];function b(e){return`color-mix(in srgb, var(--accent) ${v[e%v.length]}%, var(--bg))`}function N({data:e,suffix:x}){const h=Math.max(...e.map(m=>m.value),0)||1;return a("div",{className:"flex w-full flex-col gap-6",children:e.map((m,t)=>o("div",{children:[o("div",{className:"mb-2 flex items-baseline justify-between gap-4",children:[a("span",{className:"font-mono text-[length:var(--size-label,11px)] uppercase tracking-[0.14em] text-fg/60",children:u(m.label)}),o("span",{className:"font-display text-[length:var(--size-body,16px)] font-medium text-fg",children:[g(m.value),x]})]}),a("div",{className:"h-[10px] border border-line bg-bg",children:a("div",{className:"h-full bg-accent",style:{width:`${Math.max(m.value/h*100,m.value===0?0:2)}%`}})})]},t))})}function k({data:e,suffix:x}){const t={l:42,r:42,t:36,b:38},f=640-t.l-t.r,c=300-t.t-t.b,n=Math.max(...e.map(l=>l.value),0)||1,s=e.length>1?f/(e.length-1):0,i=e.map((l,r)=>({x:t.l+(e.length>1?r*s:f/2),y:t.t+c-l.value/n*c})),d=i.map((l,r)=>`${r===0?"M":"L"}${l.x},${l.y}`).join(" "),p=`${d} L${i[i.length-1].x},${t.t+c} L${i[0].x},${t.t+c} Z`;return o("svg",{viewBox:"0 0 640 300",className:"w-full",role:"img","aria-hidden":!0,children:[[.25,.5,.75,1].map(l=>a("line",{x1:t.l,x2:640-t.r,y1:t.t+c*(1-l),y2:t.t+c*(1-l),stroke:"var(--line)",strokeWidth:"1"},l)),a("line",{x1:t.l,x2:640-t.r,y1:t.t+c,y2:t.t+c,stroke:"var(--line)",strokeWidth:"1.5"}),a("path",{d:p,fill:"var(--accent)",opacity:"0.13"}),a("path",{d,fill:"none",stroke:"var(--accent)",strokeWidth:"2.5"}),i.map((l,r)=>o("g",{children:[a("circle",{cx:l.x,cy:l.y,r:"4",fill:"var(--accent)"}),o("text",{x:l.x,y:l.y-12,textAnchor:"middle",className:"font-display",fontSize:"14",fill:"var(--fg)",children:[g(e[r].value),x]}),a("text",{x:l.x,y:288,textAnchor:"middle",className:"font-mono",fontSize:"10",letterSpacing:"0.1em",fill:"var(--fg)",opacity:"0.55",children:e[r].label.toUpperCase()})]},r))]})}function $({data:e,suffix:x}){const h=e.reduce((n,s)=>n+s.value,0)||1,m=80,t=2*Math.PI*m;let f=0;const c=e.map((n,s)=>{const i=n.value/h,d={frac:i,dash:Math.max(i*t-3,0),off:f,ink:b(s)};return f+=i*t,d});return o("div",{className:"flex w-full flex-wrap items-center justify-center gap-10",children:[a("svg",{viewBox:"0 0 200 200",className:"w-[220px] max-w-full -rotate-90",role:"img","aria-hidden":!0,children:c.map((n,s)=>a("circle",{cx:"100",cy:"100",r:m,fill:"none",stroke:n.ink,strokeWidth:"34",strokeDasharray:`${n.dash} ${t-n.dash}`,strokeDashoffset:-n.off},s))}),a("ul",{className:"flex min-w-[200px] flex-1 flex-col gap-3",children:e.map((n,s)=>o("li",{className:"flex items-baseline gap-3",children:[a("span",{"aria-hidden":!0,className:"h-[10px] w-[10px] flex-shrink-0 rotate-45",style:{background:b(s)}}),a("span",{className:"flex-1 font-mono text-[length:var(--size-label,11px)] uppercase tracking-[0.12em] text-fg/60",children:u(n.label)}),a("span",{className:"font-display text-[length:var(--size-body,15px)] font-medium text-fg",children:x?`${g(n.value)}${x}`:`${Math.round(n.value/h*100)}%`})]},s))})]})}function w({eyebrow:e,title:x,body:h,chartStyle:m,items:t,valueSuffix:f,caption:c,editing:n=!1}={}){const s=(f??"").trim()===""?"":f??"",i=(t??[]).map(r=>({label:(r.label??"").trim(),value:parseFloat(r.value??"")})).filter(r=>n?!0:r.label&&Number.isFinite(r.value)).map(r=>({label:r.label||"\u2014",value:Number.isFinite(r.value)?r.value:0})),d=!!(e??"").trim()||!!(x??"").trim();if(!n&&!d&&i.length===0)return null;const p=m??"bars",l=i.length===0?null:p==="line"&&i.length>1?a(k,{data:i,suffix:s}):p==="donut"?a($,{data:i,suffix:s}):a(N,{data:i,suffix:s});return a("section",{className:"relative z-[2] border-y border-line bg-surface",children:o("div",{className:"mx-auto grid max-w-[var(--sf-site-width,1600px)] items-center gap-14 px-[var(--sf-site-gutter,40px)] py-[76px] min-[960px]:[grid-template-columns:minmax(0,5fr)_minmax(0,7fr)] max-[960px]:px-[min(24px,var(--sf-site-gutter,40px))]",children:[o("div",{children:[(e??"").trim()&&a("span",{className:"inline-block bg-accent px-3.5 py-1.5 font-mono text-[length:var(--size-label,12px)] font-semibold uppercase tracking-[0.16em] text-bg",children:u(e??"")}),(x??"").trim()&&a("h2",{className:"mt-5 font-heading2 text-[length:min(var(--size-headingMedium,44px),var(--sf-heading-max,9999px))] font-medium uppercase leading-[1.04] tracking-[-0.02em] text-fg max-[800px]:text-[length:min(var(--size-headingMedium,32px),var(--sf-heading-max,9999px))]",children:y(x??"",!1)}),(h??"").trim()&&a("p",{className:"mt-5 max-w-[46ch] text-[length:var(--size-body,15px)] leading-relaxed text-fg/65",children:h})]}),o("div",{children:[l,(c??"").trim()&&a("p",{className:"mt-4 font-mono text-[length:var(--size-label,10px)] uppercase tracking-[0.14em] text-fg/40",children:c})]})]})})}export{w as default};
1
+ import{jsx as a,jsxs as o}from"react/jsx-runtime";import{renderGold as u,renderHeadline as y}from"./goldPhrases.js";function g(e){return Number.isInteger(e)?String(e):String(Math.round(e*10)/10)}const v=[100,70,46,30,19,12];function b(e){return`color-mix(in srgb, var(--accent) ${v[e%v.length]}%, var(--bg))`}function N({data:e,suffix:x}){const h=Math.max(...e.map(m=>m.value),0)||1;return a("div",{className:"flex w-full flex-col gap-6",children:e.map((m,t)=>o("div",{children:[o("div",{className:"mb-2 flex items-baseline justify-between gap-4",children:[a("span",{className:"font-mono text-[length:var(--size-label,11px)] uppercase tracking-[0.14em] text-fg/60",children:u(m.label)}),o("span",{className:"font-display text-[length:var(--size-body,16px)] font-medium text-fg",children:[g(m.value),x]})]}),a("div",{className:"h-[10px] border border-line bg-bg",children:a("div",{className:"h-full bg-accent",style:{width:`${Math.max(m.value/h*100,m.value===0?0:2)}%`}})})]},t))})}function k({data:e,suffix:x}){const t={l:42,r:42,t:36,b:38},f=640-t.l-t.r,c=300-t.t-t.b,n=Math.max(...e.map(l=>l.value),0)||1,s=e.length>1?f/(e.length-1):0,i=e.map((l,r)=>({x:t.l+(e.length>1?r*s:f/2),y:t.t+c-l.value/n*c})),d=i.map((l,r)=>`${r===0?"M":"L"}${l.x},${l.y}`).join(" "),p=`${d} L${i[i.length-1].x},${t.t+c} L${i[0].x},${t.t+c} Z`;return o("svg",{viewBox:"0 0 640 300",className:"w-full",role:"img","aria-hidden":!0,children:[[.25,.5,.75,1].map(l=>a("line",{x1:t.l,x2:640-t.r,y1:t.t+c*(1-l),y2:t.t+c*(1-l),stroke:"var(--line)",strokeWidth:"1"},l)),a("line",{x1:t.l,x2:640-t.r,y1:t.t+c,y2:t.t+c,stroke:"var(--line)",strokeWidth:"1.5"}),a("path",{d:p,fill:"var(--accent)",opacity:"0.13"}),a("path",{d,fill:"none",stroke:"var(--accent)",strokeWidth:"2.5"}),i.map((l,r)=>o("g",{children:[a("circle",{cx:l.x,cy:l.y,r:"4",fill:"var(--accent)"}),o("text",{x:l.x,y:l.y-12,textAnchor:"middle",className:"font-display",fontSize:"14",fill:"var(--fg)",children:[g(e[r].value),x]}),a("text",{x:l.x,y:288,textAnchor:"middle",className:"font-mono",fontSize:"10",letterSpacing:"0.1em",fill:"var(--fg)",opacity:"0.55",children:e[r].label.toUpperCase()})]},r))]})}function $({data:e,suffix:x}){const h=e.reduce((n,s)=>n+s.value,0)||1,m=80,t=2*Math.PI*m;let f=0;const c=e.map((n,s)=>{const i=n.value/h,d={frac:i,dash:Math.max(i*t-3,0),off:f,ink:b(s)};return f+=i*t,d});return o("div",{className:"flex w-full flex-wrap items-center justify-center gap-10",children:[a("svg",{viewBox:"0 0 200 200",className:"w-[220px] max-w-full -rotate-90",role:"img","aria-hidden":!0,children:c.map((n,s)=>a("circle",{cx:"100",cy:"100",r:m,fill:"none",stroke:n.ink,strokeWidth:"34",strokeDasharray:`${n.dash} ${t-n.dash}`,strokeDashoffset:-n.off},s))}),a("ul",{className:"flex min-w-[200px] flex-1 flex-col gap-3",children:e.map((n,s)=>o("li",{className:"flex items-baseline gap-3",children:[a("span",{"aria-hidden":!0,className:"h-[10px] w-[10px] flex-shrink-0 rotate-45",style:{background:b(s)}}),a("span",{className:"flex-1 font-mono text-[length:var(--size-label,11px)] uppercase tracking-[0.12em] text-fg/60",children:u(n.label)}),a("span",{className:"font-display text-[length:var(--size-body,15px)] font-medium text-fg",children:x?`${g(n.value)}${x}`:`${Math.round(n.value/h*100)}%`})]},s))})]})}function w({eyebrow:e,title:x,body:h,chartStyle:m,items:t,valueSuffix:f,caption:c,editing:n=!1}={}){const s=(f??"").trim()===""?"":f??"",i=(t??[]).map(r=>({label:(r.label??"").trim(),value:parseFloat(r.value??"")})).filter(r=>n?!0:r.label&&Number.isFinite(r.value)).map(r=>({label:r.label||"—",value:Number.isFinite(r.value)?r.value:0})),d=!!(e??"").trim()||!!(x??"").trim();if(!n&&!d&&i.length===0)return null;const p=m??"bars",l=i.length===0?null:p==="line"&&i.length>1?a(k,{data:i,suffix:s}):p==="donut"?a($,{data:i,suffix:s}):a(N,{data:i,suffix:s});return a("section",{className:"relative z-[2] border-y border-line bg-surface",children:o("div",{className:"mx-auto grid max-w-[var(--sf-site-width,1600px)] items-center gap-14 px-[var(--sf-site-gutter,40px)] py-[76px] min-[960px]:[grid-template-columns:minmax(0,5fr)_minmax(0,7fr)] max-[960px]:px-[min(24px,var(--sf-site-gutter,40px))]",children:[o("div",{children:[(e??"").trim()&&a("span",{className:"inline-block bg-accent px-3.5 py-1.5 font-mono text-[length:var(--size-label,12px)] font-semibold uppercase tracking-[0.16em] text-bg",children:u(e??"")}),(x??"").trim()&&a("h2",{className:"mt-5 font-heading2 text-[length:min(var(--size-headingMedium,44px),var(--sf-heading-max,9999px))] font-medium uppercase leading-[1.04] tracking-[-0.02em] text-fg max-[800px]:text-[length:min(var(--size-headingMedium,32px),var(--sf-heading-max,9999px))]",children:y(x??"",!1)}),(h??"").trim()&&a("p",{className:"mt-5 max-w-[46ch] text-[length:var(--size-body,15px)] leading-relaxed text-fg/65",children:h})]}),o("div",{children:[l,(c??"").trim()&&a("p",{className:"mt-4 font-mono text-[length:var(--size-label,10px)] uppercase tracking-[0.14em] text-fg/40",children:c})]})]})})}export{w as default};
@@ -1 +1 @@
1
- "use client";import{jsx as e,jsxs as c,Fragment as d}from"react/jsx-runtime";import{useEffect as f,useId as m,useState as b}from"react";import{usePreviewChat as g}from"./PreviewChatContext.js";import{SettingsField as p,SettingsSwitch as w}from"efficient-easel/panel";import{TypeIcon as C}from"efficient-easel/icons";import{GroupLabel as L}from"../lib/puck/controls.js";const E="Chat with us",y="We usually reply within a few minutes",T="Hi! Ask us anything \u2014 about a wheel, an order, or fitment. Leave your details and we\u2019ll reply.";function s({label:t,value:l,placeholder:n,onCommit:a,multiline:u=!1}){const[r,o]=b(l);f(()=>o(l),[l]);const h=()=>{r!==l&&a(r)};return e(p,{label:t,icon:e(C,{}),children:u?e("textarea",{value:r,placeholder:n,rows:3,onChange:i=>o(i.target.value),onBlur:h,"aria-label":t}):e("input",{type:"text",value:r,placeholder:n,onChange:i=>o(i.target.value),onBlur:h,onKeyDown:i=>{i.key==="Enter"&&i.currentTarget.blur()},"aria-label":t,autoComplete:"off"})})}function v(){const{chat:t,setChat:l}=g(),n=m();return c(d,{children:[c("div",{className:"sf-field sf-field--row",children:[e("span",{id:n,className:"sf-field-label sf-field-label--inline",children:"Show the chat bubble"}),e(w,{checked:t.enabled,onChange:a=>l({enabled:a}),ariaLabelledBy:n})]}),e("p",{className:"sf-field-hint",children:t.enabled?"The floating chat bubble shows in the corner of every page.":"The chat bubble is hidden across the whole site."}),e(L,{label:"Wording"}),e(s,{label:"Title",value:t.title,placeholder:E,onCommit:a=>l({title:a})}),e(s,{label:"Subtitle",value:t.subtitle,placeholder:y,onCommit:a=>l({subtitle:a})}),e(s,{label:"Greeting message",value:t.greeting,placeholder:T,onCommit:a=>l({greeting:a}),multiline:!0}),e("p",{className:"sf-field-hint",children:"Leave a field blank to use the built-in wording."})]})}export{v as default};
1
+ "use client";import{jsx as e,Fragment as b,jsxs as d}from"react/jsx-runtime";import{useEffect as m,useId as f,useState as g}from"react";import{usePreviewChat as p}from"./PreviewChatContext.js";import{SettingsField as u,SettingsSwitch as w}from"efficient-easel/panel";import{EyeIcon as C,TypeIcon as E}from"efficient-easel/icons";import{GroupLabel as L}from"../lib/puck/controls.js";const y="Chat with us",T="We usually reply within a few minutes",v="Hi! Ask us anything — about a wheel, an order, or fitment. Leave your details and we’ll reply.";function s({label:t,value:a,placeholder:i,onCommit:l,multiline:c=!1}){const[o,r]=g(a);m(()=>r(a),[a]);const h=()=>{o!==a&&l(o)};return e(u,{label:t,icon:e(E,{}),children:c?e("textarea",{value:o,placeholder:i,rows:3,onChange:n=>r(n.target.value),onBlur:h,"aria-label":t}):e("input",{type:"text",value:o,placeholder:i,onChange:n=>r(n.target.value),onBlur:h,onKeyDown:n=>{n.key==="Enter"&&n.currentTarget.blur()},"aria-label":t,autoComplete:"off"})})}function x(){const{chat:t,setChat:a}=p(),i=f();return d(b,{children:[e(u,{label:"Show the chat bubble",labelId:i,icon:e(C,{}),action:e(w,{checked:t.enabled,onChange:l=>a({enabled:l}),ariaLabelledBy:i}),hint:t.enabled?"The floating chat bubble shows in the corner of every page.":"The chat bubble is hidden across the whole site."}),e(L,{label:"Wording"}),e(s,{label:"Title",value:t.title,placeholder:y,onCommit:l=>a({title:l})}),e(s,{label:"Subtitle",value:t.subtitle,placeholder:T,onCommit:l=>a({subtitle:l})}),e(s,{label:"Greeting message",value:t.greeting,placeholder:v,onCommit:l=>a({greeting:l}),multiline:!0}),e("p",{className:"es-field-hint sf-hint-keep",children:"Leave a field blank to use the built-in wording."})]})}export{x as default};
@@ -1 +1 @@
1
- "use client";import{jsx as e,jsxs as s}from"react/jsx-runtime";function c(l){return l===1?"1 color theme":`${l} color themes`}function i({count:l,onCancel:a,onConfirm:r}){return e("div",{className:"sf-cleardlg-veil",role:"dialog","aria-modal":"true","aria-labelledby":"sf-clear-colours-title",children:s("div",{className:"sf-cleardlg",children:[e("h2",{id:"sf-clear-colours-title",className:"sf-cleardlg-title",children:"Clear this site\u2019s colors?"}),s("p",{className:"sf-cleardlg-body",children:["This site has ",c(l)," of its own. Clearing takes them away and puts back the four the shop supplies."]}),e("p",{className:"sf-cleardlg-final",children:"This cannot be undone."}),s("div",{className:"sf-cleardlg-btns",children:[e("button",{type:"button",onClick:a,className:"sf-cleardlg-btn",children:"Cancel"}),e("button",{type:"button",onClick:r,className:"sf-cleardlg-btn sf-cleardlg-btn--danger",children:"Clear colors"})]})]})})}export{i as ClearColoursDialog};
1
+ "use client";import{jsxs as r,jsx as o,Fragment as a}from"react/jsx-runtime";import{Button as t,Dialog as i}from"efficient-shell/ui";function l(e){return e===1?"1 color theme":`${e} color themes`}function m({count:e,onCancel:s,onConfirm:n}){return r(i,{open:!0,onClose:s,role:"alertdialog",size:"sm",title:"Clear this site’s colors?",footer:r(a,{children:[o(t,{variant:"secondary",onClick:s,children:"Cancel"}),o(t,{variant:"danger",onClick:n,children:"Clear colors"})]}),children:[r("p",{children:["This site has ",l(e)," of its own. Clearing takes them away and puts back the four the shop supplies."]}),o("p",{className:"mt-2 font-medium",children:"This cannot be undone."})]})}export{m as ClearColoursDialog};
@@ -32,12 +32,12 @@
32
32
  .contact-loc[data-active="true"] > div:first-child * { color: var(--bg) !important; }
33
33
  `,Ne=`
34
34
  .loc-part-pick { cursor: pointer; position: relative; }
35
- /* \u26A0\uFE0F AN OVERLAY, NOT AN outline, AND THAT IS THE WHOLE FIX.
35
+ /* ⚠️ AN OVERLAY, NOT AN outline, AND THAT IS THE WHOLE FIX.
36
36
  An inset outline is painted in the element's own box decoration and a
37
37
  full-bleed child sitting above it hides it completely. A city TILE stacks
38
38
  three: the picture (or its placeholder) at absolute inset-0, the gradient
39
39
  scrim at absolute inset-0, and the caption at z-[1]. A MAP stacks its
40
- canvas at absolute inset-0 and its address card at z-10 \u2014 but its
40
+ canvas at absolute inset-0 and its address card at z-10 — but its
41
41
  background is painted on the element itself, so its outline survived. That is
42
42
  why the merchant saw the ring on the map and not on the picture: not a dead
43
43
  control, a control that could not say it was live. Owner, 2026-09-09, having
@@ -55,10 +55,10 @@
55
55
  transition: box-shadow 120ms ease-out;
56
56
  }
57
57
  .loc-part-pick:hover::after {
58
- /* \u26A0\uFE0F 8-DIGIT HEX, NOT color-mix(). Measured in a real editor: the same accent
58
+ /* ⚠️ 8-DIGIT HEX, NOT color-mix(). Measured in a real editor: the same accent
59
59
  written as color-mix(in srgb, X 45%, transparent) resolved to FULLY
60
60
  TRANSPARENT inside a box-shadow, so the hover ring computed correctly and
61
- painted nothing \u2014 the exact failure this whole change is fixing, reproduced
61
+ painted nothing — the exact failure this whole change is fixing, reproduced
62
62
  one layer down. The [data-selected] rule below, which names a plain colour,
63
63
  painted blue in the same breath. 73 is 45% of 255. */
64
64
  box-shadow: inset 0 0 0 2px ${J.accent}73;
@@ -70,4 +70,4 @@
70
70
  .loc-part-pick::after { transition: none; }
71
71
  }
72
72
  `;function Z({value:p}){if(typeof p=="string"){const a=p.split(`
73
- `);return t(G,{children:a.map((b,l)=>i("span",{children:[b,l<a.length-1?t("br",{}):null]},l))})}return t(G,{children:p})}function Se(){return t("div",{className:"absolute inset-0 flex items-center justify-center",style:{background:"repeating-linear-gradient(45deg, rgba(201,164,97,.05) 0 1px, transparent 1px 14px), linear-gradient(135deg, var(--surface-2), var(--surface))"},children:i("svg",{width:"34",height:"34",viewBox:"0 0 24 24",fill:"none",stroke:"var(--fg-dim)",strokeWidth:1.4,"aria-hidden":"true",style:{opacity:.4},children:[t("rect",{x:"3",y:"4",width:"18",height:"16",rx:"1.5"}),t("circle",{cx:"8.5",cy:"9.5",r:"1.6"}),t("path",{d:"M21 16l-5-5-4 4-2-2-7 7"})]})})}function Ae({sectionNumber:p=z.sectionNumber,heading:a=z.heading,tagline:b=z.tagline,galleryKicker:l=z.galleryKicker,galleryHint:f=z.galleryHint,locations:k=ie,apiKey:C="",mapId:I="",mapTheme:n="auto",imageShape:x,editing:m,nodeId:s,...v}){const[R,L]=T(!1);j(()=>{const e=()=>L(document.documentElement.getAttribute("data-theme")==="light");e();const r=new MutationObserver(e);return r.observe(document.documentElement,{attributes:!0,attributeFilter:["data-theme"]}),()=>r.disconnect()},[]);const[$,M]=T(null),N=e=>`loc-${e}`,B=e=>{M(e),typeof document<"u"&&document.getElementById(e)?.scrollIntoView({behavior:K(),block:"start"}),!m&&typeof window<"u"&&window.history?.replaceState&&window.history.replaceState(null,"",`#${e}`)};j(()=>{if(typeof window>"u")return;const e=window.location.hash.replace(/^#/,"");!e||!document.getElementById(e)||(M(e),requestAnimationFrame(()=>{document.getElementById(e)?.scrollIntoView({behavior:K(),block:"start"})}))},[]);const D=le(se(x)),{select:d,selectedLocationPartId:u}=ye(),F=(e,r)=>s?Y(s,e,r):"",O=(e,r)=>!!(m&&s&&u===F(e,r)),A=(e,r)=>m&&s?`${e}:${r}`:void 0,E=U(null);j(()=>{if(!m||!s)return;const e=E.current;if(!e)return;const g=Array.from(e.querySelectorAll("[data-loc-pick]")).map(o=>{const h=te(o),w=y=>{const c=o.getAttribute("data-loc-pick")??"",[_,H]=c.split(":");H!=="image"&&H!=="map"||(y.stopPropagation(),y.preventDefault(),d(Y(s,Number(_),H)))};return o.addEventListener("click",w,{capture:!0}),()=>{h?.(),o.removeEventListener("click",w,{capture:!0})}});return()=>g.forEach(o=>o())},[m,s,d,k.length]);const S=ve(k,e=>String(e.group??""),e=>String(e.groupName??""));return i("section",{id:"studios",ref:E,className:Q(v)?"scroll-mt-24 border-b border-line px-[var(--sf-site-gutter,40px)] py-[100px] max-[1100px]:px-[min(24px,var(--sf-site-gutter,40px))] max-[1100px]:py-[60px]":"mx-auto max-w-[var(--sf-site-width,1600px)] scroll-mt-24 border-b border-line px-[var(--sf-site-gutter,40px)] py-[100px] max-[1100px]:px-[min(24px,var(--sf-site-gutter,40px))] max-[1100px]:py-[60px]",style:R?void 0:{background:"var(--section-bg)"},children:[t("style",{dangerouslySetInnerHTML:{__html:we}}),m&&s&&t("style",{dangerouslySetInnerHTML:{__html:Ne}}),(p||a||b)&&t(ne,{num:p,title:a?re(a,!0):void 0,desc:b?q(b):void 0,spaceBelow:"mb-10"}),k.length>0&&i("div",{className:"mb-12",children:[(l||f)&&i("div",{className:"mb-5 flex items-baseline justify-between gap-6 border-b border-line pb-4",children:[l&&t(oe,{text:l,size:12}),f&&t("span",{className:"font-mono text-[length:var(--size-label,11px)] uppercase tracking-[0.22em] text-fg-dim",children:q(f)})]}),t("div",{className:"flex flex-col gap-6",children:S.map((e,r)=>{const g=e.items.length===1;return i("div",{children:[e.key&&t("div",{className:"mb-2.5 font-mono text-[length:var(--size-label,11px)] uppercase tracking-[0.3em] text-accent",children:e.key}),t("div",{className:["grid gap-[2px] border border-line bg-line",X(e.items.length),e.items.length>1?"max-[700px]:grid-cols-2":""].join(" "),children:e.items.map(({item:o,index:h})=>{const w=String(o?.name??""),y=String(o?.photo??""),c=N(h);return i("a",{href:`#${c}`,"aria-label":`Jump to ${w||"location"} map`,onClick:_=>{_.preventDefault(),B(c)},"data-loc-pick":A(h,"image"),className:["group relative block",D,"overflow-hidden bg-bg outline-none focus-visible:ring-2 focus-visible:ring-accent",g?"max-h-[440px]":"",...A(h,"image")?["loc-part-pick"]:[]].join(" "),"data-selected":O(h,"image")?"":void 0,children:[y?t(ee,{src:y,alt:ae(w||"Location"),fill:!0,sizes:g?"100vw":"(max-width: 700px) 50vw, 33vw",className:"object-cover grayscale transition-[filter] duration-500 group-hover:grayscale-0"}):t(Se,{}),t("div",{className:"pointer-events-none absolute inset-0",style:{background:"linear-gradient(180deg, transparent 50%, rgba(10,10,10,0.85) 100%)"}}),t("figcaption",{className:"absolute inset-x-0 bottom-0 z-[1] flex items-center justify-start gap-2 px-3 py-3 font-mono text-[length:var(--size-label,11px)] uppercase tracking-[0.22em] text-overlay-fg/85",children:t("span",{children:w})})]},h)})})]},e.key?`g:${e.key}`:`ungrouped:${r}`)})})]}),S.map((e,r)=>i("div",{className:r===0?"":"mt-10",children:[e.key&&t(ke,{groupKey:e.key,name:e.name,count:e.items.length}),t("div",{className:["grid gap-[2px] border border-line bg-line",X(e.items.length),e.items.length>1?"max-[1100px]:grid-cols-1":""].join(" "),children:e.items.map(({item:g,index:o})=>t(Ce,{id:N(o),card:g,active:$===N(o),apiKey:C,mapId:I,mapTheme:n,mapPick:A(o,"map"),mapSelected:O(o,"map")},o))})]},e.key?`g:${e.key}`:`ungrouped:${r}`)),k.length>0&&i("p",{className:"mt-8 text-right font-mono text-[10px] uppercase tracking-[0.25em] text-fg-dim/50",children:["Location coordinates \xA9"," ",t("a",{href:"https://www.openstreetmap.org/copyright",target:"_blank",rel:"noopener noreferrer",className:"hover:text-accent",children:"OpenStreetMap contributors"})]})]})}function Ce({id:p,card:a,active:b,apiKey:l,mapId:f,mapTheme:k,mapPick:C,mapSelected:I}){const n=a.phone?`tel:${String(a.phone).replace(/[^+\d]/g,"")}`:void 0,x=ce(a.region),m=String(a.state??"").trim()||x.state,s=String(a.country??"").trim()||x.country,v=[m,s].filter(Boolean).join(" \xB7 ");return i("article",{id:p,"data-active":b?"true":void 0,className:"contact-loc grid min-h-[840px] scroll-mt-[120px] grid-rows-[auto_1fr] bg-bg max-[1100px]:min-h-0",children:[i("div",{className:"flex min-h-[280px] flex-col gap-3 border-b border-line px-7 py-7",children:[i("div",{className:"flex items-start justify-between gap-3.5",children:[i("div",{children:[a.name&&t("div",{className:"font-heading3 text-[length:var(--size-headingSmall,30px)] font-medium uppercase leading-none tracking-[-0.02em]",children:a.name}),v&&t("div",{className:"mt-1.5 font-mono text-[length:var(--size-label,12px)] uppercase tracking-[0.24em] text-accent",children:v})]}),a.timezone&&t("span",{className:"whitespace-nowrap border border-line px-2.5 py-1.5 font-mono text-[length:var(--size-label,12px)] uppercase tracking-[0.22em] text-fg-dim",children:a.timezone})]}),a.address!=null&&a.address!==""&&t("div",{className:"mt-1.5 font-display text-[length:var(--size-body,14px)] leading-[1.5] text-fg-dim",children:t(Z,{value:a.address})}),a.phone&&t("div",{children:t("a",{href:n,className:"font-mono text-[length:var(--size-label,13px)] uppercase tracking-[0.18em] text-fg hover:text-accent",children:a.phone})}),a.hours!=null&&a.hours!==""&&t("div",{className:"font-mono text-[length:var(--size-label,12px)] uppercase leading-[1.7] tracking-[0.18em] text-fg-dim",children:t(Z,{value:a.hours})})]}),t(Le,{name:String(a.name??""),state:m,country:s,lat:Number(a.lat),lng:Number(a.lng),mapsUrl:String(a.mapsUrl??""),apiKey:l,mapId:f,mapTheme:k,pick:C,selected:I})]})}const Ie=13;function Le({name:p,state:a,country:b,lat:l,lng:f,mapsUrl:k,apiKey:C,mapId:I,mapTheme:n="auto",pick:x,selected:m}){const s=he(C,xe()),v=fe(I,be()),R=ue(l,f),L=!!s&&R,$=a,M=U(null),N=U(null),[B,D]=T(!1),d=n!=="auto",u=pe(n),[F,O]=T(n==="auto"?de.dark.background:P(n));j(()=>{O(P(n))},[n]),j(()=>{if(!L)return;const S=M.current;if(!S)return;let e=null,r=null,g=!1,o=null;const h=c=>({path:c.SymbolPath.CIRCLE,scale:7,fillColor:W(n),fillOpacity:1,strokeColor:W(n),strokeOpacity:.25,strokeWeight:10}),w=async()=>{try{const c=await ge(s);if(g||!N.current)return;e=new c.Map(N.current,{center:{lat:l,lng:f},zoom:Ie,disableDefaultUI:!0,gestureHandling:"cooperative",keyboardShortcuts:!1,clickableIcons:!1,backgroundColor:P(n),...v?{mapId:v}:{styles:V(n)}}),r=new c.Marker({map:e,position:{lat:l,lng:f},icon:h(c)}),e.addListener("tilesloaded",()=>{g||D(!0)}),n==="auto"&&!v&&(o=me(()=>{g||!e||(e.setOptions({styles:V(n),backgroundColor:P(n)}),r?.setIcon(h(c)),O(P(n)))}))}catch(c){console.error("[StudioMap] Maps SDK failed:",c)}},y=new IntersectionObserver(c=>{for(const _ of c)if(_.isIntersecting){y.disconnect(),w();break}},{rootMargin:"200px"});return y.observe(S),()=>{g=!0,y.disconnect(),o?.()}},[L,s,l,f,v,n]);const A=k||(p?`https://www.google.com/maps/search/?api=1&query=${encodeURIComponent([p,a,b].filter(Boolean).join(" "))}`:""),E=i("div",{className:["absolute left-5 top-5 z-10 flex max-w-[64%] flex-col gap-1.5 border p-3.5",d?"":"border-line bg-bg shadow-[0_8px_24px_rgba(0,0,0,.4)]"].join(" "),style:d?{backgroundColor:u.info.bg,borderColor:`color-mix(in oklab, ${u.info.fgDim} 35%, transparent)`,boxShadow:u.info.shadow}:void 0,children:[i("span",{className:"font-display text-[length:var(--size-body,14px)] font-medium tracking-[-0.01em]",style:d?{color:u.info.fg}:void 0,children:[p||"Location",$?`, ${$}`:""]}),A&&t("a",{href:A,target:"_blank",rel:"noopener noreferrer",className:["font-mono text-[length:var(--size-label,12px)] uppercase tracking-[0.24em] transition-colors",d?"":"text-accent hover:text-fg"].join(" "),style:d?{color:u.info.accent}:void 0,children:"Get Directions \u2197"})]});if(!L){const S=d?`linear-gradient(135deg, ${u.background}, ${u.info.bg})`:"linear-gradient(135deg, var(--surface-2), var(--surface))";return i("div",{"data-loc-pick":x,className:["relative overflow-hidden max-[1100px]:aspect-square",d?"":"bg-bg",...x?["loc-part-pick"]:[]].join(" "),"data-selected":m?"":void 0,style:{...d?{backgroundColor:u.background}:null,backgroundImage:`repeating-linear-gradient(45deg, rgba(201,164,97,.04) 0 1px, transparent 1px 14px), repeating-linear-gradient(-45deg, rgba(201,164,97,.04) 0 1px, transparent 1px 14px), ${S}`},children:[E,t("div",{className:["absolute inset-0 flex items-center justify-center px-6 text-center font-mono text-[length:var(--size-label,12px)] uppercase tracking-[0.3em]",d?"":"text-fg-dim/40"].join(" "),style:d?{color:u.info.fgDim,opacity:.4}:void 0,children:s?"Add latitude & longitude":"Add a Google Maps API key"})]})}return i("div",{ref:M,"data-loc-pick":x,className:["studio-map relative overflow-hidden max-[1100px]:aspect-square",...x?["loc-part-pick"]:[]].join(" "),"data-selected":m?"":void 0,style:{backgroundColor:F},children:[t("div",{ref:N,className:"gmap-canvas absolute inset-0"}),t("div",{className:["pointer-events-none absolute inset-0 flex items-center justify-center font-mono text-[length:var(--size-label,12px)] uppercase tracking-[0.3em] text-fg-dim transition-opacity duration-500",B?"opacity-0":"opacity-100"].join(" "),children:"Loading map\u2026"}),E]})}export{Ae as default};
73
+ `);return t(G,{children:a.map((b,l)=>i("span",{children:[b,l<a.length-1?t("br",{}):null]},l))})}return t(G,{children:p})}function Se(){return t("div",{className:"absolute inset-0 flex items-center justify-center",style:{background:"repeating-linear-gradient(45deg, rgba(201,164,97,.05) 0 1px, transparent 1px 14px), linear-gradient(135deg, var(--surface-2), var(--surface))"},children:i("svg",{width:"34",height:"34",viewBox:"0 0 24 24",fill:"none",stroke:"var(--fg-dim)",strokeWidth:1.4,"aria-hidden":"true",style:{opacity:.4},children:[t("rect",{x:"3",y:"4",width:"18",height:"16",rx:"1.5"}),t("circle",{cx:"8.5",cy:"9.5",r:"1.6"}),t("path",{d:"M21 16l-5-5-4 4-2-2-7 7"})]})})}function Ae({sectionNumber:p=z.sectionNumber,heading:a=z.heading,tagline:b=z.tagline,galleryKicker:l=z.galleryKicker,galleryHint:f=z.galleryHint,locations:k=ie,apiKey:C="",mapId:I="",mapTheme:n="auto",imageShape:x,editing:m,nodeId:s,...v}){const[R,L]=T(!1);j(()=>{const e=()=>L(document.documentElement.getAttribute("data-theme")==="light");e();const r=new MutationObserver(e);return r.observe(document.documentElement,{attributes:!0,attributeFilter:["data-theme"]}),()=>r.disconnect()},[]);const[$,M]=T(null),N=e=>`loc-${e}`,B=e=>{M(e),typeof document<"u"&&document.getElementById(e)?.scrollIntoView({behavior:K(),block:"start"}),!m&&typeof window<"u"&&window.history?.replaceState&&window.history.replaceState(null,"",`#${e}`)};j(()=>{if(typeof window>"u")return;const e=window.location.hash.replace(/^#/,"");!e||!document.getElementById(e)||(M(e),requestAnimationFrame(()=>{document.getElementById(e)?.scrollIntoView({behavior:K(),block:"start"})}))},[]);const D=le(se(x)),{select:d,selectedLocationPartId:u}=ye(),F=(e,r)=>s?Y(s,e,r):"",O=(e,r)=>!!(m&&s&&u===F(e,r)),A=(e,r)=>m&&s?`${e}:${r}`:void 0,E=U(null);j(()=>{if(!m||!s)return;const e=E.current;if(!e)return;const g=Array.from(e.querySelectorAll("[data-loc-pick]")).map(o=>{const h=te(o),w=y=>{const c=o.getAttribute("data-loc-pick")??"",[_,H]=c.split(":");H!=="image"&&H!=="map"||(y.stopPropagation(),y.preventDefault(),d(Y(s,Number(_),H)))};return o.addEventListener("click",w,{capture:!0}),()=>{h?.(),o.removeEventListener("click",w,{capture:!0})}});return()=>g.forEach(o=>o())},[m,s,d,k.length]);const S=ve(k,e=>String(e.group??""),e=>String(e.groupName??""));return i("section",{id:"studios",ref:E,className:Q(v)?"scroll-mt-24 border-b border-line px-[var(--sf-site-gutter,40px)] py-[100px] max-[1100px]:px-[min(24px,var(--sf-site-gutter,40px))] max-[1100px]:py-[60px]":"mx-auto max-w-[var(--sf-site-width,1600px)] scroll-mt-24 border-b border-line px-[var(--sf-site-gutter,40px)] py-[100px] max-[1100px]:px-[min(24px,var(--sf-site-gutter,40px))] max-[1100px]:py-[60px]",style:R?void 0:{background:"var(--section-bg)"},children:[t("style",{dangerouslySetInnerHTML:{__html:we}}),m&&s&&t("style",{dangerouslySetInnerHTML:{__html:Ne}}),(p||a||b)&&t(ne,{num:p,title:a?re(a,!0):void 0,desc:b?q(b):void 0,spaceBelow:"mb-10"}),k.length>0&&i("div",{className:"mb-12",children:[(l||f)&&i("div",{className:"mb-5 flex items-baseline justify-between gap-6 border-b border-line pb-4",children:[l&&t(oe,{text:l,size:12}),f&&t("span",{className:"font-mono text-[length:var(--size-label,11px)] uppercase tracking-[0.22em] text-fg-dim",children:q(f)})]}),t("div",{className:"flex flex-col gap-6",children:S.map((e,r)=>{const g=e.items.length===1;return i("div",{children:[e.key&&t("div",{className:"mb-2.5 font-mono text-[length:var(--size-label,11px)] uppercase tracking-[0.3em] text-accent",children:e.key}),t("div",{className:["grid gap-[2px] border border-line bg-line",X(e.items.length),e.items.length>1?"max-[700px]:grid-cols-2":""].join(" "),children:e.items.map(({item:o,index:h})=>{const w=String(o?.name??""),y=String(o?.photo??""),c=N(h);return i("a",{href:`#${c}`,"aria-label":`Jump to ${w||"location"} map`,onClick:_=>{_.preventDefault(),B(c)},"data-loc-pick":A(h,"image"),className:["group relative block",D,"overflow-hidden bg-bg outline-none focus-visible:ring-2 focus-visible:ring-accent",g?"max-h-[440px]":"",...A(h,"image")?["loc-part-pick"]:[]].join(" "),"data-selected":O(h,"image")?"":void 0,children:[y?t(ee,{src:y,alt:ae(w||"Location"),fill:!0,sizes:g?"100vw":"(max-width: 700px) 50vw, 33vw",className:"object-cover grayscale transition-[filter] duration-500 group-hover:grayscale-0"}):t(Se,{}),t("div",{className:"pointer-events-none absolute inset-0",style:{background:"linear-gradient(180deg, transparent 50%, rgba(10,10,10,0.85) 100%)"}}),t("figcaption",{className:"absolute inset-x-0 bottom-0 z-[1] flex items-center justify-start gap-2 px-3 py-3 font-mono text-[length:var(--size-label,11px)] uppercase tracking-[0.22em] text-overlay-fg/85",children:t("span",{children:w})})]},h)})})]},e.key?`g:${e.key}`:`ungrouped:${r}`)})})]}),S.map((e,r)=>i("div",{className:r===0?"":"mt-10",children:[e.key&&t(ke,{groupKey:e.key,name:e.name,count:e.items.length}),t("div",{className:["grid gap-[2px] border border-line bg-line",X(e.items.length),e.items.length>1?"max-[1100px]:grid-cols-1":""].join(" "),children:e.items.map(({item:g,index:o})=>t(Ce,{id:N(o),card:g,active:$===N(o),apiKey:C,mapId:I,mapTheme:n,mapPick:A(o,"map"),mapSelected:O(o,"map")},o))})]},e.key?`g:${e.key}`:`ungrouped:${r}`)),k.length>0&&i("p",{className:"mt-8 text-right font-mono text-[10px] uppercase tracking-[0.25em] text-fg-dim/50",children:["Location coordinates ©"," ",t("a",{href:"https://www.openstreetmap.org/copyright",target:"_blank",rel:"noopener noreferrer",className:"hover:text-accent",children:"OpenStreetMap contributors"})]})]})}function Ce({id:p,card:a,active:b,apiKey:l,mapId:f,mapTheme:k,mapPick:C,mapSelected:I}){const n=a.phone?`tel:${String(a.phone).replace(/[^+\d]/g,"")}`:void 0,x=ce(a.region),m=String(a.state??"").trim()||x.state,s=String(a.country??"").trim()||x.country,v=[m,s].filter(Boolean).join(" · ");return i("article",{id:p,"data-active":b?"true":void 0,className:"contact-loc grid min-h-[840px] scroll-mt-[120px] grid-rows-[auto_1fr] bg-bg max-[1100px]:min-h-0",children:[i("div",{className:"flex min-h-[280px] flex-col gap-3 border-b border-line px-7 py-7",children:[i("div",{className:"flex items-start justify-between gap-3.5",children:[i("div",{children:[a.name&&t("div",{className:"font-heading3 text-[length:var(--size-headingSmall,30px)] font-medium uppercase leading-none tracking-[-0.02em]",children:a.name}),v&&t("div",{className:"mt-1.5 font-mono text-[length:var(--size-label,12px)] uppercase tracking-[0.24em] text-accent",children:v})]}),a.timezone&&t("span",{className:"whitespace-nowrap border border-line px-2.5 py-1.5 font-mono text-[length:var(--size-label,12px)] uppercase tracking-[0.22em] text-fg-dim",children:a.timezone})]}),a.address!=null&&a.address!==""&&t("div",{className:"mt-1.5 font-display text-[length:var(--size-body,14px)] leading-[1.5] text-fg-dim",children:t(Z,{value:a.address})}),a.phone&&t("div",{children:t("a",{href:n,className:"font-mono text-[length:var(--size-label,13px)] uppercase tracking-[0.18em] text-fg hover:text-accent",children:a.phone})}),a.hours!=null&&a.hours!==""&&t("div",{className:"font-mono text-[length:var(--size-label,12px)] uppercase leading-[1.7] tracking-[0.18em] text-fg-dim",children:t(Z,{value:a.hours})})]}),t(Le,{name:String(a.name??""),state:m,country:s,lat:Number(a.lat),lng:Number(a.lng),mapsUrl:String(a.mapsUrl??""),apiKey:l,mapId:f,mapTheme:k,pick:C,selected:I})]})}const Ie=13;function Le({name:p,state:a,country:b,lat:l,lng:f,mapsUrl:k,apiKey:C,mapId:I,mapTheme:n="auto",pick:x,selected:m}){const s=he(C,xe()),v=fe(I,be()),R=ue(l,f),L=!!s&&R,$=a,M=U(null),N=U(null),[B,D]=T(!1),d=n!=="auto",u=pe(n),[F,O]=T(n==="auto"?de.dark.background:P(n));j(()=>{O(P(n))},[n]),j(()=>{if(!L)return;const S=M.current;if(!S)return;let e=null,r=null,g=!1,o=null;const h=c=>({path:c.SymbolPath.CIRCLE,scale:7,fillColor:W(n),fillOpacity:1,strokeColor:W(n),strokeOpacity:.25,strokeWeight:10}),w=async()=>{try{const c=await ge(s);if(g||!N.current)return;e=new c.Map(N.current,{center:{lat:l,lng:f},zoom:Ie,disableDefaultUI:!0,gestureHandling:"cooperative",keyboardShortcuts:!1,clickableIcons:!1,backgroundColor:P(n),...v?{mapId:v}:{styles:V(n)}}),r=new c.Marker({map:e,position:{lat:l,lng:f},icon:h(c)}),e.addListener("tilesloaded",()=>{g||D(!0)}),n==="auto"&&!v&&(o=me(()=>{g||!e||(e.setOptions({styles:V(n),backgroundColor:P(n)}),r?.setIcon(h(c)),O(P(n)))}))}catch(c){console.error("[StudioMap] Maps SDK failed:",c)}},y=new IntersectionObserver(c=>{for(const _ of c)if(_.isIntersecting){y.disconnect(),w();break}},{rootMargin:"200px"});return y.observe(S),()=>{g=!0,y.disconnect(),o?.()}},[L,s,l,f,v,n]);const A=k||(p?`https://www.google.com/maps/search/?api=1&query=${encodeURIComponent([p,a,b].filter(Boolean).join(" "))}`:""),E=i("div",{className:["absolute left-5 top-5 z-10 flex max-w-[64%] flex-col gap-1.5 border p-3.5",d?"":"border-line bg-bg shadow-[0_8px_24px_rgba(0,0,0,.4)]"].join(" "),style:d?{backgroundColor:u.info.bg,borderColor:`color-mix(in oklab, ${u.info.fgDim} 35%, transparent)`,boxShadow:u.info.shadow}:void 0,children:[i("span",{className:"font-display text-[length:var(--size-body,14px)] font-medium tracking-[-0.01em]",style:d?{color:u.info.fg}:void 0,children:[p||"Location",$?`, ${$}`:""]}),A&&t("a",{href:A,target:"_blank",rel:"noopener noreferrer",className:["font-mono text-[length:var(--size-label,12px)] uppercase tracking-[0.24em] transition-colors",d?"":"text-accent hover:text-fg"].join(" "),style:d?{color:u.info.accent}:void 0,children:"Get Directions ↗"})]});if(!L){const S=d?`linear-gradient(135deg, ${u.background}, ${u.info.bg})`:"linear-gradient(135deg, var(--surface-2), var(--surface))";return i("div",{"data-loc-pick":x,className:["relative overflow-hidden max-[1100px]:aspect-square",d?"":"bg-bg",...x?["loc-part-pick"]:[]].join(" "),"data-selected":m?"":void 0,style:{...d?{backgroundColor:u.background}:null,backgroundImage:`repeating-linear-gradient(45deg, rgba(201,164,97,.04) 0 1px, transparent 1px 14px), repeating-linear-gradient(-45deg, rgba(201,164,97,.04) 0 1px, transparent 1px 14px), ${S}`},children:[E,t("div",{className:["absolute inset-0 flex items-center justify-center px-6 text-center font-mono text-[length:var(--size-label,12px)] uppercase tracking-[0.3em]",d?"":"text-fg-dim/40"].join(" "),style:d?{color:u.info.fgDim,opacity:.4}:void 0,children:s?"Add latitude & longitude":"Add a Google Maps API key"})]})}return i("div",{ref:M,"data-loc-pick":x,className:["studio-map relative overflow-hidden max-[1100px]:aspect-square",...x?["loc-part-pick"]:[]].join(" "),"data-selected":m?"":void 0,style:{backgroundColor:F},children:[t("div",{ref:N,className:"gmap-canvas absolute inset-0"}),t("div",{className:["pointer-events-none absolute inset-0 flex items-center justify-center font-mono text-[length:var(--size-label,12px)] uppercase tracking-[0.3em] text-fg-dim transition-opacity duration-500",B?"opacity-0":"opacity-100"].join(" "),children:"Loading map…"}),E]})}export{Ae as default};
@@ -1,5 +1,4 @@
1
1
  export declare const CORNERS_LABEL = "Corners";
2
- export declare const CORNERS_UNSET_LABEL = "Not set";
3
2
  export default function CornersField({ value, onChange, showHint, }: {
4
3
  value: number | null;
5
4
  onChange: (v: number | null) => void;
@@ -1 +1 @@
1
- "use client";import{jsx as t}from"react/jsx-runtime";import{SettingsField as i}from"efficient-easel/panel";import{SquareIcon as l}from"efficient-easel/icons";import{CORNER_RADIUS_MAX as u,CORNER_RADIUS_MIN as s}from"../lib/theme.js";import{Slider as c}from"../lib/puck/controls.js";import{PartResetDot as p}from"./PartSettingsPanel.js";const d="Applies to panels, cards, inputs and buttons. Round things \u2014 color swatches, switches, status dots \u2014 stay round.",n="Corners",m="Not set";function R({value:o,onChange:r,showHint:a=!0}){const e=o===null;return t(i,{label:n,icon:t(l,{}),value:e?m:`${o}px`,changed:!e,action:e?null:t(p,{label:n,what:"change",onClear:()=>r(null)}),hint:a?d:void 0,children:t(c,{min:s,max:u,step:1,value:o??s,readout:!1,ariaLabel:n,onChange:r})})}export{n as CORNERS_LABEL,m as CORNERS_UNSET_LABEL,R as default};
1
+ "use client";import{jsx as e}from"react/jsx-runtime";import{SettingsDefaultReset as a,SettingsField as l}from"efficient-easel/panel";import{SquareIcon as u}from"efficient-easel/icons";import{CORNER_RADIUS_MAX as d,CORNER_RADIUS_MIN as r}from"../lib/theme.js";import{Slider as c}from"../lib/puck/controls.js";const p="Applies to panels, cards, inputs and buttons. Round things — color swatches, switches, status dots — stay round.",o="Corners";function R({value:t,onChange:s,showHint:i=!0}){const n=t===null;return e(l,{label:o,icon:e(u,{}),value:n?void 0:`${t}px`,changed:!n,action:e(a,{label:o,changed:!n,detail:"the built-in corners",onReset:()=>s(null)}),hint:i?p:void 0,children:e(c,{min:r,max:d,step:1,value:t??r,readout:!1,ariaLabel:o,onChange:s})})}export{o as CORNERS_LABEL,R as default};
@@ -4,4 +4,4 @@ import{jsx as r,jsxs as m}from"react/jsx-runtime";import{renderGold as c}from"./
4
4
  ${a}`:l.push({type:"p",text:a})});return l}const v=[{label:"First section",heading:"Your *first* section.",body:`Write the opening paragraph here.
5
5
 
6
6
  - Start a line with a dash for a bullet.
7
- - Add as many as you like.`},{label:"Second section",heading:"Your *second* section.",body:"Leave a blank line between paragraphs to start a new one."}],w=120;function N({tocTitle:i,sections:l,editing:p=!1,stickyTop:f=w}){const a=(l??[]).filter(e=>(e.heading??"").trim()!==""||(e.label??"").trim()!==""||(e.body??"").trim()!=="");if(a.length===0&&!p)return null;const d=a.length===0&&p?v:a,x=new Set,n=d.map((e,t)=>{const o=u(e.label||e.heading||"",t);let s=o,g=2;for(;x.has(s);)s=`${o}-${g++}`;return x.add(s),s});return r("section",{className:"relative z-[2] bg-bg",children:m("div",{className:"mx-auto grid max-w-[var(--sf-site-width,1600px)] grid-cols-[240px_1fr] items-start gap-20 border-b border-line px-[var(--sf-site-gutter,40px)] py-20 max-[900px]:grid-cols-1 max-[900px]:gap-10 max-[900px]:px-[min(24px,var(--sf-site-gutter,40px))] max-[900px]:py-[60px]",children:[m("aside",{className:"sticky flex flex-col self-start max-[900px]:static",style:{top:f},children:[i&&r("h4",{className:"mb-[18px] font-mono text-[length:var(--size-label,12px)] uppercase tracking-[0.3em] text-accent",children:c(i)}),d.map((e,t)=>m("a",{href:`#${n[t]}`,className:`flex items-center justify-between gap-3 border-b border-line py-2.5 font-mono text-[length:var(--size-label,13px)] uppercase tracking-[0.18em] text-fg-dim transition-colors hover:text-fg${t===0?" border-t":""}`,children:[r("span",{children:c(e.label||"Section")}),r("span",{className:"text-accent",children:String(t+1).padStart(2,"0")})]},n[t]))]}),r("div",{className:"flex flex-col gap-16",children:d.map((e,t)=>m("article",{id:n[t],className:"flex flex-col gap-[18px]",style:{scrollMarginTop:f},children:[m("span",{className:"font-mono text-[length:var(--size-label,12px)] uppercase tracking-[0.3em] text-accent",children:[String(t+1).padStart(2,"0")," \xB7 ",c(e.label||"Section")]}),e.heading&&r("h2",{className:"mb-2 border-b border-line pb-[18px] font-heading2 text-[length:min(var(--size-headingMedium,clamp(28px,3.5vw,44px)),var(--sf-heading-max,9999px))] font-medium uppercase leading-[1.04] tracking-[-0.025em]",children:c(e.heading)}),y(e.body??"").map((o,s)=>o.type==="ul"?r("ul",{className:"flex max-w-[680px] list-none flex-col gap-2.5 pl-0",children:o.items.map((g,h)=>r("li",{className:"relative pl-6 font-serif text-[length:var(--size-body,17px)] leading-[1.65] text-fg-dim before:absolute before:-top-0.5 before:left-1.5 before:text-[length:var(--size-body,24px)] before:leading-none before:text-accent before:content-['\xB7']",children:c(g)},h))},s):r("p",{className:"max-w-[680px] font-serif text-[length:var(--size-body,17px)] leading-[1.7] text-fg-dim",children:c(o.text)},s))]},n[t]))})]})})}export{N as default,u as sectionAnchorId};
7
+ - Add as many as you like.`},{label:"Second section",heading:"Your *second* section.",body:"Leave a blank line between paragraphs to start a new one."}],w=120;function N({tocTitle:i,sections:l,editing:p=!1,stickyTop:f=w}){const a=(l??[]).filter(e=>(e.heading??"").trim()!==""||(e.label??"").trim()!==""||(e.body??"").trim()!=="");if(a.length===0&&!p)return null;const d=a.length===0&&p?v:a,x=new Set,n=d.map((e,t)=>{const o=u(e.label||e.heading||"",t);let s=o,g=2;for(;x.has(s);)s=`${o}-${g++}`;return x.add(s),s});return r("section",{className:"relative z-[2] bg-bg",children:m("div",{className:"mx-auto grid max-w-[var(--sf-site-width,1600px)] grid-cols-[240px_1fr] items-start gap-20 border-b border-line px-[var(--sf-site-gutter,40px)] py-20 max-[900px]:grid-cols-1 max-[900px]:gap-10 max-[900px]:px-[min(24px,var(--sf-site-gutter,40px))] max-[900px]:py-[60px]",children:[m("aside",{className:"sticky flex flex-col self-start max-[900px]:static",style:{top:f},children:[i&&r("h4",{className:"mb-[18px] font-mono text-[length:var(--size-label,12px)] uppercase tracking-[0.3em] text-accent",children:c(i)}),d.map((e,t)=>m("a",{href:`#${n[t]}`,className:`flex items-center justify-between gap-3 border-b border-line py-2.5 font-mono text-[length:var(--size-label,13px)] uppercase tracking-[0.18em] text-fg-dim transition-colors hover:text-fg${t===0?" border-t":""}`,children:[r("span",{children:c(e.label||"Section")}),r("span",{className:"text-accent",children:String(t+1).padStart(2,"0")})]},n[t]))]}),r("div",{className:"flex flex-col gap-16",children:d.map((e,t)=>m("article",{id:n[t],className:"flex flex-col gap-[18px]",style:{scrollMarginTop:f},children:[m("span",{className:"font-mono text-[length:var(--size-label,12px)] uppercase tracking-[0.3em] text-accent",children:[String(t+1).padStart(2,"0")," · ",c(e.label||"Section")]}),e.heading&&r("h2",{className:"mb-2 border-b border-line pb-[18px] font-heading2 text-[length:min(var(--size-headingMedium,clamp(28px,3.5vw,44px)),var(--sf-heading-max,9999px))] font-medium uppercase leading-[1.04] tracking-[-0.025em]",children:c(e.heading)}),y(e.body??"").map((o,s)=>o.type==="ul"?r("ul",{className:"flex max-w-[680px] list-none flex-col gap-2.5 pl-0",children:o.items.map((g,h)=>r("li",{className:"relative pl-6 font-serif text-[length:var(--size-body,17px)] leading-[1.65] text-fg-dim before:absolute before:-top-0.5 before:left-1.5 before:text-[length:var(--size-body,24px)] before:leading-none before:text-accent before:content-['·']",children:c(g)},h))},s):r("p",{className:"max-w-[680px] font-serif text-[length:var(--size-body,17px)] leading-[1.7] text-fg-dim",children:c(o.text)},s))]},n[t]))})]})})}export{N as default,u as sectionAnchorId};
@@ -1 +1 @@
1
- "use client";import{jsx as t,jsxs as i,Fragment as C}from"react/jsx-runtime";import{useCallback as A,useEffect as H,useRef as z,useState as n}from"react";import{createPortal as W}from"react-dom";import{InspectorIconButton as $}from"efficient-easel/chrome";import{CopyToPageIcon as K}from"efficient-easel/icons";import{backendOf as P}from"../lib/editor-session.js";import{useEditorSession as Y}from"../lib/editor-session-context.js";import{cloneNodeWithFreshIds as q}from"../lib/puck/section-doc.js";import{FOOTER_TYPE as G}from"../lib/puck/content-tree.js";function J({node:T,currentSlug:j,siteId:c,tokenRef:g,runAuthed:B,onNotify:D}){const[s,o]=n(!1),[y,b]=n(null),r=Y(),[F,u]=n(!1),[d,w]=n(null),m=z(null),[f,I]=n(null),[v,L]=n(null),M=A(async()=>{if(r.usesBridgedToken&&!g.current){u(!0);return}try{b(await P(r).pages.list(c?{siteId:c}:void 0))}catch{u(!0)}},[g,c,r]),O=()=>{if(s){o(!1);return}const e=m.current?.getBoundingClientRect();e&&I({top:e.bottom+6,right:Math.max(8,window.innerWidth-e.right)}),L(m.current?.closest(".sf-editor")??document.body),b(null),u(!1),M(),o(!0)};H(()=>{if(!s)return;const e=a=>{a.key==="Escape"&&o(!1)};return window.addEventListener("keydown",e),()=>window.removeEventListener("keydown",e)},[s]);const N=(y??[]).filter(e=>e.slug!==j),R=async e=>{if(d)return;w(e.slug);const a=q(T),S=r.documentHooks?.storedNode?.(a)??a,k=P(r).pages,E=await B(async()=>{const p=await k.load({id:e.id});if(!p)throw new Error(`Page "${e.slug}" no longer exists.`);const h=p.layout??{},l=Array.isArray(h.content)?[...h.content]:[],x=l.findIndex(_=>_?.type===G);l.splice(x===-1?l.length:x,0,S),await k.save(e.id,{layout:{root:{},zones:{},...h,content:l}},{version:p.version,clientId:""})});w(null),o(!1),D?.(E?`Duplicated to \u201C${e.label}\u201D`:"Couldn\u2019t duplicate the section \u2014 please retry",E?"success":"error")};return i(C,{children:[t($,{buttonRef:m,label:"Duplicate to another page",hasPopup:"menu",expanded:s,onClick:O,children:t(K,{size:15})}),s&&f&&v&&W(i(C,{children:[t("div",{className:"sf-dupmenu-backdrop",onClick:()=>o(!1)}),i("div",{className:"sf-dupmenu",role:"menu",style:{top:f.top,right:f.right},children:[t("div",{className:"sf-dupmenu-head",children:"Duplicate to page\u2026"}),F?t("div",{className:"sf-dupmenu-empty",children:"Couldn\u2019t load pages"}):y===null?t("div",{className:"sf-dupmenu-empty",children:"Loading\u2026"}):N.length===0?t("div",{className:"sf-dupmenu-empty",children:"No other pages"}):N.map(e=>i("button",{type:"button",role:"menuitem",className:"sf-dupmenu-item",disabled:d!==null,onClick:()=>R(e),children:[t("span",{className:"sf-dupmenu-name",children:e.label}),d===e.slug?t("span",{className:"sf-note",children:"Copying\u2026"}):e.draft&&t("span",{className:"sf-note",children:"draft"})]},e.id))]})]}),v)]})}export{J as default};
1
+ "use client";import{jsx as t,jsxs as f,Fragment as _}from"react/jsx-runtime";import{useCallback as A,useRef as L,useState as o}from"react";import{InspectorIconButton as z}from"efficient-easel/chrome";import{PopupMenu as W,PopupMenuItem as $,PopupMenuLabel as l}from"efficient-shell/ui";import{CopyToPageIcon as H}from"efficient-easel/icons";import{backendOf as E}from"../lib/website-session.js";import{useEditorSession as Y}from"../lib/editor-session-context.js";import{cloneNodeWithFreshIds as q}from"../lib/puck/section-doc.js";import{FOOTER_TYPE as G}from"../lib/puck/content-tree.js";function J({node:M,currentSlug:N,siteId:a,tokenRef:g,runAuthed:T,onNotify:D}){const[i,s]=o(!1),[h,y]=o(null),n=Y(),[I,c]=o(!1),[u,x]=o(null),b=L(null),[d,j]=o(null),B=A(async()=>{if(n.usesBridgedToken&&!g.current){c(!0);return}try{y(await E(n).pages.list(a?{siteId:a}:void 0))}catch{c(!0)}},[g,a,n]),F=()=>{if(i){s(!1);return}const e=b.current?.getBoundingClientRect();e&&j({top:e.bottom+6,right:Math.max(8,window.innerWidth-e.right)}),y(null),c(!1),B(),s(!0)},P=(h??[]).filter(e=>e.slug!==N),O=async e=>{if(u)return;x(e.slug);const k=q(M),R=n.documentHooks?.storedNode?.(k)??k,w=E(n).pages,C=await T(async()=>{const p=await w.load({id:e.id});if(!p)throw new Error(`Page "${e.slug}" no longer exists.`);const m=p.layout??{},r=Array.isArray(m.content)?[...m.content]:[],v=r.findIndex(S=>S?.type===G);r.splice(v===-1?r.length:v,0,R),await w.save(e.id,{layout:{root:{},zones:{},...m,content:r}},{version:p.version,clientId:""})});x(null),s(!1),D?.(C?`Duplicated to “${e.label}”`:"Couldn’t duplicate the section — please retry",C?"success":"error")};return f(_,{children:[t("span",{"data-menu-toggle":!0,style:{display:"contents"},children:t(z,{buttonRef:b,label:"Duplicate to another page",hasPopup:"menu",expanded:i,onClick:F,children:t(H,{size:15})})}),i&&d&&t(W,{portal:!0,style:{top:d.top,right:d.right},onClose:()=>s(!1),children:f("div",{role:"menu","aria-label":"Duplicate to page",children:[t(l,{children:"Duplicate to page…"}),I?t(l,{children:"Couldn’t load pages"}):h===null?t(l,{children:"Loading…"}):P.length===0?t(l,{children:"No other pages"}):P.map(e=>f($,{role:"menuitem",disabled:u!==null,onClick:()=>{O(e)},children:[t("span",{className:"min-w-0 flex-1 truncate",children:e.label}),u===e.slug?t("span",{className:"shrink-0 text-xs",children:"Copying…"}):e.draft&&t("span",{className:"shrink-0 text-xs",children:"draft"})]},e.id))]})})]})}export{J as default};
@@ -0,0 +1 @@
1
+ export { default, DocumentScreen } from "efficient-easel/screen/components/ScreenMount";
@@ -0,0 +1 @@
1
+ "use client";import{default as c,DocumentScreen as n}from"efficient-easel/screen/components/ScreenMount";export{n as DocumentScreen,c as default};
@@ -0,0 +1 @@
1
+ export { default } from "efficient-easel/screen/components/ScreenStoreProvider";
@@ -0,0 +1 @@
1
+ "use client";import{default as f}from"efficient-easel/screen/components/ScreenStoreProvider";export{f as default};
@@ -1 +1 @@
1
- import{jsx as e,jsxs as a}from"react/jsx-runtime";import{sectionRunsFullWidth as u}from"../lib/content/section-width.js";import{Fragment as b}from"react";import{SiteLink as v}from"../lib/site-runtime.js";import{stripMarkup as N}from"../lib/markup.js";import y from"./Placeholder.js";import{renderGold as r,renderHeadline as z,splitParagraphs as w}from"./goldPhrases.js";function k({image:f,badge:i,imageDate:l,category:p,readLabel:o,date:x,title:n,dek:m,ctaText:c,ctaHref:g,...h}){const d=[p?e("span",{className:"text-accent",children:r(p)}):null,o?e("span",{children:r(o)}):null,x?e("span",{children:r(x)}):null].filter(Boolean);return e("section",{className:u(h)?"border-b border-line px-[var(--sf-site-gutter,40px)] py-20 max-[1100px]:px-[min(24px,var(--sf-site-gutter,40px))] max-[1100px]:py-[60px]":"mx-auto max-w-[var(--sf-site-width,1600px)] border-b border-line px-[var(--sf-site-gutter,40px)] py-20 max-[1100px]:px-[min(24px,var(--sf-site-gutter,40px))] max-[1100px]:py-[60px]",children:a("article",{className:"sf-card relative grid grid-cols-[1.3fr_1fr] border border-line bg-[var(--card-bg)] max-[1100px]:grid-cols-1",children:[a("div",{className:"relative aspect-[5/4] overflow-hidden border-r border-line bg-surface-2 max-[1100px]:border-r-0 max-[1100px]:border-b",children:[e(y,{label:"featured-cover",src:f||void 0,alt:N(n||"Cover"),sizes:"(max-width: 1100px) 100vw, 56vw"}),e("div",{className:"pointer-events-none absolute inset-0 z-[1]",style:{background:"linear-gradient(180deg, rgba(10,10,10,0.45) 0%, transparent 30%, transparent 70%, rgba(10,10,10,0.55) 100%)"}}),i&&e("span",{className:"absolute left-6 top-6 z-[2] bg-accent px-3 py-2 font-mono text-[length:var(--size-label,12px)] uppercase tracking-[0.3em] text-bg",children:r(i)}),l&&e("span",{className:"absolute right-6 bottom-6 z-[2] font-mono text-[length:var(--size-label,12px)] uppercase tracking-[0.24em] text-overlay-fg",children:r(l)})]}),a("div",{className:"flex flex-col justify-between gap-6 px-12 py-14 max-[1100px]:px-7 max-[1100px]:py-9",children:[d.length>0&&e("div",{className:"flex items-center gap-4 font-mono text-[length:var(--size-label,12px)] uppercase tracking-[0.28em] text-fg-dim",children:d.map((s,t)=>a(b,{children:[t>0&&e("span",{className:"opacity-40",children:"\xB7"}),s]},t))}),n&&e("h2",{className:"font-heading2 text-[length:min(var(--size-headingMedium,clamp(34px,3.5vw,58px)),var(--sf-heading-max,9999px))] font-medium uppercase leading-none tracking-[-0.03em]",children:z(n,!0)}),m&&w(m).map((s,t)=>e("p",{className:"max-w-[520px] font-serif text-[length:var(--size-body,20px)] italic leading-[1.5] text-fg-dim",children:r(s,!0)},t)),c&&e("div",{children:a(v,{href:g||"#",className:"group inline-flex items-center gap-3.5 py-3.5 font-mono text-[length:var(--size-label,13px)] uppercase tracking-[0.3em] text-accent",children:[r(c)," ",e("span",{className:"transition-transform group-hover:translate-x-[6px]",children:"\u2192"})]})})]})]})})}export{k as default};
1
+ import{jsx as e,jsxs as a}from"react/jsx-runtime";import{sectionRunsFullWidth as u}from"../lib/content/section-width.js";import{Fragment as b}from"react";import{SiteLink as v}from"../lib/site-runtime.js";import{stripMarkup as N}from"../lib/markup.js";import y from"./Placeholder.js";import{renderGold as r,renderHeadline as z,splitParagraphs as w}from"./goldPhrases.js";function k({image:f,badge:i,imageDate:l,category:p,readLabel:o,date:x,title:n,dek:m,ctaText:c,ctaHref:g,...h}){const d=[p?e("span",{className:"text-accent",children:r(p)}):null,o?e("span",{children:r(o)}):null,x?e("span",{children:r(x)}):null].filter(Boolean);return e("section",{className:u(h)?"border-b border-line px-[var(--sf-site-gutter,40px)] py-20 max-[1100px]:px-[min(24px,var(--sf-site-gutter,40px))] max-[1100px]:py-[60px]":"mx-auto max-w-[var(--sf-site-width,1600px)] border-b border-line px-[var(--sf-site-gutter,40px)] py-20 max-[1100px]:px-[min(24px,var(--sf-site-gutter,40px))] max-[1100px]:py-[60px]",children:a("article",{className:"sf-card relative grid grid-cols-[1.3fr_1fr] border border-line bg-[var(--card-bg)] max-[1100px]:grid-cols-1",children:[a("div",{className:"relative aspect-[5/4] overflow-hidden border-r border-line bg-surface-2 max-[1100px]:border-r-0 max-[1100px]:border-b",children:[e(y,{label:"featured-cover",src:f||void 0,alt:N(n||"Cover"),sizes:"(max-width: 1100px) 100vw, 56vw"}),e("div",{className:"pointer-events-none absolute inset-0 z-[1]",style:{background:"linear-gradient(180deg, rgba(10,10,10,0.45) 0%, transparent 30%, transparent 70%, rgba(10,10,10,0.55) 100%)"}}),i&&e("span",{className:"absolute left-6 top-6 z-[2] bg-accent px-3 py-2 font-mono text-[length:var(--size-label,12px)] uppercase tracking-[0.3em] text-bg",children:r(i)}),l&&e("span",{className:"absolute right-6 bottom-6 z-[2] font-mono text-[length:var(--size-label,12px)] uppercase tracking-[0.24em] text-overlay-fg",children:r(l)})]}),a("div",{className:"flex flex-col justify-between gap-6 px-12 py-14 max-[1100px]:px-7 max-[1100px]:py-9",children:[d.length>0&&e("div",{className:"flex items-center gap-4 font-mono text-[length:var(--size-label,12px)] uppercase tracking-[0.28em] text-fg-dim",children:d.map((s,t)=>a(b,{children:[t>0&&e("span",{className:"opacity-40",children:"·"}),s]},t))}),n&&e("h2",{className:"font-heading2 text-[length:min(var(--size-headingMedium,clamp(34px,3.5vw,58px)),var(--sf-heading-max,9999px))] font-medium uppercase leading-none tracking-[-0.03em]",children:z(n,!0)}),m&&w(m).map((s,t)=>e("p",{className:"max-w-[520px] font-serif text-[length:var(--size-body,20px)] italic leading-[1.5] text-fg-dim",children:r(s,!0)},t)),c&&e("div",{children:a(v,{href:g||"#",className:"group inline-flex items-center gap-3.5 py-3.5 font-mono text-[length:var(--size-label,13px)] uppercase tracking-[0.3em] text-accent",children:[r(c)," ",e("span",{className:"transition-transform group-hover:translate-x-[6px]",children:"→"})]})})]})]})})}export{k as default};
@@ -1 +1 @@
1
- import{jsx as t,Fragment as e,jsxs as a}from"react/jsx-runtime";import{TitleIcon as c,ButtonIcon as p,DollarIcon as M,HashIcon as g,LinkIcon as m,NoteIcon as u,TagIcon as x,TextLinesIcon as b}from"efficient-easel/icons";const o={body:b,button:p,link:m,label:x,number:g,price:M,note:u,title:c},l={eyebrow:a(e,{children:[t("path",{d:"M5 6.5h5"}),t("path",{d:"M5 12.5h14"}),t("path",{d:"M5 18h11"})]}),heading:a(e,{children:[t("path",{d:"M6.5 5v14"}),t("path",{d:"M17.5 5v14"}),t("path",{d:"M6.5 12h11"})]}),intro:a(e,{children:[t("path",{d:"M4 5.5v13"}),t("path",{d:"M8 7.5h12"}),t("path",{d:"M8 12h12"}),t("path",{d:"M8 16.5h8"})]}),value:a(e,{children:[t("rect",{x:"2.5",y:"7",width:"19",height:"10",rx:"2"}),t("path",{d:"M6.5 12h7"})]}),name:a(e,{children:[t("path",{d:"M6 3.5v17"}),t("path",{d:"M6 5h11.5l-2.6 3.6L17.5 12H6z"})]}),date:a(e,{children:[t("rect",{x:"4",y:"5.5",width:"16",height:"15",rx:"2"}),t("path",{d:"M4 10.5h16"}),t("path",{d:"M9 3.2v4.4"}),t("path",{d:"M15 3.2v4.4"})]}),caption:a(e,{children:[t("rect",{x:"3.5",y:"4.5",width:"17",height:"11",rx:"2"}),t("path",{d:"M3.5 12.8l4.2-3.2 3.6 2.8 3.4-2.4 5.8 4"}),t("path",{d:"M6.5 19.5h11"})]}),quote:a(e,{children:[t("path",{d:"M9.5 5.5C7 7.2 5.5 9.7 5.5 12.8h4v5.7h-5v-5.7"}),t("path",{d:"M19.5 5.5c-2.5 1.7-4 4.2-4 7.3h4v5.7h-5v-5.7"})]}),tag:a(e,{children:[t("rect",{x:"3",y:"5.5",width:"18",height:"13",rx:"2.5"}),t("path",{d:"M8 9.5h8"}),t("path",{d:"M12 9.5v5"})]}),meta:a(e,{children:[t("path",{d:"M4 7h16"}),t("path",{d:"M4 14h3.5"}),t("path",{d:"M10.5 14h3"}),t("path",{d:"M17 14h3"})]})};function T({noun:i,size:h=14,strokeWidth:s=1.8,className:n,style:r}){const d=o[i];return d?t("span",{className:n,style:{display:"inline-flex",...r},"aria-hidden":"true",children:t(d,{size:h})}):t("svg",{className:n,style:r,width:h,height:h,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:s,strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:l[i]})}const f=Object.keys(o),w={eyebrow:"TextSmall \u2014 a small letterform, not a short rule over a long one",heading:"TextSize \u2014 the big/small pair, and it means a SIZE",intro:"TextLines \u2014 deliberately its sibling: the same run of lines WITH an indent rule",value:"Square \u2014 an empty rect; Background \u2014 a filled band. Neither carries a written line",name:"Template \u2014 a bookmark, and this WAS a bookmark until that was noticed. A flag is not in the set",date:"Clock \u2014 a TIME. The shell has no calendar",caption:"Image \u2014 the picture itself. A caption is the line OUTSIDE the frame",quote:"nothing in the set is a pair of quote marks",tag:"Tag \u2014 a luggage tag, which draws our Label instead (owner, 2026-09-05). Type \u2014 a bare T, which is the fallback",meta:"TextLines \u2014 this is that with the gaps that make it read as several facts"},y=Object.keys(l);export{T as FieldGlyph,y as OWN_DRAWN,f as SHELL_BACKED,w as SHELL_VERDICT};
1
+ import{jsx as t,Fragment as e,jsxs as a}from"react/jsx-runtime";import{TitleIcon as c,ButtonIcon as p,DollarIcon as M,HashIcon as g,LinkIcon as m,NoteIcon as u,TagIcon as x,TextLinesIcon as b}from"efficient-easel/icons";const o={body:b,button:p,link:m,label:x,number:g,price:M,note:u,title:c},l={eyebrow:a(e,{children:[t("path",{d:"M5 6.5h5"}),t("path",{d:"M5 12.5h14"}),t("path",{d:"M5 18h11"})]}),heading:a(e,{children:[t("path",{d:"M6.5 5v14"}),t("path",{d:"M17.5 5v14"}),t("path",{d:"M6.5 12h11"})]}),intro:a(e,{children:[t("path",{d:"M4 5.5v13"}),t("path",{d:"M8 7.5h12"}),t("path",{d:"M8 12h12"}),t("path",{d:"M8 16.5h8"})]}),value:a(e,{children:[t("rect",{x:"2.5",y:"7",width:"19",height:"10",rx:"2"}),t("path",{d:"M6.5 12h7"})]}),name:a(e,{children:[t("path",{d:"M6 3.5v17"}),t("path",{d:"M6 5h11.5l-2.6 3.6L17.5 12H6z"})]}),date:a(e,{children:[t("rect",{x:"4",y:"5.5",width:"16",height:"15",rx:"2"}),t("path",{d:"M4 10.5h16"}),t("path",{d:"M9 3.2v4.4"}),t("path",{d:"M15 3.2v4.4"})]}),caption:a(e,{children:[t("rect",{x:"3.5",y:"4.5",width:"17",height:"11",rx:"2"}),t("path",{d:"M3.5 12.8l4.2-3.2 3.6 2.8 3.4-2.4 5.8 4"}),t("path",{d:"M6.5 19.5h11"})]}),quote:a(e,{children:[t("path",{d:"M9.5 5.5C7 7.2 5.5 9.7 5.5 12.8h4v5.7h-5v-5.7"}),t("path",{d:"M19.5 5.5c-2.5 1.7-4 4.2-4 7.3h4v5.7h-5v-5.7"})]}),tag:a(e,{children:[t("rect",{x:"3",y:"5.5",width:"18",height:"13",rx:"2.5"}),t("path",{d:"M8 9.5h8"}),t("path",{d:"M12 9.5v5"})]}),meta:a(e,{children:[t("path",{d:"M4 7h16"}),t("path",{d:"M4 14h3.5"}),t("path",{d:"M10.5 14h3"}),t("path",{d:"M17 14h3"})]})};function T({noun:i,size:h=14,strokeWidth:s=1.8,className:n,style:r}){const d=o[i];return d?t("span",{className:n,style:{display:"inline-flex",...r},"aria-hidden":"true",children:t(d,{size:h})}):t("svg",{className:n,style:r,width:h,height:h,viewBox:"0 0 24 24",fill:"none",stroke:"currentColor",strokeWidth:s,strokeLinecap:"round",strokeLinejoin:"round","aria-hidden":"true",children:l[i]})}const f=Object.keys(o),w={eyebrow:"TextSmall — a small letterform, not a short rule over a long one",heading:"TextSize — the big/small pair, and it means a SIZE",intro:"TextLines — deliberately its sibling: the same run of lines WITH an indent rule",value:"Square — an empty rect; Background — a filled band. Neither carries a written line",name:"Template — a bookmark, and this WAS a bookmark until that was noticed. A flag is not in the set",date:"Clock — a TIME. The shell has no calendar",caption:"Image — the picture itself. A caption is the line OUTSIDE the frame",quote:"nothing in the set is a pair of quote marks",tag:"Tag — a luggage tag, which draws our Label instead (owner, 2026-09-05). Type — a bare T, which is the fallback",meta:"TextLines — this is that with the gaps that make it read as several facts"},y=Object.keys(l);export{T as FieldGlyph,y as OWN_DRAWN,f as SHELL_BACKED,w as SHELL_VERDICT};
@@ -24,4 +24,4 @@
24
24
  <div style="font-family:var(--font-display),Georgia,serif;font-size:20px;font-weight:500;line-height:1.2;margin-top:6px;color:${s.fg};">${G(p.city)}</div>
25
25
  <div style="font-family:var(--font-role-label),var(--font-mono-fallback);font-size:11px;letter-spacing:0.2em;text-transform:uppercase;color:${s.fgDim};margin-top:4px;">${G(p.country)}</div>
26
26
  </div>
27
- `),d.open({map:c,anchor:I}),C.current=l},[l,_,j,t]),x?w("div",{ref:L,className:"sf-card footprint-map relative aspect-[16/9] w-full overflow-hidden border border-line max-[720px]:aspect-[4/5]",style:{backgroundColor:tt},children:[r("style",{dangerouslySetInnerHTML:{__html:yt(j.info)}}),r(T,{pal:m?$:void 0}),r("div",{ref:z,className:"gmap-canvas absolute inset-0 transition-opacity duration-500",style:{opacity:_?1:0}}),r("div",{className:["pointer-events-none absolute inset-0 flex items-center justify-center font-mono text-[length:var(--size-label,12px)] uppercase tracking-[0.24em] text-fg-dim transition-opacity duration-500",_?"opacity-0":"opacity-100"].join(" "),children:"Loading map\u2026"})]}):w("div",{className:["relative aspect-[16/9] w-full overflow-hidden border border-line max-[720px]:aspect-[4/5]",m?"":"bg-bg"].join(" "),style:m?{backgroundColor:$.background}:void 0,children:[r(T,{pal:m?$:void 0}),r("div",{className:["absolute inset-0 flex items-center justify-center px-6 text-center font-mono text-[length:var(--size-label,12px)] uppercase tracking-[0.24em]",m?"":"text-fg-dim"].join(" "),style:m?{color:$.info.fgDim}:void 0,children:g?"Add office coordinates to plot the map":"Add a Google Maps API key to show the map"})]})}export{vt as default};
27
+ `),d.open({map:c,anchor:I}),C.current=l},[l,_,j,t]),x?w("div",{ref:L,className:"sf-card footprint-map relative aspect-[16/9] w-full overflow-hidden border border-line max-[720px]:aspect-[4/5]",style:{backgroundColor:tt},children:[r("style",{dangerouslySetInnerHTML:{__html:yt(j.info)}}),r(T,{pal:m?$:void 0}),r("div",{ref:z,className:"gmap-canvas absolute inset-0 transition-opacity duration-500",style:{opacity:_?1:0}}),r("div",{className:["pointer-events-none absolute inset-0 flex items-center justify-center font-mono text-[length:var(--size-label,12px)] uppercase tracking-[0.24em] text-fg-dim transition-opacity duration-500",_?"opacity-0":"opacity-100"].join(" "),children:"Loading map…"})]}):w("div",{className:["relative aspect-[16/9] w-full overflow-hidden border border-line max-[720px]:aspect-[4/5]",m?"":"bg-bg"].join(" "),style:m?{backgroundColor:$.background}:void 0,children:[r(T,{pal:m?$:void 0}),r("div",{className:["absolute inset-0 flex items-center justify-center px-6 text-center font-mono text-[length:var(--size-label,12px)] uppercase tracking-[0.24em]",m?"":"text-fg-dim"].join(" "),style:m?{color:$.info.fgDim}:void 0,children:g?"Add office coordinates to plot the map":"Add a Google Maps API key to show the map"})]})}export{vt as default};
@@ -1 +1 @@
1
- "use client";import{jsx as t,jsxs as a}from"react/jsx-runtime";import{useEasel as r}from"efficient-easel/easel";import{headingOutline as o}from"../lib/puck/heading-outline.js";function p(){const{appState:i,config:l}=r(e=>e),c=i?.data,n=o(c?.content??[],l),s=n.filter(e=>e.level===1).length;return a("div",{className:"px-4 py-3 text-[13px] text-zinc-600",children:[a("div",{className:"mb-2 flex items-center justify-between text-[11px] font-semibold uppercase tracking-wide text-zinc-500",children:[t("span",{children:"Heading outline"}),t("span",{children:n.length})]}),s!==1&&t("div",{className:"mb-2 rounded bg-amber-50 px-2 py-1 text-[12px] text-amber-700",children:s===0?"No H1 \u2014 add one for SEO.":`${s} H1s \u2014 a page should have exactly one.`}),n.length===0?t("p",{className:"text-zinc-400",children:"No headings yet."}):t("ul",{className:"space-y-1",children:n.map((e,d)=>a("li",{className:"flex items-baseline gap-2",style:{paddingLeft:`${(e.level-1)*12}px`},children:[a("span",{className:"shrink-0 font-mono text-[11px] text-zinc-400",children:["H",e.level]}),t("span",{className:"truncate text-zinc-700",children:e.text})]},d))})]})}export{p as default};
1
+ "use client";import{jsx as t,jsxs as a}from"react/jsx-runtime";import{useEasel as r}from"efficient-easel/easel";import{headingOutline as o}from"../lib/puck/heading-outline.js";function p(){const{appState:i,config:l}=r(e=>e),c=i?.data,n=o(c?.content??[],l),s=n.filter(e=>e.level===1).length;return a("div",{className:"px-4 py-3 text-[13px] text-zinc-600",children:[a("div",{className:"mb-2 flex items-center justify-between text-[11px] font-semibold uppercase tracking-wide text-zinc-500",children:[t("span",{children:"Heading outline"}),t("span",{children:n.length})]}),s!==1&&t("div",{className:"mb-2 rounded bg-amber-50 px-2 py-1 text-[12px] text-amber-700",children:s===0?"No H1 — add one for SEO.":`${s} H1s — a page should have exactly one.`}),n.length===0?t("p",{className:"text-zinc-400",children:"No headings yet."}):t("ul",{className:"space-y-1",children:n.map((e,d)=>a("li",{className:"flex items-baseline gap-2",style:{paddingLeft:`${(e.level-1)*12}px`},children:[a("span",{className:"shrink-0 font-mono text-[11px] text-zinc-400",children:["H",e.level]}),t("span",{className:"truncate text-zinc-700",children:e.text})]},d))})]})}export{p as default};
@@ -1 +1 @@
1
- "use client";import{jsx as t}from"react/jsx-runtime";import{SettingsField as f,SettingsSegmented as h}from"efficient-easel/panel";import{PartResetDot as m}from"./PartResetDot.js";import{SITE_STYLE_UNSET_LABEL as p}from"./SiteStyleUnset.js";import{WIDTH_CHOICE_LABEL as n}from"../lib/content/section-width.js";import{ImageIcon as c}from"efficient-easel/icons";const i="Hero image",r=[{followsWidth:!1,label:n.full},{followsWidth:!0,label:n.page}],g="Whether the big picture at the top of a page runs edge to edge, or sits inside the page width. The words follow the page width either way.";function u({value:o,onChange:a,showHint:s=!0}){const l=o===null,d=o??!1;return t(f,{label:i,icon:t(c,{}),value:l?p:r.find(e=>e.followsWidth===o).label,changed:!l,action:l?void 0:t(m,{label:i,what:"change",onClear:()=>a(null)}),hint:s?g:void 0,children:t(h,{options:r.map(e=>({id:e.followsWidth,label:e.label})),value:d,ariaLabel:i,onChange:a})})}export{i as HERO_IMAGE_LABEL,u as default};
1
+ "use client";import{jsx as t}from"react/jsx-runtime";import{SettingsDefaultReset as f,SettingsField as h,SettingsSegmented as g}from"efficient-easel/panel";import{WIDTH_CHOICE_LABEL as d}from"../lib/content/section-width.js";import{ImageIcon as c}from"efficient-easel/icons";const l="Hero image",o=[{followsWidth:!1,label:d.full},{followsWidth:!0,label:d.page}],u="Whether the big picture at the top of a page runs edge to edge, or sits inside the page width. The words follow the page width either way.";function p({value:i,onChange:a,showHint:r=!0}){const n=i===null,s=i??!1;return t(h,{label:l,icon:t(c,{}),value:o.find(e=>e.followsWidth===s).label,changed:!n,action:t(f,{label:l,changed:!n,detail:o.find(e=>!e.followsWidth).label,onReset:()=>a(null)}),hint:r?u:void 0,children:t(g,{options:o.map(e=>({id:e.followsWidth,label:e.label})),value:s,ariaLabel:l,onChange:a})})}export{l as HERO_IMAGE_LABEL,p as default};
@@ -2,14 +2,11 @@ import { type SlotComponent } from "efficient-easel/blocks";
2
2
  import { type HeroReelShape } from "../lib/reel.js";
3
3
  import { type HeroArrowShape } from "../lib/hero-arrows.js";
4
4
  import type { HeroCopyAlignment } from "../lib/hero-group-placement.js";
5
+ import { HERO_SLIDER_GOTO_EVENT, type HeroSliderGotoDetail } from "../lib/puck/preview-events.js";
5
6
  export declare const HERO_VIDEO_PLAY_LABEL = "Play video";
6
7
  export declare const HERO_VIDEO_HOLD_LABEL = "Hold video";
7
8
  export declare const DEFAULT_TICKER_ITEMS: string[];
8
- export declare const HERO_SLIDER_GOTO_EVENT = "hero-slider:goto";
9
- export interface HeroSliderGotoDetail {
10
- id?: string;
11
- index: number;
12
- }
9
+ export { HERO_SLIDER_GOTO_EVENT, type HeroSliderGotoDetail };
13
10
  export declare function subscribeSliderGoto(host: Element | null | undefined, handler: (event: Event) => void): (() => void) | undefined;
14
11
  interface Props {
15
12
  slides: SlotComponent;
@@ -36,4 +33,3 @@ interface Props {
36
33
  editing?: boolean;
37
34
  }
38
35
  export default function HeroSection({ slides: Slides, alignment, textureOpacity, showTexture, textureColor, phoneUpDown, phoneSideways, autoplay, autoplayInterval, showTicker, tickerItems, heightDesktop, heightMobile, showPicker, pickerShape, pickerPlacement, showArrows, arrowsShape, arrowsPlacement, editing, }: Props): import("react").JSX.Element;
39
- export {};