@bettercms-ai/kit 1.0.0 → 2.0.0-next.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 (589) 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/dist/controls/form-picker-register.d.ts +7 -0
  50. package/{controls → dist/controls}/form-picker-register.js +2 -6
  51. package/dist/controls/form-picker-register.js.map +1 -0
  52. package/{controls → dist/controls}/form-picker.js +11 -9
  53. package/dist/controls/form-picker.js.map +1 -0
  54. package/{controls → dist/controls}/icon-register.js +1 -1
  55. package/dist/controls/icon-register.js.map +1 -0
  56. package/{controls → dist/controls}/icon.d.ts +4 -2
  57. package/{controls → dist/controls}/icon.js +32 -27
  58. package/dist/controls/icon.js.map +1 -0
  59. package/{controls → dist/controls}/index.d.ts +1 -1
  60. package/{controls → dist/controls}/index.js +4 -3
  61. package/dist/controls/index.js.map +1 -0
  62. package/{controls → dist/controls}/json-register.js +1 -1
  63. package/dist/controls/json-register.js.map +1 -0
  64. package/{controls → dist/controls}/json.js +13 -3
  65. package/dist/controls/json.js.map +1 -0
  66. package/{controls → dist/controls}/link.js +6 -6
  67. package/dist/controls/link.js.map +1 -0
  68. package/{controls → dist/controls}/location-register.js +1 -1
  69. package/dist/controls/location-register.js.map +1 -0
  70. package/{controls → dist/controls}/location.js +64 -40
  71. package/dist/controls/location.js.map +1 -0
  72. package/{controls → dist/controls}/media-register.js +1 -1
  73. package/dist/controls/media-register.js.map +1 -0
  74. package/{controls → dist/controls}/media-services.d.ts +6 -0
  75. package/dist/controls/media-services.js +0 -0
  76. package/{controls → dist/controls}/media.d.ts +35 -4
  77. package/{controls → dist/controls}/media.js +491 -171
  78. package/dist/controls/media.js.map +1 -0
  79. package/{controls → dist/controls}/number.js +10 -9
  80. package/dist/controls/number.js.map +1 -0
  81. package/{controls → dist/controls}/reference-register.js +1 -1
  82. package/dist/controls/reference-register.js.map +1 -0
  83. package/{controls → dist/controls}/reference-services.d.ts +4 -0
  84. package/dist/controls/reference-services.js +0 -0
  85. package/{controls → dist/controls}/reference.d.ts +1 -1
  86. package/{controls → dist/controls}/reference.js +93 -77
  87. package/dist/controls/reference.js.map +1 -0
  88. package/dist/controls/rich-text/blocks.d.ts +49 -0
  89. package/{controls → dist/controls}/rich-text/blocks.js +471 -144
  90. package/dist/controls/rich-text/blocks.js.map +1 -0
  91. package/{controls → dist/controls}/rich-text/catalog.d.ts +4 -1
  92. package/{controls → dist/controls}/rich-text/catalog.js +75 -65
  93. package/dist/controls/rich-text/catalog.js.map +1 -0
  94. package/{controls → dist/controls}/rich-text/codec.d.ts +9 -1
  95. package/{controls → dist/controls}/rich-text/codec.js +3 -1
  96. package/dist/controls/rich-text/codec.js.map +1 -0
  97. package/{controls → dist/controls}/rich-text/component-card.d.ts +1 -1
  98. package/{controls → dist/controls}/rich-text/component-card.js +417 -99
  99. package/dist/controls/rich-text/component-card.js.map +1 -0
  100. package/dist/controls/rich-text/component-panel.d.ts +47 -0
  101. package/dist/controls/rich-text/component-panel.js +141 -0
  102. package/dist/controls/rich-text/component-panel.js.map +1 -0
  103. package/{controls → dist/controls}/rich-text/control.d.ts +1 -2
  104. package/{controls → dist/controls}/rich-text/control.js +84 -42
  105. package/dist/controls/rich-text/control.js.map +1 -0
  106. package/{controls → dist/controls}/rich-text/dom.d.ts +52 -9
  107. package/{controls → dist/controls}/rich-text/dom.js +379 -50
  108. package/dist/controls/rich-text/dom.js.map +1 -0
  109. package/{controls → dist/controls}/rich-text/editor.d.ts +7 -0
  110. package/{controls → dist/controls}/rich-text/editor.js +148 -48
  111. package/dist/controls/rich-text/editor.js.map +1 -0
  112. package/{controls → dist/controls}/rich-text/floating.d.ts +6 -1
  113. package/{controls → dist/controls}/rich-text/floating.js +35 -18
  114. package/dist/controls/rich-text/floating.js.map +1 -0
  115. package/{controls → dist/controls}/rich-text/index.js +1 -1
  116. package/dist/controls/rich-text/index.js.map +1 -0
  117. package/dist/controls/rich-text/link-form.js +147 -0
  118. package/dist/controls/rich-text/link-form.js.map +1 -0
  119. package/{controls → dist/controls}/rich-text/markdown.js +4 -2
  120. package/dist/controls/rich-text/markdown.js.map +1 -0
  121. package/{controls → dist/controls}/rich-text/ops.js +17 -15
  122. package/dist/controls/rich-text/ops.js.map +1 -0
  123. package/dist/controls/rich-text/plain.d.ts +17 -0
  124. package/dist/controls/rich-text/plain.js +44 -0
  125. package/dist/controls/rich-text/plain.js.map +1 -0
  126. package/{controls → dist/controls}/rich-text/toolbar.d.ts +6 -2
  127. package/{controls → dist/controls}/rich-text/toolbar.js +12 -7
  128. package/dist/controls/rich-text/toolbar.js.map +1 -0
  129. package/{controls → dist/controls}/scale.js +5 -5
  130. package/dist/controls/scale.js.map +1 -0
  131. package/dist/controls/slot-register.d.ts +6 -0
  132. package/{controls → dist/controls}/slot-register.js +2 -5
  133. package/dist/controls/slot-register.js.map +1 -0
  134. package/{controls → dist/controls}/slot-services.d.ts +25 -0
  135. package/dist/controls/slot-services.js +155 -0
  136. package/dist/controls/slot-services.js.map +1 -0
  137. package/{controls → dist/controls}/slot.js +42 -24
  138. package/dist/controls/slot.js.map +1 -0
  139. package/{controls → dist/controls}/table/index.js +1 -1
  140. package/dist/controls/table/index.js.map +1 -0
  141. package/{controls → dist/controls}/table/prod.js +3 -3
  142. package/dist/controls/table/prod.js.map +1 -0
  143. package/{controls → dist/controls}/table/refs.js +13 -2
  144. package/dist/controls/table/refs.js.map +1 -0
  145. package/{controls → dist/controls}/table/stored.js +1 -1
  146. package/dist/controls/table/stored.js.map +1 -0
  147. package/{controls → dist/controls}/table/table-editor.js +51 -48
  148. package/dist/controls/table/table-editor.js.map +1 -0
  149. package/{controls → dist/controls}/table/table-link.js +3 -3
  150. package/dist/controls/table/table-link.js.map +1 -0
  151. package/{controls → dist/controls}/table/table.js +3 -3
  152. package/dist/controls/table/table.js.map +1 -0
  153. package/{controls → dist/controls}/text.d.ts +2 -2
  154. package/{controls → dist/controls}/text.js +78 -43
  155. package/dist/controls/text.js.map +1 -0
  156. package/dist/controls/unknown-value.d.ts +17 -0
  157. package/dist/controls/unknown-value.js +66 -0
  158. package/dist/controls/unknown-value.js.map +1 -0
  159. package/dist/core/core.d.ts +63 -0
  160. package/dist/core/core.js +171 -0
  161. package/dist/core/core.js.map +1 -0
  162. package/dist/core/facets.d.ts +347 -0
  163. package/dist/core/facets.js +334 -0
  164. package/dist/core/facets.js.map +1 -0
  165. package/dist/core/index.d.ts +3 -0
  166. package/dist/core/index.js +3 -0
  167. package/{engine → dist/engine}/array.js +34 -21
  168. package/dist/engine/array.js.map +1 -0
  169. package/{engine → dist/engine}/bits.js +1 -1
  170. package/dist/engine/bits.js.map +1 -0
  171. package/{engine → dist/engine}/breadcrumb.d.ts +3 -3
  172. package/{engine → dist/engine}/breadcrumb.js +12 -36
  173. package/dist/engine/breadcrumb.js.map +1 -0
  174. package/{engine → dist/engine}/expand.d.ts +2 -4
  175. package/{engine → dist/engine}/expand.js +5 -22
  176. package/dist/engine/expand.js.map +1 -0
  177. package/{engine → dist/engine}/field-list.js +1 -1
  178. package/dist/engine/field-list.js.map +1 -0
  179. package/{engine → dist/engine}/field-shell.js +249 -121
  180. package/dist/engine/field-shell.js.map +1 -0
  181. package/{engine → dist/engine}/frame.d.ts +3 -1
  182. package/{engine → dist/engine}/frame.js +16 -14
  183. package/dist/engine/frame.js.map +1 -0
  184. package/{engine → dist/engine}/group-summary.d.ts +2 -1
  185. package/{engine → dist/engine}/group-summary.js +7 -3
  186. package/dist/engine/group-summary.js.map +1 -0
  187. package/{engine → dist/engine}/grouping.d.ts +19 -5
  188. package/{engine → dist/engine}/grouping.js +193 -21
  189. package/dist/engine/grouping.js.map +1 -0
  190. package/{engine → dist/engine}/item-list.d.ts +11 -1
  191. package/{engine → dist/engine}/item-list.js +35 -13
  192. package/dist/engine/item-list.js.map +1 -0
  193. package/{engine → dist/engine}/kit-field.js +45 -10
  194. package/dist/engine/kit-field.js.map +1 -0
  195. package/{engine → dist/engine}/schema-form.d.ts +27 -2
  196. package/{engine → dist/engine}/schema-form.js +182 -40
  197. package/dist/engine/schema-form.js.map +1 -0
  198. package/{engine → dist/engine}/slot.js +5 -15
  199. package/dist/engine/slot.js.map +1 -0
  200. package/dist/index.js +58 -0
  201. package/dist/index.js.map +1 -0
  202. package/{kit.css → dist/kit.css} +19 -0
  203. package/{lib → dist/lib}/cn.js +7 -4
  204. package/dist/lib/cn.js.map +1 -0
  205. package/{lib → dist/lib}/columns.js +4 -1
  206. package/dist/lib/columns.js.map +1 -0
  207. package/{lib → dist/lib}/frames.js +2 -2
  208. package/dist/lib/frames.js.map +1 -0
  209. package/dist/lib/icon-image.d.ts +10 -0
  210. package/dist/lib/icon-image.js +8 -0
  211. package/dist/lib/icon-image.js.map +1 -0
  212. package/{lib → dist/lib}/icons.js +4 -3
  213. package/dist/lib/icons.js.map +1 -0
  214. package/dist/lib/input-modality.d.ts +11 -0
  215. package/dist/lib/input-modality.js +47 -0
  216. package/dist/lib/input-modality.js.map +1 -0
  217. package/dist/lib/key-event.d.ts +11 -0
  218. package/dist/lib/key-event.js +16 -0
  219. package/dist/lib/key-event.js.map +1 -0
  220. package/{lib → dist/lib}/path.js +4 -2
  221. package/dist/lib/path.js.map +1 -0
  222. package/{lib → dist/lib}/schema.d.ts +34 -3
  223. package/{lib → dist/lib}/schema.js +110 -13
  224. package/dist/lib/schema.js.map +1 -0
  225. package/{lib → dist/lib}/utils.js +1 -1
  226. package/dist/lib/utils.js.map +1 -0
  227. package/{lib → dist/lib}/validate.d.ts +11 -1
  228. package/{lib → dist/lib}/validate.js +85 -11
  229. package/dist/lib/validate.js.map +1 -0
  230. package/dist/library/analysis.d.ts +23 -0
  231. package/dist/library/analysis.js +160 -0
  232. package/dist/library/analysis.js.map +1 -0
  233. package/dist/library/catalog.d.ts +57 -0
  234. package/dist/library/catalog.js +307 -0
  235. package/dist/library/catalog.js.map +1 -0
  236. package/dist/library/coreNotes.d.ts +8 -0
  237. package/dist/library/coreNotes.js +111 -0
  238. package/dist/library/coreNotes.js.map +1 -0
  239. package/dist/library/coverage.d.ts +40 -0
  240. package/dist/library/coverage.js +59 -0
  241. package/dist/library/coverage.js.map +1 -0
  242. package/dist/library/entries/advanced.entries.d.ts +2 -0
  243. package/dist/library/entries/advanced.entries.js +6579 -0
  244. package/dist/library/entries/advanced.entries.js.map +1 -0
  245. package/dist/library/entries/commerce.entries.d.ts +2 -0
  246. package/dist/library/entries/commerce.entries.js +4140 -0
  247. package/dist/library/entries/commerce.entries.js.map +1 -0
  248. package/dist/library/entries/company.entries.d.ts +2 -0
  249. package/dist/library/entries/company.entries.js +2731 -0
  250. package/dist/library/entries/company.entries.js.map +1 -0
  251. package/dist/library/entries/conversion.entries.d.ts +2 -0
  252. package/dist/library/entries/conversion.entries.js +3707 -0
  253. package/dist/library/entries/conversion.entries.js.map +1 -0
  254. package/dist/library/entries/data.entries.d.ts +7 -0
  255. package/dist/library/entries/data.entries.js +4613 -0
  256. package/dist/library/entries/data.entries.js.map +1 -0
  257. package/dist/library/entries/events.entries.d.ts +2 -0
  258. package/dist/library/entries/events.entries.js +3428 -0
  259. package/dist/library/entries/events.entries.js.map +1 -0
  260. package/dist/library/entries/features.entries.d.ts +2 -0
  261. package/dist/library/entries/features.entries.js +3157 -0
  262. package/dist/library/entries/features.entries.js.map +1 -0
  263. package/dist/library/entries/heroes.entries.d.ts +2 -0
  264. package/dist/library/entries/heroes.entries.js +3401 -0
  265. package/dist/library/entries/heroes.entries.js.map +1 -0
  266. package/dist/library/entries/index.d.ts +3 -0
  267. package/dist/library/entries/index.js +35 -0
  268. package/dist/library/entries/index.js.map +1 -0
  269. package/dist/library/entries/listings.entries.d.ts +2 -0
  270. package/dist/library/entries/listings.entries.js +2976 -0
  271. package/dist/library/entries/listings.entries.js.map +1 -0
  272. package/dist/library/entries/longform.entries.d.ts +2 -0
  273. package/dist/library/entries/longform.entries.js +4227 -0
  274. package/dist/library/entries/longform.entries.js.map +1 -0
  275. package/dist/library/entries/media.entries.d.ts +2 -0
  276. package/dist/library/entries/media.entries.js +2781 -0
  277. package/dist/library/entries/media.entries.js.map +1 -0
  278. package/dist/library/entries/navigation.entries.d.ts +2 -0
  279. package/dist/library/entries/navigation.entries.js +4011 -0
  280. package/dist/library/entries/navigation.entries.js.map +1 -0
  281. package/dist/library/entries/pricing.entries.d.ts +2 -0
  282. package/dist/library/entries/pricing.entries.js +2383 -0
  283. package/dist/library/entries/pricing.entries.js.map +1 -0
  284. package/dist/library/entries/social-proof.entries.d.ts +2 -0
  285. package/dist/library/entries/social-proof.entries.js +2297 -0
  286. package/dist/library/entries/social-proof.entries.js.map +1 -0
  287. package/dist/library/examples/bento.d.ts +92 -0
  288. package/dist/library/examples/bento.js +201 -0
  289. package/dist/library/examples/bento.js.map +1 -0
  290. package/dist/library/examples/blocks.d.ts +14 -0
  291. package/dist/library/examples/blocks.js +313 -0
  292. package/dist/library/examples/blocks.js.map +1 -0
  293. package/dist/library/examples/faq.d.ts +28 -0
  294. package/dist/library/examples/faq.js +230 -0
  295. package/dist/library/examples/faq.js.map +1 -0
  296. package/dist/library/examples/hero.d.ts +43 -0
  297. package/dist/library/examples/hero.js +222 -0
  298. package/dist/library/examples/hero.js.map +1 -0
  299. package/dist/library/examples/index.d.ts +36 -0
  300. package/dist/library/examples/index.js +109 -0
  301. package/dist/library/examples/index.js.map +1 -0
  302. package/dist/library/examples/journalStory.d.ts +93 -0
  303. package/dist/library/examples/journalStory.js +338 -0
  304. package/dist/library/examples/journalStory.js.map +1 -0
  305. package/dist/library/examples/megaMenu.d.ts +134 -0
  306. package/dist/library/examples/megaMenu.js +442 -0
  307. package/dist/library/examples/megaMenu.js.map +1 -0
  308. package/dist/library/examples/pricing.d.ts +103 -0
  309. package/dist/library/examples/pricing.js +479 -0
  310. package/dist/library/examples/pricing.js.map +1 -0
  311. package/dist/library/examples/tabs.d.ts +87 -0
  312. package/dist/library/examples/tabs.js +180 -0
  313. package/dist/library/examples/tabs.js.map +1 -0
  314. package/dist/library/export.d.ts +42 -0
  315. package/dist/library/export.js +80 -0
  316. package/dist/library/export.js.map +1 -0
  317. package/dist/library/index.d.ts +13 -0
  318. package/dist/library/index.js +6 -0
  319. package/dist/library/kit-catalog.json +1510 -0
  320. package/dist/library/types.d.ts +42 -0
  321. package/dist/library/types.js +0 -0
  322. package/{schema → dist/schema}/adapters.js +1 -2
  323. package/dist/schema/adapters.js.map +1 -0
  324. package/{schema → dist/schema}/help.d.ts +2 -0
  325. package/{schema → dist/schema}/help.js +6 -4
  326. package/dist/schema/help.js.map +1 -0
  327. package/{schema → dist/schema}/scale.js +1 -1
  328. package/dist/schema/scale.js.map +1 -0
  329. package/{schema → dist/schema}/sources.js +1 -1
  330. package/dist/schema/sources.js.map +1 -0
  331. package/{schema → dist/schema}/table.js +11 -10
  332. package/dist/schema/table.js.map +1 -0
  333. package/{schema → dist/schema}/types.d.ts +29 -1
  334. package/{schema → dist/schema}/types.js +1 -1
  335. package/dist/schema/types.js.map +1 -0
  336. package/dist/styles.css +2 -0
  337. package/dist/table/table-view.d.ts +14 -0
  338. package/dist/table/table-view.js +140 -0
  339. package/dist/table/table-view.js.map +1 -0
  340. package/dist/table/table.css +73 -0
  341. package/dist/testing/corpus.d.ts +63 -0
  342. package/dist/testing/corpus.js +129 -0
  343. package/dist/testing/corpus.js.map +1 -0
  344. package/dist/testing/test-form.d.ts +11 -0
  345. package/dist/testing/test-form.js +38 -0
  346. package/dist/testing/test-form.js.map +1 -0
  347. package/dist/theme.css +345 -0
  348. package/dist/theme.d.ts +22 -0
  349. package/dist/theme.js +43 -0
  350. package/dist/theme.js.map +1 -0
  351. package/dist/tokens.css +542 -0
  352. package/dist/types.js +0 -0
  353. package/{ui → dist/ui}/action-tray.d.ts +1 -1
  354. package/{ui → dist/ui}/action-tray.js +20 -19
  355. package/dist/ui/action-tray.js.map +1 -0
  356. package/dist/ui/autocomplete.d.ts +30 -0
  357. package/dist/ui/autocomplete.js +139 -0
  358. package/dist/ui/autocomplete.js.map +1 -0
  359. package/{ui → dist/ui}/button.d.ts +3 -3
  360. package/{ui → dist/ui}/button.js +6 -7
  361. package/dist/ui/button.js.map +1 -0
  362. package/{ui → dist/ui}/choice-switch.js +1 -1
  363. package/dist/ui/choice-switch.js.map +1 -0
  364. package/{ui → dist/ui}/controls.js +51 -39
  365. package/dist/ui/controls.js.map +1 -0
  366. package/{ui → dist/ui}/display.d.ts +10 -3
  367. package/{ui → dist/ui}/display.js +57 -46
  368. package/dist/ui/display.js.map +1 -0
  369. package/{ui → dist/ui}/expanded-editor-modal.d.ts +2 -2
  370. package/{ui → dist/ui}/expanded-editor-modal.js +6 -6
  371. package/dist/ui/expanded-editor-modal.js.map +1 -0
  372. package/{ui → dist/ui}/field-context.js +1 -1
  373. package/dist/ui/field-context.js.map +1 -0
  374. package/{ui → dist/ui}/floating-panel.d.ts +1 -1
  375. package/{ui → dist/ui}/floating-panel.js +28 -12
  376. package/dist/ui/floating-panel.js.map +1 -0
  377. package/{ui → dist/ui}/index.d.ts +4 -0
  378. package/dist/ui/index.js +18 -0
  379. package/{ui → dist/ui}/input.d.ts +1 -1
  380. package/{ui → dist/ui}/input.js +9 -9
  381. package/dist/ui/input.js.map +1 -0
  382. package/{ui → dist/ui}/mode-bar.js +3 -3
  383. package/dist/ui/mode-bar.js.map +1 -0
  384. package/{ui → dist/ui}/overlay.d.ts +77 -5
  385. package/dist/ui/overlay.js +697 -0
  386. package/dist/ui/overlay.js.map +1 -0
  387. package/{ui → dist/ui}/path-crumbs.js +37 -3
  388. package/dist/ui/path-crumbs.js.map +1 -0
  389. package/{ui → dist/ui}/presence.js +2 -2
  390. package/dist/ui/presence.js.map +1 -0
  391. package/{ui → dist/ui}/select.js +89 -87
  392. package/dist/ui/select.js.map +1 -0
  393. package/{ui → dist/ui}/shortcut-hint.js +1 -1
  394. package/dist/ui/shortcut-hint.js.map +1 -0
  395. package/dist/ui/spinner.d.ts +24 -0
  396. package/dist/ui/spinner.js +42 -0
  397. package/dist/ui/spinner.js.map +1 -0
  398. package/dist/ui/split-button.d.ts +32 -0
  399. package/dist/ui/split-button.js +60 -0
  400. package/dist/ui/split-button.js.map +1 -0
  401. package/{ui → dist/ui}/surfaces.js +1 -1
  402. package/dist/ui/surfaces.js.map +1 -0
  403. package/dist/ui/tab.d.ts +38 -0
  404. package/dist/ui/tab.js +87 -0
  405. package/dist/ui/tab.js.map +1 -0
  406. package/dist/ui/toast.d.ts +20 -0
  407. package/dist/ui/toast.js +115 -0
  408. package/dist/ui/toast.js.map +1 -0
  409. package/{ui → dist/ui}/tooltip-root.d.ts +4 -3
  410. package/{ui → dist/ui}/tooltip-root.js +9 -8
  411. package/dist/ui/tooltip-root.js.map +1 -0
  412. package/{ui → dist/ui}/variants.js +1 -1
  413. package/dist/ui/variants.js.map +1 -0
  414. package/package.json +81 -23
  415. package/adapters/icons.js.map +0 -1
  416. package/adapters/lossy.js +0 -233
  417. package/adapters/lossy.js.map +0 -1
  418. package/adapters/prod-types.js.map +0 -1
  419. package/adapters/schema.js.map +0 -1
  420. package/adapters/values.js.map +0 -1
  421. package/brand/logo.js +0 -9
  422. package/brand/logo.js.map +0 -1
  423. package/context.js.map +0 -1
  424. package/controls/button.js.map +0 -1
  425. package/controls/c1.js.map +0 -1
  426. package/controls/c2.js.map +0 -1
  427. package/controls/choice.js.map +0 -1
  428. package/controls/code-register.js.map +0 -1
  429. package/controls/code.js.map +0 -1
  430. package/controls/color.js.map +0 -1
  431. package/controls/date-register.js.map +0 -1
  432. package/controls/date-zone.js.map +0 -1
  433. package/controls/date.js.map +0 -1
  434. package/controls/form-picker-register.d.ts +0 -1
  435. package/controls/form-picker-register.js.map +0 -1
  436. package/controls/form-picker.js.map +0 -1
  437. package/controls/icon-register.js.map +0 -1
  438. package/controls/icon.js.map +0 -1
  439. package/controls/index.js.map +0 -1
  440. package/controls/json-register.js.map +0 -1
  441. package/controls/json.js.map +0 -1
  442. package/controls/link.js.map +0 -1
  443. package/controls/location-register.js.map +0 -1
  444. package/controls/location.js.map +0 -1
  445. package/controls/media-register.js.map +0 -1
  446. package/controls/media.js.map +0 -1
  447. package/controls/number.js.map +0 -1
  448. package/controls/reference-register.js.map +0 -1
  449. package/controls/reference.js.map +0 -1
  450. package/controls/rich-text/blocks.d.ts +0 -28
  451. package/controls/rich-text/blocks.js.map +0 -1
  452. package/controls/rich-text/catalog.js.map +0 -1
  453. package/controls/rich-text/codec.js.map +0 -1
  454. package/controls/rich-text/component-card.js.map +0 -1
  455. package/controls/rich-text/control.js.map +0 -1
  456. package/controls/rich-text/dom.js.map +0 -1
  457. package/controls/rich-text/editor.js.map +0 -1
  458. package/controls/rich-text/floating.js.map +0 -1
  459. package/controls/rich-text/index.js.map +0 -1
  460. package/controls/rich-text/link-form.js +0 -111
  461. package/controls/rich-text/link-form.js.map +0 -1
  462. package/controls/rich-text/markdown.js.map +0 -1
  463. package/controls/rich-text/ops.js.map +0 -1
  464. package/controls/rich-text/toolbar.js.map +0 -1
  465. package/controls/scale.js.map +0 -1
  466. package/controls/slot-register.d.ts +0 -1
  467. package/controls/slot-register.js.map +0 -1
  468. package/controls/slot-services.js +0 -38
  469. package/controls/slot-services.js.map +0 -1
  470. package/controls/slot.js.map +0 -1
  471. package/controls/table/index.js.map +0 -1
  472. package/controls/table/prod.js.map +0 -1
  473. package/controls/table/refs.js.map +0 -1
  474. package/controls/table/stored.js.map +0 -1
  475. package/controls/table/table-editor.js.map +0 -1
  476. package/controls/table/table-link.js.map +0 -1
  477. package/controls/table/table.js.map +0 -1
  478. package/controls/text.js.map +0 -1
  479. package/engine/array.js.map +0 -1
  480. package/engine/bits.js.map +0 -1
  481. package/engine/breadcrumb.js.map +0 -1
  482. package/engine/expand.js.map +0 -1
  483. package/engine/field-list.js.map +0 -1
  484. package/engine/field-shell.js.map +0 -1
  485. package/engine/frame.js.map +0 -1
  486. package/engine/group-summary.js.map +0 -1
  487. package/engine/grouping.js.map +0 -1
  488. package/engine/item-list.js.map +0 -1
  489. package/engine/kit-field.js.map +0 -1
  490. package/engine/schema-form.js.map +0 -1
  491. package/engine/slot.js.map +0 -1
  492. package/index.js +0 -55
  493. package/index.js.map +0 -1
  494. package/lib/cn.js.map +0 -1
  495. package/lib/columns.js.map +0 -1
  496. package/lib/frames.js.map +0 -1
  497. package/lib/icons.js.map +0 -1
  498. package/lib/path.js.map +0 -1
  499. package/lib/schema.js.map +0 -1
  500. package/lib/utils.js.map +0 -1
  501. package/lib/validate.js.map +0 -1
  502. package/schema/adapters.js.map +0 -1
  503. package/schema/help.js.map +0 -1
  504. package/schema/scale.js.map +0 -1
  505. package/schema/sources.js.map +0 -1
  506. package/schema/table.js.map +0 -1
  507. package/schema/types.js.map +0 -1
  508. package/ui/action-tray.js.map +0 -1
  509. package/ui/button.js.map +0 -1
  510. package/ui/choice-switch.js.map +0 -1
  511. package/ui/controls.js.map +0 -1
  512. package/ui/display.js.map +0 -1
  513. package/ui/expanded-editor-modal.js.map +0 -1
  514. package/ui/field-context.js.map +0 -1
  515. package/ui/floating-panel.js.map +0 -1
  516. package/ui/index.js +0 -13
  517. package/ui/input.js.map +0 -1
  518. package/ui/mode-bar.js.map +0 -1
  519. package/ui/overlay.js +0 -378
  520. package/ui/overlay.js.map +0 -1
  521. package/ui/path-crumbs.js.map +0 -1
  522. package/ui/presence.js.map +0 -1
  523. package/ui/select.js.map +0 -1
  524. package/ui/shortcut-hint.js.map +0 -1
  525. package/ui/surfaces.js.map +0 -1
  526. package/ui/tooltip-root.js.map +0 -1
  527. package/ui/variants.js.map +0 -1
  528. /package/{_virtual → dist/_virtual}/_rolldown/runtime.js +0 -0
  529. /package/{adapters → dist/adapters}/icons.d.ts +0 -0
  530. /package/{brand → dist/brand}/logo.d.ts +0 -0
  531. /package/{controls → dist/controls}/c1.d.ts +0 -0
  532. /package/{controls → dist/controls}/c2.d.ts +0 -0
  533. /package/{controls → dist/controls}/code-register.d.ts +0 -0
  534. /package/{controls → dist/controls}/code.d.ts +0 -0
  535. /package/{controls → dist/controls}/color.d.ts +0 -0
  536. /package/{controls → dist/controls}/date-register.d.ts +0 -0
  537. /package/{controls → dist/controls}/date-zone.d.ts +0 -0
  538. /package/{controls → dist/controls}/date.d.ts +0 -0
  539. /package/{controls → dist/controls}/form-picker.d.ts +0 -0
  540. /package/{controls → dist/controls}/icon-register.d.ts +0 -0
  541. /package/{controls → dist/controls}/json-register.d.ts +0 -0
  542. /package/{controls → dist/controls}/json.d.ts +0 -0
  543. /package/{controls → dist/controls}/link.d.ts +0 -0
  544. /package/{controls → dist/controls}/location-register.d.ts +0 -0
  545. /package/{controls → dist/controls}/location.d.ts +0 -0
  546. /package/{controls → dist/controls}/media-register.d.ts +0 -0
  547. /package/{controls → dist/controls}/number.d.ts +0 -0
  548. /package/{controls → dist/controls}/reference-register.d.ts +0 -0
  549. /package/{controls → dist/controls}/rich-text/index.d.ts +0 -0
  550. /package/{controls → dist/controls}/rich-text/link-form.d.ts +0 -0
  551. /package/{controls → dist/controls}/rich-text/markdown.d.ts +0 -0
  552. /package/{controls → dist/controls}/rich-text/ops.d.ts +0 -0
  553. /package/{controls → dist/controls}/scale.d.ts +0 -0
  554. /package/{controls → dist/controls}/slot.d.ts +0 -0
  555. /package/{controls → dist/controls}/table/index.d.ts +0 -0
  556. /package/{controls → dist/controls}/table/prod.d.ts +0 -0
  557. /package/{controls → dist/controls}/table/refs.d.ts +0 -0
  558. /package/{controls → dist/controls}/table/stored.d.ts +0 -0
  559. /package/{controls → dist/controls}/table/table-editor.d.ts +0 -0
  560. /package/{controls → dist/controls}/table/table-link.d.ts +0 -0
  561. /package/{controls → dist/controls}/table/table.d.ts +0 -0
  562. /package/{engine → dist/engine}/array.d.ts +0 -0
  563. /package/{engine → dist/engine}/bits.d.ts +0 -0
  564. /package/{engine → dist/engine}/field-list.d.ts +0 -0
  565. /package/{engine → dist/engine}/field-shell.d.ts +0 -0
  566. /package/{engine → dist/engine}/kit-field.d.ts +0 -0
  567. /package/{engine → dist/engine}/slot.d.ts +0 -0
  568. /package/{index.d.ts → dist/index.d.ts} +0 -0
  569. /package/{lib → dist/lib}/cn.d.ts +0 -0
  570. /package/{lib → dist/lib}/columns.d.ts +0 -0
  571. /package/{lib → dist/lib}/frames.d.ts +0 -0
  572. /package/{lib → dist/lib}/icons.d.ts +0 -0
  573. /package/{lib → dist/lib}/path.d.ts +0 -0
  574. /package/{lib → dist/lib}/utils.d.ts +0 -0
  575. /package/{schema → dist/schema}/adapters.d.ts +0 -0
  576. /package/{schema → dist/schema}/scale.d.ts +0 -0
  577. /package/{schema → dist/schema}/sources.d.ts +0 -0
  578. /package/{schema → dist/schema}/table.d.ts +0 -0
  579. /package/{types.d.ts → dist/types.d.ts} +0 -0
  580. /package/{ui → dist/ui}/choice-switch.d.ts +0 -0
  581. /package/{ui → dist/ui}/controls.d.ts +0 -0
  582. /package/{ui → dist/ui}/field-context.d.ts +0 -0
  583. /package/{ui → dist/ui}/mode-bar.d.ts +0 -0
  584. /package/{ui → dist/ui}/path-crumbs.d.ts +0 -0
  585. /package/{ui → dist/ui}/presence.d.ts +0 -0
  586. /package/{ui → dist/ui}/select.d.ts +0 -0
  587. /package/{ui → dist/ui}/shortcut-hint.d.ts +0 -0
  588. /package/{ui → dist/ui}/surfaces.d.ts +0 -0
  589. /package/{ui → dist/ui}/variants.d.ts +0 -0
package/README.md ADDED
@@ -0,0 +1,33 @@
1
+ # @bettercms-ai/kit
2
+
3
+ The BetterCMS V2 Block Kit: the schema language, the form engine that draws the Visual Editor's dock, its controls, and the design tokens. React 19, Base UI.
4
+
5
+ ```sh
6
+ npm i @bettercms-ai/kit @base-ui/react @tabler/icons-react framer-motion react react-dom
7
+ ```
8
+
9
+ ## Styles
10
+
11
+ - **Tailwind v4 app**: import the tokens and the utility names after Tailwind.
12
+ ```css
13
+ @import "tailwindcss";
14
+ @import "@bettercms-ai/kit/theme.css";
15
+ @import "@bettercms-ai/kit/tokens.css";
16
+ @source "../node_modules/@bettercms-ai/kit/dist";
17
+ ```
18
+ - **No Tailwind** (a custom dock input's iframe): `import "@bettercms-ai/kit/styles.css"`, a precompiled sheet with the tokens and every utility the kit uses. Never import it next to your own Tailwind sheet.
19
+
20
+ ## Theme
21
+
22
+ ```tsx
23
+ import { KitRoot, applyScheme } from "@bettercms-ai/kit/theme";
24
+
25
+ applyScheme("dark"); // .dark on <html>: portalled layers follow it
26
+ <KitRoot>{/* kit components */}</KitRoot>;
27
+ ```
28
+
29
+ ## Imports
30
+
31
+ `@bettercms-ai/kit` re-exports the engine, the controls and the UI primitives. Every module is also importable by path, e.g. `@bettercms-ai/kit/ui/button`, `@bettercms-ai/kit/schema/scale`.
32
+
33
+ 0.1.x (the previous component kit) is deprecated; its source is kept at git tag `kit/0.1.1-sanity`.
@@ -0,0 +1,28 @@
1
+ /**
2
+ * DOCK VALUES — a component instance's prop values, prod ↔ V2, one top-level prop at a time (F12).
3
+ *
4
+ * The plans and the converters are schema.ts's own (`ToTypeSchemaOptions.plans`, `planFromProd`, `planToProd`), so a
5
+ * prop's value crosses exactly the way its default does when the schema is read. This module only gives the dock the
6
+ * two answers it needs in the shape it acts on:
7
+ *
8
+ * propValueToProd(plan, v) → { value, lost }: `lost` names every V2 key prod cannot keep ("cta/style"); non-empty
9
+ * means the write is refused and named.
10
+ * prodOnlyKeys(plan, v) → keys a STORED value carries that the V2 value cannot hand back (a polymorphic
11
+ * reference's modelSlug); non-empty means the kit must not edit that value.
12
+ */
13
+ import { type ValuePlan } from "./schema";
14
+ export type DockValuePlan = ValuePlan;
15
+ /** A stored prod value → the V2 value the kit edits. */
16
+ export declare const propValueFromProd: (plan: DockValuePlan, v: unknown) => unknown;
17
+ /** A V2 value → what prod stores, plus every V2 key prod cannot keep (paths under the value). */
18
+ export declare function propValueToProd(plan: DockValuePlan, v: unknown): {
19
+ value: unknown;
20
+ lost: string[];
21
+ };
22
+ /** Paths under a stored value (no leading slash) whose keys the V2 value drops. */
23
+ export declare function prodOnlyKeys(plan: DockValuePlan, v: unknown): string[];
24
+ /** prodOnlyKeys with the reason schema.ts names for each path. */
25
+ export declare function prodLosses(plan: DockValuePlan, v: unknown): {
26
+ path: string;
27
+ reason: string;
28
+ }[];
@@ -0,0 +1,41 @@
1
+ import { planFromProd, planToProd } from "./schema.js";
2
+ //#region src/adapters/dock-values.ts
3
+ /**
4
+ * DOCK VALUES — a component instance's prop values, prod ↔ V2, one top-level prop at a time (F12).
5
+ *
6
+ * The plans and the converters are schema.ts's own (`ToTypeSchemaOptions.plans`, `planFromProd`, `planToProd`), so a
7
+ * prop's value crosses exactly the way its default does when the schema is read. This module only gives the dock the
8
+ * two answers it needs in the shape it acts on:
9
+ *
10
+ * propValueToProd(plan, v) → { value, lost }: `lost` names every V2 key prod cannot keep ("cta/style"); non-empty
11
+ * means the write is refused and named.
12
+ * prodOnlyKeys(plan, v) → keys a STORED value carries that the V2 value cannot hand back (a polymorphic
13
+ * reference's modelSlug); non-empty means the kit must not edit that value.
14
+ */
15
+ /** A stored prod value → the V2 value the kit edits. */
16
+ var propValueFromProd = (plan, v) => planFromProd(plan, v);
17
+ /** A V2 value → what prod stores, plus every V2 key prod cannot keep (paths under the value). */
18
+ function propValueToProd(plan, v) {
19
+ const lost = [];
20
+ return {
21
+ value: planToProd(plan, v, lost),
22
+ lost
23
+ };
24
+ }
25
+ /** Paths under a stored value (no leading slash) whose keys the V2 value drops. */
26
+ function prodOnlyKeys(plan, v) {
27
+ return prodLosses(plan, v).map((l) => l.path);
28
+ }
29
+ /** prodOnlyKeys with the reason schema.ts names for each path. */
30
+ function prodLosses(plan, v) {
31
+ const out = [];
32
+ planFromProd(plan, v, (rel, reason) => out.push({
33
+ path: rel.replace(/^\//, ""),
34
+ reason
35
+ }));
36
+ return out;
37
+ }
38
+ //#endregion
39
+ export { prodLosses, prodOnlyKeys, propValueFromProd, propValueToProd };
40
+
41
+ //# sourceMappingURL=dock-values.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dock-values.js","names":[],"sources":["../../src/adapters/dock-values.ts"],"sourcesContent":["/**\n * DOCK VALUES — a component instance's prop values, prod ↔ V2, one top-level prop at a time (F12).\n *\n * The plans and the converters are schema.ts's own (`ToTypeSchemaOptions.plans`, `planFromProd`, `planToProd`), so a\n * prop's value crosses exactly the way its default does when the schema is read. This module only gives the dock the\n * two answers it needs in the shape it acts on:\n *\n * propValueToProd(plan, v) → { value, lost }: `lost` names every V2 key prod cannot keep (\"cta/style\"); non-empty\n * means the write is refused and named.\n * prodOnlyKeys(plan, v) → keys a STORED value carries that the V2 value cannot hand back (a polymorphic\n * reference's modelSlug); non-empty means the kit must not edit that value.\n */\nimport { planFromProd, planToProd, type ValuePlan } from \"./schema\";\n\nexport type DockValuePlan = ValuePlan;\n\n/** A stored prod value → the V2 value the kit edits. */\nexport const propValueFromProd = (plan: DockValuePlan, v: unknown): unknown => planFromProd(plan, v);\n\n/** A V2 value → what prod stores, plus every V2 key prod cannot keep (paths under the value). */\nexport function propValueToProd(plan: DockValuePlan, v: unknown): { value: unknown; lost: string[] } {\n const lost: string[] = [];\n const value = planToProd(plan, v, lost);\n return { value, lost };\n}\n\n/** Paths under a stored value (no leading slash) whose keys the V2 value drops. */\nexport function prodOnlyKeys(plan: DockValuePlan, v: unknown): string[] {\n return prodLosses(plan, v).map((l) => l.path);\n}\n\n/** prodOnlyKeys with the reason schema.ts names for each path. */\nexport function prodLosses(plan: DockValuePlan, v: unknown): { path: string; reason: string }[] {\n const out: { path: string; reason: string }[] = [];\n planFromProd(plan, v, (rel, reason) => out.push({ path: rel.replace(/^\\//, \"\"), reason }));\n return out;\n}\n"],"mappings":";;;;;;;;;;;;;;;AAiBA,IAAa,qBAAqB,MAAqB,MAAwB,aAAa,MAAM,CAAC;;AAGnG,SAAgB,gBAAgB,MAAqB,GAAgD;CACnG,MAAM,OAAiB,CAAC;CAExB,OAAO;EAAE,OADK,WAAW,MAAM,GAAG,IACzB;EAAO;CAAK;AACvB;;AAGA,SAAgB,aAAa,MAAqB,GAAsB;CACtE,OAAO,WAAW,MAAM,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,IAAI;AAC9C;;AAGA,SAAgB,WAAW,MAAqB,GAAgD;CAC9F,MAAM,MAA0C,CAAC;CACjD,aAAa,MAAM,IAAI,KAAK,WAAW,IAAI,KAAK;EAAE,MAAM,IAAI,QAAQ,OAAO,EAAE;EAAG;CAAO,CAAC,CAAC;CACzF,OAAO;AACT"}
@@ -1,5 +1,5 @@
1
1
  import { DOCK_ICON_NAME_SET } from "./prod-types.js";
2
- //#region src/kit/adapters/icons.ts
2
+ //#region src/adapters/icons.ts
3
3
  /**
4
4
  * ICONS — the kit's Tabler names ↔ the dock's closed icon vocabulary (DOCK_ICON_NAMES).
5
5
  *
@@ -22,6 +22,6 @@ function dockIconOf(tabler) {
22
22
  /** The Tabler name a stored dock icon reads back as (a dock name with no row reads as itself). */
23
23
  var tablerIconOf = (dock) => DOCK_TO_TABLER.get(dock) ?? dock;
24
24
  //#endregion
25
- export { dockIconOf, tablerIconOf };
25
+ export { TABLER_TO_DOCK, dockIconOf, tablerIconOf };
26
26
 
27
27
  //# sourceMappingURL=icons.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"icons.js","names":[],"sources":["../../src/adapters/icons.ts"],"sourcesContent":["/**\n * ICONS — the kit's Tabler names ↔ the dock's closed icon vocabulary (DOCK_ICON_NAMES).\n *\n * Since e126bf33d the dock vocabulary carries every distinct V2 corpus icon under its own Tabler name, so a Tabler name\n * that is a dock name is stored as itself. The one exception is `map` (a reserved subpath in the icons package), stored\n * as `earth-americas`, the nearest dock glyph. The map stays ONE-TO-ONE so the read side names the Tabler icon back\n * exactly: a dock name some row maps onto reads back as that row's Tabler name, never as itself. A Tabler name with no\n * row and no dock name of its own has no prod form.\n */\nimport { DOCK_ICON_NAME_SET, type DockIconName } from \"./prod-types\";\n\nexport const TABLER_TO_DOCK: Readonly<Record<string, DockIconName>> = Object.freeze({\n map: \"earth-americas\", // approximate: `map` is a reserved subpath of @bettercms-ai/icons\n});\n\n/** dock name → the one Tabler name that maps to it. */\nconst DOCK_TO_TABLER: ReadonlyMap<string, string> = new Map(Object.entries(TABLER_TO_DOCK).map(([t, d]) => [d, t]));\n\n/** The dock name a Tabler icon is stored as, or undefined when it has none. */\nexport function dockIconOf(tabler: string | undefined): DockIconName | undefined {\n if (tabler === undefined) return undefined;\n const mapped = TABLER_TO_DOCK[tabler];\n if (mapped) return mapped;\n // a Tabler name that is also a dock name is kept as itself, unless a mapped name already reads back from it\n return DOCK_ICON_NAME_SET.has(tabler) && !DOCK_TO_TABLER.has(tabler) ? (tabler as DockIconName) : undefined;\n}\n\n/** The Tabler name a stored dock icon reads back as (a dock name with no row reads as itself). */\nexport const tablerIconOf = (dock: string): string => DOCK_TO_TABLER.get(dock) ?? dock;\n"],"mappings":";;;;;;;;;;;AAWA,IAAa,iBAAyD,OAAO,OAAO,EAClF,KAAK,iBACP,CAAC;;AAGD,IAAM,iBAA8C,IAAI,IAAI,OAAO,QAAQ,cAAc,CAAC,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;;AAGlH,SAAgB,WAAW,QAAsD;CAC/E,IAAI,WAAW,KAAA,GAAW,OAAO,KAAA;CACjC,MAAM,SAAS,eAAe;CAC9B,IAAI,QAAQ,OAAO;CAEnB,OAAO,mBAAmB,IAAI,MAAM,KAAK,CAAC,eAAe,IAAI,MAAM,IAAK,SAA0B,KAAA;AACpG;;AAGA,IAAa,gBAAgB,SAAyB,eAAe,IAAI,IAAI,KAAK"}
@@ -17,15 +17,21 @@ export interface LossyItem {
17
17
  * satisfy: rename, shorten, reorder, drop a key the type cannot use), `dashboard:F12` (prod stores it; only the dock's
18
18
  * DockFieldTabs drops it, and the kit's GroupTabs replaces that at the dock cutover), `wontfix:depth` (a prod rule kept
19
19
  * on purpose: the backend refuses an 11th level with field_depth_exceeded), `wontfix:item-config` (the backend refuses
20
- * per-item config on a list of scalars on purpose, array_config_key_unknown). corpus-fix items are V2 corpus defects, an
20
+ * per-item config on a list of scalars on purpose, array_config_key_unknown), `wontfix:nesting` (the backend keeps a
21
+ * slot's settings leaf fields, on purpose: slot_settings_invalid), `deferred:shopify` (owner 2026-10-11: a Shopify
22
+ * reference stays locked text until the Shopify integration pipeline is built; allowed-deviations.json "deferred"). Owner 2026-10-11 (C11): the backend keeps a scalar list's
23
+ * item settings (config.item), a list's bounds to 500, openMode on code, a slot's allow names (config.allow), a dotted
24
+ * document preview path, the tabs no top-level prop sits in (components.tabs) and a nested field's tab (ui.tab { id }).
25
+ * corpus-fix items are V2 corpus defects, an
21
26
  * owner note for the demo repo: the sandbox renders them from the V2 schema, seeding skips them.
22
27
  *
23
- * Landed on origin/dev and mapped here, so they name no feature any more: prop-reference (73a120c50), validation-parity
28
+ * Landed on origin/dev and mapped here, so they name no feature any more: prop-reference (73a120c50), prop reference targets + filter (a4ce1ae95; shopify stays named), validation-parity
24
29
  * (dd021ceba), option-meta (ab15fe893), chrome-keys (98e48b9e3, 324580b2e), adapter:icons (the V2 icon vocabulary,
25
- * e126bf33d), localized-flag (279a10490). What those keys still cannot hold is a value the backend refuses, named
26
- * below as corpus-fix.
30
+ * e126bf33d), localized-flag (279a10490), table / polymorphic list nesting (B1/B2: a data table or a polymorphic list at
31
+ * any depth, in an object, a list's rows or an item type), slot nesting (C1/C2: a slot prop at any depth). What those
32
+ * keys still cannot hold is a value the backend refuses, named below as corpus-fix.
27
33
  */
28
- export type Backlog = "reference-targets" | "table" | "slot" | "block-model-fields" | "corpus-fix" | "dashboard:F12" | "wontfix:depth" | "wontfix:item-config";
34
+ export type Backlog = "reference-targets" | "table" | "slot" | "block-model-fields" | "corpus-fix" | "dashboard:F12" | "wontfix:depth" | "wontfix:nesting" | "wontfix:item-config" | "deferred:shopify";
29
35
  export declare const FEATURES: {
30
36
  readonly "type:table": {
31
37
  readonly backlog: "table";
@@ -33,11 +39,15 @@ export declare const FEATURES: {
33
39
  };
34
40
  readonly "type:slot": {
35
41
  readonly backlog: "slot";
36
- readonly reason: "Blocks inside a block have no field: modular needs separate block models and stores {__id,__type,data}. Stored as json.";
42
+ readonly reason: "Blocks inside a block on a content model: the backend's slot field (kind:'block' models by blockSlugs) is not mapped by this adapter yet, so it is stored as json. A component's top-level slot is a slot prop.";
37
43
  };
38
44
  readonly "type:polymorphic-array": {
39
45
  readonly backlog: "slot";
40
- readonly reason: "An array of several item types: a model stores it as modular (item types of object only), props have no modular. Stored as json.";
46
+ readonly reason: "An array of several item types: a model stores it as modular and a prop as a polymorphic list (table, config.mode \"types\"), both of object item types only. A list mixing scalar item types is stored as json.";
47
+ };
48
+ readonly "item chrome (types)": {
49
+ readonly backlog: "slot";
50
+ readonly reason: "A polymorphic list's item type is { name, label?, fields, icon?, preview? } (item_types_invalid): it keeps its dock icon and row preview, and no other chrome.";
41
51
  };
42
52
  readonly "type:primitive-array": {
43
53
  readonly backlog: "wontfix:item-config";
@@ -51,9 +61,13 @@ export declare const FEATURES: {
51
61
  readonly backlog: "corpus-fix";
52
62
  readonly reason: "The schema name is stored as a kebab-case slug, which does not read back as this name.";
53
63
  };
54
- readonly "group name>20": {
64
+ readonly "group name>40": {
65
+ readonly backlog: "corpus-fix";
66
+ readonly reason: "A tab name is at most 40 characters; truncated.";
67
+ };
68
+ readonly "group title": {
55
69
  readonly backlog: "corpus-fix";
56
- readonly reason: "A tab name is at most 20 characters; truncated.";
70
+ readonly reason: "A prop tab's label is the group title trimmed (1–20 characters): a blank title defines no tab, so the group is not stored and its props sit in the default tab; spaces around a title are not kept.";
57
71
  };
58
72
  readonly "group default": {
59
73
  readonly backlog: "corpus-fix";
@@ -65,7 +79,7 @@ export declare const FEATURES: {
65
79
  };
66
80
  readonly "group (nested)": {
67
81
  readonly backlog: "corpus-fix";
68
- readonly reason: "Only top-level fields can sit in a tab.";
82
+ readonly reason: "A nested field names its tab as ui.tab { id } only when the tab is stored: this group is not (named on the group itself).";
69
83
  };
70
84
  readonly "groups>3": {
71
85
  readonly backlog: "dashboard:F12";
@@ -75,9 +89,9 @@ export declare const FEATURES: {
75
89
  readonly backlog: "corpus-fix";
76
90
  readonly reason: "Two tabs share an id, or a stored name (the first 20 characters, trimmed, any case): the backend refuses that (tab_name, fieldset ids), so the later tab is not stored.";
77
91
  };
78
- readonly "group (props)": {
79
- readonly backlog: "dashboard:F12";
80
- readonly reason: "The dock shows no prop tabs today; the kit GroupTabs renders prop groups as tabs at the dock cutover.";
92
+ readonly "prop tab limit": {
93
+ readonly backlog: "corpus-fix";
94
+ readonly reason: "A component holds at most 8 tabs, each with an id of 1–40 characters (the backend's ui.tab rule): this group is not stored and its props sit in the default tab.";
81
95
  };
82
96
  readonly "fieldset spans groups": {
83
97
  readonly backlog: "corpus-fix";
@@ -99,6 +113,10 @@ export declare const FEATURES: {
99
113
  readonly backlog: "corpus-fix";
100
114
  readonly reason: "Two sibling fields share a name; prod keys are unique per level, so the later one is renamed.";
101
115
  };
116
+ readonly "reserved name": {
117
+ readonly backlog: "corpus-fix";
118
+ readonly reason: "A model field's key is not one a resolver would misread (KEY_RESERVED: derived, layout, page, or a leading _) and starts with a letter (KEY_FORMAT): this one is stored renamed.";
119
+ };
102
120
  readonly rows: {
103
121
  readonly backlog: "corpus-fix";
104
122
  readonly reason: "ui.rows is a whole number from 1 to 40, on a text or long text field only.";
@@ -116,8 +134,8 @@ export declare const FEATURES: {
116
134
  readonly reason: "This initial value holds what the prod value cannot keep (named under it): a crop preset with no image size, a datetime without seconds, a button icon outside the dock vocabulary…";
117
135
  };
118
136
  readonly slotSettings: {
119
- readonly backlog: "slot";
120
- readonly reason: "Per-child slot settings belong to the slot, which prod cannot hold.";
137
+ readonly backlog: "wontfix:nesting";
138
+ readonly reason: "A slot's per-child settings are at most 20 leaf fields (slot_settings_invalid): this setting is an object, a list, a table, a slot or a form, or past the 20th, or the field holding them is not a slot.";
121
139
  };
122
140
  readonly icon: {
123
141
  readonly backlog: "corpus-fix";
@@ -127,10 +145,6 @@ export declare const FEATURES: {
127
145
  readonly backlog: "corpus-fix";
128
146
  readonly reason: "This layout does not fit the field in prod: ui.control is dropdown / radio / grid on a select, cards on a select or multiselect, checkbox on a boolean or multiselect, switch on a boolean, segmented on a select of 2–4 options, slider on a number with min < max (≤ 1000 stops); a list of scalars or entries lays out as rows or a gallery.";
129
147
  };
130
- readonly "segmented>4": {
131
- readonly backlog: "corpus-fix";
132
- readonly reason: "Prod's segmented control holds 2–4 options (control_segmented): a segmented select with 5 or 6 is stored as radio, with more as dropdown (which V2 itself draws, since it does not fit).";
133
- };
134
148
  readonly "help>limit": {
135
149
  readonly backlog: "corpus-fix";
136
150
  readonly reason: "Help text is at most 500 characters on a field and 200 on a prop (a placeholder 120, a prop group description 200); truncated.";
@@ -145,7 +159,7 @@ export declare const FEATURES: {
145
159
  };
146
160
  readonly condition: {
147
161
  readonly backlog: "corpus-fix";
148
- readonly reason: "This condition has no prod showIf form: it names something that is not a sibling (the block's _variant is one only for a top-level prop: show_if_variant_field), or tests a value showIf cannot.";
162
+ readonly reason: "This condition has no prod showIf form: it names something that is not a sibling (the block's _variant is one only for a top-level prop: show_if_variant_field), names it by `scope` (prod resolves a rule at the nearest level that declares its field), or tests a value showIf cannot.";
149
163
  };
150
164
  readonly access: {
151
165
  readonly backlog: "corpus-fix";
@@ -155,13 +169,21 @@ export declare const FEATURES: {
155
169
  readonly backlog: "corpus-fix";
156
170
  readonly reason: "A field's time zone is true, false, \"site\" or an IANA zone name, on a date or datetime.";
157
171
  };
172
+ readonly "shopify reference": {
173
+ readonly backlog: "deferred:shopify";
174
+ readonly reason: "A prop reference to Shopify: no Shopify integration backs one (reference_target_unsupported), so a Shopify-only reference is locked text holding the product id (SHOPIFY_REF_LOCK) and a mixed one keeps its other targets. Owner 2026-10-11: deferred until the Shopify integration pipeline is built (allowed-deviations.json status deferred).";
175
+ };
158
176
  readonly "reference target": {
159
177
  readonly backlog: "reference-targets";
160
- readonly reason: "Prod references point at content models only (no page, form, shopify or collection targets); a reference prop with none of them is stored as json.";
178
+ readonly reason: "A prop reference keeps entry models (contentModelId / allowedModelSlugs) and page, form and collection (config.targets, backend a4ce1ae95); Shopify has no integration behind it (reference_target_unsupported), so a shopify target is dropped and a reference with only shopify is stored as json. A content-model field keeps entry models only.";
179
+ };
180
+ readonly "reference order": {
181
+ readonly backlog: "corpus-fix";
182
+ readonly reason: "Prod keeps a reference's entry models apart from its page / form / collection targets: the list reads back entry models first, then the targets.";
161
183
  };
162
184
  readonly "reference filter": {
163
185
  readonly backlog: "reference-targets";
164
- readonly reason: "Prod references have no filter.";
186
+ readonly reason: "A prop reference keeps its filter as config.filter (1–500 characters, no $parameters or ^ parent: reference_filter_invalid); a content-model field keeps none.";
165
187
  };
166
188
  readonly "numeric unit": {
167
189
  readonly backlog: "corpus-fix";
@@ -189,7 +211,7 @@ export declare const FEATURES: {
189
211
  };
190
212
  readonly "validation.items": {
191
213
  readonly backlog: "corpus-fix";
192
- readonly reason: "Item limits are whole numbers ≥ 0 on a list, min ≤ max: a tags max 1–500 and min 0–500, a prop's own list (table, array) at most 50 (SLOT_ITEMS_CAP).";
214
+ readonly reason: "Item limits are whole numbers ≥ 0 on a list, min ≤ max: a tags max 1–500 and min 0–500, a prop's own list (table, array) at most 500 (LIST_ITEMS_CAP), a slot's at most 50 (SLOT_ITEMS_CAP).";
193
215
  };
194
216
  readonly "validation.unique": {
195
217
  readonly backlog: "corpus-fix";
@@ -204,8 +226,8 @@ export declare const FEATURES: {
204
226
  readonly reason: "A list item's name is an identifier (a letter, then letters, digits or _; ≤ 64) and its title 1–60 characters (ui.itemName / ui.itemTitle); an object item keeps no other key.";
205
227
  };
206
228
  readonly "item settings": {
207
- readonly backlog: "wontfix:item-config";
208
- readonly reason: "A list of scalars stores its item type only (config.itemType): the item's own validation, description, localized flag or multi-line variant has no prod key (array_config_key_unknown).";
229
+ readonly backlog: "corpus-fix";
230
+ readonly reason: "A list of scalars keeps its item's description (1–200 characters), localized flag, required, a text or rich text item's length and a text item's pattern (config.item, array_item_settings_invalid): this setting is none of those, or out of their bounds (a multi-line text item reads back single-line).";
209
231
  };
210
232
  readonly itemNoun: {
211
233
  readonly backlog: "corpus-fix";
@@ -217,7 +239,7 @@ export declare const FEATURES: {
217
239
  };
218
240
  readonly "item icon": {
219
241
  readonly backlog: "corpus-fix";
220
- readonly reason: "Prod keeps one icon per list (ui.icon, a dock name): the list has its own icon, or this name is not a dock icon.";
242
+ readonly reason: "Prod keeps one icon per list (ui.icon, a dock name) and one per polymorphic item type: the list has its own icon, or this name is not a dock icon.";
221
243
  };
222
244
  readonly "preview icon": {
223
245
  readonly backlog: "corpus-fix";
@@ -225,11 +247,11 @@ export declare const FEATURES: {
225
247
  };
226
248
  readonly "preview path": {
227
249
  readonly backlog: "corpus-fix";
228
- readonly reason: "A row preview names a child key, or a dotted path whose later segments are children or keys of an image, video, link, button, file, location, json, code or reference value (preview_path_unknown).";
250
+ readonly reason: "A row preview names a child key, or a dotted path whose later segments are children or keys of an image, video, link, button, file, location, json, code or reference value, or a data table's caption or notes (preview_path_unknown).";
229
251
  };
230
252
  readonly openMode: {
231
253
  readonly backlog: "corpus-fix";
232
- readonly reason: "openMode is for object, array and table fields only.";
254
+ readonly reason: "openMode is for object, array, table and code fields only (openMode_leaf).";
233
255
  };
234
256
  readonly "unsupported key": {
235
257
  readonly backlog: "corpus-fix";
@@ -247,9 +269,10 @@ export interface CatalogItem {
247
269
  reason: string;
248
270
  }
249
271
  export declare const CATALOG: {
250
- readonly "block icon": "The block picker's icon belongs to the catalog entry; models and components carry none.";
272
+ readonly "block icon": "The block picker's icon belongs to the catalog entry; a model carries none (a component stores it as component.icon, a dock icon, so only one with no dock name for it lands here).";
251
273
  readonly category: "The block picker's category is catalog metadata. A component takes the nearest prod category (CATEGORY_TO_PROD) when there is one; a model has none.";
252
- readonly "document preview": "The document-level preview is catalog metadata; models and components carry none.";
274
+ readonly "document preview": "The document-level preview (how a row of this type reads in a parent's list) has no place on a model; a component stores it as component.preview.";
275
+ readonly "document preview path": "component.preview names a top-level prop key or a dotted path into one (`slides.0.heading`, componentPreviewRefusals); a key no prop has, or a path through a renamed value key (`image.alt`), is not stored (preview_key_unknown), so the slot row reads the child's first text instead.";
253
276
  readonly "kind:block (fields)": "A section's fields are stored as a model (kind model): which host places it is set at seeding.";
254
277
  readonly "kind:global": "A global (synced) block is a host-level placement; its fields are stored as a model or a component.";
255
278
  readonly "kind:page": "A page schema is stored as a model; the host makes it a page.";
@@ -259,9 +282,45 @@ export declare const CATALOG: {
259
282
  readonly ai: "The AI-assist sparkle is a host setting, not stored on the field.";
260
283
  readonly "item openMode": "Prod keeps one openMode per list, the array's own; the V2 engine reads only that one too (lib/schema.ts itemOpenMode ignores the item's), so the item's changes nothing the dock shows.";
261
284
  readonly "itemNoun (derived)": "A list with no itemNoun whose item title is not the field title's singular: ui.itemLabel keeps the item title, and the read side names the noun from it, which is the noun the V2 engine already falls back to (lib/schema.ts itemNoun).";
285
+ readonly "fieldset (derived)": "A field names a fieldset the schema does not declare: the V2 engine draws it as a section titled by its name (engine/field-list.tsx arrange), so it is stored as that prop group and the read side declares it. Not a loss.";
262
286
  readonly "prop target": "A V2 prop has no binding path, so fromTypeSchema('props') returns none: seeding binds each prop to its target. Not a loss.";
263
287
  readonly "block placement": "Where a block fits (inline / section / page) is the host's: the block picker and a body's Insert menu place it; a model or component carries none.";
264
- readonly "seeded instance": "A starting value the host writes into a new instance when it seeds or places one: a schema-level initialValue, or a reference prop's default (a definition holds none: reference_in_definition).";
288
+ readonly "slot allow": "A slot keeps its V2 allow list as config.allow (1–50 block names of 1–64 characters, no repeats: slot_allow_invalid), which the dock resolves to the project's components; this list breaks those bounds, so the slot takes any component.";
289
+ readonly "segmented fallback": "A segmented select of 5+ options: V2 draws the dropdown (D46, choice.tsx fitsSegmented) and prod stores the select with no control (control_segmented holds 2–4), which the dock draws as the same dropdown. Nothing drawn differs.";
290
+ readonly "seeded instance": "A starting value the host writes into a new instance when it seeds or places one: a schema-level initialValue, a reference prop's default (a definition holds none: reference_in_definition), or a slot's children (they name V2 block types, which become component instances at seeding).";
265
291
  readonly "not applicable (props)": "unique on a scalar prop, or on a sub-field outside a table: each placement holds its own value, so there is nothing to be unique across (unique_prop_scope). The instance is the whole document.";
292
+ readonly "host config": "A prod-only prop config key the host reads, not the V2 schema: a rich text's Accept list, its one-paragraph flags (allowMultipleParagraphs, the older inline), allowTargetBlank and component allowlist (the dock's rich-text codec and insert menu read them from the stored prop: dock-v2 richTextCodec configAt, kitServices insertableComponents), a section label, and the import's write-back metadata no editor reads (SERVER_CONFIG_KEYS). Read back, it names no loss: the kit never writes a definition, so the config rides untouched.";
266
293
  };
267
294
  export type CatalogFeature = keyof typeof CATALOG;
295
+ /**
296
+ * Keys the import (BE derive-schema.ts, register-editable-pages.ts, template-copy.ts) writes onto a field for the
297
+ * SERVER: how publish writes a value back into the site's own HTML (`attr`, `numeric`, `iconFont`, `htmlClasses`,
298
+ * `units`, `lead`), which band a field belongs to (`band`, `family`, `shape`), and import markers (`seeded`, `shared`,
299
+ * `sharedValue`). No form reads them, so no form loses anything by leaving them alone, and no agent may write them: the
300
+ * backend MCP drops them from what an agent sends, and its contract test fails on any key the import writes that is
301
+ * neither here, a host key, nor read by the kit (kit-catalog.json `fieldConfig`).
302
+ */
303
+ export declare const SERVER_CONFIG_KEYS: ReadonlySet<string>;
304
+ /** The prop config keys CATALOG "host config" covers: any type's, then a rich text's (richtext, document) own. */
305
+ export declare const HOST_CONFIG_KEYS: {
306
+ any: ReadonlySet<string>;
307
+ richtext: ReadonlySet<string>;
308
+ };
309
+ export declare const isHostConfigKey: (type: string, key: string) => boolean;
310
+ /**
311
+ * The prod config keys the kit adapter READS, per prod field type (`*` = every type): what an agent may write on a
312
+ * field and still edit it in the kit. Exported to the backend with the host and server keys (kit-catalog.json
313
+ * `fieldConfig`), where the MCP warns on any other key and its contract test checks what the import writes.
314
+ * field-config-contract.test.ts proves each entry against `toTypeSchema`, so this list cannot claim a key the
315
+ * adapter drops; a key missing here only costs a warning.
316
+ */
317
+ export declare const KIT_READ_CONFIG_KEYS: Readonly<Record<string, readonly string[]>>;
318
+ /** The field-config contract the backend reads (kit-catalog.json `fieldConfig`). */
319
+ export declare const fieldConfigContract: () => {
320
+ read: Readonly<Record<string, readonly string[]>>;
321
+ host: {
322
+ any: string[];
323
+ richtext: string[];
324
+ };
325
+ server: string[];
326
+ };