@bettercms-ai/kit 0.1.1 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1100) hide show
  1. package/README.md +22 -16
  2. package/dist/_virtual/_rolldown/runtime.js +13 -0
  3. package/dist/adapters/dock-values.d.ts +28 -0
  4. package/dist/adapters/dock-values.js +41 -0
  5. package/dist/adapters/dock-values.js.map +1 -0
  6. package/dist/adapters/icons.d.ts +15 -0
  7. package/dist/adapters/icons.js +27 -0
  8. package/dist/adapters/icons.js.map +1 -0
  9. package/dist/adapters/lossy.d.ts +326 -0
  10. package/dist/adapters/lossy.js +414 -0
  11. package/dist/adapters/lossy.js.map +1 -0
  12. package/dist/adapters/prod-types.d.ts +546 -0
  13. package/dist/adapters/prod-types.js +714 -0
  14. package/dist/adapters/prod-types.js.map +1 -0
  15. package/dist/adapters/schema.d.ts +154 -0
  16. package/dist/adapters/schema.js +3020 -0
  17. package/dist/adapters/schema.js.map +1 -0
  18. package/dist/adapters/values.d.ts +221 -0
  19. package/dist/adapters/values.js +623 -0
  20. package/dist/adapters/values.js.map +1 -0
  21. package/dist/brand/logo.d.ts +17 -0
  22. package/dist/brand/logo.js +96 -0
  23. package/dist/brand/logo.js.map +1 -0
  24. package/dist/context.d.ts +359 -0
  25. package/dist/context.js +217 -0
  26. package/dist/context.js.map +1 -0
  27. package/dist/controls/button.d.ts +72 -0
  28. package/dist/controls/button.js +578 -0
  29. package/dist/controls/button.js.map +1 -0
  30. package/dist/controls/c1.d.ts +11 -0
  31. package/dist/controls/c1.js +24 -0
  32. package/dist/controls/c1.js.map +1 -0
  33. package/dist/controls/c2.d.ts +10 -0
  34. package/dist/controls/c2.js +19 -0
  35. package/dist/controls/c2.js.map +1 -0
  36. package/dist/controls/choice.d.ts +44 -0
  37. package/dist/controls/choice.js +463 -0
  38. package/dist/controls/choice.js.map +1 -0
  39. package/dist/controls/code-register.d.ts +1 -0
  40. package/dist/controls/code-register.js +8 -0
  41. package/dist/controls/code-register.js.map +1 -0
  42. package/dist/controls/code.d.ts +42 -0
  43. package/dist/controls/code.js +397 -0
  44. package/dist/controls/code.js.map +1 -0
  45. package/dist/controls/color.d.ts +5 -0
  46. package/dist/controls/color.js +130 -0
  47. package/dist/controls/color.js.map +1 -0
  48. package/dist/controls/component-services.d.ts +156 -0
  49. package/dist/controls/component-services.js +7 -0
  50. package/dist/controls/component-services.js.map +1 -0
  51. package/dist/controls/date-register.d.ts +1 -0
  52. package/dist/controls/date-register.js +9 -0
  53. package/dist/controls/date-register.js.map +1 -0
  54. package/dist/controls/date-zone.d.ts +104 -0
  55. package/dist/controls/date-zone.js +278 -0
  56. package/dist/controls/date-zone.js.map +1 -0
  57. package/dist/controls/date.d.ts +7 -0
  58. package/dist/controls/date.js +466 -0
  59. package/dist/controls/date.js.map +1 -0
  60. package/dist/controls/form-picker-register.d.ts +1 -0
  61. package/dist/controls/form-picker-register.js +19 -0
  62. package/dist/controls/form-picker-register.js.map +1 -0
  63. package/dist/controls/form-picker.d.ts +43 -0
  64. package/dist/controls/form-picker.js +85 -0
  65. package/dist/controls/form-picker.js.map +1 -0
  66. package/dist/controls/icon-register.d.ts +1 -0
  67. package/dist/controls/icon-register.js +8 -0
  68. package/dist/controls/icon-register.js.map +1 -0
  69. package/dist/controls/icon.d.ts +40 -0
  70. package/dist/controls/icon.js +360 -0
  71. package/dist/controls/icon.js.map +1 -0
  72. package/dist/controls/index.d.ts +5 -0
  73. package/dist/controls/index.js +38 -0
  74. package/dist/controls/index.js.map +1 -0
  75. package/dist/controls/json-register.d.ts +1 -0
  76. package/dist/controls/json-register.js +8 -0
  77. package/dist/controls/json-register.js.map +1 -0
  78. package/dist/controls/json.d.ts +2 -0
  79. package/dist/controls/json.js +82 -0
  80. package/dist/controls/json.js.map +1 -0
  81. package/dist/controls/link.d.ts +260 -0
  82. package/dist/controls/link.js +1186 -0
  83. package/dist/controls/link.js.map +1 -0
  84. package/dist/controls/location-register.d.ts +1 -0
  85. package/dist/controls/location-register.js +8 -0
  86. package/dist/controls/location-register.js.map +1 -0
  87. package/dist/controls/location.d.ts +16 -0
  88. package/dist/controls/location.js +221 -0
  89. package/dist/controls/location.js.map +1 -0
  90. package/dist/controls/media-register.d.ts +1 -0
  91. package/dist/controls/media-register.js +12 -0
  92. package/dist/controls/media-register.js.map +1 -0
  93. package/dist/controls/media-services.d.ts +46 -0
  94. package/dist/controls/media-services.js +0 -0
  95. package/dist/controls/media.d.ts +104 -0
  96. package/dist/controls/media.js +1396 -0
  97. package/dist/controls/media.js.map +1 -0
  98. package/dist/controls/number.d.ts +22 -0
  99. package/dist/controls/number.js +196 -0
  100. package/dist/controls/number.js.map +1 -0
  101. package/dist/controls/reference-register.d.ts +1 -0
  102. package/dist/controls/reference-register.js +10 -0
  103. package/dist/controls/reference-register.js.map +1 -0
  104. package/dist/controls/reference-services.d.ts +58 -0
  105. package/dist/controls/reference-services.js +0 -0
  106. package/dist/controls/reference.d.ts +23 -0
  107. package/dist/controls/reference.js +777 -0
  108. package/dist/controls/reference.js.map +1 -0
  109. package/dist/controls/rich-text/blocks.d.ts +49 -0
  110. package/dist/controls/rich-text/blocks.js +1859 -0
  111. package/dist/controls/rich-text/blocks.js.map +1 -0
  112. package/dist/controls/rich-text/catalog.d.ts +101 -0
  113. package/dist/controls/rich-text/catalog.js +623 -0
  114. package/dist/controls/rich-text/catalog.js.map +1 -0
  115. package/dist/controls/rich-text/codec.d.ts +64 -0
  116. package/dist/controls/rich-text/codec.js +34 -0
  117. package/dist/controls/rich-text/codec.js.map +1 -0
  118. package/dist/controls/rich-text/component-card.d.ts +14 -0
  119. package/dist/controls/rich-text/component-card.js +1024 -0
  120. package/dist/controls/rich-text/component-card.js.map +1 -0
  121. package/dist/controls/rich-text/component-panel.d.ts +47 -0
  122. package/dist/controls/rich-text/component-panel.js +141 -0
  123. package/dist/controls/rich-text/component-panel.js.map +1 -0
  124. package/dist/controls/rich-text/control.d.ts +20 -0
  125. package/dist/controls/rich-text/control.js +296 -0
  126. package/dist/controls/rich-text/control.js.map +1 -0
  127. package/dist/controls/rich-text/dom.d.ts +233 -0
  128. package/dist/controls/rich-text/dom.js +1019 -0
  129. package/dist/controls/rich-text/dom.js.map +1 -0
  130. package/dist/controls/rich-text/editor.d.ts +57 -0
  131. package/dist/controls/rich-text/editor.js +1630 -0
  132. package/dist/controls/rich-text/editor.js.map +1 -0
  133. package/dist/controls/rich-text/floating.d.ts +28 -0
  134. package/dist/controls/rich-text/floating.js +154 -0
  135. package/dist/controls/rich-text/floating.js.map +1 -0
  136. package/dist/controls/rich-text/index.d.ts +1 -0
  137. package/dist/controls/rich-text/index.js +12 -0
  138. package/dist/controls/rich-text/index.js.map +1 -0
  139. package/dist/controls/rich-text/link-form.d.ts +13 -0
  140. package/dist/controls/rich-text/link-form.js +147 -0
  141. package/dist/controls/rich-text/link-form.js.map +1 -0
  142. package/dist/controls/rich-text/markdown.d.ts +6 -0
  143. package/dist/controls/rich-text/markdown.js +181 -0
  144. package/dist/controls/rich-text/markdown.js.map +1 -0
  145. package/dist/controls/rich-text/ops.d.ts +35 -0
  146. package/dist/controls/rich-text/ops.js +316 -0
  147. package/dist/controls/rich-text/ops.js.map +1 -0
  148. package/dist/controls/rich-text/plain.d.ts +17 -0
  149. package/dist/controls/rich-text/plain.js +44 -0
  150. package/dist/controls/rich-text/plain.js.map +1 -0
  151. package/dist/controls/rich-text/toolbar.d.ts +89 -0
  152. package/dist/controls/rich-text/toolbar.js +343 -0
  153. package/dist/controls/rich-text/toolbar.js.map +1 -0
  154. package/dist/controls/scale.d.ts +56 -0
  155. package/dist/controls/scale.js +563 -0
  156. package/dist/controls/scale.js.map +1 -0
  157. package/dist/controls/slot-register.d.ts +1 -0
  158. package/dist/controls/slot-register.js +16 -0
  159. package/dist/controls/slot-register.js.map +1 -0
  160. package/dist/controls/slot-services.d.ts +122 -0
  161. package/dist/controls/slot-services.js +155 -0
  162. package/dist/controls/slot-services.js.map +1 -0
  163. package/dist/controls/slot.d.ts +33 -0
  164. package/dist/controls/slot.js +366 -0
  165. package/dist/controls/slot.js.map +1 -0
  166. package/dist/controls/table/index.d.ts +1 -0
  167. package/dist/controls/table/index.js +12 -0
  168. package/dist/controls/table/index.js.map +1 -0
  169. package/dist/controls/table/prod.d.ts +21 -0
  170. package/dist/controls/table/prod.js +79 -0
  171. package/dist/controls/table/prod.js.map +1 -0
  172. package/dist/controls/table/refs.d.ts +50 -0
  173. package/dist/controls/table/refs.js +79 -0
  174. package/dist/controls/table/refs.js.map +1 -0
  175. package/dist/controls/table/stored.d.ts +15 -0
  176. package/dist/controls/table/stored.js +44 -0
  177. package/dist/controls/table/stored.js.map +1 -0
  178. package/dist/controls/table/table-editor.d.ts +103 -0
  179. package/dist/controls/table/table-editor.js +2725 -0
  180. package/dist/controls/table/table-editor.js.map +1 -0
  181. package/dist/controls/table/table-link.d.ts +24 -0
  182. package/dist/controls/table/table-link.js +180 -0
  183. package/dist/controls/table/table-link.js.map +1 -0
  184. package/dist/controls/table/table.d.ts +9 -0
  185. package/dist/controls/table/table.js +103 -0
  186. package/dist/controls/table/table.js.map +1 -0
  187. package/dist/controls/text.d.ts +17 -0
  188. package/dist/controls/text.js +322 -0
  189. package/dist/controls/text.js.map +1 -0
  190. package/dist/controls/unknown-value.d.ts +17 -0
  191. package/dist/controls/unknown-value.js +66 -0
  192. package/dist/controls/unknown-value.js.map +1 -0
  193. package/dist/core/core.d.ts +63 -0
  194. package/dist/core/core.js +171 -0
  195. package/dist/core/core.js.map +1 -0
  196. package/dist/core/facets.d.ts +347 -0
  197. package/dist/core/facets.js +334 -0
  198. package/dist/core/facets.js.map +1 -0
  199. package/dist/core/index.d.ts +3 -0
  200. package/dist/core/index.js +3 -0
  201. package/dist/engine/array.d.ts +101 -0
  202. package/dist/engine/array.js +906 -0
  203. package/dist/engine/array.js.map +1 -0
  204. package/dist/engine/bits.d.ts +24 -0
  205. package/dist/engine/bits.js +60 -0
  206. package/dist/engine/bits.js.map +1 -0
  207. package/dist/engine/breadcrumb.d.ts +45 -0
  208. package/dist/engine/breadcrumb.js +63 -0
  209. package/dist/engine/breadcrumb.js.map +1 -0
  210. package/dist/engine/expand.d.ts +66 -0
  211. package/dist/engine/expand.js +153 -0
  212. package/dist/engine/expand.js.map +1 -0
  213. package/dist/engine/field-list.d.ts +20 -0
  214. package/dist/engine/field-list.js +19 -0
  215. package/dist/engine/field-list.js.map +1 -0
  216. package/dist/engine/field-shell.d.ts +49 -0
  217. package/dist/engine/field-shell.js +988 -0
  218. package/dist/engine/field-shell.js.map +1 -0
  219. package/dist/engine/frame.d.ts +122 -0
  220. package/dist/engine/frame.js +601 -0
  221. package/dist/engine/frame.js.map +1 -0
  222. package/dist/engine/group-summary.d.ts +5 -0
  223. package/dist/engine/group-summary.js +70 -0
  224. package/dist/engine/group-summary.js.map +1 -0
  225. package/dist/engine/grouping.d.ts +238 -0
  226. package/dist/engine/grouping.js +996 -0
  227. package/dist/engine/grouping.js.map +1 -0
  228. package/dist/engine/item-list.d.ts +99 -0
  229. package/dist/engine/item-list.js +725 -0
  230. package/dist/engine/item-list.js.map +1 -0
  231. package/dist/engine/kit-field.d.ts +72 -0
  232. package/dist/engine/kit-field.js +558 -0
  233. package/dist/engine/kit-field.js.map +1 -0
  234. package/dist/engine/schema-form.d.ts +116 -0
  235. package/dist/engine/schema-form.js +462 -0
  236. package/dist/engine/schema-form.js.map +1 -0
  237. package/dist/engine/slot.d.ts +13 -0
  238. package/dist/engine/slot.js +216 -0
  239. package/dist/engine/slot.js.map +1 -0
  240. package/dist/index.d.ts +45 -3139
  241. package/dist/index.js +47 -2036
  242. package/dist/index.js.map +1 -0
  243. package/dist/kit.css +75 -0
  244. package/dist/lib/cn.d.ts +4 -0
  245. package/dist/lib/cn.js +56 -0
  246. package/dist/lib/cn.js.map +1 -0
  247. package/dist/lib/columns.d.ts +14 -0
  248. package/dist/lib/columns.js +30 -0
  249. package/dist/lib/columns.js.map +1 -0
  250. package/dist/lib/frames.d.ts +36 -0
  251. package/dist/lib/frames.js +214 -0
  252. package/dist/lib/frames.js.map +1 -0
  253. package/dist/lib/icon-image.d.ts +10 -0
  254. package/dist/lib/icon-image.js +8 -0
  255. package/dist/lib/icon-image.js.map +1 -0
  256. package/dist/lib/icons.d.ts +16 -0
  257. package/dist/lib/icons.js +173 -0
  258. package/dist/lib/icons.js.map +1 -0
  259. package/dist/lib/input-modality.d.ts +11 -0
  260. package/dist/lib/input-modality.js +47 -0
  261. package/dist/lib/input-modality.js.map +1 -0
  262. package/dist/lib/key-event.d.ts +11 -0
  263. package/dist/lib/key-event.js +16 -0
  264. package/dist/lib/key-event.js.map +1 -0
  265. package/dist/lib/path.d.ts +29 -0
  266. package/dist/lib/path.js +66 -0
  267. package/dist/lib/path.js.map +1 -0
  268. package/dist/lib/schema.d.ts +80 -0
  269. package/dist/lib/schema.js +384 -0
  270. package/dist/lib/schema.js.map +1 -0
  271. package/dist/lib/utils.d.ts +7 -0
  272. package/dist/lib/utils.js +37 -0
  273. package/dist/lib/utils.js.map +1 -0
  274. package/dist/lib/validate.d.ts +30 -0
  275. package/dist/lib/validate.js +224 -0
  276. package/dist/lib/validate.js.map +1 -0
  277. package/dist/library/analysis.d.ts +23 -0
  278. package/dist/library/analysis.js +160 -0
  279. package/dist/library/analysis.js.map +1 -0
  280. package/dist/library/catalog.d.ts +57 -0
  281. package/dist/library/catalog.js +307 -0
  282. package/dist/library/catalog.js.map +1 -0
  283. package/dist/library/coreNotes.d.ts +8 -0
  284. package/dist/library/coreNotes.js +111 -0
  285. package/dist/library/coreNotes.js.map +1 -0
  286. package/dist/library/coverage.d.ts +40 -0
  287. package/dist/library/coverage.js +59 -0
  288. package/dist/library/coverage.js.map +1 -0
  289. package/dist/library/entries/advanced.entries.d.ts +2 -0
  290. package/dist/library/entries/advanced.entries.js +6579 -0
  291. package/dist/library/entries/advanced.entries.js.map +1 -0
  292. package/dist/library/entries/commerce.entries.d.ts +2 -0
  293. package/dist/library/entries/commerce.entries.js +4140 -0
  294. package/dist/library/entries/commerce.entries.js.map +1 -0
  295. package/dist/library/entries/company.entries.d.ts +2 -0
  296. package/dist/library/entries/company.entries.js +2731 -0
  297. package/dist/library/entries/company.entries.js.map +1 -0
  298. package/dist/library/entries/conversion.entries.d.ts +2 -0
  299. package/dist/library/entries/conversion.entries.js +3707 -0
  300. package/dist/library/entries/conversion.entries.js.map +1 -0
  301. package/dist/library/entries/data.entries.d.ts +7 -0
  302. package/dist/library/entries/data.entries.js +4613 -0
  303. package/dist/library/entries/data.entries.js.map +1 -0
  304. package/dist/library/entries/events.entries.d.ts +2 -0
  305. package/dist/library/entries/events.entries.js +3428 -0
  306. package/dist/library/entries/events.entries.js.map +1 -0
  307. package/dist/library/entries/features.entries.d.ts +2 -0
  308. package/dist/library/entries/features.entries.js +3157 -0
  309. package/dist/library/entries/features.entries.js.map +1 -0
  310. package/dist/library/entries/heroes.entries.d.ts +2 -0
  311. package/dist/library/entries/heroes.entries.js +3401 -0
  312. package/dist/library/entries/heroes.entries.js.map +1 -0
  313. package/dist/library/entries/index.d.ts +3 -0
  314. package/dist/library/entries/index.js +35 -0
  315. package/dist/library/entries/index.js.map +1 -0
  316. package/dist/library/entries/listings.entries.d.ts +2 -0
  317. package/dist/library/entries/listings.entries.js +2976 -0
  318. package/dist/library/entries/listings.entries.js.map +1 -0
  319. package/dist/library/entries/longform.entries.d.ts +2 -0
  320. package/dist/library/entries/longform.entries.js +4227 -0
  321. package/dist/library/entries/longform.entries.js.map +1 -0
  322. package/dist/library/entries/media.entries.d.ts +2 -0
  323. package/dist/library/entries/media.entries.js +2781 -0
  324. package/dist/library/entries/media.entries.js.map +1 -0
  325. package/dist/library/entries/navigation.entries.d.ts +2 -0
  326. package/dist/library/entries/navigation.entries.js +4011 -0
  327. package/dist/library/entries/navigation.entries.js.map +1 -0
  328. package/dist/library/entries/pricing.entries.d.ts +2 -0
  329. package/dist/library/entries/pricing.entries.js +2383 -0
  330. package/dist/library/entries/pricing.entries.js.map +1 -0
  331. package/dist/library/entries/social-proof.entries.d.ts +2 -0
  332. package/dist/library/entries/social-proof.entries.js +2297 -0
  333. package/dist/library/entries/social-proof.entries.js.map +1 -0
  334. package/dist/library/examples/bento.d.ts +92 -0
  335. package/dist/library/examples/bento.js +201 -0
  336. package/dist/library/examples/bento.js.map +1 -0
  337. package/dist/library/examples/blocks.d.ts +14 -0
  338. package/dist/library/examples/blocks.js +313 -0
  339. package/dist/library/examples/blocks.js.map +1 -0
  340. package/dist/library/examples/faq.d.ts +28 -0
  341. package/dist/library/examples/faq.js +230 -0
  342. package/dist/library/examples/faq.js.map +1 -0
  343. package/dist/library/examples/hero.d.ts +43 -0
  344. package/dist/library/examples/hero.js +222 -0
  345. package/dist/library/examples/hero.js.map +1 -0
  346. package/dist/library/examples/index.d.ts +36 -0
  347. package/dist/library/examples/index.js +109 -0
  348. package/dist/library/examples/index.js.map +1 -0
  349. package/dist/library/examples/journalStory.d.ts +93 -0
  350. package/dist/library/examples/journalStory.js +338 -0
  351. package/dist/library/examples/journalStory.js.map +1 -0
  352. package/dist/library/examples/megaMenu.d.ts +134 -0
  353. package/dist/library/examples/megaMenu.js +442 -0
  354. package/dist/library/examples/megaMenu.js.map +1 -0
  355. package/dist/library/examples/pricing.d.ts +103 -0
  356. package/dist/library/examples/pricing.js +479 -0
  357. package/dist/library/examples/pricing.js.map +1 -0
  358. package/dist/library/examples/tabs.d.ts +87 -0
  359. package/dist/library/examples/tabs.js +180 -0
  360. package/dist/library/examples/tabs.js.map +1 -0
  361. package/dist/library/export.d.ts +42 -0
  362. package/dist/library/export.js +80 -0
  363. package/dist/library/export.js.map +1 -0
  364. package/dist/library/index.d.ts +13 -0
  365. package/dist/library/index.js +6 -0
  366. package/dist/library/kit-catalog.json +1510 -0
  367. package/dist/library/types.d.ts +42 -0
  368. package/dist/library/types.js +0 -0
  369. package/dist/schema/adapters.d.ts +28 -0
  370. package/dist/schema/adapters.js +492 -0
  371. package/dist/schema/adapters.js.map +1 -0
  372. package/dist/schema/help.d.ts +27 -0
  373. package/dist/schema/help.js +56 -0
  374. package/dist/schema/help.js.map +1 -0
  375. package/dist/schema/scale.d.ts +69 -0
  376. package/dist/schema/scale.js +250 -0
  377. package/dist/schema/scale.js.map +1 -0
  378. package/dist/schema/sources.d.ts +103 -0
  379. package/dist/schema/sources.js +65 -0
  380. package/dist/schema/sources.js.map +1 -0
  381. package/dist/schema/table.d.ts +319 -0
  382. package/dist/schema/table.js +1199 -0
  383. package/dist/schema/table.js.map +1 -0
  384. package/dist/schema/types.d.ts +297 -0
  385. package/dist/schema/types.js +14 -0
  386. package/dist/schema/types.js.map +1 -0
  387. package/dist/styles.css +2 -0
  388. package/dist/table/table-view.d.ts +14 -0
  389. package/dist/table/table-view.js +140 -0
  390. package/dist/table/table-view.js.map +1 -0
  391. package/dist/table/table.css +73 -0
  392. package/dist/testing/corpus.d.ts +63 -0
  393. package/dist/testing/corpus.js +129 -0
  394. package/dist/testing/corpus.js.map +1 -0
  395. package/dist/testing/test-form.d.ts +11 -0
  396. package/dist/testing/test-form.js +38 -0
  397. package/dist/testing/test-form.js.map +1 -0
  398. package/dist/theme.css +345 -0
  399. package/dist/theme.d.ts +20 -1504
  400. package/dist/theme.js +43 -4126
  401. package/dist/theme.js.map +1 -0
  402. package/dist/tokens.css +542 -0
  403. package/dist/types.d.ts +17 -0
  404. package/dist/types.js +0 -0
  405. package/dist/ui/action-tray.d.ts +54 -0
  406. package/dist/ui/action-tray.js +154 -0
  407. package/dist/ui/action-tray.js.map +1 -0
  408. package/dist/ui/autocomplete.d.ts +30 -0
  409. package/dist/ui/autocomplete.js +139 -0
  410. package/dist/ui/autocomplete.js.map +1 -0
  411. package/dist/ui/button.d.ts +57 -0
  412. package/dist/ui/button.js +201 -0
  413. package/dist/ui/button.js.map +1 -0
  414. package/dist/ui/choice-switch.d.ts +36 -0
  415. package/dist/ui/choice-switch.js +57 -0
  416. package/dist/ui/choice-switch.js.map +1 -0
  417. package/dist/ui/controls.d.ts +83 -0
  418. package/dist/ui/controls.js +331 -0
  419. package/dist/ui/controls.js.map +1 -0
  420. package/dist/ui/display.d.ts +163 -0
  421. package/dist/ui/display.js +455 -0
  422. package/dist/ui/display.js.map +1 -0
  423. package/dist/ui/expanded-editor-modal.d.ts +26 -0
  424. package/dist/ui/expanded-editor-modal.js +140 -0
  425. package/dist/ui/expanded-editor-modal.js.map +1 -0
  426. package/dist/ui/field-context.d.ts +12 -0
  427. package/dist/ui/field-context.js +23 -0
  428. package/dist/ui/field-context.js.map +1 -0
  429. package/dist/ui/floating-panel.d.ts +152 -0
  430. package/dist/ui/floating-panel.js +928 -0
  431. package/dist/ui/floating-panel.js.map +1 -0
  432. package/dist/ui/index.d.ts +16 -0
  433. package/dist/ui/index.js +18 -0
  434. package/dist/ui/input.d.ts +78 -0
  435. package/dist/ui/input.js +250 -0
  436. package/dist/ui/input.js.map +1 -0
  437. package/dist/ui/mode-bar.d.ts +31 -0
  438. package/dist/ui/mode-bar.js +65 -0
  439. package/dist/ui/mode-bar.js.map +1 -0
  440. package/dist/ui/overlay.d.ts +195 -0
  441. package/dist/ui/overlay.js +697 -0
  442. package/dist/ui/overlay.js.map +1 -0
  443. package/dist/ui/path-crumbs.d.ts +90 -0
  444. package/dist/ui/path-crumbs.js +566 -0
  445. package/dist/ui/path-crumbs.js.map +1 -0
  446. package/dist/ui/presence.d.ts +16 -0
  447. package/dist/ui/presence.js +65 -0
  448. package/dist/ui/presence.js.map +1 -0
  449. package/dist/ui/select.d.ts +66 -0
  450. package/dist/ui/select.js +407 -0
  451. package/dist/ui/select.js.map +1 -0
  452. package/dist/ui/shortcut-hint.d.ts +14 -0
  453. package/dist/ui/shortcut-hint.js +35 -0
  454. package/dist/ui/shortcut-hint.js.map +1 -0
  455. package/dist/ui/spinner.d.ts +24 -0
  456. package/dist/ui/spinner.js +42 -0
  457. package/dist/ui/spinner.js.map +1 -0
  458. package/dist/ui/split-button.d.ts +32 -0
  459. package/dist/ui/split-button.js +60 -0
  460. package/dist/ui/split-button.js.map +1 -0
  461. package/dist/ui/surfaces.d.ts +23 -0
  462. package/dist/ui/surfaces.js +26 -0
  463. package/dist/ui/surfaces.js.map +1 -0
  464. package/dist/ui/tab.d.ts +38 -0
  465. package/dist/ui/tab.js +87 -0
  466. package/dist/ui/tab.js.map +1 -0
  467. package/dist/ui/toast.d.ts +20 -0
  468. package/dist/ui/toast.js +115 -0
  469. package/dist/ui/toast.js.map +1 -0
  470. package/dist/ui/tooltip-root.d.ts +13 -0
  471. package/dist/ui/tooltip-root.js +77 -0
  472. package/dist/ui/tooltip-root.js.map +1 -0
  473. package/dist/ui/variants.d.ts +15 -0
  474. package/dist/ui/variants.js +14 -0
  475. package/dist/ui/variants.js.map +1 -0
  476. package/package.json +76 -50
  477. package/LICENSE +0 -21
  478. package/dist/_chunks-cjs/_visual-editing.js +0 -5898
  479. package/dist/_chunks-cjs/refractor.js +0 -22
  480. package/dist/_chunks-es/_visual-editing.mjs +0 -5904
  481. package/dist/_chunks-es/refractor.mjs +0 -25
  482. package/dist/_color.d.mts +0 -119
  483. package/dist/_color.d.ts +0 -119
  484. package/dist/_color.js +0 -1412
  485. package/dist/_color.mjs +0 -1411
  486. package/dist/_visual-editing.d.mts +0 -1126
  487. package/dist/_visual-editing.d.ts +0 -1126
  488. package/dist/_visual-editing.js +0 -30
  489. package/dist/_visual-editing.mjs +0 -30
  490. package/dist/index.d.mts +0 -3140
  491. package/dist/index.mjs +0 -2044
  492. package/dist/theme.d.mts +0 -1506
  493. package/dist/theme.mjs +0 -4126
  494. package/exports/_visual-editing.ts +0 -31
  495. package/exports/index.ts +0 -1
  496. package/exports/theme.ts +0 -1
  497. package/src/color/index.d.mts +0 -119
  498. package/src/color/index.mjs +0 -1411
  499. package/src/core/__workshop__/constants.ts +0 -293
  500. package/src/core/_compat.ts +0 -264
  501. package/src/core/components/autocomplete/__mocks__/apiStore.ts +0 -49
  502. package/src/core/components/autocomplete/__mocks__/countries.ts +0 -245
  503. package/src/core/components/autocomplete/__workshop__/async.tsx +0 -156
  504. package/src/core/components/autocomplete/__workshop__/constrainedHeight.tsx +0 -137
  505. package/src/core/components/autocomplete/__workshop__/custom.tsx +0 -89
  506. package/src/core/components/autocomplete/__workshop__/example.tsx +0 -79
  507. package/src/core/components/autocomplete/__workshop__/focusAndBlur.tsx +0 -36
  508. package/src/core/components/autocomplete/__workshop__/fullscreen.tsx +0 -294
  509. package/src/core/components/autocomplete/__workshop__/index.ts +0 -39
  510. package/src/core/components/autocomplete/__workshop__/types.ts +0 -4
  511. package/src/core/components/autocomplete/autocomplete.styles.tsx +0 -39
  512. package/src/core/components/autocomplete/autocomplete.tsx +0 -767
  513. package/src/core/components/autocomplete/autocompleteOption.tsx +0 -45
  514. package/src/core/components/autocomplete/autocompleteReducer.ts +0 -47
  515. package/src/core/components/autocomplete/constants.ts +0 -28
  516. package/src/core/components/autocomplete/index.ts +0 -2
  517. package/src/core/components/autocomplete/types.ts +0 -108
  518. package/src/core/components/breadcrumbs/__workshop__/example.tsx +0 -62
  519. package/src/core/components/breadcrumbs/__workshop__/index.ts +0 -14
  520. package/src/core/components/breadcrumbs/breadcrumbs.styles.ts +0 -18
  521. package/src/core/components/breadcrumbs/breadcrumbs.test.tsx +0 -51
  522. package/src/core/components/breadcrumbs/breadcrumbs.tsx +0 -133
  523. package/src/core/components/breadcrumbs/index.ts +0 -1
  524. package/src/core/components/dialog/__workshop__/activate.tsx +0 -134
  525. package/src/core/components/dialog/__workshop__/autoFocus.tsx +0 -29
  526. package/src/core/components/dialog/__workshop__/index.ts +0 -19
  527. package/src/core/components/dialog/__workshop__/layering.tsx +0 -41
  528. package/src/core/components/dialog/__workshop__/nested.tsx +0 -72
  529. package/src/core/components/dialog/__workshop__/onScroll.tsx +0 -39
  530. package/src/core/components/dialog/__workshop__/panes.tsx +0 -82
  531. package/src/core/components/dialog/__workshop__/position.tsx +0 -30
  532. package/src/core/components/dialog/__workshop__/props.tsx +0 -75
  533. package/src/core/components/dialog/__workshop__/provider.tsx +0 -11
  534. package/src/core/components/dialog/__workshop__/wrapped.tsx +0 -76
  535. package/src/core/components/dialog/dialog.tsx +0 -430
  536. package/src/core/components/dialog/dialogContext.ts +0 -20
  537. package/src/core/components/dialog/dialogProvider.tsx +0 -35
  538. package/src/core/components/dialog/index.ts +0 -4
  539. package/src/core/components/dialog/styles.ts +0 -77
  540. package/src/core/components/dialog/useDialog.ts +0 -11
  541. package/src/core/components/hotkeys/__workshop__/index.ts +0 -14
  542. package/src/core/components/hotkeys/__workshop__/plain.tsx +0 -9
  543. package/src/core/components/hotkeys/hotkeys.test.tsx +0 -42
  544. package/src/core/components/hotkeys/hotkeys.tsx +0 -66
  545. package/src/core/components/hotkeys/index.ts +0 -1
  546. package/src/core/components/index.ts +0 -9
  547. package/src/core/components/menu/__workshop__/asComponent.tsx +0 -45
  548. package/src/core/components/menu/__workshop__/avatarMenu.tsx +0 -51
  549. package/src/core/components/menu/__workshop__/closableMenuButton.tsx +0 -46
  550. package/src/core/components/menu/__workshop__/constrainedInBoundary.tsx +0 -134
  551. package/src/core/components/menu/__workshop__/customMenuItem.tsx +0 -45
  552. package/src/core/components/menu/__workshop__/customSelectedState.tsx +0 -39
  553. package/src/core/components/menu/__workshop__/disableFocusOnClose.tsx +0 -40
  554. package/src/core/components/menu/__workshop__/groups.tsx +0 -156
  555. package/src/core/components/menu/__workshop__/index.ts +0 -89
  556. package/src/core/components/menu/__workshop__/menuButton.tsx +0 -80
  557. package/src/core/components/menu/__workshop__/menuGroupRight.tsx +0 -58
  558. package/src/core/components/menu/__workshop__/nestedMenu.tsx +0 -22
  559. package/src/core/components/menu/__workshop__/onCloseMenuButton.tsx +0 -41
  560. package/src/core/components/menu/__workshop__/selectedItem.tsx +0 -69
  561. package/src/core/components/menu/__workshop__/shouldFocus.tsx +0 -47
  562. package/src/core/components/menu/__workshop__/tones.tsx +0 -25
  563. package/src/core/components/menu/__workshop__/withoutArrow.tsx +0 -32
  564. package/src/core/components/menu/helpers.ts +0 -82
  565. package/src/core/components/menu/index.ts +0 -5
  566. package/src/core/components/menu/menu.spacing.test.tsx +0 -63
  567. package/src/core/components/menu/menu.test.tsx +0 -125
  568. package/src/core/components/menu/menu.tsx +0 -178
  569. package/src/core/components/menu/menuButton.tsx +0 -268
  570. package/src/core/components/menu/menuContext.ts +0 -18
  571. package/src/core/components/menu/menuDivider.ts +0 -23
  572. package/src/core/components/menu/menuGroup.spacing.test.tsx +0 -63
  573. package/src/core/components/menu/menuGroup.tsx +0 -233
  574. package/src/core/components/menu/menuItem.spacing.test.tsx +0 -59
  575. package/src/core/components/menu/menuItem.tsx +0 -197
  576. package/src/core/components/menu/useMenu.ts +0 -21
  577. package/src/core/components/menu/useMenuController.ts +0 -231
  578. package/src/core/components/skeleton/__workshop__/delay.tsx +0 -70
  579. package/src/core/components/skeleton/__workshop__/index.ts +0 -11
  580. package/src/core/components/skeleton/__workshop__/skeleton.tsx +0 -64
  581. package/src/core/components/skeleton/index.ts +0 -2
  582. package/src/core/components/skeleton/skeleton.tsx +0 -57
  583. package/src/core/components/skeleton/styles.ts +0 -50
  584. package/src/core/components/skeleton/textSkeleton.tsx +0 -122
  585. package/src/core/components/tab/__workshop__/example.tsx +0 -79
  586. package/src/core/components/tab/__workshop__/index.ts +0 -14
  587. package/src/core/components/tab/index.ts +0 -3
  588. package/src/core/components/tab/tab.tsx +0 -101
  589. package/src/core/components/tab/tabList.test.tsx +0 -48
  590. package/src/core/components/tab/tabList.tsx +0 -70
  591. package/src/core/components/tab/tabPanel.tsx +0 -39
  592. package/src/core/components/toast/__workshop__/hook.tsx +0 -71
  593. package/src/core/components/toast/__workshop__/index.ts +0 -19
  594. package/src/core/components/toast/__workshop__/toast.tsx +0 -26
  595. package/src/core/components/toast/index.ts +0 -4
  596. package/src/core/components/toast/styles.ts +0 -77
  597. package/src/core/components/toast/toast.test.tsx +0 -101
  598. package/src/core/components/toast/toast.tsx +0 -198
  599. package/src/core/components/toast/toastContext.ts +0 -7
  600. package/src/core/components/toast/toastLayer.tsx +0 -51
  601. package/src/core/components/toast/toastProvider.tsx +0 -113
  602. package/src/core/components/toast/toastState.ts +0 -6
  603. package/src/core/components/toast/types.ts +0 -26
  604. package/src/core/components/toast/useToast.ts +0 -25
  605. package/src/core/components/tree/__workshop__/basic.perf.ts +0 -19
  606. package/src/core/components/tree/__workshop__/basic.tsx +0 -105
  607. package/src/core/components/tree/__workshop__/index.ts +0 -21
  608. package/src/core/components/tree/__workshop__/tabFromElement.tsx +0 -84
  609. package/src/core/components/tree/helpers.ts +0 -105
  610. package/src/core/components/tree/index.ts +0 -4
  611. package/src/core/components/tree/style.ts +0 -105
  612. package/src/core/components/tree/tree.test.tsx +0 -55
  613. package/src/core/components/tree/tree.tsx +0 -240
  614. package/src/core/components/tree/treeContext.ts +0 -10
  615. package/src/core/components/tree/treeGroup.tsx +0 -28
  616. package/src/core/components/tree/treeItem.test.tsx +0 -65
  617. package/src/core/components/tree/treeItem.tsx +0 -224
  618. package/src/core/components/tree/types.ts +0 -25
  619. package/src/core/components/tree/useTree.ts +0 -17
  620. package/src/core/constants.ts +0 -79
  621. package/src/core/helpers/animation.ts +0 -27
  622. package/src/core/helpers/element.ts +0 -55
  623. package/src/core/helpers/focus.ts +0 -100
  624. package/src/core/helpers/index.ts +0 -4
  625. package/src/core/helpers/scroll.ts +0 -15
  626. package/src/core/hooks/index.ts +0 -12
  627. package/src/core/hooks/useArrayProp.ts +0 -17
  628. package/src/core/hooks/useClickOutside.test.tsx +0 -482
  629. package/src/core/hooks/useClickOutside.ts +0 -118
  630. package/src/core/hooks/useClickOutsideEvent.test.tsx +0 -115
  631. package/src/core/hooks/useClickOutsideEvent.ts +0 -73
  632. package/src/core/hooks/useCustomValidity.ts +0 -13
  633. package/src/core/hooks/useDelayed.test.ts +0 -88
  634. package/src/core/hooks/useDelayedState.ts +0 -36
  635. package/src/core/hooks/useElementRect/__workshop__/example.tsx +0 -32
  636. package/src/core/hooks/useElementRect/__workshop__/index.ts +0 -14
  637. package/src/core/hooks/useElementRect/index.ts +0 -1
  638. package/src/core/hooks/useElementRect/useElementRect.ts +0 -13
  639. package/src/core/hooks/useElementSize.ts +0 -19
  640. package/src/core/hooks/useForwardedRef.ts +0 -19
  641. package/src/core/hooks/useGlobalKeyDown.ts +0 -24
  642. package/src/core/hooks/useIsomorphicEffect.ts +0 -7
  643. package/src/core/hooks/useMatchMedia.ts +0 -28
  644. package/src/core/hooks/useMediaIndex/__workshop__/index.ts +0 -14
  645. package/src/core/hooks/useMediaIndex/__workshop__/test.tsx +0 -14
  646. package/src/core/hooks/useMediaIndex/index.ts +0 -1
  647. package/src/core/hooks/useMediaIndex/useMediaIndex.test.tsx +0 -36
  648. package/src/core/hooks/useMediaIndex/useMediaIndex.ts +0 -102
  649. package/src/core/hooks/useMounted.ts +0 -15
  650. package/src/core/hooks/usePrefersDark.hydration.test.tsx +0 -56
  651. package/src/core/hooks/usePrefersDark.test.tsx +0 -19
  652. package/src/core/hooks/usePrefersDark.ts +0 -16
  653. package/src/core/hooks/usePrefersReducedMotion.hydration.test.tsx +0 -56
  654. package/src/core/hooks/usePrefersReducedMotion.test.tsx +0 -19
  655. package/src/core/hooks/usePrefersReducedMotion.ts +0 -16
  656. package/src/core/index.ts +0 -10
  657. package/src/core/lib/createGlobalScopedContext.ts +0 -36
  658. package/src/core/lib/globalScope.ts +0 -19
  659. package/src/core/lib/isRecord.ts +0 -3
  660. package/src/core/middleware/origin.ts +0 -47
  661. package/src/core/observers/elementSizeObserver.ts +0 -116
  662. package/src/core/observers/index.ts +0 -2
  663. package/src/core/observers/resizeObserver.ts +0 -9
  664. package/src/core/primitives/_selectable/index.ts +0 -1
  665. package/src/core/primitives/_selectable/selectable.tsx +0 -15
  666. package/src/core/primitives/_selectable/style.ts +0 -115
  667. package/src/core/primitives/avatar/__workshop__/asButton.tsx +0 -14
  668. package/src/core/primitives/avatar/__workshop__/index.ts +0 -29
  669. package/src/core/primitives/avatar/__workshop__/stack.tsx +0 -25
  670. package/src/core/primitives/avatar/__workshop__/withinButton.tsx +0 -63
  671. package/src/core/primitives/avatar/__workshop__/withinMenuItem.tsx +0 -70
  672. package/src/core/primitives/avatar/avatar.tsx +0 -200
  673. package/src/core/primitives/avatar/avatarCounter.tsx +0 -91
  674. package/src/core/primitives/avatar/avatarStack.tsx +0 -100
  675. package/src/core/primitives/avatar/index.ts +0 -4
  676. package/src/core/primitives/avatar/styles.ts +0 -167
  677. package/src/core/primitives/avatar/types.ts +0 -17
  678. package/src/core/primitives/badge/__workshop__/index.ts +0 -19
  679. package/src/core/primitives/badge/__workshop__/props.tsx +0 -30
  680. package/src/core/primitives/badge/__workshop__/tones.tsx +0 -21
  681. package/src/core/primitives/badge/badge.test.tsx +0 -16
  682. package/src/core/primitives/badge/badge.tsx +0 -70
  683. package/src/core/primitives/badge/index.ts +0 -1
  684. package/src/core/primitives/badge/styles.ts +0 -20
  685. package/src/core/primitives/badge/types.ts +0 -8
  686. package/src/core/primitives/box/__workshop__/asComponent.tsx +0 -31
  687. package/src/core/primitives/box/__workshop__/index.ts +0 -24
  688. package/src/core/primitives/box/__workshop__/props.tsx +0 -20
  689. package/src/core/primitives/box/__workshop__/responsive.tsx +0 -20
  690. package/src/core/primitives/box/box.test.tsx +0 -142
  691. package/src/core/primitives/box/box.tsx +0 -154
  692. package/src/core/primitives/box/index.ts +0 -1
  693. package/src/core/primitives/button/__workshop__/custom.tsx +0 -51
  694. package/src/core/primitives/button/__workshop__/customIcons.tsx +0 -30
  695. package/src/core/primitives/button/__workshop__/disabled.tsx +0 -74
  696. package/src/core/primitives/button/__workshop__/index.ts +0 -59
  697. package/src/core/primitives/button/__workshop__/labelUploadButton.tsx +0 -36
  698. package/src/core/primitives/button/__workshop__/mixedChildren.tsx +0 -12
  699. package/src/core/primitives/button/__workshop__/props.tsx +0 -55
  700. package/src/core/primitives/button/__workshop__/stacked.tsx +0 -58
  701. package/src/core/primitives/button/__workshop__/styled1.tsx +0 -17
  702. package/src/core/primitives/button/__workshop__/styled2.tsx +0 -19
  703. package/src/core/primitives/button/__workshop__/uploadButton.tsx +0 -28
  704. package/src/core/primitives/button/button.test.tsx +0 -82
  705. package/src/core/primitives/button/button.tsx +0 -210
  706. package/src/core/primitives/button/index.ts +0 -1
  707. package/src/core/primitives/button/styles.ts +0 -117
  708. package/src/core/primitives/card/__workshop__/allTones.tsx +0 -25
  709. package/src/core/primitives/card/__workshop__/asButton.tsx +0 -107
  710. package/src/core/primitives/card/__workshop__/asComponent.tsx +0 -27
  711. package/src/core/primitives/card/__workshop__/checkered.tsx +0 -26
  712. package/src/core/primitives/card/__workshop__/index.ts +0 -18
  713. package/src/core/primitives/card/__workshop__/interactive.tsx +0 -30
  714. package/src/core/primitives/card/__workshop__/listNavigation.tsx +0 -80
  715. package/src/core/primitives/card/__workshop__/props.tsx +0 -53
  716. package/src/core/primitives/card/__workshop__/selected.tsx +0 -94
  717. package/src/core/primitives/card/__workshop__/styled.tsx +0 -14
  718. package/src/core/primitives/card/card.tsx +0 -128
  719. package/src/core/primitives/card/index.ts +0 -2
  720. package/src/core/primitives/card/styles.ts +0 -147
  721. package/src/core/primitives/card/types.ts +0 -11
  722. package/src/core/primitives/checkbox/__workshop__/example.tsx +0 -25
  723. package/src/core/primitives/checkbox/__workshop__/index.ts +0 -13
  724. package/src/core/primitives/checkbox/__workshop__/props.tsx +0 -33
  725. package/src/core/primitives/checkbox/__workshop__/readOnly.tsx +0 -16
  726. package/src/core/primitives/checkbox/__workshop__/tones.tsx +0 -28
  727. package/src/core/primitives/checkbox/checkbox.tsx +0 -73
  728. package/src/core/primitives/checkbox/index.ts +0 -1
  729. package/src/core/primitives/checkbox/styles.ts +0 -128
  730. package/src/core/primitives/code/__workshop__/index.ts +0 -19
  731. package/src/core/primitives/code/__workshop__/opticalAlignment.tsx +0 -48
  732. package/src/core/primitives/code/__workshop__/props.tsx +0 -21
  733. package/src/core/primitives/code/code.tsx +0 -55
  734. package/src/core/primitives/code/index.ts +0 -1
  735. package/src/core/primitives/code/refractor.tsx +0 -20
  736. package/src/core/primitives/code/styles.ts +0 -77
  737. package/src/core/primitives/container/__workshop__/example.tsx +0 -20
  738. package/src/core/primitives/container/__workshop__/index.ts +0 -8
  739. package/src/core/primitives/container/container.tsx +0 -54
  740. package/src/core/primitives/container/index.ts +0 -2
  741. package/src/core/primitives/container/styles.ts +0 -23
  742. package/src/core/primitives/container/types.ts +0 -6
  743. package/src/core/primitives/flex/__workshop__/example.tsx +0 -34
  744. package/src/core/primitives/flex/__workshop__/gap.tsx +0 -25
  745. package/src/core/primitives/flex/__workshop__/index.ts +0 -11
  746. package/src/core/primitives/flex/flex.tsx +0 -64
  747. package/src/core/primitives/flex/index.ts +0 -1
  748. package/src/core/primitives/grid/__workshop__/index.ts +0 -10
  749. package/src/core/primitives/grid/__workshop__/responsive.tsx +0 -54
  750. package/src/core/primitives/grid/grid.test.tsx +0 -80
  751. package/src/core/primitives/grid/grid.tsx +0 -74
  752. package/src/core/primitives/grid/index.ts +0 -1
  753. package/src/core/primitives/heading/__workshop__/index.ts +0 -19
  754. package/src/core/primitives/heading/__workshop__/opticalAlignment.tsx +0 -54
  755. package/src/core/primitives/heading/__workshop__/plain.tsx +0 -32
  756. package/src/core/primitives/heading/heading.tsx +0 -88
  757. package/src/core/primitives/heading/index.ts +0 -1
  758. package/src/core/primitives/heading/styles.ts +0 -64
  759. package/src/core/primitives/heading/types.ts +0 -7
  760. package/src/core/primitives/index.ts +0 -27
  761. package/src/core/primitives/inline/__workshop__/index.ts +0 -8
  762. package/src/core/primitives/inline/__workshop__/plain.tsx +0 -27
  763. package/src/core/primitives/inline/index.ts +0 -1
  764. package/src/core/primitives/inline/inline.test.tsx +0 -51
  765. package/src/core/primitives/inline/inline.tsx +0 -63
  766. package/src/core/primitives/inline/styles.ts +0 -32
  767. package/src/core/primitives/inline/types.ts +0 -6
  768. package/src/core/primitives/kbd/__workshop__/index.ts +0 -8
  769. package/src/core/primitives/kbd/__workshop__/plain.tsx +0 -9
  770. package/src/core/primitives/kbd/index.ts +0 -1
  771. package/src/core/primitives/kbd/kbd.tsx +0 -69
  772. package/src/core/primitives/label/__workshop__/index.ts +0 -19
  773. package/src/core/primitives/label/__workshop__/opticalAlignment.tsx +0 -48
  774. package/src/core/primitives/label/__workshop__/plain.tsx +0 -24
  775. package/src/core/primitives/label/index.ts +0 -1
  776. package/src/core/primitives/label/label.tsx +0 -87
  777. package/src/core/primitives/label/styles.ts +0 -45
  778. package/src/core/primitives/popover/__workshop__/AlignedStory.tsx +0 -77
  779. package/src/core/primitives/popover/__workshop__/MarginsStory.tsx +0 -31
  780. package/src/core/primitives/popover/__workshop__/MatchReferenceWidthStory.tsx +0 -32
  781. package/src/core/primitives/popover/__workshop__/OpenOnMountStory.tsx +0 -11
  782. package/src/core/primitives/popover/__workshop__/PlainStory.tsx +0 -71
  783. package/src/core/primitives/popover/__workshop__/RecursiveStory.tsx +0 -71
  784. package/src/core/primitives/popover/__workshop__/SidePanelStory.tsx +0 -89
  785. package/src/core/primitives/popover/__workshop__/TestStory.tsx +0 -97
  786. package/src/core/primitives/popover/__workshop__/index.ts +0 -49
  787. package/src/core/primitives/popover/constants.ts +0 -22
  788. package/src/core/primitives/popover/floating-ui/size.ts +0 -99
  789. package/src/core/primitives/popover/helpers.ts +0 -31
  790. package/src/core/primitives/popover/index.ts +0 -2
  791. package/src/core/primitives/popover/popover.tsx +0 -511
  792. package/src/core/primitives/popover/popoverCard.tsx +0 -166
  793. package/src/core/primitives/popover/types.ts +0 -7
  794. package/src/core/primitives/radio/__workshop__/example.tsx +0 -63
  795. package/src/core/primitives/radio/__workshop__/index.ts +0 -11
  796. package/src/core/primitives/radio/__workshop__/plain.tsx +0 -28
  797. package/src/core/primitives/radio/index.ts +0 -1
  798. package/src/core/primitives/radio/radio.tsx +0 -51
  799. package/src/core/primitives/radio/styles.ts +0 -117
  800. package/src/core/primitives/select/__workshop__/index.ts +0 -11
  801. package/src/core/primitives/select/__workshop__/plain.tsx +0 -27
  802. package/src/core/primitives/select/__workshop__/readOnly.tsx +0 -23
  803. package/src/core/primitives/select/index.ts +0 -1
  804. package/src/core/primitives/select/select.test.tsx +0 -52
  805. package/src/core/primitives/select/select.tsx +0 -94
  806. package/src/core/primitives/select/styles.ts +0 -166
  807. package/src/core/primitives/spinner/__workshop__/Props.tsx +0 -15
  808. package/src/core/primitives/spinner/__workshop__/index.ts +0 -14
  809. package/src/core/primitives/spinner/index.ts +0 -1
  810. package/src/core/primitives/spinner/spinner.tsx +0 -46
  811. package/src/core/primitives/stack/__workshop__/index.ts +0 -14
  812. package/src/core/primitives/stack/__workshop__/plain.tsx +0 -32
  813. package/src/core/primitives/stack/index.ts +0 -1
  814. package/src/core/primitives/stack/stack.test.tsx +0 -57
  815. package/src/core/primitives/stack/stack.tsx +0 -57
  816. package/src/core/primitives/stack/styles.ts +0 -32
  817. package/src/core/primitives/switch/__workshop__/example.tsx +0 -23
  818. package/src/core/primitives/switch/__workshop__/index.ts +0 -11
  819. package/src/core/primitives/switch/__workshop__/props.tsx +0 -21
  820. package/src/core/primitives/switch/index.ts +0 -1
  821. package/src/core/primitives/switch/styles.ts +0 -173
  822. package/src/core/primitives/switch/switch.tsx +0 -68
  823. package/src/core/primitives/text/__workshop__/colored.tsx +0 -30
  824. package/src/core/primitives/text/__workshop__/example.tsx +0 -39
  825. package/src/core/primitives/text/__workshop__/index.ts +0 -24
  826. package/src/core/primitives/text/__workshop__/opticalAlignment.tsx +0 -48
  827. package/src/core/primitives/text/index.ts +0 -1
  828. package/src/core/primitives/text/styles.ts +0 -74
  829. package/src/core/primitives/text/text.tsx +0 -89
  830. package/src/core/primitives/textArea/__workshop__/index.ts +0 -14
  831. package/src/core/primitives/textArea/__workshop__/plain.tsx +0 -50
  832. package/src/core/primitives/textArea/index.ts +0 -1
  833. package/src/core/primitives/textArea/textArea.tsx +0 -120
  834. package/src/core/primitives/textInput/__workshop__/clearButton.tsx +0 -30
  835. package/src/core/primitives/textInput/__workshop__/customValidity.tsx +0 -17
  836. package/src/core/primitives/textInput/__workshop__/index.ts +0 -44
  837. package/src/core/primitives/textInput/__workshop__/plain.tsx +0 -98
  838. package/src/core/primitives/textInput/__workshop__/readOnly.tsx +0 -9
  839. package/src/core/primitives/textInput/__workshop__/states.tsx +0 -53
  840. package/src/core/primitives/textInput/__workshop__/tones.tsx +0 -277
  841. package/src/core/primitives/textInput/__workshop__/typed.tsx +0 -23
  842. package/src/core/primitives/textInput/index.ts +0 -1
  843. package/src/core/primitives/textInput/textInput.test.tsx +0 -48
  844. package/src/core/primitives/textInput/textInput.tsx +0 -395
  845. package/src/core/primitives/tooltip/__workshop__/customPortal.tsx +0 -102
  846. package/src/core/primitives/tooltip/__workshop__/index.ts +0 -29
  847. package/src/core/primitives/tooltip/__workshop__/overflowingBoundary.tsx +0 -74
  848. package/src/core/primitives/tooltip/__workshop__/props.tsx +0 -107
  849. package/src/core/primitives/tooltip/__workshop__/resizableBoundary.tsx +0 -86
  850. package/src/core/primitives/tooltip/constants.ts +0 -23
  851. package/src/core/primitives/tooltip/index.ts +0 -2
  852. package/src/core/primitives/tooltip/tooltip.test.tsx +0 -452
  853. package/src/core/primitives/tooltip/tooltip.tsx +0 -495
  854. package/src/core/primitives/tooltip/tooltipCard.tsx +0 -109
  855. package/src/core/primitives/tooltip/tooltipDelayGroup/index.ts +0 -4
  856. package/src/core/primitives/tooltip/tooltipDelayGroup/tooltipDelayGroupContext.tsx +0 -11
  857. package/src/core/primitives/tooltip/tooltipDelayGroup/tooltipDelayGroupProvider.tsx +0 -57
  858. package/src/core/primitives/tooltip/tooltipDelayGroup/types.ts +0 -10
  859. package/src/core/primitives/tooltip/tooltipDelayGroup/useTooltipDelayGroup.ts +0 -13
  860. package/src/core/primitives/types.ts +0 -179
  861. package/src/core/styles/border/borderStyle.ts +0 -56
  862. package/src/core/styles/border/index.ts +0 -2
  863. package/src/core/styles/border/types.ts +0 -10
  864. package/src/core/styles/box/boxStyle.ts +0 -69
  865. package/src/core/styles/box/index.ts +0 -2
  866. package/src/core/styles/box/types.ts +0 -11
  867. package/src/core/styles/card/_cardColorStyle.ts +0 -108
  868. package/src/core/styles/card/index.ts +0 -1
  869. package/src/core/styles/flex/flexItemStyle.ts +0 -27
  870. package/src/core/styles/flex/flexStyle.ts +0 -70
  871. package/src/core/styles/flex/index.ts +0 -3
  872. package/src/core/styles/flex/types.ts +0 -25
  873. package/src/core/styles/focusRing/index.ts +0 -25
  874. package/src/core/styles/font/codeFontStyle.ts +0 -13
  875. package/src/core/styles/font/headingFontStyle.ts +0 -13
  876. package/src/core/styles/font/index.ts +0 -6
  877. package/src/core/styles/font/labelFontStyle.ts +0 -13
  878. package/src/core/styles/font/responsiveFont.ts +0 -103
  879. package/src/core/styles/font/textAlignStyle.ts +0 -19
  880. package/src/core/styles/font/textFontStyle.ts +0 -13
  881. package/src/core/styles/font/types.ts +0 -35
  882. package/src/core/styles/grid/gridItemStyle.ts +0 -82
  883. package/src/core/styles/grid/gridStyle.ts +0 -108
  884. package/src/core/styles/grid/index.ts +0 -3
  885. package/src/core/styles/grid/types.ts +0 -37
  886. package/src/core/styles/helpers.ts +0 -72
  887. package/src/core/styles/index.ts +0 -5
  888. package/src/core/styles/input/index.ts +0 -2
  889. package/src/core/styles/input/responsiveInputPaddingStyle.ts +0 -78
  890. package/src/core/styles/input/textInputStyle.ts +0 -263
  891. package/src/core/styles/internal.ts +0 -12
  892. package/src/core/styles/margin/index.ts +0 -2
  893. package/src/core/styles/margin/marginStyle.ts +0 -21
  894. package/src/core/styles/margin/marginsStyle.test.ts +0 -33
  895. package/src/core/styles/margin/types.ts +0 -9
  896. package/src/core/styles/padding/index.ts +0 -2
  897. package/src/core/styles/padding/paddingStyle.test.ts +0 -33
  898. package/src/core/styles/padding/paddingStyle.ts +0 -21
  899. package/src/core/styles/padding/types.ts +0 -12
  900. package/src/core/styles/radius/index.ts +0 -2
  901. package/src/core/styles/radius/radiusStyle.ts +0 -23
  902. package/src/core/styles/radius/types.ts +0 -8
  903. package/src/core/styles/shadow/index.ts +0 -2
  904. package/src/core/styles/shadow/shadowStyle.ts +0 -29
  905. package/src/core/styles/shadow/types.ts +0 -6
  906. package/src/core/styles/types.ts +0 -8
  907. package/src/core/theme/__workshop__/build/Root.tsx +0 -367
  908. package/src/core/theme/__workshop__/build/helpers.ts +0 -46
  909. package/src/core/theme/__workshop__/build/story.tsx +0 -465
  910. package/src/core/theme/__workshop__/canvas.tsx +0 -352
  911. package/src/core/theme/__workshop__/color.tsx +0 -62
  912. package/src/core/theme/__workshop__/debug/story.tsx +0 -408
  913. package/src/core/theme/__workshop__/index.ts +0 -39
  914. package/src/core/theme/__workshop__/layer.tsx +0 -78
  915. package/src/core/theme/__workshop__/nestedProvider.tsx +0 -15
  916. package/src/core/theme/index.ts +0 -5
  917. package/src/core/theme/theme.test.tsx +0 -73
  918. package/src/core/theme/themeColorProvider.tsx +0 -29
  919. package/src/core/theme/themeContext.ts +0 -10
  920. package/src/core/theme/themeProvider.tsx +0 -62
  921. package/src/core/theme/types.ts +0 -12
  922. package/src/core/theme/useRootTheme.ts +0 -17
  923. package/src/core/theme/useTheme.ts +0 -16
  924. package/src/core/types/avatar.ts +0 -14
  925. package/src/core/types/badge.ts +0 -12
  926. package/src/core/types/box.ts +0 -19
  927. package/src/core/types/button.ts +0 -21
  928. package/src/core/types/card.ts +0 -6
  929. package/src/core/types/component.ts +0 -32
  930. package/src/core/types/dialog.ts +0 -4
  931. package/src/core/types/flex.ts +0 -30
  932. package/src/core/types/grid.ts +0 -14
  933. package/src/core/types/gridItem.ts +0 -29
  934. package/src/core/types/index.ts +0 -15
  935. package/src/core/types/placement.ts +0 -18
  936. package/src/core/types/popover.ts +0 -4
  937. package/src/core/types/radius.ts +0 -4
  938. package/src/core/types/selectable.ts +0 -6
  939. package/src/core/types/text.ts +0 -4
  940. package/src/core/utils/arrow/arrow.tsx +0 -123
  941. package/src/core/utils/arrow/cmds.ts +0 -91
  942. package/src/core/utils/arrow/index.ts +0 -1
  943. package/src/core/utils/boundaryElement/__workshop__/index.ts +0 -14
  944. package/src/core/utils/boundaryElement/__workshop__/plain.tsx +0 -19
  945. package/src/core/utils/boundaryElement/boundaryElement.test.tsx +0 -100
  946. package/src/core/utils/boundaryElement/boundaryElementContext.ts +0 -7
  947. package/src/core/utils/boundaryElement/boundaryElementProvider.tsx +0 -24
  948. package/src/core/utils/boundaryElement/index.ts +0 -3
  949. package/src/core/utils/boundaryElement/types.ts +0 -7
  950. package/src/core/utils/boundaryElement/useBoundaryElement.ts +0 -26
  951. package/src/core/utils/conditionalWrapper/conditionalWrapper.tsx +0 -21
  952. package/src/core/utils/conditionalWrapper/index.ts +0 -1
  953. package/src/core/utils/elementQuery/__workshop__/customMedia.tsx +0 -30
  954. package/src/core/utils/elementQuery/__workshop__/index.ts +0 -14
  955. package/src/core/utils/elementQuery/elementQuery.tsx +0 -53
  956. package/src/core/utils/elementQuery/helpers.ts +0 -27
  957. package/src/core/utils/elementQuery/index.ts +0 -1
  958. package/src/core/utils/errorBoundary.tsx +0 -48
  959. package/src/core/utils/getElementRef.ts +0 -26
  960. package/src/core/utils/index.ts +0 -9
  961. package/src/core/utils/layer/__workshop__/_debug.tsx +0 -17
  962. package/src/core/utils/layer/__workshop__/index.ts +0 -24
  963. package/src/core/utils/layer/__workshop__/multipleRoots.tsx +0 -49
  964. package/src/core/utils/layer/__workshop__/nested.tsx +0 -98
  965. package/src/core/utils/layer/__workshop__/responsiveZOffset.tsx +0 -13
  966. package/src/core/utils/layer/getLayerContext.test.ts +0 -30
  967. package/src/core/utils/layer/getLayerContext.ts +0 -21
  968. package/src/core/utils/layer/index.ts +0 -4
  969. package/src/core/utils/layer/layer.test.tsx +0 -108
  970. package/src/core/utils/layer/layer.tsx +0 -98
  971. package/src/core/utils/layer/layerContext.ts +0 -7
  972. package/src/core/utils/layer/layerProvider.tsx +0 -111
  973. package/src/core/utils/layer/types.ts +0 -9
  974. package/src/core/utils/layer/useLayer.ts +0 -26
  975. package/src/core/utils/portal/__workshop__/index.ts +0 -14
  976. package/src/core/utils/portal/__workshop__/named.tsx +0 -63
  977. package/src/core/utils/portal/index.ts +0 -4
  978. package/src/core/utils/portal/portal.test.tsx +0 -103
  979. package/src/core/utils/portal/portal.ts +0 -32
  980. package/src/core/utils/portal/portalContext.ts +0 -31
  981. package/src/core/utils/portal/portalProvider.tsx +0 -47
  982. package/src/core/utils/portal/types.ts +0 -9
  983. package/src/core/utils/portal/usePortal.ts +0 -25
  984. package/src/core/utils/spanWithTextOverflow.tsx +0 -10
  985. package/src/core/utils/srOnly/index.ts +0 -1
  986. package/src/core/utils/srOnly/srOnly.tsx +0 -36
  987. package/src/core/utils/virtualList/__workshop__/changingProps.tsx +0 -36
  988. package/src/core/utils/virtualList/__workshop__/elementScroll.tsx +0 -24
  989. package/src/core/utils/virtualList/__workshop__/index.ts +0 -29
  990. package/src/core/utils/virtualList/__workshop__/infiniteList.tsx +0 -48
  991. package/src/core/utils/virtualList/__workshop__/windowScrolll.tsx +0 -22
  992. package/src/core/utils/virtualList/index.ts +0 -1
  993. package/src/core/utils/virtualList/virtualList.tsx +0 -200
  994. package/src/theme/build/_deprecated/color/_selectable/createSelectableTones.ts +0 -76
  995. package/src/theme/build/_deprecated/color/_solid/createSolidTones.ts +0 -54
  996. package/src/theme/build/_deprecated/color/button/createButtonModes.ts +0 -22
  997. package/src/theme/build/_deprecated/color/button/createButtonTones.ts +0 -55
  998. package/src/theme/build/_deprecated/color/card/createCardStates.ts +0 -60
  999. package/src/theme/build/_deprecated/color/color.test.ts +0 -63
  1000. package/src/theme/build/_deprecated/color/defaults.ts +0 -390
  1001. package/src/theme/build/_deprecated/color/factory.ts +0 -142
  1002. package/src/theme/build/_deprecated/color/index.ts +0 -1
  1003. package/src/theme/build/_deprecated/color/input/createInputModes.ts +0 -81
  1004. package/src/theme/build/_deprecated/color/muted/createMuted.ts +0 -54
  1005. package/src/theme/build/_deprecated/color/spot/createSpot.ts +0 -20
  1006. package/src/theme/build/buildColorTheme.test.ts +0 -183
  1007. package/src/theme/build/buildColorTheme.ts +0 -499
  1008. package/src/theme/build/buildTheme.test.ts +0 -87
  1009. package/src/theme/build/buildTheme.ts +0 -36
  1010. package/src/theme/build/colorToken/colorToken.ts +0 -19
  1011. package/src/theme/build/colorToken/compileColorToken.ts +0 -21
  1012. package/src/theme/build/colorToken/index.ts +0 -2
  1013. package/src/theme/build/colorToken/types.ts +0 -6
  1014. package/src/theme/build/index.ts +0 -3
  1015. package/src/theme/build/lib/color-fns/blend/index.ts +0 -3
  1016. package/src/theme/build/lib/color-fns/blend/mix.ts +0 -21
  1017. package/src/theme/build/lib/color-fns/blend/multiply.ts +0 -18
  1018. package/src/theme/build/lib/color-fns/blend/screen.ts +0 -18
  1019. package/src/theme/build/lib/color-fns/color-fns.test.ts +0 -68
  1020. package/src/theme/build/lib/color-fns/contrastRatio.ts +0 -31
  1021. package/src/theme/build/lib/color-fns/convert.ts +0 -150
  1022. package/src/theme/build/lib/color-fns/index.ts +0 -6
  1023. package/src/theme/build/lib/color-fns/parse.ts +0 -60
  1024. package/src/theme/build/lib/color-fns/rgba.ts +0 -10
  1025. package/src/theme/build/lib/color-fns/types.ts +0 -28
  1026. package/src/theme/build/lib/isRecord.ts +0 -3
  1027. package/src/theme/build/lib/lazy.ts +0 -30
  1028. package/src/theme/build/lib/utils.ts +0 -19
  1029. package/src/theme/build/merge.ts +0 -26
  1030. package/src/theme/build/mixThemeColor.test.ts +0 -21
  1031. package/src/theme/build/mixThemeColor.ts +0 -53
  1032. package/src/theme/build/renderColorTheme.ts +0 -532
  1033. package/src/theme/build/renderColorValue.ts +0 -85
  1034. package/src/theme/build/resolveColorTokens.ts +0 -268
  1035. package/src/theme/build/theme.test.ts +0 -27
  1036. package/src/theme/config/helpers.ts +0 -55
  1037. package/src/theme/config/index.ts +0 -4
  1038. package/src/theme/config/system.ts +0 -115
  1039. package/src/theme/config/tokens/color/index.ts +0 -1
  1040. package/src/theme/config/tokens/color/types.ts +0 -133
  1041. package/src/theme/config/tokens/index.ts +0 -4
  1042. package/src/theme/config/tokens/parseTokenKey.test.ts +0 -64
  1043. package/src/theme/config/tokens/parseTokenKey.ts +0 -67
  1044. package/src/theme/config/tokens/parseTokenValue.test.ts +0 -42
  1045. package/src/theme/config/tokens/parseTokenValue.ts +0 -133
  1046. package/src/theme/config/tokens/types.ts +0 -53
  1047. package/src/theme/config/types.ts +0 -46
  1048. package/src/theme/defaults/colorPalette.ts +0 -5
  1049. package/src/theme/defaults/colorTokens.ts +0 -648
  1050. package/src/theme/defaults/config.ts +0 -84
  1051. package/src/theme/defaults/fonts.ts +0 -227
  1052. package/src/theme/getScopedTheme.ts +0 -98
  1053. package/src/theme/index.ts +0 -5
  1054. package/src/theme/system/avatar.ts +0 -14
  1055. package/src/theme/system/color/_constants.ts +0 -45
  1056. package/src/theme/system/color/_helpers.ts +0 -24
  1057. package/src/theme/system/color/_system.ts +0 -40
  1058. package/src/theme/system/color/avatar.ts +0 -15
  1059. package/src/theme/system/color/badge.ts +0 -16
  1060. package/src/theme/system/color/button.ts +0 -17
  1061. package/src/theme/system/color/color.ts +0 -34
  1062. package/src/theme/system/color/index.ts +0 -13
  1063. package/src/theme/system/color/input.ts +0 -25
  1064. package/src/theme/system/color/kbd.ts +0 -8
  1065. package/src/theme/system/color/selectable.ts +0 -12
  1066. package/src/theme/system/color/shadow.ts +0 -7
  1067. package/src/theme/system/color/state.ts +0 -43
  1068. package/src/theme/system/color/syntax.ts +0 -41
  1069. package/src/theme/system/css.ts +0 -14
  1070. package/src/theme/system/focusRing.ts +0 -7
  1071. package/src/theme/system/font.ts +0 -52
  1072. package/src/theme/system/index.ts +0 -11
  1073. package/src/theme/system/input.ts +0 -33
  1074. package/src/theme/system/layer.ts +0 -8
  1075. package/src/theme/system/shadow.ts +0 -19
  1076. package/src/theme/system/styles.ts +0 -13
  1077. package/src/theme/system/theme.ts +0 -138
  1078. package/src/theme/system/v0/avatar.ts +0 -10
  1079. package/src/theme/system/v0/color/_generic.ts +0 -35
  1080. package/src/theme/system/v0/color/_system.ts +0 -17
  1081. package/src/theme/system/v0/color/base.ts +0 -21
  1082. package/src/theme/system/v0/color/button.ts +0 -42
  1083. package/src/theme/system/v0/color/card.ts +0 -19
  1084. package/src/theme/system/v0/color/color.ts +0 -40
  1085. package/src/theme/system/v0/color/index.ts +0 -11
  1086. package/src/theme/system/v0/color/input.ts +0 -34
  1087. package/src/theme/system/v0/color/muted.ts +0 -26
  1088. package/src/theme/system/v0/color/selectable.ts +0 -31
  1089. package/src/theme/system/v0/color/solid.ts +0 -26
  1090. package/src/theme/system/v0/color/spot.ts +0 -13
  1091. package/src/theme/system/v0/index.ts +0 -3
  1092. package/src/theme/system/v0/input.ts +0 -23
  1093. package/src/theme/versioning/getTheme_v2.ts +0 -57
  1094. package/src/theme/versioning/index.ts +0 -5
  1095. package/src/theme/versioning/is_v0.ts +0 -6
  1096. package/src/theme/versioning/is_v2.ts +0 -6
  1097. package/src/theme/versioning/themeColor_v0_v2.ts +0 -243
  1098. package/src/theme/versioning/themeColor_v2_v2_9.ts +0 -49
  1099. package/src/theme/versioning/v0_v2.ts +0 -94
  1100. package/src/theme/versioning/v2_v0.ts +0 -135
@@ -0,0 +1 @@
1
+ {"version":3,"file":"advanced.entries.js","names":[],"sources":["../../../src/library/entries/advanced.entries.ts"],"sourcesContent":["/**\n * KIT LIBRARY · Advanced patterns — the stress tests. Each entry pushes one capability of the schema language to\n * its edge (depth, polymorphism, conditionals, globals, locales, audiences, breakpoints, references, validation…).\n * Where the language can't express the real requirement, the closest honest model is used and the gap is written\n * down as \"SCHEMA GAP:\" in `notes.pitfalls` — those lines are the backlog for the schema language.\n */\nimport type { FieldSchema, TypeSchema } from \"../../schema/types\";\nimport type { KitEntry } from \"../types\";\n\nconst pic = (seed: string, alt: string, w = 1600, h = 1000) => ({\n url: `https://picsum.photos/seed/${seed}/${w}/${h}`,\n alt,\n name: `${seed}.jpg`,\n width: w * 2,\n height: h * 2,\n});\nconst KEY_PATTERN = \"^[a-z][a-z0-9-]*$\";\nconst KEY_MESSAGE = \"Use lowercase letters, numbers and hyphens, starting with a letter, like grate-xl.\";\n\n/* ════════════════════════════ 1. Page builder, six levels deep ════════════════════════════\n * Guide › Tab › Columns (block) › Column › Accordion (block) › Item › Card › Button\n * The Columns and Accordion blocks are ENTRY-LOCAL (KitEntry.blocks) — the kit page resolves slot children\n * against them before the example BLOCK_LIBRARY.\n */\nconst guideCard: FieldSchema = {\n name: \"card\",\n title: \"Card\",\n type: \"object\",\n icon: \"layout-cards\",\n openMode: \"drill\",\n fields: [\n { name: \"image\", title: \"Image\", type: \"image\" },\n { name: \"eyebrow\", title: \"Eyebrow\", type: \"string\", validation: { max: 24 } },\n { name: \"title\", title: \"Card title\", type: \"string\", validation: { required: true, recommendedMax: 48 }, ai: true },\n { name: \"body\", title: \"Body\", type: \"text\", rows: 3, validation: { recommendedMax: 220 }, ai: true },\n { name: \"button\", title: \"Button\", type: \"button\" },\n ],\n};\n\nconst accordionBlock: TypeSchema = {\n name: \"accordionBlock\",\n title: \"Accordion\",\n kind: \"block\",\n icon: \"layout-rows\",\n category: \"Layout\",\n description: \"Expandable items, each opening to a card\",\n variants: [{ id: \"lined\", name: \"Lined\" }, { id: \"boxed\", name: \"Boxed\" }],\n preview: { title: \"heading\", fallback: \"Untitled accordion\" },\n fields: [\n { name: \"heading\", title: \"Heading\", type: \"string\", validation: { recommendedMax: 60 } },\n { name: \"allowMultiple\", title: \"Allow several open at once\", type: \"boolean\" },\n {\n name: \"items\",\n title: \"Items\",\n type: \"array\",\n itemNoun: \"item\",\n validation: { min: 1, max: 10 },\n of: [\n {\n name: \"accordionItem\",\n title: \"Item\",\n type: \"object\",\n icon: \"chevron-down\",\n preview: { title: \"title\", subtitle: \"summary\", fallback: \"Untitled item\" },\n fields: [\n { name: \"title\", title: \"Item title\", type: \"string\", validation: { required: true, max: 60 } },\n { name: \"summary\", title: \"Summary\", type: \"string\", validation: { max: 90 } },\n { name: \"icon\", title: \"Icon\", type: \"icon\" },\n { name: \"isOpen\", title: \"Open by default\", type: \"boolean\" },\n guideCard,\n ],\n },\n ],\n },\n ],\n initialValue: { heading: \"\", allowMultiple: false, items: [] },\n};\n\nconst columnsBlock: TypeSchema = {\n name: \"layoutColumns\",\n title: \"Columns\",\n kind: \"block\",\n icon: \"columns-3\",\n category: \"Layout\",\n description: \"Two to four columns, each holding its own blocks\",\n variants: [\n { id: \"even\", name: \"Even\" },\n { id: \"wide-left\", name: \"Wide left\", description: \"2/3 + 1/3\" },\n { id: \"wide-right\", name: \"Wide right\", description: \"1/3 + 2/3\" },\n ],\n preview: { title: \"label\", fallback: \"Untitled columns\" },\n fields: [\n { name: \"label\", title: \"Name\", type: \"string\", validation: { max: 40 }, description: \"Only editors see this.\" },\n {\n name: \"columns\",\n title: \"Columns\",\n type: \"array\",\n itemNoun: \"column\",\n validation: { min: 1, max: 4 },\n of: [\n {\n name: \"column\",\n title: \"Column\",\n type: \"object\",\n icon: \"layout-columns\",\n preview: { title: \"label\", fallback: \"Untitled column\" },\n fields: [\n { name: \"label\", title: \"Name\", type: \"string\", validation: { max: 32 }, description: \"Only editors see this.\" },\n {\n name: \"alignment\",\n title: \"Alignment\",\n type: \"select\",\n layout: \"segmented\",\n initialValue: \"top\",\n options: [{ value: \"top\", label: \"Top\" }, { value: \"center\", label: \"Middle\" }, { value: \"bottom\", label: \"Bottom\" }],\n },\n {\n name: \"content\",\n title: \"Content\",\n type: \"slot\",\n validation: { max: 6 },\n of: { type: \"block\", allow: [\"accordionBlock\", \"textBlock\", \"imageBlock\", \"statBlock\", \"featureBlock\", \"quoteBlock\", \"ctaCard\", \"videoBlock\"] },\n },\n ],\n },\n ],\n },\n {\n name: \"gap\",\n title: \"Gap\",\n type: \"select\",\n layout: \"segmented\",\n initialValue: \"md\",\n options: [{ value: \"sm\", label: \"S\" }, { value: \"md\", label: \"M\" }, { value: \"lg\", label: \"L\" }],\n },\n { name: \"useTabletStack\", title: \"Stack on tablets\", type: \"boolean\", description: \"Columns stack below 1024px instead of 768px.\" },\n ],\n};\n\nconst guideSchema: TypeSchema = {\n name: \"guideSection\",\n title: \"Guide\",\n kind: \"block\",\n icon: \"book-2\",\n category: \"Long-form & docs\",\n description: \"Tabbed guide: each tab holds columns, accordions and cards\",\n variants: [{ id: \"underline\", name: \"Underline tabs\" }, { id: \"side\", name: \"Side tabs\" }],\n preview: { title: \"heading\", subtitle: \"eyebrow\" },\n groups: [\n { name: \"content\", title: \"Content\", default: true },\n { name: \"design\", title: \"Design\" },\n ],\n fields: [\n { name: \"eyebrow\", title: \"Eyebrow\", type: \"string\", group: \"content\", validation: { max: 32 } },\n { name: \"heading\", title: \"Heading\", type: \"string\", group: \"content\", validation: { required: true, recommendedMax: 60 }, ai: true },\n { name: \"intro\", title: \"Intro\", type: \"text\", rows: 2, group: \"content\", validation: { recommendedMax: 180 } },\n {\n name: \"tabs\",\n title: \"Tabs\",\n type: \"array\",\n group: \"content\",\n itemNoun: \"tab\",\n validation: { min: 2, max: 6 },\n of: [\n {\n name: \"guideTab\",\n title: \"Tab\",\n type: \"object\",\n icon: \"layout-list\",\n preview: { title: \"label\", fallback: \"Untitled tab\" },\n fields: [\n { name: \"label\", title: \"Tab label\", type: \"string\", validation: { required: true, max: 24 } },\n { name: \"icon\", title: \"Icon\", type: \"icon\" },\n {\n name: \"content\",\n title: \"Content\",\n type: \"slot\",\n validation: { min: 1, max: 6 },\n of: { type: \"block\", allow: [\"layoutColumns\", \"accordionBlock\", \"textBlock\", \"imageBlock\", \"videoBlock\", \"ctaCard\"] },\n },\n ],\n },\n ],\n },\n {\n name: \"theme\",\n title: \"Theme\",\n type: \"select\",\n group: \"design\",\n layout: \"segmented\",\n initialValue: \"light\",\n options: [{ value: \"light\", label: \"Light\" }, { value: \"warm\", label: \"Warm\" }, { value: \"dark\", label: \"Dark\" }],\n },\n { name: \"anchor\", title: \"Anchor\", type: \"string\", group: \"design\", advanced: true, validation: { pattern: KEY_PATTERN, patternMessage: KEY_MESSAGE } },\n ],\n};\n\nconst btn = (label: string, href: string, style: \"primary\" | \"secondary\" | \"outline\" | \"link\" = \"link\", title?: string) => ({\n label,\n href,\n type: href.startsWith(\"http\") ? \"url\" : \"page\",\n ...(title ? { title } : {}),\n style,\n arrow: style !== \"outline\",\n});\n\nconst guideValue = {\n _variant: \"underline\",\n eyebrow: \"Care guide\",\n heading: \"Cast iron, start to finish.\",\n intro: \"Season it once over fire, cook in it every day, bring it back from anything. Everything we teach in the workshop, in three tabs.\",\n tabs: [\n {\n _key: \"tb1\",\n label: \"Seasoning\",\n icon: \"flame\",\n content: [\n {\n _key: \"cl1\",\n _type: \"layoutColumns\",\n _variant: \"wide-left\",\n label: \"Steps and kit\",\n gap: \"lg\",\n columns: [\n {\n _key: \"co1\",\n label: \"Steps\",\n alignment: \"top\",\n content: [\n {\n _key: \"ac1\",\n _type: \"accordionBlock\",\n _variant: \"lined\",\n heading: \"Season over fire in four steps\",\n allowMultiple: false,\n items: [\n {\n _key: \"it1\",\n title: \"Scrub it back\",\n summary: \"Hot water and a chainmail scrubber. No soap needed.\",\n icon: \"droplet\",\n isOpen: true,\n card: {\n image: pic(\"chainmail-scrub\", \"A chainmail scrubber working over a wet skillet\"),\n eyebrow: \"Step 1\",\n title: \"Start with a bare, dry pan\",\n body: \"Scrub under hot water until the surface feels even, then dry it over the flame for two minutes so no water hides in the pores.\",\n button: btn(\"Shop the scrubber\", \"/products/chainmail-scrubber\", \"link\", \"Chainmail scrubber\"),\n },\n },\n {\n _key: \"it2\",\n title: \"Oil, then wipe it off\",\n summary: \"The thinnest coat of flaxseed oil you can manage.\",\n icon: \"droplet-half\",\n card: {\n image: pic(\"flax-wipe\", \"A lint-free cloth wiping oil from a warm skillet\"),\n eyebrow: \"Step 2\",\n title: \"Thin coats, every time\",\n body: \"Rub in half a teaspoon, then wipe as if you made a mistake. Thick oil turns sticky instead of hard.\",\n button: btn(\"Why flaxseed\", \"/journal/seasoning-cast-iron-open-fire\", \"link\", \"Seasoning cast iron over an open fire\"),\n },\n },\n {\n _key: \"it3\",\n title: \"Heat it upside down\",\n summary: \"45 minutes over medium coals.\",\n icon: \"campfire\",\n card: {\n image: pic(\"upside-down-coals\", \"A skillet upside down on the Cable Fold grate above glowing coals\"),\n eyebrow: \"Step 3\",\n title: \"Let the fire do the work\",\n body: \"Set the pan face down on the grate over medium coals. Smoke means it's working; keep going until it stops, about 45 minutes.\",\n button: btn(\"Shop the Cable Fold\", \"/products/cable-fold\", \"primary\", \"Cable Fold Grill\"),\n },\n },\n {\n _key: \"it4\",\n title: \"Repeat three times\",\n summary: \"Then fry eggs for a week.\",\n icon: \"repeat\",\n card: {\n eyebrow: \"Step 4\",\n title: \"Three coats, then cook\",\n body: \"Three rounds builds a surface that releases an egg on the first try. Daily cooking does the rest.\",\n button: btn(\"Watch the full method\", \"/journal/seasoning-cast-iron-open-fire#film\", \"outline\"),\n },\n },\n ],\n },\n ],\n },\n {\n _key: \"co2\",\n label: \"Kit\",\n alignment: \"top\",\n content: [\n { _key: \"im1\", _type: \"imageBlock\", _variant: \"cover\", image: pic(\"seasoning-kit\", \"Flaxseed oil, a cloth and a scrubber laid out on a wooden board\", 900, 1100), caption: \"The seasoning kit, $24\" },\n { _key: \"ct1\", _type: \"ctaCard\", _variant: \"solid\", heading: \"Everything for step one\", body: \"Oil, cloth and a scrubber in one tin.\", button: btn(\"Shop the kit\", \"/products/seasoning-kit\", \"primary\", \"Seasoning kit\"), tone: \"#F6F1EA\" },\n ],\n },\n ],\n },\n { _key: \"tx1\", _type: \"textBlock\", heading: \"Already seasoned?\", body: \"<p>Every Caldera pan ships with three coats. You can skip straight to the Cooking tab.</p>\" },\n ],\n },\n {\n _key: \"tb2\",\n label: \"Cooking\",\n icon: \"chef-hat\",\n content: [\n {\n _key: \"cl2\",\n _type: \"layoutColumns\",\n _variant: \"even\",\n label: \"First week\",\n gap: \"md\",\n columns: [\n {\n _key: \"co3\",\n label: \"First cooks\",\n content: [\n {\n _key: \"ac2\",\n _type: \"accordionBlock\",\n _variant: \"boxed\",\n heading: \"Your first week\",\n allowMultiple: true,\n items: [\n {\n _key: \"it5\",\n title: \"Day 1: fried eggs\",\n icon: \"egg\",\n card: { title: \"Butter, medium heat, patience\", body: \"Preheat for five minutes. If the butter browns at once, it's too hot.\", button: btn(\"Get the recipe\", \"/recipes/campfire-eggs\", \"link\") },\n },\n {\n _key: \"it6\",\n title: \"Day 3: smash burgers\",\n icon: \"meat\",\n card: { title: \"Ripping hot, no oil\", body: \"The fat renders and seasons the pan for you.\", button: btn(\"Get the recipe\", \"/recipes/smash-burgers\", \"link\") },\n },\n ],\n },\n ],\n },\n {\n _key: \"co4\",\n label: \"Proof\",\n alignment: \"center\",\n content: [\n { _key: \"st1\", _type: \"statBlock\", value: \"900°F\", label: \"Safe up to\", icon: \"flame\" },\n { _key: \"qt1\", _type: \"quoteBlock\", quote: \"By day five my eggs slid like they were on Teflon.\", author: \"Maya Reyes\", role: \"Backcountry guide, Montana\", rating: 5 },\n ],\n },\n ],\n },\n ],\n },\n {\n _key: \"tb3\",\n label: \"Restoring\",\n icon: \"tool\",\n content: [\n { _key: \"vd1\", _type: \"videoBlock\", title: \"Bringing back a rusted skillet\", video: { url: \"https://www.youtube.com/watch?v=aqz-KE-bpKQ\" }, poster: pic(\"rust-restore\", \"A rusted skillet beside the same skillet restored\"), autoplay: false },\n {\n _key: \"ac3\",\n _type: \"accordionBlock\",\n _variant: \"lined\",\n heading: \"Fix it yourself\",\n items: [\n { _key: \"it7\", title: \"Orange rust spots\", icon: \"alert-triangle\", card: { title: \"Steel wool, then season\", body: \"Scrub to grey metal, rinse, dry over the fire and give it one coat.\", button: btn(\"Care kit\", \"/products/seasoning-kit\", \"link\") } },\n { _key: \"it8\", title: \"Sticky surface\", icon: \"droplet\", card: { title: \"Too much oil\", body: \"Bake it off: 45 minutes upside down over high coals, then one thin coat.\" } },\n { _key: \"it9\", title: \"A crack\", icon: \"bolt\", card: { title: \"That's on us\", body: \"Cracks are covered for life. Send a photo and we'll ship a new one.\", button: btn(\"Start a warranty claim\", \"/warranty\", \"primary\", \"Warranty\") } },\n ],\n },\n ],\n },\n ],\n theme: \"warm\",\n anchor: \"care-guide\",\n};\n\n/* ════════════════════════════ 2. Polymorphic module list ════════════════════════════ */\nconst moduleTypes: FieldSchema[] = [\n {\n name: \"textModule\",\n title: \"Text\",\n type: \"object\",\n icon: \"typography\",\n preview: { title: \"heading\", subtitle: \"body\", fallback: \"Untitled text\" },\n fields: [\n { name: \"heading\", title: \"Heading\", type: \"string\", validation: { recommendedMax: 70 } },\n { name: \"body\", title: \"Body\", type: \"richtext\", validation: { required: true } },\n ],\n },\n {\n name: \"imageModule\",\n title: \"Image\",\n type: \"object\",\n icon: \"photo\",\n preview: { title: \"caption\", media: \"image\", fallback: \"Untitled image\" },\n fields: [\n { name: \"image\", title: \"Image\", type: \"image\", validation: { required: true } },\n { name: \"caption\", title: \"Caption\", type: \"string\", validation: { max: 160 } },\n { name: \"credit\", title: \"Credit\", type: \"string\", validation: { max: 60 } },\n { name: \"width\", title: \"Width\", type: \"select\", layout: \"segmented\", initialValue: \"column\", options: [{ value: \"column\", label: \"Text column\" }, { value: \"wide\", label: \"Wide\" }, { value: \"full\", label: \"Full bleed\" }] },\n ],\n },\n {\n name: \"quoteModule\",\n title: \"Pull quote\",\n type: \"object\",\n icon: \"quote\",\n preview: { title: \"quote\", subtitle: \"attribution\", fallback: \"Untitled quote\" },\n fields: [\n { name: \"quote\", title: \"Quote\", type: \"text\", rows: 3, validation: { required: true, recommendedMax: 160 } },\n { name: \"attribution\", title: \"Who said it\", type: \"string\", validation: { max: 60 } },\n { name: \"role\", title: \"Role\", type: \"string\", validation: { max: 60 } },\n ],\n },\n {\n name: \"statModule\",\n title: \"Big number\",\n type: \"object\",\n icon: \"chart-bar\",\n preview: { title: \"value\", subtitle: \"label\", fallback: \"Untitled number\" },\n fields: [\n { name: \"value\", title: \"Number\", type: \"string\", validation: { required: true, max: 12 } },\n { name: \"label\", title: \"What it counts\", type: \"string\", validation: { required: true, max: 80 } },\n { name: \"source\", title: \"Source\", type: \"link\" },\n ],\n },\n {\n name: \"videoModule\",\n title: \"Video\",\n type: \"object\",\n icon: \"player-play\",\n preview: { title: \"title\", media: \"poster\", fallback: \"Untitled video\" },\n fields: [\n { name: \"title\", title: \"Title\", type: \"string\", validation: { required: true, max: 80 } },\n { name: \"video\", title: \"Video\", type: \"video\", validation: { required: true } },\n { name: \"poster\", title: \"Poster\", type: \"image\" },\n { name: \"transcript\", title: \"Transcript\", type: \"richtext\", description: \"Required for interviews.\" },\n ],\n },\n {\n name: \"galleryModule\",\n title: \"Gallery\",\n type: \"object\",\n icon: \"layout-grid\",\n preview: { title: \"caption\", fallback: \"Untitled gallery\" },\n fields: [\n { name: \"images\", title: \"Images\", type: \"array\", arrayLayout: \"grid\", validation: { min: 2, max: 12 }, of: [{ name: \"photo\", title: \"Photo\", type: \"image\" }] },\n { name: \"layout\", title: \"Layout\", type: \"select\", layout: \"segmented\", initialValue: \"grid\", options: [{ value: \"grid\", label: \"Grid\" }, { value: \"carousel\", label: \"Carousel\" }] },\n { name: \"caption\", title: \"Caption\", type: \"string\", validation: { max: 160 } },\n ],\n },\n {\n name: \"calloutModule\",\n title: \"Callout\",\n type: \"object\",\n icon: \"info-square-rounded\",\n preview: { title: \"title\", subtitle: \"tone\", fallback: \"Untitled callout\" },\n fields: [\n { name: \"tone\", title: \"Tone\", type: \"select\", layout: \"segmented\", initialValue: \"note\", options: [{ value: \"note\", label: \"Note\" }, { value: \"correction\", label: \"Correction\" }, { value: \"context\", label: \"Context\" }] },\n { name: \"title\", title: \"Title\", type: \"string\", validation: { max: 60 } },\n { name: \"body\", title: \"Body\", type: \"text\", rows: 3, validation: { required: true, max: 400 } },\n ],\n },\n {\n name: \"relatedModule\",\n title: \"Related story\",\n type: \"object\",\n icon: \"news\",\n preview: { title: \"label\", fallback: \"Untitled related story\" },\n fields: [\n { name: \"story\", title: \"Story\", type: \"reference\", reference: { to: [\"col_journal\"] }, validation: { required: true } },\n { name: \"label\", title: \"Label\", type: \"string\", validation: { max: 24 }, placeholder: \"Read next\" },\n ],\n },\n];\n\n/* ════════════════════════════ 13. Overlay content blocks (shared slot allow list) ════════════════════════════ */\nconst OVERLAY_BLOCKS = [\"textBlock\", \"imageBlock\", \"videoBlock\", \"ctaCard\", \"quoteBlock\", \"featureBlock\"];\n\nexport const ENTRIES: KitEntry[] = [\n /* ───────────────────────────── 1. Page builder six deep ───────────────────────────── */\n {\n id: \"page-builder-six-deep\",\n label: \"Page builder, six levels deep\",\n proves: \"Guide › Tab › Columns › Column › Accordion › Item › Card › Button — slots inside arrays inside slots · breadcrumb folding + Pathway\",\n category: \"Advanced patterns\",\n tags: [\"deep-nesting\", \"slots\", \"repeater\", \"variants\", \"media-heavy\"],\n brand: \"Caldera\",\n previewLayout: \"tabs\",\n schema: guideSchema,\n blocks: [columnsBlock, accordionBlock],\n value: guideValue,\n presence: { \"tabs.0.content.0.columns.0.content.0.items.2.card.title\": [{ name: \"Priya Nair\", avatar: \"https://i.pravatar.cc/96?img=47\", status: \"editing\" }] },\n comments: { \"tabs.0.content.0.columns.0.content.0.items.1.card.body\": 2 },\n notes: {\n why:\n \"Real page builders alternate between ARRAYS (items the section owns: tabs, columns, accordion items) and SLOTS (any block from the library: columns, accordion, text, image). Each slot is a seam where the content stops belonging to this section and becomes a reusable block with its own schema and variants; each array is where content is specific to its parent. The card is an object (always one per item), the button is the one-unit button screen. Depth is legal here because every level is a different KIND of thing with its own preview row — drill-in keeps each frame small.\",\n sanity:\n \"Sanity: guideSection { tabs[] { content: array of [columns, accordion, textBlock…] } }, columns { columns[] { content: array of blocks } }, accordion { items[] { card { cta } } }. Sanity renders this as nested modals/panes; it has no global Layers tree, and deep paths are hard to link to. Our drill-in path is addressable (tabs.0.content.0.columns.0.content.0.items.2.card.cta).\",\n htmlSignals: [\n \"role=\\\"tablist\\\" with role=\\\"tabpanel\\\" siblings, each panel holding a CSS grid/flex row of columns\",\n \"<details>/<summary> or buttons with aria-expanded inside a column\",\n \"Expanded panels containing a card (image + heading + paragraph + link/button)\",\n \"Repeated structural wrappers (.row > .col > .accordion > .item > .card) 5+ levels deep\",\n ],\n mcp:\n \"Measure depth by counting CONTENT boundaries, not DOM nodes: each element that repeats siblings of the same shape (tabs, columns, items) is an array level; each element whose inner structure differs from its siblings (a column holding an accordion next to a column holding an image) is a slot level. Wrappers that only add spacing/grid are design, not levels. Model arrays for same-shaped siblings and slots where siblings differ. Rules: (1) up to 6 content levels → one section, as here; (2) if any slot child is used on more than one page, extract it as a block (D17) and place it as a linked instance; (3) if depth would exceed 6, or a level has more than ~10 children, split the deepest repeated subtree into its own block (e.g. the accordion becomes a standalone FAQ block referenced from the column); (4) never make a column an array item AND a slot at the same time. Paths: emit _key on every array item and slot child so drill-in paths stay stable across reorders.\",\n pitfalls: [\n \"SCHEMA GAP: a TypeSchema can't declare its own nested block types — slot `allow` names blocks from a global registry, so a converted section that introduces Columns/Accordion must also register them (handled here via the new optional KitEntry.blocks; production needs a schema-level `blocks` or a registry write).\",\n \"SCHEMA GAP: no per-slot depth limit — nothing stops an author nesting Columns inside Columns inside an Accordion card forever. Needs `maxDepth` or 'cannot contain itself' on slot fields.\",\n \"SCHEMA GAP: fieldsets and groups exist only at the TypeSchema root; array item objects (Tab, Column, Item) can't group their own fields.\",\n \"Breadcrumb at 7 drills (Guide / Seasoning / Steps and kit / Steps / Season over fire… / Heat it upside down / Card / Button) must fold into the Pathway chip on a 380px inspector — this entry is the test case.\",\n \"Accordion item cards inside a 1/3 column are cramped; that's a variant decision, not a field.\",\n ],\n },\n },\n\n /* ───────────────────────────── 2. Polymorphic module list ───────────────────────────── */\n {\n id: \"polymorphic-modules\",\n label: \"Any-block module list\",\n proves: \"One array mixing 8 item types (_type per item) · type picker on add · references and media inside items\",\n category: \"Advanced patterns\",\n tags: [\"polymorphic-array\", \"media-heavy\", \"references\", \"rich-text\", \"repeater\"],\n brand: \"Atlas Journal\",\n previewLayout: \"article\",\n schema: {\n name: \"featureStory\",\n title: \"Feature\",\n kind: \"entry\",\n icon: \"news\",\n category: \"Long-form & docs\",\n description: \"A long read assembled from modules\",\n preview: { title: \"title\", subtitle: \"dek\", media: \"coverImage\" },\n groups: [\n { name: \"story\", title: \"Story\", default: true },\n { name: \"modules\", title: \"Modules\", icon: \"stack-2\" },\n ],\n fields: [\n { name: \"title\", title: \"Title\", type: \"string\", group: \"story\", validation: { required: true, max: 100, recommendedMax: 80 }, ai: true },\n { name: \"dek\", title: \"Dek\", type: \"text\", rows: 2, group: \"story\", validation: { recommendedMax: 180 } },\n { name: \"coverImage\", title: \"Cover image\", type: \"image\", group: \"story\", validation: { required: true } },\n { name: \"authors\", title: \"Authors\", type: \"array\", group: \"story\", validation: { min: 1, max: 3 }, of: [{ name: \"writer\", title: \"Writer\", type: \"reference\", reference: { to: [\"col_authors\"] } }] },\n {\n name: \"modules\",\n title: \"Modules\",\n type: \"array\",\n group: \"modules\",\n itemNoun: \"module\",\n validation: { min: 1, max: 40 },\n of: moduleTypes,\n },\n ],\n },\n value: {\n title: \"The last ferry to Ilha Grande\",\n dek: \"The island banned cars in 1994. Now a single diesel ferry decides who lives there, and the state wants to replace it.\",\n coverImage: pic(\"ilha-grande-ferry\", \"The ferry Atlântica crossing at dusk with the island behind it\"),\n authors: [\"en_a2\"],\n modules: [\n {\n _key: \"m1\",\n _type: \"textModule\",\n body: \"<p>At 5:40 every morning the <em>Atlântica</em> sounds once, and Abraão empties toward the pier. Teachers, two nurses, the man who fixes every outboard on the island. Miss it and the next way off is a water taxi that costs half a day's wage.</p>\",\n },\n { _key: \"m2\", _type: \"imageModule\", image: pic(\"abraao-pier\", \"Commuters with bicycles waiting on the Abraão pier before dawn\", 1600, 1067), caption: \"The 5:40 queue at Abraão pier.\", credit: \"Photo: Luiza Prado for Atlas\", width: \"wide\" },\n { _key: \"m3\", _type: \"statModule\", value: \"1 boat\", label: \"carries 3,800 residents and every school run\", source: { type: \"url\", href: \"https://www.rj.gov.br/transportes\", newTab: true } },\n { _key: \"m4\", _type: \"quoteModule\", quote: \"They call it a tourist boat. For us it's the road.\", attribution: \"Dona Célia Marques\", role: \"Runs the bakery on Rua da Praia\" },\n {\n _key: \"m5\",\n _type: \"videoModule\",\n title: \"Crossing with the night shift\",\n video: { url: \"https://vimeo.com/76979871\" },\n poster: pic(\"night-crossing\", \"Deckhand coiling rope under deck lights\"),\n transcript: \"<p><strong>Captain Rui Alves:</strong> Forty-one years on this water. The boat is older than most of my crew.</p>\",\n },\n {\n _key: \"m6\",\n _type: \"galleryModule\",\n images: [\n pic(\"ilha-trail\", \"A trail through Atlantic forest above Abraão\", 1200, 1200),\n pic(\"ilha-school\", \"Children in uniforms boarding with backpacks\", 1200, 1200),\n pic(\"ilha-engine\", \"The ferry's diesel engine room\", 1200, 1200),\n ],\n layout: \"carousel\",\n caption: \"A day of crossings, 5:40 to 21:15.\",\n },\n { _key: \"m7\", _type: \"calloutModule\", tone: \"correction\", title: \"Correction\", body: \"An earlier version said the ferry was built in 1971. It was launched in 1979.\" },\n { _key: \"m8\", _type: \"relatedModule\", story: \"en_3\", label: \"Read next\" },\n ],\n },\n notes: {\n why:\n \"A feature story is a sequence where ORDER is content and each item is a different shape. A polymorphic array (`of` with 8 object types, each item stamped `_type`) keeps every module typed and validated while letting the author interleave freely. These module types are local to the Feature model — they aren't reusable site blocks, so they're inline `of` types rather than a slot of library blocks. Rule of thumb: inline types when the shapes belong to one model; a slot when the blocks are shared across pages and need variants.\",\n sanity:\n \"Sanity's canonical pattern: `modules: defineField({ type: 'array', of: [{type:'textModule'}, {type:'imageModule'}, …] })` with _type per item — a one-to-one match. Portable Text with custom block types is the other Sanity answer when modules sit inside prose.\",\n htmlSignals: [\n \"<article> whose direct children alternate between prose <div>s, <figure>s, <blockquote>s, galleries and asides\",\n \"Repeated wrapper classes with a type suffix (.module--quote, .module--gallery, data-module=\\\"stat\\\")\",\n \"Full-bleed figures breaking out of the text column (negative margins, width: 100vw)\",\n \"Inline 'Read next' cards linking to another story mid-article\",\n ],\n mcp:\n \"Walk the article's top-level children in order. Classify each into one module type by its dominant element (figure+img → imageModule, multiple imgs → galleryModule, blockquote → quoteModule, iframe/video → videoModule, large numeral + label → statModule, aside/callout → calloutModule, internal story link card → relatedModule, otherwise textModule). Merge consecutive prose paragraphs into ONE textModule (never one module per <p>). Unknown shapes → textModule with the HTML preserved and a review flag. If more than 40 modules, or most modules are prose with occasional media, use a rich-text body with embedded blocks instead (see rich-text-embedded-components).\",\n pitfalls: [\n \"SCHEMA GAP: no per-type count limits inside a polymorphic array (e.g. at most one relatedModule, galleries never adjacent) — `validation` applies to the whole array.\",\n \"SCHEMA GAP: no way to share module types between models without copying FieldSchema objects; a named, reusable object type registry (Sanity's defineType for objects) is missing for non-block types.\",\n \"Changing an item's type (quote → callout) isn't a schema operation; the editor must delete and re-add, losing the _key.\",\n \"A textModule per paragraph is the most common bad conversion — it explodes the list and breaks reading flow.\",\n ],\n },\n },\n\n /* ───────────────────────────── 3. Conditional field matrix ───────────────────────────── */\n {\n id: \"conditional-source-matrix\",\n label: \"Conditional source matrix\",\n proves: \"Manual / collection / query / external branches · nested conditionals two levels down · empty-state fallback\",\n category: \"Advanced patterns\",\n tags: [\"conditional\", \"references\", \"dynamic-query\", \"commerce\", \"validation\"],\n brand: \"Caldera\",\n previewLayout: \"grid-4\",\n schema: {\n name: \"productFeed\",\n title: \"Product row\",\n kind: \"block\",\n icon: \"shopping-cart\",\n category: \"Commerce\",\n description: \"Products picked by hand, from a collection, by rules or from a recommendations API\",\n variants: [{ id: \"grid\", name: \"Grid\" }, { id: \"carousel\", name: \"Carousel\" }],\n preview: { title: \"heading\", subtitle: \"source\" },\n groups: [\n { name: \"content\", title: \"Content\", default: true },\n { name: \"source\", title: \"Products\", icon: \"filter\" },\n ],\n fields: [\n { name: \"heading\", title: \"Heading\", type: \"string\", group: \"content\", validation: { required: true, recommendedMax: 50 }, ai: true },\n { name: \"viewAllButton\", title: \"View all button\", type: \"button\", group: \"content\" },\n {\n name: \"source\",\n title: \"Products come from\",\n type: \"select\",\n group: \"source\",\n layout: \"cards\",\n initialValue: \"manual\",\n options: [\n { value: \"manual\", label: \"Picked by hand\", icon: \"hand-finger\" },\n { value: \"collection\", label: \"A collection\", icon: \"folder\" },\n { value: \"query\", label: \"Rules\", icon: \"filter\", description: \"Tags, price, stock\" },\n { value: \"external\", label: \"Recommendations\", icon: \"sparkles\", description: \"Shopify or a custom API\" },\n ],\n },\n { name: \"products\", title: \"Products\", type: \"array\", group: \"source\", hidden: { field: \"source\", equals: \"manual\" }, validation: { min: 1, max: 12, unique: true }, of: [{ name: \"product\", title: \"Product\", type: \"reference\", reference: { to: [\"shopify\"] } }] },\n { name: \"collectionHandle\", title: \"Shopify collection handle\", type: \"string\", group: \"source\", hidden: { field: \"source\", equals: \"collection\" }, validation: { required: true, pattern: \"^[a-z0-9-]+$\", patternMessage: \"Use the handle from the collection's URL, like camp-kitchen.\" } },\n {\n name: \"query\",\n title: \"Rules\",\n type: \"object\",\n group: \"source\",\n icon: \"filter\",\n openMode: \"drill\",\n hidden: { field: \"source\", equals: \"query\" },\n fields: [\n { name: \"tags\", title: \"Has any of these tags\", type: \"tags\" },\n {\n name: \"price\",\n title: \"Price\",\n type: \"select\",\n layout: \"segmented\",\n initialValue: \"any\",\n options: [{ value: \"any\", label: \"Any\" }, { value: \"under\", label: \"Under\" }, { value: \"between\", label: \"Between\" }],\n },\n { name: \"minPrice\", title: \"From\", type: \"number\", hidden: { field: \"price\", equals: \"between\" }, numeric: { unit: \"USD\", min: 0 } },\n { name: \"maxPrice\", title: \"Up to\", type: \"number\", hidden: { field: \"price\", equals: [\"under\", \"between\"] }, numeric: { unit: \"USD\", min: 0 }, validation: { required: true } },\n { name: \"showInStockOnly\", title: \"In stock only\", type: \"boolean\", initialValue: true },\n {\n name: \"sort\",\n title: \"Sort by\",\n type: \"select\",\n initialValue: \"bestselling\",\n options: [\n { value: \"bestselling\", label: \"Bestselling\" },\n { value: \"newest\", label: \"Newest\" },\n { value: \"priceAsc\", label: \"Price, low to high\" },\n { value: \"metafield\", label: \"A metafield\", description: \"e.g. custom.rank\" },\n ],\n },\n { name: \"metafield\", title: \"Metafield\", type: \"string\", hidden: { field: \"sort\", equals: \"metafield\" }, validation: { required: true, pattern: \"^[a-z_]+\\\\.[a-z_]+$\", patternMessage: \"Use namespace.key, like custom.rank.\" } },\n { name: \"limit\", title: \"How many\", type: \"number\", numeric: { min: 1, max: 24, step: 1 }, initialValue: 8 },\n ],\n },\n {\n name: \"external\",\n title: \"Recommendations\",\n type: \"object\",\n group: \"source\",\n icon: \"sparkles\",\n openMode: \"drill\",\n hidden: { field: \"source\", equals: \"external\" },\n fields: [\n {\n name: \"provider\",\n title: \"Provider\",\n type: \"select\",\n layout: \"segmented\",\n initialValue: \"shopify\",\n options: [{ value: \"shopify\", label: \"Shopify\" }, { value: \"custom\", label: \"Custom API\" }],\n },\n {\n name: \"intent\",\n title: \"Recommend\",\n type: \"select\",\n hidden: { field: \"provider\", equals: \"shopify\" },\n initialValue: \"related\",\n options: [{ value: \"related\", label: \"Similar products\" }, { value: \"complementary\", label: \"Goes well with\" }],\n },\n { name: \"seed\", title: \"Based on\", type: \"reference\", reference: { to: [\"shopify\"] }, hidden: { field: \"provider\", equals: \"shopify\" }, description: \"Leave empty on product pages to use the page's product.\" },\n { name: \"endpoint\", title: \"Endpoint\", type: \"url\", hidden: { field: \"provider\", equals: \"custom\" }, validation: { required: true, pattern: \"^https://\", patternMessage: \"Use an https:// address, like https://your-site.com.\" }, access: { view: \"schema.view\", edit: \"schema.manage\" } },\n {\n name: \"mapping\",\n title: \"Response mapping\",\n type: \"object\",\n icon: \"arrows-exchange\",\n openMode: \"drill\",\n hidden: { field: \"provider\", equals: \"custom\" },\n access: { view: \"schema.view\", edit: \"schema.manage\" },\n description: \"Where each product field lives in the API's JSON.\",\n fields: [\n { name: \"list\", title: \"List path\", type: \"string\", placeholder: \"data.items\" },\n { name: \"id\", title: \"Shopify id path\", type: \"string\", placeholder: \"product_gid\" },\n { name: \"reason\", title: \"Reason path\", type: \"string\", placeholder: \"explanation\" },\n ],\n },\n { name: \"limit\", title: \"How many\", type: \"number\", numeric: { min: 1, max: 12, step: 1 }, initialValue: 4 },\n ],\n },\n {\n name: \"whenEmpty\",\n title: \"If nothing matches\",\n type: \"select\",\n group: \"source\",\n layout: \"radio\",\n initialValue: \"bestsellers\",\n options: [\n { value: \"hide\", label: \"Hide the section\" },\n { value: \"bestsellers\", label: \"Show bestsellers instead\" },\n { value: \"message\", label: \"Show a message\" },\n ],\n },\n { name: \"emptyMessage\", title: \"Message\", type: \"string\", group: \"source\", hidden: { field: \"whenEmpty\", equals: \"message\" }, validation: { required: true, max: 90 } },\n ],\n },\n value: {\n _variant: \"carousel\",\n heading: \"Goes well with your skillet\",\n viewAllButton: { label: \"Shop camp kitchen\", href: \"/collections/camp-kitchen\", type: \"page\", style: \"link\", arrow: true },\n source: \"external\",\n products: [\"gid://shopify/Product/8812\", \"gid://shopify/Product/8814\"],\n query: { tags: [\"camp\", \"cast-iron\"], price: \"under\", maxPrice: 120, showInStockOnly: true, sort: \"metafield\", metafield: \"custom.rank\", limit: 8 },\n external: {\n provider: \"custom\",\n endpoint: \"https://recs.caldera.com/v2/complementary\",\n mapping: { list: \"data.items\", id: \"product_gid\", reason: \"explanation\" },\n limit: 4,\n },\n whenEmpty: \"bestsellers\",\n },\n notes: {\n why:\n \"Four sources are four different data contracts, so they're exclusive branches of one select — and the bigger branches are drill-in OBJECTS so each can have its own conditionals (query.price → min/max, query.sort → metafield, external.provider → intent/seed vs endpoint/mapping). Nesting the conditionals inside objects is how a sibling-only condition system expresses a second level. Inactive branches keep their values (the query is still there if you switch back), and the renderer reads only the active branch.\",\n sanity:\n \"Sanity: productFeed { source, products[] (hidden: parent.source !== 'manual'), query { … }, external { … } } with callback `hidden` functions that can read any path (`({document, parent}) => …`). Sanity can hide on combined conditions in one callback; we need nested objects to get the same effect.\",\n htmlSignals: [\n \"Product cards rendered client-side from a fetch (Shopify recommendations API /recommendations/products.json, Algolia, Klaviyo)\",\n \"data-collection / data-handle / data-tags / data-limit attributes on the section wrapper\",\n \"'You might also like' / 'Goes well with' headings with a product carousel\",\n \"Server-rendered lists with sort/filter query params in the 'View all' link\",\n ],\n mcp:\n \"Decide the source from how the products got there, not how they look: hard-coded product links → manual (resolve each to a Shopify reference); a collection URL or data-handle → collection; filter params (tag, price, sort) → query; a call to a recommendations endpoint → external. Fill only the active branch; leave others empty. Map the 'View all' link to cta. When the HTML is a snapshot of a dynamic list, NEVER freeze it into a manual list — that silently stops it updating; flag it if you can't tell.\",\n pitfalls: [\n \"SCHEMA GAP: conditions test one sibling for equality — no AND/OR, no comparison (>), no reading a parent or the whole entry (e.g. 'show seed only when this block is on a product page'). Nested objects are a workaround, not a model.\",\n \"SCHEMA GAP: values in hidden branches are kept and published; there's no 'clear when hidden' option, so stale manual product ids ship in the payload of an external-source block.\",\n \"SCHEMA GAP: required-if — `maxPrice` is required only when visible; that works because hidden fields skip validation, but 'required when price = between AND minPrice is set' can't be written.\",\n \"minPrice < maxPrice can't be validated (cross-field).\",\n ],\n },\n },\n\n /* ───────────────────────────── 4. Global synced block with overrides ───────────────────────────── */\n {\n id: \"global-announcement-overrides\",\n label: \"Global block with per-page overrides\",\n proves: \"Synced fields from a global · locked vs overridable fields · instance-only settings · override map in the value\",\n category: \"Advanced patterns\",\n tags: [\"global-synced\", \"conditional\", \"validation\", \"variants\"],\n brand: \"Caldera\",\n previewLayout: \"banner\",\n syncedFrom: \"Announcement bar\",\n schema: {\n name: \"announcementBar\",\n title: \"Announcement bar\",\n kind: \"global\",\n icon: \"speakerphone\",\n category: \"Navigation & chrome\",\n description: \"One message across the site. Pages may override the wording, never the legal line or schedule\",\n variants: [{ id: \"solid\", name: \"Solid\" }, { id: \"marquee\", name: \"Scrolling\" }],\n preview: { title: \"message\", subtitle: \"tone\" },\n groups: [\n { name: \"content\", title: \"Content\", default: true },\n { name: \"global\", title: \"Set in the global\", icon: \"world\" },\n { name: \"page\", title: \"This page\", icon: \"file\" },\n ],\n fields: [\n { name: \"message\", title: \"Message\", type: \"string\", group: \"content\", synced: { from: \"Announcement bar\" }, validation: { required: true, max: 90, recommendedMax: 70 }, ai: true, localized: true },\n { name: \"link\", title: \"Link\", type: \"link\", group: \"content\", synced: { from: \"Announcement bar\" } },\n {\n name: \"tone\",\n title: \"Tone\",\n type: \"select\",\n group: \"content\",\n layout: \"segmented\",\n synced: { from: \"Announcement bar\" },\n initialValue: \"brand\",\n options: [{ value: \"brand\", label: \"Brand\" }, { value: \"dark\", label: \"Dark\" }, { value: \"warning\", label: \"Warning\" }],\n },\n { name: \"legal\", title: \"Offer terms\", type: \"string\", group: \"global\", access: { edit: \"schema.manage\" }, lockReason: \"Set in the global block. Pages can't override offer terms.\", validation: { max: 120 } },\n { name: \"startsAt\", title: \"Show from\", type: \"datetime\", group: \"global\", access: { edit: \"schema.manage\" }, lockReason: \"The schedule is the same on every page.\" },\n { name: \"endsAt\", title: \"Hide after\", type: \"datetime\", group: \"global\", access: { edit: \"schema.manage\" }, lockReason: \"The schedule is the same on every page.\" },\n { name: \"isDismissible\", title: \"Visitors can close it\", type: \"boolean\", group: \"global\", access: { edit: \"schema.manage\" }, lockReason: \"Set in the global block.\", description: \"Remembers the close for 7 days.\" },\n {\n name: \"visibility\",\n title: \"On this page\",\n type: \"select\",\n group: \"page\",\n layout: \"radio\",\n initialValue: \"show\",\n description: \"This page only. The global keeps showing elsewhere.\",\n options: [\n { value: \"show\", label: \"Show\" },\n { value: \"hide\", label: \"Hide on this page\" },\n ],\n },\n { name: \"hideReason\", title: \"Why it's hidden\", type: \"string\", group: \"page\", hidden: { field: \"visibility\", equals: \"hide\" }, validation: { required: true, max: 80 }, description: \"Only editors see this.\" },\n ],\n },\n value: {\n _variant: \"solid\",\n _ref: \"gb_announcement\",\n _overrides: { message: \"Cable Fold owners: free shipping on every grate accessory this week.\" },\n message: \"Cable Fold owners: free shipping on every grate accessory this week.\",\n link: { type: \"page\", href: \"/products/cable-fold#accessories\", title: \"Cable Fold Grill\" },\n tone: \"brand\",\n legal: \"US orders only. Ends Oct 12, 11:59 pm PT.\",\n startsAt: \"2026-10-05T00:00:00-07:00[America/Los_Angeles]\",\n endsAt: \"2026-10-12T23:59:00-07:00[America/Los_Angeles]\",\n isDismissible: true,\n visibility: \"show\",\n },\n published: {\n _variant: \"solid\",\n message: \"Free shipping on orders over $150. Every pan, every week.\",\n link: { type: \"page\", href: \"/shipping\", title: \"Shipping\" },\n tone: \"brand\",\n legal: \"US orders only. Ends Oct 12, 11:59 pm PT.\",\n startsAt: \"2026-10-05T00:00:00-07:00[America/Los_Angeles]\",\n endsAt: \"2026-10-12T23:59:00-07:00[America/Los_Angeles]\",\n isDismissible: true,\n visibility: \"show\",\n },\n notes: {\n why:\n \"A global block has three kinds of field and the schema shows them as three groups: synced fields a page MAY override (message, link, tone — marked `synced`), fields owned by the global that pages can't touch (offer terms, schedule — developer-locked with a reason), and instance-only settings that never exist on the global (hide on this page). The value carries `_ref` (the global's id) and `_overrides` (only the fields this page changed), matching D28's instance = reference + overrides, so editing the global still reaches every page except the overridden field. `published` here is the global's own value, which is what the overridden fields differ from.\",\n sanity:\n \"Sanity has no native overrides: teams store `announcement: reference` plus optional override fields (`messageOverride`) and coalesce in GROQ (`coalesce(messageOverride, announcement->message)`). Our instance model keeps one field name with an override map instead of doubled fields.\",\n htmlSignals: [\n \"A thin full-width bar above the header, identical on every page of the crawl except a few\",\n \"Dismiss (×) button with a cookie/localStorage key (announcement-dismissed)\",\n \"Small-print text ('Ends Oct 12', 'US only') next to the message\",\n \"Pages where the bar's text differs from the site-wide version (candidate overrides)\",\n ],\n mcp:\n \"Crawl first, then decide: an element repeated with identical content on ≥80% of pages is a GLOBAL — create it once (kind: global) from the most common version. Pages whose copy differs get an instance with `_overrides` containing ONLY the differing fields; never create a second global for a variant. Offer terms and dates that never differ → global-owned (locked). If a page lacks the bar, set visibility: hide on that page rather than omitting the instance silently. If more than half the fields differ on more than a third of pages, it isn't one global — model a regular block instead.\",\n pitfalls: [\n \"SCHEMA GAP: no per-field `overridable` flag. `synced` marks inheritance and `readOnly: \\\"developer\\\"` locks, but 'locked in instances, editable in the global' is a different permission from 'developer only' — the language conflates them.\",\n \"SCHEMA GAP: the override map (`_overrides`) and instance reference (`_ref`) are value conventions, not schema — nothing validates that an override key is an overridable field.\",\n \"SCHEMA GAP: instance-only fields (visibility, hideReason) live in the same schema as the global's fields; there's no way to say 'this field exists only on instances'.\",\n \"Overriding `tone` on one page makes the bar look broken next to the header; consider locking design fields too.\",\n ],\n },\n },\n\n /* ───────────────────────────── 5. Fully localized section ───────────────────────────── */\n {\n id: \"localized-section\",\n label: \"Localized section with RTL\",\n proves: \"Localized fields · per-locale and per-field translation status · fallback chain · Arabic right-to-left sample\",\n category: \"Advanced patterns\",\n tags: [\"localized\", \"repeater\", \"conditional\", \"a11y\", \"validation\"],\n brand: \"Lumen Studio\",\n previewLayout: \"centered\",\n schema: {\n name: \"studioIntro\",\n title: \"Studio intro\",\n kind: \"block\",\n icon: \"language\",\n category: \"Company & people\",\n description: \"Statement, body and a button, translated per locale\",\n variants: [{ id: \"centered\", name: \"Centered\" }, { id: \"split\", name: \"Split with image\" }],\n preview: { title: \"heading\", subtitle: \"body\", media: \"image\" },\n groups: [\n { name: \"content\", title: \"Content\", default: true },\n { name: \"translations\", title: \"Translations\", icon: \"language\" },\n ],\n fields: [\n { name: \"heading\", title: \"Heading\", type: \"string\", group: \"content\", validation: { required: true, recommendedMax: 60 }, localized: true, ai: true },\n { name: \"body\", title: \"Body\", type: \"text\", rows: 3, group: \"content\", validation: { recommendedMax: 280 }, localized: true, ai: true },\n { name: \"button\", title: \"Button\", type: \"button\", group: \"content\", localized: true },\n { name: \"image\", title: \"Image\", type: \"image\", group: \"content\", description: \"Shared by every language. Alt text is translated with the copy.\" },\n {\n name: \"baseLocale\",\n title: \"Written in\",\n type: \"select\",\n group: \"translations\",\n access: { edit: \"schema.manage\" },\n lockReason: \"The site's default locale.\",\n initialValue: \"en\",\n options: [{ value: \"en\", label: \"English\" }],\n },\n {\n name: \"fallback\",\n title: \"When a translation is missing\",\n type: \"select\",\n group: \"translations\",\n layout: \"radio\",\n initialValue: \"chain\",\n options: [\n { value: \"base\", label: \"Show English\" },\n { value: \"chain\", label: \"Try a related locale first\", description: \"e.g. pt-BR before English for pt-PT\" },\n { value: \"hide\", label: \"Hide the section\" },\n ],\n },\n {\n name: \"translations\",\n title: \"Locales\",\n type: \"array\",\n group: \"translations\",\n itemNoun: \"locale\",\n validation: { max: 12 },\n of: [\n {\n name: \"translation\",\n title: \"Locale\",\n type: \"object\",\n icon: \"language\",\n preview: { title: \"locale\", subtitle: \"status\", fallback: \"Untitled locale\" },\n fields: [\n {\n name: \"locale\",\n title: \"Locale\",\n type: \"select\",\n validation: { required: true, unique: true },\n options: [\n { value: \"pt-PT\", label: \"Portuguese (Portugal)\" },\n { value: \"pt-BR\", label: \"Portuguese (Brazil)\" },\n { value: \"ar-AE\", label: \"Arabic (UAE)\" },\n { value: \"fr-FR\", label: \"French\" },\n { value: \"de-DE\", label: \"German\" },\n ],\n },\n {\n name: \"status\",\n title: \"Status\",\n type: \"select\",\n layout: \"segmented\",\n initialValue: \"missing\",\n options: [\n { value: \"missing\", label: \"Missing\" },\n { value: \"machine\", label: \"Machine\" },\n { value: \"review\", label: \"In review\" },\n { value: \"approved\", label: \"Approved\" },\n ],\n },\n {\n name: \"dir\",\n title: \"Direction\",\n type: \"select\",\n layout: \"segmented\",\n initialValue: \"auto\",\n options: [{ value: \"auto\", label: \"Auto\" }, { value: \"ltr\", label: \"Left to right\" }, { value: \"rtl\", label: \"Right to left\" }],\n description: \"Auto reads it from the language.\",\n },\n { name: \"fallbackTo\", title: \"Fall back to\", type: \"string\", validation: { pattern: \"^[a-z]{2}(-[A-Z]{2})?$\", patternMessage: \"Use a locale code, like pt-BR or en.\" }, description: \"Used when the section's fallback is \\\"related locale\\\".\" },\n { name: \"heading\", title: \"Heading\", type: \"string\", validation: { recommendedMax: 60 } },\n { name: \"body\", title: \"Body\", type: \"text\", rows: 3, validation: { recommendedMax: 280 } },\n { name: \"buttonLabel\", title: \"Button label\", type: \"string\", validation: { max: 32 } },\n { name: \"imageAlt\", title: \"Image alt text\", type: \"string\", validation: { max: 140 } },\n {\n name: \"fields\",\n title: \"Field status\",\n type: \"array\",\n itemNoun: \"field\",\n openMode: \"inline\",\n of: [\n {\n name: \"fieldStatus\",\n title: \"Field\",\n type: \"object\",\n icon: \"check\",\n preview: { title: \"field\", subtitle: \"status\", fallback: \"Untitled field\" },\n fields: [\n { name: \"field\", title: \"Field\", type: \"select\", options: [{ value: \"heading\", label: \"Heading\" }, { value: \"body\", label: \"Body\" }, { value: \"ctaLabel\", label: \"Button label\" }, { value: \"imageAlt\", label: \"Alt text\" }] },\n { name: \"status\", title: \"Status\", type: \"select\", options: [{ value: \"missing\", label: \"Missing\" }, { value: \"machine\", label: \"Machine\" }, { value: \"review\", label: \"In review\" }, { value: \"approved\", label: \"Approved\" }] },\n { name: \"by\", title: \"By\", type: \"string\", validation: { max: 40 } },\n ],\n },\n ],\n },\n ],\n },\n ],\n },\n ],\n },\n value: {\n _variant: \"split\",\n heading: \"Buildings that keep the light.\",\n body: \"Lumen Studio designs homes and small civic buildings in Lisbon and Dubai. We start with where the sun falls, then draw the walls.\",\n button: { label: \"See our projects\", href: \"/projects\", type: \"page\", title: \"Projects\", style: \"primary\", arrow: true },\n image: pic(\"lumen-courtyard\", \"A whitewashed courtyard with a deep shadow line across the floor\"),\n baseLocale: \"en\",\n fallback: \"chain\",\n translations: [\n {\n _key: \"l1\",\n locale: \"pt-PT\",\n status: \"approved\",\n dir: \"ltr\",\n fallbackTo: \"pt-BR\",\n heading: \"Edifícios que guardam a luz.\",\n body: \"O Lumen Studio projeta casas e pequenos edifícios públicos em Lisboa e no Dubai. Começamos por onde o sol bate, depois desenhamos as paredes.\",\n buttonLabel: \"Ver projetos\",\n imageAlt: \"Um pátio caiado com uma linha de sombra profunda no chão\",\n fields: [\n { _key: \"f1\", field: \"heading\", status: \"approved\", by: \"Inês Carvalho\" },\n { _key: \"f2\", field: \"body\", status: \"approved\", by: \"Inês Carvalho\" },\n { _key: \"f3\", field: \"ctaLabel\", status: \"approved\", by: \"Inês Carvalho\" },\n { _key: \"f4\", field: \"imageAlt\", status: \"approved\", by: \"Inês Carvalho\" },\n ],\n },\n {\n _key: \"l2\",\n locale: \"ar-AE\",\n status: \"review\",\n dir: \"rtl\",\n heading: \"مبانٍ تحتفظ بالضوء.\",\n body: \"يصمّم استوديو لومن منازل ومباني مدنية صغيرة في لشبونة ودبي. نبدأ من حيث تسقط الشمس، ثم نرسم الجدران.\",\n buttonLabel: \"شاهد مشاريعنا\",\n fields: [\n { _key: \"f5\", field: \"heading\", status: \"approved\", by: \"Layla Haddad\" },\n { _key: \"f6\", field: \"body\", status: \"review\", by: \"Layla Haddad\" },\n { _key: \"f7\", field: \"ctaLabel\", status: \"machine\" },\n { _key: \"f8\", field: \"imageAlt\", status: \"missing\" },\n ],\n },\n { _key: \"l3\", locale: \"fr-FR\", status: \"missing\", dir: \"auto\" },\n ],\n },\n notes: {\n why:\n \"Two localization models meet here. Field-level (`localized: true` on heading/body/cta) is how the editor shows a locale badge and switches values per locale — it's the right primitive. But the language has nowhere to store status, direction or fallback per locale, so the closest honest model is an internationalized array (one item per locale, Sanity's @sanity/internationalized-array pattern) carrying the translated copy plus status, direction and a per-field status list. Shared things (the image file) stay single; its alt text is copy, so it's translated.\",\n sanity:\n \"Sanity offers both: document-level i18n (@sanity/document-internationalization, one doc per locale) and field-level internationalized arrays (`heading: internationalizedArrayString`). Translation status lives in a plugin (Transifex/Smartling/Crowdin) or a custom `translationMetadata` document — the same gap.\",\n htmlSignals: [\n \"<html lang> / hreflang alternates across crawled URLs (/pt/, /ar/) with the same section structure\",\n \"dir=\\\"rtl\\\" on <html> or on the section; mirrored layouts (padding-inline-start)\",\n \"A language switcher in the header\",\n \"Identical structure with different text across locale paths\",\n ],\n mcp:\n \"Crawl every hreflang alternate. Match the same section across locales by position + structure, never by text. The default locale's copy fills the localized fields; every other locale becomes a `translation` item with its copy, `dir` from the dir attribute (rtl for ar/he/fa/ur), status 'approved' for human-published pages (or 'machine' if the site marks machine translation). Missing locales get a `missing` item so the gap is visible. Never translate during conversion. Keep the image shared unless a locale uses a different photo — then the image becomes localized too and you note it.\",\n pitfalls: [\n \"SCHEMA GAP: `localized: true` is a flag only — no value shape for per-locale values, no translation status, no per-locale direction, and no fallback chain in the schema. The internationalized array here duplicates the localized fields by hand.\",\n \"SCHEMA GAP: the locale list is a hard-coded select; it should come from site settings (dynamic options).\",\n \"SCHEMA GAP: `unique: true` on `locale` is declared but not enforced — two pt-PT items can exist.\",\n \"SCHEMA GAP: no `dir`/`lang` awareness in text fields — the editor won't render the Arabic copy right-to-left while typing.\",\n \"Recommended lengths are per English; German runs ~30% longer and Arabic ~25% shorter, so a single recommendedMax misfires per locale.\",\n ],\n },\n },\n\n /* ───────────────────────────── 6. Personalization ───────────────────────────── */\n {\n id: \"personalized-hero\",\n label: \"Personalized hero with A/B test\",\n proves: \"Default fallback · audience segments with rules · priority · experiment variants with split weights · 5 levels deep\",\n category: \"Advanced patterns\",\n tags: [\"personalization\", \"deep-nesting\", \"conditional\", \"repeater\", \"validation\"],\n brand: \"Betterwork\",\n previewLayout: \"split\",\n schema: {\n name: \"personalizedHero\",\n title: \"Personalized hero\",\n kind: \"block\",\n icon: \"users-group\",\n category: \"Heroes\",\n description: \"One hero, different words for different visitors\",\n variants: [{ id: \"split\", name: \"Split\" }, { id: \"centered\", name: \"Centered\" }],\n preview: { title: \"default.heading\", subtitle: \"experiment.name\" },\n groups: [\n { name: \"content\", title: \"Everyone\", default: true },\n { name: \"audiences\", title: \"Audiences\", icon: \"users\" },\n { name: \"experiment\", title: \"A/B test\", icon: \"flask\" },\n ],\n fields: [\n {\n name: \"default\",\n title: \"Default\",\n type: \"object\",\n group: \"content\",\n icon: \"user\",\n openMode: \"drill\",\n description: \"Shown when no audience matches.\",\n fields: [\n { name: \"eyebrow\", title: \"Eyebrow\", type: \"string\", validation: { max: 40 } },\n { name: \"heading\", title: \"Heading\", type: \"string\", validation: { required: true, recommendedMax: 60 }, ai: true },\n { name: \"body\", title: \"Body\", type: \"text\", rows: 2, validation: { recommendedMax: 160 }, ai: true },\n { name: \"primaryButton\", title: \"Primary button\", type: \"button\", validation: { required: true } },\n { name: \"image\", title: \"Image\", type: \"image\", validation: { required: true } },\n ],\n },\n {\n name: \"segments\",\n title: \"Audiences\",\n type: \"array\",\n group: \"audiences\",\n itemNoun: \"audience\",\n validation: { max: 6 },\n description: \"Checked top to bottom. The first match wins.\",\n of: [\n {\n name: \"segment\",\n title: \"Audience\",\n type: \"object\",\n icon: \"users\",\n preview: { title: \"name\", subtitle: \"match\", fallback: \"Untitled audience\" },\n fields: [\n { name: \"name\", title: \"Name\", type: \"string\", validation: { required: true, max: 40 } },\n { name: \"match\", title: \"Match\", type: \"select\", layout: \"segmented\", initialValue: \"all\", options: [{ value: \"all\", label: \"All rules\" }, { value: \"any\", label: \"Any rule\" }] },\n {\n name: \"rules\",\n title: \"Rules\",\n type: \"array\",\n itemNoun: \"rule\",\n validation: { min: 1, max: 5 },\n of: [\n {\n name: \"rule\",\n title: \"Rule\",\n type: \"object\",\n icon: \"filter\",\n preview: { title: \"attribute\", subtitle: \"value\", fallback: \"Untitled rule\" },\n fields: [\n {\n name: \"attribute\",\n title: \"When\",\n type: \"select\",\n validation: { required: true },\n options: [\n { value: \"industry\", label: \"Industry (from IP)\" },\n { value: \"companySize\", label: \"Company size (from IP)\" },\n { value: \"country\", label: \"Country\" },\n { value: \"utmCampaign\", label: \"UTM campaign\" },\n { value: \"returning\", label: \"Returning visitor\" },\n { value: \"lifecycle\", label: \"CRM lifecycle stage\" },\n ],\n },\n { name: \"operator\", title: \"Condition\", type: \"select\", layout: \"segmented\", initialValue: \"is\", options: [{ value: \"is\", label: \"Is\" }, { value: \"isNot\", label: \"Is not\" }, { value: \"contains\", label: \"Contains\" }] },\n { name: \"value\", title: \"Value\", type: \"string\", validation: { required: true, max: 60 } },\n ],\n },\n ],\n },\n {\n name: \"content\",\n title: \"What they see\",\n type: \"object\",\n icon: \"layout\",\n openMode: \"drill\",\n description: \"Empty fields fall back to the default.\",\n fields: [\n { name: \"heading\", title: \"Heading\", type: \"string\", validation: { recommendedMax: 60 }, ai: true },\n { name: \"body\", title: \"Body\", type: \"text\", rows: 2, validation: { recommendedMax: 160 } },\n { name: \"primaryButton\", title: \"Primary button\", type: \"button\" },\n { name: \"image\", title: \"Image\", type: \"image\" },\n ],\n },\n ],\n },\n ],\n },\n {\n name: \"experiment\",\n title: \"A/B test\",\n type: \"object\",\n group: \"experiment\",\n icon: \"flask\",\n openMode: \"drill\",\n description: \"Splits visitors who match no audience between versions.\",\n fields: [\n { name: \"isRunning\", title: \"Run a test\", type: \"boolean\" },\n { name: \"name\", title: \"Test name\", type: \"string\", hidden: { field: \"isRunning\", equals: true }, validation: { required: true, max: 60 } },\n {\n name: \"goal\",\n title: \"Winning means more\",\n type: \"select\",\n hidden: { field: \"isRunning\", equals: true },\n initialValue: \"demo\",\n options: [{ value: \"demo\", label: \"Demos booked\" }, { value: \"signup\", label: \"Trials started\" }, { value: \"click\", label: \"Button clicks\" }],\n },\n {\n name: \"variants\",\n title: \"Versions\",\n type: \"array\",\n itemNoun: \"version\",\n hidden: { field: \"isRunning\", equals: true },\n validation: { min: 2, max: 4 },\n description: \"Weights must add up to 100%.\",\n of: [\n {\n name: \"testVariant\",\n title: \"Version\",\n type: \"object\",\n icon: \"flask\",\n preview: { title: \"name\", subtitle: \"weight\", fallback: \"Untitled version\" },\n fields: [\n { name: \"name\", title: \"Name\", type: \"string\", validation: { required: true, max: 24 }, placeholder: \"B: outcome headline\" },\n { name: \"weight\", title: \"Traffic\", type: \"number\", layout: \"slider\", numeric: { min: 0, max: 100, step: 5, unit: \"%\" }, validation: { required: true } },\n { name: \"isControl\", title: \"This is the control\", type: \"boolean\", initialValue: false, description: \"Uses the default content unchanged.\" },\n {\n name: \"content\",\n title: \"Content\",\n type: \"object\",\n icon: \"layout\",\n openMode: \"drill\",\n hidden: { field: \"isControl\", equals: false },\n fields: [\n { name: \"heading\", title: \"Heading\", type: \"string\", validation: { recommendedMax: 60 }, ai: true },\n { name: \"body\", title: \"Body\", type: \"text\", rows: 2 },\n { name: \"primaryButton\", title: \"Primary button\", type: \"button\" },\n ],\n },\n ],\n },\n ],\n },\n { name: \"endsAt\", title: \"Stop on\", type: \"date\", hidden: { field: \"isRunning\", equals: true } },\n ],\n },\n ],\n },\n value: {\n _variant: \"split\",\n default: {\n eyebrow: \"HR, payroll and benefits\",\n heading: \"Run your people ops from one place.\",\n body: \"Hiring, payroll, benefits and reviews in one system your team will actually open.\",\n primaryButton: { label: \"Book a demo\", href: \"/demo\", type: \"page\", title: \"Book a demo\", style: \"primary\", arrow: true },\n image: pic(\"betterwork-dashboard\", \"Betterwork's people dashboard showing headcount and upcoming payroll\"),\n },\n segments: [\n {\n _key: \"sg1\",\n name: \"Healthcare, 200+ people\",\n match: \"all\",\n rules: [\n { _key: \"r1\", attribute: \"industry\", operator: \"is\", value: \"Healthcare\" },\n { _key: \"r2\", attribute: \"companySize\", operator: \"is\", value: \"200-1000\" },\n ],\n content: {\n heading: \"Shift-based payroll without the spreadsheet.\",\n body: \"Overtime, differentials and multi-state rules handled for clinics and care teams.\",\n primaryButton: { label: \"See healthcare payroll\", href: \"/industries/healthcare\", type: \"page\", style: \"primary\", arrow: true },\n image: pic(\"betterwork-shifts\", \"A shift schedule with overtime highlighted for a clinic team\"),\n },\n },\n {\n _key: \"sg2\",\n name: \"Came from the payroll campaign\",\n match: \"any\",\n rules: [{ _key: \"r3\", attribute: \"utmCampaign\", operator: \"contains\", value: \"payroll-q4\" }],\n content: { heading: \"Close payroll in 20 minutes, not two days.\" },\n },\n ],\n experiment: {\n isRunning: true,\n name: \"Q4 hero: outcome vs product headline\",\n goal: \"demo\",\n variants: [\n { _key: \"v1\", name: \"A: control\", weight: 50, isControl: true },\n {\n _key: \"v2\",\n name: \"B: outcome headline\",\n weight: 50,\n isControl: false,\n content: {\n heading: \"Give your HR team back a day every week.\",\n body: \"Teams on Betterwork spend 72% less time on payroll and benefits admin.\",\n primaryButton: { label: \"Book a 20-minute demo\", href: \"/demo?v=b\", type: \"page\", style: \"primary\", arrow: true },\n },\n },\n ],\n endsAt: \"2026-11-15\",\n },\n },\n notes: {\n why:\n \"Personalization is three layers with a strict precedence: audiences (first match wins), then the experiment (for everyone unmatched), then the default — which is required and complete so the page is never blank. Audience and variant content are partial objects that inherit empty fields from the default, so editors only write what changes. The deepest path (Hero › A/B test › Version › Content › Button) is five frames.\",\n sanity:\n \"Sanity: personalizedHero { default: heroContent, segments[] { rules[], content: heroContent }, experiment { variants[] { weight, content } } } — or Sanity's newer content-releases + external flags (Statsig, LaunchDarkly) with `variant` fields. Weight-sum validation is a custom rule in Sanity (`Rule.custom`).\",\n htmlSignals: [\n \"Multiple hidden copies of the hero (display:none, data-variant, data-audience attributes) or a flicker-guard style (async-hide, .optimize-loading)\",\n \"Experimentation scripts: Optimizely, VWO, Google Optimize remnants, Statsig, LaunchDarkly, Mutiny, Intellimize\",\n \"Server responses differing by query string (utm_campaign) or Vary headers\",\n \"Clearbit/6sense reveal calls before the hero renders\",\n ],\n mcp:\n \"A static crawl only sees ONE variant — never invent audiences. Use what the page reveals: variant markup in the DOM, experiment configs inlined by the testing tool, or utm-specific versions you were given URLs for. The visible version becomes `default` (complete). Each discovered audience → `segment` with rules translated from the tool's targeting (unknown targeting → a rule with attribute 'utmCampaign' and a review flag). Experiment configs → `experiment.variants` with their weights; the original is the control. If the testing tool rewrites more than this hero (multi-section tests), don't model it per block — flag it for a page-level experiment.\",\n pitfalls: [\n \"SCHEMA GAP: no cross-item validation — version weights must sum to 100 and exactly one version should be the control; neither can be expressed.\",\n \"SCHEMA GAP: no audience/segment collection to reference; rules are re-typed in every block that personalizes (a `reference: { to: ['audience'] }` target is needed).\",\n \"SCHEMA GAP: partial content objects need 'inherits from default' semantics in the schema (show the default as a placeholder, mark overridden fields); today it's a description.\",\n \"SCHEMA GAP: a variant's hidden `content` is still required-validated by its own rules if `isControl` flips — conditions hide but can't relax `required` declaratively.\",\n \"Personalized copy must not change the H1 for SEO purposes; the native page title stays the default's.\",\n ],\n },\n },\n\n /* ───────────────────────────── 7. Responsive layout settings ───────────────────────────── */\n {\n id: \"responsive-layout-settings\",\n label: \"Responsive layout settings\",\n proves: \"Columns, gap and spacing per breakpoint · inherit from the larger screen · per-item visibility and mobile order\",\n category: \"Advanced patterns\",\n tags: [\"responsive-layout\", \"repeater\", \"conditional\", \"variants\"],\n brand: \"Lumen Studio\",\n previewLayout: \"grid-3\",\n schema: {\n name: \"servicesGrid\",\n title: \"Services grid\",\n kind: \"block\",\n icon: \"apps\",\n category: \"Features & storytelling\",\n description: \"Services as cards, laid out separately for desktop, tablet and phone\",\n variants: [{ id: \"cards\", name: \"Cards\" }, { id: \"plain\", name: \"Plain\" }],\n preview: { title: \"heading\", subtitle: \"intro\" },\n groups: [\n { name: \"content\", title: \"Content\", default: true },\n { name: \"layout\", title: \"Layout\", icon: \"devices\" },\n ],\n fields: [\n { name: \"heading\", title: \"Heading\", type: \"string\", group: \"content\", validation: { required: true, recommendedMax: 50 } },\n { name: \"intro\", title: \"Intro\", type: \"text\", rows: 2, group: \"content\" },\n {\n name: \"items\",\n title: \"Services\",\n type: \"array\",\n group: \"content\",\n itemNoun: \"service\",\n validation: { min: 2, max: 9 },\n of: [\n {\n name: \"service\",\n title: \"Service\",\n type: \"object\",\n icon: \"briefcase\",\n preview: { title: \"title\", subtitle: \"body\", media: \"image\", fallback: \"Untitled service\" },\n fields: [\n { name: \"title\", title: \"Title\", type: \"string\", validation: { required: true, max: 40 } },\n { name: \"body\", title: \"Body\", type: \"text\", rows: 2, validation: { recommendedMax: 140 } },\n { name: \"image\", title: \"Image\", type: \"image\" },\n { name: \"link\", title: \"Link\", type: \"link\" },\n {\n name: \"showOn\",\n title: \"Show on\",\n type: \"multiselect\",\n initialValue: [\"desktop\", \"tablet\", \"mobile\"],\n options: [{ value: \"desktop\", label: \"Desktop\" }, { value: \"tablet\", label: \"Tablet\" }, { value: \"mobile\", label: \"Phone\" }],\n },\n { name: \"mobileOrder\", title: \"Order on phones\", type: \"number\", numeric: { min: 1, max: 9, step: 1 }, description: \"Leave empty to keep the desktop order.\" },\n ],\n },\n ],\n },\n {\n name: \"desktop\",\n title: \"Desktop\",\n type: \"object\",\n group: \"layout\",\n icon: \"device-desktop\",\n openMode: \"drill\",\n description: \"1280px and wider.\",\n fields: [\n { name: \"columns\", title: \"Columns\", type: \"number\", layout: \"slider\", numeric: { min: 1, max: 4, step: 1 }, initialValue: 3 },\n { name: \"gap\", title: \"Gap\", type: \"select\", layout: \"segmented\", initialValue: \"lg\", options: [{ value: \"sm\", label: \"S\" }, { value: \"md\", label: \"M\" }, { value: \"lg\", label: \"L\" }] },\n { name: \"paddingY\", title: \"Space above and below\", type: \"select\", layout: \"segmented\", initialValue: \"xl\", options: [{ value: \"md\", label: \"M\" }, { value: \"lg\", label: \"L\" }, { value: \"xl\", label: \"XL\" }] },\n { name: \"alignment\", title: \"Alignment\", type: \"select\", layout: \"segmented\", initialValue: \"left\", options: [{ value: \"left\", label: \"Left\" }, { value: \"center\", label: \"Center\" }] },\n ],\n },\n {\n name: \"tablet\",\n title: \"Tablet\",\n type: \"object\",\n group: \"layout\",\n icon: \"device-tablet\",\n openMode: \"drill\",\n description: \"768 to 1279px.\",\n fields: [\n { name: \"useDesktopLayout\", title: \"Same as desktop\", type: \"boolean\", initialValue: true },\n { name: \"columns\", title: \"Columns\", type: \"number\", layout: \"slider\", hidden: { field: \"useDesktopLayout\", equals: false }, numeric: { min: 1, max: 3, step: 1 } },\n { name: \"gap\", title: \"Gap\", type: \"select\", layout: \"segmented\", hidden: { field: \"useDesktopLayout\", equals: false }, options: [{ value: \"sm\", label: \"S\" }, { value: \"md\", label: \"M\" }, { value: \"lg\", label: \"L\" }] },\n { name: \"paddingY\", title: \"Space above and below\", type: \"select\", layout: \"segmented\", hidden: { field: \"useDesktopLayout\", equals: false }, options: [{ value: \"md\", label: \"M\" }, { value: \"lg\", label: \"L\" }, { value: \"xl\", label: \"XL\" }] },\n ],\n },\n {\n name: \"mobile\",\n title: \"Phone\",\n type: \"object\",\n group: \"layout\",\n icon: \"device-mobile\",\n openMode: \"drill\",\n description: \"Under 768px.\",\n fields: [\n {\n name: \"arrangement\",\n title: \"Arrange as\",\n type: \"select\",\n layout: \"cards\",\n initialValue: \"stack\",\n options: [\n { value: \"stack\", label: \"Stack\", icon: \"layout-rows\", description: \"One card per row\" },\n { value: \"carousel\", label: \"Swipe\", icon: \"carousel-horizontal\", description: \"Cards scroll sideways\" },\n { value: \"grid\", label: \"Two columns\", icon: \"layout-grid\", description: \"Small cards, short text only\" },\n ],\n },\n { name: \"showPeek\", title: \"Show the next card's edge\", type: \"boolean\", hidden: { field: \"arrangement\", equals: \"carousel\" }, initialValue: true },\n { name: \"paddingY\", title: \"Space above and below\", type: \"select\", layout: \"segmented\", initialValue: \"md\", options: [{ value: \"sm\", label: \"S\" }, { value: \"md\", label: \"M\" }, { value: \"lg\", label: \"L\" }] },\n { name: \"hideImages\", title: \"Hide card images\", type: \"boolean\" },\n ],\n },\n ],\n },\n value: {\n _variant: \"cards\",\n heading: \"What we do\",\n intro: \"Four services, one team from first sketch to handover.\",\n items: [\n { _key: \"s1\", title: \"Residential\", body: \"Houses and apartment renovations shaped around light and air.\", image: pic(\"lumen-residential\", \"A living room lit by a tall slit window\"), link: { type: \"page\", href: \"/services/residential\" }, showOn: [\"desktop\", \"tablet\", \"mobile\"], mobileOrder: 1 },\n { _key: \"s2\", title: \"Civic & cultural\", body: \"Libraries, schools and small museums for municipalities.\", image: pic(\"lumen-library\", \"A library reading room under a sawtooth roof\"), link: { type: \"page\", href: \"/services/civic\" }, showOn: [\"desktop\", \"tablet\", \"mobile\"], mobileOrder: 2 },\n { _key: \"s3\", title: \"Interiors\", body: \"Joinery, lighting and material palettes, specified to the millimetre.\", image: pic(\"lumen-joinery\", \"Oak joinery with integrated lighting\"), link: { type: \"page\", href: \"/services/interiors\" }, showOn: [\"desktop\", \"tablet\"] },\n { _key: \"s4\", title: \"Daylight studies\", body: \"Sun-path and glare modelling for other architects' projects.\", image: pic(\"lumen-daylight\", \"A sun-path diagram over a site plan\"), link: { type: \"page\", href: \"/services/daylight\" }, showOn: [\"desktop\", \"tablet\", \"mobile\"], mobileOrder: 3 },\n ],\n desktop: { columns: 4, gap: \"lg\", paddingY: \"xl\", alignment: \"left\" },\n tablet: { useDesktopLayout: false, columns: 2, gap: \"md\", paddingY: \"lg\" },\n mobile: { arrangement: \"carousel\", showPeek: true, paddingY: \"md\", hideImages: false },\n },\n notes: {\n why:\n \"Layout is design, so it lives in its own Layout tab, split by breakpoint because the decisions differ per screen (4 columns → 2 → swipe). Tablet inherits desktop until switched off — editors only touch what changes. Per-item visibility and mobile order sit on the item because they're about THAT card. Arrangement on phones is a choice of patterns (cards select), not a column count, because 'swipe' isn't a number of columns.\",\n sanity:\n \"Sanity has no responsive primitive; teams model `layout: { desktop: {...}, tablet: {...}, mobile: {...} }` exactly like this, or move layout to code entirely. Builder.io / Webflow store per-breakpoint style overrides natively — that's the capability we're missing.\",\n htmlSignals: [\n \"Media-query grid changes: grid-template-columns: repeat(4, …) at ≥1280px, repeat(2, …) at ≥768px, one column below\",\n \"Responsive utility classes: md:grid-cols-2 lg:grid-cols-4, hidden md:block, order-first sm:order-none\",\n \"Scroll-snap carousels that only apply under a breakpoint\",\n \"Different padding utilities per breakpoint (py-12 lg:py-24)\",\n ],\n mcp:\n \"Read the computed layout at three widths (1440, 834, 390) rather than parsing CSS. Desktop values → `desktop`; if tablet matches desktop, set `tablet.useDesktopLayout: true` and leave the rest empty; otherwise fill only what differs. Phone: one column → stack, horizontal overflow with snap → carousel (+ showPeek if the next card is partially visible), two columns → grid. Map spacing to tokens (S/M/L/XL) by nearest value — never store raw pixels. Items hidden at a width → remove that breakpoint from `showOn`; reordered items → `mobileOrder`.\",\n pitfalls: [\n \"SCHEMA GAP: no responsive value type (`responsive<T>`: one field with a value per breakpoint and inheritance). Modelling it as three objects triplicates fields and the inherit toggle is a hand-made convention.\",\n \"SCHEMA GAP: breakpoints are hard-coded in descriptions (768/1280); they should come from the site's design tokens.\",\n \"SCHEMA GAP: `mobileOrder` should be unique among items and ≤ item count — cross-item validation isn't available.\",\n \"Hiding content on phones hides it from mobile-first indexing too; prefer reordering over hiding.\",\n ],\n },\n },\n\n /* ───────────────────────────── 8. Grid with per-cell layout ───────────────────────────── */\n {\n id: \"grid-cell-layout\",\n label: \"Grid with per-cell layout\",\n proves: \"Slot cells with column span, row span, surface and alignment settings · mixed block types per cell\",\n category: \"Advanced patterns\",\n tags: [\"slots\", \"variants\", \"media-heavy\", \"responsive-layout\", \"commerce\"],\n brand: \"Caldera\",\n previewLayout: \"bento\",\n schema: {\n name: \"layoutGrid\",\n title: \"Layout grid\",\n kind: \"block\",\n icon: \"layout-board-split\",\n category: \"Features & storytelling\",\n description: \"A grid where every cell sets its own size, surface and alignment\",\n variants: [{ id: \"four\", name: \"4 columns\" }, { id: \"six\", name: \"6 columns\" }],\n preview: { title: \"heading\", subtitle: \"eyebrow\" },\n groups: [\n { name: \"content\", title: \"Content\", default: true },\n { name: \"grid\", title: \"Grid\" },\n ],\n fields: [\n { name: \"eyebrow\", title: \"Eyebrow\", type: \"string\", group: \"content\", validation: { max: 32 } },\n { name: \"heading\", title: \"Heading\", type: \"string\", group: \"content\", validation: { recommendedMax: 56 }, ai: true },\n {\n name: \"cells\",\n title: \"Cells\",\n type: \"slot\",\n group: \"content\",\n validation: { min: 2, max: 12 },\n of: { type: \"block\", allow: [\"imageBlock\", \"productCard\", \"quoteBlock\", \"textBlock\", \"ctaCard\", \"statBlock\", \"videoBlock\", \"featureBlock\"] },\n slotSettings: [\n { name: \"colSpan\", title: \"Width\", type: \"number\", layout: \"slider\", numeric: { min: 1, max: 4, step: 1 }, initialValue: 1, description: \"In columns, on desktop.\" },\n { name: \"rowSpan\", title: \"Height\", type: \"number\", layout: \"slider\", numeric: { min: 1, max: 3, step: 1 }, initialValue: 1, description: \"In rows, on desktop.\" },\n {\n name: \"surface\",\n title: \"Surface\",\n type: \"select\",\n layout: \"segmented\",\n initialValue: \"light\",\n options: [{ value: \"light\", label: \"Light\" }, { value: \"warm\", label: \"Warm\" }, { value: \"dark\", label: \"Dark\" }, { value: \"brand\", label: \"Brand\" }],\n },\n {\n name: \"alignX\",\n title: \"Horizontal\",\n type: \"select\",\n layout: \"segmented\",\n initialValue: \"start\",\n options: [{ value: \"start\", label: \"Start\" }, { value: \"center\", label: \"Center\" }, { value: \"end\", label: \"End\" }],\n },\n {\n name: \"alignY\",\n title: \"Vertical\",\n type: \"select\",\n layout: \"segmented\",\n initialValue: \"end\",\n options: [{ value: \"start\", label: \"Top\" }, { value: \"center\", label: \"Middle\" }, { value: \"end\", label: \"Bottom\" }],\n },\n { name: \"padding\", title: \"Padding\", type: \"select\", layout: \"segmented\", initialValue: \"md\", options: [{ value: \"none\", label: \"None\" }, { value: \"md\", label: \"M\" }, { value: \"lg\", label: \"L\" }] },\n { name: \"hideOnMobile\", title: \"Hide on phones\", type: \"boolean\" },\n ],\n },\n { name: \"rowHeight\", title: \"Row height\", type: \"select\", group: \"grid\", layout: \"segmented\", initialValue: \"md\", options: [{ value: \"sm\", label: \"220px\" }, { value: \"md\", label: \"300px\" }, { value: \"lg\", label: \"380px\" }] },\n { name: \"gap\", title: \"Gap\", type: \"select\", group: \"grid\", layout: \"segmented\", initialValue: \"md\", options: [{ value: \"sm\", label: \"S\" }, { value: \"md\", label: \"M\" }, { value: \"lg\", label: \"L\" }] },\n { name: \"useDenseFill\", title: \"Fill gaps\", type: \"boolean\", group: \"grid\", description: \"Changes the visual order, not the reading order.\" },\n ],\n },\n value: {\n _variant: \"four\",\n eyebrow: \"Gift guide\",\n heading: \"Gifts for people who cook outside.\",\n cells: [\n { _key: \"g1\", _type: \"imageBlock\", _variant: \"cover\", _settings: { colSpan: 2, rowSpan: 2, surface: \"dark\", alignX: \"start\", alignY: \"end\", padding: \"none\" }, image: pic(\"gift-campfire\", \"A wrapped Ember Dutch oven beside a campfire in the snow\", 1200, 1200), caption: \"The Ember, wrapped for the solstice\", link: { type: \"page\", href: \"/products/ember-dutch-oven\" } },\n { _key: \"g2\", _type: \"productCard\", _settings: { colSpan: 1, rowSpan: 1, surface: \"light\", alignX: \"center\", alignY: \"center\", padding: \"md\" }, product: \"gid://shopify/Product/8814\", badge: \"Under $70\" },\n { _key: \"g3\", _type: \"statBlock\", _settings: { colSpan: 1, rowSpan: 1, surface: \"brand\", alignX: \"start\", alignY: \"end\", padding: \"lg\" }, value: \"Free\", label: \"Gift wrap on every order till Dec 20\", icon: \"gift\" },\n { _key: \"g4\", _type: \"quoteBlock\", _settings: { colSpan: 2, rowSpan: 1, surface: \"warm\", alignX: \"start\", alignY: \"center\", padding: \"lg\" }, quote: \"My dad has used his Ridge every Sunday since I gave it to him. It's the only gift he's ever mentioned twice.\", author: \"Sam Whitaker\", role: \"Customer, Missoula\", rating: 5 },\n { _key: \"g5\", _type: \"productCard\", _settings: { colSpan: 1, rowSpan: 2, surface: \"light\", alignX: \"center\", alignY: \"start\", padding: \"md\", hideOnMobile: true }, product: \"gid://shopify/Product/8815\", badge: \"Stocking stuffer\" },\n { _key: \"g6\", _type: \"ctaCard\", _variant: \"solid\", _settings: { colSpan: 3, rowSpan: 1, surface: \"dark\", alignX: \"start\", alignY: \"center\", padding: \"lg\" }, heading: \"Not sure? Send a gift card.\", body: \"Delivered by email on the day you choose.\", button: { label: \"Buy a gift card\", href: \"/gift-cards\", type: \"page\", style: \"primary\", arrow: true }, tone: \"#1E1B18\" },\n ],\n rowHeight: \"md\",\n gap: \"md\",\n useDenseFill: true,\n },\n notes: {\n why:\n \"Cells are a SLOT (any library block) because a gift grid mixes products, photos, quotes and offers; the cell's geometry (spans, surface, alignment, padding) belongs to the PLACEMENT, not to the block — the same product card could be 1×1 here and 2×2 elsewhere — so it lives in `slotSettings` and is stored under `_settings`. Numeric spans (sliders) replace bento's preset sizes when the design needs arbitrary rectangles.\",\n sanity:\n \"Sanity: layoutGrid { cells: array of objects { _type: 'cell', layout { colSpan, rowSpan, surface }, content: array of [blocks] (max 1) } } — Sanity has no slot settings, so placement fields wrap each block in a cell object (one extra level).\",\n htmlSignals: [\n \"CSS grid with per-child grid-column: span N / grid-row: span N (or col-span-2 row-span-2 utilities)\",\n \"Children of different kinds (product card, figure, blockquote, CTA) in one grid\",\n \"Per-cell background classes (bg-dark, bg-brand) and place-self/align-self alignment\",\n \"grid-auto-flow: dense\",\n ],\n mcp:\n \"Each grid child → one slot child: classify its content into a library block (_type) and copy the content fields; read its computed grid-column/grid-row span → colSpan/rowSpan; background → nearest surface token; align-self/justify-self → alignY/alignX; padding → token. Children hidden under 768px → hideOnMobile. If two children are the same kind with the same geometry in a regular rhythm, it's a plain card grid (array), not this layout grid. If spans fall into exactly 4 presets, prefer the Bento block.\",\n pitfalls: [\n \"SCHEMA GAP: no cross-cell validation that spans fit the column count (a 3-wide cell in a 4-column grid after a 2-wide one wraps unexpectedly); `colSpan` max can't depend on the parent's variant.\",\n \"SCHEMA GAP: slotSettings can't be conditional on the child's block type (e.g. padding 'none' only for images) and can't vary per breakpoint.\",\n \"Dense packing changes the visual order but not the DOM order — screen readers follow the DOM.\",\n ],\n },\n },\n\n /* ───────────────────────────── 9. References web ───────────────────────────── */\n {\n id: \"references-web\",\n label: \"References web\",\n proves: \"Products, authors, recipes and pages referenced manually, by filter, or pinned + auto-filled · reverse 'used in' as a gap\",\n category: \"Advanced patterns\",\n tags: [\"references\", \"dynamic-query\", \"conditional\", \"repeater\", \"validation\"],\n brand: \"Caldera\",\n previewLayout: \"grid-3\",\n schema: {\n name: \"storyFooter\",\n title: \"Story footer\",\n kind: \"block\",\n icon: \"link\",\n category: \"Listings & feeds\",\n description: \"Shop the story, meet the writer, read next\",\n preview: { title: \"heading\" },\n groups: [\n { name: \"shop\", title: \"Shop\", default: true, icon: \"shopping-bag\" },\n { name: \"people\", title: \"People\", icon: \"user\" },\n { name: \"next\", title: \"Read next\", icon: \"news\" },\n ],\n fields: [\n { name: \"heading\", title: \"Heading\", type: \"string\", group: \"shop\", validation: { recommendedMax: 40 }, placeholder: \"Cook along\" },\n { name: \"products\", title: \"Products in this story\", type: \"array\", group: \"shop\", validation: { max: 4, unique: true }, of: [{ name: \"product\", title: \"Product\", type: \"reference\", reference: { to: [\"shopify\"] } }] },\n { name: \"recipe\", title: \"Recipe\", type: \"reference\", group: \"shop\", reference: { to: [\"col_recipes\"] } },\n { name: \"authors\", title: \"Writers\", type: \"array\", group: \"people\", validation: { max: 2 }, of: [{ name: \"author\", title: \"Writer\", type: \"reference\", reference: { to: [\"col_authors\"] } }] },\n { name: \"guidePage\", title: \"Product page\", type: \"reference\", group: \"people\", reference: { to: [\"page\"] } },\n {\n name: \"mode\",\n title: \"Stories come from\",\n type: \"select\",\n group: \"next\",\n layout: \"segmented\",\n initialValue: \"mixed\",\n options: [{ value: \"manual\", label: \"Picked\" }, { value: \"auto\", label: \"Automatic\" }, { value: \"mixed\", label: \"Pinned + automatic\" }],\n },\n {\n name: \"pinned\",\n title: \"Pinned stories\",\n type: \"array\",\n group: \"next\",\n hidden: { field: \"mode\", equals: [\"manual\", \"mixed\"] },\n validation: { min: 1, max: 3, unique: true },\n of: [{ name: \"story\", title: \"Story\", type: \"reference\", reference: { to: [\"col_journal\"] } }],\n },\n {\n name: \"auto\",\n title: \"Fill the rest with\",\n type: \"object\",\n group: \"next\",\n icon: \"filter\",\n openMode: \"drill\",\n hidden: { field: \"mode\", equals: [\"auto\", \"mixed\"] },\n fields: [\n { name: \"topics\", title: \"Topics\", type: \"array\", validation: { max: 3 }, of: [{ name: \"topic\", title: \"Topic\", type: \"reference\", reference: { to: [\"col_topics\"] } }] },\n { name: \"useSameAuthor\", title: \"Prefer the same writer\", type: \"boolean\" },\n { name: \"excludeCurrent\", title: \"Leave out this page\", type: \"boolean\", initialValue: true },\n { name: \"total\", title: \"Total stories\", type: \"number\", numeric: { min: 1, max: 6, step: 1 }, initialValue: 3, description: \"Pinned stories count toward the total.\" },\n ],\n },\n ],\n },\n value: {\n heading: \"Cook along\",\n products: [\"gid://shopify/Product/8813\", \"gid://shopify/Product/8812\"],\n authors: [\"en_a1\"],\n guidePage: \"pg_cablefold\",\n mode: \"mixed\",\n pinned: [\"en_5\"],\n auto: { topics: [\"tp_recipes\", \"tp_camp\"], useSameAuthor: false, excludeCurrent: true, total: 3 },\n },\n notes: {\n why:\n \"Everything here is a pointer, so nothing is retyped: products from Shopify, writers from Authors, the recipe from Recipes, a static page for the guide. 'Read next' has three honest modes — picked, automatic, or pinned + automatic — and the automatic part is a drill-in object of filter references (topics), so editors curate the top slot and let the query fill the rest. The section is the canonical example of reference fan-out: one block touches five collections.\",\n sanity:\n \"Sanity: storyFooter { products[] → shopify.product, recipe → recipe, authors[] → author, guidePage → page, pinned[] → story, auto { topics[] → topic } } and the reverse via GROQ `*[references(^._id)]`. Sanity Studio shows incoming references in a document pane — we don't model it, see gaps.\",\n htmlSignals: [\n \"Product cards linking to /products/* under an article\",\n \"An author bio card (photo, name, role, link to /authors/*)\",\n \"'Read next' / 'More from' lists where the first item is constant across stories and the rest vary (pinned + auto)\",\n \"Links to a guide page with a consistent label\",\n ],\n mcp:\n \"Resolve EVERY link to an existing page or CMS item before creating anything: product URLs → Shopify product references; author links → Authors entries (create missing authors as entries, never inline names); /recipes/* → Recipes entries; static pages → page references. For 'Read next': compare across several crawled stories — items that repeat are pinned, items that vary and share a topic → auto with those topics. If you see the same footer on every story with identical items, it's a global block, not this. Unresolvable links stay as links in a text field with a review flag.\",\n pitfalls: [\n \"SCHEMA GAP: no reverse references / 'used in' — the platform knows where a product or author is referenced, but a schema can't declare a read-only computed backlinks field (Sanity shows incoming references natively).\",\n \"SCHEMA GAP: reference filters (`reference.filter`) exist in types.ts but aren't used by the picker, so 'only published stories in the Recipes topic' can't constrain `pinned`.\",\n \"SCHEMA GAP: `excludeCurrent` and 'pinned count toward total' are semantics of the query that the schema can't describe — they're renderer conventions.\",\n \"SCHEMA GAP: `unique` on reference arrays isn't enforced; the same story can be pinned twice.\",\n \"Referencing pages by id survives slug changes; storing hrefs doesn't.\",\n ],\n },\n },\n\n /* ───────────────────────────── 10. Nested repeaters with validation ───────────────────────────── */\n {\n id: \"changelog-nested-validation\",\n label: \"Changelog with nested validation\",\n proves: \"Releases → changes → packages · semver and issue-key patterns · min/max at every level · required-if breaking\",\n category: \"Advanced patterns\",\n tags: [\"validation\", \"repeater\", \"conditional\", \"rich-text\"],\n brand: \"Northwind\",\n previewLayout: \"timeline\",\n schema: {\n name: \"releaseNotes\",\n title: \"Release notes\",\n kind: \"block\",\n icon: \"notes\",\n category: \"Listings & feeds\",\n description: \"Releases with typed changes and migration notes\",\n variants: [{ id: \"timeline\", name: \"Timeline\" }, { id: \"compact\", name: \"Compact\" }],\n preview: { title: \"heading\", subtitle: \"intro\" },\n fields: [\n { name: \"heading\", title: \"Heading\", type: \"string\", validation: { required: true, max: 60 } },\n { name: \"intro\", title: \"Intro\", type: \"text\", rows: 2 },\n {\n name: \"releases\",\n title: \"Releases\",\n type: \"array\",\n itemNoun: \"release\",\n validation: { min: 1, max: 30 },\n of: [\n {\n name: \"release\",\n title: \"Release\",\n type: \"object\",\n icon: \"tag\",\n preview: { title: \"version\", subtitle: \"date\", fallback: \"Untitled release\" },\n fields: [\n {\n name: \"version\",\n title: \"Version\",\n type: \"string\",\n validation: { required: true, unique: true, pattern: \"^\\\\d+\\\\.\\\\d+\\\\.\\\\d+(-(alpha|beta|rc)\\\\.\\\\d+)?$\", patternMessage: \"Use semantic versioning, like 4.2.0 or 5.0.0-beta.1.\" },\n },\n { name: \"date\", title: \"Released\", type: \"date\", validation: { required: true } },\n { name: \"channel\", title: \"Channel\", type: \"select\", layout: \"segmented\", initialValue: \"stable\", options: [{ value: \"stable\", label: \"Stable\" }, { value: \"beta\", label: \"Beta\" }, { value: \"lts\", label: \"LTS\" }] },\n { name: \"summary\", title: \"Summary\", type: \"text\", rows: 2, validation: { max: 240 } },\n {\n name: \"changes\",\n title: \"Changes\",\n type: \"array\",\n itemNoun: \"change\",\n validation: { min: 1, max: 20 },\n of: [\n {\n name: \"change\",\n title: \"Change\",\n type: \"object\",\n icon: \"point\",\n preview: { title: \"summary\", subtitle: \"kind\", fallback: \"Untitled change\" },\n fields: [\n {\n name: \"kind\",\n title: \"Kind\",\n type: \"select\",\n validation: { required: true },\n options: [\n { value: \"added\", label: \"Added\" },\n { value: \"changed\", label: \"Changed\" },\n { value: \"fixed\", label: \"Fixed\" },\n { value: \"deprecated\", label: \"Deprecated\" },\n { value: \"removed\", label: \"Removed\" },\n { value: \"security\", label: \"Security\" },\n ],\n },\n { name: \"summary\", title: \"Summary\", type: \"string\", validation: { required: true, min: 10, max: 120 } },\n { name: \"issue\", title: \"Issue\", type: \"string\", validation: { pattern: \"^NW-\\\\d{1,6}$\", patternMessage: \"Use the tracker key, like NW-1042.\" } },\n { name: \"isBreaking\", title: \"Breaking change\", type: \"boolean\", description: \"Requires migration notes.\" },\n { name: \"migration\", title: \"Migration notes\", type: \"richtext\", hidden: { field: \"isBreaking\", equals: true }, validation: { required: true } },\n {\n name: \"packages\",\n title: \"Packages\",\n type: \"array\",\n itemNoun: \"package\",\n openMode: \"inline\",\n validation: { max: 6 },\n of: [\n {\n name: \"package\",\n title: \"Package\",\n type: \"object\",\n icon: \"package\",\n preview: { title: \"name\", subtitle: \"to\", fallback: \"Untitled package\" },\n fields: [\n { name: \"name\", title: \"Package\", type: \"string\", validation: { required: true, pattern: \"^@northwind/[a-z0-9-]+$\", patternMessage: \"Use a Northwind package name, like @northwind/sdk.\" } },\n { name: \"from\", title: \"From\", type: \"string\", validation: { pattern: \"^\\\\d+\\\\.\\\\d+\\\\.\\\\d+$\", patternMessage: \"Use semantic versioning, like 4.1.3.\" } },\n { name: \"to\", title: \"To\", type: \"string\", validation: { required: true, pattern: \"^\\\\d+\\\\.\\\\d+\\\\.\\\\d+(-[a-z]+\\\\.\\\\d+)?$\", patternMessage: \"Use semantic versioning, like 4.2.0.\" } },\n ],\n },\n ],\n },\n ],\n },\n ],\n },\n ],\n },\n ],\n },\n { name: \"hasRssFeed\", title: \"Publish an RSS feed\", type: \"boolean\", initialValue: true, description: \"Publishes /changelog.xml.\" },\n ],\n },\n value: {\n _variant: \"timeline\",\n heading: \"Changelog\",\n intro: \"Every release of the Northwind SDK and CLI. Breaking changes include migration notes.\",\n releases: [\n {\n _key: \"rl1\",\n version: \"5.0.0\",\n date: \"2026-09-30\",\n channel: \"stable\",\n summary: \"Pagination moves to cursors and the SDK drops Node 18.\",\n changes: [\n {\n _key: \"ch1\",\n kind: \"changed\",\n summary: \"List methods return cursor pagination instead of page numbers\",\n issue: \"NW-1042\",\n isBreaking: true,\n migration:\n \"<p>Replace <code>page</code> with the <code>cursor</code> from the previous response:</p><pre><code>const next = await nw.orders.list({ cursor: res.nextCursor });</code></pre>\",\n packages: [{ _key: \"pk1\", name: \"@northwind/sdk\", from: \"4.9.2\", to: \"5.0.0\" }],\n },\n {\n _key: \"ch2\",\n kind: \"removed\",\n summary: \"Support for Node 18, which reached end of life in April\",\n issue: \"NW-1051\",\n isBreaking: true,\n migration: \"<p>Upgrade to Node 20 or newer. No code changes are needed.</p>\",\n packages: [\n { _key: \"pk2\", name: \"@northwind/sdk\", from: \"4.9.2\", to: \"5.0.0\" },\n { _key: \"pk3\", name: \"@northwind/cli\", from: \"2.6.0\", to: \"3.0.0\" },\n ],\n },\n { _key: \"ch3\", kind: \"added\", summary: \"nw.orders.stream() for server-sent order events\", issue: \"NW-998\", packages: [{ _key: \"pk4\", name: \"@northwind/sdk\", to: \"5.0.0\" }] },\n ],\n },\n {\n _key: \"rl2\",\n version: \"4.9.2\",\n date: \"2026-08-14\",\n channel: \"lts\",\n changes: [\n { _key: \"ch4\", kind: \"security\", summary: \"Webhook signatures are compared in constant time\", issue: \"NW-1033\", packages: [{ _key: \"pk5\", name: \"@northwind/sdk\", from: \"4.9.1\", to: \"4.9.2\" }] },\n { _key: \"ch5\", kind: \"fixed\", summary: \"Retries no longer double-send idempotent POST requests\", issue: \"NW-1029\" },\n ],\n },\n ],\n hasRssFeed: true,\n },\n notes: {\n why:\n \"A changelog is the purest nested repeater: releases → changes → packages, each level with its own limits and formats. Validation sits where the knowledge is: semver on versions, the tracker key on issues, package names restricted to the org scope. 'Migration notes required when breaking' is the required-if pattern: a conditional field (shown when breaking) with `required`, which only validates while visible. Packages are three short strings, so they open inline.\",\n sanity:\n \"Sanity: releaseNotes { releases[] { version (Rule.regex(semver)), changes[] { kind, breaking, migration (hidden: !parent.breaking, validation: Rule.custom requiring when breaking) } } }. Often modelled as one Release document per version instead — see mcp.\",\n htmlSignals: [\n \"Headings with version numbers (## 5.0.0 — 2026-09-30) followed by grouped lists (Added / Changed / Fixed)\",\n \"Keep a Changelog structure, 'BREAKING' labels, links to issue trackers (NW-1042, #1234)\",\n \"Inline code and fenced code blocks in migration sections\",\n \"An RSS/Atom link for releases\",\n ],\n mcp:\n \"Each version heading → `release` (version from the heading text, date from the heading or <time>). Group headings (Added/Fixed…) set `kind` for the list items under them; each list item → `change` with its summary (first sentence, ≤120 chars), issue keys extracted by pattern, 'BREAKING'/'⚠' → breaking: true with the following paragraph(s)/code as migration (keep code blocks). Package bumps mentioned as 'pkg@x → y' → packages. Split rule: more than ~30 releases, or releases with their own URLs, → model Release as a COLLECTION (one entry per version, sorted by date) and place a dynamic-query block; never keep years of history in one block.\",\n pitfalls: [\n \"SCHEMA GAP: `unique` on version is declared but not enforced; duplicates and ordering (newest first, versions descending) can't be validated.\",\n \"SCHEMA GAP: required-if only works by hiding the field; 'required when breaking, but still visible and optional otherwise' can't be expressed. Needs `validation.requiredWhen: Condition`.\",\n \"SCHEMA GAP: `min` on a string means characters, on an array items, on a number value — one overloaded key; no word-count or line-count limits.\",\n \"SCHEMA GAP: patterns validate strings only; a `date` can't be constrained (not in the future, after the previous release).\",\n \"Inline packages with three fields each get cramped; the inline openMode threshold (≤3 primitives) is exactly at its limit here.\",\n ],\n },\n },\n\n /* ───────────────────────────── 11. Rich text with embeds ───────────────────────────── */\n {\n id: \"rich-text-embedded-components\",\n label: \"Rich text with components and annotations\",\n proves: \"Body with linked component instances (D28), inline entry links, footnote and glossary annotations, image and table islands\",\n category: \"Advanced patterns\",\n tags: [\"rich-text\", \"references\", \"embed\", \"a11y\", \"media-heavy\"],\n brand: \"Caldera\",\n previewLayout: \"article\",\n schema: {\n name: \"recipeStory\",\n title: \"Recipe story\",\n kind: \"entry\",\n icon: \"chef-hat\",\n category: \"Long-form & docs\",\n description: \"A Journal story with a recipe, product cards and footnotes inside the text\",\n preview: { title: \"title\", subtitle: \"dek\", media: \"coverImage\" },\n groups: [\n { name: \"story\", title: \"Story\", default: true },\n { name: \"notes\", title: \"Notes & terms\", icon: \"notes\" },\n ],\n fields: [\n { name: \"title\", title: \"Title\", type: \"string\", group: \"story\", validation: { required: true, max: 90, recommendedMax: 70 }, ai: true },\n { name: \"dek\", title: \"Dek\", type: \"text\", rows: 2, group: \"story\", validation: { recommendedMax: 160 } },\n { name: \"coverImage\", title: \"Cover image\", type: \"image\", group: \"story\", validation: { required: true } },\n {\n name: \"body\",\n title: \"Body\",\n type: \"richtext\",\n group: \"story\",\n validation: { required: true },\n ai: true,\n description: \"Type / for components, images and tables.\",\n helpMore: \"Components are linked copies: edit the original in Content › Blocks and every story updates, except the fields you override here.\",\n },\n {\n name: \"footnotes\",\n title: \"Footnotes\",\n type: \"array\",\n group: \"notes\",\n itemNoun: \"footnote\",\n openMode: \"inline\",\n description: \"Numbered in the order they appear in the body.\",\n of: [\n {\n name: \"footnote\",\n title: \"Footnote\",\n type: \"object\",\n icon: \"superscript\",\n preview: { title: \"text\", subtitle: \"key\", fallback: \"Untitled footnote\" },\n fields: [\n { name: \"key\", title: \"Key\", type: \"string\", validation: { required: true, unique: true, pattern: \"^fn-[a-z0-9-]+$\", patternMessage: \"Use lowercase letters, numbers and hyphens, like fn-saffron.\" } },\n { name: \"text\", title: \"Note\", type: \"text\", rows: 2, validation: { required: true, max: 300 } },\n { name: \"source\", title: \"Source\", type: \"link\" },\n ],\n },\n ],\n },\n {\n name: \"terms\",\n title: \"Terms\",\n type: \"array\",\n group: \"notes\",\n itemNoun: \"term\",\n openMode: \"inline\",\n of: [\n {\n name: \"term\",\n title: \"Term\",\n type: \"object\",\n icon: \"vocabulary\",\n preview: { title: \"word\", subtitle: \"definition\", fallback: \"Untitled term\" },\n fields: [\n { name: \"word\", title: \"Word\", type: \"string\", validation: { required: true, max: 32 } },\n { name: \"definition\", title: \"Definition\", type: \"string\", validation: { required: true, max: 140 } },\n ],\n },\n ],\n },\n ],\n },\n value: {\n title: \"Campfire paella for eight\",\n dek: \"One pan, one fire, and the crust everybody fights over.\",\n coverImage: pic(\"campfire-paella\", \"A wide paella pan over a wood fire with lemons on the rim\"),\n body: [\n \"<p>Paella was always outdoor food. In Valencia it's still cooked over orange-wood fires on Sundays, and the <abbr data-term=\\\"socarrat\\\" title=\\\"The toasted crust of rice on the bottom of the pan\\\">socarrat</abbr> is the point of the whole exercise.<sup data-footnote=\\\"fn-valencia\\\">1</sup></p>\",\n \"<p>We cook it on the <a href=\\\"/products/cable-fold\\\" data-link-type=\\\"entry\\\" data-entry-id=\\\"en_p1\\\">Cable Fold Grill</a> so the pan sits level over an even bed of coals.</p>\",\n \"<div data-rt=\\\"component\\\" data-block=\\\"productCard\\\" data-ref=\\\"productCard\\\" data-id=\\\"ci_paella_grill\\\" data-name=\\\"Product card\\\" data-overrides=\\\"{&quot;badge&quot;:&quot;Used in this recipe&quot;}\\\" data-v=\\\"3\\\">⧉&nbsp;Product card · component</div>\",\n \"<h2>What you need</h2>\",\n \"<table data-rt=\\\"table\\\" data-header=\\\"true\\\"><caption>Ingredients for eight</caption><thead><tr><th scope=\\\"col\\\">Ingredient</th><th scope=\\\"col\\\">Amount</th></tr></thead><tbody><tr><td>Bomba rice</td><td>600 g</td></tr><tr><td>Chicken thighs</td><td>1 kg</td></tr><tr><td>Saffron</td><td>0.5 g<sup data-footnote=\\\"fn-saffron\\\">2</sup></td></tr><tr><td>Stock</td><td>2.4 L</td></tr></tbody></table>\",\n \"<figure data-rt=\\\"image\\\" data-align=\\\"wide\\\" data-size=\\\"full\\\"><img src=\\\"https://picsum.photos/seed/paella-crust/1600/1000\\\" alt=\\\"A spoon lifting rice to show a dark, crisp crust underneath\\\"><figcaption>Listen for the crackle: that's the socarrat forming.</figcaption></figure>\",\n \"<div data-rt=\\\"callout\\\" data-callout=\\\"warning\\\"><p data-title=\\\"true\\\">Don't stir</p><div data-body=\\\"true\\\"><p>Once the rice is in, leave it. Stirring releases starch and you'll get risotto.</p></div></div>\",\n \"<div data-rt=\\\"component\\\" data-block=\\\"ctaCard\\\" data-ref=\\\"ctaCard\\\" data-id=\\\"ci_newsletter\\\" data-name=\\\"Newsletter card\\\" data-variant=\\\"outline\\\">⧉&nbsp;Newsletter card · component</div>\",\n ].join(\"\"),\n footnotes: [\n { _key: \"fn1\", key: \"fn-valencia\", text: \"The Valencian regional government registered paella valenciana as a protected cultural asset in 2021.\", source: { type: \"url\", href: \"https://www.gva.es\", newTab: true } },\n { _key: \"fn2\", key: \"fn-saffron\", text: \"About 30 threads. Toast them in a dry spoon over the fire before crumbling them in.\" },\n ],\n terms: [{ _key: \"gl1\", word: \"socarrat\", definition: \"The toasted crust of rice on the bottom of the pan.\" }],\n },\n notes: {\n why:\n \"Prose is the content; components, tables and images are ISLANDS inside it, stored as the D28 `data-rt` markup (component = library ref + id + overrides, so editing the original Product card still reaches this story except the overridden badge). Inline product links carry the entry id, not just the href, so they survive slug changes. Footnotes and terms terms are annotations: a mark in the text (`data-footnote`, `data-term`) pointing at a keyed item in a sibling array, so the note text stays editable and numbered in reading order.\",\n sanity:\n \"Sanity: body: array of [block (marks.annotations: [internalLink → product, footnote { key }, term → glossaryTerm]), productCard, ctaCard, table, image]. Portable Text models annotations and inline references natively — the capability we're approximating with HTML data attributes.\",\n htmlSignals: [\n \"<article> prose with embedded non-prose elements: product cards, newsletter sign-ups, tables, figures\",\n \"<sup><a href=\\\"#fn1\\\"> footnote markers and an <ol class=\\\"footnotes\\\"> at the end\",\n \"<abbr title> / <dfn> / tooltip spans with definitions\",\n \"Internal links to /products/* or /recipes/* inside paragraphs\",\n ],\n mcp:\n \"Convert prose to the richtext HTML subset (p, h2–h4, lists, blockquote, strong/em, a, code). For every embedded non-prose element: if it matches a library block (product card, CTA) emit a `data-rt=\\\"component\\\"` island referencing it (overrides = only fields that differ from the library version); tables/images/callouts use their `data-rt` islands. Internal links → add data-link-type=\\\"entry\\\" + data-entry-id after resolving the target. Footnote markers → `<sup data-footnote=\\\"key\\\">` and move each footnote's text into `footnotes` with the same key. Definitions → `terms` + `data-term`. If an island is used in more than one article, it must be a library component, not a copied HTML snippet.\",\n pitfalls: [\n \"SCHEMA GAP: the richtext field can't declare WHAT it allows — styles (h2–h4 only), marks, annotation types (footnote, term, internal link) or the component allowlist. Sanity's `of` on block fields does this; ours accepts any island.\",\n \"SCHEMA GAP: annotations are attributes in HTML; nothing validates that `data-footnote` keys exist in `footnotes` (or that every footnote is used). Needs typed annotation marks pointing at items.\",\n \"SCHEMA GAP: inline references (entry links) are link-picker values serialised into the HTML, so the platform's reference graph can't see them without parsing the body.\",\n \"Footnote numbers in the text are render-time; storing '1', '2' in the markup goes stale when paragraphs move (shown here only for readable fallback).\",\n ],\n },\n },\n\n /* ───────────────────────────── 12. Dynamic query section ───────────────────────────── */\n {\n id: \"dynamic-query-listing\",\n label: \"Dynamic query listing\",\n proves: \"Collection + filter rows (field · operator · value) + sort + limit + pagination + pinned + empty state\",\n category: \"Advanced patterns\",\n tags: [\"dynamic-query\", \"conditional\", \"repeater\", \"references\", \"validation\"],\n brand: \"Atlas Journal\",\n previewLayout: \"grid-3\",\n schema: {\n name: \"queryListing\",\n title: \"Query listing\",\n kind: \"block\",\n icon: \"database-search\",\n category: \"Listings & feeds\",\n description: \"Entries from a collection, filtered, sorted and paged\",\n variants: [{ id: \"cards\", name: \"Cards\" }, { id: \"list\", name: \"List\" }, { id: \"lead\", name: \"One big, rest small\" }],\n preview: { title: \"heading\", subtitle: \"collection\" },\n groups: [\n { name: \"content\", title: \"Content\", default: true },\n { name: \"query\", title: \"Query\", icon: \"filter\" },\n { name: \"display\", title: \"Display\" },\n ],\n fields: [\n { name: \"heading\", title: \"Heading\", type: \"string\", group: \"content\", validation: { recommendedMax: 50 } },\n { name: \"viewAllButton\", title: \"View all button\", type: \"button\", group: \"content\" },\n { name: \"collection\", title: \"Collection\", type: \"reference\", group: \"query\", reference: { to: [\"collection\"] }, validation: { required: true } },\n { name: \"match\", title: \"Show entries matching\", type: \"select\", group: \"query\", layout: \"segmented\", initialValue: \"all\", options: [{ value: \"all\", label: \"All filters\" }, { value: \"any\", label: \"Any filter\" }] },\n {\n name: \"filters\",\n title: \"Filters\",\n type: \"array\",\n group: \"query\",\n itemNoun: \"filter\",\n validation: { max: 6 },\n of: [\n {\n name: \"filter\",\n title: \"Filter\",\n type: \"object\",\n icon: \"filter\",\n preview: { title: \"field\", subtitle: \"value\", fallback: \"Untitled filter\" },\n fields: [\n { name: \"field\", title: \"Field\", type: \"string\", validation: { required: true, pattern: \"^[a-zA-Z][a-zA-Z0-9.]*$\", patternMessage: \"Use a field id from the collection, like topics or author.slug.\" } },\n {\n name: \"operator\",\n title: \"Condition\",\n type: \"select\",\n validation: { required: true },\n initialValue: \"eq\",\n options: [\n { value: \"eq\", label: \"Is\" },\n { value: \"neq\", label: \"Is not\" },\n { value: \"in\", label: \"Is any of\" },\n { value: \"contains\", label: \"Contains\" },\n { value: \"gt\", label: \"After or more than\" },\n { value: \"lt\", label: \"Before or less than\" },\n { value: \"withinDays\", label: \"In the last N days\" },\n { value: \"exists\", label: \"Is filled in\" },\n ],\n },\n { name: \"value\", title: \"Value\", type: \"string\", hidden: { field: \"operator\", equals: [\"eq\", \"neq\", \"contains\", \"gt\", \"lt\"] }, validation: { required: true, max: 80 } },\n { name: \"values\", title: \"Values\", type: \"tags\", hidden: { field: \"operator\", equals: \"in\" }, validation: { min: 1, max: 10 } },\n { name: \"days\", title: \"Days\", type: \"number\", hidden: { field: \"operator\", equals: \"withinDays\" }, numeric: { min: 1, max: 365, step: 1 }, validation: { required: true } },\n { name: \"useCurrentPage\", title: \"Match this page\", type: \"boolean\", hidden: { field: \"operator\", equals: [\"eq\", \"in\"] } },\n ],\n },\n ],\n },\n {\n name: \"sort\",\n title: \"Sort\",\n type: \"array\",\n group: \"query\",\n itemNoun: \"sort rule\",\n openMode: \"inline\",\n validation: { min: 1, max: 3 },\n of: [\n {\n name: \"sortRule\",\n title: \"Sort rule\",\n type: \"object\",\n icon: \"arrows-sort\",\n preview: { title: \"field\", subtitle: \"direction\", fallback: \"Untitled sort\" },\n fields: [\n { name: \"field\", title: \"Field\", type: \"string\", validation: { required: true }, placeholder: \"publishedAt\" },\n { name: \"direction\", title: \"Direction\", type: \"select\", layout: \"segmented\", initialValue: \"desc\", options: [{ value: \"desc\", label: \"Newest / high\" }, { value: \"asc\", label: \"Oldest / low\" }] },\n ],\n },\n ],\n },\n { name: \"pinned\", title: \"Pinned\", type: \"array\", group: \"query\", validation: { max: 3, unique: true }, of: [{ name: \"entry\", title: \"Entry\", type: \"reference\", reference: { to: [\"col_journal\"] } }] },\n { name: \"excludeCurrent\", title: \"Leave out this page\", type: \"boolean\", group: \"query\", initialValue: true },\n { name: \"limit\", title: \"How many\", type: \"number\", group: \"display\", numeric: { min: 1, max: 24, step: 1, unit: \"entries\" }, initialValue: 6, validation: { required: true } },\n {\n name: \"pagination\",\n title: \"More entries\",\n type: \"select\",\n group: \"display\",\n layout: \"radio\",\n initialValue: \"loadMore\",\n options: [\n { value: \"none\", label: \"None\", description: \"The first batch, plus the View all button\" },\n { value: \"loadMore\", label: \"Load more button\" },\n { value: \"numbered\", label: \"Numbered pages\", description: \"Crawlable ?page=2 links\" },\n ],\n },\n {\n name: \"cardFields\",\n title: \"On each card\",\n type: \"multiselect\",\n group: \"display\",\n initialValue: [\"image\", \"excerpt\", \"date\"],\n options: [{ value: \"image\", label: \"Image\" }, { value: \"excerpt\", label: \"Excerpt\" }, { value: \"author\", label: \"Author\" }, { value: \"date\", label: \"Date\" }, { value: \"readingTime\", label: \"Reading time\" }, { value: \"topic\", label: \"Topic\" }],\n },\n {\n name: \"empty\",\n title: \"When nothing matches\",\n type: \"object\",\n group: \"display\",\n icon: \"mood-empty\",\n openMode: \"drill\",\n fields: [\n { name: \"mode\", title: \"Show\", type: \"select\", layout: \"segmented\", initialValue: \"message\", options: [{ value: \"hide\", label: \"Nothing\" }, { value: \"message\", label: \"A message\" }] },\n { name: \"heading\", title: \"Heading\", type: \"string\", hidden: { field: \"mode\", equals: \"message\" }, validation: { required: true, max: 60 } },\n { name: \"body\", title: \"Body\", type: \"text\", rows: 2, hidden: { field: \"mode\", equals: \"message\" } },\n { name: \"button\", title: \"Button\", type: \"button\", hidden: { field: \"mode\", equals: \"message\" } },\n ],\n },\n ],\n },\n value: {\n _variant: \"lead\",\n heading: \"Latest from the climate desk\",\n viewAllButton: { label: \"All climate stories\", href: \"/topics/climate\", type: \"page\", style: \"link\", arrow: true },\n collection: \"col_journal\",\n match: \"all\",\n filters: [\n { _key: \"f1\", field: \"topics\", operator: \"in\", values: [\"climate\", \"energy\"] },\n { _key: \"f2\", field: \"publishedAt\", operator: \"withinDays\", days: 90 },\n { _key: \"f3\", field: \"cover\", operator: \"exists\" },\n ],\n sort: [\n { _key: \"s1\", field: \"featured\", direction: \"desc\" },\n { _key: \"s2\", field: \"publishedAt\", direction: \"desc\" },\n ],\n pinned: [\"en_3\"],\n excludeCurrent: true,\n limit: 7,\n pagination: \"numbered\",\n cardFields: [\"image\", \"excerpt\", \"author\", \"date\"],\n empty: {\n mode: \"message\",\n heading: \"No new climate stories this quarter\",\n body: \"Our reporters are in the field. Read the archive while you wait.\",\n button: { label: \"Browse the archive\", href: \"/archive?topic=climate\", type: \"page\", style: \"outline\" },\n },\n },\n notes: {\n why:\n \"A listing is a QUERY, not a list of items: the block stores the question (collection, filter rows, match all/any, sort rules, limit) and the platform answers it at build/request time, so the section never goes stale. Each filter row is field · operator · value with the value input switching by operator (single value, list, day count, or none for 'is filled in'). Pinned references and the empty state cover the two editorial needs a query can't: 'this one first' and 'what if nothing matches'. Numbered pagination exists because 'load more' isn't crawlable.\",\n sanity:\n \"Sanity: the block usually stores a few curated params (category reference, limit) and the GROQ query lives in code; generic filter builders are custom inputs. Our model exposes the query to editors safely — closer to Webflow's Collection List filters.\",\n htmlSignals: [\n \"A card grid whose items share a template and link into one URL pattern (/journal/*, /topics/*)\",\n \"Pagination (?page=2, rel=next), 'Load more' buttons fetching JSON\",\n \"The same section showing different items on different topic/category pages (filter = current page)\",\n \"Empty-state copy ('No stories yet') in the markup or on sparse pages\",\n ],\n mcp:\n \"Never convert a feed into static items. Infer the query by comparing the listing across pages and over time: shared topic → filter in; dates all recent → withinDays; order → sort rules; count → limit; pagination UI → pagination. Items that appear in a fixed first position across crawls → pinned. If the source collection doesn't exist yet, create it and import the items as entries FIRST, then emit this block pointing at it. If the listing is hand-curated (no shared criteria, rarely changes) use a references array instead.\",\n pitfalls: [\n \"SCHEMA GAP: a filter's `field` (and a sort rule's) should be a select populated from the chosen collection's fields, and the value input should take that field's TYPE (reference picker for topics, date for publishedAt). The schema can't derive options or types from another field's value.\",\n \"SCHEMA GAP: `pinned` references are hard-wired to col_journal; they should target whatever `collection` is chosen (reference targets from a sibling value).\",\n \"SCHEMA GAP: no live query preview/count in the schema (e.g. '7 entries match') and no validation that the query returns anything.\",\n \"SCHEMA GAP: AND/OR groups beyond one level (all of (A, any of (B, C))) can't be modelled without recursive object types — the language has no recursion.\",\n ],\n },\n },\n\n /* ───────────────────────────── 13. Modal / drawer / popover ───────────────────────────── */\n {\n id: \"overlays-with-triggers\",\n label: \"Modal, drawer and popover\",\n proves: \"Overlays with their own slot content, opened by triggers on other blocks (click, delay, scroll, exit) · focus and dismiss rules\",\n category: \"Advanced patterns\",\n tags: [\"slots\", \"conditional\", \"a11y\", \"form\", \"repeater\", \"references\"],\n brand: \"Betterwork\",\n previewLayout: \"centered\",\n schema: {\n name: \"overlays\",\n title: \"Overlays\",\n kind: \"block\",\n icon: \"app-window\",\n category: \"Conversion & forms\",\n description: \"Modals, drawers and popovers for this page, opened by buttons elsewhere\",\n preview: { title: \"label\" },\n fields: [\n { name: \"label\", title: \"Name\", type: \"string\", validation: { max: 40 }, description: \"Only editors see this.\" },\n {\n name: \"items\",\n title: \"Overlays\",\n type: \"array\",\n itemNoun: \"overlay\",\n validation: { max: 6 },\n of: [\n {\n name: \"overlay\",\n title: \"Overlay\",\n type: \"object\",\n icon: \"app-window\",\n preview: { title: \"title\", subtitle: \"kind\", fallback: \"Untitled overlay\" },\n fields: [\n { name: \"title\", title: \"Title\", type: \"string\", validation: { required: true, max: 60 } },\n {\n name: \"id\",\n title: \"Opens from\",\n type: \"string\",\n validation: { required: true, unique: true, pattern: KEY_PATTERN, patternMessage: KEY_MESSAGE },\n description: \"Link any button to #id to open it, e.g. #book-demo.\",\n },\n {\n name: \"kind\",\n title: \"Type\",\n type: \"select\",\n layout: \"cards\",\n initialValue: \"modal\",\n options: [\n { value: \"modal\", label: \"Modal\", icon: \"app-window\", description: \"Centered, page dimmed\" },\n { value: \"drawer\", label: \"Drawer\", icon: \"layout-sidebar-right\", description: \"Slides in from the side\" },\n { value: \"popover\", label: \"Popover\", icon: \"message-2\", description: \"Small, next to the button\" },\n ],\n },\n { name: \"side\", title: \"Side\", type: \"select\", layout: \"segmented\", hidden: { field: \"kind\", equals: \"drawer\" }, initialValue: \"right\", options: [{ value: \"right\", label: \"Right\" }, { value: \"left\", label: \"Left\" }, { value: \"bottom\", label: \"Bottom\" }] },\n { name: \"size\", title: \"Size\", type: \"select\", layout: \"segmented\", hidden: { field: \"kind\", equals: [\"modal\", \"drawer\"] }, initialValue: \"md\", options: [{ value: \"sm\", label: \"S\" }, { value: \"md\", label: \"M\" }, { value: \"lg\", label: \"L\" }] },\n { name: \"content\", title: \"Content\", type: \"slot\", validation: { min: 1, max: 4 }, of: { type: \"block\", allow: OVERLAY_BLOCKS } },\n { name: \"form\", title: \"Form\", type: \"reference\", reference: { to: [\"form\"] } },\n {\n name: \"triggers\",\n title: \"Also opens\",\n type: \"array\",\n itemNoun: \"trigger\",\n openMode: \"inline\",\n validation: { max: 3 },\n of: [\n {\n name: \"trigger\",\n title: \"Trigger\",\n type: \"object\",\n icon: \"bolt\",\n preview: { title: \"type\", fallback: \"Untitled trigger\" },\n fields: [\n {\n name: \"type\",\n title: \"When\",\n type: \"select\",\n options: [{ value: \"delay\", label: \"After a delay\" }, { value: \"scroll\", label: \"After scrolling\" }, { value: \"exit\", label: \"On leaving (desktop)\" }],\n },\n { name: \"seconds\", title: \"Seconds\", type: \"number\", hidden: { field: \"type\", equals: \"delay\" }, numeric: { min: 5, max: 120, step: 5 } },\n { name: \"percent\", title: \"Scrolled\", type: \"number\", hidden: { field: \"type\", equals: \"scroll\" }, numeric: { min: 25, max: 90, step: 5, unit: \"%\" } },\n ],\n },\n ],\n },\n {\n name: \"frequency\",\n title: \"Show automatic triggers\",\n type: \"select\",\n initialValue: \"once\",\n options: [{ value: \"session\", label: \"Once per visit\" }, { value: \"once\", label: \"Once per visitor\" }, { value: \"week\", label: \"Once a week\" }],\n },\n { name: \"allowBackdropClose\", title: \"Close when clicking outside\", type: \"boolean\", initialValue: true, hidden: { field: \"kind\", equals: [\"modal\", \"drawer\"] } },\n ],\n },\n ],\n },\n ],\n },\n value: {\n label: \"Pricing page overlays\",\n items: [\n {\n _key: \"ov1\",\n title: \"Book a 20-minute demo\",\n id: \"book-demo\",\n kind: \"modal\",\n size: \"md\",\n content: [\n { _key: \"c1\", _type: \"textBlock\", heading: \"See Betterwork with your own data\", body: \"<p>A product specialist walks through payroll, benefits and reviews for a company your size. No slides.</p>\" },\n { _key: \"c2\", _type: \"quoteBlock\", quote: \"The demo was the first one where they used our actual org chart.\", author: \"Dana Whitfield\", role: \"Head of People, Larkspur Health\", rating: 5 },\n ],\n form: \"form_contact\",\n triggers: [],\n frequency: \"once\",\n allowBackdropClose: false,\n },\n {\n _key: \"ov2\",\n title: \"What's included in Growth\",\n id: \"growth-details\",\n kind: \"drawer\",\n side: \"right\",\n content: [\n { _key: \"c3\", _type: \"featureBlock\", icon: \"cash\", title: \"Payroll in 50 states\", body: \"Automatic tax filings, garnishments and year-end forms.\" },\n { _key: \"c4\", _type: \"featureBlock\", icon: \"heart-handshake\", title: \"Benefits administration\", body: \"Open enrolment, carrier connections and COBRA.\" },\n { _key: \"c5\", _type: \"ctaCard\", _variant: \"solid\", heading: \"Ready to compare plans?\", body: \"See every feature side by side.\", button: { label: \"Compare plans\", href: \"#compare\", type: \"section\", style: \"primary\" }, tone: \"#EEF2FF\" },\n ],\n frequency: \"session\",\n },\n {\n _key: \"ov3\",\n title: \"Leaving already?\",\n id: \"exit-guide\",\n kind: \"modal\",\n size: \"sm\",\n content: [\n { _key: \"c6\", _type: \"ctaCard\", _variant: \"outline\", heading: \"Take the 2026 payroll compliance guide\", body: \"38 pages, every state change this year.\", button: { label: \"Get the guide\", href: \"/guides/payroll-compliance-2026\", type: \"page\", style: \"primary\", arrow: true } },\n ],\n triggers: [{ _key: \"tr1\", type: \"exit\" }, { _key: \"tr2\", type: \"scroll\", percent: 70 }],\n frequency: \"week\",\n allowBackdropClose: true,\n },\n ],\n },\n notes: {\n why:\n \"Overlays are page-level content that isn't in the flow: they're modelled as one block holding an array of overlays, each with its own slot of library blocks (so a modal can reuse a quote or a CTA card) plus an optional form reference. Triggers on OTHER blocks are ordinary buttons linking to #id — the overlay owns the id, the button owns nothing special — which keeps the button field type unchanged. Automatic triggers and frequency caps are opt-in and live on the overlay. Size/side are conditional on kind; popovers have no backdrop setting.\",\n sanity:\n \"Sanity: overlays as a document type (`modal`) referenced from buttons (`link: { type: 'modal', modal: reference }`), with content: array of blocks. Sanity would use a reference on the trigger instead of an #id string, which gives integrity we lack.\",\n htmlSignals: [\n \"<dialog> elements or role=\\\"dialog\\\" aria-modal=\\\"true\\\" containers hidden by default\",\n \"Buttons with aria-haspopup=\\\"dialog\\\", aria-controls, data-modal-target or href=\\\"#id\\\" pointing at those containers\",\n \"Exit-intent / scroll-depth / timer scripts (mouseleave on document, IntersectionObserver at 70%)\",\n \"Off-canvas drawers (transform: translateX(100%), .drawer, .offcanvas)\",\n ],\n mcp:\n \"Find every hidden dialog/drawer/popover container and its trigger(s). Each → an `overlay` with id from the container id (kebab-case), kind from role/position, content converted to library blocks in the slot, forms → reference a created form. Rewrite each trigger button's link to `{ type: 'section', href: '#id' }`. Timer/scroll/exit scripts → `triggers` with their thresholds; localStorage/cookie caps → frequency. Cookie banners and age gates are NOT overlays — they belong to site settings. If an overlay appears on many pages with the same content, make the overlay set a global block.\",\n pitfalls: [\n \"SCHEMA GAP: no link type 'open overlay' and no intra-page reference — triggers are '#id' strings, so renaming an overlay id silently breaks every button that opens it.\",\n \"SCHEMA GAP: `unique` on overlay ids isn't enforced, and ids must also not collide with section anchors on the same page (page-wide uniqueness).\",\n \"SCHEMA GAP: popovers need an anchor element; positioning relative to a specific button can't be expressed beyond the #id link.\",\n \"Exit-intent doesn't exist on touch devices; the label says '(desktop)' because the schema can't scope a trigger per device.\",\n \"Focus trap, Esc to close and focus return are renderer requirements, not fields — never make them toggles.\",\n ],\n },\n },\n\n /* ───────────────────────────── 14. Scroll-driven storytelling ───────────────────────────── */\n {\n id: \"scrollytelling\",\n label: \"Sticky scroll story\",\n proves: \"Steps synced to scroll with media swaps (image / video / stat) · trigger offset · reduced-motion and phone fallbacks\",\n category: \"Advanced patterns\",\n tags: [\"media-heavy\", \"repeater\", \"conditional\", \"a11y\", \"variants\"],\n brand: \"Caldera\",\n previewLayout: \"split\",\n schema: {\n name: \"scrollStory\",\n title: \"Scroll story\",\n kind: \"block\",\n icon: \"arrows-down\",\n category: \"Features & storytelling\",\n description: \"Text scrolls past while the media beside it stays put and changes\",\n variants: [{ id: \"media-right\", name: \"Media right\" }, { id: \"media-left\", name: \"Media left\" }, { id: \"fullscreen\", name: \"Full-screen media, text over it\" }],\n preview: { title: \"heading\", subtitle: \"intro\" },\n groups: [\n { name: \"content\", title: \"Content\", default: true },\n { name: \"motion\", title: \"Motion\", icon: \"player-track-next\" },\n ],\n fields: [\n { name: \"eyebrow\", title: \"Eyebrow\", type: \"string\", group: \"content\", validation: { max: 32 } },\n { name: \"heading\", title: \"Heading\", type: \"string\", group: \"content\", validation: { required: true, recommendedMax: 60 }, ai: true },\n { name: \"intro\", title: \"Intro\", type: \"text\", rows: 2, group: \"content\" },\n {\n name: \"steps\",\n title: \"Steps\",\n type: \"array\",\n group: \"content\",\n itemNoun: \"step\",\n validation: { min: 2, max: 8 },\n of: [\n {\n name: \"scrollStep\",\n title: \"Step\",\n type: \"object\",\n icon: \"list-numbers\",\n preview: { title: \"heading\", subtitle: \"body\", media: \"media.image\", fallback: \"Untitled step\" },\n fields: [\n { name: \"heading\", title: \"Heading\", type: \"string\", validation: { required: true, max: 60 } },\n { name: \"body\", title: \"Body\", type: \"text\", rows: 3, validation: { recommendedMax: 240 } },\n {\n name: \"media\",\n title: \"Media\",\n type: \"object\",\n icon: \"photo\",\n openMode: \"drill\",\n fields: [\n {\n name: \"kind\",\n title: \"Show\",\n type: \"select\",\n layout: \"segmented\",\n initialValue: \"image\",\n options: [{ value: \"image\", label: \"Image\" }, { value: \"video\", label: \"Video\" }, { value: \"stat\", label: \"Big number\" }, { value: \"same\", label: \"Keep previous\" }],\n },\n { name: \"image\", title: \"Image\", type: \"image\", hidden: { field: \"kind\", equals: \"image\" }, validation: { required: true } },\n { name: \"video\", title: \"Video\", type: \"video\", hidden: { field: \"kind\", equals: \"video\" }, validation: { required: true } },\n { name: \"poster\", title: \"Poster\", type: \"image\", hidden: { field: \"kind\", equals: \"video\" } },\n { name: \"stat\", title: \"Number\", type: \"string\", hidden: { field: \"kind\", equals: \"stat\" }, validation: { required: true, max: 10 } },\n { name: \"statLabel\", title: \"Number label\", type: \"string\", hidden: { field: \"kind\", equals: \"stat\" }, validation: { max: 40 } },\n {\n name: \"transition\",\n title: \"Change with\",\n type: \"select\",\n layout: \"segmented\",\n initialValue: \"fade\",\n options: [{ value: \"fade\", label: \"Fade\" }, { value: \"slide\", label: \"Slide\" }, { value: \"zoom\", label: \"Zoom\" }],\n },\n ],\n },\n ],\n },\n ],\n },\n { name: \"triggerAt\", title: \"Switch when the step reaches\", type: \"number\", group: \"motion\", layout: \"slider\", initialValue: 50, numeric: { min: 20, max: 80, step: 5, unit: \"% of screen\" } },\n { name: \"progress\", title: \"Progress\", type: \"select\", group: \"motion\", layout: \"segmented\", initialValue: \"dots\", options: [{ value: \"none\", label: \"None\" }, { value: \"dots\", label: \"Dots\" }, { value: \"bar\", label: \"Bar\" }] },\n {\n name: \"reducedMotion\",\n title: \"When motion is reduced\",\n type: \"select\",\n group: \"motion\",\n layout: \"radio\",\n initialValue: \"stack\",\n options: [\n { value: \"stack\", label: \"Stack each step with its media\", description: \"No sticky panel, no transitions\" },\n { value: \"cut\", label: \"Keep sticky, switch without animation\" },\n ],\n },\n {\n name: \"phone\",\n title: \"On phones\",\n type: \"select\",\n group: \"motion\",\n layout: \"radio\",\n initialValue: \"stack\",\n options: [\n { value: \"stack\", label: \"Stack steps with their media\" },\n { value: \"sticky\", label: \"Sticky media on top, text scrolls under\" },\n ],\n },\n ],\n },\n value: {\n _variant: \"media-right\",\n eyebrow: \"How it's made\",\n heading: \"From scrap iron to your skillet.\",\n intro: \"Every Ridge Skillet takes nine days and passes through six pairs of hands in Bend.\",\n steps: [\n { _key: \"sp1\", heading: \"We melt down old radiators\", body: \"Recycled iron from Oregon demolition yards, melted at 2,600°F with a little carbon steel for strength.\", media: { kind: \"video\", video: { url: \"https://www.youtube.com/watch?v=aqz-KE-bpKQ\" }, poster: pic(\"foundry-pour\", \"Molten iron pouring from a ladle in a dark foundry\"), transition: \"fade\" } },\n { _key: \"sp2\", heading: \"Poured into sand\", body: \"Each mould is packed by hand and used once. That's why no two handles are quite the same.\", media: { kind: \"image\", image: pic(\"sand-moulds\", \"Rows of sand moulds with skillet shapes pressed into them\"), transition: \"fade\" } },\n { _key: \"sp3\", heading: \"Milled smooth\", body: \"A CNC pass takes the cooking surface flat to within 0.1 mm, then we polish it by hand.\", media: { kind: \"stat\", stat: \"0.1 mm\", statLabel: \"Flatness of every cooking surface\", transition: \"zoom\" } },\n { _key: \"sp4\", heading: \"Seasoned three times\", body: \"Flaxseed oil, baked on at 480°F, three coats. It arrives ready for eggs.\", media: { kind: \"image\", image: pic(\"seasoned-rack\", \"Seasoned skillets cooling on a rack, black and glossy\"), transition: \"slide\" } },\n ],\n triggerAt: 50,\n progress: \"dots\",\n reducedMotion: \"stack\",\n phone: \"stack\",\n },\n notes: {\n why:\n \"Scrollytelling pairs each step's text with what the sticky panel shows, so media is a drill-in object ON the step (not a parallel array that can drift out of sync). The media kind is a conditional switch (image / video + poster / big number / keep previous). Motion settings are a separate tab, and both fallbacks — reduced motion and phones — are required choices, because a sticky scroll story is unusable for many people without them.\",\n sanity:\n \"Sanity: scrollStory { steps[] { heading, body, media { kind, image, video (mux), stat } } } — identical shape; Sanity has no opinion on motion fallbacks.\",\n htmlSignals: [\n \"position: sticky media container beside a column of tall text blocks (min-height: 80–100vh each)\",\n \"Scrollama / GSAP ScrollTrigger / IntersectionObserver code toggling an active step class\",\n \"Media elements with data-step attributes swapped via opacity\",\n \"prefers-reduced-motion media queries around the transitions\",\n ],\n mcp:\n \"Each text step → `scrollStep`; find the media shown while it's active (data-step mapping, or the media element index) and put it in that step's `media` — never in a separate list. Steps that don't change the media → kind 'same'. Read the trigger offset from the library config (ScrollTrigger start: 'top center' → 50). If there's no reduced-motion handling in the source, default reducedMotion: stack and note it. Over 8 steps → split into two stories; each scroll story should make one point.\",\n pitfalls: [\n \"SCHEMA GAP: 'keep previous' media depends on the previous array item; the schema can't validate that the first step doesn't use it (position-dependent rules).\",\n \"SCHEMA GAP: no animation/timeline type — transitions are a select of presets; anything choreographed (scrubbed video, SVG path drawing) stays in code with copy fields only.\",\n \"Videos in sticky panels must be muted and short; there's no duration validation on the video type.\",\n \"Preview `media: \\\"media.image\\\"` is empty for stat/video steps — preview can't fall back across paths.\",\n ],\n },\n },\n\n /* ───────────────────────────── 15. Accessibility-critical ───────────────────────────── */\n {\n id: \"a11y-critical-media-form\",\n label: \"Accessibility-critical media and form\",\n proves: \"Captions per language, transcript, audio-described version · decorative vs informative images · labels, hints and error messages\",\n category: \"Advanced patterns\",\n tags: [\"a11y\", \"media-heavy\", \"form\", \"validation\", \"conditional\"],\n brand: \"Atlas Journal\",\n previewLayout: \"media\",\n schema: {\n name: \"explainer\",\n title: \"Video explainer\",\n kind: \"block\",\n icon: \"player-play\",\n category: \"Media & galleries\",\n description: \"A video with captions and a transcript, supporting images, and a sign-up form\",\n preview: { title: \"heading\", media: \"video.poster\" },\n groups: [\n { name: \"video\", title: \"Video\", default: true, icon: \"player-play\" },\n { name: \"images\", title: \"Images\", icon: \"photo\" },\n { name: \"form\", title: \"Sign-up\", icon: \"forms\" },\n ],\n fields: [\n { name: \"heading\", title: \"Heading\", type: \"string\", group: \"video\", validation: { required: true, recommendedMax: 70 } },\n {\n name: \"video\",\n title: \"Video\",\n type: \"object\",\n group: \"video\",\n icon: \"player-play\",\n openMode: \"drill\",\n fields: [\n { name: \"file\", title: \"Video\", type: \"video\", validation: { required: true } },\n { name: \"title\", title: \"Accessible name\", type: \"string\", validation: { required: true, max: 100 }, description: \"Not shown. Read by screen readers.\" },\n { name: \"poster\", title: \"Poster\", type: \"image\" },\n {\n name: \"tracks\",\n title: \"Captions and subtitles\",\n type: \"array\",\n itemNoun: \"track\",\n validation: { min: 1, max: 8 },\n description: \".vtt files. At least captions in the video's own language.\",\n of: [\n {\n name: \"track\",\n title: \"Track\",\n type: \"object\",\n icon: \"badge-cc\",\n preview: { title: \"label\", subtitle: \"kind\", fallback: \"Untitled track\" },\n fields: [\n {\n name: \"kind\",\n title: \"Kind\",\n type: \"select\",\n layout: \"segmented\",\n initialValue: \"captions\",\n options: [\n { value: \"captions\", label: \"Captions\", description: \"Dialogue plus sounds, for deaf viewers\" },\n { value: \"subtitles\", label: \"Subtitles\", description: \"Dialogue translated\" },\n { value: \"descriptions\", label: \"Descriptions\", description: \"Text descriptions of what's on screen\" },\n ],\n },\n { name: \"language\", title: \"Language\", type: \"select\", validation: { required: true }, options: [{ value: \"en\", label: \"English\" }, { value: \"es\", label: \"Spanish\" }, { value: \"pt\", label: \"Portuguese\" }, { value: \"fr\", label: \"French\" }] },\n { name: \"label\", title: \"Menu label\", type: \"string\", validation: { required: true, max: 32 }, placeholder: \"English (CC)\" },\n { name: \"file\", title: \"WebVTT file\", type: \"file\", validation: { required: true } },\n { name: \"isOnByDefault\", title: \"On by default\", type: \"boolean\" },\n ],\n },\n ],\n },\n { name: \"transcript\", title: \"Transcript\", type: \"richtext\", validation: { required: true } },\n { name: \"described\", title: \"Audio-described version\", type: \"video\" },\n { name: \"autoplay\", title: \"Play automatically\", type: \"boolean\" },\n ],\n },\n {\n name: \"figures\",\n title: \"Images\",\n type: \"array\",\n group: \"images\",\n itemNoun: \"image\",\n validation: { max: 6 },\n of: [\n {\n name: \"figure\",\n title: \"Image\",\n type: \"object\",\n icon: \"photo\",\n preview: { title: \"caption\", subtitle: \"role\", media: \"image\", fallback: \"Untitled image\" },\n fields: [\n { name: \"image\", title: \"Image\", type: \"image\", validation: { required: true }, description: \"Leave alt text empty only if the image is decorative.\" },\n {\n name: \"role\",\n title: \"This image\",\n type: \"select\",\n layout: \"radio\",\n initialValue: \"informative\",\n options: [\n { value: \"informative\", label: \"Carries information\", description: \"Needs alt text\" },\n { value: \"complex\", label: \"Is a chart or diagram\", description: \"Needs alt text and a long description\" },\n { value: \"decorative\", label: \"Is decoration only\", description: \"Hidden from screen readers\" },\n ],\n },\n { name: \"longDescription\", title: \"Long description\", type: \"text\", rows: 4, hidden: { field: \"role\", equals: \"complex\" }, validation: { required: true, max: 1200 }, description: \"Linked under the image.\" },\n { name: \"caption\", title: \"Caption\", type: \"string\", validation: { max: 160 } },\n ],\n },\n ],\n },\n {\n name: \"signup\",\n title: \"Sign-up form\",\n type: \"object\",\n group: \"form\",\n icon: \"forms\",\n openMode: \"drill\",\n fields: [\n { name: \"heading\", title: \"Heading\", type: \"string\", validation: { required: true, max: 60 } },\n {\n name: \"fields\",\n title: \"Fields\",\n type: \"array\",\n itemNoun: \"field\",\n validation: { min: 1, max: 5 },\n of: [\n {\n name: \"formField\",\n title: \"Field\",\n type: \"object\",\n icon: \"forms\",\n preview: { title: \"label\", subtitle: \"type\", fallback: \"Untitled field\" },\n fields: [\n { name: \"label\", title: \"Label\", type: \"string\", validation: { required: true, max: 40 } },\n { name: \"name\", title: \"Field name\", type: \"string\", validation: { required: true, pattern: \"^[a-z][a-zA-Z0-9]*$\", patternMessage: \"Use a field key, like email or firstName.\" } },\n { name: \"type\", title: \"Type\", type: \"select\", initialValue: \"text\", options: [{ value: \"text\", label: \"Text\" }, { value: \"email\", label: \"Email\" }, { value: \"select\", label: \"Dropdown\" }, { value: \"checkbox\", label: \"Checkbox\" }] },\n {\n name: \"autocomplete\",\n title: \"Autofill as\",\n type: \"select\",\n description: \"Lets browsers fill it in. Required for personal details.\",\n options: [{ value: \"off\", label: \"Nothing\" }, { value: \"email\", label: \"Email\" }, { value: \"given-name\", label: \"First name\" }, { value: \"family-name\", label: \"Last name\" }, { value: \"postal-code\", label: \"Postcode\" }],\n },\n { name: \"hint\", title: \"Hint\", type: \"string\", validation: { max: 90 }, description: \"Read out with the label.\" },\n { name: \"isRequired\", title: \"Required\", type: \"boolean\" },\n { name: \"errorMessage\", title: \"Error message\", type: \"string\", hidden: { field: \"isRequired\", equals: true }, validation: { required: true, max: 90 } },\n ],\n },\n ],\n },\n { name: \"submitButton\", title: \"Submit button\", type: \"button\" },\n { name: \"privacy\", title: \"Privacy note\", type: \"string\", validation: { max: 140 } },\n { name: \"form\", title: \"Send to form\", type: \"reference\", reference: { to: [\"form\"] }, validation: { required: true } },\n ],\n },\n ],\n },\n value: {\n heading: \"Why the heat dome stalled over the Pacific Northwest\",\n video: {\n file: { url: \"https://vimeo.com/76979871\" },\n title: \"Explainer: how a heat dome forms and why it stays put, 3 minutes\",\n poster: pic(\"heat-dome-map\", \"A weather map with a red high-pressure dome over Oregon and Washington\"),\n tracks: [\n { _key: \"tk1\", kind: \"captions\", language: \"en\", label: \"English (CC)\", file: { url: \"https://cdn.atlasjournal.com/video/heat-dome/en.vtt\", name: \"heat-dome-en.vtt\" }, isOnByDefault: true },\n { _key: \"tk2\", kind: \"subtitles\", language: \"es\", label: \"Español\", file: { url: \"https://cdn.atlasjournal.com/video/heat-dome/es.vtt\", name: \"heat-dome-es.vtt\" } },\n { _key: \"tk3\", kind: \"descriptions\", language: \"en\", label: \"English descriptions\", file: { url: \"https://cdn.atlasjournal.com/video/heat-dome/en-desc.vtt\", name: \"heat-dome-en-desc.vtt\" } },\n ],\n transcript:\n \"<p><strong>Ana Ruiz (climate reporter):</strong> In late June, a ridge of high pressure parked over the Northwest. [Wind sounds] Air sinking under that ridge heats up as it's compressed, like a bicycle pump.</p><p><strong>Dr. Owen Park (University of Washington):</strong> The jet stream bent around it and couldn't push it out for nine days.</p>\",\n described: { url: \"https://vimeo.com/76979872\" },\n autoplay: false,\n },\n figures: [\n { _key: \"fg1\", image: pic(\"heat-dome-chart\", \"Line chart of Portland daily highs, June 20 to July 5, peaking at 116°F on June 28\"), role: \"complex\", longDescription: \"Daily high temperatures in Portland from June 20 to July 5. Highs sat near 80°F until June 25, climbed each day to a record 116°F on June 28, then fell back below 90°F by July 2. The previous record, 107°F, is marked as a dashed line.\", caption: \"Portland's daily highs, June 20 – July 5.\" },\n { _key: \"fg2\", image: { url: \"https://picsum.photos/seed/heat-texture/1600/400\", alt: \"\", name: \"heat-texture.jpg\", width: 3200, height: 800 }, role: \"decorative\" },\n ],\n signup: {\n heading: \"Get the climate desk newsletter\",\n fields: [\n { _key: \"ff1\", label: \"Email address\", name: \"email\", type: \"email\", autocomplete: \"email\", hint: \"One email a week, every Thursday.\", isRequired: true, errorMessage: \"Enter an email address like name@example.com\" },\n { _key: \"ff2\", label: \"First name\", name: \"firstName\", type: \"text\", autocomplete: \"given-name\", isRequired: false },\n ],\n submitButton: { label: \"Sign up\", href: \"#\", type: \"section\", style: \"primary\" },\n privacy: \"We never share your address. Unsubscribe from any email.\",\n form: \"form_newsletter\",\n },\n },\n notes: {\n why:\n \"Accessibility needs are content, so they're fields with rules, not afterthoughts: caption tracks are an array (one per language and kind) with at least one required; the transcript is required rich text; the audio-described cut is its own video. Images declare their ROLE because alt text depends on it — informative needs alt, complex needs alt plus a long description (conditional + required), decorative must have EMPTY alt. Form fields carry a visible label, autocomplete purpose, a hint and a fix-it error message (required only when the field is required).\",\n sanity:\n \"Sanity: video { asset (mux.video), tracks[] { kind, srclang, label, file }, transcript: portableText }, figure { image (with alt in a custom field), role, longDescription (hidden unless complex) }. Sanity's image alt is usually a custom field on the image object — the same 'alt depends on role' rule needs Rule.custom.\",\n htmlSignals: [\n \"<video> with <track kind=\\\"captions|subtitles|descriptions\\\" srclang label>\",\n \"Transcript sections (details/summary 'Transcript', or a heading 'Transcript' after a video)\",\n \"<img alt=\\\"\\\"> / role=\\\"presentation\\\" (decorative) vs descriptive alt; aria-describedby / longdesc links for charts\",\n \"<label for>, aria-describedby hints, aria-invalid + error text, autocomplete attributes on inputs\",\n ],\n mcp:\n \"Copy every <track> into `tracks` (kind, srclang → language, label, src → file). Never auto-generate captions during conversion — if none exist, leave tracks empty so validation flags it. A transcript on the page → `transcript`; if absent, flag (it's required). For each image: alt=\\\"\\\" or role=presentation → role decorative (keep alt empty); an image of a chart/diagram → complex and pull the long description from aria-describedby/longdesc/adjacent text; otherwise informative with the existing alt (rewrite 'image of…' phrasing). For forms: labels from <label> (if only placeholders exist, convert placeholder → label and flag), autocomplete from attributes, error messages from the validation script or aria-errormessage.\",\n pitfalls: [\n \"SCHEMA GAP: alt text lives INSIDE the image value; conditions and validation can't reach a sub-key, so 'alt required unless decorative' and 'alt must be empty when decorative' can't be expressed. The image type needs a built-in `decorative` flag and an alt rule. Proof: the kit validator flags this entry's own decorative image (figures.1) with \\\"No alt text\\\" — a false positive the schema can't prevent.\",\n \"SCHEMA GAP: no file-type constraint on `file` (accept: .vtt) and no way to validate a caption track's language matches the video's.\",\n \"SCHEMA GAP: 'at least one track of kind captions' is a rule about item VALUES in an array; only item counts can be validated.\",\n \"SCHEMA GAP: the sign-up form is modelled inline because forms are a separate system; ideally the block only references the form and the form owns labels/errors.\",\n \"Autoplay over 5 seconds without a pause control fails WCAG 2.2.2; the help warns, nothing blocks it.\",\n ],\n },\n },\n\n /* ───────────────────────────── 16. Theme tokens per section ───────────────────────────── */\n {\n id: \"section-theme-tokens\",\n label: \"Section theme tokens\",\n proves: \"Dark section inside a light page · surface + accent override from brand tokens · spacing tokens · all in the Design group\",\n category: \"Advanced patterns\",\n tags: [\"variants\", \"conditional\", \"a11y\", \"validation\", \"media-heavy\"],\n brand: \"Caldera\",\n previewLayout: \"centered\",\n schema: {\n name: \"quoteBand\",\n title: \"Quote band\",\n kind: \"block\",\n icon: \"quote\",\n category: \"Social proof\",\n description: \"A full-width quote with its own color scheme\",\n variants: [{ id: \"centered\", name: \"Centered\" }, { id: \"split\", name: \"Quote and photo\" }],\n preview: { title: \"author\", subtitle: \"quote\", media: \"photo\" },\n groups: [\n { name: \"content\", title: \"Content\", default: true },\n { name: \"design\", title: \"Design\", icon: \"palette\" },\n ],\n fields: [\n { name: \"quote\", title: \"Quote\", type: \"text\", rows: 3, group: \"content\", validation: { required: true, recommendedMax: 200 } },\n { name: \"author\", title: \"Name\", type: \"string\", group: \"content\", validation: { required: true, max: 48 } },\n { name: \"role\", title: \"Role\", type: \"string\", group: \"content\", validation: { max: 60 } },\n { name: \"photo\", title: \"Photo\", type: \"image\", group: \"content\" },\n { name: \"button\", title: \"Button\", type: \"button\", group: \"content\" },\n {\n name: \"scheme\",\n title: \"Color scheme\",\n type: \"select\",\n group: \"design\",\n layout: \"segmented\",\n initialValue: \"inherit\",\n options: [{ value: \"inherit\", label: \"Page\" }, { value: \"light\", label: \"Light\" }, { value: \"dark\", label: \"Dark\" }],\n },\n {\n name: \"surface\",\n title: \"Background\",\n type: \"select\",\n group: \"design\",\n layout: \"cards\",\n initialValue: \"default\",\n options: [\n { value: \"default\", label: \"Default\", description: \"Page background\" },\n { value: \"raised\", label: \"Raised\", description: \"One step lighter\" },\n { value: \"inverse\", label: \"Inverse\", description: \"Charcoal in light mode\" },\n { value: \"brand\", label: \"Brand\", description: \"Ember orange\" },\n { value: \"image\", label: \"Photo\", description: \"With an overlay\" },\n ],\n },\n { name: \"background\", title: \"Background photo\", type: \"image\", group: \"design\", hidden: { field: \"surface\", equals: \"image\" }, validation: { required: true } },\n { name: \"overlay\", title: \"Overlay\", type: \"number\", group: \"design\", layout: \"slider\", hidden: { field: \"surface\", equals: \"image\" }, numeric: { min: 0, max: 90, step: 5, unit: \"%\" }, initialValue: 45 },\n { name: \"useCustomAccent\", title: \"Use a different accent color\", type: \"boolean\", group: \"design\" },\n {\n name: \"accent\",\n title: \"Accent\",\n type: \"select\",\n group: \"design\",\n layout: \"segmented\",\n hidden: { field: \"useCustomAccent\", equals: true },\n initialValue: \"ember\",\n options: [{ value: \"ember\", label: \"Ember\" }, { value: \"moss\", label: \"Moss\" }, { value: \"sand\", label: \"Sand\" }],\n },\n {\n name: \"spacing\",\n title: \"Spacing\",\n type: \"object\",\n group: \"design\",\n icon: \"spacing-vertical\",\n fields: [\n { name: \"top\", title: \"Top\", type: \"select\", layout: \"segmented\", initialValue: \"lg\", options: [{ value: \"none\", label: \"None\" }, { value: \"md\", label: \"M\" }, { value: \"lg\", label: \"L\" }, { value: \"xl\", label: \"XL\" }] },\n { name: \"bottom\", title: \"Bottom\", type: \"select\", layout: \"segmented\", initialValue: \"lg\", options: [{ value: \"none\", label: \"None\" }, { value: \"md\", label: \"M\" }, { value: \"lg\", label: \"L\" }, { value: \"xl\", label: \"XL\" }] },\n ],\n },\n { name: \"width\", title: \"Content width\", type: \"select\", group: \"design\", layout: \"segmented\", initialValue: \"narrow\", options: [{ value: \"narrow\", label: \"Narrow\" }, { value: \"default\", label: \"Default\" }, { value: \"wide\", label: \"Wide\" }] },\n { name: \"isFullBleed\", title: \"Edge to edge\", type: \"boolean\", group: \"design\", initialValue: true },\n ],\n },\n value: {\n _variant: \"split\",\n quote: \"Our restaurant runs four Ember ovens over live fire every night. Two years in, they cook better than the day they arrived.\",\n author: \"Chef Amara Osei\",\n role: \"Hearth & Ash, Portland\",\n photo: pic(\"amara-osei\", \"Chef Amara Osei lifting the lid of an Ember Dutch oven over coals\", 900, 1100),\n button: { label: \"Read Amara's story\", href: \"/journal/hearth-and-ash\", type: \"entry\", title: \"Cooking for 90 over live fire\", style: \"outline\", arrow: true },\n scheme: \"dark\",\n surface: \"image\",\n background: pic(\"hearth-embers\", \"Close-up of glowing embers under a cast iron pot\"),\n overlay: 55,\n useCustomAccent: true,\n accent: \"sand\",\n spacing: { top: \"xl\", bottom: \"xl\" },\n width: \"default\",\n isFullBleed: true,\n },\n notes: {\n why:\n \"Everything about how the section LOOKS sits in the Design tab and is expressed as tokens (scheme, surface, accent, spacing, width) — never raw hex or pixels — so the brand kit stays the single source and dark sections flip every color consistently. Conditionals keep the tab calm: the photo and overlay appear only for the Photo surface, the accent choice only when overriding. Content (quote, name, photo, button) is untouched by any design choice, so switching variant or scheme never loses copy.\",\n sanity:\n \"Sanity: a reusable `sectionTheme` object (scheme, surface, accent: string list from the brand palette, spacing) added to every section type, usually in a 'design' fieldset/group. Same approach; Sanity also lacks contrast validation.\",\n htmlSignals: [\n \"A section with its own data-theme=\\\"dark\\\" / .dark / .theme-inverse class inside a light page\",\n \"Background image with a semi-transparent overlay layer (::before with rgba/opacity)\",\n \"CSS custom properties redefined on the section (--accent, --surface) or utility classes like bg-neutral-900 text-white\",\n \"Section-specific padding utilities (py-24) differing from neighbours\",\n ],\n mcp:\n \"Map computed styles to the nearest TOKEN, never copy values: background luminance < 0.2 → scheme dark (+ surface inverse unless it's a photo); a background-image with an overlay → surface image + overlay % from the overlay's alpha; accent = the button color matched to the brand kit's accents (if no match within ΔE 5, keep the default and flag); padding → nearest spacing token; max-width → width token. If the source uses a color the brand kit doesn't have, propose adding it to the brand kit rather than storing a hex in the block.\",\n pitfalls: [\n \"SCHEMA GAP: no token-reference type — `accent` is a hard-coded select that must be kept in sync with the brand kit by hand; it should be a dynamic option list from the brand kit (and `color` fields should be restrictable to tokens).\",\n \"SCHEMA GAP: no contrast validation between surface/overlay and text color (WCAG 1.4.3); 'overlay below 35% on a bright photo' can't be flagged.\",\n \"SCHEMA GAP: no responsive values for spacing (see responsive-layout-settings).\",\n \"SCHEMA GAP: design fields are repeated per block; a shared, named object type (sectionTheme) can't be referenced by name, only copied.\",\n ],\n },\n },\n];\n"],"mappings":"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"}