@bettercms-ai/kit 0.1.1 → 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":"table-editor.js","names":[],"sources":["../../../src/kit/controls/table/table-editor.tsx"],"sourcesContent":["/**\n * TABLE EDITOR (CPO D42, D49, D50, D52; port of V2 src/components/table/table-editor.tsx) — calm by default.\n *\n * Default nested array UX (D50): Title, Columns (an array list), Rows (nested under their groups, each the kit's own\n * array row: first cell, summary, ⋯, ›), Note under the table, then a collapsed Table settings. A row or column\n * drills through the kit form's navigation (standard breadcrumb + frame header, TableFrame); outside a form,\n * through a local drill with the same trail. A row is one field per column; the column's type picks the\n * control; per-cell exceptions (words instead, footnote, clear) sit behind a quiet ⋯ by the cell's label.\n * Expanded the spreadsheet lives ONLY in the expanded-editor modal (D49), opened by ⤢ in the field's label row: click a\n * cell and type, Tab / arrows / Enter move, \"+\" adds a column, grips reorder, ⋯ / Shift+F10 / right-click for\n * column, row and cell options.\n * Settings (D52) only presentation and structure, only what `field.table.settings` offers this kind.\n *\n * Kit deviations from V2 (no @dnd-kit / Radix in the kit): rows reorder inside their run with the kit's useDragReorder\n * (pointer + ↑/↓ on the grip); moving a row to another group is the row's ⋯ › Move to group (V2 also allowed dragging it\n * across). The cell context menu is Base UI's ContextMenu. Toasts come from KitServices (absent → silent). Link cells use\n * the table's own address editor (table-link.tsx) in the spreadsheet and the global LinkField in a drilled row (as V2); reference cells search through the host (refs.ts).\n */\nimport * as React from \"react\";\nimport { ContextMenu } from \"@base-ui/react/context-menu\";\nimport {\n IconAlignLeft, IconArrowDown, IconArrowUp, IconArrowsMaximize, IconCheck, IconChevronDown, IconCurrencyDollar, IconDots, IconFileDatabase, IconFolder,\n IconGripVertical, IconHash, IconLayoutColumns, IconLetterT, IconLink, IconList, IconPlus, IconStar, IconTable, IconToggleRight,\n} from \"@tabler/icons-react\";\nimport { cn } from \"../../lib/cn\";\nimport { Button, IconButton } from \"../../ui/button\";\nimport { Input, Textarea } from \"../../ui/input\";\nimport { Segmented, Switch } from \"../../ui/controls\";\nimport { Select } from \"../../ui/select\";\nimport { ChoiceSwitch } from \"../../ui/choice-switch\";\nimport {\n Menu, MenuCheckItem, MenuContent, MenuItem, MenuRadioGroup, MenuRadioItem, MenuSeparator, MenuSub, MenuSubContent, MenuSubTrigger, MenuTrigger,\n Popover, PopoverAnchor, PopoverContent,\n} from \"../../ui/overlay\";\nimport { ExpandedEditorModal } from \"../../ui/expanded-editor-modal\";\nimport { PathCrumbs } from \"../../ui/path-crumbs\";\nimport { RowList, type RowModel, type ListOps } from \"../../engine/array\";\nimport { SharedSortProvider, useSharedSort } from \"../../engine/item-list\";\nimport { FieldSection, FieldUnit, FieldUnitRow } from \"../../engine/grouping\";\nimport { useKitServices, type KitToast } from \"../../context\";\nimport type { FieldPath, FieldSchema } from \"../../schema/types\";\nimport {\n GENERAL_TABLE, boolLabels, cellNote, cellText, cellType, cellValue, coerce, isCellObject, isEmptyCell, isObjLike, normalizeTable,\n orderedRows, parseDelimited, parseTableElement, pasteRange, tableFromRows, tableToRows, tkey, toBool, toNumber, withValue,\n type RefResolver, type TableCell, type TableCellValue, type TableColumn, type TableColumnType, type TableFieldOptions, type TableGroup,\n type TableJsonLdType, type TableLink, type TableRef, type TableResponsive, type TableRow, type TableValue,\n} from \"../../schema/table\";\nimport { LinkAddressButton, isScriptHref, tableLink } from \"./table-link\";\nimport { LinkField, hrefOf, linkText, normLink, type LinkValue } from \"../link\";\nimport { refLabel, useRefSearch, type TableRefOption } from \"./refs\";\n\nexport interface TableEditorProps {\n value: TableValue;\n onChange: (v: TableValue) => void;\n readOnly?: boolean;\n /** Trailing actions on the Title row (Remove table in rich text, V2). */\n actions?: React.ReactNode;\n options?: TableFieldOptions;\n /** Show developer-only settings (hide the title, sticky header, stripes, compact, rich text / reference types). */\n developer?: boolean;\n /** Names a reference id the stored cell does not carry a label for (the host's lookup); absent → stored label / id. */\n resolveRef?: RefResolver;\n label?: string;\n /** The page or block name, first crumb of the full-screen breadcrumb (\"Competitor comparison › Comparison\"). */\n parentTitle?: string;\n /** D50: inside a kit form, rows and columns drill through the form's own navigation (standard breadcrumb + frame). */\n nav?: TableNav;\n /** Controlled full-screen state, when the host shows the ⤢ button itself (the kit field's label row). */\n fullScreen?: { open: boolean; onOpenChange: (open: boolean) => void; returnFocus?: () => HTMLElement | null };\n}\n\nexport interface TableNav {\n /** stable id of this table field (focus returns to the row that was open) */\n id: string;\n /** the table field's path in the form; rows live at [...basePath, \"rows\", i], columns at [...basePath, \"columns\", i] */\n basePath: FieldPath;\n open: (kind: \"rows\" | \"columns\", index: number) => void;\n}\n\n/* ── Plain words for types (no jargon) ─────────────────────────────── */\ntype IconCmp = React.ComponentType<{ className?: string; stroke?: number }>;\nexport const TYPE_UI: Record<TableColumnType, { label: string; icon: IconCmp; dev?: boolean }> = {\n text: { label: \"Text\", icon: IconLetterT },\n number: { label: \"Number\", icon: IconHash },\n money: { label: \"Price\", icon: IconCurrencyDollar },\n boolean: { label: \"Yes / No\", icon: IconToggleRight },\n link: { label: \"Link\", icon: IconLink },\n rating: { label: \"Rating\", icon: IconStar },\n \"richtext-inline\": { label: \"Rich text\", icon: IconAlignLeft, dev: true },\n reference: { label: \"Page or CMS item\", icon: IconFileDatabase, dev: true },\n};\nconst NUMERIC: TableColumnType[] = [\"number\", \"money\", \"rating\"];\nconst CURRENCIES = [\"USD\", \"EUR\", \"GBP\", \"INR\"];\nconst TypeIcon = ({ type, className }: { type: TableColumnType; className?: string }) => {\n const I = TYPE_UI[type].icon;\n return <I className={cn(\"size-3.5 shrink-0 text-kit-fg-4\", className)} stroke={1.75} aria-hidden />;\n};\n/** A ⋯ trigger: shown on hover / focus of its group, always on touch. */\nconst DOTS = \"flex size-6 shrink-0 items-center justify-center rounded-kit-md text-kit-fg-3 outline-none hover:bg-kit-hover hover:text-kit-fg data-[popup-open]:bg-kit-hover data-[popup-open]:text-kit-fg\";\n\n/* ── Pure edits ────────────────────────────────────────────────────── */\ntype Edit = (t: TableValue) => TableValue;\nconst mapRow = (key: string, f: (r: TableRow) => TableRow): Edit => (t) => ({ ...t, rows: t.rows.map((r) => (r._key === key ? f(r) : r)) });\nconst clean = (r: TableRow): TableRow => {\n const x = { ...r };\n ([\"group\", \"footer\", \"type\", \"highlight\"] as const).forEach((k) => !x[k] && delete x[k]);\n return x;\n};\n/** What a person typed → the cell. A value that doesn't fit its column (e.g. \"Partly\" in Yes / No) becomes a text cell. */\nexport function typedCell(prev: TableCell | undefined, col: TableColumn, row: TableRow, raw: string): TableCell {\n const colType = row.type ?? col.type;\n const own = isCellObject(prev) ? prev.type : undefined;\n const plain = raw.trim();\n const note = cellNote(prev);\n const fits = (ty: TableColumnType) =>\n !plain || (((ty !== \"number\" && ty !== \"money\" && ty !== \"rating\") || toNumber(plain.replace(/(USD|EUR|GBP|JPY|INR|AUD|CAD|CHF)$/i, \"\")) != null) && (ty !== \"boolean\" || toBool(plain) != null));\n let type: TableColumnType | undefined = own;\n if (own === \"text\" && fits(colType)) type = undefined; // back to the column's type when it fits again\n else if (!own && !fits(colType)) type = \"text\";\n const ty = type ?? colType;\n let v: TableCellValue;\n if (ty === \"link\") {\n const p = cellValue(prev);\n const l = isObjLike(p) && !(\"ref\" in p) ? (p as TableLink) : null;\n v = plain ? { ...(l ?? {}), label: plain, href: l?.href ?? \"\" } : null;\n } else v = coerce(raw, { type: ty, max: col.max });\n return type || note ? { value: v, ...(type ? { type } : {}), ...(note ? { note } : {}) } : v;\n}\n/** Change a column's type; filled cells are re-read as the new type (words that don't fit become a text cell). */\nexport function retype(t: TableValue, key: string, type: TableColumnType, resolveRef?: RefResolver): TableValue {\n const col = t.columns.find((c) => c._key === key);\n if (!col || col.type === type) return t;\n const next: TableColumn = { ...col, type, ...(type === \"money\" && !col.currency ? { currency: \"USD\" } : {}) };\n // keys that only mean something for the old type go with it (the backend keeps whatever is sent; stale keys mislead)\n if (type !== \"number\") delete next.unit;\n if (type !== \"money\") delete next.currency;\n if (type !== \"rating\") delete next.max;\n if (type !== \"boolean\") {\n delete next.trueLabel;\n delete next.falseLabel;\n }\n if (type !== \"reference\") delete next.refTo;\n if (type !== \"number\" && type !== \"money\") delete next.decimals;\n return {\n ...t,\n columns: t.columns.map((c) => (c._key === key ? next : c)),\n rows: t.rows.map((r) => {\n const cell = r.cells[key];\n if ((isCellObject(cell) && cell.type) || r.type) return r;\n const v = cellValue(cell);\n if (isEmptyCell(v)) return r;\n const raw = col.type === \"link\" && isObjLike(v) ? (v as TableLink).label : col.type === \"reference\" && isObjLike(v) ? refLabel(v as TableRef) : cellText(col, r, cell, resolveRef);\n // a reference only comes from the picker: typed words in a reference column are words\n const written = type === \"reference\" ? (raw ? { value: raw, type: \"text\" as const } : null) : typedCell(cell, next, r, raw);\n return { ...r, cells: { ...r.cells, [key]: written } };\n }),\n };\n}\nconst displayRows = (t: TableValue) => {\n const { bodies, foot } = orderedRows(t);\n const out: { row: TableRow; groupStart?: TableGroup; footStart?: boolean }[] = [];\n bodies.forEach((b) => b.rows.forEach((row, i) => out.push({ row, groupStart: i === 0 ? b.group : undefined })));\n foot.forEach((row, i) => out.push({ row, footStart: i === 0 }));\n return out;\n};\n/** Move a row to a displayed position; crossing into another group (or the totals) takes on that place. */\nexport function moveRowTo(t: TableValue, from: number, to: number): TableValue {\n const order = displayRows(t).map((d) => d.row);\n if (to < 0 || to >= order.length || from === to) return t;\n const [r] = order.splice(from, 1);\n const target = order[Math.min(to, order.length - 1)] ?? r;\n order.splice(to, 0, clean({ ...r, group: target.group, footer: target.footer }));\n return { ...t, rows: order };\n}\nconst rowTitle = (t: TableValue, r: TableRow, i: number, resolveRef?: RefResolver) => {\n const c = t.columns[0];\n return (c && cellText(c, r, r.cells[c._key], resolveRef)) || `Row ${i + 1}`;\n};\nconst moveItem = <T,>(list: T[], from: number, to: number) => {\n const next = list.slice();\n const [x] = next.splice(from, 1);\n next.splice(to, 0, x);\n return next;\n};\nconst dropColumn = (t: TableValue, key: string): TableValue => ({\n ...t,\n columns: t.columns.filter((c) => c._key !== key),\n rows: t.rows.map((r) => ({ ...r, cells: Object.fromEntries(Object.entries(r.cells).filter(([k]) => k !== key)) })),\n});\nconst copyColumn = (t: TableValue, i: number): TableValue => {\n const c = t.columns[i];\n const k = tkey(\"c\");\n const columns = [...t.columns.slice(0, i + 1), { ...c, _key: k, label: c.label ? `${c.label} copy` : \"\", ...(c.highlight ? { highlight: undefined } : {}) }, ...t.columns.slice(i + 1)];\n return { ...t, columns, rows: t.rows.map((r) => (r.cells[c._key] === undefined ? r : { ...r, cells: { ...r.cells, [k]: r.cells[c._key] } })) };\n};\n\n/** CPO D49: the ONE way into the spreadsheet — opens it in the shared ExpandedEditorModal. Place it next to the title. */\nexport function TableFullScreenButton({ onOpen, className }: { onOpen: () => void; className?: string }) {\n return (\n <IconButton size=\"sm\" label=\"Edit in full screen\" className={className} onClick={onOpen}>\n <IconArrowsMaximize stroke={1.5} />\n </IconButton>\n );\n}\n\n/* ════════════════════════════════════════════════════════════════════ */\nexport function TableEditor(props: TableEditorProps) {\n const { value, onChange, readOnly, actions, label, options = GENERAL_TABLE, developer, resolveRef, nav, fullScreen } = props;\n const t = React.useMemo(() => normalizeTable(value), [value]);\n const [fullInner, setFullInner] = React.useState(false);\n const full = fullScreen?.open ?? fullInner;\n const setFull = fullScreen?.onOpenChange ?? setFullInner;\n const root = React.useRef<HTMLDivElement>(null);\n const { toast } = useKitServices();\n const ctx = makeCtx({ t, onChange, options, developer, resolveRef, readOnly, toast });\n const head = (\n <>\n {readOnly || fullScreen ? null : <TableFullScreenButton className=\"-my-1\" onOpen={() => setFull(true)} />}\n {actions}\n </>\n );\n return (\n <div\n ref={root}\n className=\"flex min-w-0 flex-col\"\n data-table-editor=\"\"\n // a host editor (rich text, canvas) must never act on keys, pastes or cuts made inside the table. Keys on a drag\n // handle pass (the sortable reads them on the grip itself).\n onKeyDown={(e) => e.key !== \"Escape\" && !(e.target as HTMLElement).closest?.('[aria-roledescription=\"sortable\"]') && e.stopPropagation()}\n onPaste={(e) => e.stopPropagation()}\n onCut={(e) => e.stopPropagation()}\n onCopy={(e) => e.stopPropagation()}\n >\n <TableBody ctx={ctx} label={label} nav={nav} head={head} />\n <ExpandedEditorModal\n open={full}\n onOpenChange={setFull}\n layout=\"wide\"\n crumbs={[props.parentTitle, label || \"Table\", t.caption || undefined].filter(Boolean) as string[]}\n meta={`${t.rows.length} ${t.rows.length === 1 ? \"row\" : \"rows\"} · ${t.columns.length} ${t.columns.length === 1 ? \"column\" : \"columns\"}`}\n returnFocus={() => fullScreen?.returnFocus?.() ?? root.current?.querySelector<HTMLElement>('button[aria-label=\"Edit in full screen\"]') ?? null}\n initialFocus={() => document.querySelector<HTMLElement>('[role=dialog] [data-cell=\"0:0\"], [role=dialog] [data-cell=\"-1:0\"]')}\n >\n {full ? (\n <div data-table-editor=\"\" className=\"flex min-h-0 flex-1 flex-col\" onPaste={(e) => e.stopPropagation()}>\n <Grid ctx={ctx} label={label} full />\n </div>\n ) : null}\n </ExpandedEditorModal>\n </div>\n );\n}\n\ninterface Ctx {\n t: TableValue;\n set: (t: TableValue) => void;\n edit: (f: Edit) => void;\n options: TableFieldOptions;\n developer: boolean;\n types: TableColumnType[];\n resolveRef?: RefResolver;\n lock: boolean;\n readOnly: boolean;\n /** a change with Undo (a delete, a move between groups); silent when the host has no toaster */\n undoable: (message: string, prev: TableValue, description?: string) => void;\n}\nfunction makeCtx({\n t, onChange, options = {}, developer, resolveRef, readOnly, toast,\n}: { t: TableValue; onChange: (v: TableValue) => void; options?: TableFieldOptions; developer?: boolean; resolveRef?: RefResolver; readOnly?: boolean; toast?: KitToast }): Ctx {\n const types = (Object.keys(TYPE_UI) as TableColumnType[]).filter((ty) => (options.columnTypes ? options.columnTypes.includes(ty) : !TYPE_UI[ty].dev || developer));\n return {\n t,\n set: onChange,\n edit: (f) => onChange(f(t)),\n options,\n developer: !!developer,\n types,\n resolveRef,\n lock: !!options.lockColumns || !!readOnly,\n readOnly: !!readOnly,\n undoable: (message, prev, description) => toast?.(message, { description, action: { label: \"Undo\", onClick: () => onChange(prev) }, duration: 10_000 }),\n };\n}\n\n/**\n * One row or one column of a table, as the body of a drilled frame (D50). The kit form shows it under the standard\n * breadcrumb and frame header, exactly like an FAQ item; hosts without a form get the same body from TableEditor.\n */\nexport function TableItemEditor({\n kind, index, value, onChange, options, developer, resolveRef, readOnly,\n}: Pick<TableEditorProps, \"value\" | \"onChange\" | \"options\" | \"developer\" | \"resolveRef\" | \"readOnly\"> & { kind: \"row\" | \"column\"; index: number }) {\n const t = React.useMemo(() => normalizeTable(value), [value]);\n const { toast } = useKitServices();\n const ctx = makeCtx({ t, onChange, options, developer, resolveRef, readOnly, toast });\n if (kind === \"row\") {\n const row = t.rows[index];\n return row ? <RowFields ctx={ctx} row={row} /> : <Gone kind=\"row\" />;\n }\n const col = t.columns[index];\n return col ? <ColumnFields ctx={ctx} col={col} /> : <Gone kind=\"column\" />;\n}\n/** A frame restored onto a row or column that was deleted elsewhere says so, never an empty body. */\nconst Gone = ({ kind }: { kind: \"row\" | \"column\" }) => <p role=\"note\" className=\"text-kit-sm text-kit-fg-3\">This {kind} is no longer in the table.</p>;\n\n/* ── Wide: the spreadsheet ─────────────────────────────────────────── */\n/** A column's minimum width: its longest header word + the type icon and ⋯ never break mid-word (≥ 96px, ≤ 240px). */\nconst colMinWidth = (c: TableColumn, full?: boolean) => {\n const longest = Math.max(0, ...c.label.split(/\\s+/).map((w) => w.length));\n return Math.min(240, Math.max(full ? 150 : 96, Math.ceil(longest * 7.6) + 58));\n};\ntype Dir = \"up\" | \"down\" | \"left\" | \"right\";\n\nfunction Grid({ ctx, label, full }: { ctx: Ctx; label?: string; full?: boolean }) {\n const { t, set, lock, readOnly } = ctx;\n const { toast } = useKitServices();\n const rows = displayRows(t);\n const cols = t.columns;\n const host = React.useRef<HTMLDivElement>(null);\n const pending = React.useRef<string | null>(null);\n const [, bump] = React.useReducer((n: number) => n + 1, 0);\n const focus = (r: number, c: number) => {\n pending.current = `${r}:${c}`;\n bump();\n };\n React.useLayoutEffect(() => {\n const p = pending.current;\n if (!p) return;\n const el = host.current?.querySelector<HTMLElement>(`[data-cell=\"${p}\"]`);\n if (!el) return;\n pending.current = null;\n el.focus({ preventScroll: true });\n el.scrollIntoView?.({ block: \"nearest\", inline: \"nearest\" });\n if (el instanceof HTMLTextAreaElement) el.setSelectionRange(el.value.length, el.value.length);\n });\n const bodyCount = t.rows.filter((r) => !r.footer).length;\n const atMaxRows = !!ctx.options.maxRows && bodyCount >= ctx.options.maxRows;\n const atMaxCols = !!ctx.options.maxColumns && cols.length >= ctx.options.maxColumns;\n const addRow = (at = rows.length) => {\n if (readOnly) return;\n const anchor = rows[Math.min(at, rows.length) - 1]?.row;\n const intoTotals = !!anchor?.footer && at < rows.length;\n if (atMaxRows && !intoTotals) return toast?.(\"Limit reached\", { description: `This table allows ${ctx.options.maxRows} rows at most.` });\n const order = rows.map((d) => d.row);\n order.splice(at, 0, { _key: tkey(\"r\"), cells: {}, ...(anchor?.group ? { group: anchor.group } : {}), ...(intoTotals ? { footer: true } : {}) });\n set({ ...t, rows: order });\n focus(at, 0);\n };\n const addCol = (at = cols.length) => {\n if (lock) return;\n if (atMaxCols) return toast?.(\"Limit reached\", { description: `This table allows ${ctx.options.maxColumns} columns at most.` });\n const next = [...cols];\n next.splice(at, 0, { _key: tkey(\"c\"), label: \"\", type: \"text\" });\n set({ ...t, columns: next });\n focus(-1, at);\n };\n const move = (from: { r: number; c: number }, dir: Dir) => {\n const r = from.r + (dir === \"down\" ? 1 : dir === \"up\" ? -1 : 0);\n const c = from.c + (dir === \"right\" ? 1 : dir === \"left\" ? -1 : 0);\n if (c < 0 || c >= cols.length || r < -1) return;\n if (r >= rows.length) return addRow();\n focus(r, c);\n };\n const onPaste = (e: React.ClipboardEvent, r: number, c: number) => {\n if (readOnly) return false;\n const html = e.clipboardData.getData(\"text/html\");\n const text = e.clipboardData.getData(\"text/plain\");\n let range: string[][] = [];\n if (html && /<table[\\s>]/i.test(html) && typeof DOMParser !== \"undefined\") {\n const tbl = new DOMParser().parseFromString(html, \"text/html\").querySelector(\"table\");\n if (tbl) range = tableToRows(parseTableElement(tbl)).slice(r < 0 ? 0 : 1);\n }\n if (!range.length && /[\\t\\n]/.test(text.trim())) range = parseDelimited(text);\n if (!range.length) return false; // plain text: let the cell take it\n e.preventDefault();\n const blank = t.rows.every((x) => Object.values(x.cells).every((v) => isEmptyCell(cellValue(v)))) && cols.every((x) => !x.label.trim());\n let next: TableValue;\n if (blank && !lock && range.length > 1) {\n const n = tableFromRows(range, { header: true });\n next = { ...t, columns: n.columns, rows: n.rows, headerColumn: n.headerColumn || t.headerColumn };\n } else next = pasteRange({ ...t, rows: rows.map((d) => d.row) }, { row: r, col: c }, range, { lockColumns: lock });\n // the field's limits hold for a paste too: refuse it by name rather than store a table the backend refuses\n const body = next.rows.filter((x) => !x.footer).length;\n if (ctx.options.maxRows && body > ctx.options.maxRows) {\n toast?.(\"Paste not applied\", { description: `It would make ${body} rows; this table allows ${ctx.options.maxRows}.` });\n return true;\n }\n if (ctx.options.maxColumns && next.columns.length > ctx.options.maxColumns) {\n toast?.(\"Paste not applied\", { description: `It would make ${next.columns.length} columns; this table allows ${ctx.options.maxColumns}.` });\n return true;\n }\n set(next);\n toast?.(`Pasted ${range.length} ${range.length === 1 ? \"row\" : \"rows\"}`);\n return true;\n };\n // drag to reorder (grips); the ⋯ menus offer the same moves for keyboard users\n const drag = React.useRef<{ kind: \"row\" | \"col\"; i: number } | null>(null);\n // one id per grid: a label is not an id (spaces split it, two tables may share it)\n const helpId = `${React.useId()}-grid-help`;\n const [over, setOver] = React.useState<{ kind: \"row\" | \"col\"; i: number } | null>(null);\n const drop = (kind: \"row\" | \"col\", i: number) => {\n const d = drag.current;\n drag.current = null;\n setOver(null);\n if (!d || d.kind !== kind || d.i === i) return;\n if (kind === \"row\") set(moveRowTo(t, d.i, i));\n else if (!lock) set({ ...t, columns: moveItem(cols, d.i, i) });\n };\n return (\n <div ref={host} className={cn(\"min-w-0 overflow-x-auto rounded-kit-lg border border-kit-line bg-kit-surface\", full && \"max-h-full min-h-0 flex-1 overflow-auto\")} data-full={full ? \"\" : undefined}>\n <table role=\"grid\" aria-label={label || t.caption || \"Table\"} aria-describedby={helpId} className=\"w-full border-separate border-spacing-0 text-kit-sm\">\n <thead>\n <tr>\n <th className={cn(\"w-8 border-b border-kit-line bg-kit-subtle\", full && \"sticky left-0 top-0 z-[3]\")} aria-hidden />\n {cols.map((c, ci) => (\n <th\n key={c._key}\n scope=\"col\"\n style={{ minWidth: colMinWidth(c, full) }}\n className={cn(\n \"group/col relative border-b border-l border-kit-line bg-kit-subtle p-0 text-left align-bottom font-medium\",\n full && \"sticky top-0 z-[2]\",\n full && ci === 0 && \"left-8 z-[3]\",\n over?.kind === \"col\" && over.i === ci && \"shadow-[inset_2px_0_0_var(--kit-fg-2)]\",\n )}\n onDragOver={(e) => drag.current?.kind === \"col\" && (e.preventDefault(), setOver({ kind: \"col\", i: ci }))}\n onDrop={() => drop(\"col\", ci)}\n >\n <ColumnMenu ctx={ctx} col={c} index={ci} onInsert={(right) => addCol(right ? ci + 1 : ci)}>\n {(openMenu) => (\n <>\n {lock ? null : (\n <span draggable onDragStart={(e) => ((drag.current = { kind: \"col\", i: ci }), e.dataTransfer.setData(\"text/plain\", c.label))} className=\"-ml-1 hidden cursor-grab text-kit-fg-4 group-hover/col:block\" aria-hidden>\n <IconGripVertical className=\"size-3.5\" stroke={1.5} />\n </span>\n )}\n <TypeIcon type={c.type} />\n <CellInput\n cell={`-1:${ci}`}\n value={c.label}\n display={c.label}\n placeholder={ci === 0 && t.headerColumn ? \"Row names\" : \"Column name\"}\n readOnly={lock}\n className={cn(\"font-medium text-kit-fg\", !t.headerRow && \"text-kit-fg-3\")}\n ariaLabel={`Column ${ci + 1} name${t.headerRow ? \"\" : \" (not shown on the page)\"}`}\n onCommit={(v) => set({ ...t, columns: t.columns.map((x) => (x._key === c._key ? { ...x, label: v.replace(/\\s+/g, \" \").trim() } : x)) })}\n onMove={(dir) => move({ r: -1, c: ci }, dir)}\n onMenu={openMenu}\n onPaste={(e) => onPaste(e, -1, ci)}\n />\n </>\n )}\n </ColumnMenu>\n </th>\n ))}\n <th className=\"w-9 border-b border-l border-kit-line bg-kit-subtle p-0\">\n {lock ? null : (\n <IconButton size=\"xs\" label=\"Add column\" className=\"mx-auto\" disabled={atMaxCols} onClick={() => addCol()}>\n <IconPlus stroke={1.75} />\n </IconButton>\n )}\n </th>\n </tr>\n </thead>\n <tbody>\n {rows.map(({ row, groupStart, footStart }, ri) => (\n <React.Fragment key={row._key}>\n {groupStart || footStart ? (\n <tr aria-hidden>\n <td colSpan={cols.length + 2} className=\"border-t border-kit-line bg-[var(--kit-subtle-2)] px-2 py-1 text-kit-2xs font-medium text-kit-fg-3\">\n {groupStart ? groupStart.label || \"Untitled group\" : \"Totals\"}\n </td>\n </tr>\n ) : null}\n <tr\n className={cn(\"group/row\", over?.kind === \"row\" && over.i === ri && \"shadow-[inset_0_2px_0_var(--kit-fg-2)]\")}\n onDragOver={(e) => drag.current?.kind === \"row\" && (e.preventDefault(), setOver({ kind: \"row\", i: ri }))}\n onDrop={() => drop(\"row\", ri)}\n >\n <td className={cn(\"w-8 border-t border-kit-line bg-[var(--kit-subtle-2)] p-0 align-middle\", full && \"sticky left-0 z-[1] bg-kit-subtle\")}>\n {readOnly ? (\n <div className=\"flex h-8 items-center justify-center text-kit-2xs text-kit-fg-4\">{ri + 1}</div>\n ) : (\n <RowMenu ctx={ctx} row={row} index={ri} count={rows.length} onInsert={(below) => addRow(below ? ri + 1 : ri)}>\n {(trigger) => (\n <div\n draggable\n onDragStart={(e) => ((drag.current = { kind: \"row\", i: ri }), e.dataTransfer.setData(\"text/plain\", String(ri)))}\n className=\"flex h-8 cursor-grab items-center justify-center text-kit-2xs text-kit-fg-4\"\n >\n <span className=\"group-hover/row:hidden group-focus-within/row:hidden\">{ri + 1}</span>\n <span className=\"hidden group-hover/row:flex group-focus-within/row:flex\">{trigger}</span>\n </div>\n )}\n </RowMenu>\n )}\n </td>\n {cols.map((c, ci) => (\n <GridCell key={c._key} full={full} ctx={ctx} row={row} col={c} r={ri} c={ci} onMove={(dir) => move({ r: ri, c: ci }, dir)} onPaste={(e) => onPaste(e, ri, ci)} />\n ))}\n <td className=\"border-l border-t border-kit-line\" />\n </tr>\n </React.Fragment>\n ))}\n </tbody>\n </table>\n <p id={helpId} className=\"sr-only\">Tab and the arrow keys move between cells. Shift+F10 on a column, row or cell opens its options.</p>\n {readOnly ? null : (\n <button\n type=\"button\"\n onClick={() => addRow()}\n disabled={atMaxRows}\n className=\"flex h-8 w-full items-center gap-1.5 border-t border-kit-line px-2.5 text-left text-kit-xs text-kit-fg-3 hover:bg-kit-subtle hover:text-kit-fg disabled:opacity-45\"\n >\n <IconPlus className=\"size-3.5\" stroke={1.75} aria-hidden /> {atMaxRows ? `Add row · ${ctx.options.maxRows} at most` : \"Add row\"}\n </button>\n )}\n </div>\n );\n}\n\n/** A grid cell: always editable (no select-then-edit mode). Yes / No is a check toggle; links and references open a small editor. */\nfunction GridCell({ ctx, row, col, r, c, onMove, onPaste, full }: { full?: boolean; ctx: Ctx; row: TableRow; col: TableColumn; r: number; c: number; onMove: (d: Dir) => void; onPaste: (e: React.ClipboardEvent) => boolean }) {\n const { t, edit, resolveRef, readOnly } = ctx;\n const cell = row.cells[col._key];\n const v = cellValue(cell);\n const declared = cellType(col, row, cell);\n // words sitting in a Yes / No cell (older or imported data) are edited as words, never hidden behind a dash\n const ty: TableColumnType = declared === \"boolean\" && !isEmptyCell(v) && toBool(v) == null ? \"text\" : declared;\n const write = (next: TableCell | undefined) => edit(mapRow(row._key, (x) => ({ ...x, cells: { ...x.cells, [col._key]: next ?? null } })));\n const head = t.headerColumn && c === 0;\n const note = cellNote(cell);\n const n = note ? (t.footnotes ?? []).findIndex((f) => f._key === note) + 1 : 0;\n const fn = note ? (t.footnotes ?? []).find((f) => f._key === note) : undefined;\n const [noteOpen, setNoteOpen] = React.useState(false);\n const name = `${col.label || `Column ${c + 1}`}, ${rowTitle(t, row, r, resolveRef)}`;\n let body: React.ReactNode;\n if (ty === \"boolean\") {\n const b = toBool(v);\n const { yes, no } = boolLabels(col);\n body = (\n <button\n type=\"button\"\n role=\"checkbox\"\n aria-checked={b === true}\n aria-label={`${name}: ${b == null ? \"not set\" : b ? yes : no}`}\n aria-readonly={readOnly || undefined}\n data-cell={`${r}:${c}`}\n onClick={() => !readOnly && write(withValue(cell, b !== true))}\n onKeyDown={(e) => {\n const k = e.key;\n if (k === \"ArrowUp\" || k === \"ArrowDown\" || k === \"ArrowLeft\" || k === \"ArrowRight\") { e.preventDefault(); onMove(k.slice(5).toLowerCase() as Dir); }\n else if (k === \"Enter\") { e.preventDefault(); onMove(\"down\"); }\n else if (readOnly) return;\n else if (k === \"Delete\" || k === \"Backspace\") { e.preventDefault(); write(withValue(cell, null)); }\n else if (/^[yn]$/i.test(k)) { e.preventDefault(); write(withValue(cell, /y/i.test(k))); }\n }}\n onPaste={(e) => onPaste(e)}\n className=\"flex h-8 w-full items-center px-2 outline-none focus-visible:shadow-[inset_0_0_0_2px_var(--kit-fg-3)]\"\n >\n {b == null ? (\n <span className=\"text-kit-fg-4\">—</span>\n ) : (\n <span className={cn(\"flex size-4 items-center justify-center rounded-kit-sm border\", b ? \"border-kit-inverse bg-kit-inverse text-kit-fg-inverse\" : \"border-kit-line-strong\")}>\n {b ? <IconCheck className=\"size-3\" stroke={3} aria-hidden /> : null}\n </span>\n )}\n </button>\n );\n } else if (ty === \"reference\") {\n body = <RefCell ctx={ctx} cell={cell} col={col} cellId={`${r}:${c}`} name={name} onWrite={write} onMove={onMove} />;\n } else {\n const draft = isEmptyCell(v) ? \"\" : NUMERIC.includes(ty) ? String(toNumber(v) ?? cellText(col, row, cell)) : ty === \"link\" && isObjLike(v) ? (v as TableLink).label : ty === \"richtext-inline\" ? String(v) : cellText(col, row, cell, resolveRef);\n const link: TableLink | null = ty === \"link\" ? (isObjLike(v) && !(\"ref\" in v) ? (v as TableLink) : { label: typeof v === \"string\" ? v : \"\", href: \"\" }) : null;\n body = (\n <div className=\"relative flex items-start\">\n {ty === \"rating\" && !isEmptyCell(v) ? <IconStar className=\"ml-2 mt-2 size-3 shrink-0 text-kit-warning\" stroke={2} aria-hidden /> : null}\n <CellInput\n cell={`${r}:${c}`}\n value={draft}\n display={isEmptyCell(v) ? \"\" : ty === \"rating\" ? draft : cellText(col, row, cell, resolveRef)}\n placeholder=\"—\"\n numeric={NUMERIC.includes(ty)}\n readOnly={readOnly}\n className={cn(head && \"font-medium\", NUMERIC.includes(ty) && \"text-right tabular-nums\")}\n ariaLabel={name}\n onCommit={(raw) => raw !== draft && write(typedCell(cell, col, row, raw))}\n onMove={onMove}\n onPaste={onPaste}\n />\n {link ? <LinkAddressButton className=\"mr-1 mt-1.5\" link={link} readOnly={readOnly} onSave={(l) => write(withValue(cell, l))} /> : null}\n </div>\n );\n }\n const cls = cn(\n \"relative border-l border-t border-kit-line p-0 align-top\",\n head && \"bg-[var(--kit-subtle-2)]\",\n full && c === 0 && \"sticky left-8 z-[1] bg-kit-surface\",\n row.highlight && \"bg-kit-accent-softer\",\n col.highlight && \"bg-kit-subtle\",\n );\n return (\n <td className={cls}>\n {readOnly ? body : <CellMenu ctx={ctx} row={row} col={col} cell={cell} onWrite={write} onNote={() => window.setTimeout(() => setNoteOpen(true))}>{body}</CellMenu>}\n {/* D52: a footnote is written at its cell; in the spreadsheet that is a small popover from the cell's number */}\n <Popover open={noteOpen && !!fn} onOpenChange={setNoteOpen}>\n <PopoverAnchor\n render={\n n > 0 ? (\n <button type=\"button\" tabIndex={-1} aria-label={`Footnote ${n}`} onClick={() => setNoteOpen(true)} className=\"absolute right-0.5 top-0.5 rounded-kit-xs px-0.5 text-kit-2xs leading-3 text-kit-fg-3 hover:bg-kit-hover hover:text-kit-fg\" />\n ) : (\n <span className=\"pointer-events-none absolute right-1 top-1 size-0\" aria-hidden />\n )\n }\n >\n {n > 0 ? n : null}\n </PopoverAnchor>\n <PopoverContent align=\"end\" className=\"w-72 p-2\">\n {fn ? (\n <Input\n size=\"sm\"\n autoFocus\n value={fn.text}\n readOnly={readOnly}\n placeholder=\"What the footnote says\"\n aria-label={`Footnote ${n}`}\n onChange={(e) => ctx.set({ ...t, footnotes: (t.footnotes ?? []).map((x) => (x._key === fn._key ? { ...x, text: e.target.value } : x)) })}\n onKeyDown={(e) => e.key === \"Enter\" && (e.preventDefault(), setNoteOpen(false))}\n />\n ) : null}\n </PopoverContent>\n </Popover>\n </td>\n );\n}\n\n/** One cell's text. Shows the written value at rest (\"$39\", \"2.4 kg\") and the raw value while typing; commits on leave. */\nfunction CellInput({\n cell, value, display, onCommit, onMove, onMenu, onPaste, placeholder, numeric, className, ariaLabel, readOnly,\n}: {\n cell: string; value: string; display: string; onCommit: (v: string) => void; onMove: (d: Dir) => void; onMenu?: () => void;\n onPaste?: (e: React.ClipboardEvent) => boolean; placeholder?: string; numeric?: boolean; className?: string; ariaLabel: string; readOnly?: boolean;\n}) {\n const [focused, setFocused] = React.useState(false);\n const [draft, setDraft] = React.useState(value);\n const ref = React.useRef<HTMLTextAreaElement>(null);\n const shown = focused ? draft : display;\n React.useLayoutEffect(() => {\n const el = ref.current;\n if (!el) return;\n el.style.height = \"0px\";\n el.style.height = `${Math.max(32, el.scrollHeight)}px`;\n }, [shown]);\n return (\n <textarea\n ref={ref}\n rows={1}\n data-cell={cell}\n data-cell-editing={focused && draft !== value ? \"\" : undefined}\n value={shown}\n readOnly={readOnly}\n placeholder={placeholder}\n aria-label={ariaLabel}\n inputMode={numeric ? \"decimal\" : undefined}\n spellCheck={!numeric}\n onFocus={() => {\n setDraft(value);\n setFocused(true);\n }}\n onBlur={() => {\n setFocused(false);\n if (!readOnly && draft !== value) onCommit(draft);\n }}\n onChange={(e) => setDraft(e.target.value)}\n onPaste={(e) => onPaste?.(e)}\n onKeyDown={(e) => {\n const el = e.currentTarget;\n const k = e.key;\n const atStart = el.selectionStart === 0 && el.selectionEnd === 0;\n const atEnd = el.selectionStart === el.value.length && el.selectionEnd === el.value.length;\n const oneLine = !el.value.includes(\"\\n\");\n if ((k === \"F10\" && e.shiftKey) || k === \"ContextMenu\") {\n if (onMenu) { e.preventDefault(); onMenu(); }\n } else if (k === \"Enter\" && !e.shiftKey && !e.nativeEvent.isComposing) {\n e.preventDefault();\n onMove(\"down\");\n } else if (k === \"Escape\" && draft !== value) {\n e.preventDefault();\n e.stopPropagation();\n setDraft(value);\n } else if (k === \"ArrowUp\" && (oneLine || atStart)) { e.preventDefault(); onMove(\"up\"); }\n else if (k === \"ArrowDown\" && (oneLine || atEnd)) { e.preventDefault(); onMove(\"down\"); }\n else if (k === \"ArrowLeft\" && atStart) { e.preventDefault(); onMove(\"left\"); }\n else if (k === \"ArrowRight\" && atEnd) { e.preventDefault(); onMove(\"right\"); }\n }}\n className={cn(\n \"block min-h-8 w-full resize-none overflow-hidden bg-transparent px-2 py-1.5 text-kit-sm leading-5 text-kit-fg outline-none [overflow-wrap:normal] [word-break:normal] placeholder:text-kit-fg-4 focus:bg-kit-surface focus:shadow-[inset_0_0_0_2px_var(--kit-fg-3)]\",\n className,\n )}\n />\n );\n}\n\n/**\n * A reference cell: a page or entry chosen from the host's search (refs.ts). Stores `{ ref, label, href? }`: the label and\n * public path travel with the id so the published table reads without a lookup.\n */\nfunction RefCell({ ctx, cell, col, cellId, name, onWrite, onMove }: { ctx: Ctx; cell: TableCell | undefined; col: TableColumn; cellId: string; name: string; onWrite: (c: TableCell) => void; onMove: (d: Dir) => void }) {\n const [open, setOpen] = React.useState(false);\n const [q, setQ] = React.useState(\"\");\n const v = cellValue(cell);\n const r: TableRef | null = isObjLike(v) && \"ref\" in v ? (v as TableRef) : null;\n const label = r ? (ctx.resolveRef?.(r.ref)?.label ?? refLabel(r)) : typeof v === \"string\" ? v : \"\";\n const search = useRefSearch(open, col.refTo?.length ? col.refTo : null, q);\n const pick = (o: TableRefOption) => {\n onWrite(withValue(cell, { ref: o.id, label: o.title, ...(o.href ? { href: o.href } : {}) }));\n setOpen(false);\n };\n return (\n <Popover open={open} onOpenChange={(o) => (setOpen(o), o || setQ(\"\"))}>\n <PopoverAnchor\n render={\n <button\n type=\"button\"\n data-cell={cellId}\n aria-label={`${name}: ${label || \"not chosen\"}`}\n aria-haspopup=\"dialog\"\n disabled={ctx.readOnly}\n onClick={() => setOpen(true)}\n onKeyDown={(e) => {\n const k = e.key;\n if (k.startsWith(\"Arrow\")) { e.preventDefault(); onMove(k.slice(5).toLowerCase() as Dir); }\n else if (!ctx.readOnly && (k === \"Delete\" || k === \"Backspace\") && !isEmptyCell(v)) { e.preventDefault(); onWrite(withValue(cell, null)); }\n }}\n className=\"flex min-h-8 w-full items-center px-2 text-left text-kit-sm text-kit-fg outline-none focus-visible:shadow-[inset_0_0_0_2px_var(--kit-fg-3)]\"\n />\n }\n >\n {label ? <span className=\"truncate underline decoration-kit-fg-4 underline-offset-2\">{label}</span> : <span className=\"text-kit-fg-4\">Choose…</span>}\n </PopoverAnchor>\n <PopoverContent align=\"start\" className=\"w-72 p-1.5\">\n <Input size=\"sm\" autoFocus value={q} placeholder=\"Search…\" aria-label=\"Find a page or entry\" onChange={(e) => setQ(e.target.value)} />\n <div role=\"status\" className=\"sr-only\">\n {search.status === \"ready\" ? `${search.options.length} results` : search.status === \"loading\" ? \"Searching\" : \"\"}\n </div>\n <ul className=\"mt-1 max-h-56 overflow-auto\" aria-label=\"Pages and entries\">\n {search.status === \"ready\"\n ? search.options.map((o) => (\n <li key={o.id}>\n <button type=\"button\" className=\"flex w-full flex-col rounded-kit-md px-2 py-1.5 text-left hover:bg-kit-hover\" onClick={() => pick(o)}>\n <span className=\"truncate text-kit-sm text-kit-fg\">{o.title}</span>\n {o.subtitle ? <span className=\"truncate text-kit-xs text-kit-fg-3\">{o.subtitle}</span> : null}\n </button>\n </li>\n ))\n : null}\n {search.status === \"ready\" && !search.options.length ? <li className=\"px-2 py-1.5 text-kit-xs text-kit-fg-3\">Nothing found{q.trim() ? ` for “${q.trim()}”` : \"\"}.</li> : null}\n {search.status === \"loading\" ? <li className=\"px-2 py-1.5 text-kit-xs text-kit-fg-3\">Searching…</li> : null}\n {search.status === \"error\" ? <li role=\"alert\" className=\"px-2 py-1.5 text-kit-xs text-kit-danger-fg\">Couldn't search: {search.message}</li> : null}\n {search.status === \"unavailable\" ? <li role=\"note\" className=\"px-2 py-1.5 text-kit-xs text-kit-fg-3\">This view can't search pages or entries, so the cell can't change here.</li> : null}\n </ul>\n {r && !ctx.readOnly ? (\n <Button size=\"sm\" variant=\"ghost\" className=\"mt-1 w-full justify-start text-kit-fg-2\" onClick={() => (onWrite(withValue(cell, null)), setOpen(false))}>\n Clear\n </Button>\n ) : null}\n </PopoverContent>\n </Popover>\n );\n}\n\n/* ── Menus ─────────────────────────────────────────────────────────── */\nfunction ColumnMenu({ ctx, col, index, onInsert, children }: { ctx: Ctx; col: TableColumn; index: number; onInsert: (right: boolean) => void; children: (open: () => void) => React.ReactNode }) {\n const { t, set, edit, lock, types, readOnly } = ctx;\n const [open, setOpen] = React.useState(false);\n const [details, setDetails] = React.useState(false);\n const n = t.columns.length;\n const atMax = !!ctx.options.maxColumns && n >= ctx.options.maxColumns;\n const remove = () => {\n if (n <= 1) return;\n const prev = t;\n set(dropColumn(t, col._key));\n ctx.undoable(\"Column deleted\", prev);\n };\n const shownTypes = types.includes(col.type) ? types : [...types, col.type];\n const hasDetails = !lock && (col.type === \"number\" || col.type === \"money\" || col.type === \"boolean\" || col.type === \"rating\");\n return (\n <Popover open={details} onOpenChange={setDetails}>\n <PopoverAnchor render={<div className=\"flex items-center gap-1 pl-1.5 pr-0.5\" />}>\n <div className=\"flex min-w-0 flex-1 items-center gap-1\">{children(() => setOpen(true))}</div>\n {readOnly ? null : (\n <Menu open={open} onOpenChange={setOpen}>\n <MenuTrigger\n tabIndex={-1}\n aria-label={`Options for column ${col.label || index + 1}`}\n className={cn(DOTS, \"opacity-0 focus-visible:opacity-100 group-hover/col:opacity-100 group-focus-within/col:opacity-100 data-[popup-open]:opacity-100 [@media(pointer:coarse)]:opacity-100\")}\n >\n <IconDots className=\"size-3.5\" stroke={1.5} />\n </MenuTrigger>\n <MenuContent align=\"end\" className=\"min-w-52\">\n {lock ? null : (\n <MenuSub>\n <MenuSubTrigger icon={<TypeIcon type={col.type} className=\"text-kit-fg-2\" />}>Type: {TYPE_UI[col.type].label}</MenuSubTrigger>\n <MenuSubContent>\n <MenuRadioGroup value={col.type} onValueChange={(v) => edit((x) => retype(x, col._key, v as TableColumnType, ctx.resolveRef))}>\n {shownTypes.map((ty) => (\n <MenuRadioItem key={ty} value={ty}>\n <span className=\"flex items-center gap-2\"><TypeIcon type={ty} className=\"text-kit-fg-2\" />{TYPE_UI[ty].label}</span>\n </MenuRadioItem>\n ))}\n </MenuRadioGroup>\n </MenuSubContent>\n </MenuSub>\n )}\n {hasDetails ? (\n <MenuItem onClick={() => window.setTimeout(() => setDetails(true))}>\n {col.type === \"number\" ? \"Unit…\" : col.type === \"money\" ? \"Currency…\" : col.type === \"rating\" ? \"Scale…\" : \"Words for yes and no…\"}\n </MenuItem>\n ) : null}\n {lock ? null : (\n <>\n <MenuSeparator />\n <MenuItem disabled={atMax} onClick={() => onInsert(false)}>Insert column left</MenuItem>\n <MenuItem disabled={atMax} onClick={() => onInsert(true)}>Insert column right</MenuItem>\n <MenuItem disabled={atMax} onClick={() => set(copyColumn(t, index))}>Duplicate column</MenuItem>\n <MenuItem disabled={index === 0} onClick={() => set({ ...t, columns: moveItem(t.columns, index, index - 1) })}>Move left</MenuItem>\n <MenuItem disabled={index === n - 1} onClick={() => set({ ...t, columns: moveItem(t.columns, index, index + 1) })}>Move right</MenuItem>\n </>\n )}\n <MenuSeparator />\n <MenuCheckItem checked={t.headerRow} onCheckedChange={(v) => set({ ...t, headerRow: v })}>Show column names</MenuCheckItem>\n <MenuCheckItem checked={t.headerColumn} onCheckedChange={(v) => set({ ...t, headerColumn: v })}>First column names each row</MenuCheckItem>\n <MenuCheckItem checked={!!col.highlight} onCheckedChange={(v) => set({ ...t, columns: t.columns.map((c) => ({ ...c, highlight: c._key === col._key && v ? true : undefined })) })}>Highlight this column</MenuCheckItem>\n {lock ? null : (\n <>\n <MenuSeparator />\n <MenuItem danger disabled={n <= 1} onClick={remove}>{n <= 1 ? \"Delete column · a table keeps one\" : \"Delete column\"}</MenuItem>\n </>\n )}\n </MenuContent>\n </Menu>\n )}\n </PopoverAnchor>\n <PopoverContent align=\"end\" className=\"w-64 p-3\">\n <ColumnDetails col={col} onPatch={(p) => set({ ...t, columns: t.columns.map((c) => (c._key === col._key ? withPatch(c, p) : c)) })} />\n </PopoverContent>\n </Popover>\n );\n}\n/** A stored TableLink as the global link field's value (V2 tableLinkValue). */\nconst tableLinkValue = (l: TableLink): LinkValue => ({ ...normLink(l.href), newTab: !!l.newTab, target: l.newTab ? \"_blank\" : \"_self\", rel: l.rel ?? \"follow\" });\n/** Patch a column; a key set to undefined is removed (the stored value never carries an empty key). */\nfunction withPatch<T extends object>(c: T, p: Partial<T>): T {\n const next = { ...c, ...p } as Record<string, unknown>;\n for (const k of Object.keys(p)) if (next[k] === undefined) delete next[k];\n return next as T;\n}\n\nfunction ColumnDetails({ col, onPatch, compact = true, readOnly }: { col: TableColumn; onPatch: (p: Partial<TableColumn>) => void; compact?: boolean; readOnly?: boolean }) {\n const id = React.useId();\n const row = (key: string, label: string, node: React.ReactNode, help?: string) => (\n // one <label> around the name, the control and its help, like V2 (the panel walk measures the whole block)\n <label htmlFor={`${id}-${key}`} className={cn(\"flex flex-col\", compact ? \"gap-1\" : \"gap-1.5\")}>\n <span className={cn(\"font-medium text-kit-fg-2\", compact ? \"text-kit-xs\" : \"text-kit-sm\")}>{label}</span>\n {node}\n {help ? <span className=\"text-kit-2xs leading-4 text-kit-fg-3\">{help}</span> : null}\n </label>\n );\n return (\n <div className={cn(\"flex flex-col\", compact ? \"gap-2.5\" : \"gap-4\")}>\n {col.type === \"number\"\n ? row(\"unit\", \"Unit\", <Input id={`${id}-unit`} size=\"sm\" autoFocus={compact} readOnly={readOnly} maxLength={16} value={col.unit ?? \"\"} placeholder=\"kg, %, min\" onChange={(e) => onPatch({ unit: e.target.value || undefined })} />, \"Written after every value.\")\n : null}\n {col.type === \"money\" ? (\n // a row() like V2; its htmlFor names no element, so a click on \"Currency\" never picks the first currency\n row(\"currency\", \"Currency\", <Segmented size=\"sm\" aria-label=\"Currency\" value={col.currency ?? \"USD\"} onChange={(currency) => !readOnly && onPatch({ currency })} items={(CURRENCIES.includes(col.currency ?? \"USD\") ? CURRENCIES : [...CURRENCIES, col.currency!]).map((c) => ({ value: c, label: c }))} />)\n ) : null}\n {col.type === \"rating\"\n ? row(\n \"max\",\n \"Out of\",\n <Input\n id={`${id}-max`}\n size=\"sm\"\n autoFocus={compact}\n readOnly={readOnly}\n type=\"number\"\n min={1}\n max={10}\n value={col.max ?? 5}\n // the backend takes a whole number from 1 to 10 (min/max say so; V2 writes no help line here)\n onChange={(e) => {\n const n = Math.round(Number(e.target.value));\n onPatch({ max: Number.isFinite(n) && n >= 1 ? Math.min(10, n) : undefined });\n }}\n />,\n )\n : null}\n {col.type === \"boolean\" ? (\n <>\n {row(\"yes\", \"Yes says\", <Input id={`${id}-yes`} size=\"sm\" autoFocus={compact} readOnly={readOnly} maxLength={300} value={col.trueLabel ?? \"\"} placeholder=\"Included\" onChange={(e) => onPatch({ trueLabel: e.target.value || undefined })} />, \"People who can't see the check mark hear these words.\")}\n {row(\"no\", \"No says\", <Input id={`${id}-no`} size=\"sm\" readOnly={readOnly} maxLength={300} value={col.falseLabel ?? \"\"} placeholder=\"Not included\" onChange={(e) => onPatch({ falseLabel: e.target.value || undefined })} />)}\n </>\n ) : null}\n </div>\n );\n}\n\nfunction RowMenu({ ctx, row, index, count, onInsert, children }: { ctx: Ctx; row: TableRow; index: number; count: number; onInsert: (below: boolean) => void; children: (trigger: React.ReactNode) => React.ReactNode }) {\n const { t, set, edit } = ctx;\n const atMax = !!ctx.options.maxRows && !row.footer && t.rows.filter((r) => !r.footer).length >= ctx.options.maxRows;\n const duplicate = () => {\n const order = displayRows(t).map((d) => d.row);\n order.splice(index + 1, 0, { ...row, _key: tkey(\"r\"), cells: { ...row.cells } });\n set({ ...t, rows: order });\n };\n const remove = () => {\n const prev = t;\n set({ ...t, rows: t.rows.filter((r) => r._key !== row._key) });\n ctx.undoable(\"Row deleted\", prev);\n };\n const groups = offered(ctx.options).groups ? t.rowGroups ?? [] : [];\n const trigger = (\n <MenuTrigger tabIndex={-1} aria-label={`Options for row ${index + 1}`} className={DOTS}>\n <IconDots className=\"size-3.5\" stroke={1.5} />\n </MenuTrigger>\n );\n return (\n <Menu>\n {children(trigger)}\n <MenuContent className=\"min-w-52\">\n <MenuItem disabled={atMax} onClick={() => onInsert(false)}>Insert row above</MenuItem>\n <MenuItem disabled={atMax} onClick={() => onInsert(true)}>Insert row below</MenuItem>\n <MenuItem disabled={atMax} onClick={duplicate}>Duplicate row</MenuItem>\n <MenuItem disabled={index === 0} onClick={() => set(moveRowTo(t, index, index - 1))}>Move up</MenuItem>\n <MenuItem disabled={index === count - 1} onClick={() => set(moveRowTo(t, index, index + 1))}>Move down</MenuItem>\n {groups.length ? (\n <MenuSub>\n <MenuSubTrigger>Move to group</MenuSubTrigger>\n <MenuSubContent>\n <MenuRadioGroup value={row.group ?? \"\"} onValueChange={(g) => edit(mapRow(row._key, (x) => clean({ ...x, group: (g as string) || undefined, footer: undefined })))}>\n <MenuRadioItem value=\"\">No group</MenuRadioItem>\n {groups.map((g) => (\n <MenuRadioItem key={g._key} value={g._key}>{g.label || \"Untitled group\"}</MenuRadioItem>\n ))}\n </MenuRadioGroup>\n </MenuSubContent>\n </MenuSub>\n ) : null}\n {offered(ctx.options).highlight ? <MenuCheckItem checked={!!row.highlight} onCheckedChange={(v) => edit(mapRow(row._key, (x) => clean({ ...x, highlight: v })))}>Highlight this row</MenuCheckItem> : null}\n {offered(ctx.options).totals ? <MenuCheckItem checked={!!row.footer} onCheckedChange={(v) => edit(mapRow(row._key, (x) => clean({ ...x, footer: v, group: undefined })))}>Totals row</MenuCheckItem> : null}\n <MenuSeparator />\n <MenuItem danger onClick={remove}>Delete row</MenuItem>\n </MenuContent>\n </Menu>\n );\n}\n\n/** Right-click (or Shift+F10 / the menu key) on a cell: words instead of the column's type, a footnote, clear. */\nfunction CellMenu({ ctx, row, col, cell, onWrite, onNote, children }: { ctx: Ctx; row: TableRow; col: TableColumn; cell: TableCell | undefined; onWrite: (c: TableCell | undefined) => void; onNote: () => void; children: React.ReactNode }) {\n const { t, set } = ctx;\n const own = isCellObject(cell) ? cell.type : undefined;\n const note = cellNote(cell);\n const colType = row.type ?? col.type;\n const asText = own === \"text\";\n const atMax = !!ctx.options.maxRows && !row.footer && t.rows.filter((r) => !r.footer).length >= ctx.options.maxRows;\n const setOwn = (type: TableColumnType | undefined) => {\n const raw = cellText(col, row, cell, ctx.resolveRef);\n const value = coerce(raw, { type: type ?? colType, max: col.max });\n onWrite(type || note ? { value, ...(type ? { type } : {}), ...(note ? { note } : {}) } : value);\n };\n const insertRow = (below: boolean) => {\n const order = displayRows(t).map((d) => d.row);\n const at = order.findIndex((r) => r._key === row._key) + (below ? 1 : 0);\n order.splice(at, 0, clean({ _key: tkey(\"r\"), cells: {}, group: row.group, footer: row.footer }));\n set({ ...t, rows: order });\n };\n return (\n <ContextMenu.Root>\n <ContextMenu.Trigger render={<div />}>{children}</ContextMenu.Trigger>\n <MenuContent className=\"min-w-52\">\n {colType !== \"text\" && colType !== \"reference\" && colType !== \"richtext-inline\" ? (\n <MenuItem onClick={() => setOwn(asText ? undefined : \"text\")}>{asText ? `Use ${TYPE_UI[colType].label} like the column` : \"Write words in this cell instead\"}</MenuItem>\n ) : null}\n {offered(ctx.options).footnotes ? (\n note ? (\n <>\n <MenuItem onClick={onNote}>Edit footnote</MenuItem>\n <MenuItem onClick={() => set(unlinkNote(t, row._key, col._key))}>Remove footnote</MenuItem>\n </>\n ) : (\n <MenuItem onClick={() => (set(linkNote(t, row._key, col._key)[0]), onNote())}>Add a footnote</MenuItem>\n )\n ) : null}\n <MenuSeparator />\n <MenuItem disabled={atMax} onClick={() => insertRow(true)}>Insert row below</MenuItem>\n <MenuItem disabled={atMax} onClick={() => insertRow(false)}>Insert row above</MenuItem>\n <MenuItem onClick={() => onWrite(withValue(cell, null))}>Clear cell</MenuItem>\n <MenuItem\n danger\n onClick={() => {\n const prev = t;\n set({ ...t, rows: t.rows.filter((r) => r._key !== row._key) });\n ctx.undoable(\"Row deleted\", prev);\n }}\n >\n Delete row\n </MenuItem>\n </MenuContent>\n </ContextMenu.Root>\n );\n}\n\n/* ── The form view (D50, D52): a table field reads like any nested array. No tinted container: Title, Columns, Rows (groups\n live in the row list), Note under the table, then a collapsed Table settings with only the settings this kind offers. ── */\nconst hasName = (t: TableValue, r: TableRow) => !!t.columns[0] && !isEmptyCell(cellValue(r.cells[t.columns[0]._key]));\n/** The row that was open when its drill closed, per table: focus lands back on it (form frames and the local drill). */\nconst returnTo = new Map<string, string>();\nconst ROWS_FIELD: FieldSchema = { name: \"rows\", title: \"Rows\", type: \"table\", icon: \"list\" };\nconst COLUMNS_FIELD: FieldSchema = { name: \"columns\", title: \"Columns\", type: \"table\", icon: \"layout-columns\" };\nconst noop = () => undefined;\nconst colSummary = (c: TableColumn) =>\n [TYPE_UI[c.type].label, c.type === \"number\" ? c.unit : c.type === \"money\" ? c.currency ?? \"USD\" : c.type === \"rating\" ? `out of ${c.max ?? 5}` : undefined].filter(Boolean).join(\" · \");\n/** D52: the whole table is ONE group, shown the way every nested group is shown: a single 1px inset line on the left. */\nconst TABLE_GROUP = \"ml-1.5 border-l border-kit-line pl-3\";\n/** A sub-part of the table field: the same label style as every field label (13/500, fg-2; fg while focus is inside). */\nconst PART_LABEL = \"text-kit-sm font-medium text-kit-fg-2 transition-colors group-focus-within/part:text-kit-fg\";\n\n/** CPO D52: the settings a table kind offers, with their defaults (schema/table.ts › TableSettingsOptions). */\nconst PHONES: { value: TableResponsive; label: string }[] = [\n { value: \"scroll\", label: \"Scroll\" },\n { value: \"stack\", label: \"Stack\" },\n { value: \"cards\", label: \"Cards\" },\n];\nexport function offered(options: TableFieldOptions) {\n const s = options.settings ?? {};\n const phones = PHONES.filter((p) => !s.phones || s.phones.includes(p.value));\n return {\n headers: s.headers !== false,\n totals: s.totals !== false,\n phones: phones.length > 1 ? phones : [],\n highlight: s.highlight !== false,\n sticky: s.sticky !== false,\n sort: !!s.sort,\n search: !!s.search,\n jsonLd: (options.jsonLd ?? []).filter((x) => x !== \"none\"),\n groups: options.allowGroups !== false,\n footnotes: options.allowFootnotes !== false,\n note: options.allowNote !== false,\n };\n}\n\n/** Unlink a footnote from one cell; the footnote itself goes when no other cell points at it. */\nexport function unlinkNote(t: TableValue, rowKey: string, colKey: string): TableValue {\n let note: string | undefined;\n const rows = t.rows.map((r) => {\n if (r._key !== rowKey) return r;\n const c = r.cells[colKey];\n if (!isCellObject(c) || !c.note) return r;\n note = c.note;\n return { ...r, cells: { ...r.cells, [colKey]: c.type ? { value: c.value, type: c.type } : c.value } };\n });\n if (!note) return t;\n const used = rows.some((r) => Object.values(r.cells).some((c) => isCellObject(c) && c.note === note));\n return { ...t, rows, footnotes: used ? t.footnotes : (t.footnotes ?? []).filter((f) => f._key !== note) };\n}\n/** Link a new, empty footnote to one cell. Returns the table and the footnote's key (its input takes focus). */\nexport function linkNote(t: TableValue, rowKey: string, colKey: string): [TableValue, string] {\n const f = { _key: tkey(\"f\"), text: \"\" };\n return [\n {\n ...t,\n footnotes: [...(t.footnotes ?? []), f],\n rows: t.rows.map((r) => {\n if (r._key !== rowKey) return r;\n const c = r.cells[colKey];\n const own = isCellObject(c) ? c.type : undefined;\n return { ...r, cells: { ...r.cells, [colKey]: { value: cellValue(c), ...(own ? { type: own } : {}), note: f._key } } };\n }),\n },\n f._key,\n ];\n}\nconst focusSoon = (selector: string) => requestAnimationFrame(() => document.querySelector<HTMLElement>(selector)?.focus());\n\ntype Open = { kind: \"rows\" | \"columns\"; key: string } | null;\n\nfunction TableBody({ ctx, label, nav, head }: { ctx: Ctx; label?: string; nav?: TableNav; head: React.ReactNode }) {\n const { t, set, readOnly, options } = ctx;\n const [open, setOpen] = React.useState<Open>(null);\n const host = React.useRef<HTMLDivElement>(null);\n const localId = React.useId();\n const id = nav?.id ?? localId;\n const focusRow = (key: string) => host.current?.querySelector<HTMLElement>(`[data-row-open=\"${CSS.escape(key)}\"]`)?.focus({ preventScroll: false });\n // coming back from a row (Esc, ←, or a crumb): focus returns to that row, after the form has placed its own focus\n React.useEffect(() => {\n if (open || !returnTo.has(id)) return;\n const raf = requestAnimationFrame(() => {\n const key = returnTo.get(id);\n returnTo.delete(id);\n const a = document.activeElement;\n if (key && (!a || a === document.body || a.matches(\"[data-frame-body]\") || host.current?.contains(a) || !a.isConnected)) focusRow(key);\n });\n return () => cancelAnimationFrame(raf);\n }, [open, id]);\n const go = (kind: \"rows\" | \"columns\", index: number, key: string) => {\n returnTo.set(id, key);\n if (nav) window.setTimeout(() => nav.open(kind, index), 0);\n else setOpen({ kind, key });\n };\n const list = open ? (open.kind === \"rows\" ? t.rows : t.columns) : [];\n const at = open ? list.findIndex((x) => x._key === open.key) : -1;\n if (open && at >= 0)\n return (\n <div className={TABLE_GROUP}>\n <LocalDrill ctx={ctx} label={label} open={open} index={at} onBack={() => setOpen(null)} onGo={(key) => setOpen({ kind: open.kind, key })} />\n </div>\n );\n const base = nav?.basePath ?? [];\n const titleId = `${id}-title`;\n const noteId = `${id}-note`;\n return (\n // mb-2: the collapsed Table settings ends the field, so the next field starts a section's distance away (24px)\n <div ref={host} role=\"group\" aria-label={label || \"Table\"} className={cn(TABLE_GROUP, \"flex flex-col gap-4 @max-[360px]:gap-3\", !readOnly && \"mb-2\")}>\n <div className=\"group/part flex flex-col gap-1.5\">\n <div className=\"flex min-h-5 items-center gap-1.5\">\n <label htmlFor={titleId} className={PART_LABEL}>Title</label>\n {options.requireCaption !== false && !t.caption.trim() ? <span className=\"text-kit-xs text-kit-fg-3\">Required</span> : null}\n <span className=\"flex-1\" />\n {head}\n </div>\n <Textarea id={titleId} rows={1} maxLength={300} value={t.caption} readOnly={readOnly} placeholder=\"What the table shows\" onChange={(e) => set({ ...t, caption: e.target.value.replace(/\\n/g, \" \") })} className=\"min-h-8 resize-none py-1.5\" />\n </div>\n <ColumnsPart ctx={ctx} basePath={base} onOpen={(i, key) => go(\"columns\", i, key)} />\n <RowsPart ctx={ctx} basePath={base} onOpen={(i, key) => go(\"rows\", i, key)} />\n {offered(options).note ? (\n <div className=\"group/part flex flex-col gap-1.5\">\n <label htmlFor={noteId} className={PART_LABEL}>Note under the table</label>\n <Textarea id={noteId} rows={2} maxLength={2000} value={t.notes ?? \"\"} readOnly={readOnly} placeholder=\"Source: our own tests, September 2026.\" onChange={(e) => set({ ...t, notes: e.target.value || undefined })} />\n </div>\n ) : null}\n {readOnly ? null : <TableSettings ctx={ctx} />}\n </div>\n );\n}\n\n/** Columns: an array list like any other (type icon, name, \"Yes / No\" summary, ⋯, ›). */\nfunction ColumnsPart({ ctx, basePath, onOpen }: { ctx: Ctx; basePath: FieldPath; onOpen: (index: number, key: string) => void }) {\n const { t, set, lock, options } = ctx;\n const n = t.columns.length;\n const atMax = !!options.maxColumns && n >= options.maxColumns;\n const write = (columns: TableColumn[]) => set({ ...t, columns });\n const add = () => {\n if (atMax) return;\n const col: TableColumn = { _key: tkey(\"c\"), label: \"\", type: \"text\" };\n write([...t.columns, col]);\n onOpen(n, col._key);\n };\n const ops = {\n atMax,\n atMin: n <= 1,\n add,\n duplicate: (i: number) => !atMax && set(copyColumn(t, i)),\n move: (i: number, d: -1 | 1) => i + d >= 0 && i + d < n && write(moveItem(t.columns, i, i + d)),\n reorder: (from: number, to: number) => write(moveItem(t.columns, from, to)),\n remove: (i: number, title: string) => {\n if (n <= 1) return;\n const prev = t;\n set(dropColumn(t, t.columns[i]._key));\n ctx.undoable(`“${title}” removed`, prev);\n },\n insertBlank: noop,\n };\n const rows: RowModel[] = t.columns.map((c, i) => ({\n id: c._key,\n index: i,\n item: c,\n path: [...basePath, \"columns\", i],\n preview: { title: c.label || \"Untitled column\", subtitle: colSummary(c), empty: !c.label },\n }));\n return (\n <div role=\"group\" aria-label=\"Columns\" className=\"group/part flex flex-col gap-1.5\">\n <span className={PART_LABEL}>Columns</span>\n <RowList\n field={{ ...COLUMNS_FIELD, validation: { min: 1 } }}\n rows={rows}\n readOnly={lock}\n layout=\"list\"\n mode=\"drill\"\n openId={null}\n onOpen={(r) => onOpen(r.index, r.id)}\n onCloseInline={noop}\n ops={ops as unknown as ListOps}\n renderInline={() => null}\n emptyLabel=\"No columns yet.\"\n leading={(r) => (\n <span className=\"flex size-7 shrink-0 items-center justify-center rounded-kit-md bg-kit-muted text-kit-fg-2\">\n <TypeIcon type={(r.item as TableColumn).type} className=\"size-4 text-kit-fg-2\" />\n </span>\n )}\n addButton={\n <Button size=\"sm\" variant=\"ghost\" className=\"text-kit-fg-2\" leftIcon={<IconPlus stroke={1.5} />} disabled={atMax} onClick={add}>\n {atMax ? `Add column · ${options.maxColumns} at most` : \"Add column\"}\n </Button>\n }\n />\n </div>\n );\n}\n\n/**\n * Rows (D52): groups live in the row list itself. Loose rows first, then each group under a heading you rename in place\n * (its ⋯ moves or removes it), then Totals. \"Add group\" sits next to the last \"Add row\"; a row changes group by its ⋯ ›\n * Move to group. Every list is the kit's array row list; drag (and ↑/↓ on the grip) reorders inside a group.\n */\nfunction RowsPart({ ctx, basePath, onOpen }: { ctx: Ctx; basePath: FieldPath; onOpen: (index: number, key: string) => void }) {\n const { t, set, resolveRef, readOnly, options } = ctx;\n const can = offered(options);\n const groups = can.groups ? t.rowGroups ?? [] : [];\n const known = new Set(groups.map((g) => g._key));\n const body = t.rows.filter((r) => !r.footer);\n type Run = { key: string; group?: TableGroup; totals?: boolean; items: TableRow[] };\n const runs: Run[] = [];\n const loose = body.filter((r) => !r.group || !known.has(r.group));\n if (loose.length || !groups.length) runs.push({ key: \"loose\", items: loose });\n groups.forEach((g) => runs.push({ key: g._key, group: g, items: body.filter((r) => r.group === g._key) }));\n const foot = t.rows.filter((r) => r.footer);\n if (foot.length) runs.push({ key: \"totals\", totals: true, items: foot });\n const lastBody = runs.filter((r) => !r.totals).length - 1;\n const atMax = !!options.maxRows && body.length >= options.maxRows;\n // a row keeps a group key the field does not show (groups turned off) instead of losing it on a reorder\n const place = (r: Run, x: TableRow) => clean({ ...x, group: r.group?._key ?? (r.key === \"loose\" && x.group && !known.has(x.group) ? x.group : undefined), footer: r.totals || undefined });\n const writeRuns = (next: Run[]) => set({ ...t, rows: next.flatMap((r) => r.items.map((x) => place(r, x))) });\n const writeRun = (ri: number, items: TableRow[]) => writeRuns(runs.map((r, j) => (j === ri ? { ...r, items } : r)));\n const add = (ri: number) => {\n if (atMax && !runs[ri].totals) return;\n const run = runs[ri];\n const row = place(run, { _key: tkey(\"r\"), cells: {} });\n const rows = runs.flatMap((r, j) => (j === ri ? [...r.items.map((x) => place(r, x)), row] : r.items.map((x) => place(r, x))));\n set({ ...t, rows });\n onOpen(rows.indexOf(row), row._key);\n };\n const addGroup = () => {\n const g = { _key: tkey(\"rg\"), label: \"\" };\n set({ ...t, rowGroups: [...(t.rowGroups ?? []), g] });\n focusSoon(`[data-group-name=\"${g._key}\"]`);\n };\n const placeName = (k: string) => (k === \"totals\" ? \"Totals\" : k === \"loose\" ? \"No group\" : groups.find((g) => g._key === k)?.label || \"Untitled group\");\n /** Move a row to the end of another run (a group, no group, or Totals). */\n const moveTo = (row: TableRow, target: { group?: string; totals?: boolean }) => {\n const prev = t;\n const rest = t.rows.filter((r) => r._key !== row._key);\n set({ ...t, rows: [...rest, clean({ ...row, group: target.totals ? undefined : target.group, footer: target.totals || undefined })] });\n ctx.undoable(`Moved to ${placeName(target.totals ? \"totals\" : target.group ?? \"loose\")}`, prev);\n };\n const opsFor = (ri: number) => {\n const items = runs[ri].items;\n const runMax = atMax && !runs[ri].totals;\n return {\n atMax: runMax,\n atMin: false,\n add: () => add(ri),\n duplicate: (i: number) => !runMax && writeRun(ri, [...items.slice(0, i + 1), { ...items[i], _key: tkey(\"r\"), cells: { ...items[i].cells } }, ...items.slice(i + 1)]),\n move: (i: number, d: -1 | 1) => i + d >= 0 && i + d < items.length && writeRun(ri, moveItem(items, i, i + d)),\n reorder: (from: number, to: number) => writeRun(ri, moveItem(items, from, to)),\n remove: (i: number, title: string) => {\n const prev = t;\n writeRun(ri, items.filter((_, j) => j !== i));\n ctx.undoable(`“${title}” removed`, prev);\n },\n insertBlank: noop,\n };\n };\n const sub = (r: TableRow) =>\n t.columns\n .slice(1, 3)\n .map((c) => {\n const s = cellText(c, r, r.cells[c._key], resolveRef);\n return s ? `${c.label || \"Untitled\"}: ${s}` : \"\";\n })\n .filter(Boolean)\n .join(\" · \");\n const model = (row: TableRow, i: number): RowModel => {\n const named = hasName(t, row);\n return {\n id: row._key,\n index: i,\n item: row,\n path: [...basePath, \"rows\", t.rows.indexOf(row)],\n preview: { title: named ? rowTitle(t, row, i, resolveRef) : \"Untitled row\", subtitle: sub(row) || undefined, empty: !named },\n };\n };\n // \"Move to group\" in a row's ⋯: every other place the row could live\n const moveMenu = (r: RowModel) => {\n const row = r.item as TableRow;\n const here = row.footer ? \"totals\" : row.group && known.has(row.group) ? row.group : \"\";\n const places = [\n ...(groups.length ? [{ value: \"\", label: \"No group\" }] : []),\n ...groups.map((g) => ({ value: g._key, label: g.label || \"Untitled group\" })),\n ...(can.totals && (foot.length || groups.length) ? [{ value: \"totals\", label: \"Totals\" }] : []),\n ];\n if (!places.some((p) => p.value !== here)) return null;\n return (\n <MenuSub>\n <MenuSubTrigger icon={<IconFolder stroke={1.5} />}>Move to group</MenuSubTrigger>\n <MenuSubContent className=\"min-w-44\">\n <MenuRadioGroup value={here} onValueChange={(v) => v !== here && moveTo(row, v === \"totals\" ? { totals: true } : { group: (v as string) || undefined })}>\n {places.map((p) => (\n <MenuRadioItem key={p.value || \"none\"} value={p.value}>{p.label}</MenuRadioItem>\n ))}\n </MenuRadioGroup>\n </MenuSubContent>\n </MenuSub>\n );\n };\n // only a row that has values but no name is a problem; a fresh empty row is just unfinished\n // V2 sorts every run inside ONE DndContext: one set of drag instructions and one live region, after the runs\n const sharedSort = useSharedSort();\n const unnamed = t.rows.find((r) => !hasName(t, r) && t.columns.slice(1).some((c) => !isEmptyCell(cellValue(r.cells[c._key]))));\n const addRowButton = (ri: number) => (\n <Button size=\"sm\" variant=\"ghost\" className=\"text-kit-fg-2\" leftIcon={<IconPlus stroke={1.5} />} disabled={atMax && !runs[ri].totals} onClick={() => add(ri)}>\n {atMax && !runs[ri].totals ? `Add row · ${options.maxRows} at most` : \"Add row\"}\n </Button>\n );\n return (\n <div role=\"group\" aria-label=\"Rows\" className=\"group/part flex flex-col gap-1.5\">\n <span className={PART_LABEL}>Rows</span>\n {unnamed && !readOnly ? (\n <button type=\"button\" onClick={() => onOpen(t.rows.indexOf(unnamed), unnamed._key)} className=\"self-start text-left text-kit-xs text-kit-warning-fg underline-offset-2 hover:underline\">\n A row has values but no name. Open it\n </button>\n ) : null}\n <SharedSortProvider value={sharedSort.value}>\n <div className=\"flex flex-col gap-3\">\n {runs.map((run, ri) => {\n const list = (\n <RowList\n field={ROWS_FIELD}\n rows={run.items.map(model)}\n readOnly={readOnly}\n layout=\"list\"\n mode=\"drill\"\n openId={null}\n onOpen={(r) => onOpen(t.rows.indexOf(r.item as TableRow), r.id)}\n onCloseInline={noop}\n ops={opsFor(ri) as unknown as ListOps}\n renderInline={() => null}\n menuExtra={moveMenu}\n emptyLabel={run.totals ? \"No totals yet.\" : run.group ? \"No rows in this group yet.\" : \"No rows yet.\"}\n addButton={\n ri === lastBody && can.groups ? (\n <span className=\"flex flex-wrap items-center gap-1\">\n {addRowButton(ri)}\n <Button size=\"sm\" variant=\"ghost\" className=\"text-kit-fg-2\" leftIcon={<IconPlus stroke={1.5} />} onClick={addGroup}>\n Add group\n </Button>\n </span>\n ) : (\n addRowButton(ri)\n )\n }\n />\n );\n if (!run.group && !run.totals) return <div key={run.key}>{list}</div>;\n return (\n <div key={run.key} role=\"group\" aria-label={run.totals ? \"Totals\" : run.group!.label || \"Untitled group\"} className=\"flex flex-col gap-1.5\">\n {run.totals ? (\n <span className=\"flex h-7 items-center px-0.5 text-kit-sm font-medium text-kit-fg-2\">Totals</span>\n ) : (\n <GroupHeading ctx={ctx} group={run.group!} index={groups.indexOf(run.group!)} count={groups.length} rows={run.items.length} />\n )}\n <div className=\"ml-1.5 border-l border-kit-line pl-3\">{list}</div>\n </div>\n );\n })}\n </div>\n </SharedSortProvider>\n {sharedSort.a11y}\n </div>\n );\n}\n\n/** A row group's heading, renamed in place. It reads as a label at rest; its ⋯ moves or removes the group. */\nfunction GroupHeading({ ctx, group, index, count, rows }: { ctx: Ctx; group: TableGroup; index: number; count: number; rows: number }) {\n const { t, set, readOnly } = ctx;\n const [draft, setDraft] = React.useState(group.label);\n // a rename elsewhere (undo, another save) replaces the draft\n const [seen, setSeen] = React.useState(group.label);\n if (seen !== group.label) {\n setSeen(group.label);\n setDraft(group.label);\n }\n const rename = (label: string) => label !== group.label && set({ ...t, rowGroups: (t.rowGroups ?? []).map((g) => (g._key === group._key ? { ...g, label } : g)) });\n const moveGroup = (d: -1 | 1) => set({ ...t, rowGroups: moveItem(t.rowGroups ?? [], index, index + d) });\n const remove = () => {\n const prev = t;\n set({ ...t, rowGroups: (t.rowGroups ?? []).filter((g) => g._key !== group._key), rows: t.rows.map((r) => (r.group === group._key ? clean({ ...r, group: undefined }) : r)) });\n ctx.undoable(`“${group.label || \"Untitled group\"}” removed`, prev, rows ? `Its ${rows === 1 ? \"row stays\" : `${rows} rows stay`} in the table.` : undefined);\n };\n return (\n <div className=\"group/gh flex min-w-0 items-center gap-1\">\n <input\n data-group-name={group._key}\n value={draft}\n readOnly={readOnly}\n maxLength={300}\n placeholder=\"Group name\"\n aria-label=\"Group name\"\n onChange={(e) => setDraft(e.target.value)}\n onBlur={() => rename(draft.replace(/\\s+/g, \" \").trim())}\n onKeyDown={(e) => {\n if (e.key === \"Enter\") { e.preventDefault(); e.currentTarget.blur(); }\n else if (e.key === \"Escape\" && draft !== group.label) { e.preventDefault(); e.stopPropagation(); setDraft(group.label); }\n }}\n className=\"-mx-0.5 h-7 min-w-0 flex-1 truncate rounded-kit-md bg-transparent px-0.5 text-kit-sm font-medium text-kit-fg-2 outline-none transition-colors placeholder:font-normal placeholder:text-kit-fg-4 hover:bg-kit-hover focus:bg-kit-surface focus:px-2 focus:text-kit-fg focus:shadow-[inset_0_0_0_1px_var(--kit-line-strong)]\"\n />\n {readOnly ? null : (\n <Menu>\n <MenuTrigger\n aria-label={`Options for ${group.label || \"this group\"}`}\n className={cn(DOTS, \"size-7 opacity-0 focus-visible:opacity-100 group-hover/gh:opacity-100 group-focus-within/gh:opacity-100 data-[popup-open]:opacity-100 [@media(pointer:coarse)]:opacity-100\")}\n >\n <IconDots className=\"size-4\" stroke={1.5} />\n </MenuTrigger>\n <MenuContent align=\"end\" className=\"min-w-44\">\n <MenuItem icon={<IconArrowUp stroke={1.5} />} disabled={index === 0} onClick={() => moveGroup(-1)}>Move up</MenuItem>\n <MenuItem icon={<IconArrowDown stroke={1.5} />} disabled={index >= count - 1} onClick={() => moveGroup(1)}>Move down</MenuItem>\n <MenuSeparator />\n <MenuItem danger onClick={remove}>Remove group</MenuItem>\n </MenuContent>\n </Menu>\n )}\n </div>\n );\n}\n\n/**\n * Height of the sticky bars pinned above a table in its scroll area: the rich-text editor publishes\n * --rt-sticky-top (field tabs + its toolbar), a kit form --kit-sticky-top (field tabs).\n */\nconst STICKY_TOP = \"var(--rt-sticky-top, var(--kit-sticky-top, 0px))\";\n/** Scroll only the nearest scroll area (never the shell) so `el`'s top clears the sticky bars (its scroll-margin-top). */\nfunction revealBelowStickies(el: HTMLElement | null) {\n if (!el) return;\n let area = el.parentElement;\n while (area && !/(auto|scroll)/.test(getComputedStyle(area).overflowY)) area = area.parentElement;\n const top = area ? area.getBoundingClientRect().top : 0;\n const hidden = top + (parseFloat(getComputedStyle(el).scrollMarginTop) || 0) - el.getBoundingClientRect().top;\n if (hidden > 1) (area ?? document.scrollingElement)?.scrollBy?.({ top: -hidden });\n}\n\n/** Tables outside a kit form (the /style-guide/kit sandbox, demos): the same drill, with the same breadcrumb and header. */\nfunction LocalDrill({ ctx, label, open, index, onBack, onGo }: { ctx: Ctx; label?: string; open: NonNullable<Open>; index: number; onBack: () => void; onGo: (key: string) => void }) {\n const { t, resolveRef } = ctx;\n const rows = open.kind === \"rows\";\n const list = rows ? t.rows : t.columns;\n const titleAt = (i: number) => (rows ? (hasName(t, t.rows[i]) ? rowTitle(t, t.rows[i], i, resolveRef) : \"Untitled row\") : t.columns[i].label || \"Untitled column\");\n const row = rows ? t.rows[index] : undefined;\n const group = row?.group && !row.footer ? t.rowGroups?.find((g) => g._key === row.group) : undefined;\n const title = titleAt(index);\n const noun = rows ? \"row\" : \"column\";\n const rootRef = React.useRef<HTMLDivElement>(null);\n const headRef = React.useRef<HTMLDivElement>(null);\n React.useLayoutEffect(() => {\n headRef.current?.focus({ preventScroll: true });\n // the drill takes the table's place, whose top was often scrolled away; bring its head out from under the sticky bars\n const raf = requestAnimationFrame(() => revealBelowStickies(rootRef.current));\n return () => cancelAnimationFrame(raf);\n }, [index]);\n const step = (d: -1 | 1) => list[index + d] && onGo(list[index + d]._key);\n return (\n <div\n ref={rootRef}\n className=\"flex flex-col gap-4\"\n style={{ scrollMarginTop: `calc(${STICKY_TOP} + 8px)` }}\n onKeyDown={(e) => e.key === \"Escape\" && !e.defaultPrevented && (e.preventDefault(), onBack())}\n >\n <div className=\"sticky z-[2] -my-1 bg-kit-surface py-1\" style={{ top: STICKY_TOP }}>\n <PathCrumbs\n size=\"sm\"\n label=\"Table path\"\n items={[\n { id: \"table\", label: label || \"Table\", icon: <IconTable />, onSelect: onBack },\n ...(group ? [{ id: \"group\", label: group.label || \"Untitled group\", icon: <IconFolder />, onSelect: onBack }] : []),\n { id: \"current\", label: title, icon: rows ? <IconList /> : <IconLayoutColumns /> },\n ]}\n />\n </div>\n <div ref={headRef} tabIndex={-1} className=\"flex items-start gap-2.5 outline-none\">\n <div className=\"min-w-0 flex-1\">\n <h2 className=\"truncate text-kit-base font-semibold leading-6 text-kit-fg\">{title}</h2>\n <p className=\"truncate text-kit-xs leading-4 text-kit-fg-3\">{`${rows ? \"Row\" : \"Column\"} ${index + 1} of ${list.length} in ${label || \"the table\"}`}</p>\n </div>\n <div className=\"-mr-1 flex shrink-0 items-center gap-0.5 pt-0.5\">\n <IconButton size=\"sm\" label={index > 0 ? `Previous ${noun}: ${titleAt(index - 1)}` : `First ${noun}`} disabled={index === 0} onClick={() => step(-1)}>\n <IconArrowUp stroke={1.5} />\n </IconButton>\n <IconButton size=\"sm\" label={index < list.length - 1 ? `Next ${noun}: ${titleAt(index + 1)}` : `Last ${noun}`} disabled={index >= list.length - 1} onClick={() => step(1)}>\n <IconArrowDown stroke={1.5} />\n </IconButton>\n </div>\n </div>\n {rows ? <RowFields ctx={ctx} row={t.rows[index]} /> : <ColumnFields ctx={ctx} col={t.columns[index]} />}\n </div>\n );\n}\n\n/* ── A row's cells: one field per column, the column's type decides the control ── */\nfunction RowFields({ ctx, row }: { ctx: Ctx; row: TableRow }) {\n const { t, edit, readOnly, options } = ctx;\n const write = (col: TableColumn, next: TableCell | undefined) => edit(mapRow(row._key, (x) => ({ ...x, cells: { ...x.cells, [col._key]: next ?? null } })));\n const named = hasName(t, row);\n return (\n <div className=\"flex flex-col gap-4\">\n {t.columns.map((col, ci) => (\n <CellField key={col._key} ctx={ctx} row={row} col={col} ci={ci} needsName={ci === 0 && !named} onWrite={(c) => write(col, c)} />\n ))}\n {readOnly || !offered(options).highlight ? null : (\n <SwitchRow label=\"Highlight this row\" checked={!!row.highlight} onChange={(v) => edit(mapRow(row._key, (x) => clean({ ...x, highlight: v })))} />\n )}\n </div>\n );\n}\n\n/**\n * One cell as a field. Per-cell exceptions are quiet: a ⋯ by the label (shown on hover or focus) offers \"Write words\n * instead\" for a typed column, a footnote and Clear. A footnote is written right here, under the cell (D52).\n */\nfunction CellField({ ctx, row, col, ci, needsName, onWrite }: { ctx: Ctx; row: TableRow; col: TableColumn; ci: number; needsName: boolean; onWrite: (c: TableCell | undefined) => void }) {\n const { t, set, resolveRef, readOnly, options } = ctx;\n const cell = row.cells[col._key];\n const declared = cellType(col, row, cell);\n const v = cellValue(cell);\n // words sitting in a Yes / No cell (older or imported data) are edited as words, never hidden\n const ty: TableColumnType = declared === \"boolean\" && !isEmptyCell(v) && toBool(v) == null ? \"text\" : declared;\n const colType = row.type ?? col.type;\n const asWords = ty === \"text\" && colType !== \"text\";\n const note = cellNote(cell);\n const fn = note ? (t.footnotes ?? []).find((f) => f._key === note) : undefined;\n const fi = fn ? (t.footnotes ?? []).indexOf(fn) : -1;\n const id = `${row._key}-${col._key}`;\n const name = col.label || `Column ${ci + 1}`;\n const canWords = !readOnly && colType !== \"text\" && colType !== \"reference\" && colType !== \"richtext-inline\";\n const canNote = !readOnly && offered(options).footnotes;\n const setWords = (on: boolean) => {\n const raw = cellText(col, row, cell, resolveRef);\n const type = on ? (\"text\" as const) : undefined;\n const value = coerce(raw, { type: type ?? colType, max: col.max });\n onWrite(type || note ? { value, ...(type ? { type } : {}), ...(note ? { note } : {}) } : value);\n };\n const addNote = () => {\n const [next, key] = linkNote(t, row._key, col._key);\n set(next);\n focusSoon(`[data-footnote=\"${key}\"]`);\n };\n const b = toBool(v);\n let control: React.ReactNode;\n if (ty === \"boolean\") {\n control = (\n // a <label> like V2; the switch is still named by its column (aria-labelledby beats the wrapping label)\n <label className=\"flex h-8 items-center gap-2.5\">\n <Switch id={id} size=\"sm\" aria-labelledby={`${id}-name`} aria-describedby={`${id}-says`} disabled={readOnly} checked={b === true} onCheckedChange={(x) => onWrite(withValue(cell, x))} />\n <span id={`${id}-says`} className={cn(\"text-kit-sm\", b == null ? \"text-kit-fg-4\" : \"text-kit-fg-2\")}>{b == null ? \"Not set\" : b ? boolLabels(col).yes : boolLabels(col).no}</span>\n </label>\n );\n } else if (ty === \"reference\") {\n control = (\n <div className=\"rounded-kit-md border border-kit-field-border bg-kit-field-bg\">\n <RefCell ctx={ctx} cell={cell} col={col} cellId={id} name={name} onWrite={onWrite} onMove={noop} />\n </div>\n );\n } else if (ty === \"link\") {\n const l: TableLink = isObjLike(v) && !(\"ref\" in v) ? (v as TableLink) : { label: typeof v === \"string\" ? v : \"\", href: \"\" };\n const inputCls = \"h-9 w-full min-w-0 bg-transparent px-2 text-kit-sm text-kit-fg outline-none placeholder:text-kit-fg-4\";\n // founder rule: a label and its link are one unit; the link row is the global link field (D57), as in V2\n control = (\n <FieldUnit>\n <FieldUnitRow>\n <input id={id} className={inputCls} readOnly={readOnly} defaultValue={l.label} key={`l${l.label}`} placeholder=\"Link text\" aria-label={`${name} link text`} onBlur={(e) => e.target.value !== l.label && onWrite(withValue(cell, { ...l, label: e.target.value }))} />\n </FieldUnitRow>\n <FieldUnitRow>\n <LinkField\n aria-label={`${name} link`}\n value={tableLinkValue(l)}\n readOnly={readOnly}\n className=\"border-0 bg-transparent shadow-none\"\n onChange={(n) => {\n const o = n && typeof n === \"object\" ? n : null;\n // BE TableLink keeps only { label, href, newTab?, rel? }; a script address is refused (the field names why)\n if (o && isScriptHref(hrefOf(o))) return;\n onWrite(withValue(cell, o ? tableLink(l.label || linkText(o), hrefOf(o), o.newTab, o.rel) : { label: l.label, href: \"\" }));\n }}\n />\n </FieldUnitRow>\n </FieldUnit>\n );\n } else {\n control = (\n <FormText\n id={id}\n readOnly={readOnly}\n autoFocus={needsName}\n value={isEmptyCell(v) ? \"\" : NUMERIC.includes(ty) ? String(toNumber(v) ?? cellText(col, row, cell)) : ty === \"richtext-inline\" ? String(v) : cellText(col, row, cell, resolveRef)}\n suffix={ty === \"number\" ? col.unit : ty === \"money\" ? col.currency ?? \"USD\" : ty === \"rating\" ? `/ ${col.max ?? 5}` : undefined}\n numeric={NUMERIC.includes(ty)}\n onCommit={(raw) => onWrite(typedCell(cell, col, row, raw))}\n />\n );\n }\n return (\n <div className=\"group/cell flex min-w-0 flex-col gap-1.5\">\n <div className=\"flex min-h-5 min-w-0 items-center gap-1.5\">\n <label id={`${id}-name`} htmlFor={id} className=\"truncate text-kit-sm font-medium text-kit-fg-2 transition-colors group-focus-within/cell:text-kit-fg\">{name}</label>\n {needsName ? <span className=\"shrink-0 text-kit-xs text-kit-warning-fg\">Needs a name</span> : null}\n <span className=\"flex-1\" />\n {canWords || canNote || (!readOnly && !isEmptyCell(v)) ? (\n <Menu>\n <MenuTrigger\n aria-label={`Options for ${name}`}\n className={cn(DOTS, \"-my-1 opacity-0 focus-visible:opacity-100 group-hover/cell:opacity-100 group-focus-within/cell:opacity-100 data-[popup-open]:opacity-100 [@media(pointer:coarse)]:opacity-100\")}\n >\n <IconDots className=\"size-3.5\" stroke={1.5} />\n </MenuTrigger>\n <MenuContent align=\"end\" className=\"min-w-52\">\n {canWords ? <MenuItem onClick={() => setWords(!asWords)}>{asWords ? `Use ${TYPE_UI[colType].label} like the column` : \"Write words instead\"}</MenuItem> : null}\n {canNote ? note ? <MenuItem onClick={() => set(unlinkNote(t, row._key, col._key))}>Remove footnote</MenuItem> : <MenuItem onClick={addNote}>Add a footnote</MenuItem> : null}\n {!isEmptyCell(v) ? (\n <>\n {canWords || canNote ? <MenuSeparator /> : null}\n <MenuItem onClick={() => onWrite(withValue(cell, null))}>Clear</MenuItem>\n </>\n ) : null}\n </MenuContent>\n </Menu>\n ) : null}\n </div>\n {control}\n {fn ? (\n <div className=\"flex items-center gap-2\">\n <span className=\"shrink-0 text-kit-xs text-kit-fg-3\">Footnote {fi + 1}</span>\n <Input\n size=\"sm\"\n data-footnote={fn._key}\n value={fn.text}\n readOnly={readOnly}\n maxLength={2000}\n placeholder=\"What the footnote says\"\n aria-label={`${name}: footnote ${fi + 1}`}\n onChange={(e) => set({ ...t, footnotes: (t.footnotes ?? []).map((x) => (x._key === fn._key ? { ...x, text: e.target.value } : x)) })}\n />\n </div>\n ) : null}\n </div>\n );\n}\n\nfunction SwitchRow({ label, checked, onChange, disabled }: { label: string; checked: boolean; onChange: (v: boolean) => void; disabled?: boolean }) {\n return (\n // a <label> like V2 (the panel walk reads it as the row's label); the switch's own aria-label names it, so it is read once\n <label className=\"flex min-h-8 items-center justify-between gap-2 text-kit-sm text-kit-fg-2\">\n {label}\n <Switch size=\"sm\" checked={checked} disabled={disabled} onCheckedChange={onChange} aria-label={label} />\n </label>\n );\n}\n\n/* ── A column: name, type and format. The type lives here, so every cell in it gets the right control. ── */\nfunction ColumnFields({ ctx, col }: { ctx: Ctx; col: TableColumn }) {\n const { t, set, lock, types, readOnly } = ctx;\n const id = React.useId();\n const patch = (p: Partial<TableColumn>) => set({ ...t, columns: t.columns.map((c) => (c._key === col._key ? withPatch(c, p) : c)) });\n return (\n <div className=\"flex flex-col gap-4\">\n <div className=\"flex flex-col gap-1.5\">\n <label htmlFor={id} className=\"text-kit-sm font-medium text-kit-fg-2\">Name</label>\n <Input id={id} size=\"sm\" autoFocus={!col.label && !lock} readOnly={lock} maxLength={300} value={col.label} placeholder=\"Column name\" onChange={(e) => patch({ label: e.target.value })} />\n {lock && !readOnly ? <span className=\"text-kit-2xs leading-4 text-kit-fg-3\">This table's columns are set by its developer.</span> : null}\n </div>\n <div className=\"flex flex-col gap-1.5\">\n <span className=\"text-kit-sm font-medium text-kit-fg-2\">Type</span>\n {lock ? (\n <span className=\"flex h-8 items-center gap-2 text-kit-sm text-kit-fg-2\"><TypeIcon type={col.type} className=\"text-kit-fg-2\" />{TYPE_UI[col.type].label}</span>\n ) : (\n <Menu>\n <MenuTrigger render={<Button size=\"sm\" variant=\"secondary\" className=\"justify-between\" leftIcon={<TypeIcon type={col.type} className=\"text-kit-fg-2\" />} rightIcon={<IconChevronDown stroke={1.5} />} />}>\n <span className=\"flex-1 text-left\">{TYPE_UI[col.type].label}</span>\n </MenuTrigger>\n <MenuContent align=\"start\" className=\"min-w-52\">\n <MenuRadioGroup value={col.type} onValueChange={(v) => ctx.edit((x) => retype(x, col._key, v as TableColumnType, ctx.resolveRef))}>\n {(types.includes(col.type) ? types : [...types, col.type]).map((ty) => (\n <MenuRadioItem key={ty} value={ty}>\n <span className=\"flex items-center gap-2\"><TypeIcon type={ty} className=\"text-kit-fg-2\" />{TYPE_UI[ty].label}</span>\n </MenuRadioItem>\n ))}\n </MenuRadioGroup>\n </MenuContent>\n </Menu>\n )}\n </div>\n <ColumnDetails col={col} onPatch={patch} compact={false} readOnly={lock} />\n </div>\n );\n}\n\nfunction FormText({ id, value, onCommit, suffix, numeric, readOnly, autoFocus }: { id: string; value: string; onCommit: (v: string) => void; suffix?: string; numeric?: boolean; readOnly?: boolean; autoFocus?: boolean }) {\n const [draft, setDraft] = React.useState(value);\n const [seen, setSeen] = React.useState(value);\n if (seen !== value) {\n setSeen(value);\n setDraft(value);\n }\n return (\n <div className=\"relative\">\n <Textarea\n id={id}\n rows={1}\n value={draft}\n readOnly={readOnly}\n autoFocus={autoFocus}\n maxLength={5000}\n inputMode={numeric ? \"decimal\" : undefined}\n onChange={(e) => setDraft(e.target.value)}\n onBlur={() => draft !== value && onCommit(draft)}\n className={cn(\"min-h-8 resize-none py-1.5\", suffix && \"pr-12\")}\n />\n {suffix ? <span className=\"pointer-events-none absolute right-2.5 top-1.5 text-kit-xs text-kit-fg-3\">{suffix}</span> : null}\n </div>\n );\n}\n\n/* ── Table settings (D52): only presentation and structure, only what this table kind offers ── */\nconst SEARCH: { value: TableJsonLdType; label: string }[] = [\n { value: \"none\", label: \"Nothing special\" },\n { value: \"ItemList\", label: \"A comparison\" },\n { value: \"Dataset\", label: \"A data report\" },\n { value: \"Offers\", label: \"A price list\" },\n];\nconst NO_COLUMN = \"__none\";\n/** Totals on: an empty totals row appears at the end of the list. Off: empty totals rows go, filled ones rejoin the body. */\nexport function setTotals(t: TableValue, on: boolean): TableValue {\n if (on) return t.rows.some((r) => r.footer) ? t : { ...t, rows: [...t.rows, { _key: tkey(\"r\"), cells: {}, footer: true }] };\n return { ...t, rows: t.rows.filter((r) => !r.footer || Object.values(r.cells).some((c) => !isEmptyCell(cellValue(c)))).map((r) => (r.footer ? clean({ ...r, footer: undefined }) : r)) };\n}\nfunction TableSettings({ ctx }: { ctx: Ctx }) {\n const { t, set, developer, options } = ctx;\n const can = offered(options);\n const d: NonNullable<TableValue[\"design\"]> = t.design ?? {};\n const sortable = t.columns.some((c) => c.sortable);\n const totals = t.rows.some((r) => r.footer);\n const phones = d.responsive ?? \"scroll\";\n const highlighted = t.columns.find((c) => c.highlight);\n const pickable = t.columns.filter((_, i) => !(t.headerColumn && i === 0));\n const jsonOffered = SEARCH.filter((x) => x.value === \"none\" || can.jsonLd.includes(x.value));\n const showJson = can.jsonLd.length > 0 || (!!t.jsonLd && t.jsonLd.type !== \"none\");\n const anything = can.headers || can.totals || can.phones.length || can.highlight || can.sort || can.search || showJson || developer;\n if (!anything) return null;\n const design = (p: Partial<NonNullable<TableValue[\"design\"]>>) => set({ ...t, design: withPatch(d, p) });\n const summary = [\n can.phones.length ? `${PHONES.find((p) => p.value === phones)?.label ?? \"Scroll\"} on phones` : \"\",\n can.highlight && highlighted ? `${highlighted.label || \"A column\"} highlighted` : \"\",\n can.totals && totals ? \"Totals row\" : \"\",\n ]\n .filter(Boolean)\n .join(\" · \");\n const pick = (label: string, node: React.ReactNode) => (\n <div className=\"flex flex-col gap-1.5\">\n <span className=\"text-kit-sm font-medium text-kit-fg-2\">{label}</span>\n {node}\n </div>\n );\n return (\n // before:hidden: the table's own group line is the only line; the section's focus edge would draw a second one beside it\n <FieldSection title=\"Table settings\" defaultOpen={false} summary={summary} className=\"before:hidden\">\n {can.headers ? (\n <div className=\"flex flex-col\">\n <SwitchRow label=\"Show column names\" checked={t.headerRow} onChange={(v) => set({ ...t, headerRow: v })} />\n <SwitchRow label=\"First column names each row\" checked={t.headerColumn} onChange={(v) => set({ ...t, headerColumn: v })} />\n {can.totals ? <SwitchRow label=\"Totals row\" checked={totals} onChange={(v) => set(setTotals(t, v))} /> : null}\n </div>\n ) : can.totals ? (\n <SwitchRow label=\"Totals row\" checked={totals} onChange={(v) => set(setTotals(t, v))} />\n ) : null}\n {can.highlight\n ? pick(\n \"Highlight column\",\n <Select\n aria-label=\"Highlight column\"\n value={highlighted?._key ?? NO_COLUMN}\n onValueChange={(k) => set({ ...t, columns: t.columns.map((c) => withPatch(c, { highlight: c._key === k ? true : undefined })) })}\n options={[{ value: NO_COLUMN, label: \"None\" }, ...pickable.map((c) => ({ value: c._key, label: c.label || \"Untitled column\" }))]}\n />,\n )\n : null}\n {can.phones.length ? pick(\"On phones\", <ChoiceSwitch aria-label=\"On phones\" value={phones} onChange={(responsive) => design({ responsive })} items={can.phones} />) : null}\n {can.sort || can.search ? (\n <div className=\"flex flex-col\">\n {can.sort ? (\n <SwitchRow label=\"Visitors can sort columns\" checked={sortable} onChange={(v) => set({ ...t, columns: t.columns.map((c, i) => withPatch(c, { sortable: v && !(t.headerColumn && i === 0) ? true : undefined })) })} />\n ) : null}\n {can.search ? <SwitchRow label=\"Visitors can search rows\" checked={!!t.filterable} onChange={(v) => set(dropUndefined({ ...t, filterable: v || undefined }))} /> : null}\n </div>\n ) : null}\n {showJson ? (\n <>\n {pick(\n \"Help search engines read this as\",\n <ChoiceSwitch\n aria-label=\"Help search engines read this as\"\n value={t.jsonLd?.type ?? \"none\"}\n onChange={(type) => set(dropUndefined({ ...t, jsonLd: type === \"none\" ? undefined : { ...t.jsonLd, type, ...(type === \"ItemList\" ? { axis: t.jsonLd?.axis ?? \"rows\" } : {}) } }))}\n items={jsonOffered}\n />,\n )}\n {t.jsonLd?.type === \"ItemList\" && developer\n ? pick(\n \"The things compared are the\",\n <ChoiceSwitch\n aria-label=\"The things compared are the\"\n value={t.jsonLd.axis ?? \"rows\"}\n onChange={(axis) => set({ ...t, jsonLd: { ...t.jsonLd!, axis } })}\n items={[\n { value: \"rows\", label: \"Rows\" },\n { value: \"columns\", label: \"Columns\" },\n ]}\n />,\n )\n : null}\n </>\n ) : null}\n {developer ? (\n <div className=\"flex flex-col\">\n <SwitchRow label=\"Hide the title on the page\" checked={!!d.hideCaption} onChange={(v) => design({ hideCaption: v || undefined })} />\n {can.sticky ? <SwitchRow label=\"Keep column names in view\" checked={!!d.sticky} onChange={(v) => design({ sticky: v || undefined })} /> : null}\n <SwitchRow label=\"Striped rows\" checked={!!d.striped} onChange={(v) => design({ striped: v || undefined })} />\n <SwitchRow label=\"Compact\" checked={d.density === \"compact\"} onChange={(v) => design({ density: v ? \"compact\" : undefined })} />\n </div>\n ) : null}\n </FieldSection>\n );\n}\nconst dropUndefined = <T extends object>(o: T): T => Object.fromEntries(Object.entries(o).filter(([, v]) => v !== undefined)) as T;\n"],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ import type { TableLink } from "../../schema/table";
2
+ export declare const LINK_RELS: {
3
+ value: NonNullable<TableLink["rel"]>;
4
+ label: string;
5
+ }[];
6
+ /** BE link-value.ts isScriptHref: what no link may hold. */
7
+ export declare const isScriptHref: (href: string) => boolean;
8
+ export declare const hrefProblem: (href: string) => "Script links (javascript:, data:, vbscript:) aren't allowed." | null;
9
+ /** The stored link with only the keys it uses: `newTab` only when on, `rel` only when not the default. */
10
+ export declare function tableLink(label: string, href: string, newTab?: boolean, rel?: TableLink["rel"]): TableLink;
11
+ /** Address + options, as one popover body (the spreadsheet's link button) or inline (a row's link cell). */
12
+ export declare function LinkAddressEditor({ link, onSave, onCancel, autoFocus, }: {
13
+ link: TableLink;
14
+ onSave: (next: TableLink) => void;
15
+ onCancel?: () => void;
16
+ autoFocus?: boolean;
17
+ }): import("react/jsx-runtime").JSX.Element;
18
+ /** The small link button beside a link cell's words: opens the address editor. */
19
+ export declare function LinkAddressButton({ link, onSave, readOnly, className }: {
20
+ link: TableLink;
21
+ onSave: (l: TableLink) => void;
22
+ readOnly?: boolean;
23
+ className?: string;
24
+ }): import("react/jsx-runtime").JSX.Element | null;
@@ -0,0 +1,180 @@
1
+ import { cn } from "../../lib/cn.js";
2
+ import { Button } from "../../ui/button.js";
3
+ import { Switch } from "../../ui/controls.js";
4
+ import { Popover, PopoverContent, PopoverTrigger } from "../../ui/overlay.js";
5
+ import { Input } from "../../ui/input.js";
6
+ import { Select } from "../../ui/select.js";
7
+ import * as React from "react";
8
+ import { IconLink } from "@tabler/icons-react";
9
+ import { jsx, jsxs } from "react/jsx-runtime";
10
+ //#region src/kit/controls/table/table-link.tsx
11
+ /**
12
+ * A link cell's address (BE TableLink `{ label, href, newTab?, rel? }`): the address, "Open in a new tab" and the
13
+ * relationship search engines read. V2 opened its global link panel (controls/link.tsx LinkPopoverBody); that panel is the
14
+ * link lane's, so the table carries this one, writing the same four keys the backend takes and nothing else.
15
+ *
16
+ * Refusals are named before anything is written: a script address (javascript:, data:, vbscript:) is refused here
17
+ * exactly as the backend refuses it (`link_value_invalid`).
18
+ */
19
+ var LINK_RELS = [
20
+ {
21
+ value: "follow",
22
+ label: "Follow (default)"
23
+ },
24
+ {
25
+ value: "nofollow",
26
+ label: "Don't vouch for it (nofollow)"
27
+ },
28
+ {
29
+ value: "sponsored",
30
+ label: "Paid or sponsored"
31
+ },
32
+ {
33
+ value: "ugc",
34
+ label: "Written by visitors"
35
+ }
36
+ ];
37
+ /** BE link-value.ts isScriptHref: what no link may hold. */
38
+ var isScriptHref = (href) => /^\s*(javascript|data|vbscript):/i.test(href.replace(/[\p{Cc}\s]+/gu, ""));
39
+ var hrefProblem = (href) => isScriptHref(href) ? "Script links (javascript:, data:, vbscript:) aren't allowed." : null;
40
+ /** The stored link with only the keys it uses: `newTab` only when on, `rel` only when not the default. */
41
+ function tableLink(label, href, newTab, rel) {
42
+ return {
43
+ label,
44
+ href,
45
+ ...newTab ? { newTab: true } : {},
46
+ ...rel && rel !== "follow" ? { rel } : {}
47
+ };
48
+ }
49
+ /** Address + options, as one popover body (the spreadsheet's link button) or inline (a row's link cell). */
50
+ function LinkAddressEditor({ link, onSave, onCancel, autoFocus }) {
51
+ const [href, setHref] = React.useState(link.href);
52
+ const [newTab, setNewTab] = React.useState(!!link.newTab);
53
+ const [rel, setRel] = React.useState(link.rel ?? "follow");
54
+ const id = React.useId();
55
+ const problem = hrefProblem(href);
56
+ const save = () => !problem && onSave(tableLink(link.label, href.trim(), newTab, rel));
57
+ return /* @__PURE__ */ jsxs("div", {
58
+ className: "flex flex-col gap-3",
59
+ children: [
60
+ /* @__PURE__ */ jsxs("div", {
61
+ className: "flex flex-col gap-1.5",
62
+ children: [
63
+ /* @__PURE__ */ jsx("label", {
64
+ htmlFor: `${id}-href`,
65
+ className: "text-kit-xs font-medium text-kit-fg-2",
66
+ children: "Address"
67
+ }),
68
+ /* @__PURE__ */ jsx(Input, {
69
+ id: `${id}-href`,
70
+ size: "sm",
71
+ autoFocus,
72
+ value: href,
73
+ placeholder: "https://… or /pricing",
74
+ "aria-invalid": problem ? true : void 0,
75
+ "aria-describedby": problem ? `${id}-problem` : void 0,
76
+ onChange: (e) => setHref(e.target.value),
77
+ onKeyDown: (e) => {
78
+ if (e.key === "Enter") {
79
+ e.preventDefault();
80
+ save();
81
+ }
82
+ }
83
+ }),
84
+ problem ? /* @__PURE__ */ jsx("p", {
85
+ id: `${id}-problem`,
86
+ role: "alert",
87
+ className: "text-kit-xs text-kit-danger-fg",
88
+ children: problem
89
+ }) : null
90
+ ]
91
+ }),
92
+ /* @__PURE__ */ jsxs("div", {
93
+ className: "flex min-h-8 items-center justify-between gap-2 text-kit-sm text-kit-fg-2",
94
+ children: [/* @__PURE__ */ jsx("span", {
95
+ "aria-hidden": true,
96
+ children: "Open in a new tab"
97
+ }), /* @__PURE__ */ jsx(Switch, {
98
+ size: "sm",
99
+ checked: newTab,
100
+ onCheckedChange: setNewTab,
101
+ "aria-label": "Open in a new tab"
102
+ })]
103
+ }),
104
+ /* @__PURE__ */ jsxs("div", {
105
+ className: "flex flex-col gap-1.5",
106
+ children: [/* @__PURE__ */ jsx("span", {
107
+ id: `${id}-rel`,
108
+ className: "text-kit-xs font-medium text-kit-fg-2",
109
+ children: "Search engines"
110
+ }), /* @__PURE__ */ jsx(Select, {
111
+ "aria-label": "Search engines",
112
+ size: "sm",
113
+ value: rel,
114
+ onValueChange: (v) => setRel(v),
115
+ options: LINK_RELS
116
+ })]
117
+ }),
118
+ /* @__PURE__ */ jsxs("div", {
119
+ className: "flex items-center justify-end gap-1.5",
120
+ children: [
121
+ link.href ? /* @__PURE__ */ jsx(Button, {
122
+ size: "sm",
123
+ variant: "ghost",
124
+ className: "mr-auto text-kit-fg-2",
125
+ onClick: () => onSave(tableLink(link.label, "")),
126
+ children: "Remove link"
127
+ }) : null,
128
+ onCancel ? /* @__PURE__ */ jsx(Button, {
129
+ size: "sm",
130
+ variant: "ghost",
131
+ onClick: onCancel,
132
+ children: "Cancel"
133
+ }) : null,
134
+ /* @__PURE__ */ jsx(Button, {
135
+ size: "sm",
136
+ variant: "primary",
137
+ disabled: !!problem,
138
+ onClick: save,
139
+ children: "Save"
140
+ })
141
+ ]
142
+ })
143
+ ]
144
+ });
145
+ }
146
+ /** The small link button beside a link cell's words: opens the address editor. */
147
+ function LinkAddressButton({ link, onSave, readOnly, className }) {
148
+ const [open, setOpen] = React.useState(false);
149
+ if (readOnly && !link.href) return null;
150
+ return /* @__PURE__ */ jsxs(Popover, {
151
+ open,
152
+ onOpenChange: setOpen,
153
+ children: [/* @__PURE__ */ jsx(PopoverTrigger, {
154
+ disabled: readOnly,
155
+ tabIndex: -1,
156
+ "aria-label": link.href ? `Link: ${link.href}` : "Add a link address",
157
+ className: cn("flex size-5 shrink-0 items-center justify-center rounded-kit-sm text-kit-fg-4 outline-none hover:bg-kit-hover hover:text-kit-fg", link.href && "text-kit-fg-2", className),
158
+ children: /* @__PURE__ */ jsx(IconLink, {
159
+ className: "size-3.5",
160
+ stroke: 1.75
161
+ })
162
+ }), /* @__PURE__ */ jsx(PopoverContent, {
163
+ align: "end",
164
+ className: "w-[320px] p-3",
165
+ children: /* @__PURE__ */ jsx(LinkAddressEditor, {
166
+ link,
167
+ autoFocus: true,
168
+ onCancel: () => setOpen(false),
169
+ onSave: (l) => {
170
+ onSave(l);
171
+ setOpen(false);
172
+ }
173
+ })
174
+ })]
175
+ });
176
+ }
177
+ //#endregion
178
+ export { LinkAddressButton, isScriptHref, tableLink };
179
+
180
+ //# sourceMappingURL=table-link.js.map