@bettercms-ai/kit 0.1.0 → 1.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 (947) hide show
  1. package/_virtual/_rolldown/runtime.js +13 -0
  2. package/adapters/icons.d.ts +15 -0
  3. package/adapters/icons.js +27 -0
  4. package/adapters/icons.js.map +1 -0
  5. package/adapters/lossy.d.ts +267 -0
  6. package/adapters/lossy.js +233 -0
  7. package/adapters/lossy.js.map +1 -0
  8. package/adapters/prod-types.d.ts +468 -0
  9. package/adapters/prod-types.js +646 -0
  10. package/adapters/prod-types.js.map +1 -0
  11. package/adapters/schema.d.ts +115 -0
  12. package/adapters/schema.js +2203 -0
  13. package/adapters/schema.js.map +1 -0
  14. package/adapters/values.d.ts +200 -0
  15. package/adapters/values.js +553 -0
  16. package/adapters/values.js.map +1 -0
  17. package/brand/logo.d.ts +17 -0
  18. package/brand/logo.js +9 -0
  19. package/brand/logo.js.map +1 -0
  20. package/context.d.ts +269 -0
  21. package/context.js +214 -0
  22. package/context.js.map +1 -0
  23. package/controls/button.d.ts +58 -0
  24. package/controls/button.js +507 -0
  25. package/controls/button.js.map +1 -0
  26. package/controls/c1.d.ts +11 -0
  27. package/controls/c1.js +24 -0
  28. package/controls/c1.js.map +1 -0
  29. package/controls/c2.d.ts +10 -0
  30. package/controls/c2.js +19 -0
  31. package/controls/c2.js.map +1 -0
  32. package/controls/choice.d.ts +39 -0
  33. package/controls/choice.js +410 -0
  34. package/controls/choice.js.map +1 -0
  35. package/controls/code-register.d.ts +1 -0
  36. package/controls/code-register.js +8 -0
  37. package/controls/code-register.js.map +1 -0
  38. package/controls/code.d.ts +42 -0
  39. package/controls/code.js +396 -0
  40. package/controls/code.js.map +1 -0
  41. package/controls/color.d.ts +5 -0
  42. package/controls/color.js +130 -0
  43. package/controls/color.js.map +1 -0
  44. package/controls/component-services.d.ts +114 -0
  45. package/controls/date-register.d.ts +1 -0
  46. package/controls/date-register.js +9 -0
  47. package/controls/date-register.js.map +1 -0
  48. package/controls/date-zone.d.ts +104 -0
  49. package/controls/date-zone.js +272 -0
  50. package/controls/date-zone.js.map +1 -0
  51. package/controls/date.d.ts +7 -0
  52. package/controls/date.js +458 -0
  53. package/controls/date.js.map +1 -0
  54. package/controls/form-picker-register.d.ts +1 -0
  55. package/controls/form-picker-register.js +19 -0
  56. package/controls/form-picker-register.js.map +1 -0
  57. package/controls/form-picker.d.ts +43 -0
  58. package/controls/form-picker.js +83 -0
  59. package/controls/form-picker.js.map +1 -0
  60. package/controls/icon-register.d.ts +1 -0
  61. package/controls/icon-register.js +8 -0
  62. package/controls/icon-register.js.map +1 -0
  63. package/controls/icon.d.ts +38 -0
  64. package/controls/icon.js +355 -0
  65. package/controls/icon.js.map +1 -0
  66. package/controls/index.d.ts +5 -0
  67. package/controls/index.js +37 -0
  68. package/controls/index.js.map +1 -0
  69. package/controls/json-register.d.ts +1 -0
  70. package/controls/json-register.js +8 -0
  71. package/controls/json-register.js.map +1 -0
  72. package/controls/json.d.ts +2 -0
  73. package/controls/json.js +72 -0
  74. package/controls/json.js.map +1 -0
  75. package/controls/link.d.ts +260 -0
  76. package/controls/link.js +1186 -0
  77. package/controls/link.js.map +1 -0
  78. package/controls/location-register.d.ts +1 -0
  79. package/controls/location-register.js +8 -0
  80. package/controls/location-register.js.map +1 -0
  81. package/controls/location.d.ts +16 -0
  82. package/controls/location.js +197 -0
  83. package/controls/location.js.map +1 -0
  84. package/controls/media-register.d.ts +1 -0
  85. package/controls/media-register.js +12 -0
  86. package/controls/media-register.js.map +1 -0
  87. package/controls/media-services.d.ts +40 -0
  88. package/controls/media.d.ts +73 -0
  89. package/controls/media.js +1076 -0
  90. package/controls/media.js.map +1 -0
  91. package/controls/number.d.ts +22 -0
  92. package/controls/number.js +195 -0
  93. package/controls/number.js.map +1 -0
  94. package/controls/reference-register.d.ts +1 -0
  95. package/controls/reference-register.js +10 -0
  96. package/controls/reference-register.js.map +1 -0
  97. package/controls/reference-services.d.ts +54 -0
  98. package/controls/reference.d.ts +23 -0
  99. package/controls/reference.js +761 -0
  100. package/controls/reference.js.map +1 -0
  101. package/controls/rich-text/blocks.d.ts +28 -0
  102. package/controls/rich-text/blocks.js +1532 -0
  103. package/controls/rich-text/blocks.js.map +1 -0
  104. package/controls/rich-text/catalog.d.ts +98 -0
  105. package/controls/rich-text/catalog.js +613 -0
  106. package/controls/rich-text/catalog.js.map +1 -0
  107. package/controls/rich-text/codec.d.ts +56 -0
  108. package/controls/rich-text/codec.js +32 -0
  109. package/controls/rich-text/codec.js.map +1 -0
  110. package/controls/rich-text/component-card.d.ts +14 -0
  111. package/controls/rich-text/component-card.js +706 -0
  112. package/controls/rich-text/component-card.js.map +1 -0
  113. package/controls/rich-text/control.d.ts +21 -0
  114. package/controls/rich-text/control.js +254 -0
  115. package/controls/rich-text/control.js.map +1 -0
  116. package/controls/rich-text/dom.d.ts +190 -0
  117. package/controls/rich-text/dom.js +690 -0
  118. package/controls/rich-text/dom.js.map +1 -0
  119. package/controls/rich-text/editor.d.ts +50 -0
  120. package/controls/rich-text/editor.js +1530 -0
  121. package/controls/rich-text/editor.js.map +1 -0
  122. package/controls/rich-text/floating.d.ts +23 -0
  123. package/controls/rich-text/floating.js +137 -0
  124. package/controls/rich-text/floating.js.map +1 -0
  125. package/controls/rich-text/index.d.ts +1 -0
  126. package/controls/rich-text/index.js +12 -0
  127. package/controls/rich-text/index.js.map +1 -0
  128. package/controls/rich-text/link-form.d.ts +13 -0
  129. package/controls/rich-text/link-form.js +111 -0
  130. package/controls/rich-text/link-form.js.map +1 -0
  131. package/controls/rich-text/markdown.d.ts +6 -0
  132. package/controls/rich-text/markdown.js +179 -0
  133. package/controls/rich-text/markdown.js.map +1 -0
  134. package/controls/rich-text/ops.d.ts +35 -0
  135. package/controls/rich-text/ops.js +314 -0
  136. package/controls/rich-text/ops.js.map +1 -0
  137. package/controls/rich-text/toolbar.d.ts +85 -0
  138. package/controls/rich-text/toolbar.js +338 -0
  139. package/controls/rich-text/toolbar.js.map +1 -0
  140. package/controls/scale.d.ts +56 -0
  141. package/controls/scale.js +563 -0
  142. package/controls/scale.js.map +1 -0
  143. package/controls/slot-register.d.ts +1 -0
  144. package/controls/slot-register.js +16 -0
  145. package/controls/slot-register.js.map +1 -0
  146. package/controls/slot-services.d.ts +97 -0
  147. package/controls/slot-services.js +38 -0
  148. package/controls/slot-services.js.map +1 -0
  149. package/controls/slot.d.ts +33 -0
  150. package/controls/slot.js +348 -0
  151. package/controls/slot.js.map +1 -0
  152. package/controls/table/index.d.ts +1 -0
  153. package/controls/table/index.js +12 -0
  154. package/controls/table/index.js.map +1 -0
  155. package/controls/table/prod.d.ts +21 -0
  156. package/controls/table/prod.js +79 -0
  157. package/controls/table/prod.js.map +1 -0
  158. package/controls/table/refs.d.ts +50 -0
  159. package/controls/table/refs.js +68 -0
  160. package/controls/table/refs.js.map +1 -0
  161. package/controls/table/stored.d.ts +15 -0
  162. package/controls/table/stored.js +44 -0
  163. package/controls/table/stored.js.map +1 -0
  164. package/controls/table/table-editor.d.ts +103 -0
  165. package/controls/table/table-editor.js +2722 -0
  166. package/controls/table/table-editor.js.map +1 -0
  167. package/controls/table/table-link.d.ts +24 -0
  168. package/controls/table/table-link.js +180 -0
  169. package/controls/table/table-link.js.map +1 -0
  170. package/controls/table/table.d.ts +9 -0
  171. package/controls/table/table.js +103 -0
  172. package/controls/table/table.js.map +1 -0
  173. package/controls/text.d.ts +17 -0
  174. package/controls/text.js +287 -0
  175. package/controls/text.js.map +1 -0
  176. package/engine/array.d.ts +101 -0
  177. package/engine/array.js +893 -0
  178. package/engine/array.js.map +1 -0
  179. package/engine/bits.d.ts +24 -0
  180. package/engine/bits.js +60 -0
  181. package/engine/bits.js.map +1 -0
  182. package/engine/breadcrumb.d.ts +45 -0
  183. package/engine/breadcrumb.js +87 -0
  184. package/engine/breadcrumb.js.map +1 -0
  185. package/engine/expand.d.ts +68 -0
  186. package/engine/expand.js +170 -0
  187. package/engine/expand.js.map +1 -0
  188. package/engine/field-list.d.ts +20 -0
  189. package/engine/field-list.js +19 -0
  190. package/engine/field-list.js.map +1 -0
  191. package/engine/field-shell.d.ts +49 -0
  192. package/engine/field-shell.js +860 -0
  193. package/engine/field-shell.js.map +1 -0
  194. package/engine/frame.d.ts +120 -0
  195. package/engine/frame.js +599 -0
  196. package/engine/frame.js.map +1 -0
  197. package/engine/group-summary.d.ts +4 -0
  198. package/engine/group-summary.js +66 -0
  199. package/engine/group-summary.js.map +1 -0
  200. package/engine/grouping.d.ts +224 -0
  201. package/engine/grouping.js +824 -0
  202. package/engine/grouping.js.map +1 -0
  203. package/engine/item-list.d.ts +89 -0
  204. package/engine/item-list.js +703 -0
  205. package/engine/item-list.js.map +1 -0
  206. package/engine/kit-field.d.ts +72 -0
  207. package/engine/kit-field.js +523 -0
  208. package/engine/kit-field.js.map +1 -0
  209. package/engine/schema-form.d.ts +91 -0
  210. package/engine/schema-form.js +320 -0
  211. package/engine/schema-form.js.map +1 -0
  212. package/engine/slot.d.ts +13 -0
  213. package/engine/slot.js +226 -0
  214. package/engine/slot.js.map +1 -0
  215. package/index.d.ts +46 -0
  216. package/index.js +55 -0
  217. package/index.js.map +1 -0
  218. package/kit.css +56 -0
  219. package/lib/cn.d.ts +4 -0
  220. package/lib/cn.js +53 -0
  221. package/lib/cn.js.map +1 -0
  222. package/lib/columns.d.ts +14 -0
  223. package/lib/columns.js +27 -0
  224. package/lib/columns.js.map +1 -0
  225. package/lib/frames.d.ts +36 -0
  226. package/lib/frames.js +214 -0
  227. package/lib/frames.js.map +1 -0
  228. package/lib/icons.d.ts +16 -0
  229. package/lib/icons.js +172 -0
  230. package/lib/icons.js.map +1 -0
  231. package/lib/path.d.ts +29 -0
  232. package/lib/path.js +64 -0
  233. package/lib/path.js.map +1 -0
  234. package/lib/schema.d.ts +49 -0
  235. package/lib/schema.js +287 -0
  236. package/lib/schema.js.map +1 -0
  237. package/lib/utils.d.ts +7 -0
  238. package/lib/utils.js +37 -0
  239. package/lib/utils.js.map +1 -0
  240. package/lib/validate.d.ts +20 -0
  241. package/lib/validate.js +150 -0
  242. package/lib/validate.js.map +1 -0
  243. package/package.json +31 -59
  244. package/schema/adapters.d.ts +28 -0
  245. package/schema/adapters.js +493 -0
  246. package/schema/adapters.js.map +1 -0
  247. package/schema/help.d.ts +25 -0
  248. package/schema/help.js +54 -0
  249. package/schema/help.js.map +1 -0
  250. package/schema/scale.d.ts +69 -0
  251. package/schema/scale.js +250 -0
  252. package/schema/scale.js.map +1 -0
  253. package/schema/sources.d.ts +103 -0
  254. package/schema/sources.js +65 -0
  255. package/schema/sources.js.map +1 -0
  256. package/schema/table.d.ts +319 -0
  257. package/schema/table.js +1198 -0
  258. package/schema/table.js.map +1 -0
  259. package/schema/types.d.ts +269 -0
  260. package/schema/types.js +14 -0
  261. package/schema/types.js.map +1 -0
  262. package/types.d.ts +17 -0
  263. package/ui/action-tray.d.ts +54 -0
  264. package/ui/action-tray.js +153 -0
  265. package/ui/action-tray.js.map +1 -0
  266. package/ui/button.d.ts +57 -0
  267. package/ui/button.js +202 -0
  268. package/ui/button.js.map +1 -0
  269. package/ui/choice-switch.d.ts +36 -0
  270. package/ui/choice-switch.js +57 -0
  271. package/ui/choice-switch.js.map +1 -0
  272. package/ui/controls.d.ts +83 -0
  273. package/ui/controls.js +319 -0
  274. package/ui/controls.js.map +1 -0
  275. package/ui/display.d.ts +156 -0
  276. package/ui/display.js +444 -0
  277. package/ui/display.js.map +1 -0
  278. package/ui/expanded-editor-modal.d.ts +26 -0
  279. package/ui/expanded-editor-modal.js +140 -0
  280. package/ui/expanded-editor-modal.js.map +1 -0
  281. package/ui/field-context.d.ts +12 -0
  282. package/ui/field-context.js +23 -0
  283. package/ui/field-context.js.map +1 -0
  284. package/ui/floating-panel.d.ts +152 -0
  285. package/ui/floating-panel.js +912 -0
  286. package/ui/floating-panel.js.map +1 -0
  287. package/ui/index.d.ts +12 -0
  288. package/ui/index.js +13 -0
  289. package/ui/input.d.ts +78 -0
  290. package/ui/input.js +250 -0
  291. package/ui/input.js.map +1 -0
  292. package/ui/mode-bar.d.ts +31 -0
  293. package/ui/mode-bar.js +65 -0
  294. package/ui/mode-bar.js.map +1 -0
  295. package/ui/overlay.d.ts +123 -0
  296. package/ui/overlay.js +378 -0
  297. package/ui/overlay.js.map +1 -0
  298. package/ui/path-crumbs.d.ts +90 -0
  299. package/ui/path-crumbs.js +532 -0
  300. package/ui/path-crumbs.js.map +1 -0
  301. package/ui/presence.d.ts +16 -0
  302. package/ui/presence.js +65 -0
  303. package/ui/presence.js.map +1 -0
  304. package/ui/select.d.ts +66 -0
  305. package/ui/select.js +405 -0
  306. package/ui/select.js.map +1 -0
  307. package/ui/shortcut-hint.d.ts +14 -0
  308. package/ui/shortcut-hint.js +35 -0
  309. package/ui/shortcut-hint.js.map +1 -0
  310. package/ui/surfaces.d.ts +23 -0
  311. package/ui/surfaces.js +26 -0
  312. package/ui/surfaces.js.map +1 -0
  313. package/ui/tooltip-root.d.ts +12 -0
  314. package/ui/tooltip-root.js +76 -0
  315. package/ui/tooltip-root.js.map +1 -0
  316. package/ui/variants.d.ts +15 -0
  317. package/ui/variants.js +14 -0
  318. package/ui/variants.js.map +1 -0
  319. package/LICENSE +0 -21
  320. package/README.md +0 -27
  321. package/dist/_chunks-cjs/_visual-editing.js +0 -5898
  322. package/dist/_chunks-cjs/refractor.js +0 -22
  323. package/dist/_chunks-es/_visual-editing.mjs +0 -5904
  324. package/dist/_chunks-es/refractor.mjs +0 -25
  325. package/dist/_color.d.mts +0 -119
  326. package/dist/_color.d.ts +0 -119
  327. package/dist/_color.js +0 -1412
  328. package/dist/_color.mjs +0 -1411
  329. package/dist/_visual-editing.d.mts +0 -1126
  330. package/dist/_visual-editing.d.ts +0 -1126
  331. package/dist/_visual-editing.js +0 -30
  332. package/dist/_visual-editing.mjs +0 -30
  333. package/dist/index.d.mts +0 -3140
  334. package/dist/index.d.ts +0 -3140
  335. package/dist/index.js +0 -2036
  336. package/dist/index.mjs +0 -2044
  337. package/dist/theme.d.mts +0 -1506
  338. package/dist/theme.d.ts +0 -1506
  339. package/dist/theme.js +0 -4126
  340. package/dist/theme.mjs +0 -4126
  341. package/exports/_visual-editing.ts +0 -31
  342. package/exports/index.ts +0 -1
  343. package/exports/theme.ts +0 -1
  344. package/src/color/index.d.mts +0 -119
  345. package/src/color/index.mjs +0 -1411
  346. package/src/core/__workshop__/constants.ts +0 -293
  347. package/src/core/_compat.ts +0 -264
  348. package/src/core/components/autocomplete/__mocks__/apiStore.ts +0 -49
  349. package/src/core/components/autocomplete/__mocks__/countries.ts +0 -245
  350. package/src/core/components/autocomplete/__workshop__/async.tsx +0 -156
  351. package/src/core/components/autocomplete/__workshop__/constrainedHeight.tsx +0 -137
  352. package/src/core/components/autocomplete/__workshop__/custom.tsx +0 -89
  353. package/src/core/components/autocomplete/__workshop__/example.tsx +0 -79
  354. package/src/core/components/autocomplete/__workshop__/focusAndBlur.tsx +0 -36
  355. package/src/core/components/autocomplete/__workshop__/fullscreen.tsx +0 -294
  356. package/src/core/components/autocomplete/__workshop__/index.ts +0 -39
  357. package/src/core/components/autocomplete/__workshop__/types.ts +0 -4
  358. package/src/core/components/autocomplete/autocomplete.styles.tsx +0 -39
  359. package/src/core/components/autocomplete/autocomplete.tsx +0 -767
  360. package/src/core/components/autocomplete/autocompleteOption.tsx +0 -45
  361. package/src/core/components/autocomplete/autocompleteReducer.ts +0 -47
  362. package/src/core/components/autocomplete/constants.ts +0 -28
  363. package/src/core/components/autocomplete/index.ts +0 -2
  364. package/src/core/components/autocomplete/types.ts +0 -108
  365. package/src/core/components/breadcrumbs/__workshop__/example.tsx +0 -62
  366. package/src/core/components/breadcrumbs/__workshop__/index.ts +0 -14
  367. package/src/core/components/breadcrumbs/breadcrumbs.styles.ts +0 -18
  368. package/src/core/components/breadcrumbs/breadcrumbs.test.tsx +0 -51
  369. package/src/core/components/breadcrumbs/breadcrumbs.tsx +0 -133
  370. package/src/core/components/breadcrumbs/index.ts +0 -1
  371. package/src/core/components/dialog/__workshop__/activate.tsx +0 -134
  372. package/src/core/components/dialog/__workshop__/autoFocus.tsx +0 -29
  373. package/src/core/components/dialog/__workshop__/index.ts +0 -19
  374. package/src/core/components/dialog/__workshop__/layering.tsx +0 -41
  375. package/src/core/components/dialog/__workshop__/nested.tsx +0 -72
  376. package/src/core/components/dialog/__workshop__/onScroll.tsx +0 -39
  377. package/src/core/components/dialog/__workshop__/panes.tsx +0 -82
  378. package/src/core/components/dialog/__workshop__/position.tsx +0 -30
  379. package/src/core/components/dialog/__workshop__/props.tsx +0 -75
  380. package/src/core/components/dialog/__workshop__/provider.tsx +0 -11
  381. package/src/core/components/dialog/__workshop__/wrapped.tsx +0 -76
  382. package/src/core/components/dialog/dialog.tsx +0 -430
  383. package/src/core/components/dialog/dialogContext.ts +0 -20
  384. package/src/core/components/dialog/dialogProvider.tsx +0 -35
  385. package/src/core/components/dialog/index.ts +0 -4
  386. package/src/core/components/dialog/styles.ts +0 -77
  387. package/src/core/components/dialog/useDialog.ts +0 -11
  388. package/src/core/components/hotkeys/__workshop__/index.ts +0 -14
  389. package/src/core/components/hotkeys/__workshop__/plain.tsx +0 -9
  390. package/src/core/components/hotkeys/hotkeys.test.tsx +0 -42
  391. package/src/core/components/hotkeys/hotkeys.tsx +0 -66
  392. package/src/core/components/hotkeys/index.ts +0 -1
  393. package/src/core/components/index.ts +0 -9
  394. package/src/core/components/menu/__workshop__/asComponent.tsx +0 -45
  395. package/src/core/components/menu/__workshop__/avatarMenu.tsx +0 -51
  396. package/src/core/components/menu/__workshop__/closableMenuButton.tsx +0 -46
  397. package/src/core/components/menu/__workshop__/constrainedInBoundary.tsx +0 -134
  398. package/src/core/components/menu/__workshop__/customMenuItem.tsx +0 -45
  399. package/src/core/components/menu/__workshop__/customSelectedState.tsx +0 -39
  400. package/src/core/components/menu/__workshop__/disableFocusOnClose.tsx +0 -40
  401. package/src/core/components/menu/__workshop__/groups.tsx +0 -156
  402. package/src/core/components/menu/__workshop__/index.ts +0 -89
  403. package/src/core/components/menu/__workshop__/menuButton.tsx +0 -80
  404. package/src/core/components/menu/__workshop__/menuGroupRight.tsx +0 -58
  405. package/src/core/components/menu/__workshop__/nestedMenu.tsx +0 -22
  406. package/src/core/components/menu/__workshop__/onCloseMenuButton.tsx +0 -41
  407. package/src/core/components/menu/__workshop__/selectedItem.tsx +0 -69
  408. package/src/core/components/menu/__workshop__/shouldFocus.tsx +0 -47
  409. package/src/core/components/menu/__workshop__/tones.tsx +0 -25
  410. package/src/core/components/menu/__workshop__/withoutArrow.tsx +0 -32
  411. package/src/core/components/menu/helpers.ts +0 -82
  412. package/src/core/components/menu/index.ts +0 -5
  413. package/src/core/components/menu/menu.spacing.test.tsx +0 -63
  414. package/src/core/components/menu/menu.test.tsx +0 -125
  415. package/src/core/components/menu/menu.tsx +0 -178
  416. package/src/core/components/menu/menuButton.tsx +0 -268
  417. package/src/core/components/menu/menuContext.ts +0 -18
  418. package/src/core/components/menu/menuDivider.ts +0 -23
  419. package/src/core/components/menu/menuGroup.spacing.test.tsx +0 -63
  420. package/src/core/components/menu/menuGroup.tsx +0 -233
  421. package/src/core/components/menu/menuItem.spacing.test.tsx +0 -59
  422. package/src/core/components/menu/menuItem.tsx +0 -197
  423. package/src/core/components/menu/useMenu.ts +0 -21
  424. package/src/core/components/menu/useMenuController.ts +0 -231
  425. package/src/core/components/skeleton/__workshop__/delay.tsx +0 -70
  426. package/src/core/components/skeleton/__workshop__/index.ts +0 -11
  427. package/src/core/components/skeleton/__workshop__/skeleton.tsx +0 -64
  428. package/src/core/components/skeleton/index.ts +0 -2
  429. package/src/core/components/skeleton/skeleton.tsx +0 -57
  430. package/src/core/components/skeleton/styles.ts +0 -50
  431. package/src/core/components/skeleton/textSkeleton.tsx +0 -122
  432. package/src/core/components/tab/__workshop__/example.tsx +0 -79
  433. package/src/core/components/tab/__workshop__/index.ts +0 -14
  434. package/src/core/components/tab/index.ts +0 -3
  435. package/src/core/components/tab/tab.tsx +0 -101
  436. package/src/core/components/tab/tabList.test.tsx +0 -48
  437. package/src/core/components/tab/tabList.tsx +0 -70
  438. package/src/core/components/tab/tabPanel.tsx +0 -39
  439. package/src/core/components/toast/__workshop__/hook.tsx +0 -71
  440. package/src/core/components/toast/__workshop__/index.ts +0 -19
  441. package/src/core/components/toast/__workshop__/toast.tsx +0 -26
  442. package/src/core/components/toast/index.ts +0 -4
  443. package/src/core/components/toast/styles.ts +0 -77
  444. package/src/core/components/toast/toast.test.tsx +0 -101
  445. package/src/core/components/toast/toast.tsx +0 -198
  446. package/src/core/components/toast/toastContext.ts +0 -7
  447. package/src/core/components/toast/toastLayer.tsx +0 -51
  448. package/src/core/components/toast/toastProvider.tsx +0 -113
  449. package/src/core/components/toast/toastState.ts +0 -6
  450. package/src/core/components/toast/types.ts +0 -26
  451. package/src/core/components/toast/useToast.ts +0 -25
  452. package/src/core/components/tree/__workshop__/basic.perf.ts +0 -19
  453. package/src/core/components/tree/__workshop__/basic.tsx +0 -105
  454. package/src/core/components/tree/__workshop__/index.ts +0 -21
  455. package/src/core/components/tree/__workshop__/tabFromElement.tsx +0 -84
  456. package/src/core/components/tree/helpers.ts +0 -105
  457. package/src/core/components/tree/index.ts +0 -4
  458. package/src/core/components/tree/style.ts +0 -105
  459. package/src/core/components/tree/tree.test.tsx +0 -55
  460. package/src/core/components/tree/tree.tsx +0 -240
  461. package/src/core/components/tree/treeContext.ts +0 -10
  462. package/src/core/components/tree/treeGroup.tsx +0 -28
  463. package/src/core/components/tree/treeItem.test.tsx +0 -65
  464. package/src/core/components/tree/treeItem.tsx +0 -224
  465. package/src/core/components/tree/types.ts +0 -25
  466. package/src/core/components/tree/useTree.ts +0 -17
  467. package/src/core/constants.ts +0 -79
  468. package/src/core/helpers/animation.ts +0 -27
  469. package/src/core/helpers/element.ts +0 -55
  470. package/src/core/helpers/focus.ts +0 -100
  471. package/src/core/helpers/index.ts +0 -4
  472. package/src/core/helpers/scroll.ts +0 -15
  473. package/src/core/hooks/index.ts +0 -12
  474. package/src/core/hooks/useArrayProp.ts +0 -17
  475. package/src/core/hooks/useClickOutside.test.tsx +0 -482
  476. package/src/core/hooks/useClickOutside.ts +0 -118
  477. package/src/core/hooks/useClickOutsideEvent.test.tsx +0 -115
  478. package/src/core/hooks/useClickOutsideEvent.ts +0 -73
  479. package/src/core/hooks/useCustomValidity.ts +0 -13
  480. package/src/core/hooks/useDelayed.test.ts +0 -88
  481. package/src/core/hooks/useDelayedState.ts +0 -36
  482. package/src/core/hooks/useElementRect/__workshop__/example.tsx +0 -32
  483. package/src/core/hooks/useElementRect/__workshop__/index.ts +0 -14
  484. package/src/core/hooks/useElementRect/index.ts +0 -1
  485. package/src/core/hooks/useElementRect/useElementRect.ts +0 -13
  486. package/src/core/hooks/useElementSize.ts +0 -19
  487. package/src/core/hooks/useForwardedRef.ts +0 -19
  488. package/src/core/hooks/useGlobalKeyDown.ts +0 -24
  489. package/src/core/hooks/useIsomorphicEffect.ts +0 -7
  490. package/src/core/hooks/useMatchMedia.ts +0 -28
  491. package/src/core/hooks/useMediaIndex/__workshop__/index.ts +0 -14
  492. package/src/core/hooks/useMediaIndex/__workshop__/test.tsx +0 -14
  493. package/src/core/hooks/useMediaIndex/index.ts +0 -1
  494. package/src/core/hooks/useMediaIndex/useMediaIndex.test.tsx +0 -36
  495. package/src/core/hooks/useMediaIndex/useMediaIndex.ts +0 -102
  496. package/src/core/hooks/useMounted.ts +0 -15
  497. package/src/core/hooks/usePrefersDark.hydration.test.tsx +0 -56
  498. package/src/core/hooks/usePrefersDark.test.tsx +0 -19
  499. package/src/core/hooks/usePrefersDark.ts +0 -16
  500. package/src/core/hooks/usePrefersReducedMotion.hydration.test.tsx +0 -56
  501. package/src/core/hooks/usePrefersReducedMotion.test.tsx +0 -19
  502. package/src/core/hooks/usePrefersReducedMotion.ts +0 -16
  503. package/src/core/index.ts +0 -10
  504. package/src/core/lib/createGlobalScopedContext.ts +0 -36
  505. package/src/core/lib/globalScope.ts +0 -19
  506. package/src/core/lib/isRecord.ts +0 -3
  507. package/src/core/middleware/origin.ts +0 -47
  508. package/src/core/observers/elementSizeObserver.ts +0 -116
  509. package/src/core/observers/index.ts +0 -2
  510. package/src/core/observers/resizeObserver.ts +0 -9
  511. package/src/core/primitives/_selectable/index.ts +0 -1
  512. package/src/core/primitives/_selectable/selectable.tsx +0 -15
  513. package/src/core/primitives/_selectable/style.ts +0 -115
  514. package/src/core/primitives/avatar/__workshop__/asButton.tsx +0 -14
  515. package/src/core/primitives/avatar/__workshop__/index.ts +0 -29
  516. package/src/core/primitives/avatar/__workshop__/stack.tsx +0 -25
  517. package/src/core/primitives/avatar/__workshop__/withinButton.tsx +0 -63
  518. package/src/core/primitives/avatar/__workshop__/withinMenuItem.tsx +0 -70
  519. package/src/core/primitives/avatar/avatar.tsx +0 -200
  520. package/src/core/primitives/avatar/avatarCounter.tsx +0 -91
  521. package/src/core/primitives/avatar/avatarStack.tsx +0 -100
  522. package/src/core/primitives/avatar/index.ts +0 -4
  523. package/src/core/primitives/avatar/styles.ts +0 -167
  524. package/src/core/primitives/avatar/types.ts +0 -17
  525. package/src/core/primitives/badge/__workshop__/index.ts +0 -19
  526. package/src/core/primitives/badge/__workshop__/props.tsx +0 -30
  527. package/src/core/primitives/badge/__workshop__/tones.tsx +0 -21
  528. package/src/core/primitives/badge/badge.test.tsx +0 -16
  529. package/src/core/primitives/badge/badge.tsx +0 -70
  530. package/src/core/primitives/badge/index.ts +0 -1
  531. package/src/core/primitives/badge/styles.ts +0 -20
  532. package/src/core/primitives/badge/types.ts +0 -8
  533. package/src/core/primitives/box/__workshop__/asComponent.tsx +0 -31
  534. package/src/core/primitives/box/__workshop__/index.ts +0 -24
  535. package/src/core/primitives/box/__workshop__/props.tsx +0 -20
  536. package/src/core/primitives/box/__workshop__/responsive.tsx +0 -20
  537. package/src/core/primitives/box/box.test.tsx +0 -142
  538. package/src/core/primitives/box/box.tsx +0 -154
  539. package/src/core/primitives/box/index.ts +0 -1
  540. package/src/core/primitives/button/__workshop__/custom.tsx +0 -51
  541. package/src/core/primitives/button/__workshop__/customIcons.tsx +0 -30
  542. package/src/core/primitives/button/__workshop__/disabled.tsx +0 -74
  543. package/src/core/primitives/button/__workshop__/index.ts +0 -59
  544. package/src/core/primitives/button/__workshop__/labelUploadButton.tsx +0 -36
  545. package/src/core/primitives/button/__workshop__/mixedChildren.tsx +0 -12
  546. package/src/core/primitives/button/__workshop__/props.tsx +0 -55
  547. package/src/core/primitives/button/__workshop__/stacked.tsx +0 -58
  548. package/src/core/primitives/button/__workshop__/styled1.tsx +0 -17
  549. package/src/core/primitives/button/__workshop__/styled2.tsx +0 -19
  550. package/src/core/primitives/button/__workshop__/uploadButton.tsx +0 -28
  551. package/src/core/primitives/button/button.test.tsx +0 -82
  552. package/src/core/primitives/button/button.tsx +0 -210
  553. package/src/core/primitives/button/index.ts +0 -1
  554. package/src/core/primitives/button/styles.ts +0 -117
  555. package/src/core/primitives/card/__workshop__/allTones.tsx +0 -25
  556. package/src/core/primitives/card/__workshop__/asButton.tsx +0 -107
  557. package/src/core/primitives/card/__workshop__/asComponent.tsx +0 -27
  558. package/src/core/primitives/card/__workshop__/checkered.tsx +0 -26
  559. package/src/core/primitives/card/__workshop__/index.ts +0 -18
  560. package/src/core/primitives/card/__workshop__/interactive.tsx +0 -30
  561. package/src/core/primitives/card/__workshop__/listNavigation.tsx +0 -80
  562. package/src/core/primitives/card/__workshop__/props.tsx +0 -53
  563. package/src/core/primitives/card/__workshop__/selected.tsx +0 -94
  564. package/src/core/primitives/card/__workshop__/styled.tsx +0 -14
  565. package/src/core/primitives/card/card.tsx +0 -128
  566. package/src/core/primitives/card/index.ts +0 -2
  567. package/src/core/primitives/card/styles.ts +0 -147
  568. package/src/core/primitives/card/types.ts +0 -11
  569. package/src/core/primitives/checkbox/__workshop__/example.tsx +0 -25
  570. package/src/core/primitives/checkbox/__workshop__/index.ts +0 -13
  571. package/src/core/primitives/checkbox/__workshop__/props.tsx +0 -33
  572. package/src/core/primitives/checkbox/__workshop__/readOnly.tsx +0 -16
  573. package/src/core/primitives/checkbox/__workshop__/tones.tsx +0 -28
  574. package/src/core/primitives/checkbox/checkbox.tsx +0 -73
  575. package/src/core/primitives/checkbox/index.ts +0 -1
  576. package/src/core/primitives/checkbox/styles.ts +0 -128
  577. package/src/core/primitives/code/__workshop__/index.ts +0 -19
  578. package/src/core/primitives/code/__workshop__/opticalAlignment.tsx +0 -48
  579. package/src/core/primitives/code/__workshop__/props.tsx +0 -21
  580. package/src/core/primitives/code/code.tsx +0 -55
  581. package/src/core/primitives/code/index.ts +0 -1
  582. package/src/core/primitives/code/refractor.tsx +0 -20
  583. package/src/core/primitives/code/styles.ts +0 -77
  584. package/src/core/primitives/container/__workshop__/example.tsx +0 -20
  585. package/src/core/primitives/container/__workshop__/index.ts +0 -8
  586. package/src/core/primitives/container/container.tsx +0 -54
  587. package/src/core/primitives/container/index.ts +0 -2
  588. package/src/core/primitives/container/styles.ts +0 -23
  589. package/src/core/primitives/container/types.ts +0 -6
  590. package/src/core/primitives/flex/__workshop__/example.tsx +0 -34
  591. package/src/core/primitives/flex/__workshop__/gap.tsx +0 -25
  592. package/src/core/primitives/flex/__workshop__/index.ts +0 -11
  593. package/src/core/primitives/flex/flex.tsx +0 -64
  594. package/src/core/primitives/flex/index.ts +0 -1
  595. package/src/core/primitives/grid/__workshop__/index.ts +0 -10
  596. package/src/core/primitives/grid/__workshop__/responsive.tsx +0 -54
  597. package/src/core/primitives/grid/grid.test.tsx +0 -80
  598. package/src/core/primitives/grid/grid.tsx +0 -74
  599. package/src/core/primitives/grid/index.ts +0 -1
  600. package/src/core/primitives/heading/__workshop__/index.ts +0 -19
  601. package/src/core/primitives/heading/__workshop__/opticalAlignment.tsx +0 -54
  602. package/src/core/primitives/heading/__workshop__/plain.tsx +0 -32
  603. package/src/core/primitives/heading/heading.tsx +0 -88
  604. package/src/core/primitives/heading/index.ts +0 -1
  605. package/src/core/primitives/heading/styles.ts +0 -64
  606. package/src/core/primitives/heading/types.ts +0 -7
  607. package/src/core/primitives/index.ts +0 -27
  608. package/src/core/primitives/inline/__workshop__/index.ts +0 -8
  609. package/src/core/primitives/inline/__workshop__/plain.tsx +0 -27
  610. package/src/core/primitives/inline/index.ts +0 -1
  611. package/src/core/primitives/inline/inline.test.tsx +0 -51
  612. package/src/core/primitives/inline/inline.tsx +0 -63
  613. package/src/core/primitives/inline/styles.ts +0 -32
  614. package/src/core/primitives/inline/types.ts +0 -6
  615. package/src/core/primitives/kbd/__workshop__/index.ts +0 -8
  616. package/src/core/primitives/kbd/__workshop__/plain.tsx +0 -9
  617. package/src/core/primitives/kbd/index.ts +0 -1
  618. package/src/core/primitives/kbd/kbd.tsx +0 -69
  619. package/src/core/primitives/label/__workshop__/index.ts +0 -19
  620. package/src/core/primitives/label/__workshop__/opticalAlignment.tsx +0 -48
  621. package/src/core/primitives/label/__workshop__/plain.tsx +0 -24
  622. package/src/core/primitives/label/index.ts +0 -1
  623. package/src/core/primitives/label/label.tsx +0 -87
  624. package/src/core/primitives/label/styles.ts +0 -45
  625. package/src/core/primitives/popover/__workshop__/AlignedStory.tsx +0 -77
  626. package/src/core/primitives/popover/__workshop__/MarginsStory.tsx +0 -31
  627. package/src/core/primitives/popover/__workshop__/MatchReferenceWidthStory.tsx +0 -32
  628. package/src/core/primitives/popover/__workshop__/OpenOnMountStory.tsx +0 -11
  629. package/src/core/primitives/popover/__workshop__/PlainStory.tsx +0 -71
  630. package/src/core/primitives/popover/__workshop__/RecursiveStory.tsx +0 -71
  631. package/src/core/primitives/popover/__workshop__/SidePanelStory.tsx +0 -89
  632. package/src/core/primitives/popover/__workshop__/TestStory.tsx +0 -97
  633. package/src/core/primitives/popover/__workshop__/index.ts +0 -49
  634. package/src/core/primitives/popover/constants.ts +0 -22
  635. package/src/core/primitives/popover/floating-ui/size.ts +0 -99
  636. package/src/core/primitives/popover/helpers.ts +0 -31
  637. package/src/core/primitives/popover/index.ts +0 -2
  638. package/src/core/primitives/popover/popover.tsx +0 -511
  639. package/src/core/primitives/popover/popoverCard.tsx +0 -166
  640. package/src/core/primitives/popover/types.ts +0 -7
  641. package/src/core/primitives/radio/__workshop__/example.tsx +0 -63
  642. package/src/core/primitives/radio/__workshop__/index.ts +0 -11
  643. package/src/core/primitives/radio/__workshop__/plain.tsx +0 -28
  644. package/src/core/primitives/radio/index.ts +0 -1
  645. package/src/core/primitives/radio/radio.tsx +0 -51
  646. package/src/core/primitives/radio/styles.ts +0 -117
  647. package/src/core/primitives/select/__workshop__/index.ts +0 -11
  648. package/src/core/primitives/select/__workshop__/plain.tsx +0 -27
  649. package/src/core/primitives/select/__workshop__/readOnly.tsx +0 -23
  650. package/src/core/primitives/select/index.ts +0 -1
  651. package/src/core/primitives/select/select.test.tsx +0 -52
  652. package/src/core/primitives/select/select.tsx +0 -94
  653. package/src/core/primitives/select/styles.ts +0 -166
  654. package/src/core/primitives/spinner/__workshop__/Props.tsx +0 -15
  655. package/src/core/primitives/spinner/__workshop__/index.ts +0 -14
  656. package/src/core/primitives/spinner/index.ts +0 -1
  657. package/src/core/primitives/spinner/spinner.tsx +0 -46
  658. package/src/core/primitives/stack/__workshop__/index.ts +0 -14
  659. package/src/core/primitives/stack/__workshop__/plain.tsx +0 -32
  660. package/src/core/primitives/stack/index.ts +0 -1
  661. package/src/core/primitives/stack/stack.test.tsx +0 -57
  662. package/src/core/primitives/stack/stack.tsx +0 -57
  663. package/src/core/primitives/stack/styles.ts +0 -32
  664. package/src/core/primitives/switch/__workshop__/example.tsx +0 -23
  665. package/src/core/primitives/switch/__workshop__/index.ts +0 -11
  666. package/src/core/primitives/switch/__workshop__/props.tsx +0 -21
  667. package/src/core/primitives/switch/index.ts +0 -1
  668. package/src/core/primitives/switch/styles.ts +0 -173
  669. package/src/core/primitives/switch/switch.tsx +0 -68
  670. package/src/core/primitives/text/__workshop__/colored.tsx +0 -30
  671. package/src/core/primitives/text/__workshop__/example.tsx +0 -39
  672. package/src/core/primitives/text/__workshop__/index.ts +0 -24
  673. package/src/core/primitives/text/__workshop__/opticalAlignment.tsx +0 -48
  674. package/src/core/primitives/text/index.ts +0 -1
  675. package/src/core/primitives/text/styles.ts +0 -74
  676. package/src/core/primitives/text/text.tsx +0 -89
  677. package/src/core/primitives/textArea/__workshop__/index.ts +0 -14
  678. package/src/core/primitives/textArea/__workshop__/plain.tsx +0 -50
  679. package/src/core/primitives/textArea/index.ts +0 -1
  680. package/src/core/primitives/textArea/textArea.tsx +0 -120
  681. package/src/core/primitives/textInput/__workshop__/clearButton.tsx +0 -30
  682. package/src/core/primitives/textInput/__workshop__/customValidity.tsx +0 -17
  683. package/src/core/primitives/textInput/__workshop__/index.ts +0 -44
  684. package/src/core/primitives/textInput/__workshop__/plain.tsx +0 -98
  685. package/src/core/primitives/textInput/__workshop__/readOnly.tsx +0 -9
  686. package/src/core/primitives/textInput/__workshop__/states.tsx +0 -53
  687. package/src/core/primitives/textInput/__workshop__/tones.tsx +0 -277
  688. package/src/core/primitives/textInput/__workshop__/typed.tsx +0 -23
  689. package/src/core/primitives/textInput/index.ts +0 -1
  690. package/src/core/primitives/textInput/textInput.test.tsx +0 -48
  691. package/src/core/primitives/textInput/textInput.tsx +0 -395
  692. package/src/core/primitives/tooltip/__workshop__/customPortal.tsx +0 -102
  693. package/src/core/primitives/tooltip/__workshop__/index.ts +0 -29
  694. package/src/core/primitives/tooltip/__workshop__/overflowingBoundary.tsx +0 -74
  695. package/src/core/primitives/tooltip/__workshop__/props.tsx +0 -107
  696. package/src/core/primitives/tooltip/__workshop__/resizableBoundary.tsx +0 -86
  697. package/src/core/primitives/tooltip/constants.ts +0 -23
  698. package/src/core/primitives/tooltip/index.ts +0 -2
  699. package/src/core/primitives/tooltip/tooltip.test.tsx +0 -452
  700. package/src/core/primitives/tooltip/tooltip.tsx +0 -495
  701. package/src/core/primitives/tooltip/tooltipCard.tsx +0 -109
  702. package/src/core/primitives/tooltip/tooltipDelayGroup/index.ts +0 -4
  703. package/src/core/primitives/tooltip/tooltipDelayGroup/tooltipDelayGroupContext.tsx +0 -11
  704. package/src/core/primitives/tooltip/tooltipDelayGroup/tooltipDelayGroupProvider.tsx +0 -57
  705. package/src/core/primitives/tooltip/tooltipDelayGroup/types.ts +0 -10
  706. package/src/core/primitives/tooltip/tooltipDelayGroup/useTooltipDelayGroup.ts +0 -13
  707. package/src/core/primitives/types.ts +0 -179
  708. package/src/core/styles/border/borderStyle.ts +0 -56
  709. package/src/core/styles/border/index.ts +0 -2
  710. package/src/core/styles/border/types.ts +0 -10
  711. package/src/core/styles/box/boxStyle.ts +0 -69
  712. package/src/core/styles/box/index.ts +0 -2
  713. package/src/core/styles/box/types.ts +0 -11
  714. package/src/core/styles/card/_cardColorStyle.ts +0 -108
  715. package/src/core/styles/card/index.ts +0 -1
  716. package/src/core/styles/flex/flexItemStyle.ts +0 -27
  717. package/src/core/styles/flex/flexStyle.ts +0 -70
  718. package/src/core/styles/flex/index.ts +0 -3
  719. package/src/core/styles/flex/types.ts +0 -25
  720. package/src/core/styles/focusRing/index.ts +0 -25
  721. package/src/core/styles/font/codeFontStyle.ts +0 -13
  722. package/src/core/styles/font/headingFontStyle.ts +0 -13
  723. package/src/core/styles/font/index.ts +0 -6
  724. package/src/core/styles/font/labelFontStyle.ts +0 -13
  725. package/src/core/styles/font/responsiveFont.ts +0 -103
  726. package/src/core/styles/font/textAlignStyle.ts +0 -19
  727. package/src/core/styles/font/textFontStyle.ts +0 -13
  728. package/src/core/styles/font/types.ts +0 -35
  729. package/src/core/styles/grid/gridItemStyle.ts +0 -82
  730. package/src/core/styles/grid/gridStyle.ts +0 -108
  731. package/src/core/styles/grid/index.ts +0 -3
  732. package/src/core/styles/grid/types.ts +0 -37
  733. package/src/core/styles/helpers.ts +0 -72
  734. package/src/core/styles/index.ts +0 -5
  735. package/src/core/styles/input/index.ts +0 -2
  736. package/src/core/styles/input/responsiveInputPaddingStyle.ts +0 -78
  737. package/src/core/styles/input/textInputStyle.ts +0 -263
  738. package/src/core/styles/internal.ts +0 -12
  739. package/src/core/styles/margin/index.ts +0 -2
  740. package/src/core/styles/margin/marginStyle.ts +0 -21
  741. package/src/core/styles/margin/marginsStyle.test.ts +0 -33
  742. package/src/core/styles/margin/types.ts +0 -9
  743. package/src/core/styles/padding/index.ts +0 -2
  744. package/src/core/styles/padding/paddingStyle.test.ts +0 -33
  745. package/src/core/styles/padding/paddingStyle.ts +0 -21
  746. package/src/core/styles/padding/types.ts +0 -12
  747. package/src/core/styles/radius/index.ts +0 -2
  748. package/src/core/styles/radius/radiusStyle.ts +0 -23
  749. package/src/core/styles/radius/types.ts +0 -8
  750. package/src/core/styles/shadow/index.ts +0 -2
  751. package/src/core/styles/shadow/shadowStyle.ts +0 -29
  752. package/src/core/styles/shadow/types.ts +0 -6
  753. package/src/core/styles/types.ts +0 -8
  754. package/src/core/theme/__workshop__/build/Root.tsx +0 -367
  755. package/src/core/theme/__workshop__/build/helpers.ts +0 -46
  756. package/src/core/theme/__workshop__/build/story.tsx +0 -465
  757. package/src/core/theme/__workshop__/canvas.tsx +0 -352
  758. package/src/core/theme/__workshop__/color.tsx +0 -62
  759. package/src/core/theme/__workshop__/debug/story.tsx +0 -408
  760. package/src/core/theme/__workshop__/index.ts +0 -39
  761. package/src/core/theme/__workshop__/layer.tsx +0 -78
  762. package/src/core/theme/__workshop__/nestedProvider.tsx +0 -15
  763. package/src/core/theme/index.ts +0 -5
  764. package/src/core/theme/theme.test.tsx +0 -73
  765. package/src/core/theme/themeColorProvider.tsx +0 -29
  766. package/src/core/theme/themeContext.ts +0 -10
  767. package/src/core/theme/themeProvider.tsx +0 -62
  768. package/src/core/theme/types.ts +0 -12
  769. package/src/core/theme/useRootTheme.ts +0 -17
  770. package/src/core/theme/useTheme.ts +0 -16
  771. package/src/core/types/avatar.ts +0 -14
  772. package/src/core/types/badge.ts +0 -12
  773. package/src/core/types/box.ts +0 -19
  774. package/src/core/types/button.ts +0 -21
  775. package/src/core/types/card.ts +0 -6
  776. package/src/core/types/component.ts +0 -32
  777. package/src/core/types/dialog.ts +0 -4
  778. package/src/core/types/flex.ts +0 -30
  779. package/src/core/types/grid.ts +0 -14
  780. package/src/core/types/gridItem.ts +0 -29
  781. package/src/core/types/index.ts +0 -15
  782. package/src/core/types/placement.ts +0 -18
  783. package/src/core/types/popover.ts +0 -4
  784. package/src/core/types/radius.ts +0 -4
  785. package/src/core/types/selectable.ts +0 -6
  786. package/src/core/types/text.ts +0 -4
  787. package/src/core/utils/arrow/arrow.tsx +0 -123
  788. package/src/core/utils/arrow/cmds.ts +0 -91
  789. package/src/core/utils/arrow/index.ts +0 -1
  790. package/src/core/utils/boundaryElement/__workshop__/index.ts +0 -14
  791. package/src/core/utils/boundaryElement/__workshop__/plain.tsx +0 -19
  792. package/src/core/utils/boundaryElement/boundaryElement.test.tsx +0 -100
  793. package/src/core/utils/boundaryElement/boundaryElementContext.ts +0 -7
  794. package/src/core/utils/boundaryElement/boundaryElementProvider.tsx +0 -24
  795. package/src/core/utils/boundaryElement/index.ts +0 -3
  796. package/src/core/utils/boundaryElement/types.ts +0 -7
  797. package/src/core/utils/boundaryElement/useBoundaryElement.ts +0 -26
  798. package/src/core/utils/conditionalWrapper/conditionalWrapper.tsx +0 -21
  799. package/src/core/utils/conditionalWrapper/index.ts +0 -1
  800. package/src/core/utils/elementQuery/__workshop__/customMedia.tsx +0 -30
  801. package/src/core/utils/elementQuery/__workshop__/index.ts +0 -14
  802. package/src/core/utils/elementQuery/elementQuery.tsx +0 -53
  803. package/src/core/utils/elementQuery/helpers.ts +0 -27
  804. package/src/core/utils/elementQuery/index.ts +0 -1
  805. package/src/core/utils/errorBoundary.tsx +0 -48
  806. package/src/core/utils/getElementRef.ts +0 -26
  807. package/src/core/utils/index.ts +0 -9
  808. package/src/core/utils/layer/__workshop__/_debug.tsx +0 -17
  809. package/src/core/utils/layer/__workshop__/index.ts +0 -24
  810. package/src/core/utils/layer/__workshop__/multipleRoots.tsx +0 -49
  811. package/src/core/utils/layer/__workshop__/nested.tsx +0 -98
  812. package/src/core/utils/layer/__workshop__/responsiveZOffset.tsx +0 -13
  813. package/src/core/utils/layer/getLayerContext.test.ts +0 -30
  814. package/src/core/utils/layer/getLayerContext.ts +0 -21
  815. package/src/core/utils/layer/index.ts +0 -4
  816. package/src/core/utils/layer/layer.test.tsx +0 -108
  817. package/src/core/utils/layer/layer.tsx +0 -98
  818. package/src/core/utils/layer/layerContext.ts +0 -7
  819. package/src/core/utils/layer/layerProvider.tsx +0 -111
  820. package/src/core/utils/layer/types.ts +0 -9
  821. package/src/core/utils/layer/useLayer.ts +0 -26
  822. package/src/core/utils/portal/__workshop__/index.ts +0 -14
  823. package/src/core/utils/portal/__workshop__/named.tsx +0 -63
  824. package/src/core/utils/portal/index.ts +0 -4
  825. package/src/core/utils/portal/portal.test.tsx +0 -103
  826. package/src/core/utils/portal/portal.ts +0 -32
  827. package/src/core/utils/portal/portalContext.ts +0 -31
  828. package/src/core/utils/portal/portalProvider.tsx +0 -47
  829. package/src/core/utils/portal/types.ts +0 -9
  830. package/src/core/utils/portal/usePortal.ts +0 -25
  831. package/src/core/utils/spanWithTextOverflow.tsx +0 -10
  832. package/src/core/utils/srOnly/index.ts +0 -1
  833. package/src/core/utils/srOnly/srOnly.tsx +0 -36
  834. package/src/core/utils/virtualList/__workshop__/changingProps.tsx +0 -36
  835. package/src/core/utils/virtualList/__workshop__/elementScroll.tsx +0 -24
  836. package/src/core/utils/virtualList/__workshop__/index.ts +0 -29
  837. package/src/core/utils/virtualList/__workshop__/infiniteList.tsx +0 -48
  838. package/src/core/utils/virtualList/__workshop__/windowScrolll.tsx +0 -22
  839. package/src/core/utils/virtualList/index.ts +0 -1
  840. package/src/core/utils/virtualList/virtualList.tsx +0 -200
  841. package/src/theme/build/_deprecated/color/_selectable/createSelectableTones.ts +0 -76
  842. package/src/theme/build/_deprecated/color/_solid/createSolidTones.ts +0 -54
  843. package/src/theme/build/_deprecated/color/button/createButtonModes.ts +0 -22
  844. package/src/theme/build/_deprecated/color/button/createButtonTones.ts +0 -55
  845. package/src/theme/build/_deprecated/color/card/createCardStates.ts +0 -60
  846. package/src/theme/build/_deprecated/color/color.test.ts +0 -63
  847. package/src/theme/build/_deprecated/color/defaults.ts +0 -390
  848. package/src/theme/build/_deprecated/color/factory.ts +0 -142
  849. package/src/theme/build/_deprecated/color/index.ts +0 -1
  850. package/src/theme/build/_deprecated/color/input/createInputModes.ts +0 -81
  851. package/src/theme/build/_deprecated/color/muted/createMuted.ts +0 -54
  852. package/src/theme/build/_deprecated/color/spot/createSpot.ts +0 -20
  853. package/src/theme/build/buildColorTheme.test.ts +0 -183
  854. package/src/theme/build/buildColorTheme.ts +0 -499
  855. package/src/theme/build/buildTheme.test.ts +0 -87
  856. package/src/theme/build/buildTheme.ts +0 -36
  857. package/src/theme/build/colorToken/colorToken.ts +0 -19
  858. package/src/theme/build/colorToken/compileColorToken.ts +0 -21
  859. package/src/theme/build/colorToken/index.ts +0 -2
  860. package/src/theme/build/colorToken/types.ts +0 -6
  861. package/src/theme/build/index.ts +0 -3
  862. package/src/theme/build/lib/color-fns/blend/index.ts +0 -3
  863. package/src/theme/build/lib/color-fns/blend/mix.ts +0 -21
  864. package/src/theme/build/lib/color-fns/blend/multiply.ts +0 -18
  865. package/src/theme/build/lib/color-fns/blend/screen.ts +0 -18
  866. package/src/theme/build/lib/color-fns/color-fns.test.ts +0 -68
  867. package/src/theme/build/lib/color-fns/contrastRatio.ts +0 -31
  868. package/src/theme/build/lib/color-fns/convert.ts +0 -150
  869. package/src/theme/build/lib/color-fns/index.ts +0 -6
  870. package/src/theme/build/lib/color-fns/parse.ts +0 -60
  871. package/src/theme/build/lib/color-fns/rgba.ts +0 -10
  872. package/src/theme/build/lib/color-fns/types.ts +0 -28
  873. package/src/theme/build/lib/isRecord.ts +0 -3
  874. package/src/theme/build/lib/lazy.ts +0 -30
  875. package/src/theme/build/lib/utils.ts +0 -19
  876. package/src/theme/build/merge.ts +0 -26
  877. package/src/theme/build/mixThemeColor.test.ts +0 -21
  878. package/src/theme/build/mixThemeColor.ts +0 -53
  879. package/src/theme/build/renderColorTheme.ts +0 -532
  880. package/src/theme/build/renderColorValue.ts +0 -85
  881. package/src/theme/build/resolveColorTokens.ts +0 -268
  882. package/src/theme/build/theme.test.ts +0 -27
  883. package/src/theme/config/helpers.ts +0 -55
  884. package/src/theme/config/index.ts +0 -4
  885. package/src/theme/config/system.ts +0 -115
  886. package/src/theme/config/tokens/color/index.ts +0 -1
  887. package/src/theme/config/tokens/color/types.ts +0 -133
  888. package/src/theme/config/tokens/index.ts +0 -4
  889. package/src/theme/config/tokens/parseTokenKey.test.ts +0 -64
  890. package/src/theme/config/tokens/parseTokenKey.ts +0 -67
  891. package/src/theme/config/tokens/parseTokenValue.test.ts +0 -42
  892. package/src/theme/config/tokens/parseTokenValue.ts +0 -133
  893. package/src/theme/config/tokens/types.ts +0 -53
  894. package/src/theme/config/types.ts +0 -46
  895. package/src/theme/defaults/colorPalette.ts +0 -5
  896. package/src/theme/defaults/colorTokens.ts +0 -648
  897. package/src/theme/defaults/config.ts +0 -84
  898. package/src/theme/defaults/fonts.ts +0 -227
  899. package/src/theme/getScopedTheme.ts +0 -98
  900. package/src/theme/index.ts +0 -5
  901. package/src/theme/system/avatar.ts +0 -14
  902. package/src/theme/system/color/_constants.ts +0 -45
  903. package/src/theme/system/color/_helpers.ts +0 -24
  904. package/src/theme/system/color/_system.ts +0 -40
  905. package/src/theme/system/color/avatar.ts +0 -15
  906. package/src/theme/system/color/badge.ts +0 -16
  907. package/src/theme/system/color/button.ts +0 -17
  908. package/src/theme/system/color/color.ts +0 -34
  909. package/src/theme/system/color/index.ts +0 -13
  910. package/src/theme/system/color/input.ts +0 -25
  911. package/src/theme/system/color/kbd.ts +0 -8
  912. package/src/theme/system/color/selectable.ts +0 -12
  913. package/src/theme/system/color/shadow.ts +0 -7
  914. package/src/theme/system/color/state.ts +0 -43
  915. package/src/theme/system/color/syntax.ts +0 -41
  916. package/src/theme/system/css.ts +0 -14
  917. package/src/theme/system/focusRing.ts +0 -7
  918. package/src/theme/system/font.ts +0 -52
  919. package/src/theme/system/index.ts +0 -11
  920. package/src/theme/system/input.ts +0 -33
  921. package/src/theme/system/layer.ts +0 -8
  922. package/src/theme/system/shadow.ts +0 -19
  923. package/src/theme/system/styles.ts +0 -13
  924. package/src/theme/system/theme.ts +0 -138
  925. package/src/theme/system/v0/avatar.ts +0 -10
  926. package/src/theme/system/v0/color/_generic.ts +0 -35
  927. package/src/theme/system/v0/color/_system.ts +0 -17
  928. package/src/theme/system/v0/color/base.ts +0 -21
  929. package/src/theme/system/v0/color/button.ts +0 -42
  930. package/src/theme/system/v0/color/card.ts +0 -19
  931. package/src/theme/system/v0/color/color.ts +0 -40
  932. package/src/theme/system/v0/color/index.ts +0 -11
  933. package/src/theme/system/v0/color/input.ts +0 -34
  934. package/src/theme/system/v0/color/muted.ts +0 -26
  935. package/src/theme/system/v0/color/selectable.ts +0 -31
  936. package/src/theme/system/v0/color/solid.ts +0 -26
  937. package/src/theme/system/v0/color/spot.ts +0 -13
  938. package/src/theme/system/v0/index.ts +0 -3
  939. package/src/theme/system/v0/input.ts +0 -23
  940. package/src/theme/versioning/getTheme_v2.ts +0 -57
  941. package/src/theme/versioning/index.ts +0 -5
  942. package/src/theme/versioning/is_v0.ts +0 -6
  943. package/src/theme/versioning/is_v2.ts +0 -6
  944. package/src/theme/versioning/themeColor_v0_v2.ts +0 -243
  945. package/src/theme/versioning/themeColor_v2_v2_9.ts +0 -49
  946. package/src/theme/versioning/v0_v2.ts +0 -94
  947. package/src/theme/versioning/v2_v0.ts +0 -135
@@ -0,0 +1 @@
1
+ {"version":3,"file":"array.js","names":[],"sources":["../../src/kit/engine/array.tsx"],"sourcesContent":["/**\n * ARRAYS — compact PREVIEW ROWS that rest closed (CPO D8 + production; V2 HEAD 9829bf1 kit/engine/array.tsx): grip ·\n * thumb · title + subtitle · validation dot · presence · always-visible ⋯ (Move up/down, Duplicate, Add above/below,\n * Remove). Opening a row follows ONE rule (CPO D43): ≤3 simple fields expand inline, else it drills in (`openMode`\n * overrides). Reorder by drag with layout animation; delete with an Undo toast; \"Add {noun}\" (a type menu when several\n * item types); min/max honoured.\n * Arrays of primitives render as a gallery (images), reference chips, or — for text, numbers and URLs — the ITEM LIST\n * (CPO D47): one input per row, no drill. Arrays of one-field objects (`[{ text }]`) use the same item list. Small\n * objects with an `included` / `isIncluded` switch get that switch as a check on the row itself.\n *\n * Host wiring (RowsHostContext): a drill row calls `drill(path)` (the frame push); without one it falls back to\n * `form.navigate` while the form draws frames (`form.canNavigate`), else drill rows are inert (no button, no ›).\n * Dialog items render the host's `NestedForm` (V2 kit-field NestedForm: its own navigation stack); without one the\n * dialog shows the item's FieldList.\n *\n * Kit deviations from V2: sorting is `useDragReorder` (no @dnd-kit in the kit; it keeps dnd-kit's pointer and keyboard\n * sensor semantics: Space / Enter picks up, arrows move, Space / Enter drops as one write, Escape cancels; the table editor's cross-list drag via\n * `sortableId` is not ported); toasts come from KitServices (absent → silent); the gallery and reference-chip controls come from\n * ARRAY_CONTROLS (registered by the controls lane); a host that never registered them edits the raw list (FallbackControl).\n */\nimport * as React from \"react\";\nimport type { ComponentType } from \"react\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport {\n IconArrowDown, IconArrowUp, IconArrowsDiagonal, IconCheck, IconChevronDown, IconChevronRight, IconCopy, IconDots, IconGripVertical, IconMinus, IconPlus, IconRowInsertBottom, IconRowInsertTop, IconTrash, IconX,\n} from \"@tabler/icons-react\";\nimport { Button } from \"../ui/button\";\nimport { Menu, MenuContent, MenuItem, MenuLabel, MenuSeparator, MenuTrigger, Modal, ModalBody, ModalContent, ModalFooter, ModalHeader, Popover, PopoverAnchor, PopoverContent, Tooltip } from \"../ui/overlay\";\nimport { cn } from \"../lib/cn\";\nimport type { FieldPath, FieldSchema } from \"../schema/types\";\nimport type { ControlProps } from \"../types\";\nimport { useForm, useKitEnv, useKitServices } from \"../context\";\nimport { ensureKeys, isObj, itemId, newKey, pathKey } from \"../lib/path\";\nimport { initialFor, itemNoun, itemOpenMode, itemSchemaFor, itemSchemas, newItem, previewOf, primitiveItem, type Preview } from \"../lib/schema\";\nimport { IssueDot, Thumb } from \"./bits\";\nimport { KitIcon } from \"../lib/icons\";\nimport { FieldShell, PeerStack } from \"./field-shell\";\nimport { FieldLabelForContext } from \"../ui/field-context\";\nimport { FieldList } from \"./field-list\";\nimport { INSET_LINE, InsetScope } from \"./grouping\";\nimport { arrayMove, ItemList, useDragReorder, type ItemKind, type ItemListAdapter } from \"./item-list\";\nimport { CONTROLS, FallbackControl, useFieldAccess } from \"./kit-field\";\n\n/* ── Host wiring ───────────────────────────────────────────────────── */\n/** V2 kit-field NestedForm's props: a dialog's own SchemaForm over `fields`, writing into the parent form at `path`. */\nexport interface NestedFormProps {\n fields: FieldSchema[];\n title: string;\n icon?: string;\n path: FieldPath;\n navRef?: React.Ref<{ back: () => boolean }>;\n}\nexport interface RowsHost {\n /** Push a frame for an item / block path (F7b frames). Default: `form.navigate` while `form.canNavigate`. */\n drill?: (path: FieldPath) => void;\n /** Dialog-mode items: V2's NestedForm (own navigation stack). Default: the item's FieldList. */\n NestedForm?: ComponentType<NestedFormProps>;\n}\nexport const RowsHostContext = React.createContext<RowsHost>({});\n/** The frame push for a drill row, or undefined when nothing can draw the frame (the row is then inert). */\nexport function useDrill(): ((path: FieldPath) => void) | undefined {\n const host = React.useContext(RowsHostContext);\n const form = useForm();\n return host.drill ?? (form?.canNavigate ? form.navigate : undefined);\n}\n\n/** Primitive-array controls V2 imports from controls/media (GalleryControl) and controls/reference (ReferencesControl). */\nexport const ARRAY_CONTROLS: { gallery?: ComponentType<ControlProps>; references?: ComponentType<ControlProps> } = {};\n\nconst plural = (noun: string) => (noun.endsWith(\"y\") && !/[aeiou]y$/.test(noun) ? `${noun.slice(0, -1)}ies` : noun.endsWith(\"s\") ? noun : `${noun}s`);\n\nexport function ArrayField({ field, path }: { field: FieldSchema; path: FieldPath; parent?: Record<string, unknown> }) {\n const prim = primitiveItem(field);\n if (prim) return <PrimitiveArray field={field} item={prim} path={path} />;\n const one = oneFieldItem(field);\n if (one) return <OneFieldArray field={field} item={one.item} inner={one.inner} path={path} />;\n return <ObjectArray field={field} path={path} />;\n}\n\n/** Item types that edit as one line in the item list. */\nconst LIST_KIND: Partial<Record<FieldSchema[\"type\"], ItemKind>> = { string: \"text\", text: \"text\", slug: \"text\", url: \"url\", email: \"email\", number: \"number\" };\n\n/** `[{ _key, text }]` — an object item with exactly one line-like field edits as the item list (unless the schema forces another open mode). */\nfunction oneFieldItem(field: FieldSchema): { item: FieldSchema; inner: FieldSchema } | undefined {\n if (field.openMode && field.openMode !== \"inline\") return undefined;\n const of = itemSchemas(field);\n const item = of.length === 1 ? of[0] : undefined;\n const inner = item?.type === \"object\" && item.fields?.length === 1 ? item.fields[0] : undefined;\n return item && inner && LIST_KIND[inner.type] && !inner.scale ? { item, inner } : undefined;\n}\n\n/** The boolean an item shows as a check on its row (\"included\" in a feature list). */\nconst ROW_TOGGLE = /^(is)?included$/i;\nexport const rowToggleField = (s?: FieldSchema) => s?.fields?.find((f) => f.type === \"boolean\" && ROW_TOGGLE.test(f.name));\n\n/** List meta on the message line: \"3 items · max 6\". */\nfunction listMeta(n: number, field: FieldSchema) {\n const { min, max } = field.validation ?? {};\n const base = `${n} ${n === 1 ? \"item\" : \"items\"}`;\n return max != null ? `${base} · max ${max}` : min != null ? `${base} · min ${min}` : n ? base : \"\";\n}\n\n/* ── Primitive arrays ──────────────────────────────────────────────── */\nfunction PrimitiveArray({ field, item, path }: { field: FieldSchema; item: FieldSchema; path: FieldPath }) {\n const form = useForm()!;\n const id = React.useId();\n const { readOnly } = useFieldAccess(field);\n const key = pathKey(path);\n const value = form.getAt(path);\n const list = Array.isArray(value) ? value : [];\n const onChange = (v: unknown) => form.setAt(path, v);\n const props = { field, value: list, onChange, id, readOnly, path, onBlur: () => form.touch(key) };\n const kind = LIST_KIND[item.type];\n const adapter = React.useMemo<ItemListAdapter | undefined>(\n () =>\n kind\n ? {\n kind,\n read: (v) => (v == null ? \"\" : String(v)),\n write: (v) => v,\n valuePath: (i) => [i],\n placeholder: item.placeholder ?? (item.title && !/^(item|value)$/i.test(item.title) ? item.title : undefined),\n }\n : undefined,\n [kind, item.placeholder, item.title],\n );\n const Gallery = ARRAY_CONTROLS.gallery;\n const References = ARRAY_CONTROLS.references;\n const control =\n item.type === \"image\" ? (Gallery ? <Gallery {...props} /> : <FallbackControl {...props} />) :\n item.type === \"reference\" ? (References ? <References {...props} field={{ ...field, reference: item.reference }} /> : <FallbackControl {...props} />) :\n adapter ? <ItemList field={field} path={path} list={list} readOnly={readOnly} adapter={adapter} inputId={id} /> :\n <InlineList field={field} item={item} path={path} list={list} readOnly={readOnly} />;\n return (\n <FieldShell field={field} path={path} id={id} value={list} onChange={onChange} readOnly={readOnly} issue={form.visibleIssue(key)} meta={item.type === \"reference\" ? undefined : <span className=\"text-kit-xs text-kit-fg-3\">{listMeta(list.length, field)}</span>}>\n <div className=\"@container\">{control}</div>\n </FieldShell>\n );\n}\n\n/* ── One-field object arrays: same item list, value lives at item[inner.name] ── */\nfunction OneFieldArray({ field, item, inner, path }: { field: FieldSchema; item: FieldSchema; inner: FieldSchema; path: FieldPath }) {\n const form = useForm()!;\n const id = React.useId();\n const { readOnly } = useFieldAccess(field);\n const key = pathKey(path);\n const value = form.getAt(path);\n const list = Array.isArray(value) ? value : [];\n const adapter = React.useMemo<ItemListAdapter>(\n () => ({\n kind: LIST_KIND[inner.type]!,\n read: (v) => {\n const x = isObj(v) ? v[inner.name] : undefined;\n return x == null ? \"\" : String(x);\n },\n write: (v, prev) => ({ ...(isObj(prev) ? prev : (newItem(field, item) as object)), [inner.name]: v }),\n keyOf: (v) => (isObj(v) && typeof v._key === \"string\" ? v._key : undefined),\n valuePath: (i) => [i, inner.name],\n placeholder: inner.placeholder ?? item.preview?.fallback?.replace(/^Untitled /i, \"\").replace(/^./, (c) => c.toUpperCase()),\n }),\n [field, item, inner],\n );\n // legacy rows without `_key` get one on first render so rows stay stable while typing and dragging\n React.useEffect(() => {\n if (!readOnly && list.some((it) => isObj(it) && typeof it._key !== \"string\")) form.setAt(path, ensureKeys(list));\n }, [list, readOnly]); // eslint-disable-line react-hooks/exhaustive-deps\n return (\n <FieldShell field={field} path={path} id={id} value={list} onChange={(v) => form.setAt(path, v)} readOnly={readOnly} issue={form.visibleIssue(key)} meta={<span className=\"text-kit-xs text-kit-fg-3\">{listMeta(list.length, field)}</span>}>\n <div className=\"@container\">\n <ItemList field={field} path={path} list={list} readOnly={readOnly} adapter={adapter} inputId={id} />\n </div>\n </FieldShell>\n );\n}\n\nfunction InlineList({ field, item, path, list, readOnly }: { field: FieldSchema; item: FieldSchema; path: FieldPath; list: unknown[]; readOnly: boolean }) {\n const form = useForm()!;\n const Control = CONTROLS[item.type] ?? FallbackControl;\n const max = field.validation?.max;\n const ids = list.map((_, i) => `p${i}`);\n const sort = useDragReorder(ids, (from, to) => form.setAt(path, arrayMove(list, from, to)), { disabled: readOnly });\n const rowControl = (v: unknown, i: number) => (\n <Control field={{ ...item, title: `${item.title} ${i + 1}` }} value={v} onChange={(n) => form.setAt([...path, i], n)} id={`${pathKey(path)}-${i}`} path={[...path, i]} readOnly={readOnly} />\n );\n return (\n <div className=\"flex flex-col gap-1.5\">\n {list.map((v, i) => (\n <InlineRow key={ids[i]} id={ids[i]} labelId={`${pathKey(path)}-${i}-label`} sort={sort} readOnly={readOnly} onRemove={() => form.setAt(path, list.filter((_, j) => j !== i))}>\n {/* V2 draws no label on a row, so the row's name is an sr-only span (no <label> element) at the id a FieldShell's\n label has (`${id}-label`): aria-labelledby controls (rich text) and the row group read it, and the kit\n Input/Textarea/Select/Switch/Checkbox whose id is the row's take it through FieldLabelForContext (<label for>\n semantics without the element) */}\n <span id={`${pathKey(path)}-${i}-label`} className=\"sr-only\">{`${item.title} ${i + 1}`}</span>\n <FieldLabelForContext.Provider value={{ htmlFor: `${pathKey(path)}-${i}`, labelId: `${pathKey(path)}-${i}-label` }}>\n {rowControl(v, i)}\n </FieldLabelForContext.Provider>\n </InlineRow>\n ))}\n {sort.a11y}\n {readOnly ? null : (\n <Button size=\"sm\" variant=\"ghost\" className=\"self-start text-kit-fg-2\" leftIcon={<IconPlus stroke={1.5} />} disabled={max != null && list.length >= max} onClick={() => form.setAt(path, [...list, initialFor(item)])}>\n Add {itemNoun(field)}\n </Button>\n )}\n </div>\n );\n}\nfunction InlineRow({ id, labelId, sort, children, onRemove, readOnly }: { id: string; labelId: string; sort: ReturnType<typeof useDragReorder>; children: React.ReactNode; onRemove: () => void; readOnly: boolean }) {\n return (\n <div ref={sort.register(id)} style={sort.style(id)} className={cn(\"group/il flex items-start gap-1\", sort.active === id && \"relative z-10\")}>\n {readOnly ? null : (\n <button type=\"button\" aria-label=\"Drag to reorder\" {...sort.handle(id)} className=\"mt-1.5 flex h-5 w-4 shrink-0 cursor-grab touch-none items-center justify-center text-kit-fg-4 hover:text-kit-fg-2 active:cursor-grabbing\">\n <IconGripVertical className=\"size-3.5\" stroke={1.5} />\n </button>\n )}\n <div role=\"group\" aria-labelledby={labelId} className=\"min-w-0 flex-1\">{children}</div>\n {readOnly ? null : (\n <Tooltip content=\"Remove\">\n <button type=\"button\" aria-label=\"Remove\" onClick={onRemove} className=\"mt-1 flex size-6 shrink-0 items-center justify-center rounded-kit-md text-kit-fg-3 opacity-0 transition-opacity hover:bg-kit-hover hover:text-kit-fg focus-visible:opacity-100 group-hover/il:opacity-100\">\n <IconX className=\"size-3.5\" stroke={1.5} />\n </button>\n </Tooltip>\n )}\n </div>\n );\n}\n\n/* ── Object arrays: preview rows ───────────────────────────────────── */\nexport interface RowModel {\n id: string;\n index: number;\n item: unknown;\n preview: Preview;\n path: FieldPath;\n chip?: string;\n extra?: string;\n /** an included-style switch that is OFF: the title reads muted */\n dim?: boolean;\n}\n\nfunction ObjectArray({ field, path }: { field: FieldSchema; path: FieldPath }) {\n const form = useForm()!;\n const host = React.useContext(RowsHostContext);\n const drill = useDrill();\n const id = React.useId();\n const { readOnly } = useFieldAccess(field);\n const key = pathKey(path);\n const value = form.getAt(path);\n const list = Array.isArray(value) ? value : [];\n const of = itemSchemas(field);\n const mode = itemOpenMode(field);\n const rows: RowModel[] = list.map((it, i) => {\n const s = itemSchemaFor(field, it);\n const tf = rowToggleField(s);\n return {\n id: itemId(it, i), index: i, item: it, preview: previewOf(s, it, i, s?.title ?? itemNoun(field)), path: [...path, i], chip: of.length > 1 ? s?.title : undefined,\n dim: tf ? isObj(it) && it[tf.name] === false : undefined,\n };\n });\n const write = (next: unknown[]) => form.setAt(path, ensureKeys(next));\n const ops = useListOps(field, path, list, write, (i) => (mode === \"drill\" ? drill?.([...path, i]) : undefined));\n const [openId, setOpenId] = React.useState<string | null>(null);\n const dialogNav = React.useRef<{ back: () => boolean }>(null);\n const Nested = host.NestedForm;\n return (\n <FieldShell field={field} path={path} id={id} value={list} onChange={(v) => form.setAt(path, v)} readOnly={readOnly} issue={form.visibleIssue(key)} meta={<span className=\"text-kit-xs text-kit-fg-3\">{listMeta(list.length, field)}</span>}>\n <RowList\n field={field}\n rows={rows}\n readOnly={readOnly}\n layout={field.arrayLayout ?? \"list\"}\n mode={mode}\n openId={openId}\n onOpen={\n mode === \"drill\"\n ? drill && ((r) => drill(r.path))\n : (r) => setOpenId(openId === r.id ? null : r.id)\n }\n onCloseInline={() => setOpenId(null)}\n ops={ops}\n dialogNav={dialogNav}\n rowToggle={(r) => {\n const tf = rowToggleField(itemSchemaFor(field, r.item));\n if (!tf) return null;\n const on = isObj(r.item) && r.item[tf.name] !== false;\n return <RowCheck on={on} label={tf.title} title={r.preview.title} readOnly={readOnly} onToggle={() => form.setAt([...r.path, tf.name], !on)} />;\n }}\n renderInline={(r) => {\n const s = itemSchemaFor(field, r.item);\n // dialogs get their own navigation stack (nested lists drill inside the dialog)\n if (mode === \"dialog\" && Nested) return <Nested fields={s?.fields ?? []} title={r.preview.title} icon={s?.icon} path={r.path} navRef={dialogNav} />;\n // the row's own check IS the included switch — don't repeat it in the card\n const tf = rowToggleField(s);\n return <FieldList fields={(s?.fields ?? []).filter((f) => f !== tf)} basePath={r.path} memoryKey={`inl:${pathKey(r.path)}`} />;\n }}\n emptyLabel={`No ${plural(itemNoun(field))} yet.`}\n addButton={<AddItemButton field={field} disabled={readOnly || (field.validation?.max != null && list.length >= field.validation.max)} onAdd={ops.add} />}\n />\n </FieldShell>\n );\n}\n\n/** Shared list operations (arrays and slots). Remove shows an Undo toast; add can drill into the new item. */\nexport function useListOps(field: FieldSchema, _path: FieldPath, list: unknown[], write: (next: unknown[]) => void, afterAdd?: (index: number) => void) {\n const { toast } = useKitServices();\n const { min, max } = field.validation ?? {};\n const atMax = max != null && list.length >= max;\n const atMin = min != null && list.length <= min;\n const limit = () => toast?.(\"Limit reached\", { description: `${field.title} allows ${max} at most.` });\n return {\n atMax,\n atMin,\n add: (item: unknown, at = list.length) => {\n if (atMax) return limit();\n const next = [...list.slice(0, at), item, ...list.slice(at)];\n write(next);\n window.setTimeout(() => afterAdd?.(at), 0);\n },\n duplicate: (i: number) => {\n if (atMax) return limit();\n const copy = isObj(list[i]) ? { ...(structuredClone(list[i]) as object), _key: newKey() } : list[i];\n write([...list.slice(0, i + 1), copy, ...list.slice(i + 1)]);\n },\n move: (i: number, d: -1 | 1) => write(arrayMove(list, i, i + d)),\n reorder: (from: number, to: number) => write(arrayMove(list, from, to)),\n remove: (i: number, title: string) => {\n if (atMin) return toast?.(`At least ${min} required`, { description: `${field.title} needs ${min} or more.` });\n const prev = list;\n write(list.filter((_, j) => j !== i));\n toast?.(`“${title}” removed`, { action: { label: \"Undo\", onClick: () => write(prev) }, duration: 10_000 });\n },\n insertBlank: (at: number) => {\n const s = itemSchemas(field)[0];\n if (!s || atMax) return;\n const next = [...list.slice(0, at), newItem(field, s), ...list.slice(at)];\n write(next);\n },\n };\n}\nexport type ListOps = ReturnType<typeof useListOps>;\n\nfunction AddItemButton({ field, onAdd, disabled }: { field: FieldSchema; onAdd: (item: unknown) => void; disabled?: boolean }) {\n const of = itemSchemas(field);\n const noun = itemNoun(field);\n if (of.length <= 1)\n return (\n <Button size=\"sm\" variant=\"ghost\" className=\"text-kit-fg-2\" leftIcon={<IconPlus stroke={1.5} />} disabled={disabled} onClick={() => of[0] && onAdd(newItem(field, of[0]))}>\n Add {noun}\n </Button>\n );\n return (\n <Menu>\n <MenuTrigger render={<Button size=\"sm\" variant=\"ghost\" className=\"text-kit-fg-2\" leftIcon={<IconPlus stroke={1.5} />} disabled={disabled} />}>Add {noun}</MenuTrigger>\n <MenuContent align=\"start\" className=\"w-64\">\n <MenuLabel>Add to {field.title.toLowerCase()}</MenuLabel>\n {of.map((s) => (\n <MenuItem key={s.name} icon={<KitIcon name={s.icon} />} onClick={() => onAdd(newItem(field, s))} className=\"h-auto py-1.5\">\n <span className=\"flex flex-col\">\n <span>{s.title}</span>\n {s.description ? <span className=\"whitespace-normal text-kit-xs text-kit-fg-3\">{s.description}</span> : null}\n </span>\n </MenuItem>\n ))}\n </MenuContent>\n </Menu>\n );\n}\n\n/** The row list used by arrays AND slots. Without `onOpen` the rows are inert (a drill nothing can draw yet). */\nexport function RowList({\n field,\n rows,\n readOnly,\n layout,\n mode,\n openId,\n onOpen,\n onCloseInline,\n ops,\n renderInline,\n emptyLabel,\n addButton,\n leading,\n rowToggle,\n dialogNav,\n menuExtra,\n}: {\n dialogNav?: React.RefObject<{ back: () => boolean } | null>;\n field: FieldSchema;\n rows: RowModel[];\n readOnly: boolean;\n layout: \"list\" | \"grid\";\n mode: ReturnType<typeof itemOpenMode>;\n openId: string | null;\n onOpen?: (r: RowModel) => void;\n onCloseInline: () => void;\n ops: ListOps;\n renderInline: (r: RowModel) => React.ReactNode;\n emptyLabel: string;\n addButton: React.ReactNode;\n leading?: (r: RowModel) => React.ReactNode;\n /** a control BEFORE the title button (never inside it): the included check of feature rows */\n rowToggle?: (r: RowModel) => React.ReactNode;\n /** extra items in a row's ⋯ menu, above Remove (a table row's \"Move to group\") */\n menuExtra?: (r: RowModel) => React.ReactNode;\n}) {\n const sort = useDragReorder(rows.map((r) => r.id), ops.reorder, { axis: layout === \"grid\" ? \"grid\" : \"y\", disabled: readOnly, distance: 5 });\n const openRow = rows.find((r) => r.id === openId);\n if (rows.length === 0)\n return (\n <div className=\"flex flex-col items-center gap-2 rounded-kit-lg border border-dashed border-kit-line-strong px-4 py-5 text-center\">\n <span className=\"text-kit-sm text-kit-fg-3\">{emptyLabel}</span>\n {readOnly ? null : addButton}\n </div>\n );\n return (\n <div className=\"flex flex-col gap-1.5\">\n <div className={cn(layout === \"grid\" ? \"grid grid-cols-2 gap-1.5 @[520px]:grid-cols-3\" : \"overflow-hidden rounded-kit-lg border border-kit-line bg-kit-surface\")}>\n <AnimatePresence initial={false}>\n {rows.map((r) => (\n <Row\n key={r.id}\n r={r}\n count={rows.length}\n field={field}\n readOnly={readOnly}\n grid={layout === \"grid\"}\n mode={mode}\n open={openId === r.id}\n onOpen={onOpen ? () => onOpen(r) : undefined}\n ops={ops}\n sort={sort}\n leading={leading?.(r)}\n toggle={rowToggle?.(r)}\n extra={menuExtra?.(r)}\n inline={mode === \"inline\" && openId === r.id ? renderInline(r) : null}\n popover={mode === \"popover\" && openId === r.id ? renderInline(r) : null}\n onClosePopover={onCloseInline}\n />\n ))}\n </AnimatePresence>\n </div>\n {sort.a11y}\n {readOnly ? null : <div className=\"flex items-center\">{addButton}</div>}\n {mode === \"dialog\" && openRow ? (\n <Modal\n open\n onOpenChange={(o, d) => {\n if (o) return;\n // Escape steps back inside the dialog's own frames first\n if (d.reason === \"escape-key\" && dialogNav?.current?.back()) return d.cancel();\n onCloseInline();\n }}\n >\n <ModalContent size=\"lg\">\n <ModalHeader title={openRow.preview.title} description={`${field.title} · ${openRow.index + 1} of ${rows.length}`} icon={<KitIcon name={openRow.preview.icon ?? field.icon} />} />\n <ModalBody className=\"flex min-h-[320px] flex-col gap-5\">{renderInline(openRow)}</ModalBody>\n <ModalFooter>\n <span className=\"mr-auto text-kit-xs text-kit-fg-3\">Changes save as you type</span>\n <Button variant=\"primary\" onClick={onCloseInline}>Done</Button>\n </ModalFooter>\n </ModalContent>\n </Modal>\n ) : null}\n </div>\n );\n}\n\nfunction Row({\n r, count, field, readOnly, grid, mode, open, onOpen, ops, sort, leading, toggle, extra, inline, popover, onClosePopover,\n}: {\n r: RowModel; count: number; field: FieldSchema; readOnly: boolean; grid: boolean; mode: string; open: boolean; onOpen?: () => void; ops: ListOps;\n sort: ReturnType<typeof useDragReorder>; leading?: React.ReactNode; toggle?: React.ReactNode; extra?: React.ReactNode; inline: React.ReactNode; popover: React.ReactNode; onClosePopover: () => void;\n}) {\n const form = useForm(); // null when a RowList is used outside a kit form (a table in a design-system demo)\n const env = useKitEnv();\n /* V2 used `${r.id}-body`; ids without a _key fall back to i0, i1… and sample data reuses _keys across lists, so two\n arrays could share an id and aria-controls would point at the wrong body. The useId prefix keeps it unique. */\n const uid = React.useId();\n const isDragging = sort.active === r.id;\n // while anything is being dragged, rows move without the enter / exit height animation and without layout animation\n const dragging = sort.active != null;\n const roll = form?.rollup(r.path) ?? { errors: 0, warnings: 0 };\n const peers = Object.entries(env.presence).filter(([k]) => k === pathKey(r.path) || k.startsWith(`${pathKey(r.path)}.`)).flatMap(([, p]) => p);\n const menu = readOnly ? null : (\n <Menu>\n <MenuTrigger\n aria-label={`${r.preview.title} actions`}\n onClick={(e) => e.stopPropagation()}\n className=\"flex size-7 shrink-0 items-center justify-center rounded-kit-md text-kit-fg-3 hover:bg-kit-hover hover:text-kit-fg data-[popup-open]:bg-kit-hover data-[popup-open]:text-kit-fg\"\n >\n <IconDots className=\"size-4\" stroke={1.5} />\n </MenuTrigger>\n <MenuContent align=\"end\" className=\"w-52\">\n <MenuItem icon={<IconArrowUp stroke={1.5} />} disabled={r.index === 0} onClick={() => ops.move(r.index, -1)}>Move up</MenuItem>\n <MenuItem icon={<IconArrowDown stroke={1.5} />} disabled={r.index === count - 1} onClick={() => ops.move(r.index, 1)}>Move down</MenuItem>\n <MenuSeparator />\n <MenuItem icon={<IconCopy stroke={1.5} />} disabled={ops.atMax} onClick={() => ops.duplicate(r.index)}>{ops.atMax ? \"Duplicate · limit reached\" : \"Duplicate\"}</MenuItem>\n {field.type === \"array\" ? (\n <>\n <MenuItem icon={<IconRowInsertTop stroke={1.5} />} disabled={ops.atMax} onClick={() => ops.insertBlank(r.index)}>Add item above</MenuItem>\n <MenuItem icon={<IconRowInsertBottom stroke={1.5} />} disabled={ops.atMax} onClick={() => ops.insertBlank(r.index + 1)}>Add item below</MenuItem>\n </>\n ) : null}\n {extra ? (\n <>\n <MenuSeparator />\n {extra}\n </>\n ) : null}\n <MenuSeparator />\n <MenuItem danger icon={<IconTrash stroke={1.5} />} disabled={ops.atMin} onClick={() => ops.remove(r.index, r.preview.title)}>{ops.atMin ? `Remove · at least ${field.validation?.min} required` : \"Remove\"}</MenuItem>\n </MenuContent>\n </Menu>\n );\n const grip = readOnly ? null : (\n <button\n type=\"button\"\n aria-label={`Reorder ${r.preview.title}`}\n onClick={(e) => e.stopPropagation()}\n {...sort.handle(r.id)}\n className=\"relative flex h-7 w-4 shrink-0 cursor-grab touch-none items-center justify-center text-kit-fg-4 transition-colors before:absolute before:-inset-2 hover:text-kit-fg-2 active:cursor-grabbing\"\n >\n <IconGripVertical className=\"size-3.5\" stroke={1.5} />\n </button>\n );\n if (grid) {\n const tile = (\n <>\n <span className=\"flex aspect-[4/3] items-center justify-center bg-kit-muted\">\n {r.preview.media ? <img src={r.preview.media} alt=\"\" className=\"size-full object-cover\" /> : <KitIcon name={r.preview.icon ?? field.icon} className=\"size-5 text-kit-fg-3\" />}\n </span>\n <span className=\"block truncate px-2 pb-1.5 pt-1.5 text-kit-xs font-medium text-kit-fg\">{r.preview.title}</span>\n </>\n );\n return (\n <div ref={sort.register(r.id)} style={sort.style(r.id)} className={cn(\"relative\", isDragging && \"z-10\")}>\n <motion.div\n layout={!isDragging ? \"position\" : false}\n initial={{ opacity: 0, scale: 0.97 }}\n animate={{ opacity: 1, scale: 1 }}\n exit={{ opacity: 0, scale: 0.97 }}\n className={cn(\"group/row relative overflow-hidden rounded-kit-lg border border-kit-line bg-kit-surface transition-colors hover:border-kit-line-strong\", isDragging && \"shadow-kit-lg\")}\n >\n {onOpen ? (\n <button type=\"button\" onClick={onOpen} aria-label={`Open ${r.preview.title}, ${r.index + 1} of ${count}`} aria-haspopup={mode === \"popover\" || mode === \"dialog\" ? \"dialog\" : undefined} className=\"block w-full text-left\">\n {tile}\n </button>\n ) : (\n <div className=\"block w-full text-left\">{tile}</div>\n )}\n <div className=\"absolute right-1 top-1 flex items-center gap-0.5 rounded-kit-md bg-kit-surface/90 opacity-0 shadow-kit-xs transition-opacity group-hover/row:opacity-100 [@media(pointer:coarse)]:opacity-100\">\n {grip}\n {menu}\n </div>\n <IssueDot errors={roll.errors} warnings={roll.warnings} className=\"absolute left-2 top-2 ring-2 ring-kit-surface\" />\n </motion.div>\n </div>\n );\n }\n /* CPO D43 — a row says what opening it does: › drills into a new frame, ⌄ expands in place (rotates when open),\n ⧉ opens a popover or dialog. The WHOLE row is the hit area (hover tint); the title button carries focus,\n Enter / Space and the label (\"Open Starter\" / \"Expand Net-60 terms\"). */\n const inlineMode = mode === \"inline\";\n const bodyId = `${uid}${r.id}-body`;\n const verb = inlineMode ? (open ? \"Collapse\" : \"Expand\") : \"Open\";\n const trailing = !onOpen ? null : inlineMode ? (\n <IconChevronDown aria-hidden className={cn(\"size-4 shrink-0 text-kit-fg-3 transition-transform duration-200\", open && \"rotate-180 text-kit-fg-2\")} stroke={1.5} />\n ) : mode === \"drill\" ? (\n <IconChevronRight aria-hidden className=\"size-4 shrink-0 text-kit-fg-3 transition-transform duration-150 group-hover/row:translate-x-0.5\" stroke={1.5} />\n ) : (\n <IconArrowsDiagonal aria-hidden className=\"size-3.5 shrink-0 text-kit-fg-3\" stroke={1.5} />\n );\n const titleInner = (\n <>\n {leading ?? (toggle && !r.preview.media ? null : <Thumb media={r.preview.media} icon={r.preview.icon ?? field.icon} />)}\n <span className=\"min-w-0 flex-1\">\n <span className={cn(\"flex items-center gap-1.5 truncate text-kit-sm\", r.preview.empty || r.dim ? \"text-kit-fg-3\" : \"text-kit-fg\", open && \"font-medium\")}>\n <span className=\"truncate\">{r.preview.title}</span>\n {r.chip ? <span className=\"shrink-0 rounded-kit-md bg-kit-muted px-1 text-kit-2xs font-medium text-kit-fg-2\">{r.chip}</span> : null}\n </span>\n {/* the title already says what the item is; no \"Item 2 of 4\" filler (the position is in the aria label) */}\n {r.extra ?? r.preview.subtitle ? <span className=\"block truncate text-kit-xs text-kit-fg-3\">{r.extra ?? r.preview.subtitle}</span> : null}\n </span>\n </>\n );\n const rowInner = (\n <div\n onClick={(e) => {\n // anywhere on the row opens it, except its own controls (grip, ⋯, presence). The ⋯ menu renders in a portal but\n // React still bubbles its clicks here, so a click whose target is outside the row's own DOM (any menu item:\n // menuitem, menuitemradio, menuitemcheckbox, a submenu) never opens the row.\n const target = e.target as HTMLElement;\n if (!onOpen || !e.currentTarget.contains(target) || target.closest(\"button,[role^=menuitem],a,input\")) return;\n onOpen();\n }}\n className={cn(\"group/row flex min-h-12 items-center gap-2 py-1.5 pl-1.5 pr-2 transition-colors\", onOpen && \"cursor-pointer\", open ? \"bg-kit-subtle\" : onOpen && \"hover:bg-kit-subtle\")}\n >\n {grip}\n {toggle}\n {onOpen ? (\n <button\n type=\"button\"\n onClick={onOpen}\n data-row-open={r.id}\n aria-expanded={mode === \"drill\" ? undefined : open}\n aria-controls={inlineMode && open ? bodyId : undefined}\n aria-haspopup={mode === \"popover\" || mode === \"dialog\" ? \"dialog\" : undefined}\n aria-label={`${verb} ${r.preview.title}${r.chip ? `, ${r.chip}` : \"\"}, ${r.index + 1} of ${count}`}\n className=\"flex min-w-0 flex-1 items-center gap-2.5 rounded-kit-md text-left outline-none\"\n >\n {titleInner}\n </button>\n ) : (\n <div data-row-open={r.id} className=\"flex min-w-0 flex-1 items-center gap-2.5 text-left\">\n {titleInner}\n </div>\n )}\n <IssueDot errors={roll.errors} warnings={roll.warnings} />\n {peers.length ? <PeerStack peers={peers} size={16} /> : null}\n {menu}\n {trailing}\n </div>\n );\n return (\n <div\n ref={sort.register(r.id)}\n style={sort.style(r.id)}\n data-row-id={r.id}\n className={cn(\"relative border-b border-kit-line-subtle bg-kit-surface last:border-b-0\", isDragging && \"z-10 rounded-kit-lg shadow-kit-lg ring-1 ring-kit-line-strong\")}\n >\n <motion.div\n layout={!isDragging && !dragging ? \"position\" : false}\n initial={dragging ? false : { opacity: 0, height: 0 }}\n animate={{ opacity: 1, height: \"auto\" }}\n exit={dragging ? { opacity: 0, height: 0, transition: { duration: 0 } } : { opacity: 0, height: 0 }}\n transition={{ duration: 0.2, ease: [0.22, 1, 0.36, 1] }}\n className=\"overflow-hidden\"\n >\n {mode === \"popover\" ? (\n <Popover open={open} onOpenChange={(o) => !o && onClosePopover()}>\n <PopoverAnchor render={rowInner} />\n <PopoverContent className=\"w-[340px] p-4\" align=\"end\" side=\"left\" sideOffset={10}>\n {popover}\n </PopoverContent>\n </Popover>\n ) : (\n rowInner\n )}\n {inlineMode ? (\n <AnimatePresence initial={false}>\n {open ? (\n <motion.div initial={{ height: 0, opacity: 0 }} animate={{ height: \"auto\", opacity: 1 }} exit={{ height: 0, opacity: 0 }} transition={{ duration: 0.2, ease: [0.22, 1, 0.36, 1] }} className=\"overflow-hidden\">\n {/* D63: the row's fields sit behind the one inset line under its title; no tint, no card inside the row */}\n <div className=\"px-3 pb-3 pt-1\">\n <div id={bodyId} role=\"group\" aria-label={r.preview.title} data-group=\"inset\" className={INSET_LINE}><InsetScope>{inline}</InsetScope></div>\n </div>\n </motion.div>\n ) : null}\n </AnimatePresence>\n ) : null}\n </motion.div>\n </div>\n );\n}\n\n/** The included / not-included check on a feature row (D47): a real checkbox, outside the row's open button. */\nfunction RowCheck({ on, label, title, readOnly, onToggle }: { on: boolean; label: string; title: string; readOnly: boolean; onToggle: () => void }) {\n return (\n <Tooltip content={on ? label : `Not ${label.toLowerCase()}`}>\n <button\n type=\"button\"\n role=\"checkbox\"\n aria-checked={on}\n aria-label={`${label}: ${title}`}\n disabled={readOnly}\n onClick={(e) => {\n e.stopPropagation();\n onToggle();\n }}\n className=\"group/chk flex size-7 shrink-0 items-center justify-center rounded-kit-md transition-colors hover:bg-kit-hover disabled:pointer-events-none\"\n >\n <span\n className={cn(\n \"flex size-[18px] items-center justify-center rounded-full transition-colors\",\n on ? \"bg-kit-inverse text-kit-fg-inverse\" : \"border border-dashed border-kit-field-border-hover text-kit-fg-3 group-hover/chk:border-[var(--kit-emphasis-line)]\",\n )}\n >\n {on ? <IconCheck className=\"size-3\" stroke={2.5} /> : <IconMinus className=\"size-3\" stroke={2} />}\n </span>\n </button>\n </Tooltip>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import * as React from "react";
2
+ /**
3
+ * CPO D45: a field that IS its own row (an object that drills in) has no label row above it; its shell hands the
4
+ * chrome (ⓘ, badges, comments, presence, ⋯) to the row through this context, and the row draws it before its chevron.
5
+ */
6
+ export declare const RowChrome: React.Context<React.ReactNode>;
7
+ /** Validation rollup dot: red for errors, amber for warnings. Never colour alone — the tooltip names it. */
8
+ export declare function IssueDot({ errors, warnings, className }: {
9
+ errors: number;
10
+ warnings?: number;
11
+ className?: string;
12
+ }): import("react/jsx-runtime").JSX.Element | null;
13
+ /**
14
+ * 28px leading tile for rows: image when there is one, else the type icon.
15
+ */
16
+ export declare function Thumb({ media, icon, size, className }: {
17
+ media?: string;
18
+ icon?: string;
19
+ size?: number;
20
+ className?: string;
21
+ }): import("react/jsx-runtime").JSX.Element;
22
+ export declare function Kbdish({ children }: {
23
+ children: React.ReactNode;
24
+ }): import("react/jsx-runtime").JSX.Element;
package/engine/bits.js ADDED
@@ -0,0 +1,60 @@
1
+ import { cn } from "../lib/cn.js";
2
+ import { KitIcon } from "../lib/icons.js";
3
+ import { Tooltip } from "../ui/overlay.js";
4
+ import * as React from "react";
5
+ import { jsx } from "react/jsx-runtime";
6
+ //#region src/kit/engine/bits.tsx
7
+ /**
8
+ * CPO D45: a field that IS its own row (an object that drills in) has no label row above it; its shell hands the
9
+ * chrome (ⓘ, badges, comments, presence, ⋯) to the row through this context, and the row draws it before its chevron.
10
+ */
11
+ var RowChrome = React.createContext(null);
12
+ /** Validation rollup dot: red for errors, amber for warnings. Never colour alone — the tooltip names it. */
13
+ function IssueDot({ errors, warnings, className }) {
14
+ if (!errors && !warnings) return null;
15
+ const text = errors ? `${errors} ${errors === 1 ? "issue" : "issues"} to fix` : `${warnings} ${warnings === 1 ? "suggestion" : "suggestions"}`;
16
+ return /* @__PURE__ */ jsx(Tooltip, {
17
+ content: text,
18
+ children: /* @__PURE__ */ jsx("span", {
19
+ role: "img",
20
+ "aria-label": text,
21
+ className: cn("relative inline-flex size-2 shrink-0 rounded-full", errors ? "bg-kit-danger" : "bg-kit-warning", className)
22
+ })
23
+ });
24
+ }
25
+ /**
26
+ * 28px leading tile for rows: image when there is one, else the type icon.
27
+ */
28
+ function Thumb({ media, icon, size = 28, className }) {
29
+ if (media) return /* @__PURE__ */ jsx("img", {
30
+ src: media,
31
+ alt: "",
32
+ style: {
33
+ width: size,
34
+ height: size
35
+ },
36
+ className: cn("shrink-0 rounded-kit-md border border-kit-line object-cover", className)
37
+ });
38
+ return /* @__PURE__ */ jsx("span", {
39
+ style: {
40
+ width: size,
41
+ height: size
42
+ },
43
+ className: cn("flex shrink-0 items-center justify-center rounded-kit-md bg-kit-muted text-kit-fg-2", className),
44
+ children: /* @__PURE__ */ jsx(KitIcon, {
45
+ name: icon,
46
+ className: "size-4"
47
+ })
48
+ });
49
+ }
50
+ function Kbdish({ children }) {
51
+ return /* @__PURE__ */ jsx("kbd", {
52
+ "data-hint": "shortcuts",
53
+ className: "inline-flex h-4 min-w-4 items-center justify-center rounded-kit-md border border-kit-line bg-kit-subtle px-1 font-kit-sans text-kit-2xs text-kit-fg-3",
54
+ children
55
+ });
56
+ }
57
+ //#endregion
58
+ export { IssueDot, Kbdish, RowChrome, Thumb };
59
+
60
+ //# sourceMappingURL=bits.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bits.js","names":[],"sources":["../../src/kit/engine/bits.tsx"],"sourcesContent":["import * as React from \"react\";\nimport { KitIcon } from \"../lib/icons\";\nimport { cn } from \"../lib/cn\";\nimport { Tooltip } from \"../ui/overlay\";\n\n/**\n * CPO D45: a field that IS its own row (an object that drills in) has no label row above it; its shell hands the\n * chrome (ⓘ, badges, comments, presence, ⋯) to the row through this context, and the row draws it before its chevron.\n */\nexport const RowChrome = React.createContext<React.ReactNode>(null);\n\n/** Validation rollup dot: red for errors, amber for warnings. Never colour alone — the tooltip names it. */\nexport function IssueDot({ errors, warnings, className }: { errors: number; warnings?: number; className?: string }) {\n if (!errors && !warnings) return null;\n const text = errors ? `${errors} ${errors === 1 ? \"issue\" : \"issues\"} to fix` : `${warnings} ${warnings === 1 ? \"suggestion\" : \"suggestions\"}`;\n return (\n <Tooltip content={text}>\n <span role=\"img\" aria-label={text} className={cn(\"relative inline-flex size-2 shrink-0 rounded-full\", errors ? \"bg-kit-danger\" : \"bg-kit-warning\", className)} />\n </Tooltip>\n );\n}\n\n/**\n * 28px leading tile for rows: image when there is one, else the type icon.\n */\nexport function Thumb({ media, icon, size = 28, className }: { media?: string; icon?: string; size?: number; className?: string }) {\n if (media) return <img src={media} alt=\"\" style={{ width: size, height: size }} className={cn(\"shrink-0 rounded-kit-md border border-kit-line object-cover\", className)} />;\n return (\n <span style={{ width: size, height: size }} className={cn(\"flex shrink-0 items-center justify-center rounded-kit-md bg-kit-muted text-kit-fg-2\", className)}>\n <KitIcon name={icon} className=\"size-4\" />\n </span>\n );\n}\n\nexport function Kbdish({ children }: { children: React.ReactNode }) {\n return (\n <kbd data-hint=\"shortcuts\" className=\"inline-flex h-4 min-w-4 items-center justify-center rounded-kit-md border border-kit-line bg-kit-subtle px-1 font-kit-sans text-kit-2xs text-kit-fg-3\">\n {children}\n </kbd>\n );\n}\n"],"mappings":";;;;;;;;;;AASA,IAAa,YAAY,MAAM,cAA+B,KAAK;;AAGnE,SAAgB,SAAS,EAAE,QAAQ,UAAU,aAAwE;AACnH,KAAI,CAAC,UAAU,CAAC,SAAU,QAAO;CACjC,MAAM,OAAO,SAAS,GAAG,OAAO,GAAG,WAAW,IAAI,UAAU,SAAS,WAAW,GAAG,SAAS,GAAG,aAAa,IAAI,eAAe;AAC/H,QACE,oBAAC,SAAD;EAAS,SAAS;YAChB,oBAAC,QAAD;GAAM,MAAK;GAAM,cAAY;GAAM,WAAW,GAAG,qDAAqD,SAAS,kBAAkB,kBAAkB,UAAU;GAAI,CAAA;EACzJ,CAAA;;;;;AAOd,SAAgB,MAAM,EAAE,OAAO,MAAM,OAAO,IAAI,aAAmF;AACjI,KAAI,MAAO,QAAO,oBAAC,OAAD;EAAK,KAAK;EAAO,KAAI;EAAG,OAAO;GAAE,OAAO;GAAM,QAAQ;GAAM;EAAE,WAAW,GAAG,+DAA+D,UAAU;EAAI,CAAA;AAC3K,QACE,oBAAC,QAAD;EAAM,OAAO;GAAE,OAAO;GAAM,QAAQ;GAAM;EAAE,WAAW,GAAG,uFAAuF,UAAU;YACzJ,oBAAC,SAAD;GAAS,MAAM;GAAM,WAAU;GAAW,CAAA;EACrC,CAAA;;AAIX,SAAgB,OAAO,EAAE,YAA2C;AAClE,QACE,oBAAC,OAAD;EAAK,aAAU;EAAY,WAAU;EAClC;EACG,CAAA"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * KitBreadcrumb — the drill-in trail, rendered by the shared <PathCrumbs> (CPO D38): ← back (Esc) · root · … ·
3
+ * current chip. It collapses by the width it actually has (truncate → icon-only → "⋯ +N" Pathway popover), each
4
+ * crumb carries its type icon, and a red dot marks any crumb whose subtree has errors. Port of V2 engine/breadcrumb.tsx.
5
+ */
6
+ import * as React from "react";
7
+ import { type PathCrumb } from "../ui/path-crumbs";
8
+ import type { Frame } from "../lib/frames";
9
+ import type { FieldPath, TypeSchema } from "../schema/types";
10
+ export interface KitCrumb {
11
+ key: string;
12
+ title: string;
13
+ icon?: string;
14
+ path: FieldPath;
15
+ errors?: number;
16
+ }
17
+ export type CrumbIconFor = (name: string) => React.ReactNode;
18
+ /** KitCrumbs → PathCrumbs items (hosts that merge the kit trail into their own header use this). */
19
+ export declare function kitPathItems(crumbs: KitCrumb[], onNavigate: (path: FieldPath) => void, iconFor?: CrumbIconFor): PathCrumb[];
20
+ export declare function KitBreadcrumb({ crumbs, onNavigate, className, iconFor }: {
21
+ crumbs: KitCrumb[];
22
+ onNavigate: (path: FieldPath) => void;
23
+ className?: string;
24
+ iconFor?: CrumbIconFor;
25
+ }): import("react/jsx-runtime").JSX.Element | null;
26
+ /**
27
+ * Frames → crumbs (V2 schema-form): the root crumb is the host's label (or the schema title) with the schema icon;
28
+ * every other crumb carries the error count of its subtree (a history crumb counts its field's).
29
+ */
30
+ export declare function framesToCrumbs(frames: Frame[], schema: Pick<TypeSchema, "title" | "icon">, rollup: (prefix: FieldPath) => {
31
+ errors: number;
32
+ }, rootLabel?: string): KitCrumb[];
33
+ /** A stable signature of the crumbs, so a host's `onCrumbs` fires only when the trail actually changed. */
34
+ export declare const crumbSignature: (crumbs: KitCrumb[]) => string;
35
+ /**
36
+ * The form's own crumb bar (when the host does not take the trail through `onCrumbs`): it opens on the first drill
37
+ * and closes back at the root, height + fade 180ms, ease [0.22, 1, 0.36, 1]. The document variant sticks under the
38
+ * host's sticky header and bleeds to the gutter.
39
+ */
40
+ export declare function FrameCrumbs({ crumbs, onNavigate, variant, iconFor, }: {
41
+ crumbs: KitCrumb[];
42
+ onNavigate: (path: FieldPath) => void;
43
+ variant: "panel" | "document";
44
+ iconFor?: CrumbIconFor;
45
+ }): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,87 @@
1
+ import { cn } from "../lib/cn.js";
2
+ import { frameKeyOf } from "../lib/path.js";
3
+ import { KitIcon } from "../lib/icons.js";
4
+ import { PathCrumbs } from "../ui/path-crumbs.js";
5
+ import "react";
6
+ import { jsx } from "react/jsx-runtime";
7
+ import { AnimatePresence, motion } from "framer-motion";
8
+ //#region src/kit/engine/breadcrumb.tsx
9
+ var fallbackIcon = (name) => /* @__PURE__ */ jsx(KitIcon, { name });
10
+ /** KitCrumbs → PathCrumbs items (hosts that merge the kit trail into their own header use this). */
11
+ function kitPathItems(crumbs, onNavigate, iconFor = fallbackIcon) {
12
+ return crumbs.map((c) => ({
13
+ id: c.key,
14
+ label: c.title,
15
+ icon: c.icon ? iconFor(c.icon) : void 0,
16
+ errors: c.errors,
17
+ onSelect: () => onNavigate(c.path)
18
+ }));
19
+ }
20
+ function KitBreadcrumb({ crumbs, onNavigate, className, iconFor }) {
21
+ if (crumbs.length < 2) return null;
22
+ return /* @__PURE__ */ jsx(PathCrumbs, {
23
+ items: kitPathItems(crumbs, onNavigate, iconFor),
24
+ backShortcut: "Esc",
25
+ label: "Field path",
26
+ className: className ?? "h-10"
27
+ });
28
+ }
29
+ /**
30
+ * Frames → crumbs (V2 schema-form): the root crumb is the host's label (or the schema title) with the schema icon;
31
+ * every other crumb carries the error count of its subtree (a history crumb counts its field's).
32
+ */
33
+ function framesToCrumbs(frames, schema, rollup, rootLabel) {
34
+ return frames.map((f, i) => ({
35
+ key: frameKeyOf(f.path),
36
+ title: i === 0 ? rootLabel ?? schema.title : f.title,
37
+ icon: f.icon ?? (i === 0 ? schema.icon : void 0),
38
+ path: f.path,
39
+ errors: i === 0 ? 0 : rollup(f.kind === "history" ? f.path.slice(0, -1) : f.path).errors
40
+ }));
41
+ }
42
+ /** A stable signature of the crumbs, so a host's `onCrumbs` fires only when the trail actually changed. */
43
+ var crumbSignature = (crumbs) => crumbs.map((c) => `${c.key}\u0001${c.title}\u0001${c.icon ?? ""}\u0001${c.errors ?? 0}`).join("");
44
+ /**
45
+ * The form's own crumb bar (when the host does not take the trail through `onCrumbs`): it opens on the first drill
46
+ * and closes back at the root, height + fade 180ms, ease [0.22, 1, 0.36, 1]. The document variant sticks under the
47
+ * host's sticky header and bleeds to the gutter.
48
+ */
49
+ function FrameCrumbs({ crumbs, onNavigate, variant, iconFor }) {
50
+ return /* @__PURE__ */ jsx(AnimatePresence, {
51
+ initial: false,
52
+ children: crumbs.length > 1 ? /* @__PURE__ */ jsx(motion.div, {
53
+ initial: {
54
+ height: 0,
55
+ opacity: 0
56
+ },
57
+ animate: {
58
+ height: "auto",
59
+ opacity: 1
60
+ },
61
+ exit: {
62
+ height: 0,
63
+ opacity: 0
64
+ },
65
+ transition: {
66
+ duration: .18,
67
+ ease: [
68
+ .22,
69
+ 1,
70
+ .36,
71
+ 1
72
+ ]
73
+ },
74
+ "data-frame-crumbs": true,
75
+ className: cn("z-[5] shrink-0 overflow-hidden border-b border-kit-line bg-kit-surface", variant === "document" ? "sticky top-[var(--kit-sticky-top,0px)] mx-[calc(var(--kit-gutter,0.5rem)*-1)] px-[var(--kit-gutter,0.5rem)]" : "px-3"),
76
+ children: /* @__PURE__ */ jsx(KitBreadcrumb, {
77
+ crumbs,
78
+ onNavigate,
79
+ iconFor
80
+ })
81
+ }, "crumbs") : null
82
+ });
83
+ }
84
+ //#endregion
85
+ export { FrameCrumbs, KitBreadcrumb, crumbSignature, framesToCrumbs, kitPathItems };
86
+
87
+ //# sourceMappingURL=breadcrumb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"breadcrumb.js","names":[],"sources":["../../src/kit/engine/breadcrumb.tsx"],"sourcesContent":["/**\n * KitBreadcrumb — the drill-in trail, rendered by the shared <PathCrumbs> (CPO D38): ← back (Esc) · root · … ·\n * current chip. It collapses by the width it actually has (truncate → icon-only → \"⋯ +N\" Pathway popover), each\n * crumb carries its type icon, and a red dot marks any crumb whose subtree has errors. Port of V2 engine/breadcrumb.tsx.\n */\nimport * as React from \"react\";\nimport { AnimatePresence, motion } from \"framer-motion\";\nimport { KitIcon } from \"../lib/icons\";\nimport { PathCrumbs, type PathCrumb } from \"../ui/path-crumbs\";\nimport { cn } from \"../lib/cn\";\nimport { frameKeyOf } from \"../lib/path\";\nimport type { Frame } from \"../lib/frames\";\nimport type { FieldPath, TypeSchema } from \"../schema/types\";\n\nexport interface KitCrumb {\n key: string;\n title: string;\n icon?: string;\n path: FieldPath;\n errors?: number;\n}\n\nexport type CrumbIconFor = (name: string) => React.ReactNode;\nconst fallbackIcon: CrumbIconFor = (name) => <KitIcon name={name} />;\n\n/** KitCrumbs → PathCrumbs items (hosts that merge the kit trail into their own header use this). */\nexport function kitPathItems(crumbs: KitCrumb[], onNavigate: (path: FieldPath) => void, iconFor: CrumbIconFor = fallbackIcon): PathCrumb[] {\n return crumbs.map((c) => ({\n id: c.key,\n label: c.title,\n icon: c.icon ? iconFor(c.icon) : undefined,\n errors: c.errors,\n onSelect: () => onNavigate(c.path),\n }));\n}\n\nexport function KitBreadcrumb({ crumbs, onNavigate, className, iconFor }: { crumbs: KitCrumb[]; onNavigate: (path: FieldPath) => void; className?: string; iconFor?: CrumbIconFor }) {\n if (crumbs.length < 2) return null;\n return <PathCrumbs items={kitPathItems(crumbs, onNavigate, iconFor)} backShortcut=\"Esc\" label=\"Field path\" className={className ?? \"h-10\"} />;\n}\n\n/**\n * Frames → crumbs (V2 schema-form): the root crumb is the host's label (or the schema title) with the schema icon;\n * every other crumb carries the error count of its subtree (a history crumb counts its field's).\n */\nexport function framesToCrumbs(\n frames: Frame[],\n schema: Pick<TypeSchema, \"title\" | \"icon\">,\n rollup: (prefix: FieldPath) => { errors: number },\n rootLabel?: string,\n): KitCrumb[] {\n return frames.map((f, i) => ({\n key: frameKeyOf(f.path),\n title: i === 0 ? rootLabel ?? schema.title : f.title,\n icon: f.icon ?? (i === 0 ? schema.icon : undefined),\n path: f.path,\n errors: i === 0 ? 0 : rollup(f.kind === \"history\" ? f.path.slice(0, -1) : f.path).errors,\n }));\n}\n\n/** A stable signature of the crumbs, so a host's `onCrumbs` fires only when the trail actually changed. */\nexport const crumbSignature = (crumbs: KitCrumb[]) => crumbs.map((c) => `${c.key}\\u0001${c.title}\\u0001${c.icon ?? \"\"}\\u0001${c.errors ?? 0}`).join(\"\\u0002\");\n\n/**\n * The form's own crumb bar (when the host does not take the trail through `onCrumbs`): it opens on the first drill\n * and closes back at the root, height + fade 180ms, ease [0.22, 1, 0.36, 1]. The document variant sticks under the\n * host's sticky header and bleeds to the gutter.\n */\nexport function FrameCrumbs({\n crumbs,\n onNavigate,\n variant,\n iconFor,\n}: {\n crumbs: KitCrumb[];\n onNavigate: (path: FieldPath) => void;\n variant: \"panel\" | \"document\";\n iconFor?: CrumbIconFor;\n}) {\n return (\n <AnimatePresence initial={false}>\n {crumbs.length > 1 ? (\n <motion.div\n key=\"crumbs\"\n initial={{ height: 0, opacity: 0 }}\n animate={{ height: \"auto\", opacity: 1 }}\n exit={{ height: 0, opacity: 0 }}\n transition={{ duration: 0.18, ease: [0.22, 1, 0.36, 1] }}\n data-frame-crumbs\n className={cn(\n \"z-[5] shrink-0 overflow-hidden border-b border-kit-line bg-kit-surface\",\n variant === \"document\" ? \"sticky top-[var(--kit-sticky-top,0px)] mx-[calc(var(--kit-gutter,0.5rem)*-1)] px-[var(--kit-gutter,0.5rem)]\" : \"px-3\",\n )}\n >\n <KitBreadcrumb crumbs={crumbs} onNavigate={onNavigate} iconFor={iconFor} />\n </motion.div>\n ) : null}\n </AnimatePresence>\n );\n}\n"],"mappings":";;;;;;;;AAuBA,IAAM,gBAA8B,SAAS,oBAAC,SAAD,EAAe,MAAQ,CAAA;;AAGpE,SAAgB,aAAa,QAAoB,YAAuC,UAAwB,cAA2B;AACzI,QAAO,OAAO,KAAK,OAAO;EACxB,IAAI,EAAE;EACN,OAAO,EAAE;EACT,MAAM,EAAE,OAAO,QAAQ,EAAE,KAAK,GAAG,KAAA;EACjC,QAAQ,EAAE;EACV,gBAAgB,WAAW,EAAE,KAAK;EACnC,EAAE;;AAGL,SAAgB,cAAc,EAAE,QAAQ,YAAY,WAAW,WAAsH;AACnL,KAAI,OAAO,SAAS,EAAG,QAAO;AAC9B,QAAO,oBAAC,YAAD;EAAY,OAAO,aAAa,QAAQ,YAAY,QAAQ;EAAE,cAAa;EAAM,OAAM;EAAa,WAAW,aAAa;EAAU,CAAA;;;;;;AAO/I,SAAgB,eACd,QACA,QACA,QACA,WACY;AACZ,QAAO,OAAO,KAAK,GAAG,OAAO;EAC3B,KAAK,WAAW,EAAE,KAAK;EACvB,OAAO,MAAM,IAAI,aAAa,OAAO,QAAQ,EAAE;EAC/C,MAAM,EAAE,SAAS,MAAM,IAAI,OAAO,OAAO,KAAA;EACzC,MAAM,EAAE;EACR,QAAQ,MAAM,IAAI,IAAI,OAAO,EAAE,SAAS,YAAY,EAAE,KAAK,MAAM,GAAG,GAAG,GAAG,EAAE,KAAK,CAAC;EACnF,EAAE;;;AAIL,IAAa,kBAAkB,WAAuB,OAAO,KAAK,MAAM,GAAG,EAAE,IAAI,QAAQ,EAAE,MAAM,QAAQ,EAAE,QAAQ,GAAG,QAAQ,EAAE,UAAU,IAAI,CAAC,KAAK,IAAS;;;;;;AAO7J,SAAgB,YAAY,EAC1B,QACA,YACA,SACA,WAMC;AACD,QACE,oBAAC,iBAAD;EAAiB,SAAS;YACvB,OAAO,SAAS,IACf,oBAAC,OAAO,KAAR;GAEE,SAAS;IAAE,QAAQ;IAAG,SAAS;IAAG;GAClC,SAAS;IAAE,QAAQ;IAAQ,SAAS;IAAG;GACvC,MAAM;IAAE,QAAQ;IAAG,SAAS;IAAG;GAC/B,YAAY;IAAE,UAAU;IAAM,MAAM;KAAC;KAAM;KAAG;KAAM;KAAE;IAAE;GACxD,qBAAA;GACA,WAAW,GACT,0EACA,YAAY,aAAa,gHAAgH,OAC1I;aAED,oBAAC,eAAD;IAAuB;IAAoB;IAAqB;IAAW,CAAA;GAChE,EAZP,SAYO,GACX;EACY,CAAA"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Expanded editing (CPO D49), owned by the engine: rich text, code and tables open in the ONE shared
3
+ * ExpandedEditorModal (ui/expanded-editor-modal.tsx). V2 did this per control (RichTextControl + RichTextExpandAction,
4
+ * TableControl + TableFullScreenAction); the engine opens the modal around WHATEVER control the field has: the kit
5
+ * control from CONTROLS, or the host's when a control hands a stored value off (LegacyFallback). The modal body is that same control on the same value and the same onChange, so the field underneath
6
+ * and the expanded one stay in sync and every write keeps the exact stored shape the inline control writes.
7
+ *
8
+ * Ways in (V2): the ⤢ button in the field's label row (shown on hover, always on touch), and ⌘↵ / Ctrl+↵ while the
9
+ * field's control has focus. Inside the modal ⌘↵ or Esc closes it (menus and popovers inside close first) and focus
10
+ * returns to whatever opened it. A control lane may open or close it from its own toolbar with `openExpanded`.
11
+ *
12
+ * Offered only where expanding edits something: never read-only, never a type whose control behind it cannot edit
13
+ * (code and tables expand only once a kit control is registered for them; the host draws those read-only today).
14
+ */
15
+ import * as React from "react";
16
+ import type { ComponentType } from "react";
17
+ import type { FieldPath, FieldSchema, SchemaType } from "../schema/types";
18
+ import type { ControlProps } from "../types";
19
+ export interface ExpandSpec {
20
+ /** "reading" centres a ~720px writing column; "wide" uses the whole dialog (tables, code) */
21
+ layout: "reading" | "wide";
22
+ /** the header's quiet meta line for this value ("312 words", "6 rows · 4 columns") */
23
+ meta: (value: unknown) => string;
24
+ /** the label-row button's name and tooltip */
25
+ label: "Expand editor" | "Edit in full screen";
26
+ /** V2: the document variant already draws the full editor in its column, so writing types offer no ⤢ there */
27
+ panelOnly?: boolean;
28
+ /** expanding needs a kit control: the host's control for this type cannot edit it (read-only card) */
29
+ needsKitControl?: boolean;
30
+ }
31
+ /** Words in a value: a string (tags stripped), Portable Text blocks, or a rich-text envelope ({ html } / { value }). */
32
+ export declare function wordsIn(value: unknown): number;
33
+ /** Type → how it expands. Additive like CONTROLS: one entry per type. Plain long text (`text`) has none: V2's
34
+ * TextControl is a bare textarea that grows to its value, so an extra ⤢ would only add a tab stop V2 lacks. */
35
+ export declare const EXPANDABLE: Partial<Record<SchemaType, ExpandSpec>>;
36
+ /** The spec when this field can expand here, else null. */
37
+ export declare function expandSpecFor(field: FieldSchema, opts: {
38
+ readOnly: boolean;
39
+ hasKitControl: boolean;
40
+ variant: string;
41
+ }): ExpandSpec | null;
42
+ export declare function openExpanded(key: string | null): void;
43
+ export declare const expandKey: (docId: string, path: FieldPath) => string;
44
+ export declare function useExpandedKey(): string | null;
45
+ /** ⌘↵ / Ctrl+↵ (no Shift or Alt): the expand shortcut. */
46
+ export declare const isExpandShortcut: (e: React.KeyboardEvent | KeyboardEvent) => boolean;
47
+ /** The label-row ⤢ (V2 RichTextExpandAction / TableFullScreenButton): hidden at rest until hover, always on touch. */
48
+ export declare function ExpandAction({ field, path, spec }: {
49
+ field: FieldSchema;
50
+ path: FieldPath;
51
+ spec: ExpandSpec;
52
+ }): import("react/jsx-runtime").JSX.Element;
53
+ /**
54
+ * The field's expanded editor: the same control, value and onChange in the modal. Mounted only while open, so the
55
+ * inline control and this one never fight over the same DOM id (the modal one gets `${id}-expanded`).
56
+ */
57
+ export declare function ExpandedField({ field, path, spec, Control, value, onChange, onBlur, invalid, id, parent, }: {
58
+ field: FieldSchema;
59
+ path: FieldPath;
60
+ spec: ExpandSpec;
61
+ Control: ComponentType<ControlProps>;
62
+ value: unknown;
63
+ onChange: (v: unknown) => void;
64
+ onBlur?: () => void;
65
+ invalid?: boolean;
66
+ id: string;
67
+ parent?: Record<string, unknown>;
68
+ }): import("react/jsx-runtime").JSX.Element;
@@ -0,0 +1,170 @@
1
+ import { cn } from "../lib/cn.js";
2
+ import { isObj, pathKey } from "../lib/path.js";
3
+ import { useForm, useKitEnv } from "../context.js";
4
+ import { Tooltip } from "../ui/overlay.js";
5
+ import { resolveFrames } from "../lib/frames.js";
6
+ import { ExpandedEditorModal } from "../ui/expanded-editor-modal.js";
7
+ import * as React from "react";
8
+ import { IconArrowsMaximize } from "@tabler/icons-react";
9
+ import { jsx } from "react/jsx-runtime";
10
+ //#region src/kit/engine/expand.tsx
11
+ /**
12
+ * Expanded editing (CPO D49), owned by the engine: rich text, code and tables open in the ONE shared
13
+ * ExpandedEditorModal (ui/expanded-editor-modal.tsx). V2 did this per control (RichTextControl + RichTextExpandAction,
14
+ * TableControl + TableFullScreenAction); the engine opens the modal around WHATEVER control the field has: the kit
15
+ * control from CONTROLS, or the host's when a control hands a stored value off (LegacyFallback). The modal body is that same control on the same value and the same onChange, so the field underneath
16
+ * and the expanded one stay in sync and every write keeps the exact stored shape the inline control writes.
17
+ *
18
+ * Ways in (V2): the ⤢ button in the field's label row (shown on hover, always on touch), and ⌘↵ / Ctrl+↵ while the
19
+ * field's control has focus. Inside the modal ⌘↵ or Esc closes it (menus and popovers inside close first) and focus
20
+ * returns to whatever opened it. A control lane may open or close it from its own toolbar with `openExpanded`.
21
+ *
22
+ * Offered only where expanding edits something: never read-only, never a type whose control behind it cannot edit
23
+ * (code and tables expand only once a kit control is registered for them; the host draws those read-only today).
24
+ */
25
+ /** Words in a value: a string (tags stripped), Portable Text blocks, or a rich-text envelope ({ html } / { value }). */
26
+ function wordsIn(value) {
27
+ const text = textOf(value).trim();
28
+ return text ? text.split(/\s+/).length : 0;
29
+ }
30
+ function textOf(v) {
31
+ if (typeof v === "string") return v.replace(/<[^>]*>/g, " ").replace(/&nbsp;/g, " ");
32
+ if (Array.isArray(v)) return v.map(textOf).join(" ");
33
+ if (!isObj(v)) return "";
34
+ if (typeof v.text === "string") return v.text;
35
+ if (Array.isArray(v.children)) return textOf(v.children);
36
+ if (typeof v.html === "string") return textOf(v.html);
37
+ if ("value" in v) return textOf(v.value);
38
+ return "";
39
+ }
40
+ var count = (n, one, many = `${one}s`) => `${n} ${n === 1 ? one : many}`;
41
+ var words = (v) => count(wordsIn(v), "word");
42
+ function codeLines(v) {
43
+ const src = typeof v === "string" ? v : isObj(v) && typeof v.code === "string" ? v.code : "";
44
+ return count(src ? src.split("\n").length : 0, "line");
45
+ }
46
+ function tableSize(v) {
47
+ const rows = isObj(v) && Array.isArray(v.rows) ? v.rows.length : 0;
48
+ const cols = isObj(v) && Array.isArray(v.columns) ? v.columns.length : 0;
49
+ return `${count(rows, "row")} · ${count(cols, "column")}`;
50
+ }
51
+ /** Type → how it expands. Additive like CONTROLS: one entry per type. Plain long text (`text`) has none: V2's
52
+ * TextControl is a bare textarea that grows to its value, so an extra ⤢ would only add a tab stop V2 lacks. */
53
+ var EXPANDABLE = {
54
+ richtext: {
55
+ layout: "reading",
56
+ meta: words,
57
+ label: "Expand editor",
58
+ panelOnly: true
59
+ },
60
+ code: {
61
+ layout: "wide",
62
+ meta: codeLines,
63
+ label: "Expand editor",
64
+ needsKitControl: true
65
+ },
66
+ table: {
67
+ layout: "wide",
68
+ meta: tableSize,
69
+ label: "Edit in full screen",
70
+ needsKitControl: true
71
+ }
72
+ };
73
+ /** The spec when this field can expand here, else null. */
74
+ function expandSpecFor(field, opts) {
75
+ const spec = EXPANDABLE[field.type];
76
+ if (!spec || opts.readOnly) return null;
77
+ if (spec.needsKitControl && !opts.hasKitControl) return null;
78
+ if (spec.panelOnly && opts.variant === "document") return null;
79
+ return spec;
80
+ }
81
+ var openKey = null;
82
+ var subs = /* @__PURE__ */ new Set();
83
+ function openExpanded(key) {
84
+ if (openKey === key) return;
85
+ openKey = key;
86
+ subs.forEach((s) => s());
87
+ }
88
+ var expandKey = (docId, path) => `${docId}:${pathKey(path)}`;
89
+ function useExpandedKey() {
90
+ return React.useSyncExternalStore((cb) => {
91
+ subs.add(cb);
92
+ return () => subs.delete(cb);
93
+ }, () => openKey, () => openKey);
94
+ }
95
+ /** ⌘↵ / Ctrl+↵ (no Shift or Alt): the expand shortcut. */
96
+ var isExpandShortcut = (e) => e.key === "Enter" && (e.metaKey || e.ctrlKey) && !e.shiftKey && !e.altKey;
97
+ /** The label-row ⤢ (V2 RichTextExpandAction / TableFullScreenButton): hidden at rest until hover, always on touch. */
98
+ function ExpandAction({ field, path, spec }) {
99
+ const env = useKitEnv();
100
+ const wide = spec.label === "Edit in full screen";
101
+ return /* @__PURE__ */ jsx(Tooltip, {
102
+ content: spec.label,
103
+ shortcut: "⌘↵",
104
+ children: /* @__PURE__ */ jsx("button", {
105
+ type: "button",
106
+ "aria-label": wide ? `Edit ${field.title} in full screen` : `Expand ${field.title}`,
107
+ "aria-haspopup": "dialog",
108
+ "data-kit-expand": "",
109
+ onClick: () => openExpanded(expandKey(env.docId, path)),
110
+ className: cn("-my-0.5 inline-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", "focus-visible:outline-2 focus-visible:outline-offset-1 focus-visible:outline-kit-focus-ring focus-visible:[outline-style:solid]", "opacity-0 group-hover/field:opacity-100 focus-visible:opacity-100 [@media(pointer:coarse)]:opacity-100"),
111
+ children: /* @__PURE__ */ jsx(IconArrowsMaximize, {
112
+ "aria-hidden": true,
113
+ className: "size-3.5",
114
+ stroke: 1.5
115
+ })
116
+ })
117
+ });
118
+ }
119
+ /** The modal's breadcrumb: the document, the frames down to this field's parent, then the field. */
120
+ function useCrumbs(field, path) {
121
+ const form = useForm();
122
+ const env = useKitEnv();
123
+ if (!form) return [env.docTitle, field.title].filter(Boolean);
124
+ const { frames } = resolveFrames(form.schema, form.value, path.slice(0, -1), form.resolveSchema);
125
+ return [...frames.filter((f) => f.kind !== "history").map((f, i) => i === 0 ? env.docTitle || f.title : f.title), field.title].filter(Boolean);
126
+ }
127
+ /**
128
+ * The field's expanded editor: the same control, value and onChange in the modal. Mounted only while open, so the
129
+ * inline control and this one never fight over the same DOM id (the modal one gets `${id}-expanded`).
130
+ */
131
+ function ExpandedField({ field, path, spec, Control, value, onChange, onBlur, invalid, id, parent }) {
132
+ const key = expandKey(useKitEnv().docId, path);
133
+ const open = useExpandedKey() === key;
134
+ const crumbs = useCrumbs(field, path);
135
+ React.useEffect(() => () => {
136
+ if (openKey === key) openExpanded(null);
137
+ }, [key]);
138
+ return /* @__PURE__ */ jsx(ExpandedEditorModal, {
139
+ open,
140
+ onOpenChange: (o) => openExpanded(o ? key : null),
141
+ crumbs,
142
+ meta: spec.meta(value),
143
+ layout: spec.layout,
144
+ returnFocus: () => document.querySelector(`[data-field-key="${CSS.escape(pathKey(path))}"] [data-kit-expand]`) ?? document.getElementById(id),
145
+ children: open ? /* @__PURE__ */ jsx("div", {
146
+ "data-kit-expanded": field.type,
147
+ className: cn("min-w-0", spec.layout === "wide" && "flex min-h-0 flex-1 flex-col"),
148
+ onBlur,
149
+ onKeyDown: (e) => {
150
+ if (!isExpandShortcut(e)) return;
151
+ e.preventDefault();
152
+ openExpanded(null);
153
+ },
154
+ children: /* @__PURE__ */ jsx(Control, {
155
+ field,
156
+ value,
157
+ onChange,
158
+ id: `${id}-expanded`,
159
+ invalid,
160
+ path,
161
+ parent,
162
+ onBlur
163
+ })
164
+ }) : null
165
+ });
166
+ }
167
+ //#endregion
168
+ export { ExpandAction, ExpandedField, expandKey, expandSpecFor, isExpandShortcut, openExpanded };
169
+
170
+ //# sourceMappingURL=expand.js.map