@bettercms-ai/kit 1.0.0 → 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 (587) hide show
  1. package/README.md +33 -0
  2. package/dist/adapters/dock-values.d.ts +28 -0
  3. package/dist/adapters/dock-values.js +41 -0
  4. package/dist/adapters/dock-values.js.map +1 -0
  5. package/{adapters → dist/adapters}/icons.js +2 -2
  6. package/dist/adapters/icons.js.map +1 -0
  7. package/{adapters → dist/adapters}/lossy.d.ts +90 -31
  8. package/dist/adapters/lossy.js +414 -0
  9. package/dist/adapters/lossy.js.map +1 -0
  10. package/{adapters → dist/adapters}/prod-types.d.ts +82 -4
  11. package/{adapters → dist/adapters}/prod-types.js +71 -3
  12. package/dist/adapters/prod-types.js.map +1 -0
  13. package/{adapters → dist/adapters}/schema.d.ts +40 -1
  14. package/{adapters → dist/adapters}/schema.js +996 -179
  15. package/dist/adapters/schema.js.map +1 -0
  16. package/{adapters → dist/adapters}/values.d.ts +26 -5
  17. package/{adapters → dist/adapters}/values.js +87 -17
  18. package/dist/adapters/values.js.map +1 -0
  19. package/dist/brand/logo.js +96 -0
  20. package/dist/brand/logo.js.map +1 -0
  21. package/{context.d.ts → dist/context.d.ts} +92 -2
  22. package/{context.js → dist/context.js} +5 -2
  23. package/dist/context.js.map +1 -0
  24. package/{controls → dist/controls}/button.d.ts +19 -5
  25. package/{controls → dist/controls}/button.js +125 -54
  26. package/dist/controls/button.js.map +1 -0
  27. package/{controls → dist/controls}/c1.js +1 -1
  28. package/dist/controls/c1.js.map +1 -0
  29. package/{controls → dist/controls}/c2.js +1 -1
  30. package/dist/controls/c2.js.map +1 -0
  31. package/{controls → dist/controls}/choice.d.ts +7 -2
  32. package/{controls → dist/controls}/choice.js +71 -18
  33. package/dist/controls/choice.js.map +1 -0
  34. package/{controls → dist/controls}/code-register.js +1 -1
  35. package/dist/controls/code-register.js.map +1 -0
  36. package/{controls → dist/controls}/code.js +10 -9
  37. package/dist/controls/code.js.map +1 -0
  38. package/{controls → dist/controls}/color.js +8 -8
  39. package/dist/controls/color.js.map +1 -0
  40. package/{controls → dist/controls}/component-services.d.ts +42 -0
  41. package/dist/controls/component-services.js +7 -0
  42. package/dist/controls/component-services.js.map +1 -0
  43. package/{controls → dist/controls}/date-register.js +1 -1
  44. package/dist/controls/date-register.js.map +1 -0
  45. package/{controls → dist/controls}/date-zone.js +8 -2
  46. package/dist/controls/date-zone.js.map +1 -0
  47. package/{controls → dist/controls}/date.js +32 -24
  48. package/dist/controls/date.js.map +1 -0
  49. package/{controls → dist/controls}/form-picker-register.js +1 -1
  50. package/dist/controls/form-picker-register.js.map +1 -0
  51. package/{controls → dist/controls}/form-picker.js +11 -9
  52. package/dist/controls/form-picker.js.map +1 -0
  53. package/{controls → dist/controls}/icon-register.js +1 -1
  54. package/dist/controls/icon-register.js.map +1 -0
  55. package/{controls → dist/controls}/icon.d.ts +4 -2
  56. package/{controls → dist/controls}/icon.js +32 -27
  57. package/dist/controls/icon.js.map +1 -0
  58. package/{controls → dist/controls}/index.d.ts +1 -1
  59. package/{controls → dist/controls}/index.js +4 -3
  60. package/dist/controls/index.js.map +1 -0
  61. package/{controls → dist/controls}/json-register.js +1 -1
  62. package/dist/controls/json-register.js.map +1 -0
  63. package/{controls → dist/controls}/json.js +13 -3
  64. package/dist/controls/json.js.map +1 -0
  65. package/{controls → dist/controls}/link.js +6 -6
  66. package/dist/controls/link.js.map +1 -0
  67. package/{controls → dist/controls}/location-register.js +1 -1
  68. package/dist/controls/location-register.js.map +1 -0
  69. package/{controls → dist/controls}/location.js +64 -40
  70. package/dist/controls/location.js.map +1 -0
  71. package/{controls → dist/controls}/media-register.js +1 -1
  72. package/dist/controls/media-register.js.map +1 -0
  73. package/{controls → dist/controls}/media-services.d.ts +6 -0
  74. package/dist/controls/media-services.js +0 -0
  75. package/{controls → dist/controls}/media.d.ts +35 -4
  76. package/{controls → dist/controls}/media.js +491 -171
  77. package/dist/controls/media.js.map +1 -0
  78. package/{controls → dist/controls}/number.js +10 -9
  79. package/dist/controls/number.js.map +1 -0
  80. package/{controls → dist/controls}/reference-register.js +1 -1
  81. package/dist/controls/reference-register.js.map +1 -0
  82. package/{controls → dist/controls}/reference-services.d.ts +4 -0
  83. package/dist/controls/reference-services.js +0 -0
  84. package/{controls → dist/controls}/reference.d.ts +1 -1
  85. package/{controls → dist/controls}/reference.js +93 -77
  86. package/dist/controls/reference.js.map +1 -0
  87. package/dist/controls/rich-text/blocks.d.ts +49 -0
  88. package/{controls → dist/controls}/rich-text/blocks.js +471 -144
  89. package/dist/controls/rich-text/blocks.js.map +1 -0
  90. package/{controls → dist/controls}/rich-text/catalog.d.ts +4 -1
  91. package/{controls → dist/controls}/rich-text/catalog.js +75 -65
  92. package/dist/controls/rich-text/catalog.js.map +1 -0
  93. package/{controls → dist/controls}/rich-text/codec.d.ts +9 -1
  94. package/{controls → dist/controls}/rich-text/codec.js +3 -1
  95. package/dist/controls/rich-text/codec.js.map +1 -0
  96. package/{controls → dist/controls}/rich-text/component-card.d.ts +1 -1
  97. package/{controls → dist/controls}/rich-text/component-card.js +417 -99
  98. package/dist/controls/rich-text/component-card.js.map +1 -0
  99. package/dist/controls/rich-text/component-panel.d.ts +47 -0
  100. package/dist/controls/rich-text/component-panel.js +141 -0
  101. package/dist/controls/rich-text/component-panel.js.map +1 -0
  102. package/{controls → dist/controls}/rich-text/control.d.ts +1 -2
  103. package/{controls → dist/controls}/rich-text/control.js +84 -42
  104. package/dist/controls/rich-text/control.js.map +1 -0
  105. package/{controls → dist/controls}/rich-text/dom.d.ts +52 -9
  106. package/{controls → dist/controls}/rich-text/dom.js +379 -50
  107. package/dist/controls/rich-text/dom.js.map +1 -0
  108. package/{controls → dist/controls}/rich-text/editor.d.ts +7 -0
  109. package/{controls → dist/controls}/rich-text/editor.js +148 -48
  110. package/dist/controls/rich-text/editor.js.map +1 -0
  111. package/{controls → dist/controls}/rich-text/floating.d.ts +6 -1
  112. package/{controls → dist/controls}/rich-text/floating.js +35 -18
  113. package/dist/controls/rich-text/floating.js.map +1 -0
  114. package/{controls → dist/controls}/rich-text/index.js +1 -1
  115. package/dist/controls/rich-text/index.js.map +1 -0
  116. package/dist/controls/rich-text/link-form.js +147 -0
  117. package/dist/controls/rich-text/link-form.js.map +1 -0
  118. package/{controls → dist/controls}/rich-text/markdown.js +4 -2
  119. package/dist/controls/rich-text/markdown.js.map +1 -0
  120. package/{controls → dist/controls}/rich-text/ops.js +17 -15
  121. package/dist/controls/rich-text/ops.js.map +1 -0
  122. package/dist/controls/rich-text/plain.d.ts +17 -0
  123. package/dist/controls/rich-text/plain.js +44 -0
  124. package/dist/controls/rich-text/plain.js.map +1 -0
  125. package/{controls → dist/controls}/rich-text/toolbar.d.ts +6 -2
  126. package/{controls → dist/controls}/rich-text/toolbar.js +12 -7
  127. package/dist/controls/rich-text/toolbar.js.map +1 -0
  128. package/{controls → dist/controls}/scale.js +5 -5
  129. package/dist/controls/scale.js.map +1 -0
  130. package/{controls → dist/controls}/slot-register.js +1 -1
  131. package/dist/controls/slot-register.js.map +1 -0
  132. package/{controls → dist/controls}/slot-services.d.ts +25 -0
  133. package/dist/controls/slot-services.js +155 -0
  134. package/dist/controls/slot-services.js.map +1 -0
  135. package/{controls → dist/controls}/slot.js +42 -24
  136. package/dist/controls/slot.js.map +1 -0
  137. package/{controls → dist/controls}/table/index.js +1 -1
  138. package/dist/controls/table/index.js.map +1 -0
  139. package/{controls → dist/controls}/table/prod.js +3 -3
  140. package/dist/controls/table/prod.js.map +1 -0
  141. package/{controls → dist/controls}/table/refs.js +13 -2
  142. package/dist/controls/table/refs.js.map +1 -0
  143. package/{controls → dist/controls}/table/stored.js +1 -1
  144. package/dist/controls/table/stored.js.map +1 -0
  145. package/{controls → dist/controls}/table/table-editor.js +51 -48
  146. package/dist/controls/table/table-editor.js.map +1 -0
  147. package/{controls → dist/controls}/table/table-link.js +3 -3
  148. package/dist/controls/table/table-link.js.map +1 -0
  149. package/{controls → dist/controls}/table/table.js +3 -3
  150. package/dist/controls/table/table.js.map +1 -0
  151. package/{controls → dist/controls}/text.d.ts +2 -2
  152. package/{controls → dist/controls}/text.js +78 -43
  153. package/dist/controls/text.js.map +1 -0
  154. package/dist/controls/unknown-value.d.ts +17 -0
  155. package/dist/controls/unknown-value.js +66 -0
  156. package/dist/controls/unknown-value.js.map +1 -0
  157. package/dist/core/core.d.ts +63 -0
  158. package/dist/core/core.js +171 -0
  159. package/dist/core/core.js.map +1 -0
  160. package/dist/core/facets.d.ts +347 -0
  161. package/dist/core/facets.js +334 -0
  162. package/dist/core/facets.js.map +1 -0
  163. package/dist/core/index.d.ts +3 -0
  164. package/dist/core/index.js +3 -0
  165. package/{engine → dist/engine}/array.js +34 -21
  166. package/dist/engine/array.js.map +1 -0
  167. package/{engine → dist/engine}/bits.js +1 -1
  168. package/dist/engine/bits.js.map +1 -0
  169. package/{engine → dist/engine}/breadcrumb.d.ts +3 -3
  170. package/{engine → dist/engine}/breadcrumb.js +12 -36
  171. package/dist/engine/breadcrumb.js.map +1 -0
  172. package/{engine → dist/engine}/expand.d.ts +2 -4
  173. package/{engine → dist/engine}/expand.js +5 -22
  174. package/dist/engine/expand.js.map +1 -0
  175. package/{engine → dist/engine}/field-list.js +1 -1
  176. package/dist/engine/field-list.js.map +1 -0
  177. package/{engine → dist/engine}/field-shell.js +249 -121
  178. package/dist/engine/field-shell.js.map +1 -0
  179. package/{engine → dist/engine}/frame.d.ts +3 -1
  180. package/{engine → dist/engine}/frame.js +16 -14
  181. package/dist/engine/frame.js.map +1 -0
  182. package/{engine → dist/engine}/group-summary.d.ts +2 -1
  183. package/{engine → dist/engine}/group-summary.js +7 -3
  184. package/dist/engine/group-summary.js.map +1 -0
  185. package/{engine → dist/engine}/grouping.d.ts +19 -5
  186. package/{engine → dist/engine}/grouping.js +193 -21
  187. package/dist/engine/grouping.js.map +1 -0
  188. package/{engine → dist/engine}/item-list.d.ts +11 -1
  189. package/{engine → dist/engine}/item-list.js +35 -13
  190. package/dist/engine/item-list.js.map +1 -0
  191. package/{engine → dist/engine}/kit-field.js +45 -10
  192. package/dist/engine/kit-field.js.map +1 -0
  193. package/{engine → dist/engine}/schema-form.d.ts +27 -2
  194. package/{engine → dist/engine}/schema-form.js +182 -40
  195. package/dist/engine/schema-form.js.map +1 -0
  196. package/{engine → dist/engine}/slot.js +5 -15
  197. package/dist/engine/slot.js.map +1 -0
  198. package/dist/index.js +47 -0
  199. package/dist/index.js.map +1 -0
  200. package/{kit.css → dist/kit.css} +19 -0
  201. package/{lib → dist/lib}/cn.js +7 -4
  202. package/dist/lib/cn.js.map +1 -0
  203. package/{lib → dist/lib}/columns.js +4 -1
  204. package/dist/lib/columns.js.map +1 -0
  205. package/{lib → dist/lib}/frames.js +2 -2
  206. package/dist/lib/frames.js.map +1 -0
  207. package/dist/lib/icon-image.d.ts +10 -0
  208. package/dist/lib/icon-image.js +8 -0
  209. package/dist/lib/icon-image.js.map +1 -0
  210. package/{lib → dist/lib}/icons.js +4 -3
  211. package/dist/lib/icons.js.map +1 -0
  212. package/dist/lib/input-modality.d.ts +11 -0
  213. package/dist/lib/input-modality.js +47 -0
  214. package/dist/lib/input-modality.js.map +1 -0
  215. package/dist/lib/key-event.d.ts +11 -0
  216. package/dist/lib/key-event.js +16 -0
  217. package/dist/lib/key-event.js.map +1 -0
  218. package/{lib → dist/lib}/path.js +4 -2
  219. package/dist/lib/path.js.map +1 -0
  220. package/{lib → dist/lib}/schema.d.ts +34 -3
  221. package/{lib → dist/lib}/schema.js +110 -13
  222. package/dist/lib/schema.js.map +1 -0
  223. package/{lib → dist/lib}/utils.js +1 -1
  224. package/dist/lib/utils.js.map +1 -0
  225. package/{lib → dist/lib}/validate.d.ts +11 -1
  226. package/{lib → dist/lib}/validate.js +85 -11
  227. package/dist/lib/validate.js.map +1 -0
  228. package/dist/library/analysis.d.ts +23 -0
  229. package/dist/library/analysis.js +160 -0
  230. package/dist/library/analysis.js.map +1 -0
  231. package/dist/library/catalog.d.ts +57 -0
  232. package/dist/library/catalog.js +307 -0
  233. package/dist/library/catalog.js.map +1 -0
  234. package/dist/library/coreNotes.d.ts +8 -0
  235. package/dist/library/coreNotes.js +111 -0
  236. package/dist/library/coreNotes.js.map +1 -0
  237. package/dist/library/coverage.d.ts +40 -0
  238. package/dist/library/coverage.js +59 -0
  239. package/dist/library/coverage.js.map +1 -0
  240. package/dist/library/entries/advanced.entries.d.ts +2 -0
  241. package/dist/library/entries/advanced.entries.js +6579 -0
  242. package/dist/library/entries/advanced.entries.js.map +1 -0
  243. package/dist/library/entries/commerce.entries.d.ts +2 -0
  244. package/dist/library/entries/commerce.entries.js +4140 -0
  245. package/dist/library/entries/commerce.entries.js.map +1 -0
  246. package/dist/library/entries/company.entries.d.ts +2 -0
  247. package/dist/library/entries/company.entries.js +2731 -0
  248. package/dist/library/entries/company.entries.js.map +1 -0
  249. package/dist/library/entries/conversion.entries.d.ts +2 -0
  250. package/dist/library/entries/conversion.entries.js +3707 -0
  251. package/dist/library/entries/conversion.entries.js.map +1 -0
  252. package/dist/library/entries/data.entries.d.ts +7 -0
  253. package/dist/library/entries/data.entries.js +4613 -0
  254. package/dist/library/entries/data.entries.js.map +1 -0
  255. package/dist/library/entries/events.entries.d.ts +2 -0
  256. package/dist/library/entries/events.entries.js +3428 -0
  257. package/dist/library/entries/events.entries.js.map +1 -0
  258. package/dist/library/entries/features.entries.d.ts +2 -0
  259. package/dist/library/entries/features.entries.js +3157 -0
  260. package/dist/library/entries/features.entries.js.map +1 -0
  261. package/dist/library/entries/heroes.entries.d.ts +2 -0
  262. package/dist/library/entries/heroes.entries.js +3401 -0
  263. package/dist/library/entries/heroes.entries.js.map +1 -0
  264. package/dist/library/entries/index.d.ts +3 -0
  265. package/dist/library/entries/index.js +35 -0
  266. package/dist/library/entries/index.js.map +1 -0
  267. package/dist/library/entries/listings.entries.d.ts +2 -0
  268. package/dist/library/entries/listings.entries.js +2976 -0
  269. package/dist/library/entries/listings.entries.js.map +1 -0
  270. package/dist/library/entries/longform.entries.d.ts +2 -0
  271. package/dist/library/entries/longform.entries.js +4227 -0
  272. package/dist/library/entries/longform.entries.js.map +1 -0
  273. package/dist/library/entries/media.entries.d.ts +2 -0
  274. package/dist/library/entries/media.entries.js +2781 -0
  275. package/dist/library/entries/media.entries.js.map +1 -0
  276. package/dist/library/entries/navigation.entries.d.ts +2 -0
  277. package/dist/library/entries/navigation.entries.js +4011 -0
  278. package/dist/library/entries/navigation.entries.js.map +1 -0
  279. package/dist/library/entries/pricing.entries.d.ts +2 -0
  280. package/dist/library/entries/pricing.entries.js +2383 -0
  281. package/dist/library/entries/pricing.entries.js.map +1 -0
  282. package/dist/library/entries/social-proof.entries.d.ts +2 -0
  283. package/dist/library/entries/social-proof.entries.js +2297 -0
  284. package/dist/library/entries/social-proof.entries.js.map +1 -0
  285. package/dist/library/examples/bento.d.ts +92 -0
  286. package/dist/library/examples/bento.js +201 -0
  287. package/dist/library/examples/bento.js.map +1 -0
  288. package/dist/library/examples/blocks.d.ts +14 -0
  289. package/dist/library/examples/blocks.js +313 -0
  290. package/dist/library/examples/blocks.js.map +1 -0
  291. package/dist/library/examples/faq.d.ts +28 -0
  292. package/dist/library/examples/faq.js +230 -0
  293. package/dist/library/examples/faq.js.map +1 -0
  294. package/dist/library/examples/hero.d.ts +43 -0
  295. package/dist/library/examples/hero.js +222 -0
  296. package/dist/library/examples/hero.js.map +1 -0
  297. package/dist/library/examples/index.d.ts +36 -0
  298. package/dist/library/examples/index.js +109 -0
  299. package/dist/library/examples/index.js.map +1 -0
  300. package/dist/library/examples/journalStory.d.ts +93 -0
  301. package/dist/library/examples/journalStory.js +338 -0
  302. package/dist/library/examples/journalStory.js.map +1 -0
  303. package/dist/library/examples/megaMenu.d.ts +134 -0
  304. package/dist/library/examples/megaMenu.js +442 -0
  305. package/dist/library/examples/megaMenu.js.map +1 -0
  306. package/dist/library/examples/pricing.d.ts +103 -0
  307. package/dist/library/examples/pricing.js +479 -0
  308. package/dist/library/examples/pricing.js.map +1 -0
  309. package/dist/library/examples/tabs.d.ts +87 -0
  310. package/dist/library/examples/tabs.js +180 -0
  311. package/dist/library/examples/tabs.js.map +1 -0
  312. package/dist/library/export.d.ts +42 -0
  313. package/dist/library/export.js +80 -0
  314. package/dist/library/export.js.map +1 -0
  315. package/dist/library/index.d.ts +13 -0
  316. package/dist/library/index.js +6 -0
  317. package/dist/library/kit-catalog.json +1510 -0
  318. package/dist/library/types.d.ts +42 -0
  319. package/dist/library/types.js +0 -0
  320. package/{schema → dist/schema}/adapters.js +1 -2
  321. package/dist/schema/adapters.js.map +1 -0
  322. package/{schema → dist/schema}/help.d.ts +2 -0
  323. package/{schema → dist/schema}/help.js +6 -4
  324. package/dist/schema/help.js.map +1 -0
  325. package/{schema → dist/schema}/scale.js +1 -1
  326. package/dist/schema/scale.js.map +1 -0
  327. package/{schema → dist/schema}/sources.js +1 -1
  328. package/dist/schema/sources.js.map +1 -0
  329. package/{schema → dist/schema}/table.js +11 -10
  330. package/dist/schema/table.js.map +1 -0
  331. package/{schema → dist/schema}/types.d.ts +29 -1
  332. package/{schema → dist/schema}/types.js +1 -1
  333. package/dist/schema/types.js.map +1 -0
  334. package/dist/styles.css +2 -0
  335. package/dist/table/table-view.d.ts +14 -0
  336. package/dist/table/table-view.js +140 -0
  337. package/dist/table/table-view.js.map +1 -0
  338. package/dist/table/table.css +73 -0
  339. package/dist/testing/corpus.d.ts +63 -0
  340. package/dist/testing/corpus.js +129 -0
  341. package/dist/testing/corpus.js.map +1 -0
  342. package/dist/testing/test-form.d.ts +11 -0
  343. package/dist/testing/test-form.js +38 -0
  344. package/dist/testing/test-form.js.map +1 -0
  345. package/dist/theme.css +345 -0
  346. package/dist/theme.d.ts +22 -0
  347. package/dist/theme.js +43 -0
  348. package/dist/theme.js.map +1 -0
  349. package/dist/tokens.css +542 -0
  350. package/dist/types.js +0 -0
  351. package/{ui → dist/ui}/action-tray.d.ts +1 -1
  352. package/{ui → dist/ui}/action-tray.js +20 -19
  353. package/dist/ui/action-tray.js.map +1 -0
  354. package/dist/ui/autocomplete.d.ts +30 -0
  355. package/dist/ui/autocomplete.js +139 -0
  356. package/dist/ui/autocomplete.js.map +1 -0
  357. package/{ui → dist/ui}/button.d.ts +3 -3
  358. package/{ui → dist/ui}/button.js +6 -7
  359. package/dist/ui/button.js.map +1 -0
  360. package/{ui → dist/ui}/choice-switch.js +1 -1
  361. package/dist/ui/choice-switch.js.map +1 -0
  362. package/{ui → dist/ui}/controls.js +51 -39
  363. package/dist/ui/controls.js.map +1 -0
  364. package/{ui → dist/ui}/display.d.ts +10 -3
  365. package/{ui → dist/ui}/display.js +57 -46
  366. package/dist/ui/display.js.map +1 -0
  367. package/{ui → dist/ui}/expanded-editor-modal.d.ts +2 -2
  368. package/{ui → dist/ui}/expanded-editor-modal.js +6 -6
  369. package/dist/ui/expanded-editor-modal.js.map +1 -0
  370. package/{ui → dist/ui}/field-context.js +1 -1
  371. package/dist/ui/field-context.js.map +1 -0
  372. package/{ui → dist/ui}/floating-panel.d.ts +1 -1
  373. package/{ui → dist/ui}/floating-panel.js +28 -12
  374. package/dist/ui/floating-panel.js.map +1 -0
  375. package/{ui → dist/ui}/index.d.ts +4 -0
  376. package/dist/ui/index.js +18 -0
  377. package/{ui → dist/ui}/input.d.ts +1 -1
  378. package/{ui → dist/ui}/input.js +9 -9
  379. package/dist/ui/input.js.map +1 -0
  380. package/{ui → dist/ui}/mode-bar.js +3 -3
  381. package/dist/ui/mode-bar.js.map +1 -0
  382. package/{ui → dist/ui}/overlay.d.ts +77 -5
  383. package/dist/ui/overlay.js +697 -0
  384. package/dist/ui/overlay.js.map +1 -0
  385. package/{ui → dist/ui}/path-crumbs.js +37 -3
  386. package/dist/ui/path-crumbs.js.map +1 -0
  387. package/{ui → dist/ui}/presence.js +2 -2
  388. package/dist/ui/presence.js.map +1 -0
  389. package/{ui → dist/ui}/select.js +89 -87
  390. package/dist/ui/select.js.map +1 -0
  391. package/{ui → dist/ui}/shortcut-hint.js +1 -1
  392. package/dist/ui/shortcut-hint.js.map +1 -0
  393. package/dist/ui/spinner.d.ts +24 -0
  394. package/dist/ui/spinner.js +42 -0
  395. package/dist/ui/spinner.js.map +1 -0
  396. package/dist/ui/split-button.d.ts +32 -0
  397. package/dist/ui/split-button.js +60 -0
  398. package/dist/ui/split-button.js.map +1 -0
  399. package/{ui → dist/ui}/surfaces.js +1 -1
  400. package/dist/ui/surfaces.js.map +1 -0
  401. package/dist/ui/tab.d.ts +38 -0
  402. package/dist/ui/tab.js +87 -0
  403. package/dist/ui/tab.js.map +1 -0
  404. package/dist/ui/toast.d.ts +20 -0
  405. package/dist/ui/toast.js +115 -0
  406. package/dist/ui/toast.js.map +1 -0
  407. package/{ui → dist/ui}/tooltip-root.d.ts +4 -3
  408. package/{ui → dist/ui}/tooltip-root.js +9 -8
  409. package/dist/ui/tooltip-root.js.map +1 -0
  410. package/{ui → dist/ui}/variants.js +1 -1
  411. package/dist/ui/variants.js.map +1 -0
  412. package/package.json +77 -23
  413. package/adapters/icons.js.map +0 -1
  414. package/adapters/lossy.js +0 -233
  415. package/adapters/lossy.js.map +0 -1
  416. package/adapters/prod-types.js.map +0 -1
  417. package/adapters/schema.js.map +0 -1
  418. package/adapters/values.js.map +0 -1
  419. package/brand/logo.js +0 -9
  420. package/brand/logo.js.map +0 -1
  421. package/context.js.map +0 -1
  422. package/controls/button.js.map +0 -1
  423. package/controls/c1.js.map +0 -1
  424. package/controls/c2.js.map +0 -1
  425. package/controls/choice.js.map +0 -1
  426. package/controls/code-register.js.map +0 -1
  427. package/controls/code.js.map +0 -1
  428. package/controls/color.js.map +0 -1
  429. package/controls/date-register.js.map +0 -1
  430. package/controls/date-zone.js.map +0 -1
  431. package/controls/date.js.map +0 -1
  432. package/controls/form-picker-register.js.map +0 -1
  433. package/controls/form-picker.js.map +0 -1
  434. package/controls/icon-register.js.map +0 -1
  435. package/controls/icon.js.map +0 -1
  436. package/controls/index.js.map +0 -1
  437. package/controls/json-register.js.map +0 -1
  438. package/controls/json.js.map +0 -1
  439. package/controls/link.js.map +0 -1
  440. package/controls/location-register.js.map +0 -1
  441. package/controls/location.js.map +0 -1
  442. package/controls/media-register.js.map +0 -1
  443. package/controls/media.js.map +0 -1
  444. package/controls/number.js.map +0 -1
  445. package/controls/reference-register.js.map +0 -1
  446. package/controls/reference.js.map +0 -1
  447. package/controls/rich-text/blocks.d.ts +0 -28
  448. package/controls/rich-text/blocks.js.map +0 -1
  449. package/controls/rich-text/catalog.js.map +0 -1
  450. package/controls/rich-text/codec.js.map +0 -1
  451. package/controls/rich-text/component-card.js.map +0 -1
  452. package/controls/rich-text/control.js.map +0 -1
  453. package/controls/rich-text/dom.js.map +0 -1
  454. package/controls/rich-text/editor.js.map +0 -1
  455. package/controls/rich-text/floating.js.map +0 -1
  456. package/controls/rich-text/index.js.map +0 -1
  457. package/controls/rich-text/link-form.js +0 -111
  458. package/controls/rich-text/link-form.js.map +0 -1
  459. package/controls/rich-text/markdown.js.map +0 -1
  460. package/controls/rich-text/ops.js.map +0 -1
  461. package/controls/rich-text/toolbar.js.map +0 -1
  462. package/controls/scale.js.map +0 -1
  463. package/controls/slot-register.js.map +0 -1
  464. package/controls/slot-services.js +0 -38
  465. package/controls/slot-services.js.map +0 -1
  466. package/controls/slot.js.map +0 -1
  467. package/controls/table/index.js.map +0 -1
  468. package/controls/table/prod.js.map +0 -1
  469. package/controls/table/refs.js.map +0 -1
  470. package/controls/table/stored.js.map +0 -1
  471. package/controls/table/table-editor.js.map +0 -1
  472. package/controls/table/table-link.js.map +0 -1
  473. package/controls/table/table.js.map +0 -1
  474. package/controls/text.js.map +0 -1
  475. package/engine/array.js.map +0 -1
  476. package/engine/bits.js.map +0 -1
  477. package/engine/breadcrumb.js.map +0 -1
  478. package/engine/expand.js.map +0 -1
  479. package/engine/field-list.js.map +0 -1
  480. package/engine/field-shell.js.map +0 -1
  481. package/engine/frame.js.map +0 -1
  482. package/engine/group-summary.js.map +0 -1
  483. package/engine/grouping.js.map +0 -1
  484. package/engine/item-list.js.map +0 -1
  485. package/engine/kit-field.js.map +0 -1
  486. package/engine/schema-form.js.map +0 -1
  487. package/engine/slot.js.map +0 -1
  488. package/index.js +0 -55
  489. package/index.js.map +0 -1
  490. package/lib/cn.js.map +0 -1
  491. package/lib/columns.js.map +0 -1
  492. package/lib/frames.js.map +0 -1
  493. package/lib/icons.js.map +0 -1
  494. package/lib/path.js.map +0 -1
  495. package/lib/schema.js.map +0 -1
  496. package/lib/utils.js.map +0 -1
  497. package/lib/validate.js.map +0 -1
  498. package/schema/adapters.js.map +0 -1
  499. package/schema/help.js.map +0 -1
  500. package/schema/scale.js.map +0 -1
  501. package/schema/sources.js.map +0 -1
  502. package/schema/table.js.map +0 -1
  503. package/schema/types.js.map +0 -1
  504. package/ui/action-tray.js.map +0 -1
  505. package/ui/button.js.map +0 -1
  506. package/ui/choice-switch.js.map +0 -1
  507. package/ui/controls.js.map +0 -1
  508. package/ui/display.js.map +0 -1
  509. package/ui/expanded-editor-modal.js.map +0 -1
  510. package/ui/field-context.js.map +0 -1
  511. package/ui/floating-panel.js.map +0 -1
  512. package/ui/index.js +0 -13
  513. package/ui/input.js.map +0 -1
  514. package/ui/mode-bar.js.map +0 -1
  515. package/ui/overlay.js +0 -378
  516. package/ui/overlay.js.map +0 -1
  517. package/ui/path-crumbs.js.map +0 -1
  518. package/ui/presence.js.map +0 -1
  519. package/ui/select.js.map +0 -1
  520. package/ui/shortcut-hint.js.map +0 -1
  521. package/ui/surfaces.js.map +0 -1
  522. package/ui/tooltip-root.js.map +0 -1
  523. package/ui/variants.js.map +0 -1
  524. /package/{_virtual → dist/_virtual}/_rolldown/runtime.js +0 -0
  525. /package/{adapters → dist/adapters}/icons.d.ts +0 -0
  526. /package/{brand → dist/brand}/logo.d.ts +0 -0
  527. /package/{controls → dist/controls}/c1.d.ts +0 -0
  528. /package/{controls → dist/controls}/c2.d.ts +0 -0
  529. /package/{controls → dist/controls}/code-register.d.ts +0 -0
  530. /package/{controls → dist/controls}/code.d.ts +0 -0
  531. /package/{controls → dist/controls}/color.d.ts +0 -0
  532. /package/{controls → dist/controls}/date-register.d.ts +0 -0
  533. /package/{controls → dist/controls}/date-zone.d.ts +0 -0
  534. /package/{controls → dist/controls}/date.d.ts +0 -0
  535. /package/{controls → dist/controls}/form-picker-register.d.ts +0 -0
  536. /package/{controls → dist/controls}/form-picker.d.ts +0 -0
  537. /package/{controls → dist/controls}/icon-register.d.ts +0 -0
  538. /package/{controls → dist/controls}/json-register.d.ts +0 -0
  539. /package/{controls → dist/controls}/json.d.ts +0 -0
  540. /package/{controls → dist/controls}/link.d.ts +0 -0
  541. /package/{controls → dist/controls}/location-register.d.ts +0 -0
  542. /package/{controls → dist/controls}/location.d.ts +0 -0
  543. /package/{controls → dist/controls}/media-register.d.ts +0 -0
  544. /package/{controls → dist/controls}/number.d.ts +0 -0
  545. /package/{controls → dist/controls}/reference-register.d.ts +0 -0
  546. /package/{controls → dist/controls}/rich-text/index.d.ts +0 -0
  547. /package/{controls → dist/controls}/rich-text/link-form.d.ts +0 -0
  548. /package/{controls → dist/controls}/rich-text/markdown.d.ts +0 -0
  549. /package/{controls → dist/controls}/rich-text/ops.d.ts +0 -0
  550. /package/{controls → dist/controls}/scale.d.ts +0 -0
  551. /package/{controls → dist/controls}/slot-register.d.ts +0 -0
  552. /package/{controls → dist/controls}/slot.d.ts +0 -0
  553. /package/{controls → dist/controls}/table/index.d.ts +0 -0
  554. /package/{controls → dist/controls}/table/prod.d.ts +0 -0
  555. /package/{controls → dist/controls}/table/refs.d.ts +0 -0
  556. /package/{controls → dist/controls}/table/stored.d.ts +0 -0
  557. /package/{controls → dist/controls}/table/table-editor.d.ts +0 -0
  558. /package/{controls → dist/controls}/table/table-link.d.ts +0 -0
  559. /package/{controls → dist/controls}/table/table.d.ts +0 -0
  560. /package/{engine → dist/engine}/array.d.ts +0 -0
  561. /package/{engine → dist/engine}/bits.d.ts +0 -0
  562. /package/{engine → dist/engine}/field-list.d.ts +0 -0
  563. /package/{engine → dist/engine}/field-shell.d.ts +0 -0
  564. /package/{engine → dist/engine}/kit-field.d.ts +0 -0
  565. /package/{engine → dist/engine}/slot.d.ts +0 -0
  566. /package/{index.d.ts → dist/index.d.ts} +0 -0
  567. /package/{lib → dist/lib}/cn.d.ts +0 -0
  568. /package/{lib → dist/lib}/columns.d.ts +0 -0
  569. /package/{lib → dist/lib}/frames.d.ts +0 -0
  570. /package/{lib → dist/lib}/icons.d.ts +0 -0
  571. /package/{lib → dist/lib}/path.d.ts +0 -0
  572. /package/{lib → dist/lib}/utils.d.ts +0 -0
  573. /package/{schema → dist/schema}/adapters.d.ts +0 -0
  574. /package/{schema → dist/schema}/scale.d.ts +0 -0
  575. /package/{schema → dist/schema}/sources.d.ts +0 -0
  576. /package/{schema → dist/schema}/table.d.ts +0 -0
  577. /package/{types.d.ts → dist/types.d.ts} +0 -0
  578. /package/{ui → dist/ui}/choice-switch.d.ts +0 -0
  579. /package/{ui → dist/ui}/controls.d.ts +0 -0
  580. /package/{ui → dist/ui}/field-context.d.ts +0 -0
  581. /package/{ui → dist/ui}/mode-bar.d.ts +0 -0
  582. /package/{ui → dist/ui}/path-crumbs.d.ts +0 -0
  583. /package/{ui → dist/ui}/presence.d.ts +0 -0
  584. /package/{ui → dist/ui}/select.d.ts +0 -0
  585. /package/{ui → dist/ui}/shortcut-hint.d.ts +0 -0
  586. /package/{ui → dist/ui}/surfaces.d.ts +0 -0
  587. /package/{ui → dist/ui}/variants.d.ts +0 -0
@@ -0,0 +1,171 @@
1
+ import { SERVER_CONFIG_KEYS, isHostConfigKey } from "../adapters/lossy.js";
2
+ import { fromTypeSchema, propsToTypeSchema, toTypeSchema } from "../adapters/schema.js";
3
+ import { itemNoun } from "../lib/schema.js";
4
+ import { facetOf } from "./facets.js";
5
+ //#region src/core/core.ts
6
+ /**
7
+ * THE CORE SCHEMA `C` (P2 C1): one canonical, versioned form of a V2 schema that both directions meet in.
8
+ *
9
+ * normV2: V2 → C canonical JSON (sorted keys, no undefined) of the V2 schema, with V2's own equivalences folded
10
+ * embedV2: C → V2 the schema C holds
11
+ * embedProd: C → prod the prod adapter (fromTypeSchema, the façade) on embedV2(c)
12
+ * normProd: prod → C normV2 of what the prod schema reads back as (toTypeSchema / propsToTypeSchema, the façades)
13
+ *
14
+ * Laws (PBT, src/core/__tests__): norm∘embed = id on C (P1); normProd(embedProd(c)) equals c except under the paths
15
+ * the adapter names (P2); prod zod accepts embedProd(c) (P3); every named loss is excluded, pending or out of its bound
16
+ * (P4); both normalisers are idempotent (P5); the hash is byte-stable (P6); one prod key per facet (P7); out-of-domain
17
+ * prod keys survive a write (P8).
18
+ *
19
+ * V2's equivalences folded by normV2 (what the V2 engine draws the same, so C cannot tell apart):
20
+ * - a list's itemNoun equal to the engine's fallback (lib/schema.ts itemNoun) is the absent one
21
+ * - a fieldset a field names but the schema does not declare is the declared { name, title: name } (engine/field-list
22
+ * arrange), appended after the declared ones in first-use order
23
+ */
24
+ var CORE_VERSION = 1;
25
+ var isObj = (v) => !!v && typeof v === "object" && !Array.isArray(v);
26
+ /** Canonical JSON value: object keys sorted, undefined dropped, arrays in their order (order is meaning). */
27
+ function canonical(v) {
28
+ if (Array.isArray(v)) return v.map(canonical);
29
+ if (!isObj(v)) return v;
30
+ const out = {};
31
+ for (const k of Object.keys(v).sort()) if (v[k] !== void 0) out[k] = canonical(v[k]);
32
+ return out;
33
+ }
34
+ function foldField(f) {
35
+ const out = { ...f };
36
+ if (out.fields) out.fields = out.fields.map(foldField);
37
+ if (Array.isArray(out.of)) out.of = out.of.map(foldField);
38
+ if (out.slotSettings) out.slotSettings = out.slotSettings.map(foldField);
39
+ if (out.itemNoun !== void 0 && out.itemNoun === itemNoun({
40
+ ...out,
41
+ itemNoun: void 0
42
+ })) delete out.itemNoun;
43
+ return out;
44
+ }
45
+ /** The fieldsets fields name, depth first, the way the adapter visits them (fromTypeSchema propSetsFor / fieldsetsFor). */
46
+ function namedSets(fields, out = []) {
47
+ for (const f of fields) {
48
+ if (f.fieldset !== void 0 && !out.includes(f.fieldset)) out.push(f.fieldset);
49
+ if (f.fields) namedSets(f.fields, out);
50
+ if (Array.isArray(f.of)) {
51
+ for (const i of f.of) if (i.fields) namedSets(i.fields, out);
52
+ }
53
+ }
54
+ return out;
55
+ }
56
+ function normV2(v2) {
57
+ const schema = {
58
+ ...v2,
59
+ fields: v2.fields.map(foldField)
60
+ };
61
+ const declared = new Set((v2.fieldsets ?? []).map((s) => s.name));
62
+ const undeclared = namedSets(v2.fields).filter((n) => !declared.has(n));
63
+ if (undeclared.length) schema.fieldsets = [...v2.fieldsets ?? [], ...undeclared.map((name) => ({
64
+ name,
65
+ title: name
66
+ }))];
67
+ return {
68
+ v: 1,
69
+ schema: canonical(schema)
70
+ };
71
+ }
72
+ var embedV2 = (c) => structuredClone(c.schema);
73
+ function embedProd(c, lane) {
74
+ return lane === "fields" ? fromTypeSchema(embedV2(c), "fields") : fromTypeSchema(embedV2(c), "props");
75
+ }
76
+ function normProd(prod, lane, opts = {}) {
77
+ return normV2(lane === "fields" ? toTypeSchema(prod, opts) : propsToTypeSchema(prod, opts));
78
+ }
79
+ /** Byte-stable serialisation of C: the hash input, and the form fixtures are frozen in. */
80
+ var coreJson = (c) => JSON.stringify(canonical(c));
81
+ /** `schema_hash`: "v1:" + sha256 of coreJson (Web Crypto: the same in the browser, Node and Bun). */
82
+ async function coreHash(c) {
83
+ return `v1:${[...new Uint8Array(await crypto.subtle.digest("SHA-256", new TextEncoder().encode(coreJson(c))))].map((b) => b.toString(16).padStart(2, "0")).join("")}`;
84
+ }
85
+ /** The leaf paths where two JSON values differ ("/fields/0/title"); a missing object or list compares as an empty one. */
86
+ function leafDiff(a, b, path = "", out = []) {
87
+ const obj = (x) => x === void 0 || isObj(x);
88
+ const arr = (x) => x === void 0 || Array.isArray(x);
89
+ if ((isObj(a) || isObj(b)) && obj(a) && obj(b)) {
90
+ const A = a ?? {};
91
+ const B = b ?? {};
92
+ for (const k of /* @__PURE__ */ new Set([...Object.keys(A), ...Object.keys(B)])) leafDiff(A[k], B[k], `${path}/${k}`, out);
93
+ } else if ((Array.isArray(a) || Array.isArray(b)) && arr(a) && arr(b)) {
94
+ const A = a ?? [];
95
+ const B = b ?? [];
96
+ for (let i = 0; i < Math.max(A.length, B.length); i++) leafDiff(A[i], B[i], `${path}/${i}`, out);
97
+ } else if (JSON.stringify(a) !== JSON.stringify(b)) out.push(path);
98
+ return out;
99
+ }
100
+ var under = (path, root) => path === root || path.startsWith(`${root}/`);
101
+ /** C through prod and back, against the lane's read: the oracle P2 and P4 assert on. */
102
+ function roundTripCore(c, lane) {
103
+ const r = embedProd(c, lane);
104
+ const back = normProd(r.schema, lane, { blockModels: r.blockModels });
105
+ const diffs = leafDiff(lane === "props" ? normV2(withDefaultGroups(c.schema)).schema : c.schema, back.schema);
106
+ const named = [...r.lossy, ...r.catalog];
107
+ return {
108
+ prod: r.schema,
109
+ back,
110
+ diffs,
111
+ loss: named.filter((l) => diffs.some((d) => under(d, l.path))).map((l) => ({
112
+ path: l.path,
113
+ feature: l.feature,
114
+ facet: facetOf(l.feature)
115
+ })),
116
+ unreported: diffs.filter((d) => !named.some((l) => under(d, l.path)))
117
+ };
118
+ }
119
+ function withDefaultGroups(s) {
120
+ const d = (s.groups?.find((g) => g.default) ?? s.groups?.[0])?.name;
121
+ return d === void 0 ? s : {
122
+ ...s,
123
+ fields: s.fields.map((f) => f.group === void 0 ? {
124
+ ...f,
125
+ group: d
126
+ } : f)
127
+ };
128
+ }
129
+ var OUT_OF_DOMAIN_KEYS = [
130
+ "target",
131
+ "stale",
132
+ "origin"
133
+ ];
134
+ /** One written definition with the out-of-domain keys of the stored one it replaces (same key) carried over. */
135
+ function carryDef(written, stored) {
136
+ if (!stored) return written;
137
+ const out = { ...written };
138
+ for (const k of OUT_OF_DOMAIN_KEYS) if (stored[k] !== void 0 && out[k] === void 0) out[k] = stored[k];
139
+ const type = String(written.type ?? "");
140
+ const host = Object.entries(stored.config ?? {}).filter(([k, v]) => v !== void 0 && (isHostConfigKey(type, k) || SERVER_CONFIG_KEYS.has(k)) && out.config?.[k] === void 0);
141
+ if (host.length || out.config) out.config = {
142
+ ...out.config ?? {},
143
+ ...Object.fromEntries(host)
144
+ };
145
+ if (Array.isArray(written.fields)) out.fields = carryList(written.fields, stored.fields);
146
+ const cf = out.config?.fields;
147
+ if (Array.isArray(cf)) out.config = {
148
+ ...out.config,
149
+ fields: carryList(cf, stored.config?.fields)
150
+ };
151
+ return out;
152
+ }
153
+ var carryList = (written, stored) => written.map((w) => carryDef(w, stored?.find((s) => s.key === w.key)));
154
+ /**
155
+ * A prod definition written from C, with every out-of-domain key (facets.ts OUT_OF_DOMAIN: a prop's binding, host and
156
+ * server config) the stored definition held carried over by key. What write_schema stores (C6).
157
+ */
158
+ function preserveOutOfDomain(written, stored, lane) {
159
+ if (!stored) return written;
160
+ const list = lane === "fields" ? "fields" : "props";
161
+ const w = written;
162
+ const s = stored;
163
+ return {
164
+ ...w,
165
+ [list]: carryList(w[list] ?? [], s[list])
166
+ };
167
+ }
168
+ //#endregion
169
+ export { CORE_VERSION, canonical, coreHash, coreJson, embedProd, embedV2, leafDiff, normProd, normV2, preserveOutOfDomain, roundTripCore };
170
+
171
+ //# sourceMappingURL=core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.js","names":[],"sources":["../../src/core/core.ts"],"sourcesContent":["/**\n * THE CORE SCHEMA `C` (P2 C1): one canonical, versioned form of a V2 schema that both directions meet in.\n *\n * normV2: V2 → C canonical JSON (sorted keys, no undefined) of the V2 schema, with V2's own equivalences folded\n * embedV2: C → V2 the schema C holds\n * embedProd: C → prod the prod adapter (fromTypeSchema, the façade) on embedV2(c)\n * normProd: prod → C normV2 of what the prod schema reads back as (toTypeSchema / propsToTypeSchema, the façades)\n *\n * Laws (PBT, src/core/__tests__): norm∘embed = id on C (P1); normProd(embedProd(c)) equals c except under the paths\n * the adapter names (P2); prod zod accepts embedProd(c) (P3); every named loss is excluded, pending or out of its bound\n * (P4); both normalisers are idempotent (P5); the hash is byte-stable (P6); one prod key per facet (P7); out-of-domain\n * prod keys survive a write (P8).\n *\n * V2's equivalences folded by normV2 (what the V2 engine draws the same, so C cannot tell apart):\n * - a list's itemNoun equal to the engine's fallback (lib/schema.ts itemNoun) is the absent one\n * - a fieldset a field names but the schema does not declare is the declared { name, title: name } (engine/field-list\n * arrange), appended after the declared ones in first-use order\n */\nimport { fromTypeSchema, propsToTypeSchema, toTypeSchema, type AdapterTarget, type FromTypeSchemaResult, type ToTypeSchemaOptions } from \"../adapters/schema\";\nimport { isHostConfigKey, SERVER_CONFIG_KEYS, type CatalogItem, type LossyItem } from \"../adapters/lossy\";\nimport type { ProdComponent, ProdContentModel } from \"../adapters/prod-types\";\nimport { itemNoun } from \"../lib/schema\";\nimport type { FieldSchema, TypeSchema } from \"../schema/types\";\nimport { facetOf, type FacetRow } from \"./facets\";\n\nexport const CORE_VERSION = 1 as const;\n\nexport interface CoreSchema {\n v: typeof CORE_VERSION;\n schema: TypeSchema;\n}\n\ntype Obj = Record<string, unknown>;\nconst isObj = (v: unknown): v is Obj => !!v && typeof v === \"object\" && !Array.isArray(v);\n\n/** Canonical JSON value: object keys sorted, undefined dropped, arrays in their order (order is meaning). */\nexport function canonical<T>(v: T): T {\n if (Array.isArray(v)) return v.map(canonical) as T;\n if (!isObj(v)) return v;\n const out: Obj = {};\n for (const k of Object.keys(v).sort()) if (v[k] !== undefined) out[k] = canonical(v[k]);\n return out as T;\n}\n\nfunction foldField(f: FieldSchema): FieldSchema {\n const out: FieldSchema = { ...f };\n if (out.fields) out.fields = out.fields.map(foldField);\n if (Array.isArray(out.of)) out.of = out.of.map(foldField);\n if (out.slotSettings) out.slotSettings = out.slotSettings.map(foldField);\n if (out.itemNoun !== undefined && out.itemNoun === itemNoun({ ...out, itemNoun: undefined })) delete out.itemNoun;\n return out;\n}\n\n/** The fieldsets fields name, depth first, the way the adapter visits them (fromTypeSchema propSetsFor / fieldsetsFor). */\nfunction namedSets(fields: FieldSchema[], out: string[] = []): string[] {\n for (const f of fields) {\n if (f.fieldset !== undefined && !out.includes(f.fieldset)) out.push(f.fieldset);\n if (f.fields) namedSets(f.fields, out);\n if (Array.isArray(f.of)) for (const i of f.of) if (i.fields) namedSets(i.fields, out);\n }\n return out;\n}\n\nexport function normV2(v2: TypeSchema): CoreSchema {\n const schema: TypeSchema = { ...v2, fields: v2.fields.map(foldField) };\n const declared = new Set((v2.fieldsets ?? []).map((s) => s.name));\n const undeclared = namedSets(v2.fields).filter((n) => !declared.has(n));\n if (undeclared.length) schema.fieldsets = [...(v2.fieldsets ?? []), ...undeclared.map((name) => ({ name, title: name }))];\n return { v: CORE_VERSION, schema: canonical(schema) };\n}\n\nexport const embedV2 = (c: CoreSchema): TypeSchema => structuredClone(c.schema);\n\nexport function embedProd(c: CoreSchema, lane: \"fields\"): FromTypeSchemaResult<ProdContentModel>;\nexport function embedProd(c: CoreSchema, lane: \"props\"): FromTypeSchemaResult<ProdComponent>;\nexport function embedProd(c: CoreSchema, lane: AdapterTarget): FromTypeSchemaResult<ProdContentModel | ProdComponent>;\nexport function embedProd(c: CoreSchema, lane: AdapterTarget) {\n return lane === \"fields\" ? fromTypeSchema(embedV2(c), \"fields\") : fromTypeSchema(embedV2(c), \"props\");\n}\n\nexport function normProd(prod: ProdContentModel | ProdComponent, lane: AdapterTarget, opts: ToTypeSchemaOptions = {}): CoreSchema {\n return normV2(lane === \"fields\" ? toTypeSchema(prod as ProdContentModel, opts) : propsToTypeSchema(prod as ProdComponent, opts));\n}\n\n/** Byte-stable serialisation of C: the hash input, and the form fixtures are frozen in. */\nexport const coreJson = (c: CoreSchema): string => JSON.stringify(canonical(c));\n\n/** `schema_hash`: \"v1:\" + sha256 of coreJson (Web Crypto: the same in the browser, Node and Bun). */\nexport async function coreHash(c: CoreSchema): Promise<string> {\n const bytes = new Uint8Array(await crypto.subtle.digest(\"SHA-256\", new TextEncoder().encode(coreJson(c))));\n return `v${CORE_VERSION}:${[...bytes].map((b) => b.toString(16).padStart(2, \"0\")).join(\"\")}`;\n}\n\n/** The leaf paths where two JSON values differ (\"/fields/0/title\"); a missing object or list compares as an empty one. */\nexport function leafDiff(a: unknown, b: unknown, path = \"\", out: string[] = []): string[] {\n const obj = (x: unknown) => x === undefined || isObj(x);\n const arr = (x: unknown) => x === undefined || Array.isArray(x);\n if ((isObj(a) || isObj(b)) && obj(a) && obj(b)) {\n const A = (a ?? {}) as Obj;\n const B = (b ?? {}) as Obj;\n for (const k of new Set([...Object.keys(A), ...Object.keys(B)])) leafDiff(A[k], B[k], `${path}/${k}`, out);\n } else if ((Array.isArray(a) || Array.isArray(b)) && arr(a) && arr(b)) {\n const A = (a ?? []) as unknown[];\n const B = (b ?? []) as unknown[];\n for (let i = 0; i < Math.max(A.length, B.length); i++) leafDiff(A[i], B[i], `${path}/${i}`, out);\n } else if (JSON.stringify(a) !== JSON.stringify(b)) out.push(path);\n return out;\n}\n\nconst under = (path: string, root: string) => path === root || path.startsWith(`${root}/`);\n\nexport interface CoreLossItem {\n path: string;\n feature: string;\n facet: FacetRow | undefined;\n}\n\nexport interface CoreRoundTrip {\n prod: ProdContentModel | ProdComponent;\n back: CoreSchema;\n /** the paths where C and normProd(embedProd(C)) differ */\n diffs: string[];\n /** loss(c): each item the adapter names that has a difference under it (an item C's equivalences absorb is no loss) */\n loss: CoreLossItem[];\n /** a difference no named item covers: a silent drop (P2 fails on any) */\n unreported: string[];\n}\n\n/** C through prod and back, against the lane's read: the oracle P2 and P4 assert on. */\nexport function roundTripCore(c: CoreSchema, lane: AdapterTarget): CoreRoundTrip {\n const r = embedProd(c, lane);\n const back = normProd(r.schema, lane, { blockModels: r.blockModels });\n // the props lane reads each top-level field's default-group placement back explicitly: compare it as such\n const want = lane === \"props\" ? normV2(withDefaultGroups(c.schema)).schema : c.schema;\n const diffs = leafDiff(want, back.schema);\n const named: (LossyItem | CatalogItem)[] = [...r.lossy, ...r.catalog];\n return {\n prod: r.schema,\n back,\n diffs,\n loss: named.filter((l) => diffs.some((d) => under(d, l.path))).map((l) => ({ path: l.path, feature: l.feature, facet: facetOf(l.feature) })),\n unreported: diffs.filter((d) => !named.some((l) => under(d, l.path))),\n };\n}\n\nfunction withDefaultGroups(s: TypeSchema): TypeSchema {\n const d = (s.groups?.find((g) => g.default) ?? s.groups?.[0])?.name;\n return d === undefined ? s : { ...s, fields: s.fields.map((f) => (f.group === undefined ? { ...f, group: d } : f)) };\n}\n\n/* ── P8: out-of-domain prod keys survive a write ── */\n\ntype ProdDef = Obj & { key?: string; type?: string; config?: Obj; fields?: ProdDef[] };\nconst OUT_OF_DOMAIN_KEYS = [\"target\", \"stale\", \"origin\"] as const;\n\n/** One written definition with the out-of-domain keys of the stored one it replaces (same key) carried over. */\nfunction carryDef(written: ProdDef, stored: ProdDef | undefined): ProdDef {\n if (!stored) return written;\n const out: ProdDef = { ...written };\n for (const k of OUT_OF_DOMAIN_KEYS) if (stored[k] !== undefined && out[k] === undefined) out[k] = stored[k];\n const type = String(written.type ?? \"\");\n const host = Object.entries(stored.config ?? {}).filter(([k, v]) => v !== undefined && (isHostConfigKey(type, k) || SERVER_CONFIG_KEYS.has(k)) && out.config?.[k] === undefined);\n if (host.length || out.config) out.config = { ...(out.config ?? {}), ...Object.fromEntries(host) };\n // nested definitions: a model field's fields, a prop's config.fields\n if (Array.isArray(written.fields)) out.fields = carryList(written.fields, stored.fields);\n const cf = out.config?.fields;\n if (Array.isArray(cf)) out.config = { ...out.config, fields: carryList(cf as ProdDef[], stored.config?.fields as ProdDef[] | undefined) };\n return out;\n}\n\nconst carryList = (written: ProdDef[], stored: ProdDef[] | undefined) => written.map((w) => carryDef(w, stored?.find((s) => s.key === w.key)));\n\n/**\n * A prod definition written from C, with every out-of-domain key (facets.ts OUT_OF_DOMAIN: a prop's binding, host and\n * server config) the stored definition held carried over by key. What write_schema stores (C6).\n */\nexport function preserveOutOfDomain<T extends ProdContentModel | ProdComponent>(written: T, stored: T | undefined, lane: AdapterTarget): T {\n if (!stored) return written;\n const list = lane === \"fields\" ? \"fields\" : \"props\";\n const w = written as unknown as Obj;\n const s = stored as unknown as Obj;\n return { ...w, [list]: carryList((w[list] as ProdDef[]) ?? [], s[list] as ProdDef[] | undefined) } as unknown as T;\n}\n"],"mappings":"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"}
@@ -0,0 +1,347 @@
1
+ /**
2
+ * THE FACET TABLE (kit-facet-table.v3.md, G0b closed 2026-10-23): every V2 schema facet the adapter can name, with the
3
+ * ONE prod key per lane that stores it. `satisfies Record<V2Facet, FacetRow>` makes it total: a feature added to
4
+ * FEATURES or CATALOG (adapters/lossy.ts) without a row here fails tsc.
5
+ *
6
+ * Carriers are `value` (an explicit stored key) and `excluded` (owner-signed). A `bound` names the one shared constant
7
+ * the V2 authoring rule and the prod zod rule both read: a value inside it is carried, one outside it is refused with
8
+ * the facet's name. `status` is "landed" when the adapter carries the facet today, else the step that lands it.
9
+ * Prod-only keys V2 has no concept of are not facets: OUT_OF_DOMAIN, preserved on every write (PBT P8).
10
+ */
11
+ import type { CatalogFeature, LossyFeature } from "../adapters/lossy";
12
+ /** Prod keys with no V2 concept (facet table §B.1): never written from V2, carried through a write from the stored definition. */
13
+ export declare const OUT_OF_DOMAIN: {
14
+ readonly "prop target": "a prop's binding: props[].target (+ stale, origin)";
15
+ readonly "host config": "HOST_CONFIG_KEYS + SERVER_CONFIG_KEYS in a field's or prop's config (adapters/lossy.ts)";
16
+ };
17
+ export type OutOfDomainFeature = keyof typeof OUT_OF_DOMAIN;
18
+ export type V2Facet = Exclude<LossyFeature | CatalogFeature, OutOfDomainFeature>;
19
+ export interface FacetRow {
20
+ /** facet table v3: an A row number, or the B group */
21
+ row: string;
22
+ carrier: "value" | "excluded";
23
+ /** the prod key(s) per lane, one per shape the facet takes; [] = the facet does not arise in that lane */
24
+ props: readonly string[];
25
+ fields: readonly string[];
26
+ /** the shared constant: inside it the facet is carried, outside it the facet is refused by name */
27
+ bound?: string;
28
+ status: "landed" | `pending:${string}`;
29
+ /** a facet stored at another facet's key (kind:page is the shape facet's value "page") */
30
+ foldedInto?: V2Facet;
31
+ }
32
+ export declare const FACETS: {
33
+ readonly ai: {
34
+ readonly row: "A1";
35
+ readonly carrier: "value";
36
+ readonly props: readonly ["props[].ai"];
37
+ readonly fields: readonly ["fields[].ai"];
38
+ readonly status: "pending:C3";
39
+ };
40
+ readonly category: {
41
+ readonly row: "A2";
42
+ readonly carrier: "value";
43
+ readonly props: readonly ["components.category"];
44
+ readonly fields: readonly ["content_models.v2.category"];
45
+ readonly bound: "CATEGORY_ORDER";
46
+ readonly status: "pending:C3+C5";
47
+ };
48
+ readonly variants: {
49
+ readonly row: "A3";
50
+ readonly carrier: "value";
51
+ readonly props: readonly ["component_variant_groups (+ components.variant_group_id, variant_input_mappings; order/icon/description → component_variant_groups.v2.variants)"];
52
+ readonly fields: readonly ["fields[_variant] select + showIf {field:_variant}; content_models.v2.variants{slug → {icon, description}}"];
53
+ readonly status: "pending:C4";
54
+ };
55
+ readonly "block icon": {
56
+ readonly row: "A4";
57
+ readonly carrier: "value";
58
+ readonly props: readonly ["components.icon"];
59
+ readonly fields: readonly ["content_models.icon"];
60
+ readonly bound: "DOCK_ICON_NAMES";
61
+ readonly status: "pending:C1-model-settings";
62
+ };
63
+ readonly "document preview": {
64
+ readonly row: "A5";
65
+ readonly carrier: "value";
66
+ readonly props: readonly ["components.preview"];
67
+ readonly fields: readonly ["content_models.list_preview"];
68
+ readonly status: "pending:C3";
69
+ };
70
+ readonly "document preview path": {
71
+ readonly row: "B catalog";
72
+ readonly carrier: "value";
73
+ readonly props: readonly ["components.preview (path rule widened)"];
74
+ readonly fields: readonly [];
75
+ readonly status: "pending:C3";
76
+ };
77
+ readonly "kind:global": {
78
+ readonly row: "A6";
79
+ readonly carrier: "value";
80
+ readonly props: readonly ["components.v2.shape"];
81
+ readonly fields: readonly ["content_models.v2.shape"];
82
+ readonly status: "pending:C5";
83
+ };
84
+ readonly "kind:entry (props)": {
85
+ readonly row: "A6";
86
+ readonly carrier: "value";
87
+ readonly props: readonly ["components.v2.shape"];
88
+ readonly fields: readonly [];
89
+ readonly status: "pending:C5";
90
+ readonly foldedInto: "kind:global";
91
+ };
92
+ readonly "kind:block (fields)": {
93
+ readonly row: "A6";
94
+ readonly carrier: "value";
95
+ readonly props: readonly [];
96
+ readonly fields: readonly ["content_models.v2.shape"];
97
+ readonly status: "pending:C5";
98
+ readonly foldedInto: "kind:global";
99
+ };
100
+ readonly "kind:page": {
101
+ readonly row: "A22";
102
+ readonly carrier: "value";
103
+ readonly props: readonly [];
104
+ readonly fields: readonly ["content_models.v2.shape"];
105
+ readonly status: "pending:C5";
106
+ readonly foldedInto: "kind:global";
107
+ };
108
+ readonly "kind:object": {
109
+ readonly row: "A6";
110
+ readonly carrier: "value";
111
+ readonly props: readonly [];
112
+ readonly fields: readonly ["content_models.v2.shape"];
113
+ readonly status: "pending:C5";
114
+ readonly foldedInto: "kind:global";
115
+ };
116
+ readonly "groups>3": {
117
+ readonly row: "A7";
118
+ readonly carrier: "value";
119
+ readonly props: readonly ["components.tabs"];
120
+ readonly fields: readonly ["content_models.fieldsets[kind:tab]"];
121
+ readonly bound: "TAB_MAX";
122
+ readonly status: "pending:C3+C8";
123
+ };
124
+ readonly "item openMode": {
125
+ readonly row: "A8";
126
+ readonly carrier: "value";
127
+ readonly props: readonly ["config.item.openMode (object item)", "config.itemTypes[i].openMode (polymorphic)"];
128
+ readonly fields: readonly ["ui.blocks[slug].openMode (modular)"];
129
+ readonly status: "pending:C3";
130
+ };
131
+ readonly "reference target": {
132
+ readonly row: "A9";
133
+ readonly carrier: "value";
134
+ readonly props: readonly ["config.targets"];
135
+ readonly fields: readonly ["config.targets"];
136
+ readonly bound: "REF_TARGET_KINDS";
137
+ readonly status: "landed";
138
+ };
139
+ readonly "type:slot": {
140
+ readonly row: "A10";
141
+ readonly carrier: "value";
142
+ readonly props: readonly ["props[] type slot (config.allow)"];
143
+ readonly fields: readonly ["fields[] type slot (config.blockSlugs)"];
144
+ readonly bound: "SLOT_BLOCK_SLUGS_REQUIRED";
145
+ readonly status: "landed";
146
+ };
147
+ readonly "block model field": {
148
+ readonly row: "A11";
149
+ readonly carrier: "value";
150
+ readonly props: readonly [];
151
+ readonly fields: readonly ["kind:'block' model fields[]"];
152
+ readonly bound: "BLOCK_FIELD_TYPES";
153
+ readonly status: "pending:G7";
154
+ };
155
+ readonly "shopify reference": {
156
+ readonly row: "A12";
157
+ readonly carrier: "excluded";
158
+ readonly props: readonly [];
159
+ readonly fields: readonly [];
160
+ readonly status: "landed";
161
+ };
162
+ readonly "type:table": {
163
+ readonly row: "A13";
164
+ readonly carrier: "value";
165
+ readonly props: readonly ["props[] type table (config.mode data)"];
166
+ readonly fields: readonly ["fields[] type table"];
167
+ readonly status: "landed";
168
+ };
169
+ readonly "group (nested)": {
170
+ readonly row: "A14";
171
+ readonly carrier: "value";
172
+ readonly props: readonly ["ui.tab {id}"];
173
+ readonly fields: readonly ["ui.tab {id} (nested field)"];
174
+ readonly bound: "TAB_MAX";
175
+ readonly status: "landed";
176
+ };
177
+ readonly "fieldset collision": {
178
+ readonly row: "A15";
179
+ readonly carrier: "value";
180
+ readonly props: readonly ["ui.group {id}"];
181
+ readonly fields: readonly ["fieldsetId"];
182
+ readonly bound: "TAB_FIELDSET_ID_UNIQUE";
183
+ readonly status: "landed";
184
+ };
185
+ readonly "segmented fallback": {
186
+ readonly row: "A16";
187
+ readonly carrier: "value";
188
+ readonly props: readonly ["ui.control segmented"];
189
+ readonly fields: readonly ["ui.control segmented"];
190
+ readonly bound: "SEGMENTED_MAX";
191
+ readonly status: "pending:C3";
192
+ };
193
+ readonly "fieldset (derived)": {
194
+ readonly row: "A17";
195
+ readonly carrier: "value";
196
+ readonly props: readonly ["ui.group (prop group)"];
197
+ readonly fields: readonly ["content_models.fieldsets"];
198
+ readonly status: "landed";
199
+ };
200
+ readonly "itemNoun (derived)": {
201
+ readonly row: "A18";
202
+ readonly carrier: "value";
203
+ readonly props: readonly ["ui.itemLabel"];
204
+ readonly fields: readonly ["ui.itemTitle"];
205
+ readonly status: "landed";
206
+ };
207
+ readonly "reference filter": {
208
+ readonly row: "A19";
209
+ readonly carrier: "value";
210
+ readonly props: readonly ["config.filter"];
211
+ readonly fields: readonly ["config.filter"];
212
+ readonly bound: "REFERENCE_FILTER_MAX";
213
+ readonly status: "landed";
214
+ };
215
+ readonly condition: {
216
+ readonly row: "A20";
217
+ readonly carrier: "value";
218
+ readonly props: readonly ["showIf (+ scope)"];
219
+ readonly fields: readonly ["showIf (+ scope)"];
220
+ readonly bound: "SHOW_IF_SCOPES";
221
+ readonly status: "pending:C3";
222
+ };
223
+ readonly openMode: {
224
+ readonly row: "A21";
225
+ readonly carrier: "value";
226
+ readonly props: readonly ["props[].openMode"];
227
+ readonly fields: readonly ["fields[].openMode"];
228
+ readonly bound: "OPEN_MODE_TYPES";
229
+ readonly status: "pending:C9";
230
+ };
231
+ readonly "slot allow": {
232
+ readonly row: "A23";
233
+ readonly carrier: "value";
234
+ readonly props: readonly ["config.allow"];
235
+ readonly fields: readonly ["config.blockSlugs"];
236
+ readonly bound: "SLOT_ALLOW";
237
+ readonly status: "landed";
238
+ };
239
+ readonly "type:polymorphic-array": {
240
+ readonly row: "B structural";
241
+ readonly carrier: "value";
242
+ readonly props: readonly ["props[] type table (config.mode types)"];
243
+ readonly fields: readonly ["fields[] type modular"];
244
+ readonly status: "pending:C3";
245
+ };
246
+ readonly "item chrome (types)": {
247
+ readonly row: "B structural";
248
+ readonly carrier: "value";
249
+ readonly props: readonly ["config.itemTypes[i] {icon, preview}"];
250
+ readonly fields: readonly ["ui.blocks[slug] {icon, preview}"];
251
+ readonly status: "pending:C3";
252
+ };
253
+ readonly "type:primitive-array": {
254
+ readonly row: "B decided";
255
+ readonly carrier: "value";
256
+ readonly props: readonly ["config.itemType (widened)"];
257
+ readonly fields: readonly ["config.itemType (widened)"];
258
+ readonly status: "pending:C3";
259
+ };
260
+ readonly "depth>10": {
261
+ readonly row: "B decided";
262
+ readonly carrier: "value";
263
+ readonly props: readonly ["nesting"];
264
+ readonly fields: readonly ["nesting"];
265
+ readonly bound: "DEPTH_MAX";
266
+ readonly status: "landed";
267
+ };
268
+ readonly slotSettings: {
269
+ readonly row: "B decided (BUILD)";
270
+ readonly carrier: "value";
271
+ readonly props: readonly ["config.settings: FieldDef[]"];
272
+ readonly fields: readonly ["config.settings: FieldDef[]"];
273
+ readonly bound: "SLOT_SETTINGS_MAX";
274
+ readonly status: "pending:C3";
275
+ };
276
+ readonly "block placement": {
277
+ readonly row: "B catalog";
278
+ readonly carrier: "value";
279
+ readonly props: readonly ["components.v2.placement"];
280
+ readonly fields: readonly ["content_models.v2.placement"];
281
+ readonly status: "pending:C5";
282
+ };
283
+ readonly "seeded instance": {
284
+ readonly row: "B catalog";
285
+ readonly carrier: "excluded";
286
+ readonly props: readonly [];
287
+ readonly fields: readonly [];
288
+ readonly status: "landed";
289
+ };
290
+ readonly "not applicable (props)": {
291
+ readonly row: "B catalog";
292
+ readonly carrier: "excluded";
293
+ readonly props: readonly [];
294
+ readonly fields: readonly [];
295
+ readonly status: "landed";
296
+ };
297
+ readonly "type name": FacetRow;
298
+ readonly "group name>40": FacetRow;
299
+ readonly "group title": FacetRow;
300
+ readonly "group default": FacetRow;
301
+ readonly "group icon": FacetRow;
302
+ readonly "group name collision": FacetRow;
303
+ readonly "prop tab limit": FacetRow;
304
+ readonly "fieldset spans groups": FacetRow;
305
+ readonly "fieldset (props)": FacetRow;
306
+ readonly "fieldset name>limit": FacetRow;
307
+ readonly "duplicate name": FacetRow;
308
+ readonly "reserved name": {
309
+ readonly row: "B corpus-fix";
310
+ readonly carrier: "value";
311
+ readonly props: readonly [];
312
+ readonly fields: readonly ["fields[].key"];
313
+ readonly bound: "KEY_RESERVED + KEY_FORMAT";
314
+ readonly status: "landed";
315
+ };
316
+ readonly rows: FacetRow;
317
+ readonly synced: FacetRow;
318
+ readonly valueShape: FacetRow;
319
+ readonly "default value": FacetRow;
320
+ readonly icon: FacetRow;
321
+ readonly layout: FacetRow;
322
+ readonly "help>limit": FacetRow;
323
+ readonly "option icon": FacetRow;
324
+ readonly "option description": FacetRow;
325
+ readonly access: FacetRow;
326
+ readonly timezone: FacetRow;
327
+ readonly "reference order": FacetRow;
328
+ readonly "numeric unit": FacetRow;
329
+ readonly "rating bounds": FacetRow;
330
+ readonly "scale rules": FacetRow;
331
+ readonly "validation.patternMessage": FacetRow;
332
+ readonly "validation.pattern": FacetRow;
333
+ readonly "validation.length": FacetRow;
334
+ readonly "validation.items": FacetRow;
335
+ readonly "validation.unique": FacetRow;
336
+ readonly "validation.recommendedMax": FacetRow;
337
+ readonly "item identity": FacetRow;
338
+ readonly "item settings": FacetRow;
339
+ readonly itemNoun: FacetRow;
340
+ readonly "item icon": FacetRow;
341
+ readonly "preview icon": FacetRow;
342
+ readonly "preview path": FacetRow;
343
+ readonly "unsupported key": FacetRow;
344
+ };
345
+ export declare const facetOf: (feature: string) => FacetRow | undefined;
346
+ /** The owner-signed exclusions: what may be lost by design (shopify until its pipeline, and two deliberate backend rules). */
347
+ export declare const EXCLUDED: readonly V2Facet[];