@bettercms-ai/kit 0.1.0 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (947) hide show
  1. package/_virtual/_rolldown/runtime.js +13 -0
  2. package/adapters/icons.d.ts +15 -0
  3. package/adapters/icons.js +27 -0
  4. package/adapters/icons.js.map +1 -0
  5. package/adapters/lossy.d.ts +267 -0
  6. package/adapters/lossy.js +233 -0
  7. package/adapters/lossy.js.map +1 -0
  8. package/adapters/prod-types.d.ts +468 -0
  9. package/adapters/prod-types.js +646 -0
  10. package/adapters/prod-types.js.map +1 -0
  11. package/adapters/schema.d.ts +115 -0
  12. package/adapters/schema.js +2203 -0
  13. package/adapters/schema.js.map +1 -0
  14. package/adapters/values.d.ts +200 -0
  15. package/adapters/values.js +553 -0
  16. package/adapters/values.js.map +1 -0
  17. package/brand/logo.d.ts +17 -0
  18. package/brand/logo.js +9 -0
  19. package/brand/logo.js.map +1 -0
  20. package/context.d.ts +269 -0
  21. package/context.js +214 -0
  22. package/context.js.map +1 -0
  23. package/controls/button.d.ts +58 -0
  24. package/controls/button.js +507 -0
  25. package/controls/button.js.map +1 -0
  26. package/controls/c1.d.ts +11 -0
  27. package/controls/c1.js +24 -0
  28. package/controls/c1.js.map +1 -0
  29. package/controls/c2.d.ts +10 -0
  30. package/controls/c2.js +19 -0
  31. package/controls/c2.js.map +1 -0
  32. package/controls/choice.d.ts +39 -0
  33. package/controls/choice.js +410 -0
  34. package/controls/choice.js.map +1 -0
  35. package/controls/code-register.d.ts +1 -0
  36. package/controls/code-register.js +8 -0
  37. package/controls/code-register.js.map +1 -0
  38. package/controls/code.d.ts +42 -0
  39. package/controls/code.js +396 -0
  40. package/controls/code.js.map +1 -0
  41. package/controls/color.d.ts +5 -0
  42. package/controls/color.js +130 -0
  43. package/controls/color.js.map +1 -0
  44. package/controls/component-services.d.ts +114 -0
  45. package/controls/date-register.d.ts +1 -0
  46. package/controls/date-register.js +9 -0
  47. package/controls/date-register.js.map +1 -0
  48. package/controls/date-zone.d.ts +104 -0
  49. package/controls/date-zone.js +272 -0
  50. package/controls/date-zone.js.map +1 -0
  51. package/controls/date.d.ts +7 -0
  52. package/controls/date.js +458 -0
  53. package/controls/date.js.map +1 -0
  54. package/controls/form-picker-register.d.ts +1 -0
  55. package/controls/form-picker-register.js +19 -0
  56. package/controls/form-picker-register.js.map +1 -0
  57. package/controls/form-picker.d.ts +43 -0
  58. package/controls/form-picker.js +83 -0
  59. package/controls/form-picker.js.map +1 -0
  60. package/controls/icon-register.d.ts +1 -0
  61. package/controls/icon-register.js +8 -0
  62. package/controls/icon-register.js.map +1 -0
  63. package/controls/icon.d.ts +38 -0
  64. package/controls/icon.js +355 -0
  65. package/controls/icon.js.map +1 -0
  66. package/controls/index.d.ts +5 -0
  67. package/controls/index.js +37 -0
  68. package/controls/index.js.map +1 -0
  69. package/controls/json-register.d.ts +1 -0
  70. package/controls/json-register.js +8 -0
  71. package/controls/json-register.js.map +1 -0
  72. package/controls/json.d.ts +2 -0
  73. package/controls/json.js +72 -0
  74. package/controls/json.js.map +1 -0
  75. package/controls/link.d.ts +260 -0
  76. package/controls/link.js +1186 -0
  77. package/controls/link.js.map +1 -0
  78. package/controls/location-register.d.ts +1 -0
  79. package/controls/location-register.js +8 -0
  80. package/controls/location-register.js.map +1 -0
  81. package/controls/location.d.ts +16 -0
  82. package/controls/location.js +197 -0
  83. package/controls/location.js.map +1 -0
  84. package/controls/media-register.d.ts +1 -0
  85. package/controls/media-register.js +12 -0
  86. package/controls/media-register.js.map +1 -0
  87. package/controls/media-services.d.ts +40 -0
  88. package/controls/media.d.ts +73 -0
  89. package/controls/media.js +1076 -0
  90. package/controls/media.js.map +1 -0
  91. package/controls/number.d.ts +22 -0
  92. package/controls/number.js +195 -0
  93. package/controls/number.js.map +1 -0
  94. package/controls/reference-register.d.ts +1 -0
  95. package/controls/reference-register.js +10 -0
  96. package/controls/reference-register.js.map +1 -0
  97. package/controls/reference-services.d.ts +54 -0
  98. package/controls/reference.d.ts +23 -0
  99. package/controls/reference.js +761 -0
  100. package/controls/reference.js.map +1 -0
  101. package/controls/rich-text/blocks.d.ts +28 -0
  102. package/controls/rich-text/blocks.js +1532 -0
  103. package/controls/rich-text/blocks.js.map +1 -0
  104. package/controls/rich-text/catalog.d.ts +98 -0
  105. package/controls/rich-text/catalog.js +613 -0
  106. package/controls/rich-text/catalog.js.map +1 -0
  107. package/controls/rich-text/codec.d.ts +56 -0
  108. package/controls/rich-text/codec.js +32 -0
  109. package/controls/rich-text/codec.js.map +1 -0
  110. package/controls/rich-text/component-card.d.ts +14 -0
  111. package/controls/rich-text/component-card.js +706 -0
  112. package/controls/rich-text/component-card.js.map +1 -0
  113. package/controls/rich-text/control.d.ts +21 -0
  114. package/controls/rich-text/control.js +254 -0
  115. package/controls/rich-text/control.js.map +1 -0
  116. package/controls/rich-text/dom.d.ts +190 -0
  117. package/controls/rich-text/dom.js +690 -0
  118. package/controls/rich-text/dom.js.map +1 -0
  119. package/controls/rich-text/editor.d.ts +50 -0
  120. package/controls/rich-text/editor.js +1530 -0
  121. package/controls/rich-text/editor.js.map +1 -0
  122. package/controls/rich-text/floating.d.ts +23 -0
  123. package/controls/rich-text/floating.js +137 -0
  124. package/controls/rich-text/floating.js.map +1 -0
  125. package/controls/rich-text/index.d.ts +1 -0
  126. package/controls/rich-text/index.js +12 -0
  127. package/controls/rich-text/index.js.map +1 -0
  128. package/controls/rich-text/link-form.d.ts +13 -0
  129. package/controls/rich-text/link-form.js +111 -0
  130. package/controls/rich-text/link-form.js.map +1 -0
  131. package/controls/rich-text/markdown.d.ts +6 -0
  132. package/controls/rich-text/markdown.js +179 -0
  133. package/controls/rich-text/markdown.js.map +1 -0
  134. package/controls/rich-text/ops.d.ts +35 -0
  135. package/controls/rich-text/ops.js +314 -0
  136. package/controls/rich-text/ops.js.map +1 -0
  137. package/controls/rich-text/toolbar.d.ts +85 -0
  138. package/controls/rich-text/toolbar.js +338 -0
  139. package/controls/rich-text/toolbar.js.map +1 -0
  140. package/controls/scale.d.ts +56 -0
  141. package/controls/scale.js +563 -0
  142. package/controls/scale.js.map +1 -0
  143. package/controls/slot-register.d.ts +1 -0
  144. package/controls/slot-register.js +16 -0
  145. package/controls/slot-register.js.map +1 -0
  146. package/controls/slot-services.d.ts +97 -0
  147. package/controls/slot-services.js +38 -0
  148. package/controls/slot-services.js.map +1 -0
  149. package/controls/slot.d.ts +33 -0
  150. package/controls/slot.js +348 -0
  151. package/controls/slot.js.map +1 -0
  152. package/controls/table/index.d.ts +1 -0
  153. package/controls/table/index.js +12 -0
  154. package/controls/table/index.js.map +1 -0
  155. package/controls/table/prod.d.ts +21 -0
  156. package/controls/table/prod.js +79 -0
  157. package/controls/table/prod.js.map +1 -0
  158. package/controls/table/refs.d.ts +50 -0
  159. package/controls/table/refs.js +68 -0
  160. package/controls/table/refs.js.map +1 -0
  161. package/controls/table/stored.d.ts +15 -0
  162. package/controls/table/stored.js +44 -0
  163. package/controls/table/stored.js.map +1 -0
  164. package/controls/table/table-editor.d.ts +103 -0
  165. package/controls/table/table-editor.js +2722 -0
  166. package/controls/table/table-editor.js.map +1 -0
  167. package/controls/table/table-link.d.ts +24 -0
  168. package/controls/table/table-link.js +180 -0
  169. package/controls/table/table-link.js.map +1 -0
  170. package/controls/table/table.d.ts +9 -0
  171. package/controls/table/table.js +103 -0
  172. package/controls/table/table.js.map +1 -0
  173. package/controls/text.d.ts +17 -0
  174. package/controls/text.js +287 -0
  175. package/controls/text.js.map +1 -0
  176. package/engine/array.d.ts +101 -0
  177. package/engine/array.js +893 -0
  178. package/engine/array.js.map +1 -0
  179. package/engine/bits.d.ts +24 -0
  180. package/engine/bits.js +60 -0
  181. package/engine/bits.js.map +1 -0
  182. package/engine/breadcrumb.d.ts +45 -0
  183. package/engine/breadcrumb.js +87 -0
  184. package/engine/breadcrumb.js.map +1 -0
  185. package/engine/expand.d.ts +68 -0
  186. package/engine/expand.js +170 -0
  187. package/engine/expand.js.map +1 -0
  188. package/engine/field-list.d.ts +20 -0
  189. package/engine/field-list.js +19 -0
  190. package/engine/field-list.js.map +1 -0
  191. package/engine/field-shell.d.ts +49 -0
  192. package/engine/field-shell.js +860 -0
  193. package/engine/field-shell.js.map +1 -0
  194. package/engine/frame.d.ts +120 -0
  195. package/engine/frame.js +599 -0
  196. package/engine/frame.js.map +1 -0
  197. package/engine/group-summary.d.ts +4 -0
  198. package/engine/group-summary.js +66 -0
  199. package/engine/group-summary.js.map +1 -0
  200. package/engine/grouping.d.ts +224 -0
  201. package/engine/grouping.js +824 -0
  202. package/engine/grouping.js.map +1 -0
  203. package/engine/item-list.d.ts +89 -0
  204. package/engine/item-list.js +703 -0
  205. package/engine/item-list.js.map +1 -0
  206. package/engine/kit-field.d.ts +72 -0
  207. package/engine/kit-field.js +523 -0
  208. package/engine/kit-field.js.map +1 -0
  209. package/engine/schema-form.d.ts +91 -0
  210. package/engine/schema-form.js +320 -0
  211. package/engine/schema-form.js.map +1 -0
  212. package/engine/slot.d.ts +13 -0
  213. package/engine/slot.js +226 -0
  214. package/engine/slot.js.map +1 -0
  215. package/index.d.ts +46 -0
  216. package/index.js +55 -0
  217. package/index.js.map +1 -0
  218. package/kit.css +56 -0
  219. package/lib/cn.d.ts +4 -0
  220. package/lib/cn.js +53 -0
  221. package/lib/cn.js.map +1 -0
  222. package/lib/columns.d.ts +14 -0
  223. package/lib/columns.js +27 -0
  224. package/lib/columns.js.map +1 -0
  225. package/lib/frames.d.ts +36 -0
  226. package/lib/frames.js +214 -0
  227. package/lib/frames.js.map +1 -0
  228. package/lib/icons.d.ts +16 -0
  229. package/lib/icons.js +172 -0
  230. package/lib/icons.js.map +1 -0
  231. package/lib/path.d.ts +29 -0
  232. package/lib/path.js +64 -0
  233. package/lib/path.js.map +1 -0
  234. package/lib/schema.d.ts +49 -0
  235. package/lib/schema.js +287 -0
  236. package/lib/schema.js.map +1 -0
  237. package/lib/utils.d.ts +7 -0
  238. package/lib/utils.js +37 -0
  239. package/lib/utils.js.map +1 -0
  240. package/lib/validate.d.ts +20 -0
  241. package/lib/validate.js +150 -0
  242. package/lib/validate.js.map +1 -0
  243. package/package.json +31 -59
  244. package/schema/adapters.d.ts +28 -0
  245. package/schema/adapters.js +493 -0
  246. package/schema/adapters.js.map +1 -0
  247. package/schema/help.d.ts +25 -0
  248. package/schema/help.js +54 -0
  249. package/schema/help.js.map +1 -0
  250. package/schema/scale.d.ts +69 -0
  251. package/schema/scale.js +250 -0
  252. package/schema/scale.js.map +1 -0
  253. package/schema/sources.d.ts +103 -0
  254. package/schema/sources.js +65 -0
  255. package/schema/sources.js.map +1 -0
  256. package/schema/table.d.ts +319 -0
  257. package/schema/table.js +1198 -0
  258. package/schema/table.js.map +1 -0
  259. package/schema/types.d.ts +269 -0
  260. package/schema/types.js +14 -0
  261. package/schema/types.js.map +1 -0
  262. package/types.d.ts +17 -0
  263. package/ui/action-tray.d.ts +54 -0
  264. package/ui/action-tray.js +153 -0
  265. package/ui/action-tray.js.map +1 -0
  266. package/ui/button.d.ts +57 -0
  267. package/ui/button.js +202 -0
  268. package/ui/button.js.map +1 -0
  269. package/ui/choice-switch.d.ts +36 -0
  270. package/ui/choice-switch.js +57 -0
  271. package/ui/choice-switch.js.map +1 -0
  272. package/ui/controls.d.ts +83 -0
  273. package/ui/controls.js +319 -0
  274. package/ui/controls.js.map +1 -0
  275. package/ui/display.d.ts +156 -0
  276. package/ui/display.js +444 -0
  277. package/ui/display.js.map +1 -0
  278. package/ui/expanded-editor-modal.d.ts +26 -0
  279. package/ui/expanded-editor-modal.js +140 -0
  280. package/ui/expanded-editor-modal.js.map +1 -0
  281. package/ui/field-context.d.ts +12 -0
  282. package/ui/field-context.js +23 -0
  283. package/ui/field-context.js.map +1 -0
  284. package/ui/floating-panel.d.ts +152 -0
  285. package/ui/floating-panel.js +912 -0
  286. package/ui/floating-panel.js.map +1 -0
  287. package/ui/index.d.ts +12 -0
  288. package/ui/index.js +13 -0
  289. package/ui/input.d.ts +78 -0
  290. package/ui/input.js +250 -0
  291. package/ui/input.js.map +1 -0
  292. package/ui/mode-bar.d.ts +31 -0
  293. package/ui/mode-bar.js +65 -0
  294. package/ui/mode-bar.js.map +1 -0
  295. package/ui/overlay.d.ts +123 -0
  296. package/ui/overlay.js +378 -0
  297. package/ui/overlay.js.map +1 -0
  298. package/ui/path-crumbs.d.ts +90 -0
  299. package/ui/path-crumbs.js +532 -0
  300. package/ui/path-crumbs.js.map +1 -0
  301. package/ui/presence.d.ts +16 -0
  302. package/ui/presence.js +65 -0
  303. package/ui/presence.js.map +1 -0
  304. package/ui/select.d.ts +66 -0
  305. package/ui/select.js +405 -0
  306. package/ui/select.js.map +1 -0
  307. package/ui/shortcut-hint.d.ts +14 -0
  308. package/ui/shortcut-hint.js +35 -0
  309. package/ui/shortcut-hint.js.map +1 -0
  310. package/ui/surfaces.d.ts +23 -0
  311. package/ui/surfaces.js +26 -0
  312. package/ui/surfaces.js.map +1 -0
  313. package/ui/tooltip-root.d.ts +12 -0
  314. package/ui/tooltip-root.js +76 -0
  315. package/ui/tooltip-root.js.map +1 -0
  316. package/ui/variants.d.ts +15 -0
  317. package/ui/variants.js +14 -0
  318. package/ui/variants.js.map +1 -0
  319. package/LICENSE +0 -21
  320. package/README.md +0 -27
  321. package/dist/_chunks-cjs/_visual-editing.js +0 -5898
  322. package/dist/_chunks-cjs/refractor.js +0 -22
  323. package/dist/_chunks-es/_visual-editing.mjs +0 -5904
  324. package/dist/_chunks-es/refractor.mjs +0 -25
  325. package/dist/_color.d.mts +0 -119
  326. package/dist/_color.d.ts +0 -119
  327. package/dist/_color.js +0 -1412
  328. package/dist/_color.mjs +0 -1411
  329. package/dist/_visual-editing.d.mts +0 -1126
  330. package/dist/_visual-editing.d.ts +0 -1126
  331. package/dist/_visual-editing.js +0 -30
  332. package/dist/_visual-editing.mjs +0 -30
  333. package/dist/index.d.mts +0 -3140
  334. package/dist/index.d.ts +0 -3140
  335. package/dist/index.js +0 -2036
  336. package/dist/index.mjs +0 -2044
  337. package/dist/theme.d.mts +0 -1506
  338. package/dist/theme.d.ts +0 -1506
  339. package/dist/theme.js +0 -4126
  340. package/dist/theme.mjs +0 -4126
  341. package/exports/_visual-editing.ts +0 -31
  342. package/exports/index.ts +0 -1
  343. package/exports/theme.ts +0 -1
  344. package/src/color/index.d.mts +0 -119
  345. package/src/color/index.mjs +0 -1411
  346. package/src/core/__workshop__/constants.ts +0 -293
  347. package/src/core/_compat.ts +0 -264
  348. package/src/core/components/autocomplete/__mocks__/apiStore.ts +0 -49
  349. package/src/core/components/autocomplete/__mocks__/countries.ts +0 -245
  350. package/src/core/components/autocomplete/__workshop__/async.tsx +0 -156
  351. package/src/core/components/autocomplete/__workshop__/constrainedHeight.tsx +0 -137
  352. package/src/core/components/autocomplete/__workshop__/custom.tsx +0 -89
  353. package/src/core/components/autocomplete/__workshop__/example.tsx +0 -79
  354. package/src/core/components/autocomplete/__workshop__/focusAndBlur.tsx +0 -36
  355. package/src/core/components/autocomplete/__workshop__/fullscreen.tsx +0 -294
  356. package/src/core/components/autocomplete/__workshop__/index.ts +0 -39
  357. package/src/core/components/autocomplete/__workshop__/types.ts +0 -4
  358. package/src/core/components/autocomplete/autocomplete.styles.tsx +0 -39
  359. package/src/core/components/autocomplete/autocomplete.tsx +0 -767
  360. package/src/core/components/autocomplete/autocompleteOption.tsx +0 -45
  361. package/src/core/components/autocomplete/autocompleteReducer.ts +0 -47
  362. package/src/core/components/autocomplete/constants.ts +0 -28
  363. package/src/core/components/autocomplete/index.ts +0 -2
  364. package/src/core/components/autocomplete/types.ts +0 -108
  365. package/src/core/components/breadcrumbs/__workshop__/example.tsx +0 -62
  366. package/src/core/components/breadcrumbs/__workshop__/index.ts +0 -14
  367. package/src/core/components/breadcrumbs/breadcrumbs.styles.ts +0 -18
  368. package/src/core/components/breadcrumbs/breadcrumbs.test.tsx +0 -51
  369. package/src/core/components/breadcrumbs/breadcrumbs.tsx +0 -133
  370. package/src/core/components/breadcrumbs/index.ts +0 -1
  371. package/src/core/components/dialog/__workshop__/activate.tsx +0 -134
  372. package/src/core/components/dialog/__workshop__/autoFocus.tsx +0 -29
  373. package/src/core/components/dialog/__workshop__/index.ts +0 -19
  374. package/src/core/components/dialog/__workshop__/layering.tsx +0 -41
  375. package/src/core/components/dialog/__workshop__/nested.tsx +0 -72
  376. package/src/core/components/dialog/__workshop__/onScroll.tsx +0 -39
  377. package/src/core/components/dialog/__workshop__/panes.tsx +0 -82
  378. package/src/core/components/dialog/__workshop__/position.tsx +0 -30
  379. package/src/core/components/dialog/__workshop__/props.tsx +0 -75
  380. package/src/core/components/dialog/__workshop__/provider.tsx +0 -11
  381. package/src/core/components/dialog/__workshop__/wrapped.tsx +0 -76
  382. package/src/core/components/dialog/dialog.tsx +0 -430
  383. package/src/core/components/dialog/dialogContext.ts +0 -20
  384. package/src/core/components/dialog/dialogProvider.tsx +0 -35
  385. package/src/core/components/dialog/index.ts +0 -4
  386. package/src/core/components/dialog/styles.ts +0 -77
  387. package/src/core/components/dialog/useDialog.ts +0 -11
  388. package/src/core/components/hotkeys/__workshop__/index.ts +0 -14
  389. package/src/core/components/hotkeys/__workshop__/plain.tsx +0 -9
  390. package/src/core/components/hotkeys/hotkeys.test.tsx +0 -42
  391. package/src/core/components/hotkeys/hotkeys.tsx +0 -66
  392. package/src/core/components/hotkeys/index.ts +0 -1
  393. package/src/core/components/index.ts +0 -9
  394. package/src/core/components/menu/__workshop__/asComponent.tsx +0 -45
  395. package/src/core/components/menu/__workshop__/avatarMenu.tsx +0 -51
  396. package/src/core/components/menu/__workshop__/closableMenuButton.tsx +0 -46
  397. package/src/core/components/menu/__workshop__/constrainedInBoundary.tsx +0 -134
  398. package/src/core/components/menu/__workshop__/customMenuItem.tsx +0 -45
  399. package/src/core/components/menu/__workshop__/customSelectedState.tsx +0 -39
  400. package/src/core/components/menu/__workshop__/disableFocusOnClose.tsx +0 -40
  401. package/src/core/components/menu/__workshop__/groups.tsx +0 -156
  402. package/src/core/components/menu/__workshop__/index.ts +0 -89
  403. package/src/core/components/menu/__workshop__/menuButton.tsx +0 -80
  404. package/src/core/components/menu/__workshop__/menuGroupRight.tsx +0 -58
  405. package/src/core/components/menu/__workshop__/nestedMenu.tsx +0 -22
  406. package/src/core/components/menu/__workshop__/onCloseMenuButton.tsx +0 -41
  407. package/src/core/components/menu/__workshop__/selectedItem.tsx +0 -69
  408. package/src/core/components/menu/__workshop__/shouldFocus.tsx +0 -47
  409. package/src/core/components/menu/__workshop__/tones.tsx +0 -25
  410. package/src/core/components/menu/__workshop__/withoutArrow.tsx +0 -32
  411. package/src/core/components/menu/helpers.ts +0 -82
  412. package/src/core/components/menu/index.ts +0 -5
  413. package/src/core/components/menu/menu.spacing.test.tsx +0 -63
  414. package/src/core/components/menu/menu.test.tsx +0 -125
  415. package/src/core/components/menu/menu.tsx +0 -178
  416. package/src/core/components/menu/menuButton.tsx +0 -268
  417. package/src/core/components/menu/menuContext.ts +0 -18
  418. package/src/core/components/menu/menuDivider.ts +0 -23
  419. package/src/core/components/menu/menuGroup.spacing.test.tsx +0 -63
  420. package/src/core/components/menu/menuGroup.tsx +0 -233
  421. package/src/core/components/menu/menuItem.spacing.test.tsx +0 -59
  422. package/src/core/components/menu/menuItem.tsx +0 -197
  423. package/src/core/components/menu/useMenu.ts +0 -21
  424. package/src/core/components/menu/useMenuController.ts +0 -231
  425. package/src/core/components/skeleton/__workshop__/delay.tsx +0 -70
  426. package/src/core/components/skeleton/__workshop__/index.ts +0 -11
  427. package/src/core/components/skeleton/__workshop__/skeleton.tsx +0 -64
  428. package/src/core/components/skeleton/index.ts +0 -2
  429. package/src/core/components/skeleton/skeleton.tsx +0 -57
  430. package/src/core/components/skeleton/styles.ts +0 -50
  431. package/src/core/components/skeleton/textSkeleton.tsx +0 -122
  432. package/src/core/components/tab/__workshop__/example.tsx +0 -79
  433. package/src/core/components/tab/__workshop__/index.ts +0 -14
  434. package/src/core/components/tab/index.ts +0 -3
  435. package/src/core/components/tab/tab.tsx +0 -101
  436. package/src/core/components/tab/tabList.test.tsx +0 -48
  437. package/src/core/components/tab/tabList.tsx +0 -70
  438. package/src/core/components/tab/tabPanel.tsx +0 -39
  439. package/src/core/components/toast/__workshop__/hook.tsx +0 -71
  440. package/src/core/components/toast/__workshop__/index.ts +0 -19
  441. package/src/core/components/toast/__workshop__/toast.tsx +0 -26
  442. package/src/core/components/toast/index.ts +0 -4
  443. package/src/core/components/toast/styles.ts +0 -77
  444. package/src/core/components/toast/toast.test.tsx +0 -101
  445. package/src/core/components/toast/toast.tsx +0 -198
  446. package/src/core/components/toast/toastContext.ts +0 -7
  447. package/src/core/components/toast/toastLayer.tsx +0 -51
  448. package/src/core/components/toast/toastProvider.tsx +0 -113
  449. package/src/core/components/toast/toastState.ts +0 -6
  450. package/src/core/components/toast/types.ts +0 -26
  451. package/src/core/components/toast/useToast.ts +0 -25
  452. package/src/core/components/tree/__workshop__/basic.perf.ts +0 -19
  453. package/src/core/components/tree/__workshop__/basic.tsx +0 -105
  454. package/src/core/components/tree/__workshop__/index.ts +0 -21
  455. package/src/core/components/tree/__workshop__/tabFromElement.tsx +0 -84
  456. package/src/core/components/tree/helpers.ts +0 -105
  457. package/src/core/components/tree/index.ts +0 -4
  458. package/src/core/components/tree/style.ts +0 -105
  459. package/src/core/components/tree/tree.test.tsx +0 -55
  460. package/src/core/components/tree/tree.tsx +0 -240
  461. package/src/core/components/tree/treeContext.ts +0 -10
  462. package/src/core/components/tree/treeGroup.tsx +0 -28
  463. package/src/core/components/tree/treeItem.test.tsx +0 -65
  464. package/src/core/components/tree/treeItem.tsx +0 -224
  465. package/src/core/components/tree/types.ts +0 -25
  466. package/src/core/components/tree/useTree.ts +0 -17
  467. package/src/core/constants.ts +0 -79
  468. package/src/core/helpers/animation.ts +0 -27
  469. package/src/core/helpers/element.ts +0 -55
  470. package/src/core/helpers/focus.ts +0 -100
  471. package/src/core/helpers/index.ts +0 -4
  472. package/src/core/helpers/scroll.ts +0 -15
  473. package/src/core/hooks/index.ts +0 -12
  474. package/src/core/hooks/useArrayProp.ts +0 -17
  475. package/src/core/hooks/useClickOutside.test.tsx +0 -482
  476. package/src/core/hooks/useClickOutside.ts +0 -118
  477. package/src/core/hooks/useClickOutsideEvent.test.tsx +0 -115
  478. package/src/core/hooks/useClickOutsideEvent.ts +0 -73
  479. package/src/core/hooks/useCustomValidity.ts +0 -13
  480. package/src/core/hooks/useDelayed.test.ts +0 -88
  481. package/src/core/hooks/useDelayedState.ts +0 -36
  482. package/src/core/hooks/useElementRect/__workshop__/example.tsx +0 -32
  483. package/src/core/hooks/useElementRect/__workshop__/index.ts +0 -14
  484. package/src/core/hooks/useElementRect/index.ts +0 -1
  485. package/src/core/hooks/useElementRect/useElementRect.ts +0 -13
  486. package/src/core/hooks/useElementSize.ts +0 -19
  487. package/src/core/hooks/useForwardedRef.ts +0 -19
  488. package/src/core/hooks/useGlobalKeyDown.ts +0 -24
  489. package/src/core/hooks/useIsomorphicEffect.ts +0 -7
  490. package/src/core/hooks/useMatchMedia.ts +0 -28
  491. package/src/core/hooks/useMediaIndex/__workshop__/index.ts +0 -14
  492. package/src/core/hooks/useMediaIndex/__workshop__/test.tsx +0 -14
  493. package/src/core/hooks/useMediaIndex/index.ts +0 -1
  494. package/src/core/hooks/useMediaIndex/useMediaIndex.test.tsx +0 -36
  495. package/src/core/hooks/useMediaIndex/useMediaIndex.ts +0 -102
  496. package/src/core/hooks/useMounted.ts +0 -15
  497. package/src/core/hooks/usePrefersDark.hydration.test.tsx +0 -56
  498. package/src/core/hooks/usePrefersDark.test.tsx +0 -19
  499. package/src/core/hooks/usePrefersDark.ts +0 -16
  500. package/src/core/hooks/usePrefersReducedMotion.hydration.test.tsx +0 -56
  501. package/src/core/hooks/usePrefersReducedMotion.test.tsx +0 -19
  502. package/src/core/hooks/usePrefersReducedMotion.ts +0 -16
  503. package/src/core/index.ts +0 -10
  504. package/src/core/lib/createGlobalScopedContext.ts +0 -36
  505. package/src/core/lib/globalScope.ts +0 -19
  506. package/src/core/lib/isRecord.ts +0 -3
  507. package/src/core/middleware/origin.ts +0 -47
  508. package/src/core/observers/elementSizeObserver.ts +0 -116
  509. package/src/core/observers/index.ts +0 -2
  510. package/src/core/observers/resizeObserver.ts +0 -9
  511. package/src/core/primitives/_selectable/index.ts +0 -1
  512. package/src/core/primitives/_selectable/selectable.tsx +0 -15
  513. package/src/core/primitives/_selectable/style.ts +0 -115
  514. package/src/core/primitives/avatar/__workshop__/asButton.tsx +0 -14
  515. package/src/core/primitives/avatar/__workshop__/index.ts +0 -29
  516. package/src/core/primitives/avatar/__workshop__/stack.tsx +0 -25
  517. package/src/core/primitives/avatar/__workshop__/withinButton.tsx +0 -63
  518. package/src/core/primitives/avatar/__workshop__/withinMenuItem.tsx +0 -70
  519. package/src/core/primitives/avatar/avatar.tsx +0 -200
  520. package/src/core/primitives/avatar/avatarCounter.tsx +0 -91
  521. package/src/core/primitives/avatar/avatarStack.tsx +0 -100
  522. package/src/core/primitives/avatar/index.ts +0 -4
  523. package/src/core/primitives/avatar/styles.ts +0 -167
  524. package/src/core/primitives/avatar/types.ts +0 -17
  525. package/src/core/primitives/badge/__workshop__/index.ts +0 -19
  526. package/src/core/primitives/badge/__workshop__/props.tsx +0 -30
  527. package/src/core/primitives/badge/__workshop__/tones.tsx +0 -21
  528. package/src/core/primitives/badge/badge.test.tsx +0 -16
  529. package/src/core/primitives/badge/badge.tsx +0 -70
  530. package/src/core/primitives/badge/index.ts +0 -1
  531. package/src/core/primitives/badge/styles.ts +0 -20
  532. package/src/core/primitives/badge/types.ts +0 -8
  533. package/src/core/primitives/box/__workshop__/asComponent.tsx +0 -31
  534. package/src/core/primitives/box/__workshop__/index.ts +0 -24
  535. package/src/core/primitives/box/__workshop__/props.tsx +0 -20
  536. package/src/core/primitives/box/__workshop__/responsive.tsx +0 -20
  537. package/src/core/primitives/box/box.test.tsx +0 -142
  538. package/src/core/primitives/box/box.tsx +0 -154
  539. package/src/core/primitives/box/index.ts +0 -1
  540. package/src/core/primitives/button/__workshop__/custom.tsx +0 -51
  541. package/src/core/primitives/button/__workshop__/customIcons.tsx +0 -30
  542. package/src/core/primitives/button/__workshop__/disabled.tsx +0 -74
  543. package/src/core/primitives/button/__workshop__/index.ts +0 -59
  544. package/src/core/primitives/button/__workshop__/labelUploadButton.tsx +0 -36
  545. package/src/core/primitives/button/__workshop__/mixedChildren.tsx +0 -12
  546. package/src/core/primitives/button/__workshop__/props.tsx +0 -55
  547. package/src/core/primitives/button/__workshop__/stacked.tsx +0 -58
  548. package/src/core/primitives/button/__workshop__/styled1.tsx +0 -17
  549. package/src/core/primitives/button/__workshop__/styled2.tsx +0 -19
  550. package/src/core/primitives/button/__workshop__/uploadButton.tsx +0 -28
  551. package/src/core/primitives/button/button.test.tsx +0 -82
  552. package/src/core/primitives/button/button.tsx +0 -210
  553. package/src/core/primitives/button/index.ts +0 -1
  554. package/src/core/primitives/button/styles.ts +0 -117
  555. package/src/core/primitives/card/__workshop__/allTones.tsx +0 -25
  556. package/src/core/primitives/card/__workshop__/asButton.tsx +0 -107
  557. package/src/core/primitives/card/__workshop__/asComponent.tsx +0 -27
  558. package/src/core/primitives/card/__workshop__/checkered.tsx +0 -26
  559. package/src/core/primitives/card/__workshop__/index.ts +0 -18
  560. package/src/core/primitives/card/__workshop__/interactive.tsx +0 -30
  561. package/src/core/primitives/card/__workshop__/listNavigation.tsx +0 -80
  562. package/src/core/primitives/card/__workshop__/props.tsx +0 -53
  563. package/src/core/primitives/card/__workshop__/selected.tsx +0 -94
  564. package/src/core/primitives/card/__workshop__/styled.tsx +0 -14
  565. package/src/core/primitives/card/card.tsx +0 -128
  566. package/src/core/primitives/card/index.ts +0 -2
  567. package/src/core/primitives/card/styles.ts +0 -147
  568. package/src/core/primitives/card/types.ts +0 -11
  569. package/src/core/primitives/checkbox/__workshop__/example.tsx +0 -25
  570. package/src/core/primitives/checkbox/__workshop__/index.ts +0 -13
  571. package/src/core/primitives/checkbox/__workshop__/props.tsx +0 -33
  572. package/src/core/primitives/checkbox/__workshop__/readOnly.tsx +0 -16
  573. package/src/core/primitives/checkbox/__workshop__/tones.tsx +0 -28
  574. package/src/core/primitives/checkbox/checkbox.tsx +0 -73
  575. package/src/core/primitives/checkbox/index.ts +0 -1
  576. package/src/core/primitives/checkbox/styles.ts +0 -128
  577. package/src/core/primitives/code/__workshop__/index.ts +0 -19
  578. package/src/core/primitives/code/__workshop__/opticalAlignment.tsx +0 -48
  579. package/src/core/primitives/code/__workshop__/props.tsx +0 -21
  580. package/src/core/primitives/code/code.tsx +0 -55
  581. package/src/core/primitives/code/index.ts +0 -1
  582. package/src/core/primitives/code/refractor.tsx +0 -20
  583. package/src/core/primitives/code/styles.ts +0 -77
  584. package/src/core/primitives/container/__workshop__/example.tsx +0 -20
  585. package/src/core/primitives/container/__workshop__/index.ts +0 -8
  586. package/src/core/primitives/container/container.tsx +0 -54
  587. package/src/core/primitives/container/index.ts +0 -2
  588. package/src/core/primitives/container/styles.ts +0 -23
  589. package/src/core/primitives/container/types.ts +0 -6
  590. package/src/core/primitives/flex/__workshop__/example.tsx +0 -34
  591. package/src/core/primitives/flex/__workshop__/gap.tsx +0 -25
  592. package/src/core/primitives/flex/__workshop__/index.ts +0 -11
  593. package/src/core/primitives/flex/flex.tsx +0 -64
  594. package/src/core/primitives/flex/index.ts +0 -1
  595. package/src/core/primitives/grid/__workshop__/index.ts +0 -10
  596. package/src/core/primitives/grid/__workshop__/responsive.tsx +0 -54
  597. package/src/core/primitives/grid/grid.test.tsx +0 -80
  598. package/src/core/primitives/grid/grid.tsx +0 -74
  599. package/src/core/primitives/grid/index.ts +0 -1
  600. package/src/core/primitives/heading/__workshop__/index.ts +0 -19
  601. package/src/core/primitives/heading/__workshop__/opticalAlignment.tsx +0 -54
  602. package/src/core/primitives/heading/__workshop__/plain.tsx +0 -32
  603. package/src/core/primitives/heading/heading.tsx +0 -88
  604. package/src/core/primitives/heading/index.ts +0 -1
  605. package/src/core/primitives/heading/styles.ts +0 -64
  606. package/src/core/primitives/heading/types.ts +0 -7
  607. package/src/core/primitives/index.ts +0 -27
  608. package/src/core/primitives/inline/__workshop__/index.ts +0 -8
  609. package/src/core/primitives/inline/__workshop__/plain.tsx +0 -27
  610. package/src/core/primitives/inline/index.ts +0 -1
  611. package/src/core/primitives/inline/inline.test.tsx +0 -51
  612. package/src/core/primitives/inline/inline.tsx +0 -63
  613. package/src/core/primitives/inline/styles.ts +0 -32
  614. package/src/core/primitives/inline/types.ts +0 -6
  615. package/src/core/primitives/kbd/__workshop__/index.ts +0 -8
  616. package/src/core/primitives/kbd/__workshop__/plain.tsx +0 -9
  617. package/src/core/primitives/kbd/index.ts +0 -1
  618. package/src/core/primitives/kbd/kbd.tsx +0 -69
  619. package/src/core/primitives/label/__workshop__/index.ts +0 -19
  620. package/src/core/primitives/label/__workshop__/opticalAlignment.tsx +0 -48
  621. package/src/core/primitives/label/__workshop__/plain.tsx +0 -24
  622. package/src/core/primitives/label/index.ts +0 -1
  623. package/src/core/primitives/label/label.tsx +0 -87
  624. package/src/core/primitives/label/styles.ts +0 -45
  625. package/src/core/primitives/popover/__workshop__/AlignedStory.tsx +0 -77
  626. package/src/core/primitives/popover/__workshop__/MarginsStory.tsx +0 -31
  627. package/src/core/primitives/popover/__workshop__/MatchReferenceWidthStory.tsx +0 -32
  628. package/src/core/primitives/popover/__workshop__/OpenOnMountStory.tsx +0 -11
  629. package/src/core/primitives/popover/__workshop__/PlainStory.tsx +0 -71
  630. package/src/core/primitives/popover/__workshop__/RecursiveStory.tsx +0 -71
  631. package/src/core/primitives/popover/__workshop__/SidePanelStory.tsx +0 -89
  632. package/src/core/primitives/popover/__workshop__/TestStory.tsx +0 -97
  633. package/src/core/primitives/popover/__workshop__/index.ts +0 -49
  634. package/src/core/primitives/popover/constants.ts +0 -22
  635. package/src/core/primitives/popover/floating-ui/size.ts +0 -99
  636. package/src/core/primitives/popover/helpers.ts +0 -31
  637. package/src/core/primitives/popover/index.ts +0 -2
  638. package/src/core/primitives/popover/popover.tsx +0 -511
  639. package/src/core/primitives/popover/popoverCard.tsx +0 -166
  640. package/src/core/primitives/popover/types.ts +0 -7
  641. package/src/core/primitives/radio/__workshop__/example.tsx +0 -63
  642. package/src/core/primitives/radio/__workshop__/index.ts +0 -11
  643. package/src/core/primitives/radio/__workshop__/plain.tsx +0 -28
  644. package/src/core/primitives/radio/index.ts +0 -1
  645. package/src/core/primitives/radio/radio.tsx +0 -51
  646. package/src/core/primitives/radio/styles.ts +0 -117
  647. package/src/core/primitives/select/__workshop__/index.ts +0 -11
  648. package/src/core/primitives/select/__workshop__/plain.tsx +0 -27
  649. package/src/core/primitives/select/__workshop__/readOnly.tsx +0 -23
  650. package/src/core/primitives/select/index.ts +0 -1
  651. package/src/core/primitives/select/select.test.tsx +0 -52
  652. package/src/core/primitives/select/select.tsx +0 -94
  653. package/src/core/primitives/select/styles.ts +0 -166
  654. package/src/core/primitives/spinner/__workshop__/Props.tsx +0 -15
  655. package/src/core/primitives/spinner/__workshop__/index.ts +0 -14
  656. package/src/core/primitives/spinner/index.ts +0 -1
  657. package/src/core/primitives/spinner/spinner.tsx +0 -46
  658. package/src/core/primitives/stack/__workshop__/index.ts +0 -14
  659. package/src/core/primitives/stack/__workshop__/plain.tsx +0 -32
  660. package/src/core/primitives/stack/index.ts +0 -1
  661. package/src/core/primitives/stack/stack.test.tsx +0 -57
  662. package/src/core/primitives/stack/stack.tsx +0 -57
  663. package/src/core/primitives/stack/styles.ts +0 -32
  664. package/src/core/primitives/switch/__workshop__/example.tsx +0 -23
  665. package/src/core/primitives/switch/__workshop__/index.ts +0 -11
  666. package/src/core/primitives/switch/__workshop__/props.tsx +0 -21
  667. package/src/core/primitives/switch/index.ts +0 -1
  668. package/src/core/primitives/switch/styles.ts +0 -173
  669. package/src/core/primitives/switch/switch.tsx +0 -68
  670. package/src/core/primitives/text/__workshop__/colored.tsx +0 -30
  671. package/src/core/primitives/text/__workshop__/example.tsx +0 -39
  672. package/src/core/primitives/text/__workshop__/index.ts +0 -24
  673. package/src/core/primitives/text/__workshop__/opticalAlignment.tsx +0 -48
  674. package/src/core/primitives/text/index.ts +0 -1
  675. package/src/core/primitives/text/styles.ts +0 -74
  676. package/src/core/primitives/text/text.tsx +0 -89
  677. package/src/core/primitives/textArea/__workshop__/index.ts +0 -14
  678. package/src/core/primitives/textArea/__workshop__/plain.tsx +0 -50
  679. package/src/core/primitives/textArea/index.ts +0 -1
  680. package/src/core/primitives/textArea/textArea.tsx +0 -120
  681. package/src/core/primitives/textInput/__workshop__/clearButton.tsx +0 -30
  682. package/src/core/primitives/textInput/__workshop__/customValidity.tsx +0 -17
  683. package/src/core/primitives/textInput/__workshop__/index.ts +0 -44
  684. package/src/core/primitives/textInput/__workshop__/plain.tsx +0 -98
  685. package/src/core/primitives/textInput/__workshop__/readOnly.tsx +0 -9
  686. package/src/core/primitives/textInput/__workshop__/states.tsx +0 -53
  687. package/src/core/primitives/textInput/__workshop__/tones.tsx +0 -277
  688. package/src/core/primitives/textInput/__workshop__/typed.tsx +0 -23
  689. package/src/core/primitives/textInput/index.ts +0 -1
  690. package/src/core/primitives/textInput/textInput.test.tsx +0 -48
  691. package/src/core/primitives/textInput/textInput.tsx +0 -395
  692. package/src/core/primitives/tooltip/__workshop__/customPortal.tsx +0 -102
  693. package/src/core/primitives/tooltip/__workshop__/index.ts +0 -29
  694. package/src/core/primitives/tooltip/__workshop__/overflowingBoundary.tsx +0 -74
  695. package/src/core/primitives/tooltip/__workshop__/props.tsx +0 -107
  696. package/src/core/primitives/tooltip/__workshop__/resizableBoundary.tsx +0 -86
  697. package/src/core/primitives/tooltip/constants.ts +0 -23
  698. package/src/core/primitives/tooltip/index.ts +0 -2
  699. package/src/core/primitives/tooltip/tooltip.test.tsx +0 -452
  700. package/src/core/primitives/tooltip/tooltip.tsx +0 -495
  701. package/src/core/primitives/tooltip/tooltipCard.tsx +0 -109
  702. package/src/core/primitives/tooltip/tooltipDelayGroup/index.ts +0 -4
  703. package/src/core/primitives/tooltip/tooltipDelayGroup/tooltipDelayGroupContext.tsx +0 -11
  704. package/src/core/primitives/tooltip/tooltipDelayGroup/tooltipDelayGroupProvider.tsx +0 -57
  705. package/src/core/primitives/tooltip/tooltipDelayGroup/types.ts +0 -10
  706. package/src/core/primitives/tooltip/tooltipDelayGroup/useTooltipDelayGroup.ts +0 -13
  707. package/src/core/primitives/types.ts +0 -179
  708. package/src/core/styles/border/borderStyle.ts +0 -56
  709. package/src/core/styles/border/index.ts +0 -2
  710. package/src/core/styles/border/types.ts +0 -10
  711. package/src/core/styles/box/boxStyle.ts +0 -69
  712. package/src/core/styles/box/index.ts +0 -2
  713. package/src/core/styles/box/types.ts +0 -11
  714. package/src/core/styles/card/_cardColorStyle.ts +0 -108
  715. package/src/core/styles/card/index.ts +0 -1
  716. package/src/core/styles/flex/flexItemStyle.ts +0 -27
  717. package/src/core/styles/flex/flexStyle.ts +0 -70
  718. package/src/core/styles/flex/index.ts +0 -3
  719. package/src/core/styles/flex/types.ts +0 -25
  720. package/src/core/styles/focusRing/index.ts +0 -25
  721. package/src/core/styles/font/codeFontStyle.ts +0 -13
  722. package/src/core/styles/font/headingFontStyle.ts +0 -13
  723. package/src/core/styles/font/index.ts +0 -6
  724. package/src/core/styles/font/labelFontStyle.ts +0 -13
  725. package/src/core/styles/font/responsiveFont.ts +0 -103
  726. package/src/core/styles/font/textAlignStyle.ts +0 -19
  727. package/src/core/styles/font/textFontStyle.ts +0 -13
  728. package/src/core/styles/font/types.ts +0 -35
  729. package/src/core/styles/grid/gridItemStyle.ts +0 -82
  730. package/src/core/styles/grid/gridStyle.ts +0 -108
  731. package/src/core/styles/grid/index.ts +0 -3
  732. package/src/core/styles/grid/types.ts +0 -37
  733. package/src/core/styles/helpers.ts +0 -72
  734. package/src/core/styles/index.ts +0 -5
  735. package/src/core/styles/input/index.ts +0 -2
  736. package/src/core/styles/input/responsiveInputPaddingStyle.ts +0 -78
  737. package/src/core/styles/input/textInputStyle.ts +0 -263
  738. package/src/core/styles/internal.ts +0 -12
  739. package/src/core/styles/margin/index.ts +0 -2
  740. package/src/core/styles/margin/marginStyle.ts +0 -21
  741. package/src/core/styles/margin/marginsStyle.test.ts +0 -33
  742. package/src/core/styles/margin/types.ts +0 -9
  743. package/src/core/styles/padding/index.ts +0 -2
  744. package/src/core/styles/padding/paddingStyle.test.ts +0 -33
  745. package/src/core/styles/padding/paddingStyle.ts +0 -21
  746. package/src/core/styles/padding/types.ts +0 -12
  747. package/src/core/styles/radius/index.ts +0 -2
  748. package/src/core/styles/radius/radiusStyle.ts +0 -23
  749. package/src/core/styles/radius/types.ts +0 -8
  750. package/src/core/styles/shadow/index.ts +0 -2
  751. package/src/core/styles/shadow/shadowStyle.ts +0 -29
  752. package/src/core/styles/shadow/types.ts +0 -6
  753. package/src/core/styles/types.ts +0 -8
  754. package/src/core/theme/__workshop__/build/Root.tsx +0 -367
  755. package/src/core/theme/__workshop__/build/helpers.ts +0 -46
  756. package/src/core/theme/__workshop__/build/story.tsx +0 -465
  757. package/src/core/theme/__workshop__/canvas.tsx +0 -352
  758. package/src/core/theme/__workshop__/color.tsx +0 -62
  759. package/src/core/theme/__workshop__/debug/story.tsx +0 -408
  760. package/src/core/theme/__workshop__/index.ts +0 -39
  761. package/src/core/theme/__workshop__/layer.tsx +0 -78
  762. package/src/core/theme/__workshop__/nestedProvider.tsx +0 -15
  763. package/src/core/theme/index.ts +0 -5
  764. package/src/core/theme/theme.test.tsx +0 -73
  765. package/src/core/theme/themeColorProvider.tsx +0 -29
  766. package/src/core/theme/themeContext.ts +0 -10
  767. package/src/core/theme/themeProvider.tsx +0 -62
  768. package/src/core/theme/types.ts +0 -12
  769. package/src/core/theme/useRootTheme.ts +0 -17
  770. package/src/core/theme/useTheme.ts +0 -16
  771. package/src/core/types/avatar.ts +0 -14
  772. package/src/core/types/badge.ts +0 -12
  773. package/src/core/types/box.ts +0 -19
  774. package/src/core/types/button.ts +0 -21
  775. package/src/core/types/card.ts +0 -6
  776. package/src/core/types/component.ts +0 -32
  777. package/src/core/types/dialog.ts +0 -4
  778. package/src/core/types/flex.ts +0 -30
  779. package/src/core/types/grid.ts +0 -14
  780. package/src/core/types/gridItem.ts +0 -29
  781. package/src/core/types/index.ts +0 -15
  782. package/src/core/types/placement.ts +0 -18
  783. package/src/core/types/popover.ts +0 -4
  784. package/src/core/types/radius.ts +0 -4
  785. package/src/core/types/selectable.ts +0 -6
  786. package/src/core/types/text.ts +0 -4
  787. package/src/core/utils/arrow/arrow.tsx +0 -123
  788. package/src/core/utils/arrow/cmds.ts +0 -91
  789. package/src/core/utils/arrow/index.ts +0 -1
  790. package/src/core/utils/boundaryElement/__workshop__/index.ts +0 -14
  791. package/src/core/utils/boundaryElement/__workshop__/plain.tsx +0 -19
  792. package/src/core/utils/boundaryElement/boundaryElement.test.tsx +0 -100
  793. package/src/core/utils/boundaryElement/boundaryElementContext.ts +0 -7
  794. package/src/core/utils/boundaryElement/boundaryElementProvider.tsx +0 -24
  795. package/src/core/utils/boundaryElement/index.ts +0 -3
  796. package/src/core/utils/boundaryElement/types.ts +0 -7
  797. package/src/core/utils/boundaryElement/useBoundaryElement.ts +0 -26
  798. package/src/core/utils/conditionalWrapper/conditionalWrapper.tsx +0 -21
  799. package/src/core/utils/conditionalWrapper/index.ts +0 -1
  800. package/src/core/utils/elementQuery/__workshop__/customMedia.tsx +0 -30
  801. package/src/core/utils/elementQuery/__workshop__/index.ts +0 -14
  802. package/src/core/utils/elementQuery/elementQuery.tsx +0 -53
  803. package/src/core/utils/elementQuery/helpers.ts +0 -27
  804. package/src/core/utils/elementQuery/index.ts +0 -1
  805. package/src/core/utils/errorBoundary.tsx +0 -48
  806. package/src/core/utils/getElementRef.ts +0 -26
  807. package/src/core/utils/index.ts +0 -9
  808. package/src/core/utils/layer/__workshop__/_debug.tsx +0 -17
  809. package/src/core/utils/layer/__workshop__/index.ts +0 -24
  810. package/src/core/utils/layer/__workshop__/multipleRoots.tsx +0 -49
  811. package/src/core/utils/layer/__workshop__/nested.tsx +0 -98
  812. package/src/core/utils/layer/__workshop__/responsiveZOffset.tsx +0 -13
  813. package/src/core/utils/layer/getLayerContext.test.ts +0 -30
  814. package/src/core/utils/layer/getLayerContext.ts +0 -21
  815. package/src/core/utils/layer/index.ts +0 -4
  816. package/src/core/utils/layer/layer.test.tsx +0 -108
  817. package/src/core/utils/layer/layer.tsx +0 -98
  818. package/src/core/utils/layer/layerContext.ts +0 -7
  819. package/src/core/utils/layer/layerProvider.tsx +0 -111
  820. package/src/core/utils/layer/types.ts +0 -9
  821. package/src/core/utils/layer/useLayer.ts +0 -26
  822. package/src/core/utils/portal/__workshop__/index.ts +0 -14
  823. package/src/core/utils/portal/__workshop__/named.tsx +0 -63
  824. package/src/core/utils/portal/index.ts +0 -4
  825. package/src/core/utils/portal/portal.test.tsx +0 -103
  826. package/src/core/utils/portal/portal.ts +0 -32
  827. package/src/core/utils/portal/portalContext.ts +0 -31
  828. package/src/core/utils/portal/portalProvider.tsx +0 -47
  829. package/src/core/utils/portal/types.ts +0 -9
  830. package/src/core/utils/portal/usePortal.ts +0 -25
  831. package/src/core/utils/spanWithTextOverflow.tsx +0 -10
  832. package/src/core/utils/srOnly/index.ts +0 -1
  833. package/src/core/utils/srOnly/srOnly.tsx +0 -36
  834. package/src/core/utils/virtualList/__workshop__/changingProps.tsx +0 -36
  835. package/src/core/utils/virtualList/__workshop__/elementScroll.tsx +0 -24
  836. package/src/core/utils/virtualList/__workshop__/index.ts +0 -29
  837. package/src/core/utils/virtualList/__workshop__/infiniteList.tsx +0 -48
  838. package/src/core/utils/virtualList/__workshop__/windowScrolll.tsx +0 -22
  839. package/src/core/utils/virtualList/index.ts +0 -1
  840. package/src/core/utils/virtualList/virtualList.tsx +0 -200
  841. package/src/theme/build/_deprecated/color/_selectable/createSelectableTones.ts +0 -76
  842. package/src/theme/build/_deprecated/color/_solid/createSolidTones.ts +0 -54
  843. package/src/theme/build/_deprecated/color/button/createButtonModes.ts +0 -22
  844. package/src/theme/build/_deprecated/color/button/createButtonTones.ts +0 -55
  845. package/src/theme/build/_deprecated/color/card/createCardStates.ts +0 -60
  846. package/src/theme/build/_deprecated/color/color.test.ts +0 -63
  847. package/src/theme/build/_deprecated/color/defaults.ts +0 -390
  848. package/src/theme/build/_deprecated/color/factory.ts +0 -142
  849. package/src/theme/build/_deprecated/color/index.ts +0 -1
  850. package/src/theme/build/_deprecated/color/input/createInputModes.ts +0 -81
  851. package/src/theme/build/_deprecated/color/muted/createMuted.ts +0 -54
  852. package/src/theme/build/_deprecated/color/spot/createSpot.ts +0 -20
  853. package/src/theme/build/buildColorTheme.test.ts +0 -183
  854. package/src/theme/build/buildColorTheme.ts +0 -499
  855. package/src/theme/build/buildTheme.test.ts +0 -87
  856. package/src/theme/build/buildTheme.ts +0 -36
  857. package/src/theme/build/colorToken/colorToken.ts +0 -19
  858. package/src/theme/build/colorToken/compileColorToken.ts +0 -21
  859. package/src/theme/build/colorToken/index.ts +0 -2
  860. package/src/theme/build/colorToken/types.ts +0 -6
  861. package/src/theme/build/index.ts +0 -3
  862. package/src/theme/build/lib/color-fns/blend/index.ts +0 -3
  863. package/src/theme/build/lib/color-fns/blend/mix.ts +0 -21
  864. package/src/theme/build/lib/color-fns/blend/multiply.ts +0 -18
  865. package/src/theme/build/lib/color-fns/blend/screen.ts +0 -18
  866. package/src/theme/build/lib/color-fns/color-fns.test.ts +0 -68
  867. package/src/theme/build/lib/color-fns/contrastRatio.ts +0 -31
  868. package/src/theme/build/lib/color-fns/convert.ts +0 -150
  869. package/src/theme/build/lib/color-fns/index.ts +0 -6
  870. package/src/theme/build/lib/color-fns/parse.ts +0 -60
  871. package/src/theme/build/lib/color-fns/rgba.ts +0 -10
  872. package/src/theme/build/lib/color-fns/types.ts +0 -28
  873. package/src/theme/build/lib/isRecord.ts +0 -3
  874. package/src/theme/build/lib/lazy.ts +0 -30
  875. package/src/theme/build/lib/utils.ts +0 -19
  876. package/src/theme/build/merge.ts +0 -26
  877. package/src/theme/build/mixThemeColor.test.ts +0 -21
  878. package/src/theme/build/mixThemeColor.ts +0 -53
  879. package/src/theme/build/renderColorTheme.ts +0 -532
  880. package/src/theme/build/renderColorValue.ts +0 -85
  881. package/src/theme/build/resolveColorTokens.ts +0 -268
  882. package/src/theme/build/theme.test.ts +0 -27
  883. package/src/theme/config/helpers.ts +0 -55
  884. package/src/theme/config/index.ts +0 -4
  885. package/src/theme/config/system.ts +0 -115
  886. package/src/theme/config/tokens/color/index.ts +0 -1
  887. package/src/theme/config/tokens/color/types.ts +0 -133
  888. package/src/theme/config/tokens/index.ts +0 -4
  889. package/src/theme/config/tokens/parseTokenKey.test.ts +0 -64
  890. package/src/theme/config/tokens/parseTokenKey.ts +0 -67
  891. package/src/theme/config/tokens/parseTokenValue.test.ts +0 -42
  892. package/src/theme/config/tokens/parseTokenValue.ts +0 -133
  893. package/src/theme/config/tokens/types.ts +0 -53
  894. package/src/theme/config/types.ts +0 -46
  895. package/src/theme/defaults/colorPalette.ts +0 -5
  896. package/src/theme/defaults/colorTokens.ts +0 -648
  897. package/src/theme/defaults/config.ts +0 -84
  898. package/src/theme/defaults/fonts.ts +0 -227
  899. package/src/theme/getScopedTheme.ts +0 -98
  900. package/src/theme/index.ts +0 -5
  901. package/src/theme/system/avatar.ts +0 -14
  902. package/src/theme/system/color/_constants.ts +0 -45
  903. package/src/theme/system/color/_helpers.ts +0 -24
  904. package/src/theme/system/color/_system.ts +0 -40
  905. package/src/theme/system/color/avatar.ts +0 -15
  906. package/src/theme/system/color/badge.ts +0 -16
  907. package/src/theme/system/color/button.ts +0 -17
  908. package/src/theme/system/color/color.ts +0 -34
  909. package/src/theme/system/color/index.ts +0 -13
  910. package/src/theme/system/color/input.ts +0 -25
  911. package/src/theme/system/color/kbd.ts +0 -8
  912. package/src/theme/system/color/selectable.ts +0 -12
  913. package/src/theme/system/color/shadow.ts +0 -7
  914. package/src/theme/system/color/state.ts +0 -43
  915. package/src/theme/system/color/syntax.ts +0 -41
  916. package/src/theme/system/css.ts +0 -14
  917. package/src/theme/system/focusRing.ts +0 -7
  918. package/src/theme/system/font.ts +0 -52
  919. package/src/theme/system/index.ts +0 -11
  920. package/src/theme/system/input.ts +0 -33
  921. package/src/theme/system/layer.ts +0 -8
  922. package/src/theme/system/shadow.ts +0 -19
  923. package/src/theme/system/styles.ts +0 -13
  924. package/src/theme/system/theme.ts +0 -138
  925. package/src/theme/system/v0/avatar.ts +0 -10
  926. package/src/theme/system/v0/color/_generic.ts +0 -35
  927. package/src/theme/system/v0/color/_system.ts +0 -17
  928. package/src/theme/system/v0/color/base.ts +0 -21
  929. package/src/theme/system/v0/color/button.ts +0 -42
  930. package/src/theme/system/v0/color/card.ts +0 -19
  931. package/src/theme/system/v0/color/color.ts +0 -40
  932. package/src/theme/system/v0/color/index.ts +0 -11
  933. package/src/theme/system/v0/color/input.ts +0 -34
  934. package/src/theme/system/v0/color/muted.ts +0 -26
  935. package/src/theme/system/v0/color/selectable.ts +0 -31
  936. package/src/theme/system/v0/color/solid.ts +0 -26
  937. package/src/theme/system/v0/color/spot.ts +0 -13
  938. package/src/theme/system/v0/index.ts +0 -3
  939. package/src/theme/system/v0/input.ts +0 -23
  940. package/src/theme/versioning/getTheme_v2.ts +0 -57
  941. package/src/theme/versioning/index.ts +0 -5
  942. package/src/theme/versioning/is_v0.ts +0 -6
  943. package/src/theme/versioning/is_v2.ts +0 -6
  944. package/src/theme/versioning/themeColor_v0_v2.ts +0 -243
  945. package/src/theme/versioning/themeColor_v2_v2_9.ts +0 -49
  946. package/src/theme/versioning/v0_v2.ts +0 -94
  947. package/src/theme/versioning/v2_v0.ts +0 -135
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dom.js","names":[],"sources":["../../../src/kit/controls/rich-text/dom.ts"],"sourcesContent":["/**\n * RICH TEXT · DOM layer (V2 HEAD controls/rich-text/dom.ts). The field value is clean, semantic HTML; rich blocks are\n * \"islands\" while editing.\n *\n * Live DOM = the HTML, with every rich block swapped for a `div[data-rt-island=\"kind\"]` (contenteditable=false) that\n * React renders into through a portal. The island's model lives on the element (`el.__rt`).\n * Stored = `serialize()` swaps each island back for its static HTML (`renderStatic`). The static form is the markup\n * production's own renderer writes for the same block, so the host's ingest reads it back as that block.\n * Loading = `hydrate()` turns that markup back into islands, so a re-mount restores them.\n *\n * Only the blocks production stores are islands here. Each one's markup is what the host's codec renders the stored\n * block as and reads back (features/dock-v2/richTextCodec.ts); `data-extra` carries, opaque, whatever of the stored block\n * the editor does not edit, so nothing it holds is dropped by an edit elsewhere.\n * image `bcmsBlock` builtin:image: address, alt text, caption, alignment, size, link\n * (`<figure data-rt=\"image\" data-align data-size><a href><img src alt></a><figcaption>`)\n * table production's Portable Text table (rows of cells, a header row, header cells, and the V2 table's caption,\n * note, row groups and column groups), drawn with the kit's table editor (V2 TableBlock), stored as the markup\n * production's renderer writes (`<caption>`, `th[scope=colgroup data-group]`, a `<tbody data-key>` per row\n * group under a `th[scope=rowgroup]` row, `<figure data-rt=\"table\">…<p data-notes>` for the note; footnotes\n * fold into the note as `[1] …`, as production's ingest folds V2's). A cell's closing\n * footnote markers (`<sup data-footnote>`) ride the cell as written (`marks`). A table whose cells hold\n * other inline formatting the table value has no place for (a term, bold) is not an island: it stays\n * markup in the body, edited in place, so the formatting survives.\n * pullquote V2 article block (CPO D55), `<figure data-rt=\"pullquote\">` → a `pullQuote` block.\n * takeaways V2 article block (CPO D55), `<aside data-rt=\"takeaways\"><p data-title>…<ul><li>…` → a `keyTakeaways` block\n * {title?, points} (written in the text itself, V2 TakeawaysEditor).\n * callout `bcmsBlock` builtin:callout {tone, title, message}: `<div data-rt=\"callout\" data-callout><p data-title>…\n * <div data-body><p>…` (the message is plain text: paragraphs and line breaks)\n * toggle `bcmsBlock` builtin:toggle {title, body}: `<details data-rt=\"toggle\"><summary>…<div data-body><p>…`\n * video the `video` block {src, title}: `<div data-rt=\"video\" data-url data-title>`\n * file the `file` block {src, name, size}: `<div data-rt=\"file\" data-url data-name data-size>`\n * component `bcmsBlock` \"component\" {componentId, overrides, variant} (CPO D28): `<div data-rt=\"component\" data-ref\n * data-id data-name data-overrides data-variant>` — a linked instance of a project component, shown as a card.\n * A separate copy (V2 instances.ts `detach`) adds {detached, props, blocks, sourcePublishedAt}:\n * `data-detached=\"true\" data-props data-blocks data-source-published-at`, and carries no overrides.\n * A key the stored block holds is an attribute or element that is present; a key it lacks is absent, so an untouched\n * block reads back exactly as stored.\n * V2's gallery, embed, columns, footnotes, contents, related posts and author bio have no stored form in\n * production and are not offered.\n */\n\nimport { cellText, cellValue, emptyTable, isCellObject, isObjLike, normalizeTable, parseTableElement, tkey, type TableColumn, type TableGroup, type TableLink, type TableRow, type TableValue } from \"../../schema/table\";\n\nexport const esc = (s: string) => s.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\");\nexport const escAttr = (s: string) => esc(s).replace(/\"/g, \"&quot;\");\nlet seq = 0;\nexport const rid = (p = \"r\") => `${p}${Date.now().toString(36)}${(seq++).toString(36)}`;\n\n/* ── Island models ─────────────────────────────────────────────────── */\nexport type ImageAlign = \"full\" | \"center\" | \"left\" | \"right\";\nexport type ImageSize = \"s\" | \"m\" | \"l\" | \"full\";\nexport const IMAGE_ALIGNS: readonly ImageAlign[] = [\"full\", \"center\", \"left\", \"right\"];\nexport const IMAGE_SIZES: readonly ImageSize[] = [\"s\", \"m\", \"l\", \"full\"];\n/** Every optional key is absent when the stored block lacks it (see the header). */\nexport interface ImageModel {\n src: string;\n /** absent only on a stored block that never had one (every new image has alt text, empty or not) */\n alt?: string;\n caption?: string;\n align?: ImageAlign;\n size?: ImageSize;\n href?: string;\n /** the stored block's other keys, opaque to the editor */\n extra?: string;\n}\n/** A table island IS the kit's table value (V2 TableModel); only what production's table keeps is stored (see above). */\nexport type TableModel = TableValue;\n/** V2 PullQuoteModel (article.ts). */\nexport interface PullQuoteModel {\n quote: string;\n name: string;\n role: string;\n link: string;\n}\n/** V2 TakeawaysModel (article.ts): the title over the list and one plain string per point. */\nexport interface TakeawaysModel {\n title: string;\n points: string[];\n}\nexport type CalloutTone = \"info\" | \"tip\" | \"warning\";\nexport const CALLOUT_TONES: readonly CalloutTone[] = [\"info\", \"tip\", \"warning\"];\nexport interface CalloutModel {\n /** the stored tone, as written (the editor offers info, tip and warning) */\n tone?: string;\n title?: string;\n /** plain text: paragraphs split by a blank line, line breaks kept */\n body?: string;\n extra?: string;\n}\nexport interface ToggleModel {\n title?: string;\n body?: string;\n extra?: string;\n}\nexport interface VideoModel {\n url?: string;\n title?: string;\n extra?: string;\n}\nexport interface FileModel {\n url?: string;\n name?: string;\n size?: number;\n extra?: string;\n}\n/** A linked instance of a project component (CPO D28): its library id, its own id, its name and its overrides. */\nexport interface ComponentModel {\n /** the component it links to (`fields.componentId`) */\n ref?: string;\n /** this instance (the block's key) */\n id: string;\n /** the component's name when it was placed (`schemaLabel`) */\n name?: string;\n /** the fields this instance overrides, as stored JSON */\n overrides?: string;\n /** the layout this instance draws the component in (V2's per-instance variant, `fields.variant`) */\n variant?: string;\n /** V2 `detached`: a separate copy that no longer follows the component (`fields.detached`) */\n detached?: boolean;\n /** a separate copy's values as readers see them, as stored JSON (V2 `props`, `fields.props`) */\n props?: string;\n /** a separate copy's frozen block tree, as stored JSON (`fields.blocks`); the editor never edits it */\n blocks?: string;\n /** the version of the component the copy was taken from (`fields.sourcePublishedAt`) */\n sourcePublishedAt?: string;\n extra?: string;\n}\nexport interface IslandModels {\n image: ImageModel;\n table: TableModel;\n pullquote: PullQuoteModel;\n takeaways: TakeawaysModel;\n callout: CalloutModel;\n toggle: ToggleModel;\n video: VideoModel;\n file: FileModel;\n component: ComponentModel;\n}\nexport type IslandKind = keyof IslandModels;\nexport const ISLAND_KINDS: IslandKind[] = [\"image\", \"table\", \"pullquote\", \"takeaways\", \"callout\", \"toggle\", \"video\", \"file\", \"component\"];\nexport type IslandEl = HTMLElement & {\n __rt?: IslandModels[IslandKind];\n __rtFocus?: boolean;\n /** the mounted island's own setter: restores a model from the editor's history (undo / redo) */\n __rtSet?: (m: IslandModels[IslandKind]) => void;\n};\n\nexport function defaultModel<K extends IslandKind>(kind: K, extra?: Partial<IslandModels[K]>): IslandModels[K] {\n const base: { [P in IslandKind]: () => IslandModels[P] } = {\n image: () => ({ src: \"\", alt: \"\" }),\n table: () => emptyTable(3, 2),\n pullquote: () => ({ quote: \"\", name: \"\", role: \"\", link: \"\" }),\n takeaways: () => ({ title: \"Key takeaways\", points: [\"\"] }),\n callout: () => ({ tone: \"info\", title: \"\", body: \"\" }),\n toggle: () => ({ title: \"\", body: \"\" }),\n video: () => ({ url: \"\" }),\n file: () => ({ url: \"\", name: \"\" }),\n component: () => ({ id: rid(\"ci\"), overrides: \"{}\" }),\n };\n if (kind === \"table\") return { ...base.table(), ...(extra ?? {}), id: tkey(\"tbl\") } as IslandModels[K];\n return { ...base[kind](), ...(extra ?? {}) } as IslandModels[K];\n}\n\n/** Deep copy (Duplicate). A copied table or component instance gets its own id. */\nexport const cloneModel = <K extends IslandKind>(kind: K, m: IslandModels[K]): IslandModels[K] => {\n const c = JSON.parse(JSON.stringify(m)) as IslandModels[K];\n if (kind === \"table\") (c as TableModel).id = tkey(\"tbl\");\n if (kind === \"component\") (c as ComponentModel).id = rid(\"ci\");\n return c;\n};\n\n/* ── plain text ⇄ paragraphs (a callout's message, a toggle's body) ── */\n/** \"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. */\nexport const textToParas = (s: string) =>\n s\n .split(\"\\n\\n\")\n .map((p) => `<p>${esc(p).replace(/\\n/g, \"<br>\")}</p>`)\n .join(\"\");\n/** The inverse of textToParas: each paragraph's text, its line breaks kept. */\nexport function parasToText(el: Element): string {\n const ps = Array.from(el.children).filter((c) => c.tagName === \"P\");\n const text = (n: Element) => {\n const c = n.cloneNode(true) as Element;\n c.querySelectorAll(\"br\").forEach((br) => br.replaceWith(\"\\n\"));\n return (c.textContent ?? \"\").replace(/\\u200b/g, \"\");\n };\n return ps.length ? ps.map(text).join(\"\\n\\n\") : text(el);\n}\n\n/* ── Static HTML (stored) ──────────────────────────────────────────── */\n/** An image is `<figure><img src alt></figure>`: production's renderer writes exactly this, and its ingest reads it. */\nconst xAttr = (extra?: string) => (extra ? ` data-extra=\"${escAttr(extra)}\"` : \"\");\nconst attr = (name: string, v: string | number | undefined) => (v === undefined ? \"\" : ` ${name}=\"${escAttr(String(v))}\"`);\n\nexport function renderStatic(kind: IslandKind, model: unknown): string {\n switch (kind) {\n case \"image\": {\n const m = model as ImageModel;\n const img = m.src ? `<img src=\"${escAttr(m.src)}\"${attr(\"alt\", m.alt)}>` : \"\";\n const linked = img && m.href !== undefined ? `<a href=\"${escAttr(m.href)}\">${img}</a>` : img;\n const cap = m.caption !== undefined ? `<figcaption>${esc(m.caption)}</figcaption>` : \"\";\n return `<figure data-rt=\"image\"${attr(\"data-align\", m.align)}${attr(\"data-size\", m.size)}${xAttr(m.extra)}>${linked}${cap}</figure>`;\n }\n case \"table\":\n return renderStoredTable(model as TableModel);\n case \"pullquote\": {\n // V2 article.ts renderArticle(\"pullquote\")\n const m = model as PullQuoteModel;\n const name = m.name ? (m.link ? `<a href=\"${escAttr(m.link)}\" data-name>${esc(m.name)}</a>` : `<span data-name>${esc(m.name)}</span>`) : \"\";\n const role = m.role ? `<span data-role>${esc(m.role)}</span>` : \"\";\n const cap = name || role ? `<figcaption>${name}${name && role ? \", \" : \"\"}${role}</figcaption>` : \"\";\n return `<figure data-rt=\"pullquote\"><blockquote${m.link ? ` cite=\"${escAttr(m.link)}\"` : \"\"}><p>${esc(m.quote)}</p></blockquote>${cap}</figure>`;\n }\n case \"takeaways\": {\n // V2 article.ts renderArticle(\"takeaways\")\n const m = model as TakeawaysModel;\n const pts = m.points.map((p) => p.trim()).filter(Boolean);\n return `<aside data-rt=\"takeaways\">${m.title ? `<p data-title>${esc(m.title)}</p>` : \"\"}<ul>${pts.map((p) => `<li>${esc(p)}</li>`).join(\"\")}</ul></aside>`;\n }\n case \"callout\": {\n const m = model as CalloutModel;\n const title = m.title !== undefined ? `<p data-title=\"true\">${esc(m.title)}</p>` : \"\";\n const body = m.body !== undefined ? `<div data-body=\"true\">${textToParas(m.body)}</div>` : \"\";\n return `<div data-rt=\"callout\"${attr(\"data-callout\", m.tone)}${xAttr(m.extra)}>${title}${body}</div>`;\n }\n case \"toggle\": {\n const m = model as ToggleModel;\n const title = m.title !== undefined ? `<summary>${esc(m.title)}</summary>` : \"\";\n const body = m.body !== undefined ? `<div data-body=\"true\">${textToParas(m.body)}</div>` : \"\";\n return `<details data-rt=\"toggle\"${xAttr(m.extra)}>${title}${body}</details>`;\n }\n case \"video\": {\n const m = model as VideoModel;\n return `<div data-rt=\"video\"${attr(\"data-url\", m.url)}${attr(\"data-title\", m.title)}${xAttr(m.extra)}>${m.url ? `<a href=\"${escAttr(m.url)}\">${esc(m.title || m.url)}</a>` : \"\"}</div>`;\n }\n case \"file\": {\n const m = model as FileModel;\n const link = m.url && m.name ? `<a href=\"${escAttr(m.url)}\" download>${esc(m.name)}</a>` : \"\";\n return `<div data-rt=\"file\"${attr(\"data-url\", m.url)}${attr(\"data-name\", m.name)}${attr(\"data-size\", m.size)}${xAttr(m.extra)}>${link}</div>`;\n }\n case \"component\": {\n const m = model as ComponentModel;\n const label = m.name || \"Component\";\n const copy = m.detached ? ` data-detached=\"true\"${attr(\"data-props\", m.props)}${attr(\"data-blocks\", m.blocks)}${attr(\"data-source-published-at\", m.sourcePublishedAt)}` : \"\";\n return `<div data-rt=\"component\"${attr(\"data-ref\", m.ref)} data-id=\"${escAttr(m.id)}\"${attr(\"data-name\", m.name)}${attr(\"data-overrides\", m.overrides)}${attr(\"data-variant\", m.variant)}${copy}${xAttr(m.extra)}>⧉&nbsp;${esc(label)} · ${m.detached ? \"detached copy\" : \"component\"}</div>`;\n }\n }\n}\n\n/* The V2 table's group rows, read as production's ingest reads them (@bettercms-ai/richtext ingest.ts). */\nconst words = (el: Element | null | undefined) => (el?.textContent ?? \"\").replace(/\\s+/g, \" \").trim();\nconst scopeIs = (c: Element, scope: string) => c.tagName === \"TH\" && (c.getAttribute(\"scope\") ?? \"\").toLowerCase() === scope;\n/** In `<thead>`: a `th[scope=colgroup]`, every other cell an empty `<td>`. A site's own two-row header stays rows. */\nconst isColumnGroupRow = (tr: HTMLTableRowElement) =>\n tr.parentElement?.tagName === \"THEAD\" &&\n Array.from(tr.cells).some((c) => scopeIs(c, \"colgroup\")) &&\n Array.from(tr.cells).every((c) => scopeIs(c, \"colgroup\") || (c.tagName === \"TD\" && !words(c)));\n/**\n * One `th[scope=rowgroup]` and nothing else, OPENING its own `<tbody>` with a body row after it (what production and\n * V2 write). A site's own `scope=rowgroup` row anywhere else stays a row, as production's ingest keeps it.\n */\nconst isRowGroupRow = (tr: HTMLTableRowElement) => {\n const body = tr.parentElement;\n if (tr.cells.length !== 1 || !scopeIs(tr.cells[0], \"rowgroup\") || body?.tagName !== \"TBODY\") return false;\n const rows = Array.from(body.children).filter((r) => r.tagName === \"TR\");\n return rows[0] === tr && rows.length > 1;\n};\nconst KEY = /^[A-Za-z0-9-]{1,32}$/;\n\n/**\n * Production's table markup → the table value, cell for cell (renderStoredTable's inverse): the plain `<table>`, or\n * the `<figure data-rt=\"table\">` around one with its note. The V2 reader (parseTableElement) is not used here: it reads\n * a one-column row as a row-group heading and a caption-less grid by guesses that a stored table never meant.\n */\nexport function parseStoredTable(src: Element): TableModel {\n const fig = src.tagName === \"FIGURE\" ? src : null;\n const table = fig ? fig.querySelector(\":scope > table\")! : src;\n const t = emptyTable(0, 0);\n const trs = Array.from(table.querySelectorAll<HTMLTableRowElement>(\":scope > thead > tr, :scope > tbody > tr, :scope > tfoot > tr, :scope > tr\"));\n const groupRow = trs.find(isColumnGroupRow);\n const grid = trs.filter((tr) => tr !== groupRow && !isRowGroupRow(tr));\n const head = grid.filter((tr) => tr.parentElement?.tagName === \"THEAD\");\n const body = grid.filter((tr) => tr.parentElement?.tagName !== \"THEAD\");\n const width = Math.max(1, ...grid.map((tr) => tr.cells.length));\n const headCells = head.length ? Array.from(head[head.length - 1].cells) : [];\n t.headerRow = head.length > 0;\n t.headerColumn = body.length > 0 && body.every((tr) => tr.cells[0]?.tagName === \"TH\");\n t.caption = words(table.querySelector(\":scope > caption\"));\n t.columns = Array.from({ length: width }, (_, i) => ({ _key: tkey(\"c\"), label: words(headCells[i]), type: \"text\" as const }));\n const cellOf = (cell: HTMLTableCellElement | undefined): TableRow[\"cells\"][string] => {\n if (!cell) return \"\";\n const { rest: c, marks } = splitMarks(cell);\n const text = words(c);\n const a = c.children.length === 1 && c.firstElementChild?.tagName === \"A\" && c.firstElementChild.textContent?.trim() === text ? c.firstElementChild : null;\n const value = a ? { label: text, href: a.getAttribute(\"href\") ?? \"\" } : text;\n return marks ? { value, marks } : value;\n };\n // A group's key rides the markup (`th[data-group]`, `<tbody data-key>`), so a save keeps it; the same key met again\n // (a group split by a loose row or column) is the same group.\n const groupOf = (list: TableGroup[], own: string | null, prefix: string, label: string): TableGroup => {\n const k = (own ?? \"\").trim();\n const found = k ? list.find((g) => g._key === k) : undefined;\n if (found) return found;\n const g = { _key: k && k.length <= 64 && !list.some((x) => x._key === k) ? k : tkey(prefix), label };\n list.push(g);\n return g;\n };\n // column groups: the columns each `th[scope=colgroup]` spans\n if (groupRow) {\n const groups: TableGroup[] = [];\n let at = 0;\n for (const c of Array.from(groupRow.cells)) {\n const span = Math.max(1, c.colSpan || 1);\n if (c.tagName === \"TH\") {\n const g = groupOf(groups, c.getAttribute(\"data-group\"), \"g\", words(c));\n for (let i = at; i < at + span && i < width; i++) t.columns[i].group = g._key;\n }\n at += span;\n }\n t.columnGroups = groups;\n }\n // row groups: a label row opens a group for the rows after it in its own <tbody>\n const rowGroups: TableGroup[] = [];\n let current: { key: string; body: Element | null } | undefined;\n t.rows = [];\n for (const tr of trs) {\n if (tr === groupRow || tr.parentElement?.tagName === \"THEAD\") continue;\n if (isRowGroupRow(tr)) {\n const g = groupOf(rowGroups, tr.parentElement?.getAttribute(\"data-key\") ?? null, \"rg\", words(tr.cells[0]));\n current = { key: g._key, body: tr.parentElement };\n continue;\n }\n if (current && current.body !== tr.parentElement) current = undefined;\n t.rows.push({ _key: tkey(\"r\"), cells: Object.fromEntries(t.columns.map((col, i) => [col._key, cellOf(tr.cells[i])])), ...(current ? { group: current.key } : {}) });\n }\n if (rowGroups.length) t.rowGroups = rowGroups;\n const note = fig?.querySelector(\":scope > [data-notes]\");\n // whitespace collapsed, as production's ingest reads it: the note renders as one paragraph\n const notes = words(note);\n if (notes) t.notes = notes;\n // the stored table's key rides the note's id (`<key>-notes`), so a save keeps it\n const own = (note?.getAttribute(\"id\") ?? table.getAttribute(\"aria-describedby\") ?? \"\").replace(/-notes$/, \"\");\n if (KEY.test(own)) t.id = own;\n // a link cell's column is a link column, so the editor draws (and the renderer writes) the link\n t.columns.forEach((col) => {\n const vals = t.rows.map((r) => r.cells[col._key]).filter((v) => v !== \"\");\n if (vals.length && vals.every((v) => isObjLike(v))) col.type = \"link\";\n });\n return t;\n}\n\n/**\n * The table as production's renderer writes a Portable Text table (@bettercms-ai/richtext html.ts tableHtml): a header\n * row in <thead>, header cells of the first column as <th>, every cell its text (a link cell its link). A caption, a\n * note or a group adds what that renderer writes for it, in the order the rows are held (an unedited stored table\n * 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\n * and is not written, as production's renderer writes none.\n */\nexport function renderStoredTable(input: TableModel): string {\n const t = normalizeTable(input);\n const cols = t.columns;\n const cell = (row: TableRow, c: TableColumn) => {\n const raw = row.cells[c._key];\n const v = cellValue(raw);\n const text = esc(cellText(c, row, raw));\n const marks = isCellObject(raw) && typeof raw.marks === \"string\" ? raw.marks : \"\";\n return (isObjLike(v) && typeof (v as TableLink).href === \"string\" && (v as TableLink).href ? `<a href=\"${escAttr((v as TableLink).href)}\">${text}</a>` : text) + marks;\n };\n const rowHtml = (row: TableRow) => `<tr>${cols.map((c, i) => (i === 0 && t.headerColumn ? `<th>${cell(row, c)}</th>` : `<td>${cell(row, c)}</td>`)).join(\"\")}</tr>`;\n const span = (name: string, n: number) => (n > 1 ? ` ${name}=\"${n}\"` : \"\");\n const colLabels = new Map((t.columnGroups ?? []).map((g) => [g._key, String(g.label ?? \"\")]));\n const rowLabels = new Map((t.rowGroups ?? []).map((g) => [g._key, String(g.label ?? \"\")]));\n const runs = <T,>(items: T[], keyOf: (x: T) => string | undefined) => {\n const out: { key?: string; items: T[] }[] = [];\n for (const x of items) {\n const key = keyOf(x);\n const last = out[out.length - 1];\n if (last && last.key === key) last.items.push(x);\n else out.push({ key, items: [x] });\n }\n return out.some((r) => r.key !== undefined) ? out : [];\n };\n const colRuns = runs(cols, (c) => (c.group && colLabels.has(c.group) ? c.group : undefined));\n const rowRuns = runs(t.rows, (r) => (r.group && rowLabels.has(r.group) ? r.group : undefined));\n const caption = t.caption.trim();\n const notes = [(t.notes ?? \"\").trim(), ...(t.footnotes ?? []).map((f, i) => (f.text.trim() ? `[${i + 1}] ${f.text.trim()}` : \"\"))].filter(Boolean).join(\" \");\n if (!caption && !notes && !colRuns.length && !rowRuns.length) {\n const out: string[] = [\"<table>\"];\n if (t.headerRow) out.push(`<thead><tr>${cols.map((c) => `<th>${esc(c.label)}</th>`).join(\"\")}</tr></thead>`);\n out.push(`<tbody>${t.rows.map(rowHtml).join(\"\")}</tbody></table>`);\n return out.join(\"\");\n }\n const notesId = notes ? `${t.id}-notes` : \"\";\n const out: string[] = [`<table${notesId ? ` aria-describedby=\"${escAttr(notesId)}\"` : \"\"}>`];\n if (caption) out.push(`<caption>${esc(caption)}</caption>`);\n out.push(colRuns.map((r) => `<colgroup${span(\"span\", r.items.length)}></colgroup>`).join(\"\"));\n const groupRow = colRuns.length\n ? `<tr>${colRuns.map((r) => (r.key === undefined ? \"<td></td>\".repeat(r.items.length) : `<th scope=\"colgroup\"${span(\"colspan\", r.items.length)} data-group=\"${escAttr(r.key)}\">${esc(colLabels.get(r.key)!)}</th>`)).join(\"\")}</tr>`\n : \"\";\n if (groupRow || t.headerRow) out.push(`<thead>${groupRow}${t.headerRow ? `<tr>${cols.map((c) => `<th>${esc(c.label)}</th>`).join(\"\")}</tr>` : \"\"}</thead>`);\n if (rowRuns.length)\n for (const r of rowRuns)\n out.push(`<tbody${r.key === undefined ? \"\" : ` data-key=\"${escAttr(r.key)}\"`}>${r.key === undefined ? \"\" : `<tr><th scope=\"rowgroup\"${span(\"colspan\", cols.length)}>${esc(rowLabels.get(r.key)!)}</th></tr>`}${r.items.map(rowHtml).join(\"\")}</tbody>`);\n else if (t.rows.length) out.push(`<tbody>${t.rows.map(rowHtml).join(\"\")}</tbody>`);\n out.push(\"</table>\");\n const html = out.join(\"\");\n return notes ? `<figure data-rt=\"table\">${html}<p data-notes id=\"${escAttr(notesId)}\">${esc(notes)}</p></figure>` : html;\n}\n\n/* ── Detect + parse (static HTML → model) ──────────────────────────── */\n/** The footnote markers closing a cell (`<sup data-footnote>` holding only text), and the cell without them. */\nfunction splitMarks(c: Element): { rest: Element; marks: string } {\n const rest = c.cloneNode(true) as Element;\n const marks: string[] = [];\n for (let n = rest.lastChild; n; n = rest.lastChild) {\n if (n.nodeType === 3 && !(n.textContent ?? \"\").trim() && marks.length) n.remove();\n else if (n.nodeType === 1 && (n as Element).tagName === \"SUP\" && (n as Element).hasAttribute(\"data-footnote\") && !(n as Element).children.length) {\n marks.unshift((n as Element).outerHTML);\n n.remove();\n } else break;\n }\n return { rest, marks: marks.join(\"\") };\n}\n/** A cell the table value can hold: text, line breaks, or one link around its text, then any footnote markers. */\nconst plainCell = (cell: Element) => {\n const c = splitMarks(cell).rest;\n return (\n Array.from(c.childNodes).every((n) => n.nodeType === 3 || (n.nodeType === 1 && (n as Element).tagName === \"BR\")) ||\n (c.children.length === 1 && c.firstElementChild!.tagName === \"A\" && c.firstElementChild!.children.length === 0 && (c.textContent ?? \"\").trim() === (c.firstElementChild!.textContent ?? \"\").trim())\n );\n};\n\nexport function detectKind(el: Element): IslandKind | null {\n const rt = el.getAttribute(\"data-rt\");\n if (rt === \"table\") return el.tagName === \"TABLE\" && !Array.from(el.querySelectorAll(\"td,th\")).every(plainCell) ? null : \"table\";\n if (rt && (ISLAND_KINDS as string[]).includes(rt)) return rt as IslandKind;\n // a quote with an attribution is a pull quote (V2 detectArticle; legacy: <blockquote><p>…</p><cite>…</cite></blockquote>)\n if (el.tagName === \"BLOCKQUOTE\" && el.querySelector(\":scope > cite\")) return \"pullquote\";\n if (el.tagName === \"TABLE\") return Array.from(el.querySelectorAll(\"td,th\")).every(plainCell) ? \"table\" : null;\n if (el.tagName === \"FIGURE\" && el.querySelector(\":scope > table, :scope > .bt-scroll > table\")) return \"table\";\n // a figure that is only an image (optionally linked, optionally captioned)\n if (el.tagName === \"FIGURE\") {\n const kids = Array.from(el.children);\n const media = kids.filter((k) => k.tagName !== \"FIGCAPTION\");\n const m = media[0];\n if (media.length === 1 && kids.length - media.length <= 1 && (m.tagName === \"IMG\" || (m.tagName === \"A\" && m.children.length === 1 && m.firstElementChild!.tagName === \"IMG\"))) return \"image\";\n }\n return null;\n}\n\nconst attrOf = (el: Element, name: string) => (el.hasAttribute(name) ? el.getAttribute(name)! : undefined);\nconst oneOf = <T extends string>(list: readonly T[], v: string | undefined): T | undefined => (v !== undefined && (list as readonly string[]).includes(v) ? (v as T) : undefined);\n\nexport function parseIsland(kind: IslandKind, el: HTMLElement): IslandModels[IslandKind] {\n switch (kind) {\n case \"image\": {\n const img = el.querySelector(\"img\");\n const a = img?.parentElement?.tagName === \"A\" ? img.parentElement : null;\n const cap = el.querySelector(\":scope > figcaption\");\n const m: ImageModel = { src: img?.getAttribute(\"src\") ?? \"\" };\n if (img?.hasAttribute(\"alt\")) m.alt = img.getAttribute(\"alt\")!;\n if (cap) m.caption = (cap.textContent ?? \"\").replace(/\\u200b/g, \"\");\n const align = oneOf(IMAGE_ALIGNS, attrOf(el, \"data-align\"));\n const size = oneOf(IMAGE_SIZES, attrOf(el, \"data-size\"));\n if (align) m.align = align;\n if (size) m.size = size;\n if (a) m.href = a.getAttribute(\"href\") ?? \"\";\n const extra = attrOf(el, \"data-extra\");\n if (extra) m.extra = extra;\n return m;\n }\n case \"table\":\n // production's own figure holds its <table> directly; V2's (pasted) wraps it in a scroll region\n if (el.matches(\"figure[data-rt=table]\")) return el.querySelector(\":scope > table\") ? parseStoredTable(el) : parseTableElement(el);\n return parseStoredTable(el.matches(\"table\") ? el : el.querySelector(\"table\")!);\n case \"pullquote\": {\n // V2 article.ts parseArticle(\"pullquote\"): a legacy pull quote IS the <blockquote> (no <figure> around it)\n const text = (n: Element | null) => (n?.textContent ?? \"\").replace(/\\s+/g, \" \").trim();\n const bq = el.matches(\"blockquote\") ? el : el.querySelector(\"blockquote\");\n const cap = el.querySelector(\"figcaption\");\n const nameEl = cap?.querySelector(\"[data-name]\") ?? el.querySelector(\"blockquote > cite, cite\");\n let role = text(cap?.querySelector(\"[data-role]\") ?? null);\n // legacy <cite>Name, role</cite>\n let name = text(nameEl);\n if (!cap && name.includes(\",\")) [name, role] = [name.slice(0, name.indexOf(\",\")).trim(), name.slice(name.indexOf(\",\") + 1).trim()];\n const quoteEl = bq?.cloneNode(true) as HTMLElement | undefined;\n quoteEl?.querySelectorAll(\"cite\").forEach((c) => c.remove());\n return { quote: text(quoteEl ?? null), name, role, link: bq?.getAttribute(\"cite\") ?? nameEl?.getAttribute(\"href\") ?? \"\" };\n }\n case \"takeaways\": {\n // V2 article.ts parseArticle(\"takeaways\"): an empty list still holds a line to type in\n const text = (n: Element | null) => (n?.textContent ?? \"\").replace(/\\s+/g, \" \").trim();\n const pts = Array.from(el.querySelectorAll(\"li\")).map((li) => text(li));\n return { title: text(el.querySelector(\"[data-title]\")), points: pts.length ? pts : [\"\"] };\n }\n case \"callout\": {\n const title = el.querySelector(\":scope > [data-title]\");\n const body = el.querySelector(\":scope > [data-body]\");\n const m: CalloutModel = {};\n const tone = attrOf(el, \"data-callout\");\n if (tone !== undefined) m.tone = tone;\n if (title) m.title = (title.textContent ?? \"\").replace(/\\u200b/g, \"\");\n if (body) m.body = parasToText(body);\n const extra = attrOf(el, \"data-extra\");\n if (extra) m.extra = extra;\n return m;\n }\n case \"toggle\": {\n const title = el.querySelector(\":scope > summary\");\n const body = el.querySelector(\":scope > [data-body]\");\n const m: ToggleModel = {};\n if (title) m.title = (title.textContent ?? \"\").replace(/\\u200b/g, \"\");\n if (body) m.body = parasToText(body);\n const extra = attrOf(el, \"data-extra\");\n if (extra) m.extra = extra;\n return m;\n }\n case \"video\": {\n const m: VideoModel = {};\n const url = attrOf(el, \"data-url\");\n const title = attrOf(el, \"data-title\");\n if (url !== undefined) m.url = url;\n if (title !== undefined) m.title = title;\n const extra = attrOf(el, \"data-extra\");\n if (extra) m.extra = extra;\n return m;\n }\n case \"file\": {\n const m: FileModel = {};\n const url = attrOf(el, \"data-url\");\n const name = attrOf(el, \"data-name\");\n const size = attrOf(el, \"data-size\");\n if (url !== undefined) m.url = url;\n if (name !== undefined) m.name = name;\n if (size !== undefined && Number.isFinite(Number(size))) m.size = Number(size);\n const extra = attrOf(el, \"data-extra\");\n if (extra) m.extra = extra;\n return m;\n }\n case \"component\": {\n // V2 markup: data-ref is the library component, data-id this instance; a legacy one names only data-block\n const m: ComponentModel = { id: attrOf(el, \"data-id\") || rid(\"ci\") };\n const ref = attrOf(el, \"data-ref\") ?? attrOf(el, \"data-block\");\n const name = attrOf(el, \"data-name\");\n const overrides = attrOf(el, \"data-overrides\");\n if (ref !== undefined) m.ref = ref;\n if (name !== undefined) m.name = name;\n if (overrides !== undefined) m.overrides = overrides;\n const variant = attrOf(el, \"data-variant\");\n if (variant !== undefined) m.variant = variant;\n if (el.getAttribute(\"data-detached\") === \"true\") {\n m.detached = true;\n const props = attrOf(el, \"data-props\");\n const blocks = attrOf(el, \"data-blocks\");\n const at = attrOf(el, \"data-source-published-at\");\n if (props !== undefined) m.props = props;\n if (blocks !== undefined) m.blocks = blocks;\n if (at !== undefined) m.sourcePublishedAt = at;\n }\n const extra = attrOf(el, \"data-extra\");\n if (extra) m.extra = extra;\n return m;\n }\n }\n}\n\nexport function createIsland<K extends IslandKind>(kind: K, model: IslandModels[K]): IslandEl {\n const el = document.createElement(\"div\") as IslandEl;\n el.setAttribute(\"data-rt-island\", kind);\n el.setAttribute(\"contenteditable\", \"false\");\n el.__rt = model;\n return el;\n}\n\n/** Static block HTML → islands (top level only). Keeps a writable line after a trailing island or rule. */\nexport function hydrate(root: HTMLElement) {\n for (const ch of Array.from(root.children)) {\n if (ch.hasAttribute(\"data-rt-island\")) continue;\n const k = detectKind(ch);\n if (!k) continue;\n ch.replaceWith(createIsland(k, parseIsland(k, ch as HTMLElement)));\n }\n // loose top-level inline content → a paragraph (a single-paragraph field stores its text inline, with no <p>)\n let run: Node[] = [];\n const flush = (before: Node | null) => {\n if (run.some((n) => (n.textContent ?? \"\").trim() || (n.nodeType === 1 && (n as Element).tagName !== \"BR\"))) {\n const p = document.createElement(\"p\");\n root.insertBefore(p, before);\n run.forEach((n) => p.append(n));\n } else run.forEach((n) => n.parentNode === root && n.nodeType === 3 && root.removeChild(n));\n run = [];\n };\n for (const n of Array.from(root.childNodes)) {\n const block = n.nodeType === 1 && (BLOCK_TAGS.has((n as Element).tagName) || (n as Element).hasAttribute(\"data-rt-island\"));\n if (block) flush(n);\n else if (n.nodeType === 1 || n.nodeType === 3) run.push(n);\n }\n flush(null);\n if (!root.firstElementChild) root.innerHTML = \"<p><br></p>\";\n const last = root.lastElementChild;\n if (last && (last.hasAttribute(\"data-rt-island\") || last.tagName === \"HR\")) {\n const p = document.createElement(\"p\");\n p.innerHTML = \"<br>\";\n root.append(p);\n }\n}\n\nconst BLOCK_TAGS = new Set([\"P\", \"H1\", \"H2\", \"H3\", \"H4\", \"H5\", \"H6\", \"BLOCKQUOTE\", \"PRE\", \"UL\", \"OL\", \"HR\", \"FIGURE\", \"TABLE\", \"DIV\", \"DETAILS\", \"SECTION\", \"ASIDE\", \"NAV\"]);\nconst isEmptyP = (el: Element) => el.tagName === \"P\" && (el.innerHTML === \"\" || el.innerHTML === \"<br>\");\n\n/** Live DOM → stored HTML. */\nexport function serialize(root: HTMLElement): string {\n const clone = root.cloneNode(true) as HTMLElement;\n const live = Array.from(root.children);\n Array.from(clone.children).forEach((c, i) => {\n if (!c.hasAttribute(\"data-rt-island\")) return;\n const l = live[i] as IslandEl;\n const kind = c.getAttribute(\"data-rt-island\") as IslandKind;\n const model = l.__rt;\n if (!model) return c.remove();\n const tpl = document.createElement(\"template\");\n tpl.innerHTML = renderStatic(kind, model);\n c.replaceWith(tpl.content);\n });\n clone.querySelectorAll(\"[data-hint]\").forEach((n) => n.removeAttribute(\"data-hint\"));\n while (clone.children.length > 1 && clone.lastElementChild && isEmptyP(clone.lastElementChild)) clone.lastElementChild.remove();\n const html = clone.innerHTML.replace(/​/g, \"\");\n return html === \"<p><br></p>\" || html === \"<p></p>\" ? \"\" : html;\n}\n\n/** The HTML exactly as the editor would store it after opening `html` (load → hydrate → serialize), with no edit. */\nexport function editorRoundTrip(html: string): string {\n const el = document.createElement(\"div\");\n el.innerHTML = sanitize(html || \"\") || \"<p><br></p>\";\n hydrate(el);\n return serialize(el);\n}\n\n/** Strip scripts, event handlers and script URLs from HTML we did not author (paste, Markdown, loaded values). */\nexport function sanitize(html: string): string {\n if (!/[<&]/.test(html)) return html;\n const doc = new DOMParser().parseFromString(`<body>${html}</body>`, \"text/html\");\n doc.body.querySelectorAll(\"script,style,iframe,object,embed,link,meta,form,input,button,textarea,select,noscript\").forEach((n) => n.remove());\n doc.body.querySelectorAll(\"*\").forEach((el) => {\n for (const a of Array.from(el.attributes)) {\n const n = a.name.toLowerCase();\n if (n.startsWith(\"on\")) el.removeAttribute(a.name);\n else if ((n === \"href\" || n === \"src\" || n === \"xlink:href\") && /^\\s*(javascript|vbscript|data:text)/i.test(a.value)) el.removeAttribute(a.name);\n }\n });\n return doc.body.innerHTML;\n}\n\n/* ── Selection helpers ─────────────────────────────────────────────── */\nexport const TEXT_BLOCKS = new Set([\"P\", \"H1\", \"H2\", \"H3\", \"H4\", \"H5\", \"H6\", \"BLOCKQUOTE\", \"PRE\", \"LI\", \"DIV\"]);\n\nexport function topBlock(root: HTMLElement | null, node: Node | null): HTMLElement | null {\n if (!root) return null;\n let n: Node | null = node;\n while (n && n.parentNode !== root) n = n.parentNode;\n return n && n.nodeType === 1 ? (n as HTMLElement) : null;\n}\n\n/** Nearest text-ish block element around a node, inside root. */\nexport function closestBlock(root: HTMLElement, node: Node | null): HTMLElement | null {\n let n: Node | null = node;\n while (n && n !== root) {\n if (n.nodeType === 1 && TEXT_BLOCKS.has((n as HTMLElement).tagName) && (n as HTMLElement).closest(\"[data-rt-island]\") === null) return n as HTMLElement;\n n = n.parentNode;\n }\n return null;\n}\n\nexport function placeCaret(el: Node, atEnd = true) {\n const s = window.getSelection();\n if (!s) return;\n const r = document.createRange();\n r.selectNodeContents(el);\n r.collapse(!atEnd);\n s.removeAllRanges();\n s.addRange(r);\n}\n\nexport function textBeforeCaret(block: HTMLElement): string | null {\n const s = window.getSelection();\n if (!s || !s.rangeCount) return null;\n const r = s.getRangeAt(0);\n if (!block.contains(r.startContainer)) return null;\n const pre = document.createRange();\n pre.selectNodeContents(block);\n pre.setEnd(r.startContainer, r.startOffset);\n return pre.toString();\n}\n\nexport function editingHost(n: Node | null): HTMLElement | null {\n const el = n ? (n.nodeType === 1 ? (n as HTMLElement) : n.parentElement) : null;\n return el?.closest<HTMLElement>('[contenteditable=\"true\"],[contenteditable=\"plaintext-only\"]') ?? null;\n}\n\n/** A range's box. Browsers measure a collapsed caret as an empty rect, and some engines cannot measure ranges at all: then\n * the box of the element the range sits in. */\nexport function rangeRect(r: Range, fallback: Element | null): DOMRect {\n let rect: DOMRect | null = null;\n try {\n rect = r.getBoundingClientRect();\n } catch {\n rect = null;\n }\n if (rect && (rect.width || rect.height)) return rect;\n const host = r.startContainer.nodeType === 1 ? (r.startContainer as Element) : r.startContainer.parentElement;\n return (host ?? fallback ?? document.body).getBoundingClientRect();\n}\n\n/* ── Word count (V2 article.ts, CPO D55) ─────────────────────────────\n * Words = what the writer wrote once, in the flow a reader follows: text, headings, lists, quotes, callouts, toggles,\n * table cells and image captions. Not counted: components (counted apart), a pull quote (it repeats a line of the\n * story), key takeaways (they restate it), video and file links. */\nconst NOT_COUNTED = \"[data-rt=component],[data-rt=pullquote],[data-rt=takeaways],[data-rt=video],[data-rt=file]\";\nconst WORDS = (s: string) => s.replace(/\\u200b/g, \"\").trim().split(/\\s+/).filter(Boolean).length;\nexport function countWords(html: string): number {\n if (!html) return 0;\n if (!/data-rt=\"(?:component|pullquote|takeaways|video|file)\"/.test(html) || typeof DOMParser === \"undefined\")\n return WORDS(html.replace(/<\\/(p|li|h[1-6]|blockquote|pre|figcaption|td|th|summary)>/g, \" \").replace(/<[^>]+>/g, \" \").replace(/&nbsp;|&[a-z]+;/g, \" \"));\n const doc = new DOMParser().parseFromString(`<body>${html}</body>`, \"text/html\");\n doc.body.querySelectorAll(NOT_COUNTED).forEach((n) => n.remove());\n doc.body.querySelectorAll(\"p,li,h1,h2,h3,h4,h5,h6,td,th,figcaption,summary,pre,blockquote,div\").forEach((n) => n.append(\" \"));\n return WORDS(doc.body.textContent ?? \"\");\n}\n/** Linked component instances in the body. */\nexport const countComponents = (html: string) => (html.match(/data-rt=\"component\"/g) ?? []).length;\n/** \"1,840 words · 3 components\" */\nexport const bodyCountLabel = (html: string) => {\n const w = countWords(html);\n const c = countComponents(html);\n return `${w.toLocaleString(\"en-US\")} ${w === 1 ? \"word\" : \"words\"}${c ? ` · ${c} ${c === 1 ? \"component\" : \"components\"}` : \"\"}`;\n};\nexport const isEmptyHtml = (html: string) => !html.replace(/<(?!img|hr|figure|table|details|div data-rt)[^>]*>/g, \"\").replace(/&nbsp;/g, \"\").trim();\n"],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ import { type RichTextFeature } from "./codec";
2
+ import { type CatalogComponents } from "./catalog";
3
+ export declare const RT_PROSE: string;
4
+ /**
5
+ * Where the slash menu goes, collision-aware: below the caret when the whole menu fits there, else on the side with
6
+ * more room, and never taller than that room (its list scrolls), so the last row (More components) stays reachable in
7
+ * a short window.
8
+ */
9
+ export declare function slashPlacement(caret: {
10
+ top: number;
11
+ bottom: number;
12
+ }, viewportH: number): {
13
+ flipUp: boolean;
14
+ maxHeight: number;
15
+ };
16
+ export interface RichTextEditorProps {
17
+ value: string;
18
+ onChange: (html: string) => void;
19
+ readOnly?: boolean;
20
+ placeholder?: string;
21
+ docKey: string;
22
+ /** what the field accepts; the editor offers nothing else (default: everything) */
23
+ features?: readonly RichTextFeature[];
24
+ /** a one-paragraph field: Enter starts no new block */
25
+ single?: boolean;
26
+ /** links may open in a new tab */
27
+ allowNewTab?: boolean;
28
+ /** the writing surface's id (the field label's `for`; its label is `${id}-label`) */
29
+ id?: string;
30
+ invalid?: boolean;
31
+ /** panel = narrow (~340px) inspector, document = the full editor column. */
32
+ variant?: "panel" | "document";
33
+ /** CPO D49: the expanded editor's breadcrumb, root → this field ("Alternating feature rows", "Thin walls", "Body"). */
34
+ expandCrumbs?: string[];
35
+ /** Controlled expanded modal (a host's label-row action opens it too). */
36
+ expandedOpen?: boolean;
37
+ onExpandedOpenChange?: (open: boolean) => void;
38
+ /** This editor IS the body of the expanded modal: toolbar always shown, tall writing surface. */
39
+ inModal?: boolean;
40
+ /** Already the full editor: no Expand button. */
41
+ hideFullscreen?: boolean;
42
+ /** Scroll the writing surface beyond this height (px). */
43
+ maxHeight?: number;
44
+ autoFocus?: boolean;
45
+ /** Shows the toolbar Comment button. */
46
+ onComment?: (quote: string) => void;
47
+ /** the components this field may embed (the insert menus' More components); absent → none offered */
48
+ components?: CatalogComponents;
49
+ }
50
+ export declare function RichTextEditor({ value, onChange, readOnly, placeholder, docKey, features, single, allowNewTab, id, invalid, variant, expandCrumbs, expandedOpen, onExpandedOpenChange, inModal, hideFullscreen, maxHeight, autoFocus, onComment, components, }: RichTextEditorProps): import("react/jsx-runtime").JSX.Element;