@bettercms-ai/kit 1.0.0 → 2.0.0-next.1

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 (619) 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 +94 -31
  8. package/dist/adapters/lossy.js +419 -0
  9. package/dist/adapters/lossy.js.map +1 -0
  10. package/{adapters → dist/adapters}/prod-types.d.ts +91 -26
  11. package/{adapters → dist/adapters}/prod-types.js +82 -13
  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 +1038 -204
  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} +131 -2
  22. package/{context.js → dist/context.js} +44 -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 +116 -200
  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 +59 -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 +21 -4
  77. package/{controls → dist/controls}/media.js +407 -130
  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/article-shell.d.ts +145 -0
  89. package/dist/controls/rich-text/article-shell.js +510 -0
  90. package/dist/controls/rich-text/article-shell.js.map +1 -0
  91. package/dist/controls/rich-text/author.d.ts +25 -0
  92. package/dist/controls/rich-text/author.js +104 -0
  93. package/dist/controls/rich-text/author.js.map +1 -0
  94. package/dist/controls/rich-text/blocks.d.ts +60 -0
  95. package/{controls → dist/controls}/rich-text/blocks.js +164 -389
  96. package/dist/controls/rich-text/blocks.js.map +1 -0
  97. package/dist/controls/rich-text/button.d.ts +23 -0
  98. package/dist/controls/rich-text/button.js +85 -0
  99. package/dist/controls/rich-text/button.js.map +1 -0
  100. package/{controls → dist/controls}/rich-text/catalog.d.ts +7 -4
  101. package/{controls → dist/controls}/rich-text/catalog.js +94 -68
  102. package/dist/controls/rich-text/catalog.js.map +1 -0
  103. package/dist/controls/rich-text/checklist.d.ts +24 -0
  104. package/dist/controls/rich-text/checklist.js +115 -0
  105. package/dist/controls/rich-text/checklist.js.map +1 -0
  106. package/{controls → dist/controls}/rich-text/codec.d.ts +9 -1
  107. package/{controls → dist/controls}/rich-text/codec.js +7 -2
  108. package/dist/controls/rich-text/codec.js.map +1 -0
  109. package/dist/controls/rich-text/columns.d.ts +41 -0
  110. package/dist/controls/rich-text/columns.js +181 -0
  111. package/dist/controls/rich-text/columns.js.map +1 -0
  112. package/{controls → dist/controls}/rich-text/component-card.d.ts +1 -1
  113. package/{controls → dist/controls}/rich-text/component-card.js +417 -99
  114. package/dist/controls/rich-text/component-card.js.map +1 -0
  115. package/dist/controls/rich-text/component-panel.d.ts +47 -0
  116. package/dist/controls/rich-text/component-panel.js +141 -0
  117. package/dist/controls/rich-text/component-panel.js.map +1 -0
  118. package/{controls → dist/controls}/rich-text/control.d.ts +1 -2
  119. package/{controls → dist/controls}/rich-text/control.js +84 -42
  120. package/dist/controls/rich-text/control.js.map +1 -0
  121. package/{controls → dist/controls}/rich-text/dom.d.ts +53 -9
  122. package/{controls → dist/controls}/rich-text/dom.js +388 -50
  123. package/dist/controls/rich-text/dom.js.map +1 -0
  124. package/{controls → dist/controls}/rich-text/editor.d.ts +7 -0
  125. package/{controls → dist/controls}/rich-text/editor.js +226 -44
  126. package/dist/controls/rich-text/editor.js.map +1 -0
  127. package/dist/controls/rich-text/embed.d.ts +28 -0
  128. package/dist/controls/rich-text/embed.js +210 -0
  129. package/dist/controls/rich-text/embed.js.map +1 -0
  130. package/{controls → dist/controls}/rich-text/floating.d.ts +6 -1
  131. package/{controls → dist/controls}/rich-text/floating.js +35 -18
  132. package/dist/controls/rich-text/floating.js.map +1 -0
  133. package/dist/controls/rich-text/footnote.d.ts +41 -0
  134. package/dist/controls/rich-text/footnote.js +185 -0
  135. package/dist/controls/rich-text/footnote.js.map +1 -0
  136. package/dist/controls/rich-text/gallery.d.ts +28 -0
  137. package/dist/controls/rich-text/gallery.js +167 -0
  138. package/dist/controls/rich-text/gallery.js.map +1 -0
  139. package/{controls → dist/controls}/rich-text/index.js +1 -1
  140. package/dist/controls/rich-text/index.js.map +1 -0
  141. package/{controls → dist/controls}/rich-text/link-form.d.ts +3 -1
  142. package/dist/controls/rich-text/link-form.js +147 -0
  143. package/dist/controls/rich-text/link-form.js.map +1 -0
  144. package/{controls → dist/controls}/rich-text/markdown.js +4 -2
  145. package/dist/controls/rich-text/markdown.js.map +1 -0
  146. package/{controls → dist/controls}/rich-text/ops.js +17 -15
  147. package/dist/controls/rich-text/ops.js.map +1 -0
  148. package/dist/controls/rich-text/plain.d.ts +17 -0
  149. package/dist/controls/rich-text/plain.js +44 -0
  150. package/dist/controls/rich-text/plain.js.map +1 -0
  151. package/dist/controls/rich-text/related.d.ts +36 -0
  152. package/dist/controls/rich-text/related.js +213 -0
  153. package/dist/controls/rich-text/related.js.map +1 -0
  154. package/dist/controls/rich-text/toc.d.ts +46 -0
  155. package/dist/controls/rich-text/toc.js +161 -0
  156. package/dist/controls/rich-text/toc.js.map +1 -0
  157. package/{controls → dist/controls}/rich-text/toolbar.d.ts +6 -2
  158. package/{controls → dist/controls}/rich-text/toolbar.js +12 -7
  159. package/dist/controls/rich-text/toolbar.js.map +1 -0
  160. package/{controls → dist/controls}/scale.js +5 -5
  161. package/dist/controls/scale.js.map +1 -0
  162. package/dist/controls/slot-register.d.ts +6 -0
  163. package/{controls → dist/controls}/slot-register.js +2 -5
  164. package/dist/controls/slot-register.js.map +1 -0
  165. package/{controls → dist/controls}/slot-services.d.ts +25 -0
  166. package/dist/controls/slot-services.js +155 -0
  167. package/dist/controls/slot-services.js.map +1 -0
  168. package/{controls → dist/controls}/slot.js +42 -24
  169. package/dist/controls/slot.js.map +1 -0
  170. package/{controls → dist/controls}/table/index.js +1 -1
  171. package/dist/controls/table/index.js.map +1 -0
  172. package/{controls → dist/controls}/table/prod.js +3 -3
  173. package/dist/controls/table/prod.js.map +1 -0
  174. package/{controls → dist/controls}/table/refs.js +13 -2
  175. package/dist/controls/table/refs.js.map +1 -0
  176. package/{controls → dist/controls}/table/stored.js +1 -1
  177. package/dist/controls/table/stored.js.map +1 -0
  178. package/{controls → dist/controls}/table/table-editor.js +51 -48
  179. package/dist/controls/table/table-editor.js.map +1 -0
  180. package/{controls → dist/controls}/table/table-link.js +3 -3
  181. package/dist/controls/table/table-link.js.map +1 -0
  182. package/{controls → dist/controls}/table/table.js +3 -3
  183. package/dist/controls/table/table.js.map +1 -0
  184. package/{controls → dist/controls}/text.d.ts +2 -2
  185. package/{controls → dist/controls}/text.js +78 -43
  186. package/dist/controls/text.js.map +1 -0
  187. package/dist/controls/unknown-value.d.ts +17 -0
  188. package/dist/controls/unknown-value.js +66 -0
  189. package/dist/controls/unknown-value.js.map +1 -0
  190. package/dist/core/core.d.ts +70 -0
  191. package/dist/core/core.js +187 -0
  192. package/dist/core/core.js.map +1 -0
  193. package/dist/core/facets.d.ts +355 -0
  194. package/dist/core/facets.js +342 -0
  195. package/dist/core/facets.js.map +1 -0
  196. package/dist/core/index.d.ts +3 -0
  197. package/dist/core/index.js +3 -0
  198. package/{engine → dist/engine}/array.js +34 -21
  199. package/dist/engine/array.js.map +1 -0
  200. package/{engine → dist/engine}/bits.js +1 -1
  201. package/dist/engine/bits.js.map +1 -0
  202. package/{engine → dist/engine}/breadcrumb.d.ts +3 -3
  203. package/{engine → dist/engine}/breadcrumb.js +12 -36
  204. package/dist/engine/breadcrumb.js.map +1 -0
  205. package/{engine → dist/engine}/expand.d.ts +2 -4
  206. package/{engine → dist/engine}/expand.js +5 -22
  207. package/dist/engine/expand.js.map +1 -0
  208. package/{engine → dist/engine}/field-list.js +1 -1
  209. package/dist/engine/field-list.js.map +1 -0
  210. package/{engine → dist/engine}/field-shell.js +249 -121
  211. package/dist/engine/field-shell.js.map +1 -0
  212. package/{engine → dist/engine}/frame.d.ts +3 -1
  213. package/{engine → dist/engine}/frame.js +16 -14
  214. package/dist/engine/frame.js.map +1 -0
  215. package/{engine → dist/engine}/group-summary.d.ts +2 -1
  216. package/{engine → dist/engine}/group-summary.js +7 -3
  217. package/dist/engine/group-summary.js.map +1 -0
  218. package/{engine → dist/engine}/grouping.d.ts +19 -5
  219. package/{engine → dist/engine}/grouping.js +193 -21
  220. package/dist/engine/grouping.js.map +1 -0
  221. package/{engine → dist/engine}/item-list.d.ts +11 -1
  222. package/{engine → dist/engine}/item-list.js +35 -13
  223. package/dist/engine/item-list.js.map +1 -0
  224. package/{engine → dist/engine}/kit-field.js +45 -10
  225. package/dist/engine/kit-field.js.map +1 -0
  226. package/{engine → dist/engine}/schema-form.d.ts +27 -2
  227. package/{engine → dist/engine}/schema-form.js +182 -40
  228. package/dist/engine/schema-form.js.map +1 -0
  229. package/{engine → dist/engine}/slot.js +5 -15
  230. package/dist/engine/slot.js.map +1 -0
  231. package/dist/index.js +58 -0
  232. package/dist/index.js.map +1 -0
  233. package/{kit.css → dist/kit.css} +19 -0
  234. package/{lib → dist/lib}/cn.js +7 -4
  235. package/dist/lib/cn.js.map +1 -0
  236. package/{lib → dist/lib}/columns.js +4 -1
  237. package/dist/lib/columns.js.map +1 -0
  238. package/{lib → dist/lib}/frames.js +2 -2
  239. package/dist/lib/frames.js.map +1 -0
  240. package/dist/lib/icon-image.d.ts +10 -0
  241. package/dist/lib/icon-image.js +8 -0
  242. package/dist/lib/icon-image.js.map +1 -0
  243. package/{lib → dist/lib}/icons.js +4 -3
  244. package/dist/lib/icons.js.map +1 -0
  245. package/dist/lib/input-modality.d.ts +11 -0
  246. package/dist/lib/input-modality.js +47 -0
  247. package/dist/lib/input-modality.js.map +1 -0
  248. package/dist/lib/key-event.d.ts +11 -0
  249. package/dist/lib/key-event.js +16 -0
  250. package/dist/lib/key-event.js.map +1 -0
  251. package/{lib → dist/lib}/path.js +4 -2
  252. package/dist/lib/path.js.map +1 -0
  253. package/{lib → dist/lib}/schema.d.ts +34 -3
  254. package/{lib → dist/lib}/schema.js +110 -13
  255. package/dist/lib/schema.js.map +1 -0
  256. package/{lib → dist/lib}/utils.js +1 -1
  257. package/dist/lib/utils.js.map +1 -0
  258. package/{lib → dist/lib}/validate.d.ts +11 -1
  259. package/{lib → dist/lib}/validate.js +85 -11
  260. package/dist/lib/validate.js.map +1 -0
  261. package/dist/library/analysis.d.ts +23 -0
  262. package/dist/library/analysis.js +160 -0
  263. package/dist/library/analysis.js.map +1 -0
  264. package/dist/library/catalog.d.ts +57 -0
  265. package/dist/library/catalog.js +307 -0
  266. package/dist/library/catalog.js.map +1 -0
  267. package/dist/library/coreNotes.d.ts +8 -0
  268. package/dist/library/coreNotes.js +111 -0
  269. package/dist/library/coreNotes.js.map +1 -0
  270. package/dist/library/coverage.d.ts +40 -0
  271. package/dist/library/coverage.js +59 -0
  272. package/dist/library/coverage.js.map +1 -0
  273. package/dist/library/entries/advanced.entries.d.ts +2 -0
  274. package/dist/library/entries/advanced.entries.js +6579 -0
  275. package/dist/library/entries/advanced.entries.js.map +1 -0
  276. package/dist/library/entries/commerce.entries.d.ts +2 -0
  277. package/dist/library/entries/commerce.entries.js +4140 -0
  278. package/dist/library/entries/commerce.entries.js.map +1 -0
  279. package/dist/library/entries/company.entries.d.ts +2 -0
  280. package/dist/library/entries/company.entries.js +2731 -0
  281. package/dist/library/entries/company.entries.js.map +1 -0
  282. package/dist/library/entries/conversion.entries.d.ts +2 -0
  283. package/dist/library/entries/conversion.entries.js +3707 -0
  284. package/dist/library/entries/conversion.entries.js.map +1 -0
  285. package/dist/library/entries/data.entries.d.ts +7 -0
  286. package/dist/library/entries/data.entries.js +4613 -0
  287. package/dist/library/entries/data.entries.js.map +1 -0
  288. package/dist/library/entries/events.entries.d.ts +2 -0
  289. package/dist/library/entries/events.entries.js +3428 -0
  290. package/dist/library/entries/events.entries.js.map +1 -0
  291. package/dist/library/entries/features.entries.d.ts +2 -0
  292. package/dist/library/entries/features.entries.js +3157 -0
  293. package/dist/library/entries/features.entries.js.map +1 -0
  294. package/dist/library/entries/heroes.entries.d.ts +2 -0
  295. package/dist/library/entries/heroes.entries.js +3401 -0
  296. package/dist/library/entries/heroes.entries.js.map +1 -0
  297. package/dist/library/entries/index.d.ts +3 -0
  298. package/dist/library/entries/index.js +35 -0
  299. package/dist/library/entries/index.js.map +1 -0
  300. package/dist/library/entries/listings.entries.d.ts +2 -0
  301. package/dist/library/entries/listings.entries.js +2976 -0
  302. package/dist/library/entries/listings.entries.js.map +1 -0
  303. package/dist/library/entries/longform.entries.d.ts +2 -0
  304. package/dist/library/entries/longform.entries.js +4227 -0
  305. package/dist/library/entries/longform.entries.js.map +1 -0
  306. package/dist/library/entries/media.entries.d.ts +2 -0
  307. package/dist/library/entries/media.entries.js +2781 -0
  308. package/dist/library/entries/media.entries.js.map +1 -0
  309. package/dist/library/entries/navigation.entries.d.ts +2 -0
  310. package/dist/library/entries/navigation.entries.js +4011 -0
  311. package/dist/library/entries/navigation.entries.js.map +1 -0
  312. package/dist/library/entries/pricing.entries.d.ts +2 -0
  313. package/dist/library/entries/pricing.entries.js +2383 -0
  314. package/dist/library/entries/pricing.entries.js.map +1 -0
  315. package/dist/library/entries/social-proof.entries.d.ts +2 -0
  316. package/dist/library/entries/social-proof.entries.js +2297 -0
  317. package/dist/library/entries/social-proof.entries.js.map +1 -0
  318. package/dist/library/examples/bento.d.ts +92 -0
  319. package/dist/library/examples/bento.js +201 -0
  320. package/dist/library/examples/bento.js.map +1 -0
  321. package/dist/library/examples/blocks.d.ts +14 -0
  322. package/dist/library/examples/blocks.js +313 -0
  323. package/dist/library/examples/blocks.js.map +1 -0
  324. package/dist/library/examples/faq.d.ts +28 -0
  325. package/dist/library/examples/faq.js +230 -0
  326. package/dist/library/examples/faq.js.map +1 -0
  327. package/dist/library/examples/hero.d.ts +43 -0
  328. package/dist/library/examples/hero.js +222 -0
  329. package/dist/library/examples/hero.js.map +1 -0
  330. package/dist/library/examples/index.d.ts +36 -0
  331. package/dist/library/examples/index.js +109 -0
  332. package/dist/library/examples/index.js.map +1 -0
  333. package/dist/library/examples/journalStory.d.ts +93 -0
  334. package/dist/library/examples/journalStory.js +338 -0
  335. package/dist/library/examples/journalStory.js.map +1 -0
  336. package/dist/library/examples/megaMenu.d.ts +134 -0
  337. package/dist/library/examples/megaMenu.js +442 -0
  338. package/dist/library/examples/megaMenu.js.map +1 -0
  339. package/dist/library/examples/pricing.d.ts +103 -0
  340. package/dist/library/examples/pricing.js +479 -0
  341. package/dist/library/examples/pricing.js.map +1 -0
  342. package/dist/library/examples/tabs.d.ts +87 -0
  343. package/dist/library/examples/tabs.js +180 -0
  344. package/dist/library/examples/tabs.js.map +1 -0
  345. package/dist/library/export.d.ts +42 -0
  346. package/dist/library/export.js +80 -0
  347. package/dist/library/export.js.map +1 -0
  348. package/dist/library/index.d.ts +13 -0
  349. package/dist/library/index.js +6 -0
  350. package/dist/library/kit-catalog.json +1511 -0
  351. package/dist/library/types.d.ts +42 -0
  352. package/dist/library/types.js +0 -0
  353. package/{schema → dist/schema}/adapters.js +1 -2
  354. package/dist/schema/adapters.js.map +1 -0
  355. package/{schema → dist/schema}/help.d.ts +2 -0
  356. package/{schema → dist/schema}/help.js +6 -4
  357. package/dist/schema/help.js.map +1 -0
  358. package/{schema → dist/schema}/scale.js +1 -1
  359. package/dist/schema/scale.js.map +1 -0
  360. package/{schema → dist/schema}/sources.js +1 -1
  361. package/dist/schema/sources.js.map +1 -0
  362. package/{schema → dist/schema}/table.js +11 -10
  363. package/dist/schema/table.js.map +1 -0
  364. package/{schema → dist/schema}/types.d.ts +36 -1
  365. package/{schema → dist/schema}/types.js +1 -1
  366. package/dist/schema/types.js.map +1 -0
  367. package/dist/styles.css +2 -0
  368. package/dist/table/table-view.d.ts +14 -0
  369. package/dist/table/table-view.js +140 -0
  370. package/dist/table/table-view.js.map +1 -0
  371. package/dist/table/table.css +73 -0
  372. package/dist/testing/corpus.d.ts +63 -0
  373. package/dist/testing/corpus.js +129 -0
  374. package/dist/testing/corpus.js.map +1 -0
  375. package/dist/testing/test-form.d.ts +11 -0
  376. package/dist/testing/test-form.js +38 -0
  377. package/dist/testing/test-form.js.map +1 -0
  378. package/dist/theme.css +345 -0
  379. package/dist/theme.d.ts +22 -0
  380. package/dist/theme.js +43 -0
  381. package/dist/theme.js.map +1 -0
  382. package/dist/tokens.css +542 -0
  383. package/dist/types.js +0 -0
  384. package/{ui → dist/ui}/action-tray.d.ts +1 -1
  385. package/{ui → dist/ui}/action-tray.js +20 -19
  386. package/dist/ui/action-tray.js.map +1 -0
  387. package/dist/ui/autocomplete.d.ts +58 -0
  388. package/dist/ui/autocomplete.js +194 -0
  389. package/dist/ui/autocomplete.js.map +1 -0
  390. package/{ui → dist/ui}/button.d.ts +3 -3
  391. package/{ui → dist/ui}/button.js +8 -11
  392. package/dist/ui/button.js.map +1 -0
  393. package/{ui → dist/ui}/choice-switch.js +1 -1
  394. package/dist/ui/choice-switch.js.map +1 -0
  395. package/{ui → dist/ui}/controls.js +51 -39
  396. package/dist/ui/controls.js.map +1 -0
  397. package/{ui → dist/ui}/display.d.ts +10 -3
  398. package/{ui → dist/ui}/display.js +57 -46
  399. package/dist/ui/display.js.map +1 -0
  400. package/{ui → dist/ui}/expanded-editor-modal.d.ts +2 -2
  401. package/{ui → dist/ui}/expanded-editor-modal.js +6 -6
  402. package/dist/ui/expanded-editor-modal.js.map +1 -0
  403. package/{ui → dist/ui}/field-context.js +1 -1
  404. package/dist/ui/field-context.js.map +1 -0
  405. package/{ui → dist/ui}/floating-panel.d.ts +1 -1
  406. package/{ui → dist/ui}/floating-panel.js +28 -12
  407. package/dist/ui/floating-panel.js.map +1 -0
  408. package/{ui → dist/ui}/index.d.ts +4 -0
  409. package/dist/ui/index.js +18 -0
  410. package/{ui → dist/ui}/input.d.ts +1 -1
  411. package/{ui → dist/ui}/input.js +9 -9
  412. package/dist/ui/input.js.map +1 -0
  413. package/{ui → dist/ui}/mode-bar.js +3 -3
  414. package/dist/ui/mode-bar.js.map +1 -0
  415. package/{ui → dist/ui}/overlay.d.ts +77 -5
  416. package/dist/ui/overlay.js +697 -0
  417. package/dist/ui/overlay.js.map +1 -0
  418. package/{ui → dist/ui}/path-crumbs.js +37 -3
  419. package/dist/ui/path-crumbs.js.map +1 -0
  420. package/{ui → dist/ui}/presence.js +2 -2
  421. package/dist/ui/presence.js.map +1 -0
  422. package/{ui → dist/ui}/select.js +89 -87
  423. package/dist/ui/select.js.map +1 -0
  424. package/{ui → dist/ui}/shortcut-hint.js +1 -1
  425. package/dist/ui/shortcut-hint.js.map +1 -0
  426. package/dist/ui/spinner.d.ts +24 -0
  427. package/dist/ui/spinner.js +42 -0
  428. package/dist/ui/spinner.js.map +1 -0
  429. package/dist/ui/split-button.d.ts +32 -0
  430. package/dist/ui/split-button.js +60 -0
  431. package/dist/ui/split-button.js.map +1 -0
  432. package/{ui → dist/ui}/surfaces.js +1 -1
  433. package/dist/ui/surfaces.js.map +1 -0
  434. package/dist/ui/tab.d.ts +38 -0
  435. package/dist/ui/tab.js +87 -0
  436. package/dist/ui/tab.js.map +1 -0
  437. package/dist/ui/toast.d.ts +20 -0
  438. package/dist/ui/toast.js +115 -0
  439. package/dist/ui/toast.js.map +1 -0
  440. package/{ui → dist/ui}/tooltip-root.d.ts +4 -3
  441. package/{ui → dist/ui}/tooltip-root.js +9 -8
  442. package/dist/ui/tooltip-root.js.map +1 -0
  443. package/{ui → dist/ui}/variants.js +1 -1
  444. package/dist/ui/variants.js.map +1 -0
  445. package/package.json +83 -23
  446. package/adapters/icons.js.map +0 -1
  447. package/adapters/lossy.js +0 -233
  448. package/adapters/lossy.js.map +0 -1
  449. package/adapters/prod-types.js.map +0 -1
  450. package/adapters/schema.js.map +0 -1
  451. package/adapters/values.js.map +0 -1
  452. package/brand/logo.js +0 -9
  453. package/brand/logo.js.map +0 -1
  454. package/context.js.map +0 -1
  455. package/controls/button.js.map +0 -1
  456. package/controls/c1.js.map +0 -1
  457. package/controls/c2.js.map +0 -1
  458. package/controls/choice.js.map +0 -1
  459. package/controls/code-register.js.map +0 -1
  460. package/controls/code.js.map +0 -1
  461. package/controls/color.js.map +0 -1
  462. package/controls/date-register.js.map +0 -1
  463. package/controls/date-zone.js.map +0 -1
  464. package/controls/date.js.map +0 -1
  465. package/controls/form-picker-register.d.ts +0 -1
  466. package/controls/form-picker-register.js.map +0 -1
  467. package/controls/form-picker.js.map +0 -1
  468. package/controls/icon-register.js.map +0 -1
  469. package/controls/icon.js.map +0 -1
  470. package/controls/index.js.map +0 -1
  471. package/controls/json-register.js.map +0 -1
  472. package/controls/json.js.map +0 -1
  473. package/controls/link.js.map +0 -1
  474. package/controls/location-register.js.map +0 -1
  475. package/controls/location.js.map +0 -1
  476. package/controls/media-register.js.map +0 -1
  477. package/controls/media.js.map +0 -1
  478. package/controls/number.js.map +0 -1
  479. package/controls/reference-register.js.map +0 -1
  480. package/controls/reference.js.map +0 -1
  481. package/controls/rich-text/blocks.d.ts +0 -28
  482. package/controls/rich-text/blocks.js.map +0 -1
  483. package/controls/rich-text/catalog.js.map +0 -1
  484. package/controls/rich-text/codec.js.map +0 -1
  485. package/controls/rich-text/component-card.js.map +0 -1
  486. package/controls/rich-text/control.js.map +0 -1
  487. package/controls/rich-text/dom.js.map +0 -1
  488. package/controls/rich-text/editor.js.map +0 -1
  489. package/controls/rich-text/floating.js.map +0 -1
  490. package/controls/rich-text/index.js.map +0 -1
  491. package/controls/rich-text/link-form.js +0 -111
  492. package/controls/rich-text/link-form.js.map +0 -1
  493. package/controls/rich-text/markdown.js.map +0 -1
  494. package/controls/rich-text/ops.js.map +0 -1
  495. package/controls/rich-text/toolbar.js.map +0 -1
  496. package/controls/scale.js.map +0 -1
  497. package/controls/slot-register.d.ts +0 -1
  498. package/controls/slot-register.js.map +0 -1
  499. package/controls/slot-services.js +0 -38
  500. package/controls/slot-services.js.map +0 -1
  501. package/controls/slot.js.map +0 -1
  502. package/controls/table/index.js.map +0 -1
  503. package/controls/table/prod.js.map +0 -1
  504. package/controls/table/refs.js.map +0 -1
  505. package/controls/table/stored.js.map +0 -1
  506. package/controls/table/table-editor.js.map +0 -1
  507. package/controls/table/table-link.js.map +0 -1
  508. package/controls/table/table.js.map +0 -1
  509. package/controls/text.js.map +0 -1
  510. package/engine/array.js.map +0 -1
  511. package/engine/bits.js.map +0 -1
  512. package/engine/breadcrumb.js.map +0 -1
  513. package/engine/expand.js.map +0 -1
  514. package/engine/field-list.js.map +0 -1
  515. package/engine/field-shell.js.map +0 -1
  516. package/engine/frame.js.map +0 -1
  517. package/engine/group-summary.js.map +0 -1
  518. package/engine/grouping.js.map +0 -1
  519. package/engine/item-list.js.map +0 -1
  520. package/engine/kit-field.js.map +0 -1
  521. package/engine/schema-form.js.map +0 -1
  522. package/engine/slot.js.map +0 -1
  523. package/index.js +0 -55
  524. package/index.js.map +0 -1
  525. package/lib/cn.js.map +0 -1
  526. package/lib/columns.js.map +0 -1
  527. package/lib/frames.js.map +0 -1
  528. package/lib/icons.js.map +0 -1
  529. package/lib/path.js.map +0 -1
  530. package/lib/schema.js.map +0 -1
  531. package/lib/utils.js.map +0 -1
  532. package/lib/validate.js.map +0 -1
  533. package/schema/adapters.js.map +0 -1
  534. package/schema/help.js.map +0 -1
  535. package/schema/scale.js.map +0 -1
  536. package/schema/sources.js.map +0 -1
  537. package/schema/table.js.map +0 -1
  538. package/schema/types.js.map +0 -1
  539. package/ui/action-tray.js.map +0 -1
  540. package/ui/button.js.map +0 -1
  541. package/ui/choice-switch.js.map +0 -1
  542. package/ui/controls.js.map +0 -1
  543. package/ui/display.js.map +0 -1
  544. package/ui/expanded-editor-modal.js.map +0 -1
  545. package/ui/field-context.js.map +0 -1
  546. package/ui/floating-panel.js.map +0 -1
  547. package/ui/index.js +0 -13
  548. package/ui/input.js.map +0 -1
  549. package/ui/mode-bar.js.map +0 -1
  550. package/ui/overlay.js +0 -378
  551. package/ui/overlay.js.map +0 -1
  552. package/ui/path-crumbs.js.map +0 -1
  553. package/ui/presence.js.map +0 -1
  554. package/ui/select.js.map +0 -1
  555. package/ui/shortcut-hint.js.map +0 -1
  556. package/ui/surfaces.js.map +0 -1
  557. package/ui/tooltip-root.js.map +0 -1
  558. package/ui/variants.js.map +0 -1
  559. /package/{_virtual → dist/_virtual}/_rolldown/runtime.js +0 -0
  560. /package/{adapters → dist/adapters}/icons.d.ts +0 -0
  561. /package/{brand → dist/brand}/logo.d.ts +0 -0
  562. /package/{controls → dist/controls}/c1.d.ts +0 -0
  563. /package/{controls → dist/controls}/c2.d.ts +0 -0
  564. /package/{controls → dist/controls}/code-register.d.ts +0 -0
  565. /package/{controls → dist/controls}/code.d.ts +0 -0
  566. /package/{controls → dist/controls}/color.d.ts +0 -0
  567. /package/{controls → dist/controls}/date-register.d.ts +0 -0
  568. /package/{controls → dist/controls}/date-zone.d.ts +0 -0
  569. /package/{controls → dist/controls}/date.d.ts +0 -0
  570. /package/{controls → dist/controls}/form-picker.d.ts +0 -0
  571. /package/{controls → dist/controls}/icon-register.d.ts +0 -0
  572. /package/{controls → dist/controls}/json-register.d.ts +0 -0
  573. /package/{controls → dist/controls}/json.d.ts +0 -0
  574. /package/{controls → dist/controls}/link.d.ts +0 -0
  575. /package/{controls → dist/controls}/location-register.d.ts +0 -0
  576. /package/{controls → dist/controls}/location.d.ts +0 -0
  577. /package/{controls → dist/controls}/media-register.d.ts +0 -0
  578. /package/{controls → dist/controls}/number.d.ts +0 -0
  579. /package/{controls → dist/controls}/reference-register.d.ts +0 -0
  580. /package/{controls → dist/controls}/rich-text/index.d.ts +0 -0
  581. /package/{controls → dist/controls}/rich-text/markdown.d.ts +0 -0
  582. /package/{controls → dist/controls}/rich-text/ops.d.ts +0 -0
  583. /package/{controls → dist/controls}/scale.d.ts +0 -0
  584. /package/{controls → dist/controls}/slot.d.ts +0 -0
  585. /package/{controls → dist/controls}/table/index.d.ts +0 -0
  586. /package/{controls → dist/controls}/table/prod.d.ts +0 -0
  587. /package/{controls → dist/controls}/table/refs.d.ts +0 -0
  588. /package/{controls → dist/controls}/table/stored.d.ts +0 -0
  589. /package/{controls → dist/controls}/table/table-editor.d.ts +0 -0
  590. /package/{controls → dist/controls}/table/table-link.d.ts +0 -0
  591. /package/{controls → dist/controls}/table/table.d.ts +0 -0
  592. /package/{engine → dist/engine}/array.d.ts +0 -0
  593. /package/{engine → dist/engine}/bits.d.ts +0 -0
  594. /package/{engine → dist/engine}/field-list.d.ts +0 -0
  595. /package/{engine → dist/engine}/field-shell.d.ts +0 -0
  596. /package/{engine → dist/engine}/kit-field.d.ts +0 -0
  597. /package/{engine → dist/engine}/slot.d.ts +0 -0
  598. /package/{index.d.ts → dist/index.d.ts} +0 -0
  599. /package/{lib → dist/lib}/cn.d.ts +0 -0
  600. /package/{lib → dist/lib}/columns.d.ts +0 -0
  601. /package/{lib → dist/lib}/frames.d.ts +0 -0
  602. /package/{lib → dist/lib}/icons.d.ts +0 -0
  603. /package/{lib → dist/lib}/path.d.ts +0 -0
  604. /package/{lib → dist/lib}/utils.d.ts +0 -0
  605. /package/{schema → dist/schema}/adapters.d.ts +0 -0
  606. /package/{schema → dist/schema}/scale.d.ts +0 -0
  607. /package/{schema → dist/schema}/sources.d.ts +0 -0
  608. /package/{schema → dist/schema}/table.d.ts +0 -0
  609. /package/{types.d.ts → dist/types.d.ts} +0 -0
  610. /package/{ui → dist/ui}/choice-switch.d.ts +0 -0
  611. /package/{ui → dist/ui}/controls.d.ts +0 -0
  612. /package/{ui → dist/ui}/field-context.d.ts +0 -0
  613. /package/{ui → dist/ui}/mode-bar.d.ts +0 -0
  614. /package/{ui → dist/ui}/path-crumbs.d.ts +0 -0
  615. /package/{ui → dist/ui}/presence.d.ts +0 -0
  616. /package/{ui → dist/ui}/select.d.ts +0 -0
  617. /package/{ui → dist/ui}/shortcut-hint.d.ts +0 -0
  618. /package/{ui → dist/ui}/surfaces.d.ts +0 -0
  619. /package/{ui → dist/ui}/variants.d.ts +0 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slot.js","names":[],"sources":["../../src/controls/slot.tsx"],"sourcesContent":["/**\n * COMPONENT SLOT — a prop that holds component instances (prod `slot`), on the engine's slot surface (engine/slot.tsx,\n * V2 HEAD 9829bf1): the block rows (icon tile, name, ⋯ menu, drag to reorder) and the compact searchable picker.\n *\n * What differs from V2's block slot is where the rows come from and what they store:\n * - the picker lists the host's slot catalog (`useSlotCatalog`): the project's components with the SERVER's\n * insertability verdict for each; one that can't go here stays in the list, disabled, with the reason under its name;\n * - a row opens in place and edits that child's own props through the host's `SlotChild`;\n * - the value is written in the stored shape (slot-services.ts): one `{ componentId, overrides? }`, or a list of them\n * for a multiple slot, every item spread back with the keys this control does not show (style, window).\n *\n * Refusals are said in words, never by an inert control: no catalog service, an unreadable stored value, the nesting cap.\n */\nimport * as React from \"react\";\nimport { IconPlus, IconSearch } from \"@tabler/icons-react\";\nimport { useKitServices } from \"../context\";\nimport { KitIcon } from \"../lib/icons\";\nimport { cn } from \"../lib/cn\";\nimport { Button } from \"../ui/button\";\nimport { Popover, PopoverContent, PopoverTrigger } from \"../ui/overlay\";\nimport { RowList, useListOps, type RowModel } from \"../engine/array\";\nimport type { FieldSchema } from \"../schema/types\";\nimport type { ControlProps } from \"../types\";\nimport { readSlot, slotList, SLOT_DEPTH_MAX, type KitComponentSlot, type KitSlotEntry, type KitSlotItem } from \"./slot-services\";\n\n/** How many slots deep the control sits: the host's SlotChild editor sits inside a provider one level down. */\nexport const SlotDepthContext = React.createContext(0);\n\nconst count = (n: number) => `${n} block${n === 1 ? \"\" : \"s\"}`;\nconst NO_CATALOG = { entries: [] as KitSlotEntry[], nameOf: () => undefined };\n\n/** A note in words, labelable and focusable (the field label's `for` lands on it). */\nfunction SlotNote({ id, children, tone = \"muted\" }: { id?: string; children: React.ReactNode; tone?: \"muted\" | \"warning\" }) {\n return (\n <output\n id={id}\n role=\"note\"\n tabIndex={id ? 0 : undefined}\n className={cn(\n \"block rounded-kit-sm text-kit-xs outline-none focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-kit-focus-ring focus-visible:[outline-style:solid] [html[data-input-modality=pointer]_&]:focus-visible:outline-none\",\n tone === \"warning\" ? \"text-kit-warning-fg\" : \"text-kit-fg-3\",\n )}\n >\n {children}\n </output>\n );\n}\n\nexport function ComponentSlotControl({ field, value, onChange, readOnly, id, path }: ControlProps) {\n const slot: KitComponentSlot = field.componentSlot ?? { multiple: false, min: 0, max: 1 };\n const depth = React.useContext(SlotDepthContext);\n const { useSlotCatalog, SlotChild, toast } = useKitServices();\n // a hook service: one identity for the life of the form, so it is called on every render or never\n const catalog = useSlotCatalog ? useSlotCatalog({ componentIds: slot.componentIds }) : null; // eslint-disable-line react-hooks/rules-of-hooks\n const read = readSlot(value);\n const items = read.items;\n const max = slot.multiple ? slot.max : 1;\n const [openId, setOpenId] = React.useState<string | null>(null);\n const nameOf = (componentId: string) => (catalog ?? NO_CATALOG).nameOf(componentId) ?? { title: catalog?.loading ? \"Loading…\" : componentId };\n const locked = readOnly || read.unreadable > 0;\n\n /* writes: the stored shape, never a `_key` (useListOps' duplicate adds one) */\n const write = (next: unknown[]) => {\n setOpenId(null);\n if (slot.multiple) return onChange(slotList(next));\n const [first] = slotList(next);\n onChange(first ?? { componentId: \"\" });\n };\n const opsField: FieldSchema = { ...field, validation: { ...field.validation, min: slot.multiple ? slot.min : 0, max } };\n const ops = useListOps(opsField, path, items, write);\n if (depth >= SLOT_DEPTH_MAX) return <SlotNote id={id}>Nested block limit reached. A slot this deep would render as nothing, so it can&rsquo;t hold more blocks here.</SlotNote>;\n const pick = (componentId: string) => {\n if (!slot.multiple) {\n const cur = items[0];\n // a different component's overrides are keyed by the old component's props: dropped, never half-applied\n onChange(cur && cur.componentId === componentId ? cur : { componentId });\n setOpenId(null);\n return;\n }\n if (items.length >= max) return;\n onChange([...items, { componentId }]);\n setOpenId(`i${items.length}`);\n };\n const setOverrides = (index: number, overrides: Record<string, unknown>) => {\n const next = items.map((it, i) => (i === index ? { ...it, overrides } : it));\n if (slot.multiple) onChange(next);\n else onChange({ componentId: next[0].componentId, overrides });\n };\n\n const rows: RowModel[] = items.map((it, i) => {\n const name = nameOf(it.componentId);\n const entry = catalog?.entries.find((e) => e.id === it.componentId);\n return {\n id: `i${i}`,\n index: i,\n item: it,\n path: [...path, i],\n preview: { title: name.missing ? \"Missing block\" : name.title, icon: entry?.icon ?? \"box\", empty: false },\n extra: name.missing ? \"Deleted, or not in this project. Replace or remove it.\" : (entry?.category ?? `Block ${i + 1} of ${items.length}`),\n };\n });\n\n /*\n * A slot that takes exactly one block type adds it in one press (V2 content-form.tsx \"Add {child}\"): no picker to\n * choose from a list of one. Not insertable here → the picker, which says why. Undo puts the slot back as it was.\n */\n const only = slot.componentIds?.length === 1 ? catalog?.entries.find((e) => e.id === slot.componentIds![0]) : undefined;\n const quickAdd = only?.insertable && (slot.multiple || items.length === 0) ? only : undefined;\n const addOnly = (entry: KitSlotEntry) => {\n const before = value;\n pick(entry.id);\n toast?.(`${entry.title} added to ${field.title}`, { action: { label: \"Undo\", onClick: () => onChange(before) } });\n };\n\n const picker = quickAdd ? (\n <Button\n size=\"lg\"\n variant=\"ghost\"\n className=\"text-kit-fg-2\"\n leftIcon={<IconPlus stroke={1.5} />}\n disabled={locked || (slot.multiple && items.length >= max)}\n onClick={() => addOnly(quickAdd)}\n >\n Add {quickAdd.title}\n </Button>\n ) : catalog ? (\n <SlotPicker\n entries={catalog.entries}\n loading={catalog.loading}\n error={catalog.error}\n note={catalog.note}\n current={slot.multiple ? undefined : items[0]?.componentId}\n label={slot.multiple ? \"Add block\" : items.length ? \"Replace block\" : \"Choose a block\"}\n disabled={locked || (slot.multiple && items.length >= max)}\n onPick={pick}\n />\n ) : null;\n\n return (\n <div className=\"flex min-w-0 flex-col gap-1.5\" data-slot=\"kit-component-slot\">\n {read.unreadable > 0 ? (\n <SlotNote tone=\"warning\">\n {read.unreadable === 1 ? \"One child here isn't a block instance\" : `${read.unreadable} children here aren't block instances`} (blocks written by another editor). This editor\n would drop {read.unreadable === 1 ? \"it\" : \"them\"} on save, so the slot is shown read-only and its value is kept.\n </SlotNote>\n ) : null}\n {read.inherited && items.length === 0 ? <SlotNote>Shows the block&rsquo;s own content until a block is added here.</SlotNote> : null}\n <div id={id} tabIndex={-1} className=\"min-w-0 outline-none\">\n <RowList\n field={opsField}\n rows={rows}\n readOnly={locked}\n layout=\"list\"\n mode=\"inline\"\n openId={openId}\n onOpen={(r) => setOpenId(openId === r.id ? null : r.id)}\n onCloseInline={() => setOpenId(null)}\n ops={ops}\n renderInline={(r) => {\n const it = r.item as KitSlotItem;\n const title = r.preview.title;\n if (nameOf(it.componentId).missing) return <SlotNote>This component no longer exists, so its props can&rsquo;t be edited. Replace it or remove it.</SlotNote>;\n if (!SlotChild) return <SlotNote>This editor can&rsquo;t open {title}&rsquo;s own props.</SlotNote>;\n return (\n <SlotDepthContext.Provider value={depth + 1}>\n <SlotChild\n componentId={it.componentId}\n title={title}\n overrides={it.overrides && typeof it.overrides === \"object\" ? it.overrides : {}}\n onChange={(o) => setOverrides(r.index, o)}\n readOnly={locked}\n depth={depth + 1}\n />\n </SlotDepthContext.Provider>\n );\n }}\n leading={(r) => (\n <span className=\"flex size-7 shrink-0 items-center justify-center rounded-kit-md border border-kit-line bg-kit-control-bg text-kit-fg-2 shadow-kit-xs\">\n <KitIcon name={r.preview.icon} className=\"size-4\" />\n </span>\n )}\n emptyLabel={slot.multiple ? \"No blocks yet. Add one to start composing.\" : \"No block yet. Choose one to fill this slot.\"}\n addButton={picker ?? <SlotNote>No block library is connected to this editor, so {field.title} can&rsquo;t be changed here.</SlotNote>}\n />\n </div>\n {slot.multiple ? (\n <span className=\"text-kit-xs text-kit-fg-3\">\n {items.length >= max ? `This slot holds at most ${count(max)}.` : slot.min > 0 ? `Between ${slot.min} and ${count(max)}.` : `Up to ${count(max)}.`}\n {slot.min > 0 && items.length > 0 && items.length <= slot.min ? ` It needs at least ${slot.min}, so none can be removed.` : \"\"}\n </span>\n ) : null}\n </div>\n );\n}\n\n/**\n * The compact block picker (engine/slot.tsx BlockPicker), over the slot catalog: grouped by family, searchable, ↵ adds.\n * A component the server says can't go here is listed disabled with its reason in place of the description.\n */\nexport function SlotPicker({\n entries,\n loading,\n error,\n note,\n current,\n label,\n disabled,\n onPick,\n}: {\n entries: KitSlotEntry[];\n loading?: boolean;\n error?: string;\n note?: string;\n current?: string;\n label: string;\n disabled?: boolean;\n onPick: (componentId: string) => void;\n}) {\n const [open, setOpen] = React.useState(false);\n const [q, setQ] = React.useState(\"\");\n const [active, setActive] = React.useState(0);\n const listId = React.useId();\n const list = entries.filter((b) => !q || `${b.title} ${b.category ?? \"\"} ${b.description ?? \"\"}`.toLowerCase().includes(q.toLowerCase()));\n const cats = Array.from(new Set(list.map((b) => b.category || \"Blocks\")));\n const flat = cats.flatMap((c) => list.filter((b) => (b.category || \"Blocks\") === c));\n const choose = (b: KitSlotEntry | undefined) => {\n if (!b || !b.insertable) return;\n onPick(b.id);\n setOpen(false);\n setQ(\"\");\n };\n const optionId = (i: number) => `${listId}-${i}`;\n return (\n <Popover\n open={open}\n onOpenChange={(o) => {\n setOpen(o);\n setQ(\"\");\n setActive(0);\n }}\n >\n <PopoverTrigger render={<Button size=\"sm\" variant=\"ghost\" className=\"text-kit-fg-2\" leftIcon={<IconPlus stroke={1.5} />} disabled={disabled} />}>{label}</PopoverTrigger>\n <PopoverContent className=\"w-[300px] p-0\" align=\"start\">\n <label className=\"flex h-10 items-center gap-2 border-b border-kit-line px-3 text-kit-fg-3\">\n <IconSearch className=\"size-4 shrink-0\" stroke={1.5} aria-hidden />\n <input\n autoFocus\n value={q}\n onChange={(e) => {\n setQ(e.target.value);\n setActive(0);\n }}\n onKeyDown={(e) => {\n if (e.key === \"ArrowDown\") {\n e.preventDefault();\n setActive((a) => (a + 1) % Math.max(1, flat.length));\n } else if (e.key === \"ArrowUp\") {\n e.preventDefault();\n setActive((a) => (a - 1 + flat.length) % Math.max(1, flat.length));\n } else if (e.key === \"Enter\") {\n e.preventDefault();\n choose(flat[active]);\n }\n }}\n placeholder=\"Search blocks\"\n aria-label=\"Search blocks\"\n role=\"combobox\"\n aria-expanded\n aria-controls={listId}\n aria-activedescendant={flat.length ? optionId(Math.min(active, flat.length - 1)) : undefined}\n className=\"h-full min-w-0 flex-1 bg-transparent text-kit-sm text-kit-fg outline-none placeholder:text-kit-fg-3\"\n />\n </label>\n <div id={listId} className=\"max-h-80 overflow-y-auto p-1\" role=\"listbox\" aria-label=\"Blocks\" aria-busy={loading || undefined}>\n {loading && entries.length === 0 ? (\n <p role=\"status\" className=\"px-3 py-6 text-center text-kit-sm text-kit-fg-3\">\n Loading blocks…\n </p>\n ) : null}\n {!loading && !error && flat.length === 0 ? <p className=\"px-3 py-6 text-center text-kit-sm text-kit-fg-3\">{entries.length ? \"No blocks match\" : \"This project has no blocks that can go here yet.\"}</p> : null}\n {error ? (\n <p role=\"alert\" className=\"px-3 py-3 text-kit-xs text-kit-danger-fg\">\n {error}\n </p>\n ) : null}\n {cats.map((c) => (\n <div key={c} role=\"group\" aria-label={c} className=\"pb-1\">\n <div aria-hidden className=\"px-2 pb-1 pt-1.5 text-kit-2xs font-medium text-kit-fg-3\">\n {c}\n </div>\n {list\n .filter((b) => (b.category || \"Blocks\") === c)\n .map((b) => {\n const i = flat.indexOf(b);\n return (\n <div\n key={b.id}\n id={optionId(i)}\n role=\"option\"\n aria-selected={b.id === current}\n aria-disabled={!b.insertable || undefined}\n onMouseEnter={() => setActive(i)}\n onMouseDown={(e) => e.preventDefault()}\n onClick={() => choose(b)}\n className={cn(\"flex w-full items-center gap-2.5 rounded-kit-md p-1.5 text-left\", b.insertable ? \"cursor-pointer\" : \"cursor-not-allowed\", i === active && \"bg-kit-hover\")}\n >\n <span className={cn(\"flex size-8 shrink-0 items-center justify-center rounded-kit-md border border-kit-line bg-kit-surface text-kit-fg-2 shadow-kit-xs\", !b.insertable && \"opacity-50\")}>\n <KitIcon name={b.icon ?? \"box\"} className=\"size-4\" />\n </span>\n <span className=\"min-w-0 flex-1\">\n <span className={cn(\"block truncate text-kit-sm\", b.insertable ? \"text-kit-fg\" : \"text-kit-fg-3\")}>{b.title}</span>\n {!b.insertable && b.reason ? (\n <span className=\"block text-kit-xs text-kit-fg-3\">{b.reason}</span>\n ) : b.description ? (\n <span className=\"block truncate text-kit-xs text-kit-fg-3\">{b.description}</span>\n ) : null}\n </span>\n </div>\n );\n })}\n </div>\n ))}\n </div>\n {note ? <p className=\"border-t border-kit-line px-3 py-2 text-kit-xs text-kit-fg-3\">{note}</p> : null}\n <div data-hint=\"shortcuts\" className=\"border-t border-kit-line px-3 py-1.5 text-kit-2xs text-kit-fg-3\">\n ↵ add · type to search\n </div>\n </PopoverContent>\n </Popover>\n );\n}\n"],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { TableControl, TableFullScreenAction } from "./table.js";
2
2
  import { ACTIONS, CONTROLS } from "../../engine/kit-field.js";
3
- //#region src/kit/controls/table/index.ts
3
+ //#region src/controls/table/index.ts
4
4
  /**
5
5
  * Data table: registers the control and its label-row action (one line each, so lanes merge cleanly).
6
6
  * Imported for its side effect by the kit entry; import the parts themselves by path.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","names":[],"sources":["../../../src/controls/table/index.ts"],"sourcesContent":["/**\n * Data table: registers the control and its label-row action (one line each, so lanes merge cleanly).\n * Imported for its side effect by the kit entry; import the parts themselves by path.\n */\nimport { ACTIONS, CONTROLS } from \"../../engine/kit-field\";\nimport { TableControl, TableFullScreenAction } from \"./table\";\n\nCONTROLS.table = TableControl;\nACTIONS.table = TableFullScreenAction;\n"],"mappings":";;;;;;;AAOA,SAAS,QAAQ;AACjB,QAAQ,QAAQ"}
@@ -1,5 +1,5 @@
1
1
  import { TABLE_COLUMN_TYPES } from "../../schema/table.js";
2
- //#region src/kit/controls/table/prod.ts
2
+ //#region src/controls/table/prod.ts
3
3
  /**
4
4
  * The production side of a data table, for the schema adapter (adapters/schema.ts) to call when it reads one:
5
5
  *
@@ -13,12 +13,12 @@ import { TABLE_COLUMN_TYPES } from "../../schema/table.js";
13
13
  */
14
14
  var isObj = (v) => !!v && typeof v === "object" && !Array.isArray(v);
15
15
  var COLUMN_TYPES = new Set(TABLE_COLUMN_TYPES.map((t) => t.value));
16
- var PHONES = new Set([
16
+ var PHONES = /* @__PURE__ */ new Set([
17
17
  "scroll",
18
18
  "stack",
19
19
  "cards"
20
20
  ]);
21
- var JSONLD = new Set([
21
+ var JSONLD = /* @__PURE__ */ new Set([
22
22
  "ItemList",
23
23
  "Dataset",
24
24
  "Offers"
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prod.js","names":[],"sources":["../../../src/controls/table/prod.ts"],"sourcesContent":["/**\n * The production side of a data table, for the schema adapter (adapters/schema.ts) to call when it reads one:\n *\n * - a component `table` prop with `config.mode: \"data\"` (BE @bettercms-ai/types component.ts; prop-fields.ts\n * isDataTable) holds ONE TableValue, with the table field's options beside `mode` in its `config`;\n * - a content-model `table` field (BE content-model.ts) holds the same value, its options in `config`.\n *\n * A `table` prop with no mode (or `\"rows\"` / `\"types\"`) is the older array of rows and is NOT this value.\n * Only the option keys the backend defines are read, each only when it has the type the backend reads, so a stray key\n * never turns into a setting the backend would not honour.\n */\nimport { TABLE_COLUMN_TYPES, type TableColumnType, type TableFieldOptions, type TableJsonLdType, type TableResponsive, type TableSettingsOptions } from \"../../schema/table\";\n\nconst isObj = (v: unknown): v is Record<string, unknown> => !!v && typeof v === \"object\" && !Array.isArray(v);\nconst COLUMN_TYPES = new Set<string>(TABLE_COLUMN_TYPES.map((t) => t.value));\nconst PHONES = new Set<string>([\"scroll\", \"stack\", \"cards\"]);\nconst JSONLD = new Set<string>([\"ItemList\", \"Dataset\", \"Offers\"]);\nconst SETTING_FLAGS = [\"headers\", \"totals\", \"highlight\", \"sticky\", \"sort\", \"search\"] as const;\n\n/** BE isDataTable: a `table` prop or sub-field holding one TableValue. */\nexport const isDataTableProp = (p: { type?: unknown; config?: unknown }): boolean => p.type === \"table\" && isObj(p.config) && p.config.mode === \"data\";\n\n/** The field options a data table's `config` carries, as the kit's `FieldSchema.table`. */\nexport function tableOptionsFromConfig(config: unknown): TableFieldOptions {\n if (!isObj(config)) return {};\n const o: TableFieldOptions = {};\n const strs = (v: unknown, ok: Set<string>) => (Array.isArray(v) ? v.filter((x): x is string => typeof x === \"string\" && ok.has(x)) : undefined);\n const columnTypes = strs(config.columnTypes, COLUMN_TYPES);\n if (columnTypes) o.columnTypes = columnTypes as TableColumnType[];\n for (const k of [\"lockColumns\", \"requireCaption\", \"allowGroups\", \"allowFootnotes\", \"allowNote\"] as const) if (typeof config[k] === \"boolean\") o[k] = config[k] as boolean;\n for (const k of [\"minRows\", \"maxRows\", \"maxColumns\"] as const) {\n const n = config[k];\n if (typeof n === \"number\" && Number.isInteger(n) && n >= 0) o[k] = n;\n }\n if (isObj(config.settings)) {\n const s: TableSettingsOptions = {};\n for (const k of SETTING_FLAGS) if (typeof config.settings[k] === \"boolean\") s[k] = config.settings[k] as boolean;\n const phones = strs(config.settings.phones, PHONES);\n if (phones) s.phones = phones as TableResponsive[];\n o.settings = s;\n }\n const jsonLd = strs(config.jsonLd, JSONLD);\n if (jsonLd) o.jsonLd = jsonLd as TableJsonLdType[];\n return o;\n}\n\n/** The `config` a data-table prop is written with (the inverse of tableOptionsFromConfig). */\nexport function tableConfigFromOptions(o: TableFieldOptions | undefined): Record<string, unknown> {\n return { mode: \"data\", ...(o ? JSON.parse(JSON.stringify(o)) : {}) };\n}\n"],"mappings":";;;;;;;;;;;;;AAaA,IAAM,SAAS,MAA6C,CAAC,CAAC,KAAK,OAAO,MAAM,YAAY,CAAC,MAAM,QAAQ,CAAC;AAC5G,IAAM,eAAe,IAAI,IAAY,mBAAmB,KAAK,MAAM,EAAE,KAAK,CAAC;AAC3E,IAAM,yBAAS,IAAI,IAAY;CAAC;CAAU;CAAS;AAAO,CAAC;AAC3D,IAAM,yBAAS,IAAI,IAAY;CAAC;CAAY;CAAW;AAAQ,CAAC;AAChE,IAAM,gBAAgB;CAAC;CAAW;CAAU;CAAa;CAAU;CAAQ;AAAQ;;AAGnF,IAAa,mBAAmB,MAAqD,EAAE,SAAS,WAAW,MAAM,EAAE,MAAM,KAAK,EAAE,OAAO,SAAS;;AAGhJ,SAAgB,uBAAuB,QAAoC;CACzE,IAAI,CAAC,MAAM,MAAM,GAAG,OAAO,CAAC;CAC5B,MAAM,IAAuB,CAAC;CAC9B,MAAM,QAAQ,GAAY,OAAqB,MAAM,QAAQ,CAAC,IAAI,EAAE,QAAQ,MAAmB,OAAO,MAAM,YAAY,GAAG,IAAI,CAAC,CAAC,IAAI,KAAA;CACrI,MAAM,cAAc,KAAK,OAAO,aAAa,YAAY;CACzD,IAAI,aAAa,EAAE,cAAc;CACjC,KAAK,MAAM,KAAK;EAAC;EAAe;EAAkB;EAAe;EAAkB;CAAW,GAAY,IAAI,OAAO,OAAO,OAAO,WAAW,EAAE,KAAK,OAAO;CAC5J,KAAK,MAAM,KAAK;EAAC;EAAW;EAAW;CAAY,GAAY;EAC7D,MAAM,IAAI,OAAO;EACjB,IAAI,OAAO,MAAM,YAAY,OAAO,UAAU,CAAC,KAAK,KAAK,GAAG,EAAE,KAAK;CACrE;CACA,IAAI,MAAM,OAAO,QAAQ,GAAG;EAC1B,MAAM,IAA0B,CAAC;EACjC,KAAK,MAAM,KAAK,eAAe,IAAI,OAAO,OAAO,SAAS,OAAO,WAAW,EAAE,KAAK,OAAO,SAAS;EACnG,MAAM,SAAS,KAAK,OAAO,SAAS,QAAQ,MAAM;EAClD,IAAI,QAAQ,EAAE,SAAS;EACvB,EAAE,WAAW;CACf;CACA,MAAM,SAAS,KAAK,OAAO,QAAQ,MAAM;CACzC,IAAI,QAAQ,EAAE,SAAS;CACvB,OAAO;AACT;;AAGA,SAAgB,uBAAuB,GAA2D;CAChG,OAAO;EAAE,MAAM;EAAQ,GAAI,IAAI,KAAK,MAAM,KAAK,UAAU,CAAC,CAAC,IAAI,CAAC;CAAG;AACrE"}
@@ -1,6 +1,6 @@
1
1
  import { useKitServices } from "../../context.js";
2
2
  import * as React from "react";
3
- //#region src/kit/controls/table/refs.ts
3
+ //#region src/controls/table/refs.ts
4
4
  /**
5
5
  * Reference cells: what a `reference` column's cell may point at, found through the HOST (the kit never fetches).
6
6
  *
@@ -16,6 +16,17 @@ import * as React from "react";
16
16
  *
17
17
  * Absent → the picker says, in words, that this view cannot search pages or entries (stored cells still show).
18
18
  */
19
+ /**
20
+ * The POST /content/reference-options `config` bodies one column's `refTo` needs (the host sends each and merges the
21
+ * answers): pages through `targets: ["page"]`, each collection through `contentModelId`.
22
+ */
23
+ function tableRefConfigs(refTo) {
24
+ const to = refTo?.length ? refTo : ["page"];
25
+ const out = [];
26
+ if (to.includes("page")) out.push({ targets: ["page"] });
27
+ for (const id of to) if (id !== "page" && id) out.push({ contentModelId: id });
28
+ return out;
29
+ }
19
30
  /** The words a stored reference shows: what a read resolved onto it, its stored label, else its id. */
20
31
  function refLabel(r) {
21
32
  return r.resolved?.title || r.label || r.ref;
@@ -63,6 +74,6 @@ function useRefSearch(open, refTo, q) {
63
74
  return answer?.ask === ask ? answer.state : { status: "loading" };
64
75
  }
65
76
  //#endregion
66
- export { refLabel, useRefSearch };
77
+ export { refLabel, tableRefConfigs, useRefSearch };
67
78
 
68
79
  //# sourceMappingURL=refs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refs.js","names":[],"sources":["../../../src/controls/table/refs.ts"],"sourcesContent":["/**\n * Reference cells: what a `reference` column's cell may point at, found through the HOST (the kit never fetches).\n *\n * A reference cell stores `{ ref, label?, href? }` (BE table-value.ts TableRef): the id of a page or an entry. Its column's\n * `refTo` narrows the targets (\"page\", and collections by content-model id or slug); with no `refTo` V2 offers pages. The\n * backend checks the id exists and is a kind `refTo` allows (`reference_target_not_allowed`), so the picker only lists\n * what the same rule accepts: the host answers through POST /content/reference-options with the configs\n * `tableRefConfigs(refTo)` names.\n *\n * Host contract (a KitServices key, provided by src/features/dock-v2 and the /style-guide/kit sandbox):\n *\n * tableRefSearch(req) → Promise<TableRefOption[]>\n *\n * Absent → the picker says, in words, that this view cannot search pages or entries (stored cells still show).\n */\nimport * as React from \"react\";\nimport { useKitServices } from \"../../context\";\nimport type { TableRef } from \"../../schema/table\";\n\nexport interface TableRefOption {\n /** page or entry id: what the cell stores as `ref` */\n id: string;\n title: string;\n /** \"Blog post · my-slug\", \"Page\" */\n subtitle?: string;\n /** the public path, stored as the cell's `href` so the published table links without a read */\n href?: string;\n}\nexport interface TableRefSearchRequest {\n /** the column's `refTo` (null = pages, as V2) */\n refTo: string[] | null;\n q: string;\n signal: AbortSignal;\n}\nexport type TableRefSearch = (req: TableRefSearchRequest) => Promise<TableRefOption[]>;\nexport interface TableKitServices {\n tableRefSearch?: TableRefSearch;\n}\ndeclare module \"../../context\" {\n interface KitServices {\n /** Search pages and entries for a table's reference cells (see above). Absent → the picker names why it can't. */\n tableRefSearch?: TableRefSearch;\n }\n}\n\n/**\n * The POST /content/reference-options `config` bodies one column's `refTo` needs (the host sends each and merges the\n * answers): pages through `targets: [\"page\"]`, each collection through `contentModelId`.\n */\nexport function tableRefConfigs(refTo: string[] | null | undefined): Record<string, unknown>[] {\n const to = refTo?.length ? refTo : [\"page\"];\n const out: Record<string, unknown>[] = [];\n if (to.includes(\"page\")) out.push({ targets: [\"page\"] });\n for (const id of to) if (id !== \"page\" && id) out.push({ contentModelId: id });\n return out;\n}\n\n/** The words a stored reference shows: what a read resolved onto it, its stored label, else its id. */\nexport function refLabel(r: TableRef & { resolved?: { title?: string } }): string {\n return r.resolved?.title || r.label || r.ref;\n}\n\nexport type RefSearchState =\n | { status: \"unavailable\" }\n | { status: \"loading\" }\n | { status: \"ready\"; options: TableRefOption[] }\n | { status: \"error\"; message: string };\n\n/** Search while `open`, 200ms after the last keystroke; a newer query aborts the older one. */\nexport function useRefSearch(open: boolean, refTo: string[] | null, q: string): RefSearchState {\n const search = useKitServices().tableRefSearch;\n const key = refTo?.join(\",\") ?? \"\";\n const ask = `${key}\\u0000${q.trim()}`;\n // the answer, tagged with the question it answers: a different question reads as loading until its own answer lands\n const [answer, setAnswer] = React.useState<{ ask: string; state: RefSearchState } | null>(null);\n React.useEffect(() => {\n if (!search || !open) return;\n const ctl = new AbortController();\n const t = window.setTimeout(() => {\n search({ refTo: key ? key.split(\",\") : null, q: q.trim(), signal: ctl.signal }).then(\n (options) => !ctl.signal.aborted && setAnswer({ ask, state: { status: \"ready\", options } }),\n (e: unknown) => !ctl.signal.aborted && setAnswer({ ask, state: { status: \"error\", message: e instanceof Error && e.message ? e.message : \"The search did not answer.\" } }),\n );\n }, 200);\n return () => {\n ctl.abort();\n window.clearTimeout(t);\n };\n }, [search, open, key, q, ask]);\n if (!search) return { status: \"unavailable\" };\n return answer?.ask === ask ? answer.state : { status: \"loading\" };\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAiDA,SAAgB,gBAAgB,OAA+D;CAC7F,MAAM,KAAK,OAAO,SAAS,QAAQ,CAAC,MAAM;CAC1C,MAAM,MAAiC,CAAC;CACxC,IAAI,GAAG,SAAS,MAAM,GAAG,IAAI,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,CAAC;CACvD,KAAK,MAAM,MAAM,IAAI,IAAI,OAAO,UAAU,IAAI,IAAI,KAAK,EAAE,gBAAgB,GAAG,CAAC;CAC7E,OAAO;AACT;;AAGA,SAAgB,SAAS,GAAyD;CAChF,OAAO,EAAE,UAAU,SAAS,EAAE,SAAS,EAAE;AAC3C;;AASA,SAAgB,aAAa,MAAe,OAAwB,GAA2B;CAC7F,MAAM,SAAS,eAAe,CAAC,CAAC;CAChC,MAAM,MAAM,OAAO,KAAK,GAAG,KAAK;CAChC,MAAM,MAAM,GAAG,IAAI,QAAQ,EAAE,KAAK;CAElC,MAAM,CAAC,QAAQ,aAAa,MAAM,SAAwD,IAAI;CAC9F,MAAM,gBAAgB;EACpB,IAAI,CAAC,UAAU,CAAC,MAAM;EACtB,MAAM,MAAM,IAAI,gBAAgB;EAChC,MAAM,IAAI,OAAO,iBAAiB;GAChC,OAAO;IAAE,OAAO,MAAM,IAAI,MAAM,GAAG,IAAI;IAAM,GAAG,EAAE,KAAK;IAAG,QAAQ,IAAI;GAAO,CAAC,CAAC,CAAC,MAC7E,YAAY,CAAC,IAAI,OAAO,WAAW,UAAU;IAAE;IAAK,OAAO;KAAE,QAAQ;KAAS;IAAQ;GAAE,CAAC,IACzF,MAAe,CAAC,IAAI,OAAO,WAAW,UAAU;IAAE;IAAK,OAAO;KAAE,QAAQ;KAAS,SAAS,aAAa,SAAS,EAAE,UAAU,EAAE,UAAU;IAA6B;GAAE,CAAC,CAC3K;EACF,GAAG,GAAG;EACN,aAAa;GACX,IAAI,MAAM;GACV,OAAO,aAAa,CAAC;EACvB;CACF,GAAG;EAAC;EAAQ;EAAM;EAAK;EAAG;CAAG,CAAC;CAC9B,IAAI,CAAC,QAAQ,OAAO,EAAE,QAAQ,cAAc;CAC5C,OAAO,QAAQ,QAAQ,MAAM,OAAO,QAAQ,EAAE,QAAQ,UAAU;AAClE"}
@@ -1,5 +1,5 @@
1
1
  import { TABLE_COLUMN_TYPES, isTableValue } from "../../schema/table.js";
2
- //#region src/kit/controls/table/stored.ts
2
+ //#region src/controls/table/stored.ts
3
3
  /**
4
4
  * The table value as the backend stores it (BE `packages/types/src/table-value.ts`, a `table` field or a `table` prop with
5
5
  * `config.mode: "data"`). The editor works on `normalizeTable(value)`, which fills keys the stored value may not have
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stored.js","names":[],"sources":["../../../src/controls/table/stored.ts"],"sourcesContent":["/**\n * The table value as the backend stores it (BE `packages/types/src/table-value.ts`, a `table` field or a `table` prop with\n * `config.mode: \"data\"`). The editor works on `normalizeTable(value)`, which fills keys the stored value may not have\n * (`id`, empty `columnGroups` / `rowGroups` / `footnotes`). Writing those back would change a value nobody edited, so\n * `storedTable` hands back exactly what the person changed:\n *\n * - keys normalize invented (an `id`, an empty list the stored value did not carry) are dropped again;\n * - `undefined` keys (a switch turned off: `highlight`, `sortable`, `notes`…) are removed, as JSON would remove them;\n * - a reference cell's `resolved` (what a read writes onto it) is never written back (BE normalizeTableValue drops it too).\n *\n * The backend refuses any key it does not know (`table_value_invalid`), so nothing else is added here.\n */\nimport { TABLE_COLUMN_TYPES, isTableValue, type TableValue } from \"../../schema/table\";\n\nconst LISTS = [\"columnGroups\", \"rowGroups\", \"footnotes\"] as const;\n\n/** A JSON copy without `undefined` keys (what the save would send), and without a reference cell's read-only `resolved`. */\nfunction plain<T>(v: T): T {\n return JSON.parse(JSON.stringify(v, (k, x) => (k === \"resolved\" ? undefined : x))) as T;\n}\n\n/** `next` as the backend stores it, given the value it was loaded from (`prev`; undefined for a new table). */\nexport function storedTable(next: TableValue, prev: unknown): TableValue {\n const out = plain(next) as TableValue & Record<string, unknown>;\n const was = isTableValue(prev) ? (prev as unknown as Record<string, unknown>) : null;\n if (was) {\n if (!(\"id\" in was) && out.id !== undefined) delete out.id;\n for (const k of LISTS) if (!(k in was) && Array.isArray(out[k]) && (out[k] as unknown[]).length === 0) delete out[k];\n // normalize reads a column type it does not know (or none) as \"text\": unless the person picked another type, the\n // stored one is written back as it was\n const prevCols = new Map((Array.isArray(was.columns) ? was.columns : []).filter((c): c is Record<string, unknown> => !!c && typeof c === \"object\").map((c) => [c._key, c] as const));\n for (const col of out.columns as unknown as Record<string, unknown>[]) {\n const p = prevCols.get(col._key);\n if (!p || col.type !== \"text\" || TABLE_COLUMN_TYPES.some((t) => t.value === p.type)) continue;\n if (p.type === undefined) delete col.type;\n else col.type = p.type;\n }\n } else {\n for (const k of LISTS) if (Array.isArray(out[k]) && (out[k] as unknown[]).length === 0) delete out[k];\n }\n return out;\n}\n"],"mappings":";;;;;;;;;;;;;;AAcA,IAAM,QAAQ;CAAC;CAAgB;CAAa;AAAW;;AAGvD,SAAS,MAAS,GAAS;CACzB,OAAO,KAAK,MAAM,KAAK,UAAU,IAAI,GAAG,MAAO,MAAM,aAAa,KAAA,IAAY,CAAE,CAAC;AACnF;;AAGA,SAAgB,YAAY,MAAkB,MAA2B;CACvE,MAAM,MAAM,MAAM,IAAI;CACtB,MAAM,MAAM,aAAa,IAAI,IAAK,OAA8C;CAChF,IAAI,KAAK;EACP,IAAI,EAAE,QAAQ,QAAQ,IAAI,OAAO,KAAA,GAAW,OAAO,IAAI;EACvD,KAAK,MAAM,KAAK,OAAO,IAAI,EAAE,KAAK,QAAQ,MAAM,QAAQ,IAAI,EAAE,KAAM,IAAI,EAAE,CAAe,WAAW,GAAG,OAAO,IAAI;EAGlH,MAAM,WAAW,IAAI,KAAK,MAAM,QAAQ,IAAI,OAAO,IAAI,IAAI,UAAU,CAAC,EAAA,CAAG,QAAQ,MAAoC,CAAC,CAAC,KAAK,OAAO,MAAM,QAAQ,CAAC,CAAC,KAAK,MAAM,CAAC,EAAE,MAAM,CAAC,CAAU,CAAC;EACnL,KAAK,MAAM,OAAO,IAAI,SAAiD;GACrE,MAAM,IAAI,SAAS,IAAI,IAAI,IAAI;GAC/B,IAAI,CAAC,KAAK,IAAI,SAAS,UAAU,mBAAmB,MAAM,MAAM,EAAE,UAAU,EAAE,IAAI,GAAG;GACrF,IAAI,EAAE,SAAS,KAAA,GAAW,OAAO,IAAI;QAChC,IAAI,OAAO,EAAE;EACpB;CACF,OACE,KAAK,MAAM,KAAK,OAAO,IAAI,MAAM,QAAQ,IAAI,EAAE,KAAM,IAAI,EAAE,CAAe,WAAW,GAAG,OAAO,IAAI;CAErG,OAAO;AACT"}
@@ -1,11 +1,11 @@
1
+ import { GENERAL_TABLE, boolLabels, cellNote, cellText, cellType, cellValue, coerce, isCellObject, isEmptyCell, isObjLike, normalizeTable, orderedRows, parseDelimited, parseTableElement, pasteRange, tableFromRows, tableToRows, tkey, toBool, toNumber, withValue } from "../../schema/table.js";
1
2
  import { cn } from "../../lib/cn.js";
2
3
  import { useKitServices } from "../../context.js";
3
4
  import { Button, IconButton } from "../../ui/button.js";
4
5
  import { Segmented, Switch } from "../../ui/controls.js";
5
6
  import { Menu, MenuCheckItem, MenuContent, MenuItem, MenuRadioGroup, MenuRadioItem, MenuSeparator, MenuSub, MenuSubContent, MenuSubTrigger, MenuTrigger, Popover, PopoverAnchor, PopoverContent } from "../../ui/overlay.js";
6
- import { GENERAL_TABLE, boolLabels, cellNote, cellText, cellType, cellValue, coerce, isCellObject, isEmptyCell, isObjLike, normalizeTable, orderedRows, parseDelimited, parseTableElement, pasteRange, tableFromRows, tableToRows, tkey, toBool, toNumber, withValue } from "../../schema/table.js";
7
- import { Input, Textarea } from "../../ui/input.js";
8
7
  import { FieldSection, FieldUnit, FieldUnitRow } from "../../engine/grouping.js";
8
+ import { Input, Textarea } from "../../ui/input.js";
9
9
  import { Select } from "../../ui/select.js";
10
10
  import { LinkField, hrefOf, linkText, normLink } from "../link.js";
11
11
  import { SharedSortProvider, useSharedSort } from "../../engine/item-list.js";
@@ -16,10 +16,10 @@ import { ChoiceSwitch } from "../../ui/choice-switch.js";
16
16
  import { LinkAddressButton, isScriptHref, tableLink } from "./table-link.js";
17
17
  import { refLabel, useRefSearch } from "./refs.js";
18
18
  import * as React from "react";
19
- import { IconAlignLeft, IconArrowDown, IconArrowUp, IconArrowsMaximize, IconCheck, IconChevronDown, IconCurrencyDollar, IconDots, IconFileDatabase, IconFolder, IconGripVertical, IconHash, IconLayoutColumns, IconLetterT, IconLink, IconList, IconPlus, IconStar, IconTable, IconToggleRight } from "@tabler/icons-react";
20
19
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
20
+ import { IconAlignLeft, IconArrowDown, IconArrowUp, IconArrowsMaximize, IconCheck, IconChevronDown, IconCurrencyDollar, IconDots, IconFileDatabase, IconFolder, IconGripVertical, IconHash, IconLayoutColumns, IconLetterT, IconLink, IconList, IconPlus, IconStar, IconTable, IconToggleRight } from "@tabler/icons-react";
21
21
  import { ContextMenu } from "@base-ui/react/context-menu";
22
- //#region src/kit/controls/table/table-editor.tsx
22
+ //#region src/controls/table/table-editor.tsx
23
23
  /**
24
24
  * TABLE EDITOR (CPO D42, D49, D50, D52; port of V2 src/components/table/table-editor.tsx) — calm by default.
25
25
  *
@@ -93,8 +93,6 @@ var TypeIcon = ({ type, className }) => {
93
93
  "aria-hidden": true
94
94
  });
95
95
  };
96
- /** A ⋯ trigger: shown on hover / focus of its group, always on touch. */
97
- var DOTS = "flex size-6 shrink-0 items-center justify-center rounded-kit-md text-kit-fg-3 outline-none hover:bg-kit-hover hover:text-kit-fg data-[popup-open]:bg-kit-hover data-[popup-open]:text-kit-fg";
98
96
  var mapRow = (key, f) => (t) => ({
99
97
  ...t,
100
98
  rows: t.rows.map((r) => r._key === key ? f(r) : r)
@@ -512,7 +510,7 @@ function Grid({ ctx, label, full }) {
512
510
  };
513
511
  return /* @__PURE__ */ jsxs("div", {
514
512
  ref: host,
515
- className: cn("min-w-0 overflow-x-auto rounded-kit-lg border border-kit-line bg-kit-surface", full && "max-h-full min-h-0 flex-1 overflow-auto"),
513
+ className: cn("min-w-0 overflow-x-auto rounded-kit-lg border border-kit-field-border bg-kit-surface", full && "max-h-full min-h-0 flex-1 overflow-auto"),
516
514
  "data-full": full ? "" : void 0,
517
515
  children: [
518
516
  /* @__PURE__ */ jsxs("table", {
@@ -781,8 +779,9 @@ function GridCell({ ctx, row, col, r, c, onMove, onPaste, full }) {
781
779
  ]
782
780
  });
783
781
  }
782
+ const cls = cn("relative border-l border-t border-kit-line p-0 align-top", head && "bg-[var(--kit-subtle-2)]", full && c === 0 && "sticky left-8 z-[1] bg-kit-surface", row.highlight && "bg-kit-accent-softer", col.highlight && "bg-kit-subtle");
784
783
  return /* @__PURE__ */ jsxs("td", {
785
- className: cn("relative border-l border-t border-kit-line p-0 align-top", head && "bg-[var(--kit-subtle-2)]", full && c === 0 && "sticky left-8 z-[1] bg-kit-surface", row.highlight && "bg-kit-accent-softer", col.highlight && "bg-kit-subtle"),
784
+ className: cls,
786
785
  children: [readOnly ? body : /* @__PURE__ */ jsx(CellMenu, {
787
786
  ctx,
788
787
  row,
@@ -1040,13 +1039,13 @@ function ColumnMenu({ ctx, col, index, onInsert, children }) {
1040
1039
  open,
1041
1040
  onOpenChange: setOpen,
1042
1041
  children: [/* @__PURE__ */ jsx(MenuTrigger, {
1043
- tabIndex: -1,
1044
- "aria-label": `Options for column ${col.label || index + 1}`,
1045
- className: cn(DOTS, "opacity-0 focus-visible:opacity-100 group-hover/col:opacity-100 group-focus-within/col:opacity-100 data-[popup-open]:opacity-100 [@media(pointer:coarse)]:opacity-100"),
1046
- children: /* @__PURE__ */ jsx(IconDots, {
1047
- className: "size-3.5",
1048
- stroke: 1.5
1049
- })
1042
+ render: /* @__PURE__ */ jsx(IconButton, {
1043
+ size: "xs",
1044
+ tabIndex: -1,
1045
+ label: `Options for column ${col.label || index + 1}`,
1046
+ className: "shrink-0 opacity-0 focus-visible:opacity-100 group-hover/col:opacity-100 group-focus-within/col:opacity-100 data-[popup-open]:opacity-100 [@media(pointer:coarse)]:opacity-100"
1047
+ }),
1048
+ children: /* @__PURE__ */ jsx(IconDots, { stroke: 1.5 })
1050
1049
  }), /* @__PURE__ */ jsxs(MenuContent, {
1051
1050
  align: "end",
1052
1051
  className: "min-w-52",
@@ -1274,15 +1273,15 @@ function RowMenu({ ctx, row, index, count, onInsert, children }) {
1274
1273
  ctx.undoable("Row deleted", prev);
1275
1274
  };
1276
1275
  const groups = offered(ctx.options).groups ? t.rowGroups ?? [] : [];
1277
- return /* @__PURE__ */ jsxs(Menu, { children: [children(/* @__PURE__ */ jsx(MenuTrigger, {
1278
- tabIndex: -1,
1279
- "aria-label": `Options for row ${index + 1}`,
1280
- className: DOTS,
1281
- children: /* @__PURE__ */ jsx(IconDots, {
1282
- className: "size-3.5",
1283
- stroke: 1.5
1284
- })
1285
- })), /* @__PURE__ */ jsxs(MenuContent, {
1276
+ const trigger = /* @__PURE__ */ jsx(MenuTrigger, {
1277
+ render: /* @__PURE__ */ jsx(IconButton, {
1278
+ size: "xs",
1279
+ tabIndex: -1,
1280
+ label: `Options for row ${index + 1}`
1281
+ }),
1282
+ children: /* @__PURE__ */ jsx(IconDots, { stroke: 1.5 })
1283
+ });
1284
+ return /* @__PURE__ */ jsxs(Menu, { children: [children(trigger), /* @__PURE__ */ jsxs(MenuContent, {
1286
1285
  className: "min-w-52",
1287
1286
  children: [
1288
1287
  /* @__PURE__ */ jsx(MenuItem, {
@@ -1360,7 +1359,8 @@ function CellMenu({ ctx, row, col, cell, onWrite, onNote, children }) {
1360
1359
  const asText = own === "text";
1361
1360
  const atMax = !!ctx.options.maxRows && !row.footer && t.rows.filter((r) => !r.footer).length >= ctx.options.maxRows;
1362
1361
  const setOwn = (type) => {
1363
- const value = coerce(cellText(col, row, cell, ctx.resolveRef), {
1362
+ const raw = cellText(col, row, cell, ctx.resolveRef);
1363
+ const value = coerce(raw, {
1364
1364
  type: type ?? colType,
1365
1365
  max: col.max
1366
1366
  });
@@ -1971,15 +1971,18 @@ function RowsPart({ ctx, basePath, onOpen }) {
1971
1971
  role: "group",
1972
1972
  "aria-label": run.totals ? "Totals" : run.group.label || "Untitled group",
1973
1973
  className: "flex flex-col gap-1.5",
1974
- children: [run.totals ? /* @__PURE__ */ jsx("span", {
1975
- className: "flex h-7 items-center px-0.5 text-kit-sm font-medium text-kit-fg-2",
1976
- children: "Totals"
1977
- }) : /* @__PURE__ */ jsx(GroupHeading, {
1978
- ctx,
1979
- group: run.group,
1980
- index: groups.indexOf(run.group),
1981
- count: groups.length,
1982
- rows: run.items.length
1974
+ children: [/* @__PURE__ */ jsx("div", {
1975
+ className: "rounded-kit-md transition-colors",
1976
+ children: run.totals ? /* @__PURE__ */ jsx("span", {
1977
+ className: "flex h-7 items-center px-0.5 text-kit-sm font-medium text-kit-fg-2",
1978
+ children: "Totals"
1979
+ }) : /* @__PURE__ */ jsx(GroupHeading, {
1980
+ ctx,
1981
+ group: run.group,
1982
+ index: groups.indexOf(run.group),
1983
+ count: groups.length,
1984
+ rows: run.items.length
1985
+ })
1983
1986
  }), /* @__PURE__ */ jsx("div", {
1984
1987
  className: "ml-1.5 border-l border-kit-line pl-3",
1985
1988
  children: list
@@ -2045,14 +2048,14 @@ function GroupHeading({ ctx, group, index, count, rows }) {
2045
2048
  setDraft(group.label);
2046
2049
  }
2047
2050
  },
2048
- className: "-mx-0.5 h-7 min-w-0 flex-1 truncate rounded-kit-md bg-transparent px-0.5 text-kit-sm font-medium text-kit-fg-2 outline-none transition-colors placeholder:font-normal placeholder:text-kit-fg-4 hover:bg-kit-hover focus:bg-kit-surface focus:px-2 focus:text-kit-fg focus:shadow-[inset_0_0_0_1px_var(--kit-line-strong)]"
2051
+ className: "-mx-0.5 h-7 min-w-0 flex-1 truncate rounded-kit-md bg-transparent px-0.5 text-[13px] font-medium text-kit-fg-2 outline-none transition-colors placeholder:font-normal placeholder:text-kit-fg-4 hover:bg-kit-hover focus:bg-kit-surface focus:px-2 focus:text-kit-fg focus:shadow-[inset_0_0_0_1px_var(--kit-line-strong)]"
2049
2052
  }), readOnly ? null : /* @__PURE__ */ jsxs(Menu, { children: [/* @__PURE__ */ jsx(MenuTrigger, {
2050
- "aria-label": `Options for ${group.label || "this group"}`,
2051
- className: cn(DOTS, "size-7 opacity-0 focus-visible:opacity-100 group-hover/gh:opacity-100 group-focus-within/gh:opacity-100 data-[popup-open]:opacity-100 [@media(pointer:coarse)]:opacity-100"),
2052
- children: /* @__PURE__ */ jsx(IconDots, {
2053
- className: "size-4",
2054
- stroke: 1.5
2055
- })
2053
+ render: /* @__PURE__ */ jsx(IconButton, {
2054
+ size: "xs",
2055
+ label: `Options for ${group.label || "this group"}`,
2056
+ className: "opacity-0 focus-visible:opacity-100 group-hover/gh:opacity-100 group-focus-within/gh:opacity-100 data-[popup-open]:opacity-100 [@media(pointer:coarse)]:opacity-100"
2057
+ }),
2058
+ children: /* @__PURE__ */ jsx(IconDots, { stroke: 1.5 })
2056
2059
  }), /* @__PURE__ */ jsxs(MenuContent, {
2057
2060
  align: "end",
2058
2061
  className: "min-w-44",
@@ -2336,12 +2339,12 @@ function CellField({ ctx, row, col, ci, needsName, onWrite }) {
2336
2339
  }) : null,
2337
2340
  /* @__PURE__ */ jsx("span", { className: "flex-1" }),
2338
2341
  canWords || canNote || !readOnly && !isEmptyCell(v) ? /* @__PURE__ */ jsxs(Menu, { children: [/* @__PURE__ */ jsx(MenuTrigger, {
2339
- "aria-label": `Options for ${name}`,
2340
- className: cn(DOTS, "-my-1 opacity-0 focus-visible:opacity-100 group-hover/cell:opacity-100 group-focus-within/cell:opacity-100 data-[popup-open]:opacity-100 [@media(pointer:coarse)]:opacity-100"),
2341
- children: /* @__PURE__ */ jsx(IconDots, {
2342
- className: "size-3.5",
2343
- stroke: 1.5
2344
- })
2342
+ render: /* @__PURE__ */ jsx(IconButton, {
2343
+ size: "xs",
2344
+ label: `Options for ${name}`,
2345
+ className: "-my-1 opacity-0 focus-visible:opacity-100 group-hover/cell:opacity-100 group-focus-within/cell:opacity-100 data-[popup-open]:opacity-100 [@media(pointer:coarse)]:opacity-100"
2346
+ }),
2347
+ children: /* @__PURE__ */ jsx(IconDots, { stroke: 1.5 })
2345
2348
  }), /* @__PURE__ */ jsxs(MenuContent, {
2346
2349
  align: "end",
2347
2350
  className: "min-w-52",
@@ -2717,6 +2720,6 @@ function TableSettings({ ctx }) {
2717
2720
  }
2718
2721
  var dropUndefined = (o) => Object.fromEntries(Object.entries(o).filter(([, v]) => v !== void 0));
2719
2722
  //#endregion
2720
- export { TableEditor, TableFullScreenButton, TableItemEditor };
2723
+ export { TYPE_UI, TableEditor, TableFullScreenButton, TableItemEditor, linkNote, moveRowTo, offered, retype, setTotals, typedCell, unlinkNote };
2721
2724
 
2722
2725
  //# sourceMappingURL=table-editor.js.map