@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
@@ -1,22 +1,21 @@
1
1
  import { cn } from "../lib/cn.js";
2
+ import { AI_PRESETS, FieldHeaderSlot, KitSectionTitle, seesDevSurfaces, useForm, useKitEnv, useKitServices } from "../context.js";
2
3
  import { pathKey, same } from "../lib/path.js";
3
- import { AI_PRESETS, FieldHeaderSlot, seesDevSurfaces, useForm, useKitEnv, useKitServices } from "../context.js";
4
4
  import { Button, Sparkle } from "../ui/button.js";
5
5
  import { Menu, MenuContent, MenuItem, MenuSeparator, MenuTrigger, Popover, PopoverAnchor, PopoverContent, Tooltip } from "../ui/overlay.js";
6
6
  import { isTextual, plainText } from "../lib/schema.js";
7
7
  import { RowChrome } from "./bits.js";
8
8
  import { Avatar, avatarRingSpread } from "../ui/display.js";
9
- import { HelpMore } from "../ui/input.js";
10
9
  import { presenceColor } from "../ui/presence.js";
11
10
  import { HISTORY_SEGMENT } from "../schema/types.js";
12
11
  import { resolveHelp } from "../schema/help.js";
13
12
  import { textLength } from "../lib/validate.js";
14
13
  import * as React from "react";
15
- import { IconAlertCircle, IconAlertTriangle, IconArrowBackUp, IconBraces, IconClipboard, IconCopy, IconDots, IconHistory, IconMessage, IconMessagePlus, IconRefresh, IconRotate, IconWorld } from "@tabler/icons-react";
16
14
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
15
+ import { IconAlertCircle, IconAlertTriangle, IconArrowBackUp, IconBraces, IconClipboard, IconCopy, IconDots, IconHistory, IconInfoCircle, IconLock, IconMessage, IconMessagePlus, IconRefresh, IconRotate, IconWorld } from "@tabler/icons-react";
17
16
  import { AnimatePresence, motion } from "framer-motion";
18
17
  import { createPortal } from "react-dom";
19
- //#region src/kit/engine/field-shell.tsx
18
+ //#region src/engine/field-shell.tsx
20
19
  /**
21
20
  * FIELD SHELL — the one field chrome (V2 HEAD 9829bf1 kit/engine/field-shell.tsx; production FieldShell + CPO D8).
22
21
  *
@@ -99,13 +98,19 @@ function FieldShell({ field, path, id, value, onChange, readOnly, issue, action,
99
98
  const peers = env.presence[key] ?? [];
100
99
  const editor = peers.find((p) => p.status !== "viewing");
101
100
  const InPlaceComments = services.FieldComments;
102
- const canComment = !noComments && (!!env.onComment || !!InPlaceComments);
101
+ const quiet = env.fieldChrome === "quiet";
102
+ const bare = quiet || env.fieldChrome === "preview";
103
+ const canComment = !noComments && !bare && (!!env.onComment || !!InPlaceComments);
103
104
  const openCount = env.comments[key] ?? 0;
104
105
  const useStoreCount = env.onComment ? void 0 : services.useFieldCommentCount;
105
106
  const changed = !!form?.hasPublished && !same(value, form.publishedAt(path));
106
107
  const inh = form?.inherited && path.length === 1 ? form.inherited : void 0;
107
108
  const overridden = !!inh && inh.isOverridden(key);
108
- const canUndo = !!form?.canUndo(key) && !readOnly;
109
+ const reviewing = !!env.review;
110
+ const bar = env.review && env.review.count(path) > 0 ? env.review.bar(path, field) : null;
111
+ const sectionTitle = React.useContext(KitSectionTitle);
112
+ const repeatsSection = quiet && layout === "stack" && !!sectionTitle && sectionTitle.trim().toLowerCase() === field.title.trim().toLowerCase();
113
+ const canUndo = !bare && !!form?.canUndo(key) && !readOnly;
109
114
  const synced = field.synced?.from;
110
115
  const limit = field.validation?.max ?? field.validation?.recommendedMax;
111
116
  const len = textLength(value);
@@ -120,11 +125,24 @@ function FieldShell({ field, path, id, value, onChange, readOnly, issue, action,
120
125
  ]
121
126
  }) : null;
122
127
  const dense = env.helpDisplay === "tooltip";
123
- const help = resolveHelp(field);
128
+ const lockedHere = !!readOnly && !!field.access?.edit && !env.readOnly && !env.can(field.access.edit);
129
+ const help = lockedHere ? (field.lockReason?.trim() || "Set by developers").replace(/\.?$/, ".") : resolveHelp(field);
130
+ const helpNode = lockedHere ? /* @__PURE__ */ jsxs("span", {
131
+ "data-locked": "",
132
+ className: "inline-flex items-start gap-1",
133
+ children: [/* @__PURE__ */ jsx(IconLock, {
134
+ className: "mt-px size-3 shrink-0",
135
+ stroke: 1.75,
136
+ "aria-hidden": true
137
+ }), /* @__PURE__ */ jsxs("span", { children: [/* @__PURE__ */ jsx("span", {
138
+ className: "sr-only",
139
+ children: "Locked. "
140
+ }), help] })]
141
+ }) : help;
124
142
  const more = field.helpMore || void 0;
125
143
  const erroring = issue?.level === "error";
126
- const helpInline = !!help && !dense && !erroring;
127
- const tip = dense ? [help, more].filter(Boolean).join(" ") : more;
144
+ const helpInline = !!help && (!dense || lockedHere) && !erroring;
145
+ const tip = dense && !lockedHere ? [help, more].filter(Boolean).join(" ") : more;
128
146
  const helpId = `${id}-help`;
129
147
  const moreId = `${id}-more`;
130
148
  const msgId = `${id}-msg`;
@@ -140,10 +158,25 @@ function FieldShell({ field, path, id, value, onChange, readOnly, issue, action,
140
158
  if (next) el.setAttribute("aria-describedby", next);
141
159
  else el.removeAttribute("aria-describedby");
142
160
  }, [id, describedBy]);
143
- const info = tip ? /* @__PURE__ */ jsx(HelpMore, {
144
- id: moreId,
145
- label: field.title,
146
- children: tip
161
+ const info = tip ? /* @__PURE__ */ jsx(Tooltip, {
162
+ content: /* @__PURE__ */ jsx("span", {
163
+ className: "block max-w-[260px] whitespace-normal font-normal leading-4",
164
+ children: tip
165
+ }),
166
+ children: /* @__PURE__ */ jsxs("button", {
167
+ type: "button",
168
+ "aria-label": `About ${field.title}`,
169
+ className: "-my-0.5 inline-flex size-4 shrink-0 items-center justify-center rounded-kit-sm text-kit-fg-4 hover:text-kit-fg-2",
170
+ children: [/* @__PURE__ */ jsx(IconInfoCircle, {
171
+ className: "size-3.5",
172
+ stroke: 1.5,
173
+ "aria-hidden": true
174
+ }), /* @__PURE__ */ jsx("span", {
175
+ id: moreId,
176
+ className: "sr-only",
177
+ children: tip
178
+ })]
179
+ })
147
180
  }) : null;
148
181
  const label = /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("span", {
149
182
  className: "truncate",
@@ -158,14 +191,14 @@ function FieldShell({ field, path, id, value, onChange, readOnly, issue, action,
158
191
  })] }) : null] });
159
192
  const badges = /* @__PURE__ */ jsxs(Fragment, { children: [
160
193
  overridden ? /* @__PURE__ */ jsx(Tooltip, {
161
- content: `Overrides ${inh.from}. Changes to the component no longer reach this field.`,
194
+ content: `Overrides ${inh.from}. Changes to the block no longer reach this field.`,
162
195
  children: /* @__PURE__ */ jsx("span", {
163
196
  role: "img",
164
197
  className: "size-1.5 shrink-0 rounded-full bg-kit-accent",
165
198
  "aria-label": `Overrides ${inh.from}`
166
199
  })
167
200
  }) : null,
168
- changed ? /* @__PURE__ */ jsx(Tooltip, {
201
+ changed && !reviewing ? /* @__PURE__ */ jsx(Tooltip, {
169
202
  content: "Changed since publish",
170
203
  children: /* @__PURE__ */ jsx("span", {
171
204
  role: "img",
@@ -185,7 +218,7 @@ function FieldShell({ field, path, id, value, onChange, readOnly, issue, action,
185
218
  })
186
219
  }) : null,
187
220
  field.localized ? /* @__PURE__ */ jsx(Tooltip, {
188
- content: "Translatable · English (default). Spanish and French are missing.",
221
+ content: "Translatable: this field can hold a value for each of the site's languages.",
189
222
  children: /* @__PURE__ */ jsxs("span", {
190
223
  className: "inline-flex h-4 shrink-0 items-center gap-0.5 rounded-kit-md bg-kit-muted px-1 text-kit-2xs font-medium text-kit-fg-3",
191
224
  children: [/* @__PURE__ */ jsx(IconWorld, {
@@ -238,7 +271,7 @@ function FieldShell({ field, path, id, value, onChange, readOnly, issue, action,
238
271
  }
239
272
  }) : null,
240
273
  /* @__PURE__ */ jsx(PeerStack, { peers }),
241
- /* @__PURE__ */ jsx(FieldMenu, {
274
+ bare ? null : /* @__PURE__ */ jsx(FieldMenu, {
242
275
  field,
243
276
  path,
244
277
  value,
@@ -277,7 +310,15 @@ function FieldShell({ field, path, id, value, onChange, readOnly, issue, action,
277
310
  className: "mt-px size-3.5 shrink-0",
278
311
  stroke: 1.5,
279
312
  "aria-hidden": true
280
- }), issue.message]
313
+ }), /* @__PURE__ */ jsxs("span", {
314
+ className: "min-w-0",
315
+ children: [issue.message, issue.fix && !readOnly ? /* @__PURE__ */ jsxs(Fragment, { children: [" ", /* @__PURE__ */ jsx("button", {
316
+ type: "button",
317
+ onClick: issue.fix.apply,
318
+ className: "font-medium text-kit-fg underline-offset-2 hover:underline",
319
+ children: issue.fix.label
320
+ })] }) : null]
321
+ })]
281
322
  }, issue.message) : /* @__PURE__ */ jsx("span", {})
282
323
  }), meta ? /* @__PURE__ */ jsx("span", {
283
324
  className: "flex shrink-0 items-center gap-2",
@@ -291,6 +332,162 @@ function FieldShell({ field, path, id, value, onChange, readOnly, issue, action,
291
332
  title: field.title.length > 28 ? field.title : void 0,
292
333
  children: label
293
334
  });
335
+ const body = layout === "row" ? /* @__PURE__ */ jsxs("div", {
336
+ className: cn("group/field relative flex min-w-0 flex-col gap-1.5", className),
337
+ "data-field-key": key,
338
+ "data-field": path.length === 1 ? key : void 0,
339
+ "data-slot": "kit-field",
340
+ children: [
341
+ bar,
342
+ /* @__PURE__ */ jsx(RowChrome.Provider, {
343
+ value: /* @__PURE__ */ jsxs(Fragment, { children: [
344
+ info,
345
+ badges,
346
+ accessories
347
+ ] }),
348
+ children: control
349
+ }),
350
+ message
351
+ ]
352
+ }) : layout === "card" && quiet ? /* @__PURE__ */ jsxs("div", {
353
+ className: cn("group/field relative flex flex-col gap-1", className),
354
+ "data-field-key": key,
355
+ "data-field": path.length === 1 ? key : void 0,
356
+ "data-slot": "kit-field",
357
+ children: [
358
+ bar,
359
+ /* @__PURE__ */ jsxs("div", {
360
+ "data-field-head": "",
361
+ className: "flex min-h-8 items-center gap-3",
362
+ children: [
363
+ /* @__PURE__ */ jsxs("label", {
364
+ htmlFor: id,
365
+ id: `${id}-label`,
366
+ className: "min-w-0 flex-1 cursor-pointer",
367
+ children: [/* @__PURE__ */ jsxs("span", {
368
+ className: "flex min-w-0 items-center gap-1 text-kit-sm font-medium text-kit-fg-2 transition-colors group-focus-within/field:text-kit-fg",
369
+ children: [
370
+ label,
371
+ info,
372
+ badges
373
+ ]
374
+ }), helpInline ? /* @__PURE__ */ jsx("span", {
375
+ id: helpId,
376
+ "data-slot": "field-help",
377
+ className: "mt-0.5 block text-kit-xs leading-4 text-kit-fg-3",
378
+ children: helpNode
379
+ }) : null]
380
+ }),
381
+ /* @__PURE__ */ jsx("span", {
382
+ className: "flex shrink-0 items-center gap-0.5 empty:hidden",
383
+ children: accessories
384
+ }),
385
+ /* @__PURE__ */ jsx("span", {
386
+ className: "flex shrink-0 items-center",
387
+ children: readOnly ? /* @__PURE__ */ jsx("span", {
388
+ className: "text-kit-sm text-kit-fg-2",
389
+ children: value ? "On" : "Off"
390
+ }) : control
391
+ })
392
+ ]
393
+ }),
394
+ message
395
+ ]
396
+ }) : layout === "card" ? /* @__PURE__ */ jsxs("div", {
397
+ className: cn("group/field relative flex flex-col gap-1.5", className),
398
+ "data-field-key": key,
399
+ "data-field": path.length === 1 ? key : void 0,
400
+ "data-slot": "kit-field",
401
+ children: [
402
+ bar,
403
+ /* @__PURE__ */ jsxs("div", {
404
+ "data-field-head": "",
405
+ className: cn("flex items-center gap-3 rounded-kit-lg border bg-kit-surface px-3 py-2.5 transition-colors", issue?.level === "error" ? "border-[var(--kit-field-invalid)]" : "border-kit-line hover:border-kit-line-strong"),
406
+ children: [
407
+ control,
408
+ /* @__PURE__ */ jsxs("label", {
409
+ htmlFor: id,
410
+ id: `${id}-label`,
411
+ className: "min-w-0 flex-1 cursor-pointer",
412
+ children: [/* @__PURE__ */ jsxs("span", {
413
+ className: "flex min-w-0 items-center gap-1.5 text-kit-sm font-medium text-kit-fg",
414
+ children: [
415
+ label,
416
+ info,
417
+ badges
418
+ ]
419
+ }), helpInline ? /* @__PURE__ */ jsx("span", {
420
+ id: helpId,
421
+ "data-slot": "field-help",
422
+ className: "block text-kit-xs leading-4 text-kit-fg-3",
423
+ children: helpNode
424
+ }) : null]
425
+ }),
426
+ /* @__PURE__ */ jsx("span", {
427
+ className: "shrink-0 text-kit-xs text-kit-fg-3",
428
+ children: value ? "On" : "Off"
429
+ }),
430
+ /* @__PURE__ */ jsx("span", {
431
+ className: "flex shrink-0 items-center gap-0.5 empty:hidden",
432
+ children: accessories
433
+ })
434
+ ]
435
+ }),
436
+ message
437
+ ]
438
+ }) : /* @__PURE__ */ jsxs("div", {
439
+ className: cn("group/field relative flex min-w-0 flex-col gap-1.5", className),
440
+ "data-field-key": key,
441
+ "data-field": path.length === 1 ? key : void 0,
442
+ "data-slot": "kit-field",
443
+ "data-inherited": inh && !overridden ? "" : void 0,
444
+ "data-overridden": overridden ? "" : void 0,
445
+ children: [
446
+ bar,
447
+ repeatsSection ? /* @__PURE__ */ jsx("label", {
448
+ htmlFor: id,
449
+ id: `${id}-label`,
450
+ className: "sr-only",
451
+ children: label
452
+ }) : lifted ? /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("label", {
453
+ htmlFor: id,
454
+ id: `${id}-label`,
455
+ className: "sr-only",
456
+ children: label
457
+ }), createPortal(/* @__PURE__ */ jsxs("span", {
458
+ className: "flex items-center gap-0.5 [&>button]:!inline-flex",
459
+ children: [
460
+ info,
461
+ badges,
462
+ counter,
463
+ accessories
464
+ ]
465
+ }), lifted)] }) : /* @__PURE__ */ jsxs("div", {
466
+ "data-slot": "field-label-row",
467
+ "data-field-head": "",
468
+ className: "flex min-h-5 min-w-0 items-center gap-1.5",
469
+ children: [
470
+ labelEl,
471
+ info,
472
+ badges,
473
+ /* @__PURE__ */ jsx("span", { className: "flex-1" }),
474
+ counter,
475
+ /* @__PURE__ */ jsx("span", {
476
+ className: "flex shrink-0 items-center gap-0.5",
477
+ children: accessories
478
+ })
479
+ ]
480
+ }),
481
+ helpInline ? /* @__PURE__ */ jsx("p", {
482
+ id: helpId,
483
+ "data-slot": "field-help",
484
+ className: "-mt-0.5 text-kit-xs leading-4 text-kit-fg-3",
485
+ children: helpNode
486
+ }) : null,
487
+ control,
488
+ message
489
+ ]
490
+ });
294
491
  return /* @__PURE__ */ jsxs(Popover, {
295
492
  open: ai,
296
493
  onOpenChange: setAi,
@@ -304,102 +501,7 @@ function FieldShell({ field, path, id, value, onChange, readOnly, issue, action,
304
501
  },
305
502
  children: [/* @__PURE__ */ jsx(PopoverAnchor, {
306
503
  className: "min-w-0",
307
- children: layout === "row" ? /* @__PURE__ */ jsxs("div", {
308
- className: cn("group/field flex min-w-0 flex-col gap-1.5", className),
309
- "data-field-key": key,
310
- "data-field": path.length === 1 ? key : void 0,
311
- "data-slot": "kit-field",
312
- children: [/* @__PURE__ */ jsx(RowChrome.Provider, {
313
- value: /* @__PURE__ */ jsxs(Fragment, { children: [
314
- info,
315
- badges,
316
- accessories
317
- ] }),
318
- children: control
319
- }), message]
320
- }) : layout === "card" ? /* @__PURE__ */ jsxs("div", {
321
- className: cn("group/field flex flex-col gap-1.5", className),
322
- "data-field-key": key,
323
- "data-field": path.length === 1 ? key : void 0,
324
- "data-slot": "kit-field",
325
- children: [/* @__PURE__ */ jsxs("div", {
326
- className: cn("flex items-center gap-3 rounded-kit-lg border bg-kit-surface px-3 py-2.5 transition-colors", issue?.level === "error" ? "border-[var(--kit-field-invalid)]" : "border-kit-line hover:border-kit-line-strong"),
327
- children: [
328
- control,
329
- /* @__PURE__ */ jsxs("label", {
330
- htmlFor: id,
331
- id: `${id}-label`,
332
- className: "min-w-0 flex-1 cursor-pointer",
333
- children: [/* @__PURE__ */ jsxs("span", {
334
- className: "flex min-w-0 items-center gap-1.5 text-kit-sm font-medium text-kit-fg",
335
- children: [
336
- label,
337
- info,
338
- badges
339
- ]
340
- }), helpInline ? /* @__PURE__ */ jsx("span", {
341
- id: helpId,
342
- "data-slot": "field-help",
343
- className: "block text-kit-xs leading-4 text-kit-fg-3",
344
- children: help
345
- }) : null]
346
- }),
347
- /* @__PURE__ */ jsx("span", {
348
- className: "shrink-0 text-kit-xs text-kit-fg-3",
349
- children: value ? "On" : "Off"
350
- }),
351
- /* @__PURE__ */ jsx("span", {
352
- className: "flex shrink-0 items-center gap-0.5 empty:hidden",
353
- children: accessories
354
- })
355
- ]
356
- }), message]
357
- }) : /* @__PURE__ */ jsxs("div", {
358
- className: cn("group/field flex min-w-0 flex-col gap-1.5", className),
359
- "data-field-key": key,
360
- "data-field": path.length === 1 ? key : void 0,
361
- "data-slot": "kit-field",
362
- "data-inherited": inh && !overridden ? "" : void 0,
363
- "data-overridden": overridden ? "" : void 0,
364
- children: [
365
- lifted ? /* @__PURE__ */ jsxs(Fragment, { children: [/* @__PURE__ */ jsx("label", {
366
- htmlFor: id,
367
- id: `${id}-label`,
368
- className: "sr-only",
369
- children: label
370
- }), createPortal(/* @__PURE__ */ jsxs("span", {
371
- className: "flex items-center gap-0.5 [&>button]:!inline-flex",
372
- children: [
373
- info,
374
- badges,
375
- counter,
376
- accessories
377
- ]
378
- }), lifted)] }) : /* @__PURE__ */ jsxs("div", {
379
- "data-slot": "field-label-row",
380
- className: "flex min-h-5 min-w-0 items-center gap-1.5",
381
- children: [
382
- labelEl,
383
- info,
384
- badges,
385
- /* @__PURE__ */ jsx("span", { className: "flex-1" }),
386
- counter,
387
- /* @__PURE__ */ jsx("span", {
388
- className: "flex shrink-0 items-center gap-0.5",
389
- children: accessories
390
- })
391
- ]
392
- }),
393
- helpInline ? /* @__PURE__ */ jsx("p", {
394
- id: helpId,
395
- "data-slot": "field-help",
396
- className: "-mt-0.5 text-kit-xs leading-4 text-kit-fg-3",
397
- children: help
398
- }) : null,
399
- control,
400
- message
401
- ]
402
- })
504
+ children: body
403
505
  }), commentsOpen && InPlaceComments ? /* @__PURE__ */ jsx(PopoverContent, {
404
506
  align: "start",
405
507
  sideOffset: 8,
@@ -471,10 +573,10 @@ function CountedCommentButton({ count, label, open, onOpen }) {
471
573
  onClick: (e) => onOpen(e.currentTarget),
472
574
  "data-state": open ? "open" : "closed",
473
575
  "aria-label": `${count} open comments on ${label}`,
474
- className: "inline-flex h-5 items-center gap-1 rounded-full bg-[var(--kit-chip-ink-bg)] px-1.5 text-kit-2xs font-medium text-[var(--kit-chip-ink-fg)] hover:opacity-90",
576
+ className: "-my-0.5 inline-flex h-5 items-center gap-0.5 rounded-kit-md px-1 text-kit-2xs font-medium text-kit-fg-3 hover:bg-kit-hover hover:text-kit-fg data-[state=open]:bg-kit-hover data-[state=open]:text-kit-fg",
475
577
  children: [/* @__PURE__ */ jsx(IconMessage, {
476
- className: "size-3",
477
- stroke: 2,
578
+ className: "size-3.5",
579
+ stroke: 1.5,
478
580
  "aria-hidden": true
479
581
  }), /* @__PURE__ */ jsx("span", {
480
582
  className: "tabular-nums",
@@ -567,7 +669,7 @@ function PeerStack({ peers, size = 16 }) {
567
669
  function FieldMenu({ field, path, value, onChange, readOnly, changed, onAi }) {
568
670
  const form = useForm();
569
671
  const env = useKitEnv();
570
- const { toast, aiRewrite, richText } = useKitServices();
672
+ const { toast, aiRewrite, richText, FieldMenuExtras } = useKitServices();
571
673
  const key = pathKey(path);
572
674
  const api = apiName(form?.schema.name ?? "doc", path);
573
675
  const textual = isTextual(field.type);
@@ -631,6 +733,11 @@ function FieldMenu({ field, path, value, onChange, readOnly, changed, onAi }) {
631
733
  onClick: () => form.navigate([...path, HISTORY_SEGMENT]),
632
734
  children: "History"
633
735
  }) : null,
736
+ FieldMenuExtras ? /* @__PURE__ */ jsx(FieldMenuExtras, {
737
+ field,
738
+ path,
739
+ readOnly
740
+ }) : null,
634
741
  editable && prose && aiRewrite ? /* @__PURE__ */ jsxs(Fragment, { children: [
635
742
  /* @__PURE__ */ jsx(MenuSeparator, {}),
636
743
  form?.aiKeys.has(key) ? /* @__PURE__ */ jsx(MenuItem, {
@@ -839,9 +946,23 @@ function Shimmer({ children }) {
839
946
  children
840
947
  });
841
948
  }
949
+ /**
950
+ * Reduced motion as the app reads it: the OS query or the in-app preference (which stamps `data-reduce-motion` on
951
+ * <html>; the kit cannot import the app's hook). Read per render, so a toggle applies to the next answer.
952
+ */
953
+ function motionReduced() {
954
+ if (typeof window === "undefined") return false;
955
+ return document.documentElement.hasAttribute("data-reduce-motion") || !!window.matchMedia?.("(prefers-reduced-motion: reduce)").matches;
956
+ }
957
+ /** Reduced: the whole answer at once, with no caret (canvas revamp V701, lib/motion TypeOut semantics). */
842
958
  function TypeOut({ text, speed = 14 }) {
843
- const [n, setN] = React.useState(0);
959
+ const reduce = motionReduced();
960
+ const [n, setN] = React.useState(reduce ? text.length : 0);
844
961
  React.useEffect(() => {
962
+ if (reduce) {
963
+ setN(text.length);
964
+ return;
965
+ }
845
966
  setN(0);
846
967
  const id = setInterval(() => {
847
968
  setN((x) => {
@@ -851,8 +972,15 @@ function TypeOut({ text, speed = 14 }) {
851
972
  });
852
973
  }, speed);
853
974
  return () => clearInterval(id);
854
- }, [text, speed]);
855
- return /* @__PURE__ */ jsxs("span", { children: [text.slice(0, n), n < text.length ? /* @__PURE__ */ jsx("span", { className: "ml-0.5 inline-block h-[1em] w-[2px] translate-y-[2px] animate-pulse bg-kit-fg" }) : null] });
975
+ }, [
976
+ text,
977
+ speed,
978
+ reduce
979
+ ]);
980
+ return /* @__PURE__ */ jsxs("span", { children: [text.slice(0, n), n < text.length ? /* @__PURE__ */ jsx("span", {
981
+ "data-typeout-caret": true,
982
+ className: "ml-0.5 inline-block h-[1em] w-[2px] translate-y-[2px] bg-kit-fg motion-safe:animate-pulse"
983
+ }) : null] });
856
984
  }
857
985
  //#endregion
858
986
  export { FieldShell, LABEL_HINT_AT, PeerStack, apiName, resetFieldClipboard };