efficient-web-builder 40.1.1 → 41.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 (1297) hide show
  1. package/CHANGELOG.md +108 -0
  2. package/README.md +27 -6
  3. package/dist/editor/components/ApplyCornersToSiblings.d.ts +1 -1
  4. package/dist/editor/components/ApplyCornersToSiblings.js +1 -1
  5. package/dist/editor/components/BlockGapField.js +1 -1
  6. package/dist/editor/components/CanvasPartsBridge.js +1 -1
  7. package/dist/editor/components/ChatSettingsPanel.js +1 -1
  8. package/dist/editor/components/CornersField.js +1 -1
  9. package/dist/editor/components/DuplicateToPageMenu.js +1 -1
  10. package/dist/editor/components/FieldGlyph.d.ts +1 -1
  11. package/dist/editor/components/HeroPartPanel.d.ts +1 -1
  12. package/dist/editor/components/HeroPartPanel.js +1 -1
  13. package/dist/editor/components/LocationsGroupedField.js +1 -1
  14. package/dist/editor/components/MediaUploadField.js +1 -1
  15. package/dist/editor/components/PartGlyphs.d.ts +1 -8
  16. package/dist/editor/components/PartGlyphs.js +1 -1
  17. package/dist/editor/components/PartInkControl.d.ts +1 -1
  18. package/dist/editor/components/PartInkControl.js +1 -1
  19. package/dist/editor/components/PartSettingsPanel.d.ts +2 -2
  20. package/dist/editor/components/PartSettingsPanel.js +1 -1
  21. package/dist/editor/components/PartTextBox.d.ts +1 -1
  22. package/dist/editor/components/PartTextBox.js +1 -1
  23. package/dist/editor/components/PreviewPartAnchors.d.ts +2 -2
  24. package/dist/editor/components/PreviewPartAnchors.js +1 -1
  25. package/dist/editor/components/PreviewPartStyleContext.d.ts +1 -1
  26. package/dist/editor/components/PreviewThemeFrame.d.ts +1 -1
  27. package/dist/editor/components/PreviewThemeFrame.js +13 -9
  28. package/dist/editor/components/SectionEditor.d.ts +3 -0
  29. package/dist/editor/components/SectionEditor.js +1 -1
  30. package/dist/editor/components/SectionTextEntries.d.ts +1 -1
  31. package/dist/editor/components/SectionTextPartBridge.js +1 -1
  32. package/dist/editor/components/SectionWidthRows.js +1 -1
  33. package/dist/editor/components/ShadowColourField.js +1 -1
  34. package/dist/editor/components/SideSpaceField.js +1 -1
  35. package/dist/editor/components/SiteFields.d.ts +1 -1
  36. package/dist/editor/components/SiteFields.js +1 -1
  37. package/dist/editor/components/SlotChildRows.js +1 -1
  38. package/dist/editor/components/StandaloneSectionEditor.js +1 -1
  39. package/dist/editor/components/StorefrontEditor.js +1 -1
  40. package/dist/editor/components/SwitchToBoxFooter.js +1 -1
  41. package/dist/editor/components/TemplateFieldRow.js +1 -1
  42. package/dist/editor/components/ThemeCard.js +1 -1
  43. package/dist/editor/components/ThemeColourField.js +1 -1
  44. package/dist/editor/components/ThemeField.js +1 -1
  45. package/dist/editor/components/TickerSettingsPanel.js +1 -1
  46. package/dist/editor/components/WebsiteScreenParts.js +1 -1
  47. package/dist/editor/components/WebsiteSettingsPanel.js +1 -1
  48. package/dist/editor/components/storefront-editor.css +23 -23
  49. package/dist/editor/components/useLocationsTree.js +1 -1
  50. package/dist/editor/components/usePinnedChromeSeed.js +1 -1
  51. package/dist/editor/components/useSectionToBoxPass.d.ts +2 -0
  52. package/dist/editor/components/useSectionToBoxPass.js +1 -0
  53. package/dist/editor/lib/document/ColourControl.d.ts +33 -0
  54. package/dist/editor/lib/document/ColourControl.js +1 -0
  55. package/dist/editor/lib/document/MarkupToolbar.d.ts +13 -0
  56. package/dist/editor/lib/document/MarkupToolbar.js +1 -0
  57. package/dist/editor/lib/document/add-palette.d.ts +12 -0
  58. package/dist/editor/lib/document/add-palette.js +1 -0
  59. package/dist/editor/lib/document/add-target.d.ts +2 -0
  60. package/dist/editor/lib/document/add-target.js +1 -0
  61. package/dist/editor/lib/document/apply-card-corners.d.ts +21 -0
  62. package/dist/editor/lib/document/apply-card-corners.js +1 -0
  63. package/dist/editor/lib/document/block-offer.d.ts +10 -0
  64. package/dist/editor/lib/document/block-offer.js +1 -0
  65. package/dist/editor/lib/document/block-source-fields.d.ts +7 -0
  66. package/dist/editor/lib/document/block-source-fields.js +1 -0
  67. package/dist/editor/lib/document/blocks/general/Banner/fields.d.ts +2 -0
  68. package/dist/editor/lib/document/blocks/general/Banner/fields.js +1 -0
  69. package/dist/editor/lib/document/blocks/general/Breadcrumb/fields.d.ts +2 -0
  70. package/dist/editor/lib/document/blocks/general/Breadcrumb/fields.js +1 -0
  71. package/dist/editor/lib/document/blocks/general/ButtonBlock/fields.d.ts +2 -0
  72. package/dist/editor/lib/document/blocks/general/ButtonBlock/fields.js +1 -0
  73. package/dist/editor/lib/document/blocks/general/Cards/fields.d.ts +2 -0
  74. package/dist/editor/lib/document/blocks/general/Cards/fields.js +1 -0
  75. package/dist/editor/lib/document/blocks/general/CategoryBar/fields.d.ts +2 -0
  76. package/dist/editor/lib/document/blocks/general/CategoryBar/fields.js +1 -0
  77. package/dist/editor/lib/document/blocks/general/Chart/fields.d.ts +2 -0
  78. package/dist/editor/lib/document/blocks/general/Chart/fields.js +1 -0
  79. package/dist/editor/lib/document/blocks/general/ContactLocations/fields.d.ts +2 -0
  80. package/dist/editor/lib/document/blocks/general/ContactLocations/fields.js +1 -0
  81. package/dist/editor/lib/document/blocks/general/Countdown/fields.d.ts +2 -0
  82. package/dist/editor/lib/document/blocks/general/Countdown/fields.js +1 -0
  83. package/dist/editor/lib/document/blocks/general/Divider/fields.d.ts +2 -0
  84. package/dist/editor/lib/document/blocks/general/Divider/fields.js +1 -0
  85. package/dist/editor/lib/document/blocks/general/DocBody/fields.d.ts +2 -0
  86. package/dist/editor/lib/document/blocks/general/DocBody/fields.js +1 -0
  87. package/dist/editor/lib/document/blocks/general/DocMasthead/fields.d.ts +2 -0
  88. package/dist/editor/lib/document/blocks/general/DocMasthead/fields.js +1 -0
  89. package/dist/editor/lib/document/blocks/general/DocMetaCards/fields.d.ts +2 -0
  90. package/dist/editor/lib/document/blocks/general/DocMetaCards/fields.js +1 -0
  91. package/dist/editor/lib/document/blocks/general/DocTabs/fields.d.ts +2 -0
  92. package/dist/editor/lib/document/blocks/general/DocTabs/fields.js +1 -0
  93. package/dist/editor/lib/document/blocks/general/Eyebrow/fields.d.ts +2 -0
  94. package/dist/editor/lib/document/blocks/general/Eyebrow/fields.js +1 -0
  95. package/dist/editor/lib/document/blocks/general/FAQ/fields.d.ts +2 -0
  96. package/dist/editor/lib/document/blocks/general/FAQ/fields.js +1 -0
  97. package/dist/editor/lib/document/blocks/general/FeaturedCover/fields.d.ts +2 -0
  98. package/dist/editor/lib/document/blocks/general/FeaturedCover/fields.js +1 -0
  99. package/dist/editor/lib/document/blocks/general/Flex/fields.d.ts +2 -0
  100. package/dist/editor/lib/document/blocks/general/Flex/fields.js +1 -0
  101. package/dist/editor/lib/document/blocks/general/Footprint/fields.d.ts +3 -0
  102. package/dist/editor/lib/document/blocks/general/Footprint/fields.js +1 -0
  103. package/dist/editor/lib/document/blocks/general/Grid/fields.d.ts +2 -0
  104. package/dist/editor/lib/document/blocks/general/Grid/fields.js +1 -0
  105. package/dist/editor/lib/document/blocks/general/Heading/fields.d.ts +2 -0
  106. package/dist/editor/lib/document/blocks/general/Heading/fields.js +1 -0
  107. package/dist/editor/lib/document/blocks/general/Hero/fields.d.ts +2 -0
  108. package/dist/editor/lib/document/blocks/general/Hero/fields.js +1 -0
  109. package/dist/editor/lib/document/blocks/general/HeroGroup/fields.d.ts +2 -0
  110. package/dist/editor/lib/document/blocks/general/HeroGroup/fields.js +1 -0
  111. package/dist/editor/lib/document/blocks/general/HeroSingle/fields.d.ts +2 -0
  112. package/dist/editor/lib/document/blocks/general/HeroSingle/fields.js +1 -0
  113. package/dist/editor/lib/document/blocks/general/HeroSlide/fields.d.ts +2 -0
  114. package/dist/editor/lib/document/blocks/general/HeroSlide/fields.js +1 -0
  115. package/dist/editor/lib/document/blocks/general/ImageBlock/fields.d.ts +2 -0
  116. package/dist/editor/lib/document/blocks/general/ImageBlock/fields.js +1 -0
  117. package/dist/editor/lib/document/blocks/general/Integrations/fields.d.ts +2 -0
  118. package/dist/editor/lib/document/blocks/general/Integrations/fields.js +2 -0
  119. package/dist/editor/lib/document/blocks/general/IntroBleed/fields.d.ts +2 -0
  120. package/dist/editor/lib/document/blocks/general/IntroBleed/fields.js +1 -0
  121. package/dist/editor/lib/document/blocks/general/KeyFeatures/fields.d.ts +2 -0
  122. package/dist/editor/lib/document/blocks/general/KeyFeatures/fields.js +1 -0
  123. package/dist/editor/lib/document/blocks/general/LogoBlock/fields.d.ts +2 -0
  124. package/dist/editor/lib/document/blocks/general/LogoBlock/fields.js +1 -0
  125. package/dist/editor/lib/document/blocks/general/Logos/fields.d.ts +2 -0
  126. package/dist/editor/lib/document/blocks/general/Logos/fields.js +1 -0
  127. package/dist/editor/lib/document/blocks/general/LongRead/fields.d.ts +2 -0
  128. package/dist/editor/lib/document/blocks/general/LongRead/fields.js +1 -0
  129. package/dist/editor/lib/document/blocks/general/Manifesto/fields.d.ts +2 -0
  130. package/dist/editor/lib/document/blocks/general/Manifesto/fields.js +2 -0
  131. package/dist/editor/lib/document/blocks/general/Masthead/fields.d.ts +2 -0
  132. package/dist/editor/lib/document/blocks/general/Masthead/fields.js +1 -0
  133. package/dist/editor/lib/document/blocks/general/Mockup/fields.d.ts +2 -0
  134. package/dist/editor/lib/document/blocks/general/Mockup/fields.js +2 -0
  135. package/dist/editor/lib/document/blocks/general/OrderSummary/fields.d.ts +2 -0
  136. package/dist/editor/lib/document/blocks/general/OrderSummary/fields.js +1 -0
  137. package/dist/editor/lib/document/blocks/general/ParagraphsA/fields.d.ts +2 -0
  138. package/dist/editor/lib/document/blocks/general/ParagraphsA/fields.js +1 -0
  139. package/dist/editor/lib/document/blocks/general/PaymentBadges/fields.d.ts +2 -0
  140. package/dist/editor/lib/document/blocks/general/PaymentBadges/fields.js +1 -0
  141. package/dist/editor/lib/document/blocks/general/PostCard/fields.d.ts +2 -0
  142. package/dist/editor/lib/document/blocks/general/PostCard/fields.js +1 -0
  143. package/dist/editor/lib/document/blocks/general/ProcessSteps/fields.d.ts +2 -0
  144. package/dist/editor/lib/document/blocks/general/ProcessSteps/fields.js +1 -0
  145. package/dist/editor/lib/document/blocks/general/Prose/fields.d.ts +2 -0
  146. package/dist/editor/lib/document/blocks/general/Prose/fields.js +1 -0
  147. package/dist/editor/lib/document/blocks/general/SectionHeader/fields.d.ts +2 -0
  148. package/dist/editor/lib/document/blocks/general/SectionHeader/fields.js +1 -0
  149. package/dist/editor/lib/document/blocks/general/Series/fields.d.ts +2 -0
  150. package/dist/editor/lib/document/blocks/general/Series/fields.js +1 -0
  151. package/dist/editor/lib/document/blocks/general/SpecStrip/fields.d.ts +2 -0
  152. package/dist/editor/lib/document/blocks/general/SpecStrip/fields.js +1 -0
  153. package/dist/editor/lib/document/blocks/general/Split/fields.d.ts +2 -0
  154. package/dist/editor/lib/document/blocks/general/Split/fields.js +1 -0
  155. package/dist/editor/lib/document/blocks/general/Stats/fields.d.ts +2 -0
  156. package/dist/editor/lib/document/blocks/general/Stats/fields.js +1 -0
  157. package/dist/editor/lib/document/blocks/general/StatsParagraph/fields.d.ts +2 -0
  158. package/dist/editor/lib/document/blocks/general/StatsParagraph/fields.js +1 -0
  159. package/dist/editor/lib/document/blocks/general/Testimonials/fields.d.ts +2 -0
  160. package/dist/editor/lib/document/blocks/general/Testimonials/fields.js +1 -0
  161. package/dist/editor/lib/document/blocks/general/Text/fields.d.ts +2 -0
  162. package/dist/editor/lib/document/blocks/general/Text/fields.js +1 -0
  163. package/dist/editor/lib/document/blocks/general/Ticker/fields.d.ts +2 -0
  164. package/dist/editor/lib/document/blocks/general/Ticker/fields.js +1 -0
  165. package/dist/editor/lib/document/blocks/general/Timeline/fields.d.ts +2 -0
  166. package/dist/editor/lib/document/blocks/general/Timeline/fields.js +1 -0
  167. package/dist/editor/lib/document/blocks/general/TimelineTrack/fields.d.ts +2 -0
  168. package/dist/editor/lib/document/blocks/general/TimelineTrack/fields.js +1 -0
  169. package/dist/editor/lib/document/blocks/general/TitleWithButtons/fields.d.ts +2 -0
  170. package/dist/editor/lib/document/blocks/general/TitleWithButtons/fields.js +1 -0
  171. package/dist/editor/lib/document/blocks/general/index.d.ts +2 -0
  172. package/dist/editor/lib/document/blocks/general/index.js +1 -0
  173. package/dist/editor/lib/document/blocks/shared-fields.d.ts +15 -0
  174. package/dist/editor/lib/document/blocks/shared-fields.js +1 -0
  175. package/dist/editor/lib/document/build-config.d.ts +3 -0
  176. package/dist/editor/lib/document/build-config.js +1 -0
  177. package/dist/editor/lib/document/canvas-typing.d.ts +30 -0
  178. package/dist/editor/lib/document/canvas-typing.js +1 -0
  179. package/dist/editor/lib/document/card-row-fields.d.ts +12 -0
  180. package/dist/editor/lib/document/card-row-fields.js +1 -0
  181. package/dist/editor/lib/document/controls.d.ts +437 -0
  182. package/dist/editor/lib/document/controls.js +1 -0
  183. package/dist/editor/lib/document/enclosing-section.d.ts +1 -0
  184. package/dist/editor/lib/document/enclosing-section.js +1 -0
  185. package/dist/editor/lib/document/every-page.d.ts +7 -0
  186. package/dist/editor/lib/document/every-page.js +1 -0
  187. package/dist/editor/lib/document/field-groups.d.ts +34 -0
  188. package/dist/editor/lib/document/field-groups.js +1 -0
  189. package/dist/editor/lib/document/footer-blocks.d.ts +10 -0
  190. package/dist/editor/lib/document/footer-blocks.js +1 -0
  191. package/dist/editor/lib/document/general-registry.d.ts +4 -0
  192. package/dist/editor/lib/document/general-registry.js +1 -0
  193. package/dist/editor/lib/document/geocode-resolve.d.ts +14 -0
  194. package/dist/editor/lib/document/geocode-resolve.js +1 -0
  195. package/dist/editor/lib/document/heading-outline.d.ts +7 -0
  196. package/dist/editor/lib/document/heading-outline.js +1 -0
  197. package/dist/editor/lib/document/hidable-rows-drawn.d.ts +21 -0
  198. package/dist/editor/lib/document/hidable-rows-drawn.js +1 -0
  199. package/dist/editor/lib/document/locations-focus.d.ts +21 -0
  200. package/dist/editor/lib/document/locations-focus.js +1 -0
  201. package/dist/editor/lib/document/locked-blocks.d.ts +3 -0
  202. package/dist/editor/lib/document/locked-blocks.js +1 -0
  203. package/dist/editor/lib/document/logo-color-fields.d.ts +11 -0
  204. package/dist/editor/lib/document/logo-color-fields.js +1 -0
  205. package/dist/editor/lib/document/overrides.d.ts +2 -0
  206. package/dist/editor/lib/document/overrides.js +1 -0
  207. package/dist/editor/lib/document/page-root-fields.d.ts +31 -0
  208. package/dist/editor/lib/document/page-root-fields.js +1 -0
  209. package/dist/editor/lib/document/page-root.d.ts +32 -0
  210. package/dist/editor/lib/document/page-root.js +2 -0
  211. package/dist/editor/lib/document/panel-drop-empty-headings.d.ts +3 -0
  212. package/dist/editor/lib/document/panel-drop-empty-headings.js +1 -0
  213. package/dist/editor/lib/document/panel-heading-scope.d.ts +8 -0
  214. package/dist/editor/lib/document/panel-heading-scope.js +1 -0
  215. package/dist/editor/lib/document/part-anchors.d.ts +26 -0
  216. package/dist/editor/lib/document/part-anchors.js +1 -0
  217. package/dist/editor/lib/document/part-row-field.d.ts +2 -0
  218. package/dist/editor/lib/document/part-row-field.js +1 -0
  219. package/dist/editor/lib/document/part-typing.d.ts +11 -0
  220. package/dist/editor/lib/document/part-typing.js +1 -0
  221. package/dist/editor/lib/document/passes/inspector.d.ts +2 -0
  222. package/dist/editor/lib/document/passes/inspector.js +1 -0
  223. package/dist/editor/lib/document/pinned-in-place-seed.d.ts +16 -0
  224. package/dist/editor/lib/document/pinned-in-place-seed.js +1 -0
  225. package/dist/editor/lib/document/registry.d.ts +3 -0
  226. package/dist/editor/lib/document/registry.js +1 -0
  227. package/dist/editor/lib/document/section-text-suppress.d.ts +9 -0
  228. package/dist/editor/lib/document/section-text-suppress.js +1 -0
  229. package/dist/editor/lib/document/section-width-fields.d.ts +2 -0
  230. package/dist/editor/lib/document/section-width-fields.js +1 -0
  231. package/dist/editor/lib/document/show-when-resolve.d.ts +9 -0
  232. package/dist/editor/lib/document/show-when-resolve.js +1 -0
  233. package/dist/editor/lib/document/template-field.d.ts +13 -0
  234. package/dist/editor/lib/document/template-field.js +1 -0
  235. package/dist/editor/lib/document/text-part-shape.d.ts +18 -0
  236. package/dist/editor/lib/document/text-part-shape.js +2 -0
  237. package/dist/editor/lib/document/theme-swatches.d.ts +3 -0
  238. package/dist/editor/lib/document/theme-swatches.js +1 -0
  239. package/dist/editor/lib/editor-blocks.d.ts +1 -1
  240. package/dist/editor/lib/editor-blocks.js +1 -1
  241. package/dist/editor/lib/pinned-chrome-doc.js +1 -1
  242. package/dist/editor/lib/puck/ColourControl.d.ts +1 -33
  243. package/dist/editor/lib/puck/ColourControl.js +1 -1
  244. package/dist/editor/lib/puck/MarkupToolbar.d.ts +2 -13
  245. package/dist/editor/lib/puck/MarkupToolbar.js +1 -1
  246. package/dist/editor/lib/puck/add-palette.d.ts +1 -13
  247. package/dist/editor/lib/puck/add-palette.js +1 -1
  248. package/dist/editor/lib/puck/add-target.d.ts +1 -2
  249. package/dist/editor/lib/puck/add-target.js +1 -1
  250. package/dist/editor/lib/puck/apply-card-corners.d.ts +1 -21
  251. package/dist/editor/lib/puck/apply-card-corners.js +1 -1
  252. package/dist/editor/lib/puck/block-offer.d.ts +1 -10
  253. package/dist/editor/lib/puck/block-offer.js +1 -1
  254. package/dist/editor/lib/puck/block-source-fields.d.ts +1 -7
  255. package/dist/editor/lib/puck/block-source-fields.js +1 -1
  256. package/dist/editor/lib/puck/blocks/general/Banner/fields.d.ts +1 -2
  257. package/dist/editor/lib/puck/blocks/general/Banner/fields.js +1 -1
  258. package/dist/editor/lib/puck/blocks/general/Breadcrumb/fields.d.ts +1 -2
  259. package/dist/editor/lib/puck/blocks/general/Breadcrumb/fields.js +1 -1
  260. package/dist/editor/lib/puck/blocks/general/ButtonBlock/fields.d.ts +1 -2
  261. package/dist/editor/lib/puck/blocks/general/ButtonBlock/fields.js +1 -1
  262. package/dist/editor/lib/puck/blocks/general/Cards/fields.d.ts +1 -2
  263. package/dist/editor/lib/puck/blocks/general/Cards/fields.js +1 -1
  264. package/dist/editor/lib/puck/blocks/general/CategoryBar/fields.d.ts +1 -2
  265. package/dist/editor/lib/puck/blocks/general/CategoryBar/fields.js +1 -1
  266. package/dist/editor/lib/puck/blocks/general/Chart/fields.d.ts +1 -2
  267. package/dist/editor/lib/puck/blocks/general/Chart/fields.js +1 -1
  268. package/dist/editor/lib/puck/blocks/general/ContactLocations/fields.d.ts +1 -2
  269. package/dist/editor/lib/puck/blocks/general/ContactLocations/fields.js +1 -1
  270. package/dist/editor/lib/puck/blocks/general/Countdown/fields.d.ts +1 -2
  271. package/dist/editor/lib/puck/blocks/general/Countdown/fields.js +1 -1
  272. package/dist/editor/lib/puck/blocks/general/Divider/fields.d.ts +1 -2
  273. package/dist/editor/lib/puck/blocks/general/Divider/fields.js +1 -1
  274. package/dist/editor/lib/puck/blocks/general/DocBody/fields.d.ts +1 -2
  275. package/dist/editor/lib/puck/blocks/general/DocBody/fields.js +1 -1
  276. package/dist/editor/lib/puck/blocks/general/DocMasthead/fields.d.ts +1 -2
  277. package/dist/editor/lib/puck/blocks/general/DocMasthead/fields.js +1 -1
  278. package/dist/editor/lib/puck/blocks/general/DocMetaCards/fields.d.ts +1 -2
  279. package/dist/editor/lib/puck/blocks/general/DocMetaCards/fields.js +1 -1
  280. package/dist/editor/lib/puck/blocks/general/DocTabs/fields.d.ts +1 -2
  281. package/dist/editor/lib/puck/blocks/general/DocTabs/fields.js +1 -1
  282. package/dist/editor/lib/puck/blocks/general/Eyebrow/fields.d.ts +1 -2
  283. package/dist/editor/lib/puck/blocks/general/Eyebrow/fields.js +1 -1
  284. package/dist/editor/lib/puck/blocks/general/FAQ/fields.d.ts +1 -2
  285. package/dist/editor/lib/puck/blocks/general/FAQ/fields.js +1 -1
  286. package/dist/editor/lib/puck/blocks/general/FeaturedCover/fields.d.ts +1 -2
  287. package/dist/editor/lib/puck/blocks/general/FeaturedCover/fields.js +1 -1
  288. package/dist/editor/lib/puck/blocks/general/Flex/fields.d.ts +1 -2
  289. package/dist/editor/lib/puck/blocks/general/Flex/fields.js +1 -1
  290. package/dist/editor/lib/puck/blocks/general/Footprint/fields.d.ts +1 -3
  291. package/dist/editor/lib/puck/blocks/general/Footprint/fields.js +1 -1
  292. package/dist/editor/lib/puck/blocks/general/Grid/fields.d.ts +1 -2
  293. package/dist/editor/lib/puck/blocks/general/Grid/fields.js +1 -1
  294. package/dist/editor/lib/puck/blocks/general/Heading/fields.d.ts +1 -2
  295. package/dist/editor/lib/puck/blocks/general/Heading/fields.js +1 -1
  296. package/dist/editor/lib/puck/blocks/general/Hero/fields.d.ts +1 -2
  297. package/dist/editor/lib/puck/blocks/general/Hero/fields.js +1 -1
  298. package/dist/editor/lib/puck/blocks/general/HeroGroup/fields.d.ts +1 -2
  299. package/dist/editor/lib/puck/blocks/general/HeroGroup/fields.js +1 -1
  300. package/dist/editor/lib/puck/blocks/general/HeroSingle/fields.d.ts +1 -2
  301. package/dist/editor/lib/puck/blocks/general/HeroSingle/fields.js +1 -1
  302. package/dist/editor/lib/puck/blocks/general/HeroSlide/fields.d.ts +1 -2
  303. package/dist/editor/lib/puck/blocks/general/HeroSlide/fields.js +1 -1
  304. package/dist/editor/lib/puck/blocks/general/ImageBlock/fields.d.ts +1 -2
  305. package/dist/editor/lib/puck/blocks/general/ImageBlock/fields.js +1 -1
  306. package/dist/editor/lib/puck/blocks/general/Integrations/fields.d.ts +1 -2
  307. package/dist/editor/lib/puck/blocks/general/Integrations/fields.js +1 -2
  308. package/dist/editor/lib/puck/blocks/general/IntroBleed/fields.d.ts +1 -2
  309. package/dist/editor/lib/puck/blocks/general/IntroBleed/fields.js +1 -1
  310. package/dist/editor/lib/puck/blocks/general/KeyFeatures/fields.d.ts +1 -2
  311. package/dist/editor/lib/puck/blocks/general/KeyFeatures/fields.js +1 -1
  312. package/dist/editor/lib/puck/blocks/general/LogoBlock/fields.d.ts +1 -2
  313. package/dist/editor/lib/puck/blocks/general/LogoBlock/fields.js +1 -1
  314. package/dist/editor/lib/puck/blocks/general/Logos/fields.d.ts +1 -2
  315. package/dist/editor/lib/puck/blocks/general/Logos/fields.js +1 -1
  316. package/dist/editor/lib/puck/blocks/general/LongRead/fields.d.ts +1 -2
  317. package/dist/editor/lib/puck/blocks/general/LongRead/fields.js +1 -1
  318. package/dist/editor/lib/puck/blocks/general/Manifesto/fields.d.ts +1 -2
  319. package/dist/editor/lib/puck/blocks/general/Manifesto/fields.js +1 -2
  320. package/dist/editor/lib/puck/blocks/general/Masthead/fields.d.ts +1 -2
  321. package/dist/editor/lib/puck/blocks/general/Masthead/fields.js +1 -1
  322. package/dist/editor/lib/puck/blocks/general/Mockup/fields.d.ts +1 -2
  323. package/dist/editor/lib/puck/blocks/general/Mockup/fields.js +1 -2
  324. package/dist/editor/lib/puck/blocks/general/OrderSummary/fields.d.ts +1 -2
  325. package/dist/editor/lib/puck/blocks/general/OrderSummary/fields.js +1 -1
  326. package/dist/editor/lib/puck/blocks/general/ParagraphsA/fields.d.ts +1 -2
  327. package/dist/editor/lib/puck/blocks/general/ParagraphsA/fields.js +1 -1
  328. package/dist/editor/lib/puck/blocks/general/PaymentBadges/fields.d.ts +1 -2
  329. package/dist/editor/lib/puck/blocks/general/PaymentBadges/fields.js +1 -1
  330. package/dist/editor/lib/puck/blocks/general/PostCard/fields.d.ts +1 -2
  331. package/dist/editor/lib/puck/blocks/general/PostCard/fields.js +1 -1
  332. package/dist/editor/lib/puck/blocks/general/ProcessSteps/fields.d.ts +1 -2
  333. package/dist/editor/lib/puck/blocks/general/ProcessSteps/fields.js +1 -1
  334. package/dist/editor/lib/puck/blocks/general/Prose/fields.d.ts +1 -2
  335. package/dist/editor/lib/puck/blocks/general/Prose/fields.js +1 -1
  336. package/dist/editor/lib/puck/blocks/general/SectionHeader/fields.d.ts +1 -2
  337. package/dist/editor/lib/puck/blocks/general/SectionHeader/fields.js +1 -1
  338. package/dist/editor/lib/puck/blocks/general/Series/fields.d.ts +1 -2
  339. package/dist/editor/lib/puck/blocks/general/Series/fields.js +1 -1
  340. package/dist/editor/lib/puck/blocks/general/SpecStrip/fields.d.ts +1 -2
  341. package/dist/editor/lib/puck/blocks/general/SpecStrip/fields.js +1 -1
  342. package/dist/editor/lib/puck/blocks/general/Split/fields.d.ts +1 -2
  343. package/dist/editor/lib/puck/blocks/general/Split/fields.js +1 -1
  344. package/dist/editor/lib/puck/blocks/general/Stats/fields.d.ts +1 -2
  345. package/dist/editor/lib/puck/blocks/general/Stats/fields.js +1 -1
  346. package/dist/editor/lib/puck/blocks/general/StatsParagraph/fields.d.ts +1 -2
  347. package/dist/editor/lib/puck/blocks/general/StatsParagraph/fields.js +1 -1
  348. package/dist/editor/lib/puck/blocks/general/Testimonials/fields.d.ts +1 -2
  349. package/dist/editor/lib/puck/blocks/general/Testimonials/fields.js +1 -1
  350. package/dist/editor/lib/puck/blocks/general/Text/fields.d.ts +1 -2
  351. package/dist/editor/lib/puck/blocks/general/Text/fields.js +1 -1
  352. package/dist/editor/lib/puck/blocks/general/Ticker/fields.d.ts +1 -2
  353. package/dist/editor/lib/puck/blocks/general/Ticker/fields.js +1 -1
  354. package/dist/editor/lib/puck/blocks/general/Timeline/fields.d.ts +1 -2
  355. package/dist/editor/lib/puck/blocks/general/Timeline/fields.js +1 -1
  356. package/dist/editor/lib/puck/blocks/general/TimelineTrack/fields.d.ts +1 -2
  357. package/dist/editor/lib/puck/blocks/general/TimelineTrack/fields.js +1 -1
  358. package/dist/editor/lib/puck/blocks/general/TitleWithButtons/fields.d.ts +1 -2
  359. package/dist/editor/lib/puck/blocks/general/TitleWithButtons/fields.js +1 -1
  360. package/dist/editor/lib/puck/blocks/general/index.d.ts +1 -2
  361. package/dist/editor/lib/puck/blocks/general/index.js +1 -1
  362. package/dist/editor/lib/puck/blocks/shared-fields.d.ts +1 -15
  363. package/dist/editor/lib/puck/blocks/shared-fields.js +1 -1
  364. package/dist/editor/lib/puck/build-config.d.ts +1 -3
  365. package/dist/editor/lib/puck/build-config.js +1 -1
  366. package/dist/editor/lib/puck/canvas-typing.d.ts +1 -30
  367. package/dist/editor/lib/puck/canvas-typing.js +1 -1
  368. package/dist/editor/lib/puck/card-row-fields.d.ts +1 -0
  369. package/dist/editor/lib/puck/card-row-fields.js +1 -0
  370. package/dist/editor/lib/puck/controls.d.ts +1 -438
  371. package/dist/editor/lib/puck/controls.js +1 -1
  372. package/dist/editor/lib/puck/enclosing-section.d.ts +1 -1
  373. package/dist/editor/lib/puck/enclosing-section.js +1 -1
  374. package/dist/editor/lib/puck/every-page.d.ts +1 -7
  375. package/dist/editor/lib/puck/every-page.js +1 -1
  376. package/dist/editor/lib/puck/field-groups.d.ts +1 -34
  377. package/dist/editor/lib/puck/field-groups.js +1 -1
  378. package/dist/editor/lib/puck/footer-blocks.d.ts +1 -10
  379. package/dist/editor/lib/puck/footer-blocks.js +1 -1
  380. package/dist/editor/lib/puck/general-registry.d.ts +2 -4
  381. package/dist/editor/lib/puck/general-registry.js +1 -1
  382. package/dist/editor/lib/puck/geocode-resolve.d.ts +1 -14
  383. package/dist/editor/lib/puck/geocode-resolve.js +1 -1
  384. package/dist/editor/lib/puck/heading-outline.d.ts +1 -7
  385. package/dist/editor/lib/puck/heading-outline.js +1 -1
  386. package/dist/editor/lib/puck/hidable-rows-drawn.d.ts +1 -21
  387. package/dist/editor/lib/puck/hidable-rows-drawn.js +1 -1
  388. package/dist/editor/lib/puck/locations-focus.d.ts +1 -22
  389. package/dist/editor/lib/puck/locations-focus.js +1 -1
  390. package/dist/editor/lib/puck/locked-blocks.d.ts +1 -3
  391. package/dist/editor/lib/puck/locked-blocks.js +1 -1
  392. package/dist/editor/lib/puck/logo-color-fields.d.ts +1 -11
  393. package/dist/editor/lib/puck/logo-color-fields.js +1 -1
  394. package/dist/editor/lib/puck/overrides.d.ts +1 -2
  395. package/dist/editor/lib/puck/overrides.js +1 -1
  396. package/dist/editor/lib/puck/page-root-fields.d.ts +1 -31
  397. package/dist/editor/lib/puck/page-root-fields.js +1 -1
  398. package/dist/editor/lib/puck/page-root.d.ts +1 -32
  399. package/dist/editor/lib/puck/page-root.js +1 -2
  400. package/dist/editor/lib/puck/panel-drop-empty-headings.d.ts +1 -3
  401. package/dist/editor/lib/puck/panel-drop-empty-headings.js +1 -1
  402. package/dist/editor/lib/puck/panel-heading-scope.d.ts +1 -8
  403. package/dist/editor/lib/puck/panel-heading-scope.js +1 -1
  404. package/dist/editor/lib/puck/part-anchors.d.ts +1 -25
  405. package/dist/editor/lib/puck/part-anchors.js +1 -1
  406. package/dist/editor/lib/puck/part-row-field.d.ts +1 -2
  407. package/dist/editor/lib/puck/part-row-field.js +1 -1
  408. package/dist/editor/lib/puck/part-typing.d.ts +1 -11
  409. package/dist/editor/lib/puck/part-typing.js +1 -1
  410. package/dist/editor/lib/puck/passes/inspector.d.ts +1 -2
  411. package/dist/editor/lib/puck/passes/inspector.js +1 -1
  412. package/dist/editor/lib/puck/pinned-in-place-seed.d.ts +1 -16
  413. package/dist/editor/lib/puck/pinned-in-place-seed.js +1 -1
  414. package/dist/editor/lib/puck/registry.d.ts +1 -3
  415. package/dist/editor/lib/puck/registry.js +1 -1
  416. package/dist/editor/lib/puck/section-text-suppress.d.ts +1 -9
  417. package/dist/editor/lib/puck/section-text-suppress.js +1 -1
  418. package/dist/editor/lib/puck/section-width-fields.d.ts +1 -2
  419. package/dist/editor/lib/puck/section-width-fields.js +1 -1
  420. package/dist/editor/lib/puck/show-when-resolve.d.ts +1 -9
  421. package/dist/editor/lib/puck/show-when-resolve.js +1 -1
  422. package/dist/editor/lib/puck/template-field.d.ts +1 -13
  423. package/dist/editor/lib/puck/template-field.js +1 -1
  424. package/dist/editor/lib/puck/text-part-shape.d.ts +1 -18
  425. package/dist/editor/lib/puck/text-part-shape.js +1 -2
  426. package/dist/editor/lib/puck/theme-swatches.d.ts +1 -3
  427. package/dist/editor/lib/puck/theme-swatches.js +1 -1
  428. package/dist/editor/lib/sections/new-section-node.js +1 -1
  429. package/dist/editor/lib/sections/section-dry-run.d.ts +81 -0
  430. package/dist/editor/lib/sections/section-dry-run.js +3 -0
  431. package/dist/editor/lib/shared-sections-layer.d.ts +0 -1
  432. package/dist/editor/lib/shared-sections-layer.js +1 -1
  433. package/dist/editor/lib/website-document-addressing.js +1 -1
  434. package/dist/format/lib/content/borders.d.ts +0 -1
  435. package/dist/format/lib/content/borders.js +1 -1
  436. package/dist/format/lib/content/box-layout.d.ts +1 -1
  437. package/dist/format/lib/content/box-layout.js +1 -1
  438. package/dist/format/lib/content/card-image-background.d.ts +0 -1
  439. package/dist/format/lib/content/card-image-background.js +1 -1
  440. package/dist/format/lib/content/card-template.d.ts +34 -0
  441. package/dist/format/lib/content/card-template.js +1 -0
  442. package/dist/format/lib/content/cart-drawer.d.ts +0 -1
  443. package/dist/format/lib/content/cart-drawer.js +1 -1
  444. package/dist/format/lib/content/grid-span.d.ts +0 -2
  445. package/dist/format/lib/content/grid-span.js +1 -1
  446. package/dist/format/lib/content/page-width.d.ts +0 -4
  447. package/dist/format/lib/content/page-width.js +1 -1
  448. package/dist/format/lib/content/product-page.d.ts +0 -1
  449. package/dist/format/lib/content/product-page.js +1 -1
  450. package/dist/format/lib/content/section-width.js +1 -1
  451. package/dist/format/lib/content/subscribe.d.ts +0 -1
  452. package/dist/format/lib/content/subscribe.js +2 -2
  453. package/dist/format/lib/document/blocks/block-types.d.ts +17 -0
  454. package/dist/format/lib/document/blocks/block-types.js +1 -0
  455. package/dist/format/lib/document/blocks/general/Banner/meta.d.ts +2 -0
  456. package/dist/format/lib/document/blocks/general/Banner/meta.js +1 -0
  457. package/dist/format/lib/document/blocks/general/Breadcrumb/meta.d.ts +5 -0
  458. package/dist/format/lib/document/blocks/general/Breadcrumb/meta.js +1 -0
  459. package/dist/format/lib/document/blocks/general/ButtonBlock/meta.d.ts +2 -0
  460. package/dist/format/lib/document/blocks/general/ButtonBlock/meta.js +1 -0
  461. package/dist/format/lib/document/blocks/general/Cards/meta.d.ts +7 -0
  462. package/dist/format/lib/document/blocks/general/Cards/meta.js +1 -0
  463. package/dist/format/lib/document/blocks/general/CategoryBar/meta.d.ts +2 -0
  464. package/dist/format/lib/document/blocks/general/CategoryBar/meta.js +1 -0
  465. package/dist/format/lib/document/blocks/general/Chart/meta.d.ts +6 -0
  466. package/dist/format/lib/document/blocks/general/Chart/meta.js +2 -0
  467. package/dist/format/lib/document/blocks/general/ContactLocations/meta.d.ts +2 -0
  468. package/dist/format/lib/document/blocks/general/ContactLocations/meta.js +1 -0
  469. package/dist/format/lib/document/blocks/general/Countdown/meta.d.ts +6 -0
  470. package/dist/format/lib/document/blocks/general/Countdown/meta.js +1 -0
  471. package/dist/format/lib/document/blocks/general/CustomHTML/fields.d.ts +2 -0
  472. package/dist/format/lib/document/blocks/general/CustomHTML/fields.js +1 -0
  473. package/dist/format/lib/document/blocks/general/CustomHTML/meta.d.ts +2 -0
  474. package/dist/format/lib/document/blocks/general/CustomHTML/meta.js +3 -0
  475. package/dist/format/lib/document/blocks/general/Divider/meta.d.ts +2 -0
  476. package/dist/format/lib/document/blocks/general/Divider/meta.js +1 -0
  477. package/dist/format/lib/document/blocks/general/DocBody/meta.d.ts +5 -0
  478. package/dist/format/lib/document/blocks/general/DocBody/meta.js +1 -0
  479. package/dist/format/lib/document/blocks/general/DocMasthead/meta.d.ts +7 -0
  480. package/dist/format/lib/document/blocks/general/DocMasthead/meta.js +1 -0
  481. package/dist/format/lib/document/blocks/general/DocMetaCards/meta.d.ts +4 -0
  482. package/dist/format/lib/document/blocks/general/DocMetaCards/meta.js +1 -0
  483. package/dist/format/lib/document/blocks/general/DocTabs/meta.d.ts +6 -0
  484. package/dist/format/lib/document/blocks/general/DocTabs/meta.js +1 -0
  485. package/dist/format/lib/document/blocks/general/Eyebrow/meta.d.ts +2 -0
  486. package/dist/format/lib/document/blocks/general/Eyebrow/meta.js +1 -0
  487. package/dist/format/lib/document/blocks/general/FAQ/meta.d.ts +7 -0
  488. package/dist/format/lib/document/blocks/general/FAQ/meta.js +1 -0
  489. package/dist/format/lib/document/blocks/general/FeaturedCover/meta.d.ts +13 -0
  490. package/dist/format/lib/document/blocks/general/FeaturedCover/meta.js +1 -0
  491. package/dist/format/lib/document/blocks/general/Flex/meta.d.ts +7 -0
  492. package/dist/format/lib/document/blocks/general/Flex/meta.js +1 -0
  493. package/dist/format/lib/document/blocks/general/Footprint/meta.d.ts +7 -0
  494. package/dist/format/lib/document/blocks/general/Footprint/meta.js +2 -0
  495. package/dist/format/lib/document/blocks/general/Grid/meta.d.ts +7 -0
  496. package/dist/format/lib/document/blocks/general/Grid/meta.js +1 -0
  497. package/dist/format/lib/document/blocks/general/Heading/meta.d.ts +2 -0
  498. package/dist/format/lib/document/blocks/general/Heading/meta.js +1 -0
  499. package/dist/format/lib/document/blocks/general/Hero/meta.d.ts +7 -0
  500. package/dist/format/lib/document/blocks/general/Hero/meta.js +1 -0
  501. package/dist/format/lib/document/blocks/general/HeroGroup/meta.d.ts +8 -0
  502. package/dist/format/lib/document/blocks/general/HeroGroup/meta.js +1 -0
  503. package/dist/format/lib/document/blocks/general/HeroSingle/meta.d.ts +8 -0
  504. package/dist/format/lib/document/blocks/general/HeroSingle/meta.js +1 -0
  505. package/dist/format/lib/document/blocks/general/HeroSlide/meta.d.ts +8 -0
  506. package/dist/format/lib/document/blocks/general/HeroSlide/meta.js +1 -0
  507. package/dist/format/lib/document/blocks/general/ImageBlock/meta.d.ts +2 -0
  508. package/dist/format/lib/document/blocks/general/ImageBlock/meta.js +1 -0
  509. package/dist/format/lib/document/blocks/general/Integrations/meta.d.ts +2 -0
  510. package/dist/format/lib/document/blocks/general/Integrations/meta.js +1 -0
  511. package/dist/format/lib/document/blocks/general/IntroBleed/meta.d.ts +7 -0
  512. package/dist/format/lib/document/blocks/general/IntroBleed/meta.js +2 -0
  513. package/dist/format/lib/document/blocks/general/KeyFeatures/meta.d.ts +8 -0
  514. package/dist/format/lib/document/blocks/general/KeyFeatures/meta.js +1 -0
  515. package/dist/format/lib/document/blocks/general/LogoBlock/meta.d.ts +2 -0
  516. package/dist/format/lib/document/blocks/general/LogoBlock/meta.js +1 -0
  517. package/dist/format/lib/document/blocks/general/Logos/meta.d.ts +2 -0
  518. package/dist/format/lib/document/blocks/general/Logos/meta.js +1 -0
  519. package/dist/format/lib/document/blocks/general/LongRead/meta.d.ts +19 -0
  520. package/dist/format/lib/document/blocks/general/LongRead/meta.js +1 -0
  521. package/dist/format/lib/document/blocks/general/Manifesto/meta.d.ts +2 -0
  522. package/dist/format/lib/document/blocks/general/Manifesto/meta.js +1 -0
  523. package/dist/format/lib/document/blocks/general/Masthead/meta.d.ts +8 -0
  524. package/dist/format/lib/document/blocks/general/Masthead/meta.js +1 -0
  525. package/dist/format/lib/document/blocks/general/Mockup/meta.d.ts +2 -0
  526. package/dist/format/lib/document/blocks/general/Mockup/meta.js +1 -0
  527. package/dist/format/lib/document/blocks/general/OrderSummary/meta.d.ts +12 -0
  528. package/dist/format/lib/document/blocks/general/OrderSummary/meta.js +1 -0
  529. package/dist/format/lib/document/blocks/general/ParagraphsA/meta.d.ts +9 -0
  530. package/dist/format/lib/document/blocks/general/ParagraphsA/meta.js +1 -0
  531. package/dist/format/lib/document/blocks/general/PaymentBadges/meta.d.ts +5 -0
  532. package/dist/format/lib/document/blocks/general/PaymentBadges/meta.js +1 -0
  533. package/dist/format/lib/document/blocks/general/PostCard/meta.d.ts +9 -0
  534. package/dist/format/lib/document/blocks/general/PostCard/meta.js +1 -0
  535. package/dist/format/lib/document/blocks/general/ProcessSteps/meta.d.ts +13 -0
  536. package/dist/format/lib/document/blocks/general/ProcessSteps/meta.js +1 -0
  537. package/dist/format/lib/document/blocks/general/Prose/meta.d.ts +7 -0
  538. package/dist/format/lib/document/blocks/general/Prose/meta.js +1 -0
  539. package/dist/format/lib/document/blocks/general/SectionHeader/meta.d.ts +2 -0
  540. package/dist/format/lib/document/blocks/general/SectionHeader/meta.js +1 -0
  541. package/dist/format/lib/document/blocks/general/Series/meta.d.ts +8 -0
  542. package/dist/format/lib/document/blocks/general/Series/meta.js +1 -0
  543. package/dist/format/lib/document/blocks/general/Spacer/fields.d.ts +2 -0
  544. package/dist/format/lib/document/blocks/general/Spacer/fields.js +1 -0
  545. package/dist/format/lib/document/blocks/general/Spacer/meta.d.ts +2 -0
  546. package/dist/format/lib/document/blocks/general/Spacer/meta.js +1 -0
  547. package/dist/format/lib/document/blocks/general/SpecStrip/meta.d.ts +2 -0
  548. package/dist/format/lib/document/blocks/general/SpecStrip/meta.js +1 -0
  549. package/dist/format/lib/document/blocks/general/Split/meta.d.ts +10 -0
  550. package/dist/format/lib/document/blocks/general/Split/meta.js +2 -0
  551. package/dist/format/lib/document/blocks/general/Stats/meta.d.ts +2 -0
  552. package/dist/format/lib/document/blocks/general/Stats/meta.js +1 -0
  553. package/dist/format/lib/document/blocks/general/StatsParagraph/meta.d.ts +7 -0
  554. package/dist/format/lib/document/blocks/general/StatsParagraph/meta.js +1 -0
  555. package/dist/format/lib/document/blocks/general/Testimonials/meta.d.ts +6 -0
  556. package/dist/format/lib/document/blocks/general/Testimonials/meta.js +1 -0
  557. package/dist/format/lib/document/blocks/general/Text/meta.d.ts +2 -0
  558. package/dist/format/lib/document/blocks/general/Text/meta.js +1 -0
  559. package/dist/format/lib/document/blocks/general/Ticker/meta.d.ts +5 -0
  560. package/dist/format/lib/document/blocks/general/Ticker/meta.js +1 -0
  561. package/dist/format/lib/document/blocks/general/Timeline/meta.d.ts +12 -0
  562. package/dist/format/lib/document/blocks/general/Timeline/meta.js +2 -0
  563. package/dist/format/lib/document/blocks/general/TimelineTrack/meta.d.ts +10 -0
  564. package/dist/format/lib/document/blocks/general/TimelineTrack/meta.js +1 -0
  565. package/dist/format/lib/document/blocks/general/TitleWithButtons/meta.d.ts +5 -0
  566. package/dist/format/lib/document/blocks/general/TitleWithButtons/meta.js +2 -0
  567. package/dist/format/lib/document/blocks/general/metas.d.ts +62 -0
  568. package/dist/format/lib/document/blocks/general/metas.js +1 -0
  569. package/dist/format/lib/document/blocks/general/section-bg-built-in.d.ts +6 -0
  570. package/dist/format/lib/document/blocks/general/section-bg-built-in.js +1 -0
  571. package/dist/format/lib/document/blocks/general/text-part-shapes.json +2162 -0
  572. package/dist/format/lib/document/blocks/placeholders.d.ts +25 -0
  573. package/dist/format/lib/document/blocks/placeholders.js +1 -0
  574. package/dist/format/lib/document/box-footer.d.ts +9 -0
  575. package/dist/format/lib/document/box-footer.js +1 -0
  576. package/dist/format/lib/document/cap-hero-groups.d.ts +1 -0
  577. package/dist/format/lib/document/cap-hero-groups.js +1 -0
  578. package/dist/format/lib/document/card-template-layers.d.ts +4 -0
  579. package/dist/format/lib/document/card-template-layers.js +1 -0
  580. package/dist/format/lib/document/container-blocks.d.ts +10 -0
  581. package/dist/format/lib/document/container-blocks.js +1 -0
  582. package/dist/format/lib/document/editor-page-context.d.ts +7 -0
  583. package/dist/format/lib/document/editor-page-context.js +1 -0
  584. package/dist/format/lib/document/field-noun.d.ts +3 -0
  585. package/dist/format/lib/document/field-noun.js +1 -0
  586. package/dist/format/lib/document/footer-block-row-name.d.ts +4 -0
  587. package/dist/format/lib/document/footer-block-row-name.js +1 -0
  588. package/dist/format/lib/document/general-order.d.ts +3 -0
  589. package/dist/format/lib/document/general-order.js +1 -0
  590. package/dist/format/lib/document/home-page.d.ts +1 -0
  591. package/dist/format/lib/document/home-page.js +1 -0
  592. package/dist/format/lib/document/left-view.d.ts +5 -0
  593. package/dist/format/lib/document/left-view.js +1 -0
  594. package/dist/format/lib/document/locations-tree.d.ts +23 -0
  595. package/dist/format/lib/document/locations-tree.js +2 -0
  596. package/dist/format/lib/document/media-drop.d.ts +3 -0
  597. package/dist/format/lib/document/media-drop.js +1 -0
  598. package/dist/format/lib/document/media-manifest.json +147 -0
  599. package/dist/format/lib/document/mockup-variant-fields.d.ts +10 -0
  600. package/dist/format/lib/document/mockup-variant-fields.js +1 -0
  601. package/dist/format/lib/document/nestable-content-sections.d.ts +2 -0
  602. package/dist/format/lib/document/nestable-content-sections.js +1 -0
  603. package/dist/format/lib/document/neutralization-contracts.d.ts +43 -0
  604. package/dist/format/lib/document/neutralization-contracts.js +1 -0
  605. package/dist/format/lib/document/new-site-header-seed.d.ts +17 -0
  606. package/dist/format/lib/document/new-site-header-seed.js +1 -0
  607. package/dist/format/lib/document/one-h1.d.ts +3 -0
  608. package/dist/format/lib/document/one-h1.js +1 -0
  609. package/dist/format/lib/document/overlay-portal.d.ts +3 -0
  610. package/dist/format/lib/document/overlay-portal.js +1 -0
  611. package/dist/format/lib/document/own-box.d.ts +2 -0
  612. package/dist/format/lib/document/own-box.js +1 -0
  613. package/dist/format/lib/document/panel-bands.d.ts +14 -0
  614. package/dist/format/lib/document/panel-bands.js +1 -0
  615. package/dist/format/lib/document/part-inks.d.ts +11 -0
  616. package/dist/format/lib/document/part-inks.js +1 -0
  617. package/dist/format/lib/document/part-key.d.ts +9 -0
  618. package/dist/format/lib/document/part-key.js +1 -0
  619. package/dist/format/lib/document/passes/catalogue-labels.d.ts +2 -0
  620. package/dist/format/lib/document/passes/catalogue-labels.js +1 -0
  621. package/dist/format/lib/document/passes/document-position.d.ts +16 -0
  622. package/dist/format/lib/document/passes/document-position.js +1 -0
  623. package/dist/format/lib/document/passes/empty-headings.d.ts +2 -0
  624. package/dist/format/lib/document/passes/empty-headings.js +1 -0
  625. package/dist/format/lib/document/passes/hidden-nodes.d.ts +2 -0
  626. package/dist/format/lib/document/passes/hidden-nodes.js +1 -0
  627. package/dist/format/lib/document/passes/media-values.d.ts +3 -0
  628. package/dist/format/lib/document/passes/media-values.js +1 -0
  629. package/dist/format/lib/document/passes/registry-context.d.ts +2 -0
  630. package/dist/format/lib/document/passes/registry-context.js +1 -0
  631. package/dist/format/lib/document/passes/settings-groups.d.ts +3 -0
  632. package/dist/format/lib/document/passes/settings-groups.js +1 -0
  633. package/dist/format/lib/document/passes/show-when-rows.d.ts +4 -0
  634. package/dist/format/lib/document/passes/show-when-rows.js +1 -0
  635. package/dist/format/lib/document/passes/slot-rules.d.ts +4 -0
  636. package/dist/format/lib/document/passes/slot-rules.js +1 -0
  637. package/dist/format/lib/document/passes/types.d.ts +71 -0
  638. package/dist/format/lib/document/passes/types.js +0 -0
  639. package/dist/format/lib/document/phone-override.d.ts +3 -0
  640. package/dist/format/lib/document/phone-override.js +1 -0
  641. package/dist/format/lib/document/pinned-seed-gate.d.ts +6 -0
  642. package/dist/format/lib/document/pinned-seed-gate.js +1 -0
  643. package/dist/format/lib/document/renamed-props.d.ts +2 -0
  644. package/dist/format/lib/document/renamed-props.js +1 -0
  645. package/dist/format/lib/document/section-catalog.d.ts +37 -0
  646. package/dist/format/lib/document/section-catalog.js +7 -0
  647. package/dist/format/lib/document/section-descriptions.d.ts +1 -0
  648. package/dist/format/lib/document/section-descriptions.js +1 -0
  649. package/dist/format/lib/document/section-groups.d.ts +30 -0
  650. package/dist/format/lib/document/section-groups.js +1 -0
  651. package/dist/format/lib/document/show-when-attach.d.ts +12 -0
  652. package/dist/format/lib/document/show-when-attach.js +1 -0
  653. package/dist/format/lib/document/site-gap-fields.d.ts +2 -0
  654. package/dist/format/lib/document/site-gap-fields.js +1 -0
  655. package/dist/format/lib/document/snapshot-contracts.d.ts +4 -0
  656. package/dist/format/lib/document/snapshot-contracts.js +1 -0
  657. package/dist/format/lib/document/source-bound-parts.d.ts +14 -0
  658. package/dist/format/lib/document/source-bound-parts.js +1 -0
  659. package/dist/format/lib/document/source-row-name.d.ts +2 -0
  660. package/dist/format/lib/document/source-row-name.js +1 -0
  661. package/dist/format/lib/document/templateFields.d.ts +2 -0
  662. package/dist/format/lib/document/templateFields.js +1 -0
  663. package/dist/format/lib/document/text-seeds.d.ts +2 -0
  664. package/dist/format/lib/document/text-seeds.js +1 -0
  665. package/dist/format/lib/editor/preview-href.js +1 -1
  666. package/dist/format/lib/editor-words-catalogue.d.ts +4 -5
  667. package/dist/format/lib/editor-words-catalogue.js +3 -3
  668. package/dist/format/lib/fonts.d.ts +0 -1
  669. package/dist/format/lib/fonts.js +1 -1
  670. package/dist/format/lib/hero-arrows.d.ts +0 -1
  671. package/dist/format/lib/hero-arrows.js +1 -1
  672. package/dist/format/lib/hero-group-placement.d.ts +0 -1
  673. package/dist/format/lib/hero-group-placement.js +1 -1
  674. package/dist/format/lib/hero-phone-stack.d.ts +0 -1
  675. package/dist/format/lib/hero-phone-stack.js +1 -1
  676. package/dist/format/lib/links/page-link-rules.js +1 -1
  677. package/dist/format/lib/puck/blocks/block-types.d.ts +1 -17
  678. package/dist/format/lib/puck/blocks/block-types.js +1 -1
  679. package/dist/format/lib/puck/blocks/general/Banner/meta.d.ts +1 -2
  680. package/dist/format/lib/puck/blocks/general/Banner/meta.js +1 -1
  681. package/dist/format/lib/puck/blocks/general/Breadcrumb/meta.d.ts +1 -5
  682. package/dist/format/lib/puck/blocks/general/Breadcrumb/meta.js +1 -1
  683. package/dist/format/lib/puck/blocks/general/ButtonBlock/meta.d.ts +1 -2
  684. package/dist/format/lib/puck/blocks/general/ButtonBlock/meta.js +1 -1
  685. package/dist/format/lib/puck/blocks/general/Cards/meta.d.ts +1 -7
  686. package/dist/format/lib/puck/blocks/general/Cards/meta.js +1 -1
  687. package/dist/format/lib/puck/blocks/general/CategoryBar/meta.d.ts +1 -2
  688. package/dist/format/lib/puck/blocks/general/CategoryBar/meta.js +1 -1
  689. package/dist/format/lib/puck/blocks/general/Chart/meta.d.ts +1 -6
  690. package/dist/format/lib/puck/blocks/general/Chart/meta.js +1 -2
  691. package/dist/format/lib/puck/blocks/general/ContactLocations/meta.d.ts +1 -2
  692. package/dist/format/lib/puck/blocks/general/ContactLocations/meta.js +1 -1
  693. package/dist/format/lib/puck/blocks/general/Countdown/meta.d.ts +1 -6
  694. package/dist/format/lib/puck/blocks/general/Countdown/meta.js +1 -1
  695. package/dist/format/lib/puck/blocks/general/CustomHTML/fields.d.ts +1 -2
  696. package/dist/format/lib/puck/blocks/general/CustomHTML/fields.js +1 -1
  697. package/dist/format/lib/puck/blocks/general/CustomHTML/meta.d.ts +1 -2
  698. package/dist/format/lib/puck/blocks/general/CustomHTML/meta.js +1 -3
  699. package/dist/format/lib/puck/blocks/general/Divider/meta.d.ts +1 -2
  700. package/dist/format/lib/puck/blocks/general/Divider/meta.js +1 -1
  701. package/dist/format/lib/puck/blocks/general/DocBody/meta.d.ts +1 -5
  702. package/dist/format/lib/puck/blocks/general/DocBody/meta.js +1 -1
  703. package/dist/format/lib/puck/blocks/general/DocMasthead/meta.d.ts +1 -7
  704. package/dist/format/lib/puck/blocks/general/DocMasthead/meta.js +1 -1
  705. package/dist/format/lib/puck/blocks/general/DocMetaCards/meta.d.ts +1 -4
  706. package/dist/format/lib/puck/blocks/general/DocMetaCards/meta.js +1 -1
  707. package/dist/format/lib/puck/blocks/general/DocTabs/meta.d.ts +1 -6
  708. package/dist/format/lib/puck/blocks/general/DocTabs/meta.js +1 -1
  709. package/dist/format/lib/puck/blocks/general/Eyebrow/meta.d.ts +1 -2
  710. package/dist/format/lib/puck/blocks/general/Eyebrow/meta.js +1 -1
  711. package/dist/format/lib/puck/blocks/general/FAQ/meta.d.ts +1 -7
  712. package/dist/format/lib/puck/blocks/general/FAQ/meta.js +1 -1
  713. package/dist/format/lib/puck/blocks/general/FeaturedCover/meta.d.ts +1 -13
  714. package/dist/format/lib/puck/blocks/general/FeaturedCover/meta.js +1 -1
  715. package/dist/format/lib/puck/blocks/general/Flex/meta.d.ts +1 -7
  716. package/dist/format/lib/puck/blocks/general/Flex/meta.js +1 -1
  717. package/dist/format/lib/puck/blocks/general/Footprint/meta.d.ts +1 -7
  718. package/dist/format/lib/puck/blocks/general/Footprint/meta.js +1 -2
  719. package/dist/format/lib/puck/blocks/general/Grid/meta.d.ts +1 -7
  720. package/dist/format/lib/puck/blocks/general/Grid/meta.js +1 -1
  721. package/dist/format/lib/puck/blocks/general/Heading/meta.d.ts +1 -2
  722. package/dist/format/lib/puck/blocks/general/Heading/meta.js +1 -1
  723. package/dist/format/lib/puck/blocks/general/Hero/meta.d.ts +1 -7
  724. package/dist/format/lib/puck/blocks/general/Hero/meta.js +1 -1
  725. package/dist/format/lib/puck/blocks/general/HeroGroup/meta.d.ts +1 -8
  726. package/dist/format/lib/puck/blocks/general/HeroGroup/meta.js +1 -1
  727. package/dist/format/lib/puck/blocks/general/HeroSingle/meta.d.ts +1 -8
  728. package/dist/format/lib/puck/blocks/general/HeroSingle/meta.js +1 -1
  729. package/dist/format/lib/puck/blocks/general/HeroSlide/meta.d.ts +1 -8
  730. package/dist/format/lib/puck/blocks/general/HeroSlide/meta.js +1 -1
  731. package/dist/format/lib/puck/blocks/general/ImageBlock/meta.d.ts +1 -2
  732. package/dist/format/lib/puck/blocks/general/ImageBlock/meta.js +1 -1
  733. package/dist/format/lib/puck/blocks/general/Integrations/meta.d.ts +1 -2
  734. package/dist/format/lib/puck/blocks/general/Integrations/meta.js +1 -1
  735. package/dist/format/lib/puck/blocks/general/IntroBleed/meta.d.ts +1 -7
  736. package/dist/format/lib/puck/blocks/general/IntroBleed/meta.js +1 -2
  737. package/dist/format/lib/puck/blocks/general/KeyFeatures/meta.d.ts +1 -8
  738. package/dist/format/lib/puck/blocks/general/KeyFeatures/meta.js +1 -1
  739. package/dist/format/lib/puck/blocks/general/LogoBlock/meta.d.ts +1 -2
  740. package/dist/format/lib/puck/blocks/general/LogoBlock/meta.js +1 -1
  741. package/dist/format/lib/puck/blocks/general/Logos/meta.d.ts +1 -2
  742. package/dist/format/lib/puck/blocks/general/Logos/meta.js +1 -1
  743. package/dist/format/lib/puck/blocks/general/LongRead/meta.d.ts +1 -19
  744. package/dist/format/lib/puck/blocks/general/LongRead/meta.js +1 -1
  745. package/dist/format/lib/puck/blocks/general/Manifesto/meta.d.ts +1 -2
  746. package/dist/format/lib/puck/blocks/general/Manifesto/meta.js +1 -1
  747. package/dist/format/lib/puck/blocks/general/Masthead/meta.d.ts +1 -8
  748. package/dist/format/lib/puck/blocks/general/Masthead/meta.js +1 -1
  749. package/dist/format/lib/puck/blocks/general/Mockup/meta.d.ts +1 -2
  750. package/dist/format/lib/puck/blocks/general/Mockup/meta.js +1 -1
  751. package/dist/format/lib/puck/blocks/general/OrderSummary/meta.d.ts +1 -6
  752. package/dist/format/lib/puck/blocks/general/OrderSummary/meta.js +1 -1
  753. package/dist/format/lib/puck/blocks/general/ParagraphsA/meta.d.ts +1 -9
  754. package/dist/format/lib/puck/blocks/general/ParagraphsA/meta.js +1 -1
  755. package/dist/format/lib/puck/blocks/general/PaymentBadges/meta.d.ts +1 -5
  756. package/dist/format/lib/puck/blocks/general/PaymentBadges/meta.js +1 -1
  757. package/dist/format/lib/puck/blocks/general/PostCard/meta.d.ts +1 -9
  758. package/dist/format/lib/puck/blocks/general/PostCard/meta.js +1 -1
  759. package/dist/format/lib/puck/blocks/general/ProcessSteps/meta.d.ts +1 -13
  760. package/dist/format/lib/puck/blocks/general/ProcessSteps/meta.js +1 -1
  761. package/dist/format/lib/puck/blocks/general/Prose/meta.d.ts +1 -7
  762. package/dist/format/lib/puck/blocks/general/Prose/meta.js +1 -1
  763. package/dist/format/lib/puck/blocks/general/SectionHeader/meta.d.ts +1 -2
  764. package/dist/format/lib/puck/blocks/general/SectionHeader/meta.js +1 -1
  765. package/dist/format/lib/puck/blocks/general/Series/meta.d.ts +1 -8
  766. package/dist/format/lib/puck/blocks/general/Series/meta.js +1 -1
  767. package/dist/format/lib/puck/blocks/general/Spacer/fields.d.ts +1 -2
  768. package/dist/format/lib/puck/blocks/general/Spacer/fields.js +1 -1
  769. package/dist/format/lib/puck/blocks/general/Spacer/meta.d.ts +1 -2
  770. package/dist/format/lib/puck/blocks/general/Spacer/meta.js +1 -1
  771. package/dist/format/lib/puck/blocks/general/SpecStrip/meta.d.ts +1 -2
  772. package/dist/format/lib/puck/blocks/general/SpecStrip/meta.js +1 -1
  773. package/dist/format/lib/puck/blocks/general/Split/meta.d.ts +1 -10
  774. package/dist/format/lib/puck/blocks/general/Split/meta.js +1 -2
  775. package/dist/format/lib/puck/blocks/general/Stats/meta.d.ts +1 -2
  776. package/dist/format/lib/puck/blocks/general/Stats/meta.js +1 -1
  777. package/dist/format/lib/puck/blocks/general/StatsParagraph/meta.d.ts +1 -7
  778. package/dist/format/lib/puck/blocks/general/StatsParagraph/meta.js +1 -1
  779. package/dist/format/lib/puck/blocks/general/Testimonials/meta.d.ts +1 -6
  780. package/dist/format/lib/puck/blocks/general/Testimonials/meta.js +1 -1
  781. package/dist/format/lib/puck/blocks/general/Text/meta.d.ts +1 -2
  782. package/dist/format/lib/puck/blocks/general/Text/meta.js +1 -1
  783. package/dist/format/lib/puck/blocks/general/Ticker/meta.d.ts +1 -5
  784. package/dist/format/lib/puck/blocks/general/Ticker/meta.js +1 -1
  785. package/dist/format/lib/puck/blocks/general/Timeline/meta.d.ts +1 -12
  786. package/dist/format/lib/puck/blocks/general/Timeline/meta.js +1 -2
  787. package/dist/format/lib/puck/blocks/general/TimelineTrack/meta.d.ts +1 -10
  788. package/dist/format/lib/puck/blocks/general/TimelineTrack/meta.js +1 -1
  789. package/dist/format/lib/puck/blocks/general/TitleWithButtons/meta.d.ts +1 -5
  790. package/dist/format/lib/puck/blocks/general/TitleWithButtons/meta.js +1 -2
  791. package/dist/format/lib/puck/blocks/general/metas.d.ts +1 -62
  792. package/dist/format/lib/puck/blocks/general/metas.js +1 -1
  793. package/dist/format/lib/puck/blocks/general/section-bg-built-in.d.ts +1 -6
  794. package/dist/format/lib/puck/blocks/general/section-bg-built-in.js +1 -1
  795. package/dist/format/lib/puck/blocks/placeholders.d.ts +1 -25
  796. package/dist/format/lib/puck/blocks/placeholders.js +1 -1
  797. package/dist/format/lib/puck/box-footer.d.ts +1 -9
  798. package/dist/format/lib/puck/box-footer.js +1 -1
  799. package/dist/format/lib/puck/cap-hero-groups.d.ts +1 -1
  800. package/dist/format/lib/puck/cap-hero-groups.js +1 -1
  801. package/dist/format/lib/puck/card-template-layers.d.ts +1 -0
  802. package/dist/format/lib/puck/card-template-layers.js +1 -0
  803. package/dist/format/lib/puck/container-blocks.d.ts +1 -10
  804. package/dist/format/lib/puck/container-blocks.js +1 -1
  805. package/dist/format/lib/puck/editor-page-context.d.ts +1 -7
  806. package/dist/format/lib/puck/editor-page-context.js +1 -1
  807. package/dist/format/lib/puck/field-noun.d.ts +1 -3
  808. package/dist/format/lib/puck/field-noun.js +1 -1
  809. package/dist/format/lib/puck/footer-block-row-name.d.ts +1 -4
  810. package/dist/format/lib/puck/footer-block-row-name.js +1 -1
  811. package/dist/format/lib/puck/general-order.d.ts +1 -3
  812. package/dist/format/lib/puck/general-order.js +1 -1
  813. package/dist/format/lib/puck/home-page.d.ts +1 -1
  814. package/dist/format/lib/puck/home-page.js +1 -1
  815. package/dist/format/lib/puck/left-view.d.ts +1 -5
  816. package/dist/format/lib/puck/left-view.js +1 -1
  817. package/dist/format/lib/puck/locations-tree.d.ts +1 -23
  818. package/dist/format/lib/puck/locations-tree.js +1 -2
  819. package/dist/format/lib/puck/media-drop.d.ts +1 -3
  820. package/dist/format/lib/puck/media-drop.js +1 -1
  821. package/dist/format/lib/puck/mockup-variant-fields.d.ts +1 -10
  822. package/dist/format/lib/puck/mockup-variant-fields.js +1 -1
  823. package/dist/format/lib/puck/nestable-content-sections.d.ts +1 -0
  824. package/dist/format/lib/puck/nestable-content-sections.js +1 -0
  825. package/dist/format/lib/puck/neutralization-contracts.d.ts +1 -43
  826. package/dist/format/lib/puck/neutralization-contracts.js +1 -1
  827. package/dist/format/lib/puck/new-site-header-seed.d.ts +1 -17
  828. package/dist/format/lib/puck/new-site-header-seed.js +1 -1
  829. package/dist/format/lib/puck/one-h1.d.ts +1 -3
  830. package/dist/format/lib/puck/one-h1.js +1 -1
  831. package/dist/format/lib/puck/overlay-portal.d.ts +1 -2
  832. package/dist/format/lib/puck/overlay-portal.js +1 -1
  833. package/dist/format/lib/puck/own-box.d.ts +1 -2
  834. package/dist/format/lib/puck/own-box.js +1 -1
  835. package/dist/format/lib/puck/panel-bands.d.ts +1 -14
  836. package/dist/format/lib/puck/panel-bands.js +1 -1
  837. package/dist/format/lib/puck/part-inks.d.ts +1 -11
  838. package/dist/format/lib/puck/part-inks.js +1 -1
  839. package/dist/format/lib/puck/part-key.d.ts +1 -9
  840. package/dist/format/lib/puck/part-key.js +1 -1
  841. package/dist/format/lib/puck/passes/catalogue-labels.d.ts +1 -2
  842. package/dist/format/lib/puck/passes/catalogue-labels.js +1 -1
  843. package/dist/format/lib/puck/passes/document-position.d.ts +1 -16
  844. package/dist/format/lib/puck/passes/document-position.js +1 -1
  845. package/dist/format/lib/puck/passes/empty-headings.d.ts +1 -2
  846. package/dist/format/lib/puck/passes/empty-headings.js +1 -1
  847. package/dist/format/lib/puck/passes/hidden-nodes.d.ts +1 -2
  848. package/dist/format/lib/puck/passes/hidden-nodes.js +1 -1
  849. package/dist/format/lib/puck/passes/media-values.d.ts +1 -3
  850. package/dist/format/lib/puck/passes/media-values.js +1 -1
  851. package/dist/format/lib/puck/passes/registry-context.d.ts +1 -2
  852. package/dist/format/lib/puck/passes/registry-context.js +1 -1
  853. package/dist/format/lib/puck/passes/settings-groups.d.ts +1 -3
  854. package/dist/format/lib/puck/passes/settings-groups.js +1 -1
  855. package/dist/format/lib/puck/passes/show-when-rows.d.ts +1 -4
  856. package/dist/format/lib/puck/passes/show-when-rows.js +1 -1
  857. package/dist/format/lib/puck/passes/slot-rules.d.ts +1 -4
  858. package/dist/format/lib/puck/passes/slot-rules.js +1 -1
  859. package/dist/format/lib/puck/passes/types.d.ts +1 -71
  860. package/dist/format/lib/puck/passes/types.js +1 -0
  861. package/dist/format/lib/puck/phone-override.d.ts +1 -4
  862. package/dist/format/lib/puck/phone-override.js +1 -1
  863. package/dist/format/lib/puck/pinned-seed-gate.d.ts +1 -6
  864. package/dist/format/lib/puck/pinned-seed-gate.js +1 -1
  865. package/dist/format/lib/puck/renamed-props.d.ts +1 -2
  866. package/dist/format/lib/puck/renamed-props.js +1 -1
  867. package/dist/format/lib/puck/section-catalog.d.ts +1 -36
  868. package/dist/format/lib/puck/section-catalog.js +1 -7
  869. package/dist/format/lib/puck/section-descriptions.d.ts +1 -1
  870. package/dist/format/lib/puck/section-descriptions.js +1 -1
  871. package/dist/format/lib/puck/section-groups.d.ts +1 -30
  872. package/dist/format/lib/puck/section-groups.js +1 -1
  873. package/dist/format/lib/puck/show-when-attach.d.ts +1 -12
  874. package/dist/format/lib/puck/show-when-attach.js +1 -1
  875. package/dist/format/lib/puck/site-gap-fields.d.ts +1 -2
  876. package/dist/format/lib/puck/site-gap-fields.js +1 -1
  877. package/dist/format/lib/puck/snapshot-contracts.d.ts +1 -4
  878. package/dist/format/lib/puck/snapshot-contracts.js +1 -1
  879. package/dist/format/lib/puck/source-bound-parts.d.ts +1 -14
  880. package/dist/format/lib/puck/source-bound-parts.js +1 -1
  881. package/dist/format/lib/puck/source-row-name.d.ts +1 -2
  882. package/dist/format/lib/puck/source-row-name.js +1 -1
  883. package/dist/format/lib/puck/templateFields.d.ts +1 -2
  884. package/dist/format/lib/puck/templateFields.js +1 -1
  885. package/dist/format/lib/puck/text-seeds.d.ts +1 -2
  886. package/dist/format/lib/puck/text-seeds.js +1 -1
  887. package/dist/format/lib/reel.d.ts +0 -1
  888. package/dist/format/lib/reel.js +1 -1
  889. package/dist/format/lib/sections/section-head-placement.js +1 -1
  890. package/dist/format/lib/sections/section-head-style.js +1 -1
  891. package/dist/format/lib/sections/section-presets.js +1 -1
  892. package/dist/format/lib/sections/section-text-kinds.d.ts +0 -1
  893. package/dist/format/lib/sections/section-text-kinds.js +1 -1
  894. package/dist/format/lib/sections/spec-table-regions.d.ts +0 -1
  895. package/dist/format/lib/sections/spec-table-regions.js +1 -1
  896. package/dist/format/lib/source-rules/document-surfaces.d.ts +16 -0
  897. package/dist/format/lib/source-rules/document-surfaces.js +8 -0
  898. package/dist/format/lib/source-rules/editor-drag-off.d.ts +8 -0
  899. package/dist/format/lib/source-rules/editor-drag-off.js +4 -0
  900. package/dist/format/lib/source-rules/editor-puck-drag-off.d.ts +2 -8
  901. package/dist/format/lib/source-rules/editor-puck-drag-off.js +1 -4
  902. package/dist/format/lib/source-rules/label-hints.js +4 -4
  903. package/dist/format/lib/source-rules/label-vocabulary.js +4 -4
  904. package/dist/format/lib/source-rules/mirrored-rows-agree.js +6 -6
  905. package/dist/format/lib/source-rules/no-glyph-rows.d.ts +1 -1
  906. package/dist/format/lib/source-rules/no-glyph-rows.js +4 -4
  907. package/dist/format/lib/source-rules/one-show-when.js +3 -3
  908. package/dist/format/lib/source-rules/panel-rows-use-the-shared-row.d.ts +1 -1
  909. package/dist/format/lib/source-rules/panel-rows-use-the-shared-row.js +15 -15
  910. package/dist/format/lib/source-rules/puck-document-surfaces.d.ts +2 -16
  911. package/dist/format/lib/source-rules/puck-document-surfaces.js +1 -8
  912. package/dist/format/lib/source-rules/support/document-folder.d.ts +4 -0
  913. package/dist/format/lib/source-rules/support/document-folder.js +1 -0
  914. package/dist/format/lib/source-rules/support/registry-source.d.ts +4 -3
  915. package/dist/format/lib/source-rules/support/registry-source.js +3 -3
  916. package/dist/format/lib/theme.d.ts +0 -3
  917. package/dist/format/lib/theme.js +2 -2
  918. package/dist/render/components/CardRowContext.d.ts +25 -0
  919. package/dist/render/components/CardRowContext.js +1 -0
  920. package/dist/render/components/CategoryBar.js +1 -1
  921. package/dist/render/components/ContactLocations.js +1 -1
  922. package/dist/render/components/Countdown.js +1 -1
  923. package/dist/render/components/DocTabs.js +1 -1
  924. package/dist/render/components/FAQ.d.ts +1 -1
  925. package/dist/render/components/FAQ.js +1 -1
  926. package/dist/render/components/Heading.js +1 -1
  927. package/dist/render/components/HeroSection.js +2 -2
  928. package/dist/render/components/HeroSingle.js +2 -2
  929. package/dist/render/components/IntroBleed.js +1 -1
  930. package/dist/render/components/OrderSummary.d.ts +3 -1
  931. package/dist/render/components/OrderSummary.js +1 -1
  932. package/dist/render/components/PartStyledKind.js +1 -1
  933. package/dist/render/components/PartStyledText.js +1 -1
  934. package/dist/render/components/PublishedPartStylesContext.d.ts +2 -2
  935. package/dist/render/components/PublishedPartStylesContext.js +1 -1
  936. package/dist/render/components/SectionHeader.js +1 -1
  937. package/dist/render/components/Text.js +1 -1
  938. package/dist/render/components/goldPhrases.js +1 -1
  939. package/dist/render/lib/document/blocks/general/Banner/render.d.ts +2 -0
  940. package/dist/render/lib/document/blocks/general/Banner/render.js +1 -0
  941. package/dist/render/lib/document/blocks/general/Breadcrumb/render.d.ts +2 -0
  942. package/dist/render/lib/document/blocks/general/Breadcrumb/render.js +1 -0
  943. package/dist/render/lib/document/blocks/general/ButtonBlock/render.d.ts +2 -0
  944. package/dist/render/lib/document/blocks/general/ButtonBlock/render.js +1 -0
  945. package/dist/render/lib/document/blocks/general/Cards/render.d.ts +2 -0
  946. package/dist/render/lib/document/blocks/general/Cards/render.js +1 -0
  947. package/dist/render/lib/document/blocks/general/CategoryBar/render.d.ts +2 -0
  948. package/dist/render/lib/document/blocks/general/CategoryBar/render.js +1 -0
  949. package/dist/render/lib/document/blocks/general/Chart/render.d.ts +2 -0
  950. package/dist/render/lib/document/blocks/general/Chart/render.js +1 -0
  951. package/dist/render/lib/document/blocks/general/ContactLocations/render.d.ts +2 -0
  952. package/dist/render/lib/document/blocks/general/ContactLocations/render.js +1 -0
  953. package/dist/render/lib/document/blocks/general/Countdown/render.d.ts +2 -0
  954. package/dist/render/lib/document/blocks/general/Countdown/render.js +1 -0
  955. package/dist/render/lib/document/blocks/general/CustomHTML/render.d.ts +2 -0
  956. package/dist/render/lib/document/blocks/general/CustomHTML/render.js +1 -0
  957. package/dist/render/lib/document/blocks/general/Divider/render.d.ts +2 -0
  958. package/dist/render/lib/document/blocks/general/Divider/render.js +1 -0
  959. package/dist/render/lib/document/blocks/general/DocBody/render.d.ts +2 -0
  960. package/dist/render/lib/document/blocks/general/DocBody/render.js +1 -0
  961. package/dist/render/lib/document/blocks/general/DocMasthead/render.d.ts +2 -0
  962. package/dist/render/lib/document/blocks/general/DocMasthead/render.js +1 -0
  963. package/dist/render/lib/document/blocks/general/DocMetaCards/render.d.ts +2 -0
  964. package/dist/render/lib/document/blocks/general/DocMetaCards/render.js +1 -0
  965. package/dist/render/lib/document/blocks/general/DocTabs/render.d.ts +2 -0
  966. package/dist/render/lib/document/blocks/general/DocTabs/render.js +1 -0
  967. package/dist/render/lib/document/blocks/general/Eyebrow/render.d.ts +2 -0
  968. package/dist/render/lib/document/blocks/general/Eyebrow/render.js +1 -0
  969. package/dist/render/lib/document/blocks/general/FAQ/render.d.ts +2 -0
  970. package/dist/render/lib/document/blocks/general/FAQ/render.js +1 -0
  971. package/dist/render/lib/document/blocks/general/FeaturedCover/render.d.ts +2 -0
  972. package/dist/render/lib/document/blocks/general/FeaturedCover/render.js +1 -0
  973. package/dist/render/lib/document/blocks/general/Flex/render.d.ts +2 -0
  974. package/dist/render/lib/document/blocks/general/Flex/render.js +1 -0
  975. package/dist/render/lib/document/blocks/general/Footprint/render.d.ts +2 -0
  976. package/dist/render/lib/document/blocks/general/Footprint/render.js +1 -0
  977. package/dist/render/lib/document/blocks/general/Grid/render.d.ts +2 -0
  978. package/dist/render/lib/document/blocks/general/Grid/render.js +1 -0
  979. package/dist/render/lib/document/blocks/general/Heading/render.d.ts +2 -0
  980. package/dist/render/lib/document/blocks/general/Heading/render.js +1 -0
  981. package/dist/render/lib/document/blocks/general/Hero/render.d.ts +2 -0
  982. package/dist/render/lib/document/blocks/general/Hero/render.js +1 -0
  983. package/dist/render/lib/document/blocks/general/HeroGroup/render.d.ts +2 -0
  984. package/dist/render/lib/document/blocks/general/HeroGroup/render.js +1 -0
  985. package/dist/render/lib/document/blocks/general/HeroSingle/render.d.ts +2 -0
  986. package/dist/render/lib/document/blocks/general/HeroSingle/render.js +1 -0
  987. package/dist/render/lib/document/blocks/general/HeroSlide/render.d.ts +2 -0
  988. package/dist/render/lib/document/blocks/general/HeroSlide/render.js +1 -0
  989. package/dist/render/lib/document/blocks/general/ImageBlock/render.d.ts +2 -0
  990. package/dist/render/lib/document/blocks/general/ImageBlock/render.js +1 -0
  991. package/dist/render/lib/document/blocks/general/Integrations/render.d.ts +2 -0
  992. package/dist/render/lib/document/blocks/general/Integrations/render.js +2 -0
  993. package/dist/render/lib/document/blocks/general/IntroBleed/render.d.ts +2 -0
  994. package/dist/render/lib/document/blocks/general/IntroBleed/render.js +1 -0
  995. package/dist/render/lib/document/blocks/general/KeyFeatures/render.d.ts +2 -0
  996. package/dist/render/lib/document/blocks/general/KeyFeatures/render.js +1 -0
  997. package/dist/render/lib/document/blocks/general/LogoBlock/render.d.ts +2 -0
  998. package/dist/render/lib/document/blocks/general/LogoBlock/render.js +1 -0
  999. package/dist/render/lib/document/blocks/general/Logos/render.d.ts +2 -0
  1000. package/dist/render/lib/document/blocks/general/Logos/render.js +1 -0
  1001. package/dist/render/lib/document/blocks/general/LongRead/render.d.ts +2 -0
  1002. package/dist/render/lib/document/blocks/general/LongRead/render.js +1 -0
  1003. package/dist/render/lib/document/blocks/general/Manifesto/render.d.ts +2 -0
  1004. package/dist/render/lib/document/blocks/general/Manifesto/render.js +1 -0
  1005. package/dist/render/lib/document/blocks/general/Masthead/render.d.ts +2 -0
  1006. package/dist/render/lib/document/blocks/general/Masthead/render.js +1 -0
  1007. package/dist/render/lib/document/blocks/general/Mockup/render.d.ts +2 -0
  1008. package/dist/render/lib/document/blocks/general/Mockup/render.js +2 -0
  1009. package/dist/render/lib/document/blocks/general/OrderSummary/render.d.ts +2 -0
  1010. package/dist/render/lib/document/blocks/general/OrderSummary/render.js +1 -0
  1011. package/dist/render/lib/document/blocks/general/ParagraphsA/render.d.ts +2 -0
  1012. package/dist/render/lib/document/blocks/general/ParagraphsA/render.js +1 -0
  1013. package/dist/render/lib/document/blocks/general/PaymentBadges/render.d.ts +2 -0
  1014. package/dist/render/lib/document/blocks/general/PaymentBadges/render.js +1 -0
  1015. package/dist/render/lib/document/blocks/general/PostCard/render.d.ts +2 -0
  1016. package/dist/render/lib/document/blocks/general/PostCard/render.js +1 -0
  1017. package/dist/render/lib/document/blocks/general/ProcessSteps/render.d.ts +2 -0
  1018. package/dist/render/lib/document/blocks/general/ProcessSteps/render.js +1 -0
  1019. package/dist/render/lib/document/blocks/general/Prose/render.d.ts +2 -0
  1020. package/dist/render/lib/document/blocks/general/Prose/render.js +1 -0
  1021. package/dist/render/lib/document/blocks/general/SectionHeader/render.d.ts +2 -0
  1022. package/dist/render/lib/document/blocks/general/SectionHeader/render.js +1 -0
  1023. package/dist/render/lib/document/blocks/general/Series/render.d.ts +2 -0
  1024. package/dist/render/lib/document/blocks/general/Series/render.js +1 -0
  1025. package/dist/render/lib/document/blocks/general/Spacer/render.d.ts +2 -0
  1026. package/dist/render/lib/document/blocks/general/Spacer/render.js +1 -0
  1027. package/dist/render/lib/document/blocks/general/SpecStrip/render.d.ts +2 -0
  1028. package/dist/render/lib/document/blocks/general/SpecStrip/render.js +1 -0
  1029. package/dist/render/lib/document/blocks/general/Split/render.d.ts +2 -0
  1030. package/dist/render/lib/document/blocks/general/Split/render.js +1 -0
  1031. package/dist/render/lib/document/blocks/general/Stats/render.d.ts +2 -0
  1032. package/dist/render/lib/document/blocks/general/Stats/render.js +1 -0
  1033. package/dist/render/lib/document/blocks/general/StatsParagraph/render.d.ts +2 -0
  1034. package/dist/render/lib/document/blocks/general/StatsParagraph/render.js +1 -0
  1035. package/dist/render/lib/document/blocks/general/Testimonials/render.d.ts +2 -0
  1036. package/dist/render/lib/document/blocks/general/Testimonials/render.js +1 -0
  1037. package/dist/render/lib/document/blocks/general/Text/render.d.ts +2 -0
  1038. package/dist/render/lib/document/blocks/general/Text/render.js +1 -0
  1039. package/dist/render/lib/document/blocks/general/Ticker/render.d.ts +2 -0
  1040. package/dist/render/lib/document/blocks/general/Ticker/render.js +1 -0
  1041. package/dist/render/lib/document/blocks/general/Timeline/render.d.ts +2 -0
  1042. package/dist/render/lib/document/blocks/general/Timeline/render.js +1 -0
  1043. package/dist/render/lib/document/blocks/general/TimelineTrack/render.d.ts +2 -0
  1044. package/dist/render/lib/document/blocks/general/TimelineTrack/render.js +1 -0
  1045. package/dist/render/lib/document/blocks/general/TitleWithButtons/render.d.ts +2 -0
  1046. package/dist/render/lib/document/blocks/general/TitleWithButtons/render.js +1 -0
  1047. package/dist/render/lib/document/blocks/general/render-config.d.ts +8 -0
  1048. package/dist/render/lib/document/blocks/general/render-config.js +1 -0
  1049. package/dist/render/lib/document/blocks/general/renders.d.ts +58 -0
  1050. package/dist/render/lib/document/blocks/general/renders.js +1 -0
  1051. package/dist/render/lib/document/blocks/general/section-to-box-row-parts.d.ts +26 -0
  1052. package/dist/render/lib/document/blocks/general/section-to-box-row-parts.js +1 -0
  1053. package/dist/render/lib/document/blocks/general/section-to-box-rows.d.ts +7 -0
  1054. package/dist/render/lib/document/blocks/general/section-to-box-rows.js +1 -0
  1055. package/dist/render/lib/document/blocks/scaffold.d.ts +23 -0
  1056. package/dist/render/lib/document/blocks/scaffold.js +1 -0
  1057. package/dist/render/lib/document/booking-preview.d.ts +3 -0
  1058. package/dist/render/lib/document/booking-preview.js +1 -0
  1059. package/dist/render/lib/document/editing-bridges.d.ts +11 -0
  1060. package/dist/render/lib/document/editing-bridges.js +1 -0
  1061. package/dist/render/lib/document/header-clearance.d.ts +49 -0
  1062. package/dist/render/lib/document/header-clearance.js +1 -0
  1063. package/dist/render/lib/document/header-ink.d.ts +15 -0
  1064. package/dist/render/lib/document/header-ink.js +1 -0
  1065. package/dist/render/lib/document/hero-media-parts.d.ts +42 -0
  1066. package/dist/render/lib/document/hero-media-parts.js +1 -0
  1067. package/dist/render/lib/document/migrate-legacy.d.ts +2 -0
  1068. package/dist/render/lib/document/migrate-legacy.js +1 -0
  1069. package/dist/render/lib/document/page-frame.d.ts +34 -0
  1070. package/dist/render/lib/document/page-frame.js +1 -0
  1071. package/dist/render/lib/document/page-render.d.ts +6 -0
  1072. package/dist/render/lib/document/page-render.js +1 -0
  1073. package/dist/render/lib/document/part-rows.d.ts +15 -0
  1074. package/dist/render/lib/document/part-rows.js +1 -0
  1075. package/dist/render/lib/document/part-styles.d.ts +153 -0
  1076. package/dist/render/lib/document/part-styles.js +2 -0
  1077. package/dist/render/lib/document/part-text.d.ts +11 -0
  1078. package/dist/render/lib/document/part-text.js +1 -0
  1079. package/dist/render/lib/document/passes/borders.d.ts +2 -0
  1080. package/dist/render/lib/document/passes/borders.js +1 -0
  1081. package/dist/render/lib/document/passes/cell-width.d.ts +4 -0
  1082. package/dist/render/lib/document/passes/cell-width.js +1 -0
  1083. package/dist/render/lib/document/passes/clickable-parts.d.ts +2 -0
  1084. package/dist/render/lib/document/passes/clickable-parts.js +1 -0
  1085. package/dist/render/lib/document/passes/corners.d.ts +4 -0
  1086. package/dist/render/lib/document/passes/corners.js +1 -0
  1087. package/dist/render/lib/document/passes/index.d.ts +5 -0
  1088. package/dist/render/lib/document/passes/index.js +1 -0
  1089. package/dist/render/lib/document/passes/section-anchor.d.ts +2 -0
  1090. package/dist/render/lib/document/passes/section-anchor.js +1 -0
  1091. package/dist/render/lib/document/passes/section-animation.d.ts +2 -0
  1092. package/dist/render/lib/document/passes/section-animation.js +1 -0
  1093. package/dist/render/lib/document/passes/section-height.d.ts +2 -0
  1094. package/dist/render/lib/document/passes/section-height.js +1 -0
  1095. package/dist/render/lib/document/passes/section-padding.d.ts +9 -0
  1096. package/dist/render/lib/document/passes/section-padding.js +1 -0
  1097. package/dist/render/lib/document/passes/section-sticky.d.ts +3 -0
  1098. package/dist/render/lib/document/passes/section-sticky.js +1 -0
  1099. package/dist/render/lib/document/passes/section-theme.d.ts +3 -0
  1100. package/dist/render/lib/document/passes/section-theme.js +1 -0
  1101. package/dist/render/lib/document/passes/section-width.d.ts +18 -0
  1102. package/dist/render/lib/document/passes/section-width.js +1 -0
  1103. package/dist/render/lib/document/render-registry.d.ts +3 -0
  1104. package/dist/render/lib/document/render-registry.js +1 -0
  1105. package/dist/render/lib/document/sanitize.d.ts +1 -0
  1106. package/dist/render/lib/document/sanitize.js +1 -0
  1107. package/dist/render/lib/document/selection-parent.d.ts +12 -0
  1108. package/dist/render/lib/document/selection-parent.js +1 -0
  1109. package/dist/render/lib/document/show-when.d.ts +19 -0
  1110. package/dist/render/lib/document/show-when.js +1 -0
  1111. package/dist/render/lib/document/slot-specs.d.ts +8 -0
  1112. package/dist/render/lib/document/slot-specs.js +1 -0
  1113. package/dist/render/lib/document/text-parts.d.ts +42 -0
  1114. package/dist/render/lib/document/text-parts.js +1 -0
  1115. package/dist/render/lib/media.d.ts +0 -1
  1116. package/dist/render/lib/media.js +1 -1
  1117. package/dist/render/lib/puck/blocks/general/Banner/render.d.ts +1 -2
  1118. package/dist/render/lib/puck/blocks/general/Banner/render.js +1 -1
  1119. package/dist/render/lib/puck/blocks/general/Breadcrumb/render.d.ts +1 -2
  1120. package/dist/render/lib/puck/blocks/general/Breadcrumb/render.js +1 -1
  1121. package/dist/render/lib/puck/blocks/general/ButtonBlock/render.d.ts +1 -2
  1122. package/dist/render/lib/puck/blocks/general/ButtonBlock/render.js +1 -1
  1123. package/dist/render/lib/puck/blocks/general/Cards/render.d.ts +1 -2
  1124. package/dist/render/lib/puck/blocks/general/Cards/render.js +1 -1
  1125. package/dist/render/lib/puck/blocks/general/CategoryBar/render.d.ts +1 -2
  1126. package/dist/render/lib/puck/blocks/general/CategoryBar/render.js +1 -1
  1127. package/dist/render/lib/puck/blocks/general/Chart/render.d.ts +1 -2
  1128. package/dist/render/lib/puck/blocks/general/Chart/render.js +1 -1
  1129. package/dist/render/lib/puck/blocks/general/ContactLocations/render.d.ts +1 -2
  1130. package/dist/render/lib/puck/blocks/general/ContactLocations/render.js +1 -1
  1131. package/dist/render/lib/puck/blocks/general/Countdown/render.d.ts +1 -2
  1132. package/dist/render/lib/puck/blocks/general/Countdown/render.js +1 -1
  1133. package/dist/render/lib/puck/blocks/general/CustomHTML/render.d.ts +1 -2
  1134. package/dist/render/lib/puck/blocks/general/CustomHTML/render.js +1 -1
  1135. package/dist/render/lib/puck/blocks/general/Divider/render.d.ts +1 -2
  1136. package/dist/render/lib/puck/blocks/general/Divider/render.js +1 -1
  1137. package/dist/render/lib/puck/blocks/general/DocBody/render.d.ts +1 -2
  1138. package/dist/render/lib/puck/blocks/general/DocBody/render.js +1 -1
  1139. package/dist/render/lib/puck/blocks/general/DocMasthead/render.d.ts +1 -2
  1140. package/dist/render/lib/puck/blocks/general/DocMasthead/render.js +1 -1
  1141. package/dist/render/lib/puck/blocks/general/DocMetaCards/render.d.ts +1 -2
  1142. package/dist/render/lib/puck/blocks/general/DocMetaCards/render.js +1 -1
  1143. package/dist/render/lib/puck/blocks/general/DocTabs/render.d.ts +1 -2
  1144. package/dist/render/lib/puck/blocks/general/DocTabs/render.js +1 -1
  1145. package/dist/render/lib/puck/blocks/general/Eyebrow/render.d.ts +1 -2
  1146. package/dist/render/lib/puck/blocks/general/Eyebrow/render.js +1 -1
  1147. package/dist/render/lib/puck/blocks/general/FAQ/render.d.ts +1 -2
  1148. package/dist/render/lib/puck/blocks/general/FAQ/render.js +1 -1
  1149. package/dist/render/lib/puck/blocks/general/FeaturedCover/render.d.ts +1 -2
  1150. package/dist/render/lib/puck/blocks/general/FeaturedCover/render.js +1 -1
  1151. package/dist/render/lib/puck/blocks/general/Flex/render.d.ts +1 -2
  1152. package/dist/render/lib/puck/blocks/general/Flex/render.js +1 -1
  1153. package/dist/render/lib/puck/blocks/general/Footprint/render.d.ts +1 -2
  1154. package/dist/render/lib/puck/blocks/general/Footprint/render.js +1 -1
  1155. package/dist/render/lib/puck/blocks/general/Grid/render.d.ts +1 -2
  1156. package/dist/render/lib/puck/blocks/general/Grid/render.js +1 -1
  1157. package/dist/render/lib/puck/blocks/general/Heading/render.d.ts +1 -2
  1158. package/dist/render/lib/puck/blocks/general/Heading/render.js +1 -1
  1159. package/dist/render/lib/puck/blocks/general/Hero/render.d.ts +1 -2
  1160. package/dist/render/lib/puck/blocks/general/Hero/render.js +1 -1
  1161. package/dist/render/lib/puck/blocks/general/HeroGroup/render.d.ts +1 -2
  1162. package/dist/render/lib/puck/blocks/general/HeroGroup/render.js +1 -1
  1163. package/dist/render/lib/puck/blocks/general/HeroSingle/render.d.ts +1 -2
  1164. package/dist/render/lib/puck/blocks/general/HeroSingle/render.js +1 -1
  1165. package/dist/render/lib/puck/blocks/general/HeroSlide/render.d.ts +1 -2
  1166. package/dist/render/lib/puck/blocks/general/HeroSlide/render.js +1 -1
  1167. package/dist/render/lib/puck/blocks/general/ImageBlock/render.d.ts +1 -2
  1168. package/dist/render/lib/puck/blocks/general/ImageBlock/render.js +1 -1
  1169. package/dist/render/lib/puck/blocks/general/Integrations/render.d.ts +1 -2
  1170. package/dist/render/lib/puck/blocks/general/Integrations/render.js +1 -2
  1171. package/dist/render/lib/puck/blocks/general/IntroBleed/render.d.ts +1 -2
  1172. package/dist/render/lib/puck/blocks/general/IntroBleed/render.js +1 -1
  1173. package/dist/render/lib/puck/blocks/general/KeyFeatures/render.d.ts +1 -2
  1174. package/dist/render/lib/puck/blocks/general/KeyFeatures/render.js +1 -1
  1175. package/dist/render/lib/puck/blocks/general/LogoBlock/render.d.ts +1 -2
  1176. package/dist/render/lib/puck/blocks/general/LogoBlock/render.js +1 -1
  1177. package/dist/render/lib/puck/blocks/general/Logos/render.d.ts +1 -2
  1178. package/dist/render/lib/puck/blocks/general/Logos/render.js +1 -1
  1179. package/dist/render/lib/puck/blocks/general/LongRead/render.d.ts +1 -2
  1180. package/dist/render/lib/puck/blocks/general/LongRead/render.js +1 -1
  1181. package/dist/render/lib/puck/blocks/general/Manifesto/render.d.ts +1 -2
  1182. package/dist/render/lib/puck/blocks/general/Manifesto/render.js +1 -1
  1183. package/dist/render/lib/puck/blocks/general/Masthead/render.d.ts +1 -2
  1184. package/dist/render/lib/puck/blocks/general/Masthead/render.js +1 -1
  1185. package/dist/render/lib/puck/blocks/general/Mockup/render.d.ts +1 -2
  1186. package/dist/render/lib/puck/blocks/general/Mockup/render.js +1 -2
  1187. package/dist/render/lib/puck/blocks/general/OrderSummary/render.d.ts +1 -2
  1188. package/dist/render/lib/puck/blocks/general/OrderSummary/render.js +1 -1
  1189. package/dist/render/lib/puck/blocks/general/ParagraphsA/render.d.ts +1 -2
  1190. package/dist/render/lib/puck/blocks/general/ParagraphsA/render.js +1 -1
  1191. package/dist/render/lib/puck/blocks/general/PaymentBadges/render.d.ts +1 -2
  1192. package/dist/render/lib/puck/blocks/general/PaymentBadges/render.js +1 -1
  1193. package/dist/render/lib/puck/blocks/general/PostCard/render.d.ts +1 -2
  1194. package/dist/render/lib/puck/blocks/general/PostCard/render.js +1 -1
  1195. package/dist/render/lib/puck/blocks/general/ProcessSteps/render.d.ts +1 -2
  1196. package/dist/render/lib/puck/blocks/general/ProcessSteps/render.js +1 -1
  1197. package/dist/render/lib/puck/blocks/general/Prose/render.d.ts +1 -2
  1198. package/dist/render/lib/puck/blocks/general/Prose/render.js +1 -1
  1199. package/dist/render/lib/puck/blocks/general/SectionHeader/render.d.ts +1 -2
  1200. package/dist/render/lib/puck/blocks/general/SectionHeader/render.js +1 -1
  1201. package/dist/render/lib/puck/blocks/general/Series/render.d.ts +1 -2
  1202. package/dist/render/lib/puck/blocks/general/Series/render.js +1 -1
  1203. package/dist/render/lib/puck/blocks/general/Spacer/render.d.ts +1 -2
  1204. package/dist/render/lib/puck/blocks/general/Spacer/render.js +1 -1
  1205. package/dist/render/lib/puck/blocks/general/SpecStrip/render.d.ts +1 -2
  1206. package/dist/render/lib/puck/blocks/general/SpecStrip/render.js +1 -1
  1207. package/dist/render/lib/puck/blocks/general/Split/render.d.ts +1 -2
  1208. package/dist/render/lib/puck/blocks/general/Split/render.js +1 -1
  1209. package/dist/render/lib/puck/blocks/general/Stats/render.d.ts +1 -2
  1210. package/dist/render/lib/puck/blocks/general/Stats/render.js +1 -1
  1211. package/dist/render/lib/puck/blocks/general/StatsParagraph/render.d.ts +1 -2
  1212. package/dist/render/lib/puck/blocks/general/StatsParagraph/render.js +1 -1
  1213. package/dist/render/lib/puck/blocks/general/Testimonials/render.d.ts +1 -2
  1214. package/dist/render/lib/puck/blocks/general/Testimonials/render.js +1 -1
  1215. package/dist/render/lib/puck/blocks/general/Text/render.d.ts +1 -2
  1216. package/dist/render/lib/puck/blocks/general/Text/render.js +1 -1
  1217. package/dist/render/lib/puck/blocks/general/Ticker/render.d.ts +1 -2
  1218. package/dist/render/lib/puck/blocks/general/Ticker/render.js +1 -1
  1219. package/dist/render/lib/puck/blocks/general/Timeline/render.d.ts +1 -2
  1220. package/dist/render/lib/puck/blocks/general/Timeline/render.js +1 -1
  1221. package/dist/render/lib/puck/blocks/general/TimelineTrack/render.d.ts +1 -2
  1222. package/dist/render/lib/puck/blocks/general/TimelineTrack/render.js +1 -1
  1223. package/dist/render/lib/puck/blocks/general/TitleWithButtons/render.d.ts +1 -2
  1224. package/dist/render/lib/puck/blocks/general/TitleWithButtons/render.js +1 -1
  1225. package/dist/render/lib/puck/blocks/general/render-config.d.ts +1 -8
  1226. package/dist/render/lib/puck/blocks/general/render-config.js +1 -1
  1227. package/dist/render/lib/puck/blocks/general/renders.d.ts +1 -58
  1228. package/dist/render/lib/puck/blocks/general/renders.js +1 -1
  1229. package/dist/render/lib/puck/blocks/general/section-to-box-row-parts.d.ts +1 -0
  1230. package/dist/render/lib/puck/blocks/general/section-to-box-row-parts.js +1 -0
  1231. package/dist/render/lib/puck/blocks/general/section-to-box-rows.d.ts +1 -0
  1232. package/dist/render/lib/puck/blocks/general/section-to-box-rows.js +1 -0
  1233. package/dist/render/lib/puck/blocks/scaffold.d.ts +1 -23
  1234. package/dist/render/lib/puck/blocks/scaffold.js +1 -1
  1235. package/dist/render/lib/puck/booking-preview.d.ts +1 -3
  1236. package/dist/render/lib/puck/booking-preview.js +1 -1
  1237. package/dist/render/lib/puck/editing-bridges.d.ts +1 -11
  1238. package/dist/render/lib/puck/editing-bridges.js +1 -1
  1239. package/dist/render/lib/puck/header-clearance.d.ts +1 -49
  1240. package/dist/render/lib/puck/header-clearance.js +1 -1
  1241. package/dist/render/lib/puck/header-ink.d.ts +1 -16
  1242. package/dist/render/lib/puck/header-ink.js +1 -1
  1243. package/dist/render/lib/puck/hero-media-parts.d.ts +1 -42
  1244. package/dist/render/lib/puck/hero-media-parts.js +1 -1
  1245. package/dist/render/lib/puck/migrate-legacy.d.ts +1 -2
  1246. package/dist/render/lib/puck/migrate-legacy.js +1 -1
  1247. package/dist/render/lib/puck/page-frame.d.ts +1 -34
  1248. package/dist/render/lib/puck/page-frame.js +1 -1
  1249. package/dist/render/lib/puck/page-render.d.ts +2 -6
  1250. package/dist/render/lib/puck/page-render.js +1 -1
  1251. package/dist/render/lib/puck/part-rows.d.ts +1 -15
  1252. package/dist/render/lib/puck/part-rows.js +1 -1
  1253. package/dist/render/lib/puck/part-styles.d.ts +1 -153
  1254. package/dist/render/lib/puck/part-styles.js +1 -2
  1255. package/dist/render/lib/puck/part-text.d.ts +1 -12
  1256. package/dist/render/lib/puck/part-text.js +1 -1
  1257. package/dist/render/lib/puck/passes/borders.d.ts +1 -2
  1258. package/dist/render/lib/puck/passes/borders.js +1 -1
  1259. package/dist/render/lib/puck/passes/cell-width.d.ts +1 -4
  1260. package/dist/render/lib/puck/passes/cell-width.js +1 -1
  1261. package/dist/render/lib/puck/passes/clickable-parts.d.ts +1 -2
  1262. package/dist/render/lib/puck/passes/clickable-parts.js +1 -1
  1263. package/dist/render/lib/puck/passes/corners.d.ts +1 -4
  1264. package/dist/render/lib/puck/passes/corners.js +1 -1
  1265. package/dist/render/lib/puck/passes/index.d.ts +1 -5
  1266. package/dist/render/lib/puck/passes/index.js +1 -1
  1267. package/dist/render/lib/puck/passes/section-anchor.d.ts +1 -2
  1268. package/dist/render/lib/puck/passes/section-anchor.js +1 -1
  1269. package/dist/render/lib/puck/passes/section-animation.d.ts +1 -2
  1270. package/dist/render/lib/puck/passes/section-animation.js +1 -1
  1271. package/dist/render/lib/puck/passes/section-height.d.ts +1 -2
  1272. package/dist/render/lib/puck/passes/section-height.js +1 -1
  1273. package/dist/render/lib/puck/passes/section-padding.d.ts +1 -9
  1274. package/dist/render/lib/puck/passes/section-padding.js +1 -1
  1275. package/dist/render/lib/puck/passes/section-sticky.d.ts +1 -3
  1276. package/dist/render/lib/puck/passes/section-sticky.js +1 -1
  1277. package/dist/render/lib/puck/passes/section-theme.d.ts +1 -3
  1278. package/dist/render/lib/puck/passes/section-theme.js +1 -1
  1279. package/dist/render/lib/puck/passes/section-width.d.ts +1 -18
  1280. package/dist/render/lib/puck/passes/section-width.js +1 -1
  1281. package/dist/render/lib/puck/render-registry.d.ts +1 -3
  1282. package/dist/render/lib/puck/render-registry.js +1 -1
  1283. package/dist/render/lib/puck/sanitize.d.ts +1 -1
  1284. package/dist/render/lib/puck/sanitize.js +1 -1
  1285. package/dist/render/lib/puck/selection-parent.d.ts +1 -12
  1286. package/dist/render/lib/puck/selection-parent.js +1 -1
  1287. package/dist/render/lib/puck/show-when.d.ts +1 -19
  1288. package/dist/render/lib/puck/show-when.js +1 -1
  1289. package/dist/render/lib/puck/slot-specs.d.ts +1 -8
  1290. package/dist/render/lib/puck/slot-specs.js +1 -1
  1291. package/dist/render/lib/puck/text-parts.d.ts +1 -42
  1292. package/dist/render/lib/puck/text-parts.js +1 -1
  1293. package/dist/render/lib/sections/section-to-box.d.ts +146 -0
  1294. package/dist/render/lib/sections/section-to-box.js +1 -0
  1295. package/dist/render/lib/text-styles/site-text-styles.d.ts +1 -1
  1296. package/dist/render/lib/text-styles/site-text-styles.js +1 -1
  1297. package/package.json +5 -5
@@ -0,0 +1,8 @@
1
+ import { type RuleReport, type SourceFile } from "./rule.js";
2
+ export type EditorDragOffOptions = {
3
+ readonly documentPermissions: (canEdit: boolean) => Readonly<Record<string, unknown>>;
4
+ readonly mustFind?: readonly string[];
5
+ readonly harnesses?: Readonly<Record<string, string>>;
6
+ readonly minFiles: number;
7
+ };
8
+ export declare function editorDragOff(files: readonly SourceFile[], options: EditorDragOffOptions): RuleReport;
@@ -0,0 +1,4 @@
1
+ import{ruleChecks as g}from"./rule.js";const $=/<(?:Puck|SiteEditorProvider|EditorStoreProvider|ScreenStoreProvider)\b[^<>]*\bdata=\{[^<>]*>/g,S=/\bpermissions=\{\s*(?:documentPermissions\(|permissions\s*\})/,P=/permissions=\{\s*permissions\s*\}/,v=["delete","drag","duplicate","edit","insert"],d=o=>[...o.text.matchAll($)].map(i=>({file:o.path,tag:i[0]}));function f(o,i){const s=[];return S.test(o.tag)?P.test(o.tag)&&!/documentPermissions\(/.test(i)&&s.push("passes a `permissions` it does not build from documentPermissions"):s.push("mounts the editor without the edit lock's permissions"),s}function w(o,i){const{check:s,report:u}=g("editor puck drag off"),m=i.harnesses??{};for(const e of[!0,!1]){const t=i.documentPermissions(e);s(`documentPermissions(${e}).drag is false`,t.drag===!1,`got ${String(t.drag)}`),s(`documentPermissions(${e}) names all five keys — Puck MERGES this prop, so a missing key keeps its old value`,Object.keys(t).sort().join(",")===v.join(","),`got ${Object.keys(t).sort().join(",")}`),s(`documentPermissions(${e}).edit is ${e}`,t.edit===e)}{const e="Puck",t="SiteEditorProvider",n=a=>d({path:"fixture.tsx",text:a}).map(p=>f(p,a).length);s("the scanner flags a mount with no permissions",JSON.stringify(n(`<${e} config={c} data={d} />`))==="[1]"),s("the scanner passes a mount that calls the helper",JSON.stringify(n(`<${t} data={d} permissions={documentPermissions(!readOnly)}>`))==="[0]"),s("a local `permissions` passes only when the file builds it from the helper",JSON.stringify(n(`<${e} data={d} permissions={permissions} />`))==="[1]"&&JSON.stringify(n(`const permissions = documentPermissions(true);
2
+ <${e} data={d} permissions={permissions} />`))==="[0]"),s("a tag with no `data=` is not a mount",n(`<${e}.Preview />`).length===0),s("the screen's store provider is a mount under either of its names",["Editor","Screen"].every(a=>JSON.stringify(n(`<${a}StoreProvider config={c} data={d} />`))==="[1]"))}const c=o.filter(e=>/\.tsx?$/.test(e.path));s(`read the source (${c.length} TS/TSX files, at least ${i.minFiles})`,c.length>=i.minFiles,"fewer means the walk broke, and every check below is vacuous");const r=[];for(const e of c)e.path in m||r.push(...d(e));for(const e of i.mustFind??[])s(`found the editor mount (data=…) in ${e}`,r.some(t=>t.file===e));for(const[e,t]of Object.entries(m)){const n=c.find(a=>a.path===e);s(`the harness exemption is still real: ${e} (${t})`,!!n&&d(n).length>0,"remove the stale entry")}const h=new Map(c.map(e=>[e.path,e.text])),l=r.flatMap(e=>f(e,h.get(e.file)??"").map(t=>`${e.file} ${t}`));return s(`every editor mount turns Puck's own canvas drag off (${r.length} mount(s)${r.length?`: ${[...new Set(r.map(e=>e.file))].join(", ")}`:""})`,l.length===0,`without the edit lock's permissions a read-only viewer's canvas would take edits the save then refuses:
3
+ ${l.join(`
4
+ `)}`),u()}export{w as editorDragOff};
@@ -1,8 +1,2 @@
1
- import { type RuleReport, type SourceFile } from "./rule.js";
2
- export type EditorPuckDragOffOptions = {
3
- readonly documentPermissions: (canEdit: boolean) => Readonly<Record<string, unknown>>;
4
- readonly mustFind?: readonly string[];
5
- readonly harnesses?: Readonly<Record<string, string>>;
6
- readonly minFiles: number;
7
- };
8
- export declare function editorPuckDragOff(files: readonly SourceFile[], options: EditorPuckDragOffOptions): RuleReport;
1
+ export { editorDragOff as editorPuckDragOff, type EditorDragOffOptions as EditorPuckDragOffOptions } from "./editor-drag-off.js";
2
+ export * from "./editor-drag-off.js";
@@ -1,4 +1 @@
1
- import{ruleChecks as g}from"./rule.js";const $=/<(?:Puck|SiteEditorProvider|EditorStoreProvider|ScreenStoreProvider)\b[^<>]*\bdata=\{[^<>]*>/g,S=/\bpermissions=\{\s*(?:documentPermissions\(|permissions\s*\})/,P=/permissions=\{\s*permissions\s*\}/,k=["delete","drag","duplicate","edit","insert"],d=o=>[...o.text.matchAll($)].map(n=>({file:o.path,tag:n[0]}));function u(o,n){const s=[];return S.test(o.tag)?P.test(o.tag)&&!/documentPermissions\(/.test(n)&&s.push("passes a `permissions` it does not build from documentPermissions"):s.push("mounts the editor without the edit lock's permissions"),s}function w(o,n){const{check:s,report:f}=g("editor puck drag off"),m=n.harnesses??{};for(const e of[!0,!1]){const t=n.documentPermissions(e);s(`documentPermissions(${e}).drag is false`,t.drag===!1,`got ${String(t.drag)}`),s(`documentPermissions(${e}) names all five keys — Puck MERGES this prop, so a missing key keeps its old value`,Object.keys(t).sort().join(",")===k.join(","),`got ${Object.keys(t).sort().join(",")}`),s(`documentPermissions(${e}).edit is ${e}`,t.edit===e)}{const e="Puck",t="SiteEditorProvider",i=a=>d({path:"fixture.tsx",text:a}).map(p=>u(p,a).length);s("the scanner flags a mount with no permissions",JSON.stringify(i(`<${e} config={c} data={d} />`))==="[1]"),s("the scanner passes a mount that calls the helper",JSON.stringify(i(`<${t} data={d} permissions={documentPermissions(!readOnly)}>`))==="[0]"),s("a local `permissions` passes only when the file builds it from the helper",JSON.stringify(i(`<${e} data={d} permissions={permissions} />`))==="[1]"&&JSON.stringify(i(`const permissions = documentPermissions(true);
2
- <${e} data={d} permissions={permissions} />`))==="[0]"),s("a tag with no `data=` is not a mount",i(`<${e}.Preview />`).length===0),s("the screen's store provider is a mount under either of its names",["Editor","Screen"].every(a=>JSON.stringify(i(`<${a}StoreProvider config={c} data={d} />`))==="[1]"))}const c=o.filter(e=>/\.tsx?$/.test(e.path));s(`read the source (${c.length} TS/TSX files, at least ${n.minFiles})`,c.length>=n.minFiles,"fewer means the walk broke, and every check below is vacuous");const r=[];for(const e of c)e.path in m||r.push(...d(e));for(const e of n.mustFind??[])s(`found the editor mount (data=…) in ${e}`,r.some(t=>t.file===e));for(const[e,t]of Object.entries(m)){const i=c.find(a=>a.path===e);s(`the harness exemption is still real: ${e} (${t})`,!!i&&d(i).length>0,"remove the stale entry")}const h=new Map(c.map(e=>[e.path,e.text])),l=r.flatMap(e=>u(e,h.get(e.file)??"").map(t=>`${e.file} ${t}`));return s(`every editor mount turns Puck's own canvas drag off (${r.length} mount(s)${r.length?`: ${[...new Set(r.map(e=>e.file))].join(", ")}`:""})`,l.length===0,`without the edit lock's permissions a read-only viewer's canvas would take edits the save then refuses:
3
- ${l.join(`
4
- `)}`),f()}export{w as editorPuckDragOff};
1
+ import{editorDragOff as o}from"./editor-drag-off.js";export*from"./editor-drag-off.js";export{o as editorPuckDragOff};
@@ -1,5 +1,5 @@
1
- import{ruleChecks as m}from"./rule.js";import{readJsxLabels as $,readLabels as k}from"./support/label-extraction.js";function W(t){const e=[];return t.includes("==")?e.push("shows raw `==` to the merchant"):t.includes("=")&&e.push("carries an `x = y` legend"),/[()]/.test(t)&&e.push("carries a bracket hint"),t.includes(" — ")&&e.push("carries a ` — ` hint tail"),e}function j(t){return t.includes("=")?t.includes("==")?["shows raw `==` to the reader"]:["carries an `x = y` legend"]:[]}function x(t){const e=k(t.text),a=[];for(const r of e){const l=W(r.label);l.length&&a.push({where:`${t.path}:${r.line}`,label:r.label,why:l})}return{read:e.length,offenders:a}}function g(t){const e=$(t.text),a=[];for(const{line:r,label:l}of e){const i=j(l);i.length&&a.push({where:`${t.path}:${r}`,label:l,why:i})}return{read:e.length,offenders:a}}const w=t=>`${t.length} label(s) are hints, not names — the manual does the teaching:
1
+ import{ruleChecks as y}from"./rule.js";import{readJsxLabels as $,readLabels as W}from"./support/label-extraction.js";import{DOCUMENT_FOLDERS as j}from"./support/document-folder.js";function k(t){const e=[];return t.includes("==")?e.push("shows raw `==` to the merchant"):t.includes("=")&&e.push("carries an `x = y` legend"),/[()]/.test(t)&&e.push("carries a bracket hint"),t.includes(" — ")&&e.push("carries a ` — ` hint tail"),e}function S(t){return t.includes("=")?t.includes("==")?["shows raw `==` to the reader"]:["carries an `x = y` legend"]:[]}function x(t){const e=W(t.text),a=[];for(const r of e){const l=k(r.label);l.length&&a.push({where:`${t.path}:${r.line}`,label:r.label,why:l})}return{read:e.length,offenders:a}}function g(t){const e=$(t.text),a=[];for(const{line:r,label:l}of e){const i=S(l);i.length&&a.push({where:`${t.path}:${r}`,label:l,why:i})}return{read:e.length,offenders:a}}const m=t=>`${t.length} label(s) are hints, not names — the manual does the teaching:
2
2
  `+t.map(e=>` ${e.where} ${JSON.stringify(e.label)} — ${e.why.join(", ")}`).join(`
3
- `);function L(t,e){const{check:a,report:r}=m("label hints");{const n=x({path:"lib/puck/fixture.tsx",text:['heading: plainText("Heading (new line = break)"),','accent: plainText("Accent ==word=="),','legend: text("Size = px"),','tail: textarea("Body — one paragraph"),','body: plainText("Body", { placeholder: "A ==word== in the theme colour" }),','layout: { type: "select", label: "Layout",',' options: [{ label: "Split (editorial aside)", value: "split" }] },','defaultProps: { heading: "Our ==new== range" },'].join(`
4
- `)}),s=y=>n.offenders.filter(h=>h.where.endsWith(`:${y}`)).flatMap(h=>h.why);a("W1 flags a bracket hint (and the `x = y` inside it)",s(1).includes("carries a bracket hint")&&s(1).includes("carries an `x = y` legend")),a("W1 flags raw `==` in a label",s(2).includes("shows raw `==` to the merchant")),a("W1 flags an `x = y` legend",s(3).includes("carries an `x = y` legend")),a("W1 flags a ` — ` hint tail",s(4).includes("carries a ` — ` hint tail")),a("W1 passes a placeholder, a select option and a default prop, and reads the labels it should",n.offenders.length===4&&n.read===6,JSON.stringify(n));const o=g({path:"components/Fixture.tsx",text:['<Field label="Accent (==word==)" />','<Field label="Size = px" />','<Field label="Name (optional)" />','<button aria-label="a = b" />'].join(`
5
- `)});a("W2 flags `==` and `x = y` in a JSX label, leaves a bracket alone, and reads no aria-label",o.offenders.length===2&&o.read===3&&o.offenders[0].why[0]==="shows raw `==` to the reader",JSON.stringify(o))}const l=t.filter(n=>n.path.startsWith("lib/puck/")&&/\.(ts|tsx)$/.test(n.path)),i=t.filter(n=>n.path.startsWith("components/")&&n.path.endsWith(".tsx")),f=l.map(x),u=i.map(g),d=f.reduce((n,s)=>n+s.read,0),c=u.reduce((n,s)=>n+s.read,0),p=f.flatMap(n=>n.offenders),b=u.flatMap(n=>n.offenders);return a(`read >= ${e.minLabels} field labels across ${l.length} files under lib/puck (found ${d})`,d>=e.minLabels,"the reader is broken, not the panel"),a(`read >= ${e.minJsxLabels} JSX label attributes across ${i.length} files under components (found ${c})`,c>=e.minJsxLabels,"the reader is broken, not the panel"),a(`W1 every field label under lib/puck is a plain name (${d} read)`,p.length===0,w(p)),a(`W2 no JSX label under components shows \`=\` (${c} read)`,b.length===0,w(b)),r()}export{W as hintsIn,L as labelHints};
3
+ `);function F(t,e){const{check:a,report:r}=y("label hints");{const n=x({path:"lib/document/fixture.tsx",text:['heading: plainText("Heading (new line = break)"),','accent: plainText("Accent ==word=="),','legend: text("Size = px"),','tail: textarea("Body — one paragraph"),','body: plainText("Body", { placeholder: "A ==word== in the theme colour" }),','layout: { type: "select", label: "Layout",',' options: [{ label: "Split (editorial aside)", value: "split" }] },','defaultProps: { heading: "Our ==new== range" },'].join(`
4
+ `)}),s=w=>n.offenders.filter(h=>h.where.endsWith(`:${w}`)).flatMap(h=>h.why);a("W1 flags a bracket hint (and the `x = y` inside it)",s(1).includes("carries a bracket hint")&&s(1).includes("carries an `x = y` legend")),a("W1 flags raw `==` in a label",s(2).includes("shows raw `==` to the merchant")),a("W1 flags an `x = y` legend",s(3).includes("carries an `x = y` legend")),a("W1 flags a ` — ` hint tail",s(4).includes("carries a ` — ` hint tail")),a("W1 passes a placeholder, a select option and a default prop, and reads the labels it should",n.offenders.length===4&&n.read===6,JSON.stringify(n));const o=g({path:"components/Fixture.tsx",text:['<Field label="Accent (==word==)" />','<Field label="Size = px" />','<Field label="Name (optional)" />','<button aria-label="a = b" />'].join(`
5
+ `)});a("W2 flags `==` and `x = y` in a JSX label, leaves a bracket alone, and reads no aria-label",o.offenders.length===2&&o.read===3&&o.offenders[0].why[0]==="shows raw `==` to the reader",JSON.stringify(o))}const l=t.filter(n=>j.some(s=>n.path.startsWith(`${s}/`))&&/\.(ts|tsx)$/.test(n.path)),i=t.filter(n=>n.path.startsWith("components/")&&n.path.endsWith(".tsx")),f=l.map(x),u=i.map(g),d=f.reduce((n,s)=>n+s.read,0),c=u.reduce((n,s)=>n+s.read,0),p=f.flatMap(n=>n.offenders),b=u.flatMap(n=>n.offenders);return a(`read >= ${e.minLabels} field labels across ${l.length} files under lib/document (found ${d})`,d>=e.minLabels,"the reader is broken, not the panel"),a(`read >= ${e.minJsxLabels} JSX label attributes across ${i.length} files under components (found ${c})`,c>=e.minJsxLabels,"the reader is broken, not the panel"),a(`W1 every field label under lib/document is a plain name (${d} read)`,p.length===0,m(p)),a(`W2 no JSX label under components shows \`=\` (${c} read)`,b.length===0,m(b)),r()}export{k as hintsIn,F as labelHints};
@@ -1,6 +1,6 @@
1
- import{failedChecks as C,ruleChecks as w}from"./rule.js";import{isPanelFile as j,readLabels as H,readPanelLabels as S}from"./support/label-extraction.js";import{registryFiles as $}from"./support/registry-source.js";const g=["kicker","tagline","headline","blurb","description","copy","paragraph","photo","picture","cta","kind","class","grayscale","greyscale","colour","align","align items","text alignment","centre","catalogue","behaviour","labelled","stylised","stack","container","gutter","margin","site width","max width","contained","boxed","header offset","clearance","typeface","font family","leading","character spacing","kerning","text transform"],R=o=>o.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),B=g.map(o=>({word:o,pattern:new RegExp(`\\b${R(o)}s?\\b`)}));function P(o){return o.split(/\(| — /)[0].trim()}function F(o){const s=new Set;for(const l of $(o))for(const a of l.text.matchAll(/\{[^{}]*\btype:\s*"slot"[^{}]*\}/g)){const t=/\ballow:\s*\[([^\]]*)\]/.exec(a[0]);for(const r of t?.[1].matchAll(/"([A-Za-z0-9_]+)"/g)??[])s.add(r[1])}return s}const A=o=>/^lib\/puck\/blocks\/[^/]+\/([^/]+)\//.exec(o)?.[1]??null;function m(o,s){const l=P(o).toLowerCase(),a=[];for(const{word:r,pattern:n}of B)n.test(l)&&a.push(`N10.1 "${r}"`);/^title\b/.test(l)&&s==="section"&&a.push("N10.2 Title at section level"),/^heading\b/.test(l)&&s==="item"&&a.push("N10.2 Heading at item level");const t=/\b(button|link)\s+(text|label|href|url)$/.exec(l);return t&&a.push(`N10.3 "${t[1]} ${t[2]}"`),l==="text"&&a.push("N10.4 bare Text"),a}function v(o,s,l){const a=$(o),t=o.filter(j),r=F(o),n=new Map,c=[],f=(e,i)=>{for(const p of e){const k=i(p.text);n.set(p.path,k.length);const T=r.has(A(p.path)??"");for(const x of k){const N=x.item?"item":T?"slot child":"section";c.push({...x,file:p.path,level:N,why:m(x.label,N)})}}};f(a,H),f(t,S);for(const[e,i]of Object.entries(s.floors)){const p=n.get(e);l(`${e} yields >= ${i} labels (found ${p??"none: not read"})`,p!==void 0&&p>=i,p===void 0?"it has a floor but was not read — it dropped out of the panels and the registry":"the reader is broken, not the panel")}const d=a.reduce((e,i)=>e+(n.get(i.path)??0),0);l(`the block registry yields >= ${s.minRegistryLabels} labels across ${a.length} files (found ${d})`,d>=s.minRegistryLabels,"the reader is broken, not the panel");const h=c.filter(e=>e.why.length>0),y=e=>s.parked.some(i=>i.file===e.file&&i.label===e.label),b=h.filter(e=>!y(e)),u=e=>c.filter(i=>i.level===e).length;l(`every field label obeys N10.1–N10.4 (${c.length} read across ${a.length+t.length} files: ${u("section")} section-level, ${u("item")} item-level, ${u("slot child")} in a slot child of ${[...r].sort().join(", ")||"none"})`,b.length===0,`${b.length} break doc/naming.md N10:
1
+ import{failedChecks as C,ruleChecks as w}from"./rule.js";import{isPanelFile as j,readLabels as H,readPanelLabels as R}from"./support/label-extraction.js";import{registryFiles as $}from"./support/registry-source.js";import{DOCUMENT_FOLDER_SOURCE as S}from"./support/document-folder.js";const g=["kicker","tagline","headline","blurb","description","copy","paragraph","photo","picture","cta","kind","class","grayscale","greyscale","colour","align","align items","text alignment","centre","catalogue","behaviour","labelled","stylised","stack","container","gutter","margin","site width","max width","contained","boxed","header offset","clearance","typeface","font family","leading","character spacing","kerning","text transform"],B=o=>o.replace(/[.*+?^${}()|[\]\\]/g,"\\$&"),P=g.map(o=>({word:o,pattern:new RegExp(`\\b${B(o)}s?\\b`)}));function F(o){return o.split(/\(| — /)[0].trim()}function E(o){const s=new Set;for(const l of $(o))for(const a of l.text.matchAll(/\{[^{}]*\btype:\s*"slot"[^{}]*\}/g)){const t=/\ballow:\s*\[([^\]]*)\]/.exec(a[0]);for(const r of t?.[1].matchAll(/"([A-Za-z0-9_]+)"/g)??[])s.add(r[1])}return s}const O=o=>new RegExp(`^${S}/blocks/[^/]+/([^/]+)/`).exec(o)?.[1]??null;function m(o,s){const l=F(o).toLowerCase(),a=[];for(const{word:r,pattern:n}of P)n.test(l)&&a.push(`N10.1 "${r}"`);/^title\b/.test(l)&&s==="section"&&a.push("N10.2 Title at section level"),/^heading\b/.test(l)&&s==="item"&&a.push("N10.2 Heading at item level");const t=/\b(button|link)\s+(text|label|href|url)$/.exec(l);return t&&a.push(`N10.3 "${t[1]} ${t[2]}"`),l==="text"&&a.push("N10.4 bare Text"),a}function v(o,s,l){const a=$(o),t=o.filter(j),r=E(o),n=new Map,c=[],f=(e,i)=>{for(const p of e){const k=i(p.text);n.set(p.path,k.length);const T=r.has(O(p.path)??"");for(const x of k){const N=x.item?"item":T?"slot child":"section";c.push({...x,file:p.path,level:N,why:m(x.label,N)})}}};f(a,H),f(t,R);for(const[e,i]of Object.entries(s.floors)){const p=n.get(e);l(`${e} yields >= ${i} labels (found ${p??"none: not read"})`,p!==void 0&&p>=i,p===void 0?"it has a floor but was not read — it dropped out of the panels and the registry":"the reader is broken, not the panel")}const d=a.reduce((e,i)=>e+(n.get(i.path)??0),0);l(`the block registry yields >= ${s.minRegistryLabels} labels across ${a.length} files (found ${d})`,d>=s.minRegistryLabels,"the reader is broken, not the panel");const h=c.filter(e=>e.why.length>0),y=e=>s.parked.some(i=>i.file===e.file&&i.label===e.label),b=h.filter(e=>!y(e)),u=e=>c.filter(i=>i.level===e).length;l(`every field label obeys N10.1–N10.4 (${c.length} read across ${a.length+t.length} files: ${u("section")} section-level, ${u("item")} item-level, ${u("slot child")} in a slot child of ${[...r].sort().join(", ")||"none"})`,b.length===0,`${b.length} break doc/naming.md N10:
2
2
  `+b.map(e=>` ${e.file}:${e.line} [${e.level}] ${JSON.stringify(e.label)} — ${e.why.join(", ")}`).join(`
3
- `));for(const e of s.parked)l(`PARKED ${e.file} ${JSON.stringify(e.label)} still breaks N10 — ${e.why}`,h.some(i=>i.file===e.file&&i.label===e.label),"it no longer breaks N10 (renamed, or its row deleted) — take it out of the list");return{read:c,live:b,slotChildren:r}}function E(o,s){const{check:l,report:a}=w("label vocabulary");l(`N10.1 forbids ${g.length} words, each written once, lower-case and trimmed: ${[...g].sort().join(", ")}`,g.length>0&&new Set(g).size===g.length&&g.every(t=>t===t.trim().toLowerCase()&&t.length>0),JSON.stringify(g));{const t=(n,c=!1)=>m(n,c?"item":"section"),r=g.filter(n=>{const c=`N10.1 "${n}"`,f=n[0].toUpperCase()+n.slice(1);return!t(f).includes(c)||!t(`Card ${n}s`).includes(c)});l("N10.1 catches every word on the list, alone and as a qualified plural",r.length===0,r.join(", ")),l("N10.1 …but not inside a longer word",t("Copyright").length===0&&t("Classic layout").length===0&&t("Stacking order").length===0,JSON.stringify([t("Copyright"),t("Classic layout"),t("Stacking order")])),l("N10.2 a section's label may not start Title, an item's may not start Heading",t("Title").includes("N10.2 Title at section level")&&t("Heading",!0).includes("N10.2 Heading at item level")),l("N10.2 …and each is right at its own level",t("Heading").length===0&&t("Title",!0).length===0&&t("Card title").length===0&&t("Section heading",!0).length===0),l("N10.2 a slot child's label may start with either word, and N10.1 still holds there",m("Title","slot child").length===0&&m("Heading","slot child").length===0&&m("Headline","slot child").includes('N10.1 "headline"')),l("N10.3 nothing follows `button` or `link`",t("Button text").includes('N10.3 "button text"')&&t("Submit button label").includes('N10.3 "button label"')&&t("Link href").includes('N10.3 "link href"')&&t("Archive link URL").includes('N10.3 "link url"')),l("N10.3 …and the pair itself passes",t("Button").length===0&&t("Button link").length===0&&t("Archive link").length===0),l("N10.4 a bare Text fails; Alt text is a name",t("Text").includes("N10.4 bare Text")&&t("Alt text").length===0),l("the name is cut at a hint tail, so a hint cannot corrupt the verdict",t("Body (blank line = new paragraph)").length===0&&t("Copy — the words under it").includes('N10.1 "copy"'))}{const t=[{path:"lib/puck/config.tsx",text:['heading: plainText("Heading"),','eyebrow: plainText("Kicker"),','title: plainText("Title"),','cards: { type: "array", label: "Cards",'," arrayFields: {",' heading: plainText("Heading"),',' title: plainText("Card title"),'," },","},",'layout: { type: "select", label: "Layout",',' options: [{ label: "Centre", value: "center" }] },'].join(`
3
+ `));for(const e of s.parked)l(`PARKED ${e.file} ${JSON.stringify(e.label)} still breaks N10 — ${e.why}`,h.some(i=>i.file===e.file&&i.label===e.label),"it no longer breaks N10 (renamed, or its row deleted) — take it out of the list");return{read:c,live:b,slotChildren:r}}function I(o,s){const{check:l,report:a}=w("label vocabulary");l(`N10.1 forbids ${g.length} words, each written once, lower-case and trimmed: ${[...g].sort().join(", ")}`,g.length>0&&new Set(g).size===g.length&&g.every(t=>t===t.trim().toLowerCase()&&t.length>0),JSON.stringify(g));{const t=(n,c=!1)=>m(n,c?"item":"section"),r=g.filter(n=>{const c=`N10.1 "${n}"`,f=n[0].toUpperCase()+n.slice(1);return!t(f).includes(c)||!t(`Card ${n}s`).includes(c)});l("N10.1 catches every word on the list, alone and as a qualified plural",r.length===0,r.join(", ")),l("N10.1 …but not inside a longer word",t("Copyright").length===0&&t("Classic layout").length===0&&t("Stacking order").length===0,JSON.stringify([t("Copyright"),t("Classic layout"),t("Stacking order")])),l("N10.2 a section's label may not start Title, an item's may not start Heading",t("Title").includes("N10.2 Title at section level")&&t("Heading",!0).includes("N10.2 Heading at item level")),l("N10.2 …and each is right at its own level",t("Heading").length===0&&t("Title",!0).length===0&&t("Card title").length===0&&t("Section heading",!0).length===0),l("N10.2 a slot child's label may start with either word, and N10.1 still holds there",m("Title","slot child").length===0&&m("Heading","slot child").length===0&&m("Headline","slot child").includes('N10.1 "headline"')),l("N10.3 nothing follows `button` or `link`",t("Button text").includes('N10.3 "button text"')&&t("Submit button label").includes('N10.3 "button label"')&&t("Link href").includes('N10.3 "link href"')&&t("Archive link URL").includes('N10.3 "link url"')),l("N10.3 …and the pair itself passes",t("Button").length===0&&t("Button link").length===0&&t("Archive link").length===0),l("N10.4 a bare Text fails; Alt text is a name",t("Text").includes("N10.4 bare Text")&&t("Alt text").length===0),l("the name is cut at a hint tail, so a hint cannot corrupt the verdict",t("Body (blank line = new paragraph)").length===0&&t("Copy — the words under it").includes('N10.1 "copy"'))}{const t=[{path:"lib/document/config.tsx",text:['heading: plainText("Heading"),','eyebrow: plainText("Kicker"),','title: plainText("Title"),','cards: { type: "array", label: "Cards",'," arrayFields: {",' heading: plainText("Heading"),',' title: plainText("Card title"),'," },","},",'layout: { type: "select", label: "Layout",',' options: [{ label: "Centre", value: "center" }] },'].join(`
4
4
  `)},{path:"components/FixturePanel.tsx",text:['import { SettingsField } from "efficient-easel/panel";',"const items = [",' { label: "Copy", onClick: () => copy() },',"];","const rows = [",' { key: "photo", label: "Photo", group: "media" },',"];","const tabs: SiteStylesTabItem[] = [",' { id: "text", label: "Text" },',"];",'<SettingsField label="Colour" />'].join(`
5
- `)},{path:"lib/puck/blocks/commerce/GalleryB/render.tsx",text:'export const GalleryBSlots = { items: { type: "slot", allow: ["GalleryItem"] } };'},{path:"lib/puck/blocks/commerce/GalleryItem/fields.tsx",text:['name: text("Title"),','photo: upload("Photo"),'].join(`
6
- `)},{path:"lib/puck/blocks/service/AppointmentBooking/render.tsx",text:'export const Slots = { boxes: { type: "slot", allow: ["BookingBox"] } };'},{path:"lib/puck/blocks/service/BookingBox/fields.tsx",text:'heading: plainTextarea("Heading"),'},{path:"components/HandRolled.tsx",text:'<div className="sf-field"><Row label="Gutter" /></div>'},{path:"components/ShopperForm.tsx",text:'<Field label="Description" />'}],r=w("fixture"),{read:n,live:c,slotChildren:f}=v(t,{floors:{"components/FixturePanel.tsx":5,"components/HandRolled.tsx":1,"components/Moved.tsx":1},minRegistryLabels:11,parked:[{file:"components/FixturePanel.tsx",label:"Colour",why:"fixture: still breaks"},{file:"lib/puck/config.tsx",label:"Headline",why:"fixture: renamed long ago"}]},r.check),d=C(r.report()).map(e=>e.name),h=e=>d.some(i=>i.startsWith(e)),y=n.map(e=>e.label);l("the fixture reads the registry's fields and the panels' rows, and no option, action, tab or shopper's form",y.join(" · ")==="Heading · Kicker · Title · Cards · Heading · Card title · Layout · Title · Photo · Heading · Photo · Colour · Gutter",y.join(" · ")),l("…and the breaches are the ones it wrote, the parked one waived",c.map(e=>`${e.label}=${e.why.join("+")}`).join(" · ")==='Kicker=N10.1 "kicker" · Title=N10.2 Title at section level · Heading=N10.2 Heading at item level · Photo=N10.1 "photo" · Photo=N10.1 "photo" · Gutter=N10.1 "gutter"',JSON.stringify(c.map(e=>[e.label,e.why])));const b=n.filter(e=>e.level==="slot child").map(e=>`${e.file.split("/")[4]} ${e.label}=${e.why.join("+")||"ok"}`),u=n.filter(e=>e.file==="lib/puck/config.tsx"&&e.label==="Title").map(e=>`${e.level}:${e.why.join("+")}`);l("a block in a literal slot `allow` is a slot child: GalleryItem `Title` and BookingBox `Heading` both pass, N10.1 still bites, and a section's own `Title` still fails N10.2",[...f].sort().join()==="BookingBox,GalleryItem"&&b.join(" · ")==='GalleryItem Title=ok · GalleryItem Photo=N10.1 "photo" · BookingBox Heading=ok'&&u.join()==="section:N10.2 Title at section level",JSON.stringify([[...f],b,u])),l("a file under its floor goes red",h("components/FixturePanel.tsx yields")&&!h("components/HandRolled.tsx yields"),d.join(" | ")),l("a floored file that is not read goes red",h("components/Moved.tsx yields"),d.join(" | ")),l("a registry under its floor goes red",h("the block registry yields"),d.join(" | ")),l("a PARKED label that no longer breaks N10 goes red, and one that still does is waived",h('PARKED lib/puck/config.tsx "Headline"')&&!h('PARKED components/FixturePanel.tsx "Colour"'),d.join(" | ")),l("the verdict goes red on a live breach",h("every field label obeys"),d.join(" | ")),l("…and nothing else did",d.length===5,d.join(" | "))}return v(o,s,l),a()}export{g as NEVER_WORDS,E as labelVocabulary,F as slotChildTypes,m as vocabularyBreaches};
5
+ `)},{path:"lib/document/blocks/commerce/GalleryB/render.tsx",text:'export const GalleryBSlots = { items: { type: "slot", allow: ["GalleryItem"] } };'},{path:"lib/document/blocks/commerce/GalleryItem/fields.tsx",text:['name: text("Title"),','photo: upload("Photo"),'].join(`
6
+ `)},{path:"lib/document/blocks/service/AppointmentBooking/render.tsx",text:'export const Slots = { boxes: { type: "slot", allow: ["BookingBox"] } };'},{path:"lib/document/blocks/service/BookingBox/fields.tsx",text:'heading: plainTextarea("Heading"),'},{path:"components/HandRolled.tsx",text:'<div className="sf-field"><Row label="Gutter" /></div>'},{path:"components/ShopperForm.tsx",text:'<Field label="Description" />'}],r=w("fixture"),{read:n,live:c,slotChildren:f}=v(t,{floors:{"components/FixturePanel.tsx":5,"components/HandRolled.tsx":1,"components/Moved.tsx":1},minRegistryLabels:11,parked:[{file:"components/FixturePanel.tsx",label:"Colour",why:"fixture: still breaks"},{file:"lib/document/config.tsx",label:"Headline",why:"fixture: renamed long ago"}]},r.check),d=C(r.report()).map(e=>e.name),h=e=>d.some(i=>i.startsWith(e)),y=n.map(e=>e.label);l("the fixture reads the registry's fields and the panels' rows, and no option, action, tab or shopper's form",y.join(" · ")==="Heading · Kicker · Title · Cards · Heading · Card title · Layout · Title · Photo · Heading · Photo · Colour · Gutter",y.join(" · ")),l("…and the breaches are the ones it wrote, the parked one waived",c.map(e=>`${e.label}=${e.why.join("+")}`).join(" · ")==='Kicker=N10.1 "kicker" · Title=N10.2 Title at section level · Heading=N10.2 Heading at item level · Photo=N10.1 "photo" · Photo=N10.1 "photo" · Gutter=N10.1 "gutter"',JSON.stringify(c.map(e=>[e.label,e.why])));const b=n.filter(e=>e.level==="slot child").map(e=>`${e.file.split("/")[4]} ${e.label}=${e.why.join("+")||"ok"}`),u=n.filter(e=>e.file==="lib/document/config.tsx"&&e.label==="Title").map(e=>`${e.level}:${e.why.join("+")}`);l("a block in a literal slot `allow` is a slot child: GalleryItem `Title` and BookingBox `Heading` both pass, N10.1 still bites, and a section's own `Title` still fails N10.2",[...f].sort().join()==="BookingBox,GalleryItem"&&b.join(" · ")==='GalleryItem Title=ok · GalleryItem Photo=N10.1 "photo" · BookingBox Heading=ok'&&u.join()==="section:N10.2 Title at section level",JSON.stringify([[...f],b,u])),l("a file under its floor goes red",h("components/FixturePanel.tsx yields")&&!h("components/HandRolled.tsx yields"),d.join(" | ")),l("a floored file that is not read goes red",h("components/Moved.tsx yields"),d.join(" | ")),l("a registry under its floor goes red",h("the block registry yields"),d.join(" | ")),l("a PARKED label that no longer breaks N10 goes red, and one that still does is waived",h('PARKED lib/document/config.tsx "Headline"')&&!h('PARKED components/FixturePanel.tsx "Colour"'),d.join(" | ")),l("the verdict goes red on a live breach",h("every field label obeys"),d.join(" | ")),l("…and nothing else did",d.length===5,d.join(" | "))}return v(o,s,l),a()}export{g as NEVER_WORDS,I as labelVocabulary,E as slotChildTypes,m as vocabularyBreaches};
@@ -1,10 +1,10 @@
1
- import{ruleChecks as k}from"./rule.js";import{blockSource as E,registryFiles as S}from"./support/registry-source.js";const x="lib/puck/controls.tsx",j=["slider","select","segmented","textList"];function y(c){return/icon=\{<([A-Z][A-Za-z0-9]*Icon)\s*\/>\}/.exec(c)?.[1]??/<([A-Z][A-Za-z0-9]*Icon)\s*\/>/.exec(c)?.[1]??/<FieldGlyph noun="([a-z]+)"/.exec(c)?.[1]??"none"}function I(c){const s=new Map;for(const l of c)l.text.split(`
2
- `).forEach((t,p)=>{const a=t.trim();if(!(a.startsWith("//")||a.startsWith("*")||a.startsWith("/*")))for(const h of j){if(new RegExp(`^(export )?function ${h}\\(`).test(a))continue;const d=t.match(new RegExp(`(^|[^.\\w])${h}\\(\\s*"([^"]+)"`));d&&s.set(d[2],[...s.get(d[2])??[],{file:l,line:p+1,builder:h}])}});return s}function R(c){const s=[];for(const l of c)l.text.split(`
3
- `).forEach((t,p)=>{const a=t.match(/<SettingsField\s+label=(?:\{say\()?"([^"]+)"/);a&&s.push({file:l.path,line:p+1,label:a[1].trim(),glyph:y(t)})});return s}function W(c,s,l){const{check:t,report:p}=k("mirrored rows agree"),a=l.mirrored??[],h=l.sameWord??[];{const e={path:"fixture.tsx",text:["export function select(label: string) {}",'const a = select("Product", <BoxIcon />, options);','// select("In a comment", <BoxIcon />)','const b = usePreviewParts().select("Not a row");','const c = <SettingsField label="Product" icon={<BoxIcon />}>{x}</SettingsField>;'].join(`
4
- `)},o=I([e]),n=R([e]);t("the builder-label reader finds a call, and not its declaration, a comment or another object's method",[...o.keys()].join()==="Product"&&o.get("Product")?.[0].line===2,JSON.stringify([...o.keys()])),t("the row reader finds a hand-drawn row and the glyph it wears",n.length===1&&n[0].label==="Product"&&n[0].glyph==="BoxIcon",JSON.stringify(n))}const d=s.find(e=>e.path===x);for(const e of a){const o=d?new RegExp(`export const ${e.constant} = \\{[\\s\\S]*?\\} as const;`).exec(d.text):null;t(`${e.constant} is declared in ${x}`,o!==null),o&&(t("…and carries the label",/label:\s*"/.test(o[0]),o[0].slice(0,120)),t("…and carries the glyph",/icon:\s*</.test(o[0]),o[0].slice(0,120)));let n=null;try{n=E(c,s,e.declaredIn)}catch{n=null}t(`read the ${e.declaredIn} block`,n!==null,`no block "${e.declaredIn}" among the files handed in`);const r=s.find(i=>i.path===e.drawnIn)?.text??null;t(`read ${e.drawnIn}`,r!==null);for(const[i,$]of[[`the ${e.declaredIn} block`,n],[e.drawnIn,r]])$!==null&&(t(`${i} spreads ${e.constant}`,new RegExp(`${e.constant}\\.(label|icon)`).test($)),t(`…and no longer hard-codes "${e.row}"`,!new RegExp(`"${e.row}"`).test($),`${i} still contains the literal`))}t(`the mirrored pairs were checked (${a.length}, at least ${l.floors.pairs}; an empty sweep proves nothing)`,a.length>=l.floors.pairs);const f=I([...S(s),...d?[d]:[]]),w=s.filter(e=>/^components\/[^/]+\.tsx$/.test(e.path)),u=R(w),g=[],m=[];for(const e of u){if(!f.has(e.label))continue;if(h.includes(e.label)){m.push({at:`${e.file}:${e.line}`,label:e.label,glyph:e.glyph});continue}const o=(f.get(e.label)??[]).map(n=>`${n.builder} @ ${n.file.path}:${n.line}`).join(" · ");g.push(`${e.file}:${e.line} "${e.label}" — also ${o}`)}t(`the builder-label scan read something (${f.size} labels, at least ${l.floors.labels})`,f.size>=l.floors.labels),t(`the component scan read something (${u.length} hand-drawn rows in ${w.length} component files, at least ${l.floors.panelRows})`,u.length>=l.floors.panelRows),t("no NEW hard-coded mirror",g.length===0,`
1
+ import{ruleChecks as R}from"./rule.js";import{blockSource as E,registryFiles as k}from"./support/registry-source.js";import{isDocumentPath as S}from"./support/document-folder.js";const j="lib/document/controls.tsx",P=["slider","select","segmented","textList"];function x(c){return/icon=\{<([A-Z][A-Za-z0-9]*Icon)\s*\/>\}/.exec(c)?.[1]??/<([A-Z][A-Za-z0-9]*Icon)\s*\/>/.exec(c)?.[1]??/<FieldGlyph noun="([a-z]+)"/.exec(c)?.[1]??"none"}function y(c){const l=new Map;for(const s of c)s.text.split(`
2
+ `).forEach((t,p)=>{const a=t.trim();if(!(a.startsWith("//")||a.startsWith("*")||a.startsWith("/*")))for(const h of P){if(new RegExp(`^(export )?function ${h}\\(`).test(a))continue;const d=t.match(new RegExp(`(^|[^.\\w])${h}\\(\\s*"([^"]+)"`));d&&l.set(d[2],[...l.get(d[2])??[],{file:s,line:p+1,builder:h}])}});return l}function I(c){const l=[];for(const s of c)s.text.split(`
3
+ `).forEach((t,p)=>{const a=t.match(/<SettingsField\s+label=(?:\{say\()?"([^"]+)"/);a&&l.push({file:s.path,line:p+1,label:a[1].trim(),glyph:x(t)})});return l}function N(c,l,s){const{check:t,report:p}=R("mirrored rows agree"),a=s.mirrored??[],h=s.sameWord??[];{const e={path:"fixture.tsx",text:["export function select(label: string) {}",'const a = select("Product", <BoxIcon />, options);','// select("In a comment", <BoxIcon />)','const b = usePreviewParts().select("Not a row");','const c = <SettingsField label="Product" icon={<BoxIcon />}>{x}</SettingsField>;'].join(`
4
+ `)},o=y([e]),n=I([e]);t("the builder-label reader finds a call, and not its declaration, a comment or another object's method",[...o.keys()].join()==="Product"&&o.get("Product")?.[0].line===2,JSON.stringify([...o.keys()])),t("the row reader finds a hand-drawn row and the glyph it wears",n.length===1&&n[0].label==="Product"&&n[0].glyph==="BoxIcon",JSON.stringify(n))}const d=l.find(e=>S(e.path,"controls.tsx"));for(const e of a){const o=d?new RegExp(`export const ${e.constant} = \\{[\\s\\S]*?\\} as const;`).exec(d.text):null;t(`${e.constant} is declared in ${j}`,o!==null),o&&(t("…and carries the label",/label:\s*"/.test(o[0]),o[0].slice(0,120)),t("…and carries the glyph",/icon:\s*</.test(o[0]),o[0].slice(0,120)));let n=null;try{n=E(c,l,e.declaredIn)}catch{n=null}t(`read the ${e.declaredIn} block`,n!==null,`no block "${e.declaredIn}" among the files handed in`);const r=l.find(i=>i.path===e.drawnIn)?.text??null;t(`read ${e.drawnIn}`,r!==null);for(const[i,$]of[[`the ${e.declaredIn} block`,n],[e.drawnIn,r]])$!==null&&(t(`${i} spreads ${e.constant}`,new RegExp(`${e.constant}\\.(label|icon)`).test($)),t(`…and no longer hard-codes "${e.row}"`,!new RegExp(`"${e.row}"`).test($),`${i} still contains the literal`))}t(`the mirrored pairs were checked (${a.length}, at least ${s.floors.pairs}; an empty sweep proves nothing)`,a.length>=s.floors.pairs);const f=y([...k(l),...d?[d]:[]]),m=l.filter(e=>/^components\/[^/]+\.tsx$/.test(e.path)),u=I(m),g=[],w=[];for(const e of u){if(!f.has(e.label))continue;if(h.includes(e.label)){w.push({at:`${e.file}:${e.line}`,label:e.label,glyph:e.glyph});continue}const o=(f.get(e.label)??[]).map(n=>`${n.builder} @ ${n.file.path}:${n.line}`).join(" · ");g.push(`${e.file}:${e.line} "${e.label}" — also ${o}`)}t(`the builder-label scan read something (${f.size} labels, at least ${s.floors.labels})`,f.size>=s.floors.labels),t(`the component scan read something (${u.length} hand-drawn rows in ${m.length} component files, at least ${s.floors.panelRows})`,u.length>=s.floors.panelRows),t("no NEW hard-coded mirror",g.length===0,`
5
5
  ${g.join(`
6
- `)}`);const b=h.filter(e=>!f.has(e));t("no same-word entry has outlived its subject",b.length===0,b.join(" · "));for(const e of h){const o=new Set,n=[];for(const r of m.filter(i=>i.label===e))o.add(r.glyph),n.push(`${r.at} → ${r.glyph}`);for(const r of f.get(e)??[]){const i=y(r.file.text.split(`
6
+ `)}`);const b=h.filter(e=>!f.has(e));t("no same-word entry has outlived its subject",b.length===0,b.join(" · "));for(const e of h){const o=new Set,n=[];for(const r of w.filter(i=>i.label===e))o.add(r.glyph),n.push(`${r.at} → ${r.glyph}`);for(const r of f.get(e)??[]){const i=x(r.file.text.split(`
7
7
  `).slice(r.line-1,r.line+6).join(`
8
8
  `));o.add(i),n.push(`${r.file.path}:${r.line} → ${i}`)}t(`"${e}" draws ONE picture wherever it is declared`,o.size===1,`${o.size} different:
9
9
  ${n.join(`
10
- `)}`),t(`…and "${e}" was actually found in both places`,n.length>=2,`${n.length}`)}return p()}export{y as glyphOf,W as mirroredRowsAgree};
10
+ `)}`),t(`…and "${e}" was actually found in both places`,n.length>=2,`${n.length}`)}return p()}export{x as glyphOf,N as mirroredRowsAgree};
@@ -1,5 +1,5 @@
1
1
  import { type RuleReport, type SourceFile } from "./rule.js";
2
- export declare const CONTROLS_FILE = "lib/puck/controls.tsx";
2
+ export declare const CONTROLS_FILE = "lib/document/controls.tsx";
3
3
  export type NoGlyphRowsOptions = {
4
4
  readonly expected: number;
5
5
  readonly minChars: number;
@@ -1,4 +1,4 @@
1
- import{isRegistryPath as m,registryFiles as x}from"./support/registry-source.js";import{ruleChecks as y}from"./rule.js";const d="lib/puck/controls.tsx",u=/doc\/naming\.md|N10\.\d|owner|GG|SS seat|editor-shell|\d{4}-\d{2}-\d{2}/;function w(r){const e=x(r),o=r.filter(n=>n.path===d&&!m(n.path)),h=r.filter(n=>/^components\/[^/]+\.tsx$/.test(n.path));return[...e,...o,...h]}function f(r){const e=r.text,o=[],h=/noGlyph\(/g;let n;for(;n=h.exec(e);){const l=e.lastIndexOf(`
2
- `,n.index)+1,s=e.slice(l,n.index);if(/^\s*(\/\/|\*|\/\*)/.test(s)||(s.match(/"/g)??[]).length%2===1||/\bfunction\s+$/.test(s))continue;let c=1,a=n.index+n[0].length;for(;a<e.length&&c>0;a++)e[a]==="("?c+=1:e[a]===")"&&(c-=1);const i=[...e.slice(n.index+n[0].length,a-1).matchAll(/"((?:[^"\\]|\\.)*)"/g)].map(g=>g[1]).join(""),p=e.slice(0,n.index).split(`
3
- `).length;o.push({at:`${r.path}:${p}`,reason:i})}return o}function $(r,e){const{check:o,report:h}=y("no-glyph rows");{const t=f({path:"fixture.tsx",text:["/**"," * `noGlyph(reason)` — the docblock names it; that is not a use."," */","export function noGlyph(reason: string) {",' if (!reason) throw new Error("noGlyph() needs a reason");',"}",'const a = select("Process", noGlyph(',` "A facet's options grow out of the CATALOGUE — owner, " +`,' "2026-08-29.",',"));",'// noGlyph("in a comment") is not a use','const b = noGlyph("");'].join(`
4
- `)});o("the reader finds the two calls, and neither the docblock, the declaration, the string nor the comment",t.length===2&&t[0].at==="fixture.tsx:7"&&t[1].at==="fixture.tsx:12",JSON.stringify(t)),o("…reads a concatenated reason whole, so it can be checked for a source",t[0]?.reason==="A facet's options grow out of the CATALOGUE — owner, 2026-08-29."&&u.test(t[0].reason),JSON.stringify(t[0])),o("…and reads a bare call as no reason",t[1]?.reason==="",JSON.stringify(t[1]))}const n=w(r),l=n.reduce((t,i)=>t+i.text.length,0);o(`the scan read the files it meant to (${n.length} files, ${l} characters, at least ${e.minChars})`,l>=e.minChars,"the registry, lib/puck/controls.tsx or components/ moved — a scan that reads nothing finds no exceptions");const s=n.flatMap(f),c=s.filter(t=>!t.reason.trim());o("every noGlyph() states a reason",c.length===0,c.map(t=>t.at).join(" · "));const a=s.filter(t=>t.reason.trim()&&!u.test(t.reason));if(o("…and every reason names a source that can be checked",a.length===0,a.map(t=>`${t.at} — "${t.reason.slice(0,60)}"`).join(" · ")),o(`the no-glyph rows still number ${e.expected} (found ${s.length}${s.length?`: ${s.map(t=>t.at).join(", ")}`:""})`,s.length===e.expected,"a ruling was added or lost — move the number, with the ruling, in the guard that counts it"),e.controls){const t=r.find(p=>p.path===d)?.text??"";o(`read ${d}`,t.length>0,"the file noGlyph and iconOf are written in is not among the files handed in"),o(`noGlyph is still exported from ${d}`,/export function noGlyph\(/.test(t)),o("…and a marker is unwrapped rather than drawn as an empty gutter",/export function iconOf\(/.test(t)&&/isNoGlyph\(icon\) \? undefined : icon/.test(t),"SettingsField draws its icon span only when given an icon");const i=(t.match(/icon=\{iconOf\(icon\)\}/g)??[]).length;o(`…and the shared builders pass their icon through it (${i}, at least ${e.controls.buildersFloor})`,i>=e.controls.buildersFloor,`${i} builders`)}return h()}export{d as CONTROLS_FILE,$ as noGlyphRows,f as noGlyphRowsIn};
1
+ import{isRegistryPath as x,registryFiles as y}from"./support/registry-source.js";import{ruleChecks as w}from"./rule.js";import{isDocumentPath as b}from"./support/document-folder.js";const p="lib/document/controls.tsx",u=s=>b(s,"controls.tsx"),f=/doc\/naming\.md|N10\.\d|owner|GG|SS seat|editor-shell|\d{4}-\d{2}-\d{2}/;function G(s){const e=y(s),o=s.filter(n=>u(n.path)&&!x(n.path)),l=s.filter(n=>/^components\/[^/]+\.tsx$/.test(n.path));return[...e,...o,...l]}function g(s){const e=s.text,o=[],l=/noGlyph\(/g;let n;for(;n=l.exec(e);){const h=e.lastIndexOf(`
2
+ `,n.index)+1,r=e.slice(h,n.index);if(/^\s*(\/\/|\*|\/\*)/.test(r)||(r.match(/"/g)??[]).length%2===1||/\bfunction\s+$/.test(r))continue;let c=1,a=n.index+n[0].length;for(;a<e.length&&c>0;a++)e[a]==="("?c+=1:e[a]===")"&&(c-=1);const i=[...e.slice(n.index+n[0].length,a-1).matchAll(/"((?:[^"\\]|\\.)*)"/g)].map(m=>m[1]).join(""),d=e.slice(0,n.index).split(`
3
+ `).length;o.push({at:`${s.path}:${d}`,reason:i})}return o}function A(s,e){const{check:o,report:l}=w("no-glyph rows");{const t=g({path:"fixture.tsx",text:["/**"," * `noGlyph(reason)` — the docblock names it; that is not a use."," */","export function noGlyph(reason: string) {",' if (!reason) throw new Error("noGlyph() needs a reason");',"}",'const a = select("Process", noGlyph(',` "A facet's options grow out of the CATALOGUE — owner, " +`,' "2026-08-29.",',"));",'// noGlyph("in a comment") is not a use','const b = noGlyph("");'].join(`
4
+ `)});o("the reader finds the two calls, and neither the docblock, the declaration, the string nor the comment",t.length===2&&t[0].at==="fixture.tsx:7"&&t[1].at==="fixture.tsx:12",JSON.stringify(t)),o("…reads a concatenated reason whole, so it can be checked for a source",t[0]?.reason==="A facet's options grow out of the CATALOGUE — owner, 2026-08-29."&&f.test(t[0].reason),JSON.stringify(t[0])),o("…and reads a bare call as no reason",t[1]?.reason==="",JSON.stringify(t[1]))}const n=G(s),h=n.reduce((t,i)=>t+i.text.length,0);o(`the scan read the files it meant to (${n.length} files, ${h} characters, at least ${e.minChars})`,h>=e.minChars,"the registry, lib/document/controls.tsx or components/ moved — a scan that reads nothing finds no exceptions");const r=n.flatMap(g),c=r.filter(t=>!t.reason.trim());o("every noGlyph() states a reason",c.length===0,c.map(t=>t.at).join(" · "));const a=r.filter(t=>t.reason.trim()&&!f.test(t.reason));if(o("…and every reason names a source that can be checked",a.length===0,a.map(t=>`${t.at} — "${t.reason.slice(0,60)}"`).join(" · ")),o(`the no-glyph rows still number ${e.expected} (found ${r.length}${r.length?`: ${r.map(t=>t.at).join(", ")}`:""})`,r.length===e.expected,"a ruling was added or lost — move the number, with the ruling, in the guard that counts it"),e.controls){const t=s.find(d=>u(d.path))?.text??"";o(`read ${p}`,t.length>0,"the file noGlyph and iconOf are written in is not among the files handed in"),o(`noGlyph is still exported from ${p}`,/export function noGlyph\(/.test(t)),o("…and a marker is unwrapped rather than drawn as an empty gutter",/export function iconOf\(/.test(t)&&/isNoGlyph\(icon\) \? undefined : icon/.test(t),"SettingsField draws its icon span only when given an icon");const i=(t.match(/icon=\{iconOf\(icon\)\}/g)??[]).length;o(`…and the shared builders pass their icon through it (${i}, at least ${e.controls.buildersFloor})`,i>=e.controls.buildersFloor,`${i} builders`)}return l()}export{p as CONTROLS_FILE,A as noGlyphRows,g as noGlyphRowsIn};
@@ -1,4 +1,4 @@
1
- import{ruleChecks as b}from"./rule.js";const W=["lib/puck/show-when.ts","lib/puck/show-when-resolve.ts"],k=(s,l=[])=>/(^|\/)fields\.tsx?$/.test(s)||s.includes("lib/puck/passes/")||l.includes(s),y=new Set(["SettingRow","SettingsField","SettingsSwitch","SettingsSegmented","SettingsDrill","SettingsAction","SettingsGroupSub","InspectorField","FieldText","FieldNumber","FieldSelect","FieldSlider","ListField"]),S=/\b(?:props|values|settings|data\.props)(?:\.|\[|\?\.)/,E=new Set(["withShowWhen","showWhenOf","withRowsShownWhen","withRowRules","truthy","shownForOption","addShowWhenFacts","withShowWhenFacts","showWhenFactsContext","showWhenFactReaders","lazyShowWhenContext"]);function g(s,l,c=[]){const i=s.createSourceFile(l.path,l.text,s.ScriptTarget.Latest,!0,s.ScriptKind.TSX),h=e=>i.getLineAndCharacterOfPosition(e.getStart(i)).line+1,a=[];let f=0;const w=W.some(e=>l.path.endsWith(e)),x=e=>s.isPropertyAssignment(e)&&e.name.getText(i)==="resolveFields"||s.isBinaryExpression(e)&&e.operatorToken.kind===s.SyntaxKind.EqualsToken&&s.isPropertyAccessExpression(e.left)&&e.left.name.text==="resolveFields",p=(e,n)=>{const d=n||x(e);if(s.isDeleteExpression(e)&&(s.isPropertyAccessExpression(e.expression)||s.isElementAccessExpression(e.expression))&&(d?a.push({file:l.path,line:h(e),what:"R1 a `delete` in a resolveFields — give the row a showWhen rule"}):k(l.path,c)&&a.push({file:l.path,line:h(e),what:"R2 a `delete` in a field file or a pass — give the row a showWhen rule"})),d&&s.isObjectBindingPattern(e)&&e.elements.some(o=>o.dotDotDotToken)&&a.push({file:l.path,line:h(e),what:"R1 a destructure that leaves a key out, in a resolveFields — give the row a showWhen rule"}),d&&s.isCallExpression(e)&&s.isPropertyAccessExpression(e.expression)&&e.expression.name.text==="filter"&&/^Object\.entries\(/.test(e.expression.expression.getText(i))&&a.push({file:l.path,line:h(e),what:"R1 a filter over Object.entries in a resolveFields — give the row a showWhen rule"}),d&&s.isForOfStatement(e)&&/^Object\.entries\(/.test(e.expression.getText(i))&&a.push({file:l.path,line:h(e),what:"R4 a loop over Object.entries in a resolveFields — give the row a showWhen rule"}),s.isJsxExpression(e)&&e.expression){const o=e.expression,u=r=>s.isParenthesizedExpression(r)?u(r.expression):r,t=r=>{if(!r)return!1;const R=s.isJsxElement(r)?r.openingElement:s.isJsxSelfClosingElement(r)?r:s.isJsxFragment(r)?null:void 0;return R===null?r.getChildren(i).some(F=>F.getChildren(i).some(v=>t(v))):!!R&&y.has(R.tagName.getText(i))};(s.isBinaryExpression(o)&&o.operatorToken.kind===s.SyntaxKind.AmpersandAmpersandToken&&S.test(o.left.getText(i))&&t(u(o.right))||s.isConditionalExpression(o)&&S.test(o.condition.getText(i))&&(t(u(o.whenTrue))||t(u(o.whenFalse))))&&a.push({file:l.path,line:h(e),what:"R5 a settings row drawn by a stored value — use the row's showWhen (SettingRow / ShowWhen)"})}const m=o=>!!o&&s.isIdentifier(o)&&E.has(o.text);if((s.isFunctionDeclaration(e)&&m(e.name)||s.isVariableDeclaration(e)&&m(e.name)&&e.initializer&&(s.isArrowFunction(e.initializer)||s.isFunctionExpression(e.initializer)))&&a.push({file:l.path,line:h(e),what:"R6 a second copy of a show-when helper of the shell's — import it from efficient-shell/format"}),s.isCallExpression(e)&&s.isIdentifier(e.expression)){const o=e.expression.text;o==="isShown"&&!w&&a.push({file:l.path,line:h(e),what:"R3 a second reader of the rule — `isShown(` lives in lib/puck/show-when"}),(o==="withShowWhen"||o==="withRowsShownWhen"||o==="withRowRules")&&f++}s.forEachChild(e,o=>p(o,d))};return p(i,!1),{bad:a,attached:f}}function A(s,l,c){const{check:i,report:h}=b("one show-when rule"),a=c.kept??{};{const e=["export const A = { resolveFields: (data, { fields }) => { const f = { ...fields }; delete f.alt; return f; } };","export const B = { resolveFields: (d, { fields }) => { const { align: _x, ...rest } = fields; return rest; } };",'comp.resolveFields = (d, p) => Object.fromEntries(Object.entries(p.fields).filter(([k]) => k !== "x"));',"function cull(f) { delete f[key]; }","const shown = isShown(rule, values);","// delete f.alt in a comment is not a use",'export const ok = { fields: { alt: withShowWhen(text("Alt"), { field: "src", set: true }) } };',"export const C = { resolveFields: (d, { fields }) => { const out = {}; for (const [k, v] of Object.entries(fields)) if (keep.includes(k)) out[k] = v; return out; } };",'const p = <div>{settings.logo_position === "center" && <SettingRow label="Left items" />}</div>;','const q = <div>{props.on ? (<SettingsField label="x" />) : null}</div>;','const r = <div>{style ? <SettingsField label="Style" /> : null}</div>;',"export function withShowWhen(field, rule) { return { ...field, showWhen: rule }; }","const showWhenOf = (f) => f.showWhen;",'export { showWhenOf, withShowWhen } from "efficient-shell/format";','export function truthy(field) { return { not: { field, in: [false, 0, "", null] } }; }',"const withRowRules = (fields, table) => fields;"].join(`
2
- `),n=g(s,{path:"lib/puck/blocks/general/X/fields.tsx",text:e}),d=n.bad.map(t=>t.line);i("R1 flags a delete in a resolveFields",n.bad.some(t=>t.line===1&&t.what.startsWith("R1"))),i("R1 flags a destructure that leaves a key out",n.bad.some(t=>t.line===2&&t.what.startsWith("R1"))),i("R1 flags a filter over Object.entries",n.bad.some(t=>t.line===3&&t.what.startsWith("R1"))),i("R2 flags a delete in a field file's helper",n.bad.some(t=>t.line===4&&t.what.startsWith("R2"))),i("R3 flags a second isShown(",n.bad.some(t=>t.line===5&&t.what.startsWith("R3"))),i("a comment is not a use, and a rule passes and is counted",!d.includes(6)&&!d.includes(7)&&n.attached===1),i("R4 flags an allow-list loop over Object.entries",n.bad.some(t=>t.line===8&&t.what.startsWith("R4"))),i("R5 flags a row drawn by a stored value (&&)",n.bad.some(t=>t.line===9&&t.what.startsWith("R5"))),i("R5 flags a row drawn by a stored value (? :)",n.bad.some(t=>t.line===10&&t.what.startsWith("R5"))),i("R5 lets a part the host passed through",!d.includes(11)),i("R6 flags a second withShowWhen (a function)",n.bad.some(t=>t.line===12&&t.what.startsWith("R6"))),i("R6 flags a second showWhenOf (a const arrow)",n.bad.some(t=>t.line===13&&t.what.startsWith("R6"))),i("R6 lets a re-export from the shell through",!d.includes(14)),i("R6 flags a second truthy (a function)",n.bad.some(t=>t.line===15&&t.what.startsWith("R6"))),i("R6 flags a second withRowRules (a const arrow)",n.bad.some(t=>t.line===16&&t.what.startsWith("R6")));const m=g(s,{path:"lib/puck/cull.ts",text:"function cull(f) { delete f.x; }"},["lib/puck/cull.ts"]);i("R2 reads a file a repository names as a field file",m.bad.length===1);const o=g(s,{path:"lib/puck/part-styles.ts",text:"function f(next) { delete next[k]; }"});i("R2 reads only field files and passes (a delete of a VALUE elsewhere is not a hide)",o.bad.length===0);const u=g(s,{path:"lib/puck/show-when.ts",text:"isShown(rule, values);"});i("R3 lets the reader read",u.bad.length===0)}const f=l.filter(e=>/\.tsx?$/.test(e.path)&&!e.path.endsWith(".d.ts")),w=[],x=new Map;let p=0;for(const e of f){const n=g(s,e,c.alsoFieldFiles);p+=n.attached,x.set(e.path,n.bad.length),e.path in a||w.push(...n.bad)}i("no settings row hidden by hand: no delete or key-dropping filter in a resolver, field file or pass; one reader",w.length===0,`${w.length} hit(s):
1
+ import{ruleChecks as b}from"./rule.js";import{documentPaths as S}from"./support/document-folder.js";const y=[...S("show-when.ts"),...S("show-when-resolve.ts")],E=(s,l=[])=>/(^|\/)fields\.tsx?$/.test(s)||S("passes/").some(r=>s.includes(r))||l.includes(s),k=new Set(["SettingRow","SettingsField","SettingsSwitch","SettingsSegmented","SettingsDrill","SettingsAction","SettingsGroupSub","InspectorField","FieldText","FieldNumber","FieldSelect","FieldSlider","ListField"]),F=/\b(?:props|values|settings|data\.props)(?:\.|\[|\?\.)/,O=new Set(["withShowWhen","showWhenOf","withRowsShownWhen","withRowRules","truthy","shownForOption","addShowWhenFacts","withShowWhenFacts","showWhenFactsContext","showWhenFactReaders","lazyShowWhenContext"]);function m(s,l,r=[]){const i=s.createSourceFile(l.path,l.text,s.ScriptTarget.Latest,!0,s.ScriptKind.TSX),d=e=>i.getLineAndCharacterOfPosition(e.getStart(i)).line+1,a=[];let f=0;const w=y.some(e=>l.path.endsWith(e)),g=e=>s.isPropertyAssignment(e)&&e.name.getText(i)==="resolveFields"||s.isBinaryExpression(e)&&e.operatorToken.kind===s.SyntaxKind.EqualsToken&&s.isPropertyAccessExpression(e.left)&&e.left.name.text==="resolveFields",u=(e,n)=>{const c=n||g(e);if(s.isDeleteExpression(e)&&(s.isPropertyAccessExpression(e.expression)||s.isElementAccessExpression(e.expression))&&(c?a.push({file:l.path,line:d(e),what:"R1 a `delete` in a resolveFields — give the row a showWhen rule"}):E(l.path,r)&&a.push({file:l.path,line:d(e),what:"R2 a `delete` in a field file or a pass — give the row a showWhen rule"})),c&&s.isObjectBindingPattern(e)&&e.elements.some(o=>o.dotDotDotToken)&&a.push({file:l.path,line:d(e),what:"R1 a destructure that leaves a key out, in a resolveFields — give the row a showWhen rule"}),c&&s.isCallExpression(e)&&s.isPropertyAccessExpression(e.expression)&&e.expression.name.text==="filter"&&/^Object\.entries\(/.test(e.expression.expression.getText(i))&&a.push({file:l.path,line:d(e),what:"R1 a filter over Object.entries in a resolveFields — give the row a showWhen rule"}),c&&s.isForOfStatement(e)&&/^Object\.entries\(/.test(e.expression.getText(i))&&a.push({file:l.path,line:d(e),what:"R4 a loop over Object.entries in a resolveFields — give the row a showWhen rule"}),s.isJsxExpression(e)&&e.expression){const o=e.expression,p=h=>s.isParenthesizedExpression(h)?p(h.expression):h,t=h=>{if(!h)return!1;const R=s.isJsxElement(h)?h.openingElement:s.isJsxSelfClosingElement(h)?h:s.isJsxFragment(h)?null:void 0;return R===null?h.getChildren(i).some(v=>v.getChildren(i).some(W=>t(W))):!!R&&k.has(R.tagName.getText(i))};(s.isBinaryExpression(o)&&o.operatorToken.kind===s.SyntaxKind.AmpersandAmpersandToken&&F.test(o.left.getText(i))&&t(p(o.right))||s.isConditionalExpression(o)&&F.test(o.condition.getText(i))&&(t(p(o.whenTrue))||t(p(o.whenFalse))))&&a.push({file:l.path,line:d(e),what:"R5 a settings row drawn by a stored value — use the row's showWhen (SettingRow / ShowWhen)"})}const x=o=>!!o&&s.isIdentifier(o)&&O.has(o.text);if((s.isFunctionDeclaration(e)&&x(e.name)||s.isVariableDeclaration(e)&&x(e.name)&&e.initializer&&(s.isArrowFunction(e.initializer)||s.isFunctionExpression(e.initializer)))&&a.push({file:l.path,line:d(e),what:"R6 a second copy of a show-when helper of the shell's — import it from efficient-shell/format"}),s.isCallExpression(e)&&s.isIdentifier(e.expression)){const o=e.expression.text;o==="isShown"&&!w&&a.push({file:l.path,line:d(e),what:"R3 a second reader of the rule — `isShown(` lives in lib/document/show-when"}),(o==="withShowWhen"||o==="withRowsShownWhen"||o==="withRowRules")&&f++}s.forEachChild(e,o=>u(o,c))};return u(i,!1),{bad:a,attached:f}}function $(s,l,r){const{check:i,report:d}=b("one show-when rule"),a=r.kept??{};{const e=["export const A = { resolveFields: (data, { fields }) => { const f = { ...fields }; delete f.alt; return f; } };","export const B = { resolveFields: (d, { fields }) => { const { align: _x, ...rest } = fields; return rest; } };",'comp.resolveFields = (d, p) => Object.fromEntries(Object.entries(p.fields).filter(([k]) => k !== "x"));',"function cull(f) { delete f[key]; }","const shown = isShown(rule, values);","// delete f.alt in a comment is not a use",'export const ok = { fields: { alt: withShowWhen(text("Alt"), { field: "src", set: true }) } };',"export const C = { resolveFields: (d, { fields }) => { const out = {}; for (const [k, v] of Object.entries(fields)) if (keep.includes(k)) out[k] = v; return out; } };",'const p = <div>{settings.logo_position === "center" && <SettingRow label="Left items" />}</div>;','const q = <div>{props.on ? (<SettingsField label="x" />) : null}</div>;','const r = <div>{style ? <SettingsField label="Style" /> : null}</div>;',"export function withShowWhen(field, rule) { return { ...field, showWhen: rule }; }","const showWhenOf = (f) => f.showWhen;",'export { showWhenOf, withShowWhen } from "efficient-shell/format";','export function truthy(field) { return { not: { field, in: [false, 0, "", null] } }; }',"const withRowRules = (fields, table) => fields;"].join(`
2
+ `),n=m(s,{path:"lib/document/blocks/general/X/fields.tsx",text:e}),c=n.bad.map(t=>t.line);i("R1 flags a delete in a resolveFields",n.bad.some(t=>t.line===1&&t.what.startsWith("R1"))),i("R1 flags a destructure that leaves a key out",n.bad.some(t=>t.line===2&&t.what.startsWith("R1"))),i("R1 flags a filter over Object.entries",n.bad.some(t=>t.line===3&&t.what.startsWith("R1"))),i("R2 flags a delete in a field file's helper",n.bad.some(t=>t.line===4&&t.what.startsWith("R2"))),i("R3 flags a second isShown(",n.bad.some(t=>t.line===5&&t.what.startsWith("R3"))),i("a comment is not a use, and a rule passes and is counted",!c.includes(6)&&!c.includes(7)&&n.attached===1),i("R4 flags an allow-list loop over Object.entries",n.bad.some(t=>t.line===8&&t.what.startsWith("R4"))),i("R5 flags a row drawn by a stored value (&&)",n.bad.some(t=>t.line===9&&t.what.startsWith("R5"))),i("R5 flags a row drawn by a stored value (? :)",n.bad.some(t=>t.line===10&&t.what.startsWith("R5"))),i("R5 lets a part the host passed through",!c.includes(11)),i("R6 flags a second withShowWhen (a function)",n.bad.some(t=>t.line===12&&t.what.startsWith("R6"))),i("R6 flags a second showWhenOf (a const arrow)",n.bad.some(t=>t.line===13&&t.what.startsWith("R6"))),i("R6 lets a re-export from the shell through",!c.includes(14)),i("R6 flags a second truthy (a function)",n.bad.some(t=>t.line===15&&t.what.startsWith("R6"))),i("R6 flags a second withRowRules (a const arrow)",n.bad.some(t=>t.line===16&&t.what.startsWith("R6")));const x=m(s,{path:"lib/document/cull.ts",text:"function cull(f) { delete f.x; }"},["lib/document/cull.ts"]);i("R2 reads a file a repository names as a field file",x.bad.length===1);const o=m(s,{path:"lib/document/part-styles.ts",text:"function f(next) { delete next[k]; }"});i("R2 reads only field files and passes (a delete of a VALUE elsewhere is not a hide)",o.bad.length===0);const p=m(s,{path:"lib/document/show-when.ts",text:"isShown(rule, values);"});i("R3 lets the reader read",p.bad.length===0)}const f=l.filter(e=>/\.tsx?$/.test(e.path)&&!e.path.endsWith(".d.ts")),w=[],g=new Map;let u=0;for(const e of f){const n=m(s,e,r.alsoFieldFiles);u+=n.attached,g.set(e.path,n.bad.length),e.path in a||w.push(...n.bad)}i("no settings row hidden by hand: no delete or key-dropping filter in a resolver, field file or pass; one reader",w.length===0,`${w.length} hit(s):
3
3
  `+w.map(e=>`${e.file}:${e.line} ${e.what}`).join(`
4
- `)),i(`read the source (${f.length} TS/TSX files, at least ${c.minFiles})`,f.length>=c.minFiles),i(`found >= ${c.ruleFloor} rows given a rule (found ${p})`,p>=c.ruleFloor,"fewer means rows went back to a hand-written hide, or the reader broke");for(const e of c.alsoFieldFiles??[])i(`read the named field file ${e}`,f.some(n=>n.path===e));for(const[e,n]of Object.entries(a))i(`the exception is still real: ${e} (${n})`,(x.get(e)??0)>0,"remove the stale entry");return h()}export{A as oneShowWhen};
4
+ `)),i(`read the source (${f.length} TS/TSX files, at least ${r.minFiles})`,f.length>=r.minFiles),i(`found >= ${r.ruleFloor} rows given a rule (found ${u})`,u>=r.ruleFloor,"fewer means rows went back to a hand-written hide, or the reader broke");for(const e of r.alsoFieldFiles??[])i(`read the named field file ${e}`,f.some(n=>n.path===e));for(const[e,n]of Object.entries(a))i(`the exception is still real: ${e} (${n})`,(g.get(e)??0)>0,"remove the stale entry");return d()}export{$ as oneShowWhen};
@@ -1,5 +1,5 @@
1
1
  import { type RuleReport, type SourceFile } from "./rule.js";
2
- export declare const CONTROLS_FILE = "lib/puck/controls.tsx";
2
+ export declare const CONTROLS_FILE = "lib/document/controls.tsx";
3
3
  export type PanelRowException = {
4
4
  readonly file: string;
5
5
  readonly label: string;
@@ -1,23 +1,23 @@
1
- import{ruleChecks as W}from"./rule.js";import{builderModuleSpec as A}from"./support/ts-source.js";import{isRegistryPath as R,registryFiles as T}from"./support/registry-source.js";const k="lib/puck/controls.tsx",I={},N={},E=["boxShareField","edgePad","placementField","CoordsField","textList","segmented","select","slider"],_=/sf-field-label|<Label>/,C=/<[A-Z][A-Za-z0-9]*Icon\s*\/>/,G=n=>n.startsWith("//")||n.startsWith("*")||n.startsWith("/*");function z(n,o){const e=n.indexOf("(",o);if(e===-1)return"";let b=0;const c=[];let h=e+1;for(let d=e;d<n.length;d+=1){const i=n[d];if(i==="("||i==="["||i==="{")b+=1;else if(i===")"||i==="]"||i==="}"){if(b-=1,b===0){c.push(n.slice(h,d));break}}else if(i===","&&b===1&&(c.push(n.slice(h,d)),h=d+1,c.length===2))break}return c[1]??""}function M(n,o){const e=new RegExp(`(?:^|[^.\\w])${o}\\s*(?:<[^()]*?>)?\\s*\\(|\\bcontrols\\.${o}\\s*(?:<[^()]*?>)?\\s*\\(`).exec(n);return e?e.index+e[0].length-1:n.indexOf("(")}function U(n,o){const e=n.slice(0,o);return e.includes("//")?!1:(e.match(/"/g)??[]).length%2===0&&(e.match(/`/g)??[]).length%2===0&&(e.match(/'/g)??[]).length%2===0}const B=A("lib/puck/controls"),v=(n,o)=>new RegExp(`import \\{[^}]*\\b${o}\\b[^}]*\\} from "${B}"`).test(n)||new RegExp(`import \\* as controls from "${B}"`).test(n);function F(n,o,e){const b=new RegExp(`(^|[^.\\w])${o}\\s*(<[^()]*?>)?\\s*\\(|\\bcontrols\\.${o}\\s*(<[^()]*?>)?\\s*\\(`,"g"),c=new RegExp(`^(export )?function ${o}(<[^>]*>)?\\(`),h=[];let d=0;for(const i of n){const u=i.text.split(`
1
+ import{ruleChecks as T}from"./rule.js";import{builderModuleSpec as C}from"./support/ts-source.js";import{isRegistryPath as F,registryFiles as _}from"./support/registry-source.js";import{isDocumentPath as G}from"./support/document-folder.js";const R="lib/document/controls.tsx",I={},N={},E=["boxShareField","edgePad","placementField","CoordsField","textList","segmented","select","slider"],z=/sf-field-label|<Label>/,B=/<[A-Z][A-Za-z0-9]*Icon\s*\/>/,v=s=>s.startsWith("//")||s.startsWith("*")||s.startsWith("/*");function M(s,o){const e=s.indexOf("(",o);if(e===-1)return"";let b=0;const c=[];let h=e+1;for(let d=e;d<s.length;d+=1){const i=s[d];if(i==="("||i==="["||i==="{")b+=1;else if(i===")"||i==="]"||i==="}"){if(b-=1,b===0){c.push(s.slice(h,d));break}}else if(i===","&&b===1&&(c.push(s.slice(h,d)),h=d+1,c.length===2))break}return c[1]??""}function U(s,o){const e=new RegExp(`(?:^|[^.\\w])${o}\\s*(?:<[^()]*?>)?\\s*\\(|\\bcontrols\\.${o}\\s*(?:<[^()]*?>)?\\s*\\(`).exec(s);return e?e.index+e[0].length-1:s.indexOf("(")}function J(s,o){const e=s.slice(0,o);return e.includes("//")?!1:(e.match(/"/g)??[]).length%2===0&&(e.match(/`/g)??[]).length%2===0&&(e.match(/'/g)??[]).length%2===0}const D=`(?:${C("lib/document/controls")}|${C("lib/puck/controls")})`,P=(s,o)=>new RegExp(`import \\{[^}]*\\b${o}\\b[^}]*\\} from "${D}"`).test(s)||new RegExp(`import \\* as controls from "${D}"`).test(s);function k(s,o,e){const b=new RegExp(`(^|[^.\\w])${o}\\s*(<[^()]*?>)?\\s*\\(|\\bcontrols\\.${o}\\s*(<[^()]*?>)?\\s*\\(`,"g"),c=new RegExp(`^(export )?function ${o}(<[^>]*>)?\\(`),h=[];let d=0;for(const i of s){const u=i.text.split(`
2
2
  `),m=u.join(`
3
- `);u.forEach((p,g)=>{const w=p.trim();if(G(w)||c.test(w))return;b.lastIndex=0;const $=b.exec(p);if(!$||!U(p,$.index))return;d+=1;const O=z(m,u.slice(0,g).join(`
4
- `).length+M(p,o));C.test(O)||/<FieldGlyph\b/.test(O)||e.some(t=>t.test(O))||h.push(`${i.path}:${g+1} ${w.slice(0,80)}`)})}return{bare:h,total:d}}function J(n){const o={};for(const e of n){const b=e.text.split(`
3
+ `);u.forEach((p,g)=>{const w=p.trim();if(v(w)||c.test(w))return;b.lastIndex=0;const $=b.exec(p);if(!$||!J(p,$.index))return;d+=1;const O=M(m,u.slice(0,g).join(`
4
+ `).length+U(p,o));B.test(O)||/<FieldGlyph\b/.test(O)||e.some(t=>t.test(O))||h.push(`${i.path}:${g+1} ${w.slice(0,80)}`)})}return{bare:h,total:d}}function K(s){const o={};for(const e of s){const b=e.text.split(`
5
5
  `);b.forEach((c,h)=>{if(!/className="sf-field"/.test(c))return;const d=b.slice(h,h+9).join(`
6
- `);if(!_.test(d))return;const i=d.match(/sf-field-label[^>]*>([^<{][^<]*)</),u=d.match(/sf-field-label[^>]*>\{([^}]*)\}/),m=d.match(/<Label>([^<{][^<]*)</),p=d.match(/<Label>\{([^}]*)\}/),g=$=>$.trim()==="label"?"{label}":"{...}",w=i?i[1].trim():u?g(u[1]):m?m[1].trim():p?g(p[1]):"{...}";(o[e.path]??=[]).push(w)})}return o}function K(n){const o=[];let e=0;for(const b of n){const c=b.text.split(`
6
+ `);if(!z.test(d))return;const i=d.match(/sf-field-label[^>]*>([^<{][^<]*)</),u=d.match(/sf-field-label[^>]*>\{([^}]*)\}/),m=d.match(/<Label>([^<{][^<]*)</),p=d.match(/<Label>\{([^}]*)\}/),g=$=>$.trim()==="label"?"{label}":"{...}",w=i?i[1].trim():u?g(u[1]):m?m[1].trim():p?g(p[1]):"{...}";(o[e.path]??=[]).push(w)})}return o}function Z(s){const o=[];let e=0;for(const b of s){const c=b.text.split(`
7
7
  `);c.forEach((h,d)=>{if(!/<SettingsField\b/.test(h))return;const i=[];let u=!1;for(let p=d;p<Math.min(d+40,c.length)&&!u;p+=1){let g=c[p];if(g=g.replace(/\/\*[\s\S]*?\*\//g," "),/\/\*/.test(g)&&(g=g.slice(0,g.indexOf("/*"))),/^\s*\*/.test(c[p]))continue;const w=g.indexOf("//");w!==-1&&(g=g.slice(0,w)),i.push(g),g.includes(">")&&(u=!0)}const m=i.join(`
8
- `);/\blabel=/.test(m)&&(e+=1,!/\bicon=/.test(m)&&o.push(`${b.path}:${d+1} ${h.trim().slice(0,80)}`))})}return{seen:e,bare:o}}function Q(n,o){const{check:e,report:b}=W("panel rows use the shared row"),c=o.exceptions??[],{floors:h}=o;{const t={path:"fixture.tsx",text:['import { slider, textList } from "@/lib/puck/controls";','const a = { textList: () => controls.textList("Items", <ListIcon />, x) };','const b = slider("Thickness", 0, 10);','const c = slider("Gap", <GapIcon />, 0, 10);','// slider("In a comment", 0, 10) is not a row'].join(`
9
- `)},s=F([t],"textList",[]),a=F([t],"slider",[]);e("the reader reads a namespaced call's own arguments, not the arrow's",s.total===1&&s.bare.length===0,JSON.stringify(s)),e("the reader flags a bare row whose neighbour has a glyph, and skips a comment",a.total===2&&a.bare.length===1&&a.bare[0].startsWith("fixture.tsx:3"),JSON.stringify(a));const f={path:"wrapped.tsx",text:['const a = { shape: withShowWhen(segmented("Shape", <SquareIcon />, opts), rule) };','const b = { size: withShowWhen(segmented("Size", opts), rule) };'].join(`
10
- `)},r=F([f],"segmented",[]);e("the reader reads a wrapped call's own arguments: the glyphed row passes, the bare one is caught",r.total===2&&r.bare.length===1&&r.bare[0].startsWith("wrapped.tsx:2"),JSON.stringify(r))}const i=new Map(n.map(t=>[t.path,t])).get(k);e(o.writesBuilders?`read ${k}, where the builders are declared`:`${k} is not among this repository's files (it calls the builders, it does not declare them)`,!!i===o.writesBuilders);const u=T(n),m=o.holdsRegistry!==!1;e(m?`read this repository's share of the block registry (${u.length} files)`:`this repository holds no block registry, as it says (${u.length} registry files handed in)`,m?u.length>0:u.length===0);const p=n.filter(t=>/^components\/[^/]+\.tsx$/.test(t.path)),g=n.filter(t=>/^scripts\/[^/]+\.tsx$/.test(t.path)),w=[...u,...i?[i]:[],...p],$=t=>t.path===k;{const t=w.filter(r=>$(r)||v(r.text,"toggle")),s=t.filter(r=>$(r)||R(r.path));e("only the known files use the toggle builder",t.length===s.length&&(!o.writesBuilders||s.some($))&&(!m||s.some(r=>R(r.path))),t.map(r=>r.path).join(" · "));const a=[];let f=0;for(const r of s)r.text.split(`
11
- `).forEach((x,l)=>{const y=x.trim();G(y)||/classList\.toggle/.test(x)||/^export function toggle\(/.test(y)||/(^|[^.\w])toggle\(/.test(x)&&(f+=1,!(C.test(x)||/<FieldGlyph\b/.test(x))&&a.push(`${r.path}:${l+1} ${y.slice(0,80)}`))});e("every toggle() row carries a glyph",a.length===0,`
8
+ `);/\blabel=/.test(m)&&(e+=1,!/\bicon=/.test(m)&&o.push(`${b.path}:${d+1} ${h.trim().slice(0,80)}`))})}return{seen:e,bare:o}}function X(s,o){const{check:e,report:b}=T("panel rows use the shared row"),c=o.exceptions??[],{floors:h}=o;{const t={path:"fixture.tsx",text:['import { slider, textList } from "@/lib/document/controls";','const a = { textList: () => controls.textList("Items", <ListIcon />, x) };','const b = slider("Thickness", 0, 10);','const c = slider("Gap", <GapIcon />, 0, 10);','// slider("In a comment", 0, 10) is not a row'].join(`
9
+ `)},n=k([t],"textList",[]),a=k([t],"slider",[]);e("the reader reads a namespaced call's own arguments, not the arrow's",n.total===1&&n.bare.length===0,JSON.stringify(n)),e("the reader flags a bare row whose neighbour has a glyph, and skips a comment",a.total===2&&a.bare.length===1&&a.bare[0].startsWith("fixture.tsx:3"),JSON.stringify(a));const f={path:"wrapped.tsx",text:['const a = { shape: withShowWhen(segmented("Shape", <SquareIcon />, opts), rule) };','const b = { size: withShowWhen(segmented("Size", opts), rule) };'].join(`
10
+ `)},r=k([f],"segmented",[]);e("the reader reads a wrapped call's own arguments: the glyphed row passes, the bare one is caught",r.total===2&&r.bare.length===1&&r.bare[0].startsWith("wrapped.tsx:2"),JSON.stringify(r))}const d=new Map(s.map(t=>[t.path,t])),i=s.find(t=>G(t.path,"controls.tsx"));e(o.writesBuilders?`read ${R}, where the builders are declared`:`${R} is not among this repository's files (it calls the builders, it does not declare them)`,!!i===o.writesBuilders);const u=_(s),m=o.holdsRegistry!==!1;e(m?`read this repository's share of the block registry (${u.length} files)`:`this repository holds no block registry, as it says (${u.length} registry files handed in)`,m?u.length>0:u.length===0);const p=s.filter(t=>/^components\/[^/]+\.tsx$/.test(t.path)),g=s.filter(t=>/^scripts\/[^/]+\.tsx$/.test(t.path)),w=[...u,...i?[i]:[],...p],$=t=>G(t.path,"controls.tsx");{const t=w.filter(r=>$(r)||P(r.text,"toggle")),n=t.filter(r=>$(r)||F(r.path));e("only the known files use the toggle builder",t.length===n.length&&(!o.writesBuilders||n.some($))&&(!m||n.some(r=>F(r.path))),t.map(r=>r.path).join(" · "));const a=[];let f=0;for(const r of n)r.text.split(`
11
+ `).forEach((x,l)=>{const y=x.trim();v(y)||/classList\.toggle/.test(x)||/^export function toggle\(/.test(y)||/(^|[^.\w])toggle\(/.test(x)&&(f+=1,!(B.test(x)||/<FieldGlyph\b/.test(x))&&a.push(`${r.path}:${l+1} ${y.slice(0,80)}`))});e("every toggle() row carries a glyph",a.length===0,`
12
12
  ${a.join(`
13
- `)}`),e(`…and there are rows to check (${f} toggle() call sites, at least ${h.toggle})`,f>=h.toggle,"the scan is reading nothing")}const O=[{builder:"textList",inControls:!1,accept:[/TICKER_ITEMS_ROW\.icon/],name:"every textList() row carries a glyph"},{builder:"segmented",inControls:!0,accept:[/\bnoGlyph\(/],name:"every segmented() row carries a glyph (or a ruled noGlyph)"},{builder:"select",inControls:!0,accept:[/\btextKindGlyph\(/,/\bnoGlyph\(/],name:"every select() row carries a glyph (or a ruled noGlyph)"},{builder:"slider",inControls:!0,accept:[/\bnoGlyph\(/],name:"every slider() row carries a glyph"}];for(const t of O){const s=[...u,...t.inControls&&i?[i]:[],...g].filter(r=>t.inControls&&$(r)||R(r.path)||v(r.text,t.builder)),{bare:a,total:f}=F(s,t.builder,t.accept);e(t.name,a.length===0,`
13
+ `)}`),e(`…and there are rows to check (${f} toggle() call sites, at least ${h.toggle})`,f>=h.toggle,"the scan is reading nothing")}const O=[{builder:"textList",inControls:!1,accept:[/TICKER_ITEMS_ROW\.icon/],name:"every textList() row carries a glyph"},{builder:"segmented",inControls:!0,accept:[/\bnoGlyph\(/],name:"every segmented() row carries a glyph (or a ruled noGlyph)"},{builder:"select",inControls:!0,accept:[/\btextKindGlyph\(/,/\bnoGlyph\(/],name:"every select() row carries a glyph (or a ruled noGlyph)"},{builder:"slider",inControls:!0,accept:[/\bnoGlyph\(/],name:"every slider() row carries a glyph"}];for(const t of O){const n=[...u,...t.inControls&&i?[i]:[],...g].filter(r=>t.inControls&&$(r)||F(r.path)||P(r.text,t.builder)),{bare:a,total:f}=k(n,t.builder,t.accept);e(t.name,a.length===0,`
14
14
  ${a.join(`
15
- `)}`),e(`…and the ${t.builder} scan actually read rows (${f} call sites in ${s.length} files, at least ${h[t.builder]})`,f>=h[t.builder])}{const t=J(w);for(const l of c)e(`the exception still names a real row — ${l.label}`,(t[l.file]??[]).includes(l.label),`${l.file} no longer draws it`);const s={};for(const[l,y]of Object.entries(t)){const S=y.filter(L=>!c.some(j=>j.file===l&&j.label===L));S.length&&(s[l]=S)}const a=l=>l.slice().sort(),f=[];for(const[l,y]of Object.entries(s)){const S=I[l];if(!S){f.push(`${l} — hand-rolls ${y.length} row(s) and is not in PENDING`);continue}const L=a(y),j=a(S);(L.length!==j.length||L.some((D,P)=>D!==j[P]))&&f.push(`${l} — found [${L.join(" · ")}] but PENDING says [${j.join(" · ")}]`)}e("no NEW hand-rolled settings row",f.length===0,`
15
+ `)}`),e(`…and the ${t.builder} scan actually read rows (${f} call sites in ${n.length} files, at least ${h[t.builder]})`,f>=h[t.builder])}{const t=K(w);for(const l of c)e(`the exception still names a real row — ${l.label}`,(t[l.file]??[]).includes(l.label),`${l.file} no longer draws it`);const n={};for(const[l,y]of Object.entries(t)){const S=y.filter(L=>!c.some(j=>j.file===l&&j.label===L));S.length&&(n[l]=S)}const a=l=>l.slice().sort(),f=[];for(const[l,y]of Object.entries(n)){const S=I[l];if(!S){f.push(`${l} — hand-rolls ${y.length} row(s) and is not in PENDING`);continue}const L=a(y),j=a(S);(L.length!==j.length||L.some((W,A)=>W!==j[A]))&&f.push(`${l} — found [${L.join(" · ")}] but PENDING says [${j.join(" · ")}]`)}e("no NEW hand-rolled settings row",f.length===0,`
16
16
  ${f.join(`
17
- `)}`);const r=Object.keys(I).filter(l=>!s[l]);e("no PENDING entry has outlived its subject",r.length===0,r.join(" · "));const x=Object.values(s).reduce((l,y)=>l+y.length,0);e("the hand-rolled rows are GONE — the count is zero",x===0,`${x}`),e("…and no file is left hand-rolling one",Object.keys(I).length===0,Object.keys(I).join(" · ")),e(`…and the rulings are exactly ${o.rulings} (a new one is argued in review, not added)`,c.length===o.rulings&&c.every(l=>l.why.trim().length>40),`${c.length}`),e("…and BlogSource is not among them, because its row is gone",!c.some(l=>l.file.endsWith("BlogSource.tsx")))}{const t=Object.values(N).reduce((s,a)=>s+a,0);if(e("every builder is finished — nothing left to count",t===0,`${t}`),e("…and the emptiness is because FOUR builders are done, not because the list was cleared",E.length===8&&["textList","segmented","select","slider"].every(s=>E.includes(s)),E.join(" · ")),e("…and a finished builder has left the list",E.every(s=>!(s in N)),E.join(" · ")),i){const s=Object.keys(N).filter(a=>!new RegExp(`(export )?function ${a}\\(`).test(i.text));e(`…and every builder it names is really declared in ${k}`,s.length===0,s.join(" · "))}}if(i){const t=i.text,s=t.indexOf("export function backgroundField("),a=s===-1?"":t.slice(s),f=a.slice(0,a.indexOf(`
17
+ `)}`);const r=Object.keys(I).filter(l=>!n[l]);e("no PENDING entry has outlived its subject",r.length===0,r.join(" · "));const x=Object.values(n).reduce((l,y)=>l+y.length,0);e("the hand-rolled rows are GONE — the count is zero",x===0,`${x}`),e("…and no file is left hand-rolling one",Object.keys(I).length===0,Object.keys(I).join(" · ")),e(`…and the rulings are exactly ${o.rulings} (a new one is argued in review, not added)`,c.length===o.rulings&&c.every(l=>l.why.trim().length>40),`${c.length}`),e("…and BlogSource is not among them, because its row is gone",!c.some(l=>l.file.endsWith("BlogSource.tsx")))}{const t=Object.values(N).reduce((n,a)=>n+a,0);if(e("every builder is finished — nothing left to count",t===0,`${t}`),e("…and the emptiness is because FOUR builders are done, not because the list was cleared",E.length===8&&["textList","segmented","select","slider"].every(n=>E.includes(n)),E.join(" · ")),e("…and a finished builder has left the list",E.every(n=>!(n in N)),E.join(" · ")),i){const n=Object.keys(N).filter(a=>!new RegExp(`(export )?function ${a}\\(`).test(i.text));e(`…and every builder it names is really declared in ${R}`,n.length===0,n.join(" · "))}}if(i){const t=i.text,n=t.indexOf("export function backgroundField("),a=n===-1?"":t.slice(n),f=a.slice(0,a.indexOf(`
18
18
  }
19
- `));e("backgroundField is declared",s!==-1),e("backgroundField renders SettingsField",/<SettingsField/.test(f)),e("…and hand-rolls no row of its own",f.length>0&&!/className="sf-field"/.test(f)),e("…and passes `BackgroundIcon`, not merely some glyph",/icon=\{<BackgroundIcon \/>\}/.test(f));const r=t.indexOf("export function cardImageBackgroundField("),x=r===-1?"":t.slice(r);e("…and cardImageBackgroundField still passes `GroundIcon`",/icon=\{<GroundIcon \/>\}/.test(x.slice(0,x.indexOf(`
19
+ `));e("backgroundField is declared",n!==-1),e("backgroundField renders SettingsField",/<SettingsField/.test(f)),e("…and hand-rolls no row of its own",f.length>0&&!/className="sf-field"/.test(f)),e("…and passes `BackgroundIcon`, not merely some glyph",/icon=\{<BackgroundIcon \/>\}/.test(f));const r=t.indexOf("export function cardImageBackgroundField("),x=r===-1?"":t.slice(r);e("…and cardImageBackgroundField still passes `GroundIcon`",/icon=\{<GroundIcon \/>\}/.test(x.slice(0,x.indexOf(`
20
20
  }
21
- `))))}{const{seen:t,bare:s}=K(p);e(`the hand-rolled row scan read something (${t} hand-drawn SettingsField rows across ${p.length} files, at least ${h.handDrawn})`,t>=h.handDrawn),e("no hand-rolled SettingsField row goes without a glyph",s.length===0,`
22
- ${s.join(`
23
- `)}`)}return b()}export{k as CONTROLS_FILE,M as callParen,Q as panelRowsUseTheSharedRow,z as secondArg};
21
+ `))))}{const{seen:t,bare:n}=Z(p);e(`the hand-rolled row scan read something (${t} hand-drawn SettingsField rows across ${p.length} files, at least ${h.handDrawn})`,t>=h.handDrawn),e("no hand-rolled SettingsField row goes without a glyph",n.length===0,`
22
+ ${n.join(`
23
+ `)}`)}return b()}export{R as CONTROLS_FILE,U as callParen,X as panelRowsUseTheSharedRow,M as secondArg};
@@ -1,16 +1,2 @@
1
- import { type RuleReport, type SourceFile } from "./rule.js";
2
- export type PuckDocumentMount = {
3
- readonly migratedBy: string | null;
4
- readonly why: string;
5
- };
6
- export type PuckDocumentSurfacesOptions = {
7
- readonly mounts: Readonly<Record<string, PuckDocumentMount>>;
8
- readonly migrator?: string;
9
- readonly handedMigrator?: {
10
- readonly rules: string;
11
- readonly entry: string;
12
- };
13
- readonly storedFloor: number;
14
- readonly minFiles: number;
15
- };
16
- export declare function puckDocumentSurfaces(files: readonly SourceFile[], options: PuckDocumentSurfacesOptions): RuleReport;
1
+ export { documentSurfaces as puckDocumentSurfaces, type DocumentMount as PuckDocumentMount, type DocumentSurfacesOptions as PuckDocumentSurfacesOptions, } from "./document-surfaces.js";
2
+ export * from "./document-surfaces.js";
@@ -1,8 +1 @@
1
- import{ruleChecks as R}from"./rule.js";import{builderModuleSpec as S}from"./support/ts-source.js";const o=/<(Render|Puck|SiteEditorProvider|EditorStoreProvider|ScreenStoreProvider)\b[^<>]*\bdata=\{/,m=/migrateRenamedProps\s*\(/,p=/export function migrateRenamedProps\b/;function v(l,r){const{check:t,report:g}=R("puck document surfaces"),a=e=>l.find(s=>s.path===e)?.text;{const e=n=>`<${n}`;t("a mount is found",o.test(`${e("Render")} config={c} data={doc} />`)),t("…across lines",o.test(`${e("SiteEditorProvider")}
2
- config={c}
3
- data={initial}
4
- >`)),t("…and the screen's store provider is one under either of its names",["Editor","Screen"].every(n=>o.test(`${e(`${n}StoreProvider`)} config={c} data={doc}>`))),t("…and a tag named in prose is not one",!o.test(`the ${e("Puck")}> mounts, then its data={x} is read`)),t("…nor the composition API",!o.test(`${e("Puck.Preview")} />`));const s="migrateRenamedProps";t("a call is found",m.test(`const d = ${s}(stored);`)),t("…and a mention is not one",!m.test(`// runs ${s} first`)),t("the declaration is found, generic as it is",p.test(`export function ${s}<T>(data: T): T {`))}const d=l.filter(e=>/\.tsx?$/.test(e.path));t(`the source scan reached the app (${d.length} TS/TSX files, at least ${r.minFiles})`,d.length>=r.minFiles);const c=d.filter(e=>o.test(e.text)).map(e=>e.path).sort(),$=Object.keys(r.mounts).sort(),u=c.filter(e=>!(e in r.mounts)),f=$.filter(e=>!c.includes(e));t(`every mount is declared (${c.length} found) — a NEW one must say whether its document comes from stored props (migrate it) or is a mock (say so)`,u.length===0,u.map(e=>`UNDECLARED: ${e}`).join(`
5
- `)),t("every declared mount is a real mount — a stale row would shelter a surface that later stops migrating",f.length===0,f.map(e=>`NOT FOUND: ${e}`).join(`
6
- `));const i=Object.entries(r.mounts).filter(([,e])=>e.migratedBy!==null),h=i.filter(([,e])=>!m.test(a(e.migratedBy)??""));if(t(`SURFACES=${i.length} — every mount fed from STORED props runs migrateRenamedProps, so a renamed prop key cannot silently reset a live section`,h.length===0,h.map(([e,s])=>`${e}
7
- → ${s.migratedBy} never calls migrateRenamedProps(`).join(`
8
- `)),r.handedMigrator){const{rules:e,entry:s}=r.handedMigrator,n=a(e)??"";t(`${e} carries the REAL migrateRenamedProps, not a stand-in`,new RegExp(`import \\{ migrateRenamedProps \\} from "${S("lib/puck/renamed-props")}";`).test(n)&&/^\s*migrateRenamedProps,$/m.test(n)),t(`…${s} passes those rules to the screen's mount`,/<(?:EditorScreenMount|ScreenMount)\b[^>]*addressing=\{WEBSITE_ADDRESSING\}/.test(a(s)??""))}return t(`at least ${r.storedFloor} mount(s) fed from stored props (found ${i.length})`,i.length>=r.storedFloor,"if this drops, a surface was reclassified as a mock rather than fixed"),r.migrator&&t(`${r.migrator} still exports migrateRenamedProps — the function §2 hunts calls of is live`,p.test(a(r.migrator)??"")),g()}export{v as puckDocumentSurfaces};
1
+ import{documentSurfaces as r}from"./document-surfaces.js";export*from"./document-surfaces.js";export{r as puckDocumentSurfaces};
@@ -0,0 +1,4 @@
1
+ export declare const DOCUMENT_FOLDERS: readonly ["lib/document", "lib/puck"];
2
+ export declare const documentPaths: (rel: string) => string[];
3
+ export declare const isDocumentPath: (path: string, rel: string) => boolean;
4
+ export declare const DOCUMENT_FOLDER_SOURCE = "lib\\/(?:document|puck)";
@@ -0,0 +1 @@
1
+ const c=["lib/document","lib/puck"],e=t=>c.map(o=>`${o}/${t}`),n=(t,o)=>e(o).includes(t),p="lib\\/(?:document|puck)";export{c as DOCUMENT_FOLDERS,p as DOCUMENT_FOLDER_SOURCE,e as documentPaths,n as isDocumentPath};
@@ -1,8 +1,9 @@
1
1
  import type * as TS from "typescript";
2
2
  import type { SourceFile } from "../rule.js";
3
- export declare const CONFIG_FILE = "lib/puck/config.tsx";
4
- export declare const REGISTRY_DIRS: readonly ["lib/puck/blocks", "lib/puck/passes"];
5
- export declare const REGISTRY_MODULES: readonly ["lib/puck/page-frame.tsx", "lib/puck/page-root.tsx", "lib/puck/page-root-fields.tsx", "lib/puck/registry.ts", "lib/puck/render-registry.ts"];
3
+ export declare const CONFIG_FILES: string[];
4
+ export declare const CONFIG_FILE: string;
5
+ export declare const REGISTRY_DIRS: string[];
6
+ export declare const REGISTRY_MODULES: string[];
6
7
  export declare function isRegistryPath(p: string): boolean;
7
8
  export declare function registryFiles(files: readonly SourceFile[]): SourceFile[];
8
9
  export declare function registryText(files: readonly SourceFile[]): string;
@@ -1,3 +1,3 @@
1
- const o="lib/puck/config.tsx",x=["lib/puck/blocks","lib/puck/passes"],g=["lib/puck/page-frame.tsx","lib/puck/page-root.tsx","lib/puck/page-root-fields.tsx","lib/puck/registry.ts","lib/puck/render-registry.ts"],d=t=>/\.tsx?$/.test(t)&&!t.endsWith(".d.ts");function m(t){return t===o||g.includes(t)?!0:d(t)&&x.some(e=>t.startsWith(`${e}/`))}function k(t){const e=new Map(t.map(n=>[n.path,n])),r=[o,...g].map(n=>e.get(n)).filter(n=>!!n),i=x.flatMap(n=>t.filter(s=>d(s.path)&&s.path.startsWith(`${n}/`)).sort((s,c)=>s.path<c.path?-1:1));return[...r,...i]}function y(t){return k(t).map(e=>e.text).join(`
2
- `)}function h(t,e){const r=t.find(i=>new RegExp(`^lib/puck/blocks/[^/]+/${e}/render\\.tsx$`).test(i.path));return r?r.path.slice(0,-11):null}function E(t){return t.map(e=>/^lib\/puck\/blocks\/[^/]+\/([^/]+)\/render\.tsx$/.exec(e.path)?.[1]).filter(e=>!!e).sort()}function b(t,e){const r=h(t,e);return r?[`${r}/render.tsx`,`${r}/fields.tsx`].filter(i=>t.some(n=>n.path===i)):t.some(i=>i.path===o)?[o]:[]}function a(t,e){const r=e.find(l=>l.path===o);if(!r)return null;const i=r.text,n=t.createSourceFile(o,i,t.ScriptTarget.Latest,!0,t.ScriptKind.TSX),s={keys:[],literals:new Map,registeredAs:new Map};let c=!1;const f=l=>{if(!c){if(t.isPropertyAssignment(l)&&l.name.getText(n)==="components"&&t.isObjectLiteralExpression(l.initializer)){c=!0;for(const p of l.initializer.properties){if(!t.isPropertyAssignment(p))continue;const u=p.name.getText(n);s.keys.push(u),t.isObjectLiteralExpression(p.initializer)?s.literals.set(u,i.slice(p.getFullStart(),p.end)):s.registeredAs.set(u,p.initializer.getText(n))}return}t.forEachChild(l,f)}};if(f(n),!c)throw new Error(`registry-source: no \`components\` object in ${o}`);return s}function S(t,e){return[...a(t,e)?.keys??[]]}function $(t,e){return[...a(t,e)?.literals.keys()??[]]}function T(t,e,r){return a(t,e)?.registeredAs.get(r)}function w(t,e,r){if(h(e,r))return b(e,r).map(s=>e.find(c=>c.path===s).text).join(`
3
- `);const n=a(t,e)?.literals.get(r);if(n===void 0)throw new Error(`registry-source: no block "${r}" among the files handed in — no folder under lib/puck/blocks/ and no literal in ${o}'s \`components\``);return n}export{o as CONFIG_FILE,x as REGISTRY_DIRS,g as REGISTRY_MODULES,b as blockFiles,w as blockSource,$ as blocksWrittenInConfig,m as isRegistryPath,T as registeredAs,S as registeredBlockKeys,k as registryFiles,y as registryText,E as splitBlockTypes};
1
+ import{DOCUMENT_FOLDER_SOURCE as d,documentPaths as p}from"./document-folder.js";const l=p("config.tsx"),g=l[0],h=[...p("blocks"),...p("passes")],m=["page-frame.tsx","page-root.tsx","page-root-fields.tsx","registry.ts","render-registry.ts"].flatMap(p),k=t=>/\.tsx?$/.test(t)&&!t.endsWith(".d.ts");function $(t){return l.includes(t)||m.includes(t)?!0:k(t)&&h.some(e=>t.startsWith(`${e}/`))}function y(t){const e=new Map(t.map(n=>[n.path,n])),r=[...l,...m].map(n=>e.get(n)).filter(n=>!!n),i=h.flatMap(n=>t.filter(s=>k(s.path)&&s.path.startsWith(`${n}/`)).sort((s,o)=>s.path<o.path?-1:1));return[...r,...i]}function R(t){return y(t).map(e=>e.text).join(`
2
+ `)}function E(t,e){const r=t.find(i=>new RegExp(`^${d}/blocks/[^/]+/${e}/render\\.tsx$`).test(i.path));return r?r.path.slice(0,-11):null}function T(t){return t.map(e=>new RegExp(`^${d}/blocks/[^/]+/([^/]+)/render\\.tsx$`).exec(e.path)?.[1]).filter(e=>!!e).sort()}function b(t,e){const r=E(t,e);return r?[`${r}/render.tsx`,`${r}/fields.tsx`].filter(i=>t.some(n=>n.path===i)):t.filter(i=>l.includes(i.path)).map(i=>i.path).slice(0,1)}function u(t,e){const r=e.find(c=>l.includes(c.path));if(!r)return null;const i=r.text,n=t.createSourceFile(r.path,i,t.ScriptTarget.Latest,!0,t.ScriptKind.TSX),s={keys:[],literals:new Map,registeredAs:new Map};let o=!1;const x=c=>{if(!o){if(t.isPropertyAssignment(c)&&c.name.getText(n)==="components"&&t.isObjectLiteralExpression(c.initializer)){o=!0;for(const a of c.initializer.properties){if(!t.isPropertyAssignment(a))continue;const f=a.name.getText(n);s.keys.push(f),t.isObjectLiteralExpression(a.initializer)?s.literals.set(f,i.slice(a.getFullStart(),a.end)):s.registeredAs.set(f,a.initializer.getText(n))}return}t.forEachChild(c,x)}};if(x(n),!o)throw new Error(`registry-source: no \`components\` object in ${g}`);return s}function w(t,e){return[...u(t,e)?.keys??[]]}function F(t,e){return[...u(t,e)?.literals.keys()??[]]}function I(t,e,r){return u(t,e)?.registeredAs.get(r)}function O(t,e,r){if(E(e,r))return b(e,r).map(s=>e.find(o=>o.path===s).text).join(`
3
+ `);const n=u(t,e)?.literals.get(r);if(n===void 0)throw new Error(`registry-source: no block "${r}" among the files handed in — no folder under lib/document/blocks/ and no literal in ${g}'s \`components\``);return n}export{g as CONFIG_FILE,l as CONFIG_FILES,h as REGISTRY_DIRS,m as REGISTRY_MODULES,b as blockFiles,O as blockSource,F as blocksWrittenInConfig,$ as isRegistryPath,I as registeredAs,w as registeredBlockKeys,y as registryFiles,R as registryText,T as splitBlockTypes};
@@ -73,17 +73,14 @@ export declare function themeSurfaceStyle(v?: ThemeValue | null): Record<string,
73
73
  export declare const TYPE_GROUPS: readonly ["heading", "body", "label"];
74
74
  export type TypeGroup = (typeof TYPE_GROUPS)[number];
75
75
  export declare const TYPE_GROUP_LABELS: Record<TypeGroup, string>;
76
- export declare const NEUTRAL_TYPE_GROUP: TypeGroup;
77
76
  export declare function typeScaleGroupOfClassName(className: string | null | undefined): TypeGroup | null;
78
77
  export declare const SIZE_STEPS: readonly ["headingLarge", "headingMedium", "headingSmall", "accent", "body", "label"];
79
78
  export type SizeStep = (typeof SIZE_STEPS)[number];
80
79
  export declare const SCALE_OF_STEP: Record<SizeStep, TypeGroup>;
81
- export declare const SIZE_STEP_LABELS: Record<SizeStep, string>;
82
80
  export type SizesValue = Record<SizeStep, number | null>;
83
81
  export declare const DEFAULT_SIZES: SizesValue;
84
82
  export declare const TEXT_SIZE_MIN = 8;
85
83
  export declare const TEXT_SIZE_MAX = 200;
86
- export declare const TEXT_SIZE_STEP = 1;
87
84
  export declare function normalizeSize(v?: number | null): number | null;
88
85
  export declare function normalizeSizes(v?: Partial<SizesValue> | null): SizesValue;
89
86
  export declare function typeSizesStyle(v?: Partial<SizesValue> | null): Record<string, string>;
@@ -1,4 +1,4 @@
1
- const L="storefront-theme",pe="sf:theme-mode",xe="sf:theme-switch",_e="hide",Ee="light",Se=!1,Ae=7,Te=18;function k(e){return e>=7&&e<18}function be(e){const{mode:t,override:n,switchShown:r,hour:o}=e;return r&&(n==="light"||n==="dark")?n:t==="auto"?k(o)?"light":"dark":t==="light"?"light":"dark"}function Re(e){const{mode:t,switchShown:n}=e;return`
1
+ const L="storefront-theme",pe="sf:theme-mode",xe="sf:theme-switch",_e="hide",Ee="light",Se=!1,Ae=7,Te=18;function k(e){return e>=7&&e<18}function be(e){const{mode:t,override:n,switchShown:r,hour:o}=e;return r&&(n==="light"||n==="dark")?n:t==="auto"?k(o)?"light":"dark":t==="light"?"light":"dark"}function Ce(e){const{mode:t,switchShown:n}=e;return`
2
2
  try {
3
3
  var mode = ${JSON.stringify(t)};
4
4
  var shown = ${n?"true":"false"};
@@ -15,4 +15,4 @@ const L="storefront-theme",pe="sf:theme-mode",xe="sf:theme-switch",_e="hide",Ee=
15
15
  if (theme === 'light') document.documentElement.setAttribute('data-theme', 'light');
16
16
  else document.documentElement.removeAttribute('data-theme');
17
17
  } catch (e) {}
18
- `}const a={background:"#0a0a0a",surface:"#131313",line:"#2a2a2a",muted:"#9a9388"},P=[{text:"#2e2e2e",accent:"#2e2e2e",background:"#ffffff",surface:"#f7f7f7",line:"#e0e0e0",muted:"#5c5c5c"},{text:"#f7f7f7",accent:"#f7f7f7",background:"#0a0a0a",surface:"#1b1b1b",line:"#363636",muted:"#a3a3a3"},{text:"#ffffff",accent:"#ffffff",background:"#2e2e2e",surface:"#3d3d3d",line:"#545454",muted:"#b0b0b0"},{text:"#0a0a0a",accent:"#0a0a0a",background:"#f7f7f7",surface:"#ffffff",line:"#d9d9d9",muted:"#5c5c5c"}],$={selected:0,themes:P};function A(e){return!e||!Array.isArray(e.themes)||e.themes.length===0?{...$}:{selected:Math.min(Math.max(0,e.selected??0),e.themes.length-1),themes:e.themes}}function f(e,t,n){const r=u(e),o=u(t);if(r===null||o===null)return e;const i=c=>Math.max(0,Math.min(255,Math.round(c))).toString(16).padStart(2,"0");return`#${r.map((c,O)=>i(c+(o[O]-c)*n)).join("")}`}const F={light:"#ffffff",dark:"#0a0a0a"},Ce=["light","dark"];function we(e,t){const n=F[t],r=t==="light"?"#ffffff":"#000000";return{text:n,accent:n,background:e,surface:f(e,r,.1),line:f(e,r,.22),muted:f(n,e,.35),brandInk:t}}function s(e){const t=A(e);return t.themes[t.selected]}function d(e){return{text:e.text,accent:e.accent,background:e.background||a.background,surface:e.surface||a.surface,line:e.line||a.line,muted:e.muted||a.muted}}function De(e){return{fill:d(e).background,accent:e.accent}}function u(e){const t=/^#([0-9a-f]{3}|[0-9a-f]{6})$/i.exec(e.trim());if(!t)return null;const n=t[1].length===3?[...t[1]].map(c=>c+c).join(""):t[1],[r,o,i]=[0,2,4].map(c=>parseInt(n.slice(c,c+2),16));return[r,o,i]}function g(e){const t=u(e);if(t===null)return null;const[n,r,o]=t.map(i=>{const c=i/255;return c<=.04045?c/12.92:((c+.055)/1.055)**2.4});return .2126*n+.7152*r+.0722*o}const U=.4,G=4.5,Y=3;function z(e,t){const n=g(e),r=g(t);if(n===null||r===null)return null;const[o,i]=n>=r?[n,r]:[r,n];return(o+.05)/(i+.05)}const He={good:"Good","large-only":"Large text only",hard:"Hard to read"};function Ie(e){return e>=G?"good":e>=Y?"large-only":"hard"}const m=["#000000","#ffffff"];function l(e){let t=m[0],n=-1;for(const r of m){const o=z(e,r);if(o===null)return m[0];o>n&&(n=o,t=r)}return t}const B=[.25,.4,.55];function Me(e){const t=u(e);return t===null?[]:B.map(n=>"#"+t.map(r=>Math.round(r*(1-n)).toString(16).padStart(2,"0")).join(""))}function ye(e){const t=s(e),n={"--theme-fg":t.text},r=g(t.text);return(r===null||r>=U)&&(n["--overlay-fg"]=t.text),n}const X=82;function p(e){return`color-mix(in srgb, ${e} ${X}%, #000)`}function Ne(e){const t=s(e);return{"--theme-accent":t.accent,"--theme-accent-2":p(t.accent),"--theme-accent-ink":l(t.accent)}}function x(e){const t=e?.button;return/^#[0-9a-fA-F]{6}$/.test(t??"")?t.toLowerCase():null}function Oe(e){const t=s(e),n=x(t),r=T(t);if(n===null&&r===null)return{};const o={};return n!==null&&(o["--theme-btn"]=n,o["--theme-btn-2"]=p(n)),o["--theme-btn-ink"]=r??l(n),o}function T(e){const t=e?.buttonInk;return/^#[0-9a-fA-F]{6}$/.test(t??"")?t.toLowerCase():null}function W(e,t){return T(e)??l(x(e)??t)}function Le(e){const t=s(e);return{fill:x(t)??t.accent.toLowerCase(),ink:W(t,t.accent)}}function ke(e){const t={};return A(e).themes.forEach((n,r)=>{const o=d(n);t[`--theme-preset-${r}-accent`]=o.accent,t[`--theme-preset-${r}-accent-2`]=p(o.accent),t[`--theme-preset-${r}-accent-ink`]=l(o.accent),t[`--theme-preset-${r}-bg`]=o.background,t[`--theme-preset-${r}-fg`]=o.text,t[`--theme-preset-${r}-surface`]=o.surface,t[`--theme-preset-${r}-surface-2`]=`color-mix(in srgb, ${o.surface} 60%, ${o.line})`,t[`--theme-preset-${r}-line`]=o.line,t[`--theme-preset-${r}-muted`]=o.muted}),t}const Pe=["--theme-bg","--theme-surface","--theme-surface-2","--theme-line","--theme-muted"];function $e(e){const t=d(s(e)),n=`color-mix(in srgb, ${t.surface} 60%, ${t.line})`,r={"--theme-bg":t.background,"--theme-surface":t.surface,"--theme-line":t.line,"--theme-muted":t.muted};return(t.surface!==a.surface||t.line!==a.line)&&(r["--theme-surface-2"]=n),r}const K=["heading","body","label"],Fe={heading:"Headings",body:"Body",label:"Labels"},Ue="body";function Ge(e){if(!e)return null;for(const t of K)if(e.includes(`--size-${t}`))return t;return/--size-heading(Large|Medium|Small)/.test(e)?"heading":null}const b=["headingLarge","headingMedium","headingSmall","accent","body","label"],Ye={headingLarge:"heading",headingMedium:"heading",headingSmall:"heading",accent:"heading",body:"body",label:"label"},ze={headingLarge:"Large",headingMedium:"Medium",headingSmall:"Small",accent:"Size",body:"Size",label:"Size"},Be={headingLarge:null,headingMedium:null,headingSmall:null,accent:null,body:null,label:null},V=8,Z=200,Xe=1;function j(e){if(typeof e!="number"||!Number.isFinite(e))return null;const t=Math.round(e);return t>=V&&t<=Z?t:null}function q(e){const t={};for(const n of b)t[n]=j(e?.[n]);return t}function We(e){const t=q(e),n={};for(const r of b){const o=t[r];o!==null&&(n[`--size-${r}`]=`${o}px`)}return n}const J=["square","small","large"],Q="small";function v(e){return J.includes(e??"")?e:Q}function Ke(e){return w(te[v(e)])}const R=0,ee=40,te={square:0,small:null,large:16},ne={"--sf-card-radius":1,"--sf-button-radius":.5,"--site-radius":.5,"--site-radius-xs":.25,"--site-radius-sm":.5,"--site-radius-md":.75,"--site-radius-lg":1,"--site-radius-xl":1.25,"--site-radius-2xl":1.5,"--site-radius-3xl":2,"--site-radius-4xl":2.5};function C(e){if(e==null||typeof e=="string"&&e.trim()==="")return null;const t=typeof e=="string"?Number(e):e;return Number.isFinite(t)?Math.min(ee,Math.max(R,Math.round(t))):null}function w(e){const t=C(e);return t===null?{}:Object.fromEntries(Object.entries(ne).map(([n,r])=>{const o=t*r/16;return[n,o===0?"0":`${o}rem`]}))}function Ve(e){return w(C(e)??R)}const re=["none","soft","lifted"],oe="soft",D="none",ie=["tight","normal","roomy"],ce="normal",ae="normal",se=["none","lift","highlight"],ue="lift",le="highlight",H="#141416";function I(e){return re.includes(e??"")?e:oe}function he(e){return ie.includes(e??"")?e:ce}function M(e){return se.includes(e??"")?e:ue}function fe(e){return/^#[0-9a-fA-F]{6}$/.test(e??"")?e.toLowerCase():H}function Ze(e){const t=I(e);return t===D?void 0:t}function je(e){const t=he(e);return t===ae?void 0:t}function qe(e){const t=M(e);return t===le?void 0:t}function Je(e,t,n){const r=fe(t);return r===H?{}:I(e)!==D||M(n)==="lift"?{"--sf-shadow-color":r}:{}}const de=["normal","tight","compressed"],y="normal";function N(e){return de.includes(e??"")?e:y}function Qe(e){const t=N(e);return t===y?void 0:t}function ve(e){switch(N(e)){case"tight":return{lineHeight:.95,letterSpacing:-.01};case"compressed":return{lineHeight:.86,letterSpacing:-.01};default:return{}}}const et=["authored","sentence"],tt={case:"authored",weight:null,weightStrong:null,italicStrong:null,maxPx:null,weight2:null,weight3:null,case2:"authored",case3:"authored"},_=100,E=900,ge=24,me=200;function h(e,t,n){return typeof e!="number"||!Number.isFinite(e)?null:Math.round(Math.min(Math.max(e,t),n))}function S(e){const t=h(e?.weight,_,E),n=e?.case==="sentence"?"sentence":"authored",r=i=>i==null?t:h(i,_,E),o=i=>i==="sentence"?"sentence":i==="authored"?"authored":n;return{case:n,weight:t,weightStrong:h(e?.weightStrong,_,E),italicStrong:typeof e?.italicStrong=="boolean"?e.italicStrong:null,maxPx:h(e?.maxPx,ge,me),weight2:r(e?.weight2),weight3:r(e?.weight3),case2:o(e?.case2),case3:o(e?.case3)}}function nt(e){const t=S(e),n={};return t.case==="sentence"&&(n["--sf-heading-case"]="none"),t.weight!==null&&(n["--sf-heading-weight"]=String(t.weight)),t.weightStrong!==null&&(n["--sf-heading-weight-strong"]=String(t.weightStrong)),t.maxPx!==null&&(n["--sf-heading-max"]=`${t.maxPx}px`),t.weight2!==null&&t.weight2!==t.weight&&(n["--sf-heading-2-weight"]=String(t.weight2)),t.weight3!==null&&t.weight3!==t.weight&&(n["--sf-heading-3-weight"]=String(t.weight3)),t.case2!==t.case&&(n["--sf-heading-2-case"]=t.case2==="sentence"?"none":"uppercase"),t.case3!==t.case&&(n["--sf-heading-3-case"]=t.case3==="sentence"?"none":"uppercase"),n}function rt(e){return S({case:e?.heading_case??void 0,weight:e?.heading_weight,weightStrong:e?.heading_weight_strong,italicStrong:e?.accent_italic,maxPx:e?.heading_max_px,weight2:e?.heading_2_weight??void 0,weight3:e?.heading_3_weight??void 0,case2:e?.heading_2_case??void 0,case3:e?.heading_3_case??void 0})}function ot(e){const t=S(e);return{heading_case:t.case,heading_weight:t.weight,heading_weight_strong:t.weightStrong,heading_max_px:t.maxPx,heading_2_weight:t.weight2,heading_3_weight:t.weight3,heading_2_case:t.case2,heading_3_case:t.case3}}export{B as ACCENT_DARKEN_STEPS,Ce as BRAND_INKS,ie as CARD_GAPS,re as CARD_SHADOWS,ee as CORNER_RADIUS_MAX,R as CORNER_RADIUS_MIN,J as CORNER_STYLES,te as CORNER_STYLE_TO_PX,ce as DEFAULT_CARD_GAP,oe as DEFAULT_CARD_SHADOW,Q as DEFAULT_CORNER_STYLE,y as DEFAULT_HEADING_COMPRESSION,tt as DEFAULT_HEADING_TYPOGRAPHY,ue as DEFAULT_HOVER_EFFECT,H as DEFAULT_SHADOW_COLOR,Be as DEFAULT_SIZES,a as DEFAULT_SURFACES,Se as DEFAULT_SWITCH_SHOWN,P as DEFAULT_THEMES,Ee as DEFAULT_THEME_MODE,$ as DEFAULT_THEME_VALUE,He as GRADE_LABEL,et as HEADING_CASES,de as HEADING_COMPRESSIONS,me as HEADING_MAX_PX_MAX,ge as HEADING_MAX_PX_MIN,E as HEADING_WEIGHT_MAX,_ as HEADING_WEIGHT_MIN,se as HOVER_EFFECTS,ae as IDENTITY_CARD_GAP,D as IDENTITY_CARD_SHADOW,le as IDENTITY_HOVER_EFFECT,Ue as NEUTRAL_TYPE_GROUP,G as READABILITY_AA,Y as READABILITY_AA_LARGE,Ye as SCALE_OF_STEP,b as SIZE_STEPS,ze as SIZE_STEP_LABELS,Z as TEXT_SIZE_MAX,V as TEXT_SIZE_MIN,Xe as TEXT_SIZE_STEP,Te as THEME_DAY_END_HOUR,Ae as THEME_DAY_START_HOUR,pe as THEME_MODE_KEY,L as THEME_STORAGE_KEY,Pe as THEME_SURFACE_KEYS,_e as THEME_SWITCH_HIDE,xe as THEME_SWITCH_KEY,K as TYPE_GROUPS,Fe as TYPE_GROUP_LABELS,l as accentInk,we as brandTheme,Re as buildThemeBootScript,je as cardGapAttr,Ze as cardShadowAttr,ve as compressionMetrics,z as contrastRatio,w as cornerRadiusTokens,Ke as cornerStyleTokens,Me as darkerAccents,Ie as gradeContrast,Qe as headingCompressionAttr,rt as headingTypographyFromRow,nt as headingTypographyStyle,ot as headingTypographyToRow,qe as hoverEffectAttr,k as isDayHour,he as normalizeCardGap,I as normalizeCardShadow,C as normalizeCornerRadius,v as normalizeCornerStyle,N as normalizeHeadingCompression,S as normalizeHeadingTypography,M as normalizeHoverEffect,fe as normalizeShadowColor,j as normalizeSize,q as normalizeSizes,A as normalizeTheme,d as normalizeThemeColors,be as resolveTheme,W as resolvedButtonInk,s as selectedThemeColors,Je as shadowColorTokens,Le as siteButtonPaint,Ve as siteCornerRadiusTokens,Ne as themeAccentStyle,x as themeButtonColour,T as themeButtonInk,Oe as themeButtonStyle,ye as themeColorStyle,ke as themePresetAccentVars,$e as themeSurfaceStyle,De as themeSwatchColors,Ge as typeScaleGroupOfClassName,We as typeSizesStyle};
18
+ `}const a={background:"#0a0a0a",surface:"#131313",line:"#2a2a2a",muted:"#9a9388"},$=[{text:"#2e2e2e",accent:"#2e2e2e",background:"#ffffff",surface:"#f7f7f7",line:"#e0e0e0",muted:"#5c5c5c"},{text:"#f7f7f7",accent:"#f7f7f7",background:"#0a0a0a",surface:"#1b1b1b",line:"#363636",muted:"#a3a3a3"},{text:"#ffffff",accent:"#ffffff",background:"#2e2e2e",surface:"#3d3d3d",line:"#545454",muted:"#b0b0b0"},{text:"#0a0a0a",accent:"#0a0a0a",background:"#f7f7f7",surface:"#ffffff",line:"#d9d9d9",muted:"#5c5c5c"}],F={selected:0,themes:$};function A(e){return!e||!Array.isArray(e.themes)||e.themes.length===0?{...F}:{selected:Math.min(Math.max(0,e.selected??0),e.themes.length-1),themes:e.themes}}function f(e,t,n){const r=u(e),o=u(t);if(r===null||o===null)return e;const i=c=>Math.max(0,Math.min(255,Math.round(c))).toString(16).padStart(2,"0");return`#${r.map((c,O)=>i(c+(o[O]-c)*n)).join("")}`}const P={light:"#ffffff",dark:"#0a0a0a"},Re=["light","dark"];function we(e,t){const n=P[t],r=t==="light"?"#ffffff":"#000000";return{text:n,accent:n,background:e,surface:f(e,r,.1),line:f(e,r,.22),muted:f(n,e,.35),brandInk:t}}function s(e){const t=A(e);return t.themes[t.selected]}function d(e){return{text:e.text,accent:e.accent,background:e.background||a.background,surface:e.surface||a.surface,line:e.line||a.line,muted:e.muted||a.muted}}function De(e){return{fill:d(e).background,accent:e.accent}}function u(e){const t=/^#([0-9a-f]{3}|[0-9a-f]{6})$/i.exec(e.trim());if(!t)return null;const n=t[1].length===3?[...t[1]].map(c=>c+c).join(""):t[1],[r,o,i]=[0,2,4].map(c=>parseInt(n.slice(c,c+2),16));return[r,o,i]}function g(e){const t=u(e);if(t===null)return null;const[n,r,o]=t.map(i=>{const c=i/255;return c<=.04045?c/12.92:((c+.055)/1.055)**2.4});return .2126*n+.7152*r+.0722*o}const U=.4,G=4.5,Y=3;function z(e,t){const n=g(e),r=g(t);if(n===null||r===null)return null;const[o,i]=n>=r?[n,r]:[r,n];return(o+.05)/(i+.05)}const He={good:"Good","large-only":"Large text only",hard:"Hard to read"};function Ie(e){return e>=G?"good":e>=Y?"large-only":"hard"}const m=["#000000","#ffffff"];function l(e){let t=m[0],n=-1;for(const r of m){const o=z(e,r);if(o===null)return m[0];o>n&&(n=o,t=r)}return t}const B=[.25,.4,.55];function Me(e){const t=u(e);return t===null?[]:B.map(n=>"#"+t.map(r=>Math.round(r*(1-n)).toString(16).padStart(2,"0")).join(""))}function ye(e){const t=s(e),n={"--theme-fg":t.text},r=g(t.text);return(r===null||r>=U)&&(n["--overlay-fg"]=t.text),n}const X=82;function p(e){return`color-mix(in srgb, ${e} ${X}%, #000)`}function Ne(e){const t=s(e);return{"--theme-accent":t.accent,"--theme-accent-2":p(t.accent),"--theme-accent-ink":l(t.accent)}}function x(e){const t=e?.button;return/^#[0-9a-fA-F]{6}$/.test(t??"")?t.toLowerCase():null}function Oe(e){const t=s(e),n=x(t),r=T(t);if(n===null&&r===null)return{};const o={};return n!==null&&(o["--theme-btn"]=n,o["--theme-btn-2"]=p(n)),o["--theme-btn-ink"]=r??l(n),o}function T(e){const t=e?.buttonInk;return/^#[0-9a-fA-F]{6}$/.test(t??"")?t.toLowerCase():null}function W(e,t){return T(e)??l(x(e)??t)}function Le(e){const t=s(e);return{fill:x(t)??t.accent.toLowerCase(),ink:W(t,t.accent)}}function ke(e){const t={};return A(e).themes.forEach((n,r)=>{const o=d(n);t[`--theme-preset-${r}-accent`]=o.accent,t[`--theme-preset-${r}-accent-2`]=p(o.accent),t[`--theme-preset-${r}-accent-ink`]=l(o.accent),t[`--theme-preset-${r}-bg`]=o.background,t[`--theme-preset-${r}-fg`]=o.text,t[`--theme-preset-${r}-surface`]=o.surface,t[`--theme-preset-${r}-surface-2`]=`color-mix(in srgb, ${o.surface} 60%, ${o.line})`,t[`--theme-preset-${r}-line`]=o.line,t[`--theme-preset-${r}-muted`]=o.muted}),t}const $e=["--theme-bg","--theme-surface","--theme-surface-2","--theme-line","--theme-muted"];function Fe(e){const t=d(s(e)),n=`color-mix(in srgb, ${t.surface} 60%, ${t.line})`,r={"--theme-bg":t.background,"--theme-surface":t.surface,"--theme-line":t.line,"--theme-muted":t.muted};return(t.surface!==a.surface||t.line!==a.line)&&(r["--theme-surface-2"]=n),r}const K=["heading","body","label"],Pe={heading:"Headings",body:"Body",label:"Labels"};function Ue(e){if(!e)return null;for(const t of K)if(e.includes(`--size-${t}`))return t;return/--size-heading(Large|Medium|Small)/.test(e)?"heading":null}const b=["headingLarge","headingMedium","headingSmall","accent","body","label"],Ge={headingLarge:"heading",headingMedium:"heading",headingSmall:"heading",accent:"heading",body:"body",label:"label"},Ye={headingLarge:null,headingMedium:null,headingSmall:null,accent:null,body:null,label:null},V=8,j=200;function Z(e){if(typeof e!="number"||!Number.isFinite(e))return null;const t=Math.round(e);return t>=V&&t<=j?t:null}function q(e){const t={};for(const n of b)t[n]=Z(e?.[n]);return t}function ze(e){const t=q(e),n={};for(const r of b){const o=t[r];o!==null&&(n[`--size-${r}`]=`${o}px`)}return n}const J=["square","small","large"],Q="small";function v(e){return J.includes(e??"")?e:Q}function Be(e){return w(te[v(e)])}const C=0,ee=40,te={square:0,small:null,large:16},ne={"--sf-card-radius":1,"--sf-button-radius":.5,"--site-radius":.5,"--site-radius-xs":.25,"--site-radius-sm":.5,"--site-radius-md":.75,"--site-radius-lg":1,"--site-radius-xl":1.25,"--site-radius-2xl":1.5,"--site-radius-3xl":2,"--site-radius-4xl":2.5};function R(e){if(e==null||typeof e=="string"&&e.trim()==="")return null;const t=typeof e=="string"?Number(e):e;return Number.isFinite(t)?Math.min(ee,Math.max(C,Math.round(t))):null}function w(e){const t=R(e);return t===null?{}:Object.fromEntries(Object.entries(ne).map(([n,r])=>{const o=t*r/16;return[n,o===0?"0":`${o}rem`]}))}function Xe(e){return w(R(e)??C)}const re=["none","soft","lifted"],oe="soft",D="none",ie=["tight","normal","roomy"],ce="normal",ae="normal",se=["none","lift","highlight"],ue="lift",le="highlight",H="#141416";function I(e){return re.includes(e??"")?e:oe}function he(e){return ie.includes(e??"")?e:ce}function M(e){return se.includes(e??"")?e:ue}function fe(e){return/^#[0-9a-fA-F]{6}$/.test(e??"")?e.toLowerCase():H}function We(e){const t=I(e);return t===D?void 0:t}function Ke(e){const t=he(e);return t===ae?void 0:t}function Ve(e){const t=M(e);return t===le?void 0:t}function je(e,t,n){const r=fe(t);return r===H?{}:I(e)!==D||M(n)==="lift"?{"--sf-shadow-color":r}:{}}const de=["normal","tight","compressed"],y="normal";function N(e){return de.includes(e??"")?e:y}function Ze(e){const t=N(e);return t===y?void 0:t}function qe(e){switch(N(e)){case"tight":return{lineHeight:.95,letterSpacing:-.01};case"compressed":return{lineHeight:.86,letterSpacing:-.01};default:return{}}}const Je=["authored","sentence"],Qe={case:"authored",weight:null,weightStrong:null,italicStrong:null,maxPx:null,weight2:null,weight3:null,case2:"authored",case3:"authored"},_=100,E=900,ge=24,me=200;function h(e,t,n){return typeof e!="number"||!Number.isFinite(e)?null:Math.round(Math.min(Math.max(e,t),n))}function S(e){const t=h(e?.weight,_,E),n=e?.case==="sentence"?"sentence":"authored",r=i=>i==null?t:h(i,_,E),o=i=>i==="sentence"?"sentence":i==="authored"?"authored":n;return{case:n,weight:t,weightStrong:h(e?.weightStrong,_,E),italicStrong:typeof e?.italicStrong=="boolean"?e.italicStrong:null,maxPx:h(e?.maxPx,ge,me),weight2:r(e?.weight2),weight3:r(e?.weight3),case2:o(e?.case2),case3:o(e?.case3)}}function ve(e){const t=S(e),n={};return t.case==="sentence"&&(n["--sf-heading-case"]="none"),t.weight!==null&&(n["--sf-heading-weight"]=String(t.weight)),t.weightStrong!==null&&(n["--sf-heading-weight-strong"]=String(t.weightStrong)),t.maxPx!==null&&(n["--sf-heading-max"]=`${t.maxPx}px`),t.weight2!==null&&t.weight2!==t.weight&&(n["--sf-heading-2-weight"]=String(t.weight2)),t.weight3!==null&&t.weight3!==t.weight&&(n["--sf-heading-3-weight"]=String(t.weight3)),t.case2!==t.case&&(n["--sf-heading-2-case"]=t.case2==="sentence"?"none":"uppercase"),t.case3!==t.case&&(n["--sf-heading-3-case"]=t.case3==="sentence"?"none":"uppercase"),n}function et(e){return S({case:e?.heading_case??void 0,weight:e?.heading_weight,weightStrong:e?.heading_weight_strong,italicStrong:e?.accent_italic,maxPx:e?.heading_max_px,weight2:e?.heading_2_weight??void 0,weight3:e?.heading_3_weight??void 0,case2:e?.heading_2_case??void 0,case3:e?.heading_3_case??void 0})}function tt(e){const t=S(e);return{heading_case:t.case,heading_weight:t.weight,heading_weight_strong:t.weightStrong,heading_max_px:t.maxPx,heading_2_weight:t.weight2,heading_3_weight:t.weight3,heading_2_case:t.case2,heading_3_case:t.case3}}export{B as ACCENT_DARKEN_STEPS,Re as BRAND_INKS,ie as CARD_GAPS,re as CARD_SHADOWS,ee as CORNER_RADIUS_MAX,C as CORNER_RADIUS_MIN,J as CORNER_STYLES,te as CORNER_STYLE_TO_PX,ce as DEFAULT_CARD_GAP,oe as DEFAULT_CARD_SHADOW,Q as DEFAULT_CORNER_STYLE,y as DEFAULT_HEADING_COMPRESSION,Qe as DEFAULT_HEADING_TYPOGRAPHY,ue as DEFAULT_HOVER_EFFECT,H as DEFAULT_SHADOW_COLOR,Ye as DEFAULT_SIZES,a as DEFAULT_SURFACES,Se as DEFAULT_SWITCH_SHOWN,$ as DEFAULT_THEMES,Ee as DEFAULT_THEME_MODE,F as DEFAULT_THEME_VALUE,He as GRADE_LABEL,Je as HEADING_CASES,de as HEADING_COMPRESSIONS,me as HEADING_MAX_PX_MAX,ge as HEADING_MAX_PX_MIN,E as HEADING_WEIGHT_MAX,_ as HEADING_WEIGHT_MIN,se as HOVER_EFFECTS,ae as IDENTITY_CARD_GAP,D as IDENTITY_CARD_SHADOW,le as IDENTITY_HOVER_EFFECT,G as READABILITY_AA,Y as READABILITY_AA_LARGE,Ge as SCALE_OF_STEP,b as SIZE_STEPS,j as TEXT_SIZE_MAX,V as TEXT_SIZE_MIN,Te as THEME_DAY_END_HOUR,Ae as THEME_DAY_START_HOUR,pe as THEME_MODE_KEY,L as THEME_STORAGE_KEY,$e as THEME_SURFACE_KEYS,_e as THEME_SWITCH_HIDE,xe as THEME_SWITCH_KEY,K as TYPE_GROUPS,Pe as TYPE_GROUP_LABELS,l as accentInk,we as brandTheme,Ce as buildThemeBootScript,Ke as cardGapAttr,We as cardShadowAttr,qe as compressionMetrics,z as contrastRatio,w as cornerRadiusTokens,Be as cornerStyleTokens,Me as darkerAccents,Ie as gradeContrast,Ze as headingCompressionAttr,et as headingTypographyFromRow,ve as headingTypographyStyle,tt as headingTypographyToRow,Ve as hoverEffectAttr,k as isDayHour,he as normalizeCardGap,I as normalizeCardShadow,R as normalizeCornerRadius,v as normalizeCornerStyle,N as normalizeHeadingCompression,S as normalizeHeadingTypography,M as normalizeHoverEffect,fe as normalizeShadowColor,Z as normalizeSize,q as normalizeSizes,A as normalizeTheme,d as normalizeThemeColors,be as resolveTheme,W as resolvedButtonInk,s as selectedThemeColors,je as shadowColorTokens,Le as siteButtonPaint,Xe as siteCornerRadiusTokens,Ne as themeAccentStyle,x as themeButtonColour,T as themeButtonInk,Oe as themeButtonStyle,ye as themeColorStyle,ke as themePresetAccentVars,Fe as themeSurfaceStyle,De as themeSwatchColors,Ue as typeScaleGroupOfClassName,ze as typeSizesStyle};
@@ -0,0 +1,25 @@
1
+ import { type ReactNode } from "react";
2
+ import type { SlotComponent } from "efficient-easel/blocks";
3
+ import type { SourceRow } from "../../format/lib/content/block-sources.js";
4
+ export type CardRow = {
5
+ row: SourceRow;
6
+ index: number;
7
+ ownerType?: string;
8
+ };
9
+ export declare const CardRowContext: import("react").Context<CardRow | null>;
10
+ export declare function useCardRow(): CardRow | null;
11
+ export declare function useCardRowField(key: string): string | null;
12
+ export declare function CardRowValues({ fields, children, }: {
13
+ fields: readonly string[];
14
+ children: (values: readonly (string | null)[]) => ReactNode;
15
+ }): import("react").JSX.Element;
16
+ type CardTemplateRowsProps = {
17
+ ownerId: string;
18
+ ownerType: string;
19
+ Template: SlotComponent | undefined;
20
+ rows: readonly SourceRow[];
21
+ fallback: ReactNode;
22
+ children: (cards: ReactNode) => ReactNode;
23
+ };
24
+ export declare function CardTemplateRows({ ownerId, ownerType, Template, rows, fallback, children }: CardTemplateRowsProps): import("react").JSX.Element;
25
+ export {};
@@ -0,0 +1 @@
1
+ "use client";import{Fragment as i,jsx as n}from"react/jsx-runtime";import{createContext as f,useContext as a}from"react";import{REPEAT_ATTRIBUTE as p,REPEAT_INDEX_ATTRIBUTE as C}from"efficient-easel/draw";import{CARD_TEMPLATE_SLOT as R}from"../../format/lib/content/card-template.js";const u=f(null);function _(){return a(u)}function A(r){const t=a(u);return!r||!t?null:t.row[r]??""}function h({fields:r,children:t}){const o=a(u);return n(i,{children:t(r.map(e=>!e||!o?null:o.row[e]??""))})}function P({ownerId:r,ownerType:t,Template:o,rows:e,fallback:l,children:s}){if(!o||(o.blockCount??0)<=0)return n(i,{children:l});const d=e.map((m,c)=>n(u.Provider,{value:{row:m,index:c,ownerType:t},children:n("div",{[p]:`${r}:${R}`,[C]:c,children:n(o,{})})},c));return n(i,{children:s(d)})}export{u as CardRowContext,h as CardRowValues,P as CardTemplateRows,_ as useCardRow,A as useCardRowField};