@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":"component-card.js","names":[],"sources":["../../../src/kit/controls/rich-text/component-card.tsx"],"sourcesContent":["/**\n * The embedded component card (V2 features/blocks/instance-card.tsx + instance-ui.tsx StateChip / MissingNote / dialogs),\n * drawn when the host can look the component up (KitServices.useComponentInfo, component-services.ts):\n *\n * ┌ [icon] Inline CTA 🔗 2 places · ● Edited here ⋯ ┐ 36px strip\n * ├ ⚠ The original \"Product card\" was deleted. … [Keep as a separate copy] [Remove] ┤ missing only\n * │ the component itself, drawn live with this place's values (KitServices.ComponentPreview), else │\n * │ its snapshot where this place shows exactly that, else its fields; at most 240px, faded │\n * └──────────────────────────────────────────────────────────────────────────────┘\n *\n * Every state comes from the lookup or the stored copy: \"Missing component\" only when the library says there is no\n * such component, the count only when the host measured it, \"Edited here\" only for overrides of fields the component\n * has, \"Detached\" for a separate copy (V2 instances.ts `detached`), and \"Shared version changed\" only when the\n * component's current version (`info.publishedAt`) differs from the one the copy was taken from.\n *\n * A separate copy is made through the host (`copyComponent`, which answers what readers see now) and written as ONE\n * undo step (V2 detachNow: \"Make a separate copy\"); \"Use shared version again\" (V2 RelinkDialog) keeps this place's\n * edits as overrides or drops them, also one step. A host without `copyComponent` offers neither.\n *\n * Deviation from V2: V2 shows \"Shared version changed\" on a LINKED instance after a breaking release (instances.ts\n * `pending`). A linked instance here follows every publish of its component, so there is nothing to review; the\n * notice is drawn on a separate copy instead, whose source moved on, and it opens \"Use shared version again\".\n */\nimport * as React from \"react\";\nimport {\n IconAlertTriangle, IconArrowDown, IconArrowUp, IconComponents, IconCopy, IconDots, IconLayoutNavbarCollapse, IconLayoutNavbarExpand, IconLink,\n IconRefresh, IconTrash, IconUnlink,\n} from \"@tabler/icons-react\";\nimport { cn } from \"../../lib/cn\";\nimport { useKitServices, type KitServices } from \"../../context\";\nimport { Button, IconButton } from \"../../ui/button\";\nimport { Menu, MenuContent, MenuItem, MenuSeparator, MenuTrigger, Modal, ModalBody, ModalContent, ModalFooter, ModalHeader, Tooltip } from \"../../ui/overlay\";\nimport type { KitComponentField, KitComponentPreviewProps } from \"../component-services\";\nimport type { ComponentModel, IslandEl } from \"./dom\";\nimport type { IslandCtx } from \"./blocks\";\n\n/** V2 NARROW: at or under this card width the scope chip shows its icon only. */\nconst NARROW = 480;\n/** V2 PREVIEW_CAP: the preview at rest is at most this tall, faded when its content is taller. */\nconst PREVIEW_H = 240;\n\nconst placesShort = (n: number) => `${n} ${n === 1 ? \"place\" : \"places\"}`;\n\nfunction useWidth(ref: React.RefObject<HTMLElement | null>) {\n const [w, setW] = React.useState(0);\n React.useLayoutEffect(() => {\n const el = ref.current;\n if (!el) return;\n setW(el.clientWidth);\n if (typeof ResizeObserver === \"undefined\") return;\n const ro = new ResizeObserver(() => setW(el.clientWidth));\n ro.observe(el);\n return () => ro.disconnect();\n }, [ref]);\n return w;\n}\n\n/** A stored value as one line of reading text, or null when it has none (lists, empty values, flags). */\nfunction readable(v: unknown): string | null {\n if (typeof v === \"number\") return String(v);\n if (typeof v === \"string\") {\n const t = v.replace(/<[^>]+>/g, \" \").replace(/&nbsp;/g, \" \").replace(/\\s+/g, \" \").trim();\n return t || null;\n }\n if (v && typeof v === \"object\" && !Array.isArray(v)) {\n const o = v as { label?: unknown; text?: unknown; title?: unknown; href?: unknown };\n return readable(o.label ?? o.text ?? o.title ?? o.href);\n }\n return null;\n}\n\nconst parseObj = (s: string | undefined): Record<string, unknown> => {\n try {\n const v = s ? (JSON.parse(s) as unknown) : {};\n return v && typeof v === \"object\" && !Array.isArray(v) ? (v as Record<string, unknown>) : {};\n } catch {\n return {};\n }\n};\n/** True when `a` is a later instant than `b`; false when either is absent or unreadable (never a made-up \"changed\"). */\nconst laterThan = (a: string | null | undefined, b: string | undefined) => {\n const x = a ? Date.parse(a) : NaN;\n const y = b ? Date.parse(b) : NaN;\n return Number.isFinite(x) && Number.isFinite(y) && x > y;\n};\nconst same = (a: unknown, b: unknown) => a === b || JSON.stringify(a) === JSON.stringify(b);\n\ntype UseComponentInfo = NonNullable<KitServices[\"useComponentInfo\"]>;\ntype SetComponent = (patch: (m: ComponentModel) => ComponentModel, label: string, record?: boolean) => void;\n\nexport function ComponentCard({\n m, el, ctx, use, overrides, set,\n}: { m: ComponentModel; el: IslandEl; ctx: IslandCtx; use: UseComponentInfo; overrides: Record<string, unknown>; set: SetComponent }) {\n const { copyComponent, toast, ComponentPreview } = useKitServices();\n const { info, loading, error } = use(m.ref ?? \"\");\n const card = React.useRef<HTMLDivElement>(null);\n const width = useWidth(card);\n const narrow = !!width && width <= NARROW;\n const [collapsed, setCollapsed] = React.useState(false);\n const [dialog, setDialog] = React.useState<null | \"detach\" | \"relink\">(null);\n const [busy, setBusy] = React.useState(false);\n const detached = !!m.detached;\n const own = React.useMemo(() => parseObj(m.props), [m.props]);\n const missing = !m.ref || !!info?.missing;\n const name = info && !info.missing ? info.name : m.name || info?.name || \"Component\";\n const fieldKeys = new Set((info?.fields ?? []).map((f) => f.key));\n const edited = missing || detached ? 0 : Object.keys(overrides).filter((k) => fieldKeys.has(k)).length;\n const places = info?.places;\n const known = !!info || missing;\n // compared as instants, not strings: the same publish can be spelled two ways (precision, offset)\n const changed = detached && !missing && laterThan(info?.publishedAt, m.sourcePublishedAt);\n const state = detached ? `Detached${changed ? \", Shared version changed\" : \"\"}` : missing ? \"Missing component\" : edited ? \"Edited here\" : \"Shared\";\n const label = `${name} component${known ? `, ${state}` : \"\"}${known && !missing && !detached && places != null ? `, ${placesShort(places)}` : \"\"}`;\n const rows = detached ? copyRows(own, info?.fields, m.variant) : previewRows(missing, info?.fields, overrides, m.variant);\n // the picture is the component with its own values (the host's snapshot): drawn only where this place shows exactly\n // that. A separate copy, an edited place or another layout would be shown content it doesn't have, so those list\n // their values instead.\n const image = missing || detached || edited || m.variant ? null : info?.image || null;\n // V2 draws the component itself in the card, with this place's values (linked, edited or a separate copy): the host's\n // live renderer where it has one. Another layout lists its values (the renderer draws the component's own layout).\n const liveProps = React.useMemo(\n () => (detached ? own : { ...Object.fromEntries((info?.fields ?? []).flatMap((f) => (f.value !== undefined ? [[f.key, f.value]] : []))), ...overrides }),\n [detached, own, info?.fields, overrides],\n );\n const live = ComponentPreview && m.ref && info && !missing && !m.variant ? { Preview: ComponentPreview, ref: m.ref } : null;\n const preview = live ? (\n <LivePreview Preview={live.Preview} componentId={live.ref} title={name} props={liveProps} rows={rows} />\n ) : image || rows.length ? (\n <PreviewWindow image={image} rows={rows} />\n ) : null;\n const canCopy = !!copyComponent && !!m.ref && !ctx.readOnly;\n\n /**\n * The change as ONE undo step (IslandCtx.step: the dock's toolbar Undo, this toast's Undo and ⌘Z in the body are one\n * undo), and the toast that offers it back.\n */\n const commit = (patch: (cur: ComponentModel) => ComponentModel, label: string, title: string, description: string) => {\n const before = el.__rt as ComponentModel | undefined;\n const undo = ctx.step\n ? ctx.step(label, () => (set(patch, label, false), el), before)\n : (set(patch, label), () => (ctx.undo?.() ? (true as const) : \"Changes made after it come first. Press ⌘Z to undo them.\"));\n toast?.(title, {\n description,\n action: {\n label: \"Undo\",\n onClick: () => {\n const r = undo();\n if (r !== true) ctx.notify(\"Nothing was undone\", r);\n },\n },\n });\n };\n\n /** V2 detachNow: this place keeps what readers see now and stops following the component, as one undo step. */\n const detach = async (title: string) => {\n if (!copyComponent || !m.ref || busy) return;\n setBusy(true);\n try {\n const copy = await copyComponent(m.ref, { overrides, ...(m.variant ? { variant: m.variant } : {}) });\n commit(\n (cur) => ({\n id: cur.id,\n ref: cur.ref,\n ...(cur.name !== undefined || info?.name ? { name: cur.name ?? info?.name } : {}),\n ...(cur.variant !== undefined ? { variant: cur.variant } : {}),\n detached: true,\n props: JSON.stringify(copy.props),\n ...(copy.blocks !== undefined ? { blocks: copy.blocks } : {}),\n ...(copy.sourcePublishedAt ? { sourcePublishedAt: copy.sourcePublishedAt } : {}),\n ...(cur.extra !== undefined ? { extra: cur.extra } : {}),\n }),\n \"Make a separate copy\",\n title,\n \"It keeps its content and no longer follows the shared component.\",\n );\n } catch (e) {\n ctx.notify(\"This place couldn't keep its own copy\", e instanceof Error ? e.message : String(e));\n } finally {\n setBusy(false);\n }\n };\n\n /** V2 instanceOps.relink: keep = what differs from the component becomes overrides; reset = the component's content. */\n const relink = (mode: \"keep\" | \"reset\") => {\n const kept = copyEdits(m, own, info?.fields);\n const n = Object.keys(kept).length;\n commit(\n (cur) => ({\n id: cur.id,\n ref: cur.ref,\n ...(cur.name !== undefined ? { name: info?.name ?? cur.name } : {}),\n ...(mode === \"keep\" && Object.keys(kept).length ? { overrides: JSON.stringify(kept) } : {}),\n ...(mode === \"keep\" && cur.variant !== undefined ? { variant: cur.variant } : {}),\n ...(cur.extra !== undefined ? { extra: cur.extra } : {}),\n }),\n \"Use shared version again\",\n `${name} is shared again`,\n mode === \"keep\" && n ? `${n} ${n === 1 ? \"edit\" : \"edits\"} kept here.` : \"It shows the component's content.\",\n );\n };\n\n return (\n <div\n ref={card}\n role=\"group\"\n aria-label={label}\n aria-roledescription=\"component\"\n aria-busy={busy || undefined}\n data-instance-card=\"\"\n data-rt-isolate=\"\"\n data-state={detached ? \"detached\" : missing ? \"missing\" : known ? \"linked\" : undefined}\n className={cn(\n \"group/inst relative rounded-kit-lg border bg-kit-control-bg text-left transition-colors duration-150 motion-reduce:transition-none\",\n missing && !detached ? \"border-kit-warning-line\" : \"border-kit-line hover:border-kit-line-strong\",\n )}\n >\n <div className=\"flex h-9 select-none items-center gap-1.5 pl-1 pr-1\">\n <span className=\"w-1\" />\n <IconComponents size={15} stroke={1.5} className=\"shrink-0 text-kit-fg-2\" aria-hidden />\n <span className=\"min-w-0 shrink truncate text-kit-sm font-medium text-kit-fg\">{name}</span>\n {detached ? (\n <>\n <DetachedChip name={name} compact={narrow} />\n {changed ? <ChangedChip name={name} compact={narrow} onReview={canCopy ? () => setDialog(\"relink\") : undefined} /> : null}\n </>\n ) : known ? (\n <StateChip missing={missing} places={places} edited={edited} compact={narrow} />\n ) : null}\n <span className=\"flex-1\" />\n {ctx.readOnly ? null : (\n <Menu>\n <MenuTrigger\n render={\n <IconButton size=\"sm\" className=\"shrink-0\" label={`${name} actions`}>\n <IconDots stroke={1.5} />\n </IconButton>\n }\n />\n <MenuContent align=\"end\" className=\"w-56\">\n {preview ? (\n <MenuItem icon={collapsed ? <IconLayoutNavbarExpand stroke={1.5} /> : <IconLayoutNavbarCollapse stroke={1.5} />} onClick={() => setCollapsed(!collapsed)}>\n {collapsed ? \"Show preview\" : \"Collapse preview\"}\n </MenuItem>\n ) : null}\n {canCopy && info && !missing && !detached ? (\n <MenuItem icon={<IconUnlink stroke={1.5} />} disabled={busy} onClick={() => setDialog(\"detach\")}>\n Make a separate copy\n </MenuItem>\n ) : null}\n {canCopy && missing && !detached ? (\n <MenuItem icon={<IconUnlink stroke={1.5} />} disabled={busy} onClick={() => void detach(\"Kept as a separate copy\")}>\n Keep as a separate copy\n </MenuItem>\n ) : null}\n {canCopy && info && !missing && detached ? (\n <MenuItem icon={<IconLink stroke={1.5} />} onClick={() => setDialog(\"relink\")}>\n Use shared version again\n </MenuItem>\n ) : null}\n {ctx.duplicate ? (\n <MenuItem icon={<IconCopy stroke={1.5} />} onClick={() => ctx.duplicate?.(el)}>\n Duplicate\n </MenuItem>\n ) : null}\n {ctx.move ? (\n <>\n <MenuItem icon={<IconArrowUp stroke={1.5} />} disabled={!el.previousElementSibling} onClick={() => ctx.move?.(el, -1)}>\n Move up\n </MenuItem>\n <MenuItem icon={<IconArrowDown stroke={1.5} />} disabled={!el.nextElementSibling} onClick={() => ctx.move?.(el, 1)}>\n Move down\n </MenuItem>\n </>\n ) : null}\n <MenuSeparator />\n <MenuItem danger icon={<IconTrash stroke={1.5} />} onClick={() => ctx.remove(el)}>\n Remove\n </MenuItem>\n </MenuContent>\n </Menu>\n )}\n </div>\n {error ? (\n <div role=\"alert\" className=\"flex items-center gap-2 border-t border-kit-line-subtle px-3 py-2.5 text-kit-sm text-kit-fg-2\">\n <IconAlertTriangle className=\"size-4 shrink-0 text-kit-warning-fg\" stroke={1.5} aria-hidden />\n <span className=\"min-w-0 flex-1\">{error}</span>\n </div>\n ) : null}\n {missing && !detached && !loading ? (\n <div className=\"flex flex-wrap items-center gap-2 border-t border-kit-line-subtle px-3 py-2.5 text-kit-sm\" role=\"note\">\n <IconAlertTriangle className=\"size-4 shrink-0 text-kit-warning-fg\" stroke={1.5} aria-hidden />\n <span className=\"min-w-0 flex-1 text-kit-fg-2\">The original “{name}” was deleted. Readers see nothing in this place.</span>\n {ctx.readOnly ? null : (\n <span className=\"flex shrink-0 items-center gap-1.5\">\n {canCopy ? (\n <Button size=\"xs\" variant=\"secondary\" loading={busy} onClick={() => void detach(\"Kept as a separate copy\")}>\n Keep as a separate copy\n </Button>\n ) : null}\n <Button size=\"xs\" variant=\"danger-ghost\" onClick={() => ctx.remove(el)}>\n Remove\n </Button>\n </span>\n )}\n </div>\n ) : null}\n {collapsed ? null : preview}\n {canCopy ? (\n <>\n <DetachDialog\n open={dialog === \"detach\"}\n name={name}\n places={places}\n onClose={() => setDialog(null)}\n onConfirm={() => {\n setDialog(null);\n void detach(`Separate copy of ${name}`);\n }}\n />\n <RelinkDialog\n open={dialog === \"relink\"}\n name={name}\n kept={Object.keys(copyEdits(m, own, info?.fields)).length}\n onClose={() => setDialog(null)}\n onConfirm={(mode) => {\n setDialog(null);\n relink(mode);\n }}\n />\n </>\n ) : null}\n </div>\n );\n}\n\n/**\n * A separate copy's EDITS, which it keeps as overrides when it follows the component again: its values that differ from\n * the snapshot taken when the copy was made, never from the component as it is now (a republish since is not an edit\n * of this place; the owner saw \"2 fields stay as they are\" with nothing edited).\n *\n * A copy made here stores that snapshot: its values (`props`) with the blocks drawn from them (`blocks`), and no\n * surface edits a copy's values afterwards, so it has no edits. Copy markup from V2 stores no snapshot (no `blocks`):\n * its values that differ from the component's, on fields the component has (V2 instanceOps.relink).\n */\nfunction copyEdits(m: ComponentModel, own: Record<string, unknown>, fields: KitComponentField[] | undefined): Record<string, unknown> {\n const out: Record<string, unknown> = {};\n if (m.blocks !== undefined) return out;\n for (const f of fields ?? []) if (f.key in own && !same(own[f.key], f.value)) out[f.key] = own[f.key];\n return out;\n}\n\n/** V2 StateChip: 13px, neutral, not a pill; the missing chip is the one tinted state. */\nfunction StateChip({ missing, places, edited, compact }: { missing: boolean; places?: number; edited: number; compact: boolean }) {\n const base = CHIP;\n if (missing) {\n return (\n <Tooltip content=\"The component was deleted. Readers see nothing in this place.\">\n <span className={cn(base, \"bg-kit-warning-soft px-1.5 text-kit-warning-fg\")}>\n <IconAlertTriangle className=\"size-3.5 shrink-0\" stroke={1.5} aria-hidden />\n {compact ? <span className=\"sr-only\">Missing component</span> : \"Missing component\"}\n </span>\n </Tooltip>\n );\n }\n const count = places ? placesShort(places) : null;\n const tip = `Changes here apply only to this place. Edit the component to change ${places && places > 1 ? `all ${places}` : \"it everywhere\"}.${\n edited ? ` ${edited} ${edited === 1 ? \"field\" : \"fields\"} edited here.` : \"\"\n }`;\n return (\n <Tooltip content={tip}>\n <span className={cn(base, \"px-1 text-kit-fg-2\")} tabIndex={-1}>\n <IconLink className=\"size-3.5 shrink-0\" stroke={1.5} aria-hidden />\n {compact ? <span className=\"sr-only\">Shared{count ? `, ${count}` : \"\"}</span> : count ?? \"Shared\"}\n {!compact && count ? <span className=\"sr-only\">, shared</span> : null}\n {edited ? (\n <>\n <span className=\"ml-1 size-1.5 shrink-0 rounded-full bg-kit-accent\" aria-hidden />\n {compact ? <span className=\"sr-only\">, edited here</span> : <span>Edited here</span>}\n </>\n ) : null}\n </span>\n </Tooltip>\n );\n}\n\nconst CHIP = \"inline-flex h-6 shrink-0 items-center gap-1 rounded-kit-md text-[13px] leading-none whitespace-nowrap\";\n\n/** V2 StateChip, detached: fg-3, the unlink glyph. */\nfunction DetachedChip({ name, compact }: { name: string; compact: boolean }) {\n return (\n <Tooltip content={`A separate copy. Changes to ${name} don't reach it.`}>\n <span className={cn(CHIP, \"px-1 text-kit-fg-3\")} tabIndex={-1}>\n <IconUnlink className=\"size-3.5 shrink-0\" stroke={1.5} aria-hidden />\n {compact ? <span className=\"sr-only\">Detached</span> : \"Detached\"}\n </span>\n </Tooltip>\n );\n}\n\n/** V2 StateChip, update: a quiet button that opens the way back to the shared version. */\nfunction ChangedChip({ name, compact, onReview }: { name: string; compact: boolean; onReview?: () => void }) {\n return (\n <Tooltip content={`${name} changed since this copy was made.`}>\n <button\n type=\"button\"\n onClick={onReview}\n disabled={!onReview}\n className={cn(CHIP, \"px-1 text-kit-fg-2 hover:bg-kit-hover hover:text-kit-fg disabled:hover:bg-transparent\")}\n >\n <IconRefresh className=\"size-3.5 shrink-0\" stroke={1.5} aria-hidden />\n {compact ? <span className=\"sr-only\">Shared version changed</span> : \"Shared version changed\"}\n </button>\n </Tooltip>\n );\n}\n\n/** V2 useInstanceDialogs \"detach\": confirm before this place stops following the component. */\nfunction DetachDialog({ open, name, places, onClose, onConfirm }: { open: boolean; name: string; places?: number; onClose: () => void; onConfirm: () => void }) {\n const others = places != null ? places - 1 : null;\n return (\n <Modal open={open} onOpenChange={(o) => !o && onClose()}>\n <ModalContent size=\"sm\">\n <ModalHeader title={`Make a separate copy of ${name}?`} description=\"This place keeps its current content and stops following the shared component.\" />\n {others != null ? (\n <ModalBody className=\"pt-2 text-kit-sm text-kit-fg-2\">\n {others > 0 ? `The other ${others === 1 ? \"place stays\" : `${others} places stay`} shared.` : \"No other place uses it.\"}\n </ModalBody>\n ) : null}\n <ModalFooter>\n <Button variant=\"ghost\" onClick={onClose}>\n Cancel\n </Button>\n <Button variant=\"primary\" autoFocus onClick={onConfirm}>\n Make a copy\n </Button>\n </ModalFooter>\n </ModalContent>\n </Modal>\n );\n}\n\n/** V2 RelinkDialog: keep this place's edits as overrides, or take the component's content. */\nfunction RelinkDialog({ open, name, kept, onClose, onConfirm }: { open: boolean; name: string; kept: number; onClose: () => void; onConfirm: (mode: \"keep\" | \"reset\") => void }) {\n const [mode, setMode] = React.useState<\"keep\" | \"reset\">(\"keep\");\n React.useEffect(() => {\n if (open) setMode(\"keep\");\n }, [open]);\n const rows: { v: \"keep\" | \"reset\"; title: string; line: string }[] = [\n {\n v: \"keep\",\n title: \"Keep my edits here\",\n line: kept ? `${kept} ${kept === 1 ? \"field stays\" : \"fields stay\"} as ${kept === 1 ? \"it is\" : \"they are\"}; everything else follows ${name} again.` : `Nothing differs, so it simply follows ${name} again.`,\n },\n { v: \"reset\", title: `Use ${name}'s content`, line: \"Drops the edits made here. Undo is one click away.\" },\n ];\n return (\n <Modal open={open} onOpenChange={(o) => !o && onClose()}>\n <ModalContent size=\"sm\">\n <ModalHeader title={`Use the shared ${name} again?`} description=\"This place follows the shared component again.\" />\n <ModalBody className=\"pt-3\">\n <div\n role=\"radiogroup\"\n aria-label=\"Use shared version again\"\n className=\"flex flex-col divide-y divide-kit-line overflow-hidden rounded-kit-lg border border-kit-line\"\n onKeyDown={(e) => {\n // a radio group moves with the arrow keys (one tab stop, the checked row)\n if (![\"ArrowUp\", \"ArrowDown\", \"ArrowLeft\", \"ArrowRight\"].includes(e.key)) return;\n e.preventDefault();\n const next = mode === \"keep\" ? \"reset\" : \"keep\";\n setMode(next);\n (e.currentTarget.querySelector(`[data-mode=\"${next}\"]`) as HTMLElement | null)?.focus();\n }}\n >\n {rows.map((row) => (\n <button\n key={row.v}\n type=\"button\"\n role=\"radio\"\n data-mode={row.v}\n tabIndex={mode === row.v ? 0 : -1}\n aria-checked={mode === row.v}\n onClick={() => setMode(row.v)}\n className={cn(\"flex min-h-14 items-start gap-3 px-3 py-2.5 text-left transition-colors hover:bg-kit-hover\", mode === row.v && \"bg-kit-subtle\")}\n >\n <span className={cn(\"mt-0.5 flex size-4 shrink-0 items-center justify-center rounded-full border\", mode === row.v ? \"border-kit-control-checked\" : \"border-kit-line-strong\")}>\n {mode === row.v ? <span className=\"size-2 rounded-full bg-kit-fg\" /> : null}\n </span>\n <span className=\"min-w-0\">\n <span className=\"block text-kit-sm font-medium text-kit-fg\">{row.title}</span>\n <span className=\"block text-kit-xs text-kit-fg-3\">{row.line}</span>\n </span>\n </button>\n ))}\n </div>\n </ModalBody>\n <ModalFooter>\n <Button variant=\"ghost\" onClick={onClose}>\n Cancel\n </Button>\n <Button variant=\"primary\" onClick={() => onConfirm(mode)}>\n Use shared version\n </Button>\n </ModalFooter>\n </ModalContent>\n </Modal>\n );\n}\n\ninterface Row {\n key: string;\n label: string;\n text: string;\n}\n\n/**\n * What the window lists when there is no picture: each field's value as this place shows it (its override, else the\n * component's own), then the layout this place draws it in. A missing component has only what this place stored: its\n * overrides, named by their keys, and its layout.\n */\nfunction previewRows(missing: boolean, fields: KitComponentField[] | undefined, overrides: Record<string, unknown>, variant?: string): Row[] {\n const out: Row[] = [];\n if (missing || !fields) {\n for (const [key, v] of Object.entries(overrides)) {\n const text = readable(v);\n if (text) out.push({ key, label: key, text });\n }\n } else {\n for (const f of fields) {\n const text = readable(f.key in overrides ? overrides[f.key] : f.value);\n if (text) out.push({ key: f.key, label: f.label, text });\n }\n }\n if (variant) out.push({ key: \"__variant\", label: \"Layout\", text: variant });\n return out;\n}\n\n/**\n * A separate copy's values (V2 `props`) in the component's field order. A field the copy doesn't hold draws the\n * component's value for it, as V2's renderer does for a copy (it draws the def with `props`, defaults for the rest);\n * a value the component no longer has a field for follows, under its key. Then its layout.\n */\nfunction copyRows(own: Record<string, unknown>, fields: KitComponentField[] | undefined, variant?: string): Row[] {\n const out: Row[] = [];\n const push = (key: string, label: string, v: unknown) => {\n const text = readable(v);\n if (text) out.push({ key, label, text });\n };\n for (const f of fields ?? []) push(f.key, f.label, f.key in own ? own[f.key] : f.value);\n for (const [key, v] of Object.entries(own)) if (!fields?.some((f) => f.key === key)) push(key, key, v);\n if (variant) out.push({ key: \"__variant\", label: \"Layout\", text: variant });\n return out;\n}\n\n/** The preview's frame: under the card's header, at most PREVIEW_H tall. */\nconst PREVIEW_CHROME = \"relative overflow-hidden rounded-b-kit-lg border-t border-kit-line-subtle bg-kit-subtle\";\n\nfunction PreviewWindow({ image, rows }: { image: string | null; rows: Row[] }) {\n return (\n <div data-instance-preview=\"\" className={PREVIEW_CHROME} style={{ maxHeight: PREVIEW_H }}>\n <PreviewBody image={image} rows={rows} />\n </div>\n );\n}\n\n/**\n * The component drawn live by the host (KitServices.ComponentPreview), mounted once the card is on screen. Its height is\n * reserved from the start (PREVIEW_H), so the card never moves while it loads; where the host cannot draw it, the values\n * are listed under the reason.\n */\nfunction LivePreview({\n Preview,\n componentId,\n title,\n props,\n rows,\n}: {\n Preview: React.ComponentType<KitComponentPreviewProps>;\n componentId: string;\n title: string;\n props: Record<string, unknown>;\n rows: Row[];\n}) {\n const box = React.useRef<HTMLDivElement>(null);\n const [seen, setSeen] = React.useState(() => typeof IntersectionObserver === \"undefined\");\n React.useEffect(() => {\n const el = box.current;\n if (seen || !el) return;\n const io = new IntersectionObserver((entries) => {\n if (entries.some((e) => e.isIntersecting)) setSeen(true);\n });\n io.observe(el);\n return () => io.disconnect();\n }, [seen]);\n return (\n <div ref={box} data-instance-preview=\"\" data-live=\"\" className={PREVIEW_CHROME}>\n {seen ? (\n <Preview componentId={componentId} title={title} props={props} fallback={(reason) => <PreviewBody image={null} rows={rows} note={reason} />} />\n ) : (\n <div aria-hidden style={{ height: PREVIEW_H }} />\n )}\n </div>\n );\n}\n\nfunction PreviewBody({ image, rows, note }: { image: string | null; rows: Row[]; note?: string }) {\n const inner = React.useRef<HTMLDivElement>(null);\n const [tall, setTall] = React.useState(false);\n // a picture's height is unknown until it loads: the cap is held until then, so the card doesn't jump when it lands\n const [loaded, setLoaded] = React.useState(!image);\n React.useLayoutEffect(() => {\n const el = inner.current;\n if (!el) return;\n const on = () => setTall(el.scrollHeight > PREVIEW_H + 1);\n on();\n if (typeof ResizeObserver === \"undefined\") return;\n const ro = new ResizeObserver(on);\n ro.observe(el);\n return () => ro.disconnect();\n }, []);\n return (\n <div\n ref={inner}\n className={cn(tall && \"[mask-image:linear-gradient(to_bottom,black_calc(100%-24px),transparent)]\")}\n style={tall || !loaded ? { height: PREVIEW_H } : undefined}\n >\n {image ? (\n // the whole width, scaled to the card like V2's frame (top-left origin): never cropped at the sides\n <img src={image} alt=\"\" className=\"block h-auto w-full\" draggable={false} onLoad={() => setLoaded(true)} onError={() => setLoaded(true)} />\n ) : (\n <>\n {note ? <p className=\"px-4 pt-3 text-kit-xs text-kit-fg-3\">{note}</p> : null}\n <dl className=\"flex flex-col gap-3 px-4 py-3.5\">\n {rows.map((r) => (\n <div key={r.key} className=\"min-w-0\">\n <dt className=\"truncate text-kit-xs text-kit-fg-3\">{r.label}</dt>\n <dd className=\"mt-0.5 line-clamp-3 text-kit-sm text-kit-fg\">{r.text}</dd>\n </div>\n ))}\n </dl>\n </>\n )}\n </div>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { ControlProps } from "../../types";
2
+ import type { KitRichTextCodec, RichTextRead } from "./codec";
3
+ export declare function setFullEditor(key: string | null): void;
4
+ /** What the control decided for one stored value. */
5
+ type Opened = {
6
+ ok: true;
7
+ read: RichTextRead;
8
+ html: string;
9
+ } | {
10
+ ok: false;
11
+ reason: string;
12
+ };
13
+ /**
14
+ * Open a stored value: read it, then prove the editor carries it unchanged (load → serialize → write === stored).
15
+ * A codec that throws, or a value that does not survive, is handed to the host's own control with the reason.
16
+ */
17
+ export declare function openValue(codec: KitRichTextCodec, value: unknown, at: Parameters<KitRichTextCodec["read"]>[1]): Opened;
18
+ export declare function RichTextControl(props: ControlProps): import("react/jsx-runtime").JSX.Element;
19
+ /** Label-row action (at rest): the field's toolbar holds the same button while it's open. */
20
+ export declare function RichTextExpandAction({ path, field }: ControlProps): import("react/jsx-runtime").JSX.Element | null;
21
+ export {};
@@ -0,0 +1,254 @@
1
+ import { cn } from "../../lib/cn.js";
2
+ import { pathKey } from "../../lib/path.js";
3
+ import { useForm, useKitEnv, useKitServices } from "../../context.js";
4
+ import { Tooltip } from "../../ui/overlay.js";
5
+ import { resolveFrames } from "../../lib/frames.js";
6
+ import { LegacyFallback } from "../../engine/kit-field.js";
7
+ import { editorRoundTrip } from "./dom.js";
8
+ import { RichTextEditor } from "./editor.js";
9
+ import * as React from "react";
10
+ import { IconArrowsMaximize } from "@tabler/icons-react";
11
+ import { jsx, jsxs } from "react/jsx-runtime";
12
+ //#region src/kit/controls/rich-text/control.tsx
13
+ /**
14
+ * Rich text field (V2 HEAD controls/richtext.tsx, CPO D49).
15
+ * - The editor stays in place: the document variant is the full editor in the column, the panel variant (inspector)
16
+ * the same editor height-capped.
17
+ * - Expanding (the toolbar's expand button, ⌘↵, or the expand icon in the field's label row at rest) opens the shared
18
+ * ExpandedEditorModal: breadcrumb "Section › Item › Field", word count, Done. Esc closes and focus returns.
19
+ *
20
+ * STORAGE. The editor edits HTML; the stored value stays what production stores for the field, through the host's
21
+ * codec (KitServices.richText, see ./codec.ts):
22
+ * - read: stored value → the HTML the editor opens on (+ what the field accepts)
23
+ * - write: edited HTML → the stored value, in the surface's own shape; a write that would drop something is refused,
24
+ * named, and nothing is stored
25
+ * - probe: a value the editor cannot carry unchanged (open → no edit → write ≠ stored) is not opened here at all: the
26
+ * host's own control edits it (LegacyFallback), with the reason above it. Opening never writes.
27
+ */
28
+ var openKey = null;
29
+ var subs = /* @__PURE__ */ new Set();
30
+ function setFullEditor(key) {
31
+ openKey = key;
32
+ subs.forEach((s) => s());
33
+ }
34
+ function useFullEditorKey() {
35
+ return React.useSyncExternalStore((cb) => {
36
+ subs.add(cb);
37
+ return () => subs.delete(cb);
38
+ }, () => openKey, () => openKey);
39
+ }
40
+ var handedOff = /* @__PURE__ */ new Set();
41
+ function setHandedOff(key, on) {
42
+ if (handedOff.has(key) === on) return;
43
+ if (on) handedOff.add(key);
44
+ else handedOff.delete(key);
45
+ subs.forEach((s) => s());
46
+ }
47
+ function useHandedOff(key) {
48
+ return React.useSyncExternalStore((cb) => {
49
+ subs.add(cb);
50
+ return () => subs.delete(cb);
51
+ }, () => handedOff.has(key), () => handedOff.has(key));
52
+ }
53
+ /** The expanded editor's breadcrumb: the form's frames (root › drilled items) and this field. */
54
+ function useExpandCrumbs(fieldTitle) {
55
+ const form = useForm();
56
+ const env = useKitEnv();
57
+ if (!form) return [env.docTitle, fieldTitle].filter(Boolean);
58
+ const { frames } = resolveFrames(form.schema, form.value, form.path, form.resolveSchema);
59
+ return [...frames.filter((f) => f.kind !== "history").map((f, i) => i === 0 ? env.docTitle || f.title : f.title), fieldTitle];
60
+ }
61
+ /** A stored block array, or the `{ content }` / `{ format, value }` envelope around one, holding a pull quote block. */
62
+ var holdsPullQuote = (seed) => Array.isArray(seed) ? seed.some((b) => !!b && typeof b === "object" && b._type === "pullQuote") : !!seed && typeof seed === "object" && holdsPullQuote(seed.content ?? seed.value);
63
+ /**
64
+ * Open a stored value: read it, then prove the editor carries it unchanged (load → serialize → write === stored).
65
+ * A codec that throws, or a value that does not survive, is handed to the host's own control with the reason.
66
+ */
67
+ function openValue(codec, value, at) {
68
+ let read;
69
+ try {
70
+ read = codec.read(value, at);
71
+ } catch (err) {
72
+ return {
73
+ ok: false,
74
+ reason: `the stored text could not be read (${err instanceof Error ? err.message : String(err)})`
75
+ };
76
+ }
77
+ if (holdsPullQuote(read.seed) && !/data-rt="pullquote"/.test(read.html)) return {
78
+ ok: false,
79
+ reason: "it holds a pull quote, which the standard editor edits"
80
+ };
81
+ const html = editorRoundTrip(read.html);
82
+ try {
83
+ const back = codec.write(html, at, value);
84
+ if (back.losses.length) return {
85
+ ok: false,
86
+ reason: `this editor would drop ${back.losses.join(", ")}`
87
+ };
88
+ if (!codec.same(back.value, read.seed)) return {
89
+ ok: false,
90
+ reason: "it holds formatting this editor cannot keep"
91
+ };
92
+ } catch (err) {
93
+ return {
94
+ ok: false,
95
+ reason: `the text could not be checked (${err instanceof Error ? err.message : String(err)})`
96
+ };
97
+ }
98
+ return {
99
+ ok: true,
100
+ read,
101
+ html
102
+ };
103
+ }
104
+ function RichTextControl(props) {
105
+ const { richText } = useKitServices();
106
+ if (!richText) return /* @__PURE__ */ jsx(LegacyFallback, { ...props });
107
+ return /* @__PURE__ */ jsx(CodecRichText, {
108
+ codec: richText,
109
+ ...props
110
+ });
111
+ }
112
+ function CodecRichText({ codec, field, value, onChange, readOnly, path, id, invalid }) {
113
+ const env = useKitEnv();
114
+ const docKey = `${env.docId}:${pathKey(path)}`;
115
+ const open = useFullEditorKey() === docKey;
116
+ const crumbs = useExpandCrumbs(field.title);
117
+ const at = React.useMemo(() => ({
118
+ field,
119
+ path
120
+ }), [field, path]);
121
+ const { useInsertableComponents } = useKitServices();
122
+ const insertable = useInsertableComponents?.(at);
123
+ const mine = React.useRef(null);
124
+ const [refusal, setRefusal] = React.useState(null);
125
+ const opened = React.useMemo(() => {
126
+ if (mine.current && mine.current.value === value) try {
127
+ return {
128
+ ok: true,
129
+ read: codec.read(value, at),
130
+ html: mine.current.html
131
+ };
132
+ } catch {}
133
+ return openValue(codec, value, at);
134
+ }, [
135
+ codec,
136
+ value,
137
+ JSON.stringify(field),
138
+ pathKey(path)
139
+ ]);
140
+ React.useEffect(() => () => {
141
+ if (openKey === docKey) setFullEditor(null);
142
+ setHandedOff(docKey, false);
143
+ }, [docKey]);
144
+ React.useLayoutEffect(() => {
145
+ setHandedOff(docKey, !opened.ok);
146
+ if (!opened.ok && openKey === docKey) setFullEditor(null);
147
+ }, [docKey, opened.ok]);
148
+ if (!opened.ok) return /* @__PURE__ */ jsxs("div", {
149
+ className: "flex min-w-0 flex-col gap-1.5",
150
+ children: [/* @__PURE__ */ jsxs("p", {
151
+ role: "note",
152
+ "data-slot": "kit-richtext-handoff",
153
+ className: "rounded-kit-md bg-kit-subtle px-2.5 py-1.5 text-kit-xs text-kit-fg-2",
154
+ children: [
155
+ "Edited with the standard editor: ",
156
+ opened.reason,
157
+ "."
158
+ ]
159
+ }), /* @__PURE__ */ jsx(LegacyFallback, {
160
+ field,
161
+ value,
162
+ onChange,
163
+ readOnly,
164
+ path,
165
+ id,
166
+ invalid
167
+ })]
168
+ });
169
+ const { read, html } = opened;
170
+ const write = (next) => {
171
+ let res;
172
+ try {
173
+ res = codec.write(next, at, value);
174
+ } catch (err) {
175
+ setRefusal(`Not saved: the text could not be stored (${err instanceof Error ? err.message : String(err)}). Undo the last change with ⌘Z; leaving the field puts back the saved text.`);
176
+ return;
177
+ }
178
+ if (res.losses.length) {
179
+ setRefusal(`Not saved: this field cannot keep ${res.losses.join(", ")}. Undo the last change with ⌘Z; leaving the field puts back the saved text.`);
180
+ return;
181
+ }
182
+ setRefusal(null);
183
+ if (codec.same(res.value, value)) return;
184
+ mine.current = {
185
+ value: res.value,
186
+ html: next
187
+ };
188
+ onChange(res.value);
189
+ };
190
+ return /* @__PURE__ */ jsxs("div", {
191
+ className: "flex min-w-0 flex-col gap-1.5",
192
+ children: [
193
+ read.losses.length ? /* @__PURE__ */ jsxs("p", {
194
+ role: "status",
195
+ className: "rounded-kit-md bg-kit-warning-soft px-2.5 py-1.5 text-kit-xs text-kit-warning-fg",
196
+ children: [
197
+ "Saved by an earlier editor. Editing here would drop ",
198
+ read.losses.join(", "),
199
+ ". Nothing changes until you edit."
200
+ ]
201
+ }) : null,
202
+ /* @__PURE__ */ jsx(RichTextEditor, {
203
+ value: html,
204
+ onChange: write,
205
+ readOnly,
206
+ placeholder: field.placeholder,
207
+ docKey,
208
+ id,
209
+ invalid: invalid || !!refusal,
210
+ features: read.features,
211
+ single: read.single,
212
+ allowNewTab: read.newTab,
213
+ components: insertable && !read.single && !readOnly ? insertable : void 0,
214
+ variant: env.variant === "document" ? "document" : "panel",
215
+ maxHeight: env.variant === "document" ? void 0 : 320,
216
+ expandCrumbs: crumbs,
217
+ expandedOpen: open,
218
+ onExpandedOpenChange: (o) => setFullEditor(o ? docKey : null),
219
+ onComment: env.onComment ? () => env.onComment(path, field) : void 0
220
+ }),
221
+ refusal ? /* @__PURE__ */ jsx("p", {
222
+ role: "alert",
223
+ className: "text-kit-xs text-kit-danger-fg",
224
+ children: refusal
225
+ }) : null
226
+ ]
227
+ });
228
+ }
229
+ /** Label-row action (at rest): the field's toolbar holds the same button while it's open. */
230
+ function RichTextExpandAction({ path, field }) {
231
+ const env = useKitEnv();
232
+ const { richText } = useKitServices();
233
+ const handed = useHandedOff(`${env.docId}:${pathKey(path)}`);
234
+ if (env.variant === "document" || !richText || handed) return null;
235
+ return /* @__PURE__ */ jsx(Tooltip, {
236
+ content: "Expand editor",
237
+ shortcut: "⌘↵",
238
+ children: /* @__PURE__ */ jsx("button", {
239
+ type: "button",
240
+ "aria-label": `Expand ${field.title}`,
241
+ onClick: () => setFullEditor(`${env.docId}:${pathKey(path)}`),
242
+ className: cn("-my-0.5 hidden size-6 items-center justify-center rounded-kit-md text-kit-fg-3 hover:bg-kit-hover hover:text-kit-fg", "group-hover/field:inline-flex group-focus-within/field:!hidden [@media(pointer:coarse)]:inline-flex"),
243
+ children: /* @__PURE__ */ jsx(IconArrowsMaximize, {
244
+ className: "size-3.5",
245
+ stroke: 1.5,
246
+ "aria-hidden": true
247
+ })
248
+ })
249
+ });
250
+ }
251
+ //#endregion
252
+ export { RichTextControl, RichTextExpandAction };
253
+
254
+ //# sourceMappingURL=control.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"control.js","names":[],"sources":["../../../src/kit/controls/rich-text/control.tsx"],"sourcesContent":["/**\n * Rich text field (V2 HEAD controls/richtext.tsx, CPO D49).\n * - The editor stays in place: the document variant is the full editor in the column, the panel variant (inspector)\n * the same editor height-capped.\n * - Expanding (the toolbar's expand button, ⌘↵, or the expand icon in the field's label row at rest) opens the shared\n * ExpandedEditorModal: breadcrumb \"Section › Item › Field\", word count, Done. Esc closes and focus returns.\n *\n * STORAGE. The editor edits HTML; the stored value stays what production stores for the field, through the host's\n * codec (KitServices.richText, see ./codec.ts):\n * - read: stored value → the HTML the editor opens on (+ what the field accepts)\n * - write: edited HTML → the stored value, in the surface's own shape; a write that would drop something is refused,\n * named, and nothing is stored\n * - probe: a value the editor cannot carry unchanged (open → no edit → write ≠ stored) is not opened here at all: the\n * host's own control edits it (LegacyFallback), with the reason above it. Opening never writes.\n */\nimport * as React from \"react\";\nimport { IconArrowsMaximize } from \"@tabler/icons-react\";\nimport { cn } from \"../../lib/cn\";\nimport { useForm, useKitEnv, useKitServices } from \"../../context\";\nimport { resolveFrames } from \"../../lib/frames\";\nimport { pathKey } from \"../../lib/path\";\nimport type { ControlProps } from \"../../types\";\nimport { Tooltip } from \"../../ui/overlay\";\nimport { LegacyFallback } from \"../../engine/kit-field\";\nimport type { KitRichTextCodec, RichTextRead } from \"./codec\";\nimport { editorRoundTrip } from \"./dom\";\nimport { RichTextEditor } from \"./editor\";\n\n/* ── which rich-text field (docKey) has its full editor open — shared with the label-row action ── */\nlet openKey: string | null = null;\nconst subs = new Set<() => void>();\nexport function setFullEditor(key: string | null) {\n openKey = key;\n subs.forEach((s) => s());\n}\nfunction useFullEditorKey() {\n return React.useSyncExternalStore(\n (cb) => {\n subs.add(cb);\n return () => subs.delete(cb);\n },\n () => openKey,\n () => openKey,\n );\n}\n\n/* ── fields whose value went to the host's own control: the label-row expand button is not theirs to draw ── */\nconst handedOff = new Set<string>();\nfunction setHandedOff(key: string, on: boolean) {\n if (handedOff.has(key) === on) return;\n if (on) handedOff.add(key);\n else handedOff.delete(key);\n subs.forEach((s) => s());\n}\nfunction useHandedOff(key: string) {\n return React.useSyncExternalStore(\n (cb) => {\n subs.add(cb);\n return () => subs.delete(cb);\n },\n () => handedOff.has(key),\n () => handedOff.has(key),\n );\n}\n\n/** The expanded editor's breadcrumb: the form's frames (root › drilled items) and this field. */\nfunction useExpandCrumbs(fieldTitle: string): string[] {\n const form = useForm();\n const env = useKitEnv();\n if (!form) return [env.docTitle, fieldTitle].filter(Boolean) as string[];\n const { frames } = resolveFrames(form.schema, form.value, form.path, form.resolveSchema);\n const titles = frames.filter((f) => f.kind !== \"history\").map((f, i) => (i === 0 ? env.docTitle || f.title : f.title));\n return [...titles, fieldTitle];\n}\n\n/** A stored block array, or the `{ content }` / `{ format, value }` envelope around one, holding a pull quote block. */\nconst holdsPullQuote = (seed: unknown): boolean =>\n Array.isArray(seed)\n ? seed.some((b) => !!b && typeof b === \"object\" && (b as { _type?: unknown })._type === \"pullQuote\")\n : !!seed && typeof seed === \"object\" && holdsPullQuote((seed as { content?: unknown; value?: unknown }).content ?? (seed as { value?: unknown }).value);\n\n/** What the control decided for one stored value. */\ntype Opened =\n | { ok: true; read: RichTextRead; html: string }\n | { ok: false; reason: string };\n\n/**\n * Open a stored value: read it, then prove the editor carries it unchanged (load → serialize → write === stored).\n * A codec that throws, or a value that does not survive, is handed to the host's own control with the reason.\n */\nexport function openValue(codec: KitRichTextCodec, value: unknown, at: Parameters<KitRichTextCodec[\"read\"]>[1]): Opened {\n let read: RichTextRead;\n try {\n read = codec.read(value, at);\n } catch (err) {\n return { ok: false, reason: `the stored text could not be read (${err instanceof Error ? err.message : String(err)})` };\n }\n // a pull quote (V2 D55 article block) opens as the editor's pull-quote island, but only when the codec renders the\n // stored block as its markup: a codec that renders nothing for it would lose it, so the standard editor edits it\n if (holdsPullQuote(read.seed) && !/data-rt=\"pullquote\"/.test(read.html))\n return { ok: false, reason: \"it holds a pull quote, which the standard editor edits\" };\n // tables and pull quotes are islands (V2 TableBlock, PullQuote); the probe below proves they survive unchanged\n const html = editorRoundTrip(read.html);\n try {\n const back = codec.write(html, at, value);\n if (back.losses.length) return { ok: false, reason: `this editor would drop ${back.losses.join(\", \")}` };\n if (!codec.same(back.value, read.seed)) return { ok: false, reason: \"it holds formatting this editor cannot keep\" };\n } catch (err) {\n return { ok: false, reason: `the text could not be checked (${err instanceof Error ? err.message : String(err)})` };\n }\n return { ok: true, read, html };\n}\n\nexport function RichTextControl(props: ControlProps) {\n const { richText } = useKitServices();\n if (!richText) return <LegacyFallback {...props} />;\n return <CodecRichText codec={richText} {...props} />;\n}\n\nfunction CodecRichText({ codec, field, value, onChange, readOnly, path, id, invalid }: ControlProps & { codec: KitRichTextCodec }) {\n const env = useKitEnv();\n const docKey = `${env.docId}:${pathKey(path)}`;\n const open = useFullEditorKey() === docKey;\n const crumbs = useExpandCrumbs(field.title);\n const at = React.useMemo(() => ({ field, path }), [field, path]);\n // the components this field may embed (More components): a hook with one identity for the form's life, so calling it\n // only when the host provides it keeps the hook order fixed\n const { useInsertableComponents } = useKitServices();\n const insertable = useInsertableComponents?.(at);\n /* our own last write: its value comes back as `value`, and the editor keeps the HTML it emitted (no reload, no probe) */\n const mine = React.useRef<{ value: unknown; html: string } | null>(null);\n const [refusal, setRefusal] = React.useState<string | null>(null);\n const opened = React.useMemo<Opened>(() => {\n if (mine.current && mine.current.value === value) {\n try {\n return { ok: true, read: codec.read(value, at), html: mine.current.html };\n } catch {\n /* judged afresh below, which names the failure */\n }\n }\n return openValue(codec, value, at);\n // `at` changes identity with the field object; the field's content is what matters\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [codec, value, JSON.stringify(field), pathKey(path)]);\n\n // close when this field goes away (block deselected, drilled elsewhere)\n React.useEffect(\n () => () => {\n if (openKey === docKey) setFullEditor(null);\n setHandedOff(docKey, false);\n },\n [docKey],\n );\n React.useLayoutEffect(() => {\n setHandedOff(docKey, !opened.ok);\n if (!opened.ok && openKey === docKey) setFullEditor(null);\n }, [docKey, opened.ok]);\n\n if (!opened.ok)\n return (\n <div className=\"flex min-w-0 flex-col gap-1.5\">\n <p role=\"note\" data-slot=\"kit-richtext-handoff\" className=\"rounded-kit-md bg-kit-subtle px-2.5 py-1.5 text-kit-xs text-kit-fg-2\">\n Edited with the standard editor: {opened.reason}.\n </p>\n <LegacyFallback field={field} value={value} onChange={onChange} readOnly={readOnly} path={path} id={id} invalid={invalid} />\n </div>\n );\n\n const { read, html } = opened;\n const write = (next: string) => {\n let res;\n try {\n res = codec.write(next, at, value);\n } catch (err) {\n setRefusal(`Not saved: the text could not be stored (${err instanceof Error ? err.message : String(err)}). Undo the last change with ⌘Z; leaving the field puts back the saved text.`);\n return;\n }\n if (res.losses.length) {\n setRefusal(`Not saved: this field cannot keep ${res.losses.join(\", \")}. Undo the last change with ⌘Z; leaving the field puts back the saved text.`);\n return;\n }\n setRefusal(null);\n if (codec.same(res.value, value)) return;\n mine.current = { value: res.value, html: next };\n onChange(res.value);\n };\n\n return (\n <div className=\"flex min-w-0 flex-col gap-1.5\">\n {read.losses.length ? (\n <p role=\"status\" className=\"rounded-kit-md bg-kit-warning-soft px-2.5 py-1.5 text-kit-xs text-kit-warning-fg\">\n Saved by an earlier editor. Editing here would drop {read.losses.join(\", \")}. Nothing changes until you edit.\n </p>\n ) : null}\n <RichTextEditor\n value={html}\n onChange={write}\n readOnly={readOnly}\n placeholder={field.placeholder}\n docKey={docKey}\n id={id}\n invalid={invalid || !!refusal}\n features={read.features}\n single={read.single}\n allowNewTab={read.newTab}\n components={insertable && !read.single && !readOnly ? insertable : undefined}\n variant={env.variant === \"document\" ? \"document\" : \"panel\"}\n maxHeight={env.variant === \"document\" ? undefined : 320}\n expandCrumbs={crumbs}\n expandedOpen={open}\n onExpandedOpenChange={(o) => setFullEditor(o ? docKey : null)}\n onComment={env.onComment ? () => env.onComment!(path, field) : undefined}\n />\n {refusal ? (\n <p role=\"alert\" className=\"text-kit-xs text-kit-danger-fg\">\n {refusal}\n </p>\n ) : null}\n </div>\n );\n}\n\n/** Label-row action (at rest): the field's toolbar holds the same button while it's open. */\nexport function RichTextExpandAction({ path, field }: ControlProps) {\n const env = useKitEnv();\n const { richText } = useKitServices();\n const handed = useHandedOff(`${env.docId}:${pathKey(path)}`);\n // the host's own control (no codec, or a value handed to it) has its own full-screen button\n if (env.variant === \"document\" || !richText || handed) return null;\n return (\n <Tooltip content=\"Expand editor\" shortcut=\"⌘↵\">\n <button\n type=\"button\"\n aria-label={`Expand ${field.title}`}\n onClick={() => setFullEditor(`${env.docId}:${pathKey(path)}`)}\n className={cn(\n \"-my-0.5 hidden size-6 items-center justify-center rounded-kit-md text-kit-fg-3 hover:bg-kit-hover hover:text-kit-fg\",\n \"group-hover/field:inline-flex group-focus-within/field:!hidden [@media(pointer:coarse)]:inline-flex\",\n )}\n >\n <IconArrowsMaximize className=\"size-3.5\" stroke={1.5} aria-hidden />\n </button>\n </Tooltip>\n );\n}\n"],"mappings":"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"}
@@ -0,0 +1,190 @@
1
+ /**
2
+ * RICH TEXT · DOM layer (V2 HEAD controls/rich-text/dom.ts). The field value is clean, semantic HTML; rich blocks are
3
+ * "islands" while editing.
4
+ *
5
+ * Live DOM = the HTML, with every rich block swapped for a `div[data-rt-island="kind"]` (contenteditable=false) that
6
+ * React renders into through a portal. The island's model lives on the element (`el.__rt`).
7
+ * Stored = `serialize()` swaps each island back for its static HTML (`renderStatic`). The static form is the markup
8
+ * production's own renderer writes for the same block, so the host's ingest reads it back as that block.
9
+ * Loading = `hydrate()` turns that markup back into islands, so a re-mount restores them.
10
+ *
11
+ * Only the blocks production stores are islands here. Each one's markup is what the host's codec renders the stored
12
+ * block as and reads back (features/dock-v2/richTextCodec.ts); `data-extra` carries, opaque, whatever of the stored block
13
+ * the editor does not edit, so nothing it holds is dropped by an edit elsewhere.
14
+ * image `bcmsBlock` builtin:image: address, alt text, caption, alignment, size, link
15
+ * (`<figure data-rt="image" data-align data-size><a href><img src alt></a><figcaption>`)
16
+ * table production's Portable Text table (rows of cells, a header row, header cells, and the V2 table's caption,
17
+ * note, row groups and column groups), drawn with the kit's table editor (V2 TableBlock), stored as the markup
18
+ * production's renderer writes (`<caption>`, `th[scope=colgroup data-group]`, a `<tbody data-key>` per row
19
+ * group under a `th[scope=rowgroup]` row, `<figure data-rt="table">…<p data-notes>` for the note; footnotes
20
+ * fold into the note as `[1] …`, as production's ingest folds V2's). A cell's closing
21
+ * footnote markers (`<sup data-footnote>`) ride the cell as written (`marks`). A table whose cells hold
22
+ * other inline formatting the table value has no place for (a term, bold) is not an island: it stays
23
+ * markup in the body, edited in place, so the formatting survives.
24
+ * pullquote V2 article block (CPO D55), `<figure data-rt="pullquote">` → a `pullQuote` block.
25
+ * takeaways V2 article block (CPO D55), `<aside data-rt="takeaways"><p data-title>…<ul><li>…` → a `keyTakeaways` block
26
+ * {title?, points} (written in the text itself, V2 TakeawaysEditor).
27
+ * callout `bcmsBlock` builtin:callout {tone, title, message}: `<div data-rt="callout" data-callout><p data-title>…
28
+ * <div data-body><p>…` (the message is plain text: paragraphs and line breaks)
29
+ * toggle `bcmsBlock` builtin:toggle {title, body}: `<details data-rt="toggle"><summary>…<div data-body><p>…`
30
+ * video the `video` block {src, title}: `<div data-rt="video" data-url data-title>`
31
+ * file the `file` block {src, name, size}: `<div data-rt="file" data-url data-name data-size>`
32
+ * component `bcmsBlock` "component" {componentId, overrides, variant} (CPO D28): `<div data-rt="component" data-ref
33
+ * data-id data-name data-overrides data-variant>` — a linked instance of a project component, shown as a card.
34
+ * A separate copy (V2 instances.ts `detach`) adds {detached, props, blocks, sourcePublishedAt}:
35
+ * `data-detached="true" data-props data-blocks data-source-published-at`, and carries no overrides.
36
+ * A key the stored block holds is an attribute or element that is present; a key it lacks is absent, so an untouched
37
+ * block reads back exactly as stored.
38
+ * V2's gallery, embed, columns, footnotes, contents, related posts and author bio have no stored form in
39
+ * production and are not offered.
40
+ */
41
+ import { type TableValue } from "../../schema/table";
42
+ export declare const esc: (s: string) => string;
43
+ export declare const escAttr: (s: string) => string;
44
+ export declare const rid: (p?: string) => string;
45
+ export type ImageAlign = "full" | "center" | "left" | "right";
46
+ export type ImageSize = "s" | "m" | "l" | "full";
47
+ export declare const IMAGE_ALIGNS: readonly ImageAlign[];
48
+ export declare const IMAGE_SIZES: readonly ImageSize[];
49
+ /** Every optional key is absent when the stored block lacks it (see the header). */
50
+ export interface ImageModel {
51
+ src: string;
52
+ /** absent only on a stored block that never had one (every new image has alt text, empty or not) */
53
+ alt?: string;
54
+ caption?: string;
55
+ align?: ImageAlign;
56
+ size?: ImageSize;
57
+ href?: string;
58
+ /** the stored block's other keys, opaque to the editor */
59
+ extra?: string;
60
+ }
61
+ /** A table island IS the kit's table value (V2 TableModel); only what production's table keeps is stored (see above). */
62
+ export type TableModel = TableValue;
63
+ /** V2 PullQuoteModel (article.ts). */
64
+ export interface PullQuoteModel {
65
+ quote: string;
66
+ name: string;
67
+ role: string;
68
+ link: string;
69
+ }
70
+ /** V2 TakeawaysModel (article.ts): the title over the list and one plain string per point. */
71
+ export interface TakeawaysModel {
72
+ title: string;
73
+ points: string[];
74
+ }
75
+ export type CalloutTone = "info" | "tip" | "warning";
76
+ export declare const CALLOUT_TONES: readonly CalloutTone[];
77
+ export interface CalloutModel {
78
+ /** the stored tone, as written (the editor offers info, tip and warning) */
79
+ tone?: string;
80
+ title?: string;
81
+ /** plain text: paragraphs split by a blank line, line breaks kept */
82
+ body?: string;
83
+ extra?: string;
84
+ }
85
+ export interface ToggleModel {
86
+ title?: string;
87
+ body?: string;
88
+ extra?: string;
89
+ }
90
+ export interface VideoModel {
91
+ url?: string;
92
+ title?: string;
93
+ extra?: string;
94
+ }
95
+ export interface FileModel {
96
+ url?: string;
97
+ name?: string;
98
+ size?: number;
99
+ extra?: string;
100
+ }
101
+ /** A linked instance of a project component (CPO D28): its library id, its own id, its name and its overrides. */
102
+ export interface ComponentModel {
103
+ /** the component it links to (`fields.componentId`) */
104
+ ref?: string;
105
+ /** this instance (the block's key) */
106
+ id: string;
107
+ /** the component's name when it was placed (`schemaLabel`) */
108
+ name?: string;
109
+ /** the fields this instance overrides, as stored JSON */
110
+ overrides?: string;
111
+ /** the layout this instance draws the component in (V2's per-instance variant, `fields.variant`) */
112
+ variant?: string;
113
+ /** V2 `detached`: a separate copy that no longer follows the component (`fields.detached`) */
114
+ detached?: boolean;
115
+ /** a separate copy's values as readers see them, as stored JSON (V2 `props`, `fields.props`) */
116
+ props?: string;
117
+ /** a separate copy's frozen block tree, as stored JSON (`fields.blocks`); the editor never edits it */
118
+ blocks?: string;
119
+ /** the version of the component the copy was taken from (`fields.sourcePublishedAt`) */
120
+ sourcePublishedAt?: string;
121
+ extra?: string;
122
+ }
123
+ export interface IslandModels {
124
+ image: ImageModel;
125
+ table: TableModel;
126
+ pullquote: PullQuoteModel;
127
+ takeaways: TakeawaysModel;
128
+ callout: CalloutModel;
129
+ toggle: ToggleModel;
130
+ video: VideoModel;
131
+ file: FileModel;
132
+ component: ComponentModel;
133
+ }
134
+ export type IslandKind = keyof IslandModels;
135
+ export declare const ISLAND_KINDS: IslandKind[];
136
+ export type IslandEl = HTMLElement & {
137
+ __rt?: IslandModels[IslandKind];
138
+ __rtFocus?: boolean;
139
+ /** the mounted island's own setter: restores a model from the editor's history (undo / redo) */
140
+ __rtSet?: (m: IslandModels[IslandKind]) => void;
141
+ };
142
+ export declare function defaultModel<K extends IslandKind>(kind: K, extra?: Partial<IslandModels[K]>): IslandModels[K];
143
+ /** Deep copy (Duplicate). A copied table or component instance gets its own id. */
144
+ export declare const cloneModel: <K extends IslandKind>(kind: K, m: IslandModels[K]) => IslandModels[K];
145
+ /** "a\nb\n\nc" → `<p>a<br>b</p><p>c</p>`. Split on exactly one blank line, so any text reads back as written. */
146
+ export declare const textToParas: (s: string) => string;
147
+ /** The inverse of textToParas: each paragraph's text, its line breaks kept. */
148
+ export declare function parasToText(el: Element): string;
149
+ export declare function renderStatic(kind: IslandKind, model: unknown): string;
150
+ /**
151
+ * Production's table markup → the table value, cell for cell (renderStoredTable's inverse): the plain `<table>`, or
152
+ * the `<figure data-rt="table">` around one with its note. The V2 reader (parseTableElement) is not used here: it reads
153
+ * a one-column row as a row-group heading and a caption-less grid by guesses that a stored table never meant.
154
+ */
155
+ export declare function parseStoredTable(src: Element): TableModel;
156
+ /**
157
+ * The table as production's renderer writes a Portable Text table (@bettercms-ai/richtext html.ts tableHtml): a header
158
+ * row in <thead>, header cells of the first column as <th>, every cell its text (a link cell its link). A caption, a
159
+ * note or a group adds what that renderer writes for it, in the order the rows are held (an unedited stored table
160
+ * comes back as it was; the editor's row list writes V2's order, loose rows first). An empty group has no row to label
161
+ * and is not written, as production's renderer writes none.
162
+ */
163
+ export declare function renderStoredTable(input: TableModel): string;
164
+ export declare function detectKind(el: Element): IslandKind | null;
165
+ export declare function parseIsland(kind: IslandKind, el: HTMLElement): IslandModels[IslandKind];
166
+ export declare function createIsland<K extends IslandKind>(kind: K, model: IslandModels[K]): IslandEl;
167
+ /** Static block HTML → islands (top level only). Keeps a writable line after a trailing island or rule. */
168
+ export declare function hydrate(root: HTMLElement): void;
169
+ /** Live DOM → stored HTML. */
170
+ export declare function serialize(root: HTMLElement): string;
171
+ /** The HTML exactly as the editor would store it after opening `html` (load → hydrate → serialize), with no edit. */
172
+ export declare function editorRoundTrip(html: string): string;
173
+ /** Strip scripts, event handlers and script URLs from HTML we did not author (paste, Markdown, loaded values). */
174
+ export declare function sanitize(html: string): string;
175
+ export declare const TEXT_BLOCKS: Set<string>;
176
+ export declare function topBlock(root: HTMLElement | null, node: Node | null): HTMLElement | null;
177
+ /** Nearest text-ish block element around a node, inside root. */
178
+ export declare function closestBlock(root: HTMLElement, node: Node | null): HTMLElement | null;
179
+ export declare function placeCaret(el: Node, atEnd?: boolean): void;
180
+ export declare function textBeforeCaret(block: HTMLElement): string | null;
181
+ export declare function editingHost(n: Node | null): HTMLElement | null;
182
+ /** A range's box. Browsers measure a collapsed caret as an empty rect, and some engines cannot measure ranges at all: then
183
+ * the box of the element the range sits in. */
184
+ export declare function rangeRect(r: Range, fallback: Element | null): DOMRect;
185
+ export declare function countWords(html: string): number;
186
+ /** Linked component instances in the body. */
187
+ export declare const countComponents: (html: string) => number;
188
+ /** "1,840 words · 3 components" */
189
+ export declare const bodyCountLabel: (html: string) => string;
190
+ export declare const isEmptyHtml: (html: string) => boolean;