@revolist/ui 4.0.2-rc → 4.0.2

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 (343) hide show
  1. package/LICENSE +21 -0
  2. package/MIGRATION.md +36 -0
  3. package/OWNERSHIP.md +32 -32
  4. package/README.md +405 -265
  5. package/_button.scss +6 -2
  6. package/_chunks/arrow-up-Cw8hW9vp.js +4 -0
  7. package/_chunks/calculator-CDWOuAcp.js +4 -0
  8. package/_chunks/{calendar-CpaUK7w1.js → calendar-CgXQgkga.js} +28 -18
  9. package/_chunks/chart-frame-hcOlnQ1K.js +145 -0
  10. package/_chunks/{chevron-right-sxHQMSkq.js → check-BwI7iCAm.js} +2 -2
  11. package/_chunks/{chevron-left-D0nc4Z5S.js → chevron-right-CM3ljziP.js} +2 -2
  12. package/_chunks/choice-chips-SkllS5Kl.js +126 -0
  13. package/_chunks/clock-BOhPNlW3.js +4 -0
  14. package/_chunks/{color-palette-BBMFmUNA.js → color-palette-DMJUChWC.js} +20 -22
  15. package/_chunks/{color-picker-D90Jg-M8.js → color-picker-BpCTuIdm.js} +77 -72
  16. package/_chunks/{component-YDcfoOLz.js → component-CfeHXgIw.js} +301 -282
  17. package/_chunks/{component-metadata-BENbgTjU.js → component-metadata-BKd7U8OW.js} +0 -12
  18. package/_chunks/configurator-actions-DnStE6Yl.js +155 -0
  19. package/_chunks/configurator-field-icon-CmcM_sPs.js +53 -0
  20. package/_chunks/control-Dcrjsunl.js +118 -0
  21. package/_chunks/{controls-DIum-E66.js → controls-B_6NJarZ.js} +217 -182
  22. package/_chunks/{date-control-BJSzu79z.js → date-control-C4h4m75W.js} +1 -1
  23. package/_chunks/{date-time-BxPJusp9.js → date-time-CTOSbzb0.js} +344 -307
  24. package/_chunks/{delete-button-Bblyah10.js → delete-button-CW9vjLnk.js} +6 -6
  25. package/_chunks/dialog.parts-3w5FR06n.js +131 -0
  26. package/_chunks/{duration-87U2EoMS.js → duration-Bf2OS1V5.js} +19 -18
  27. package/_chunks/editor-popup-ByU7qiub.js +82 -0
  28. package/_chunks/field-configurator-D5dZRhDe.js +288 -0
  29. package/_chunks/field-context-D57PnBbH.js +5 -0
  30. package/_chunks/{framework-mount-C-Zwm44H.js → framework-mount-Bk4O_T7T.js} +1 -1
  31. package/_chunks/icon-toolbar-DSjOdwM7.js +134 -0
  32. package/_chunks/magnifying-glass-CvrTDSkB.js +4 -0
  33. package/_chunks/minus-BOAR3A1C.js +4 -0
  34. package/_chunks/mount-BRdcG60g.js +267 -0
  35. package/_chunks/{native.view-ByyZ1CT5.js → native-Blr3byjO.js} +1 -1
  36. package/_chunks/native-control-B_fVA5bL.js +649 -0
  37. package/_chunks/{number-input-BeIadZuL.js → number-input-CmM6_2vR.js} +7 -7
  38. package/_chunks/{picker-DpP7iQLA.js → picker-DTqET-2W.js} +2 -2
  39. package/_chunks/plus-CbGRkIGl.js +4 -0
  40. package/_chunks/popover-controller-D-AvKQ7B.js +102 -0
  41. package/_chunks/popup-C35Isk7p.js +378 -0
  42. package/_chunks/{rating-choice-Ca8ZBty3.js → rating-choice-C-6wcb9U.js} +1 -1
  43. package/_chunks/render-m5eMMwFR.js +83 -0
  44. package/_chunks/{reorder-list-Cc3KmfAN.js → reorder-list-DIl1gkV6.js} +1 -1
  45. package/_chunks/request-trail-DrhdpWiH.js +762 -0
  46. package/_chunks/rich-text-BnilBbhU.js +842 -0
  47. package/_chunks/rotate-left-BF6G883o.js +4 -0
  48. package/_chunks/rotate-right-Iha5ScJ1.js +4 -0
  49. package/_chunks/selection-list-tooltips-C5oMJe26.js +42 -0
  50. package/_chunks/title-tooltip-Cw6LOZhb.js +11 -0
  51. package/_chunks/tooltip-D4xkio5G.js +54 -0
  52. package/_chunks/tooltip-owner-DjdvqKzz.js +19 -0
  53. package/_chunks/tooltip-session-B6X6x8G_.js +110 -0
  54. package/_chunks/tooltip-text-BXsUEmBH.js +12 -0
  55. package/_chunks/top-layer-popup-CNSDdfJV.js +59 -0
  56. package/_dialog.scss +55 -21
  57. package/_form.scss +71 -21
  58. package/_legend.scss +25 -7
  59. package/_shared/data-query/index.d.ts +2 -2
  60. package/_shared/data-query/load-options.d.ts +2 -2
  61. package/_variables.scss +34 -32
  62. package/_view-switcher.scss +6 -0
  63. package/activity-message.d.ts +1 -1
  64. package/ai/_chat.scss +227 -0
  65. package/ai/_style.scss +170 -39
  66. package/ai/chat.d.ts +65 -0
  67. package/ai/components.d.ts +34 -5
  68. package/ai/index.d.ts +3 -0
  69. package/ai/index.js +3 -3
  70. package/ai/mount.d.ts +59 -6
  71. package/ai/prompt-history.d.ts +13 -0
  72. package/ai/request-trail.d.ts +9 -3
  73. package/ai/results/_style.scss +83 -0
  74. package/ai/results/index.d.ts +11 -0
  75. package/ai/results/metrics.d.ts +5 -0
  76. package/ai/results/table.d.ts +5 -0
  77. package/ai/results/text.d.ts +5 -0
  78. package/ai/results/types.d.ts +29 -0
  79. package/ai/transcript.d.ts +27 -0
  80. package/ai/translations.d.ts +1 -1
  81. package/angular/angular.d.ts +1 -1
  82. package/angular/angular.js +13 -10
  83. package/assignee/assignee.scss +28 -6
  84. package/assignee/index.js +34 -35
  85. package/avatar/avatar.style.scss +23 -6
  86. package/avatar/index.d.ts +25 -2
  87. package/avatar/index.js +33 -32
  88. package/badge.d.ts +1 -1
  89. package/badge.view.d.ts +8 -0
  90. package/brush-range/_brush-range.scss +55 -49
  91. package/brush-range/component.d.ts +1 -3
  92. package/brush-range/component.js +27 -27
  93. package/buttons/delete-button.d.ts +2 -1
  94. package/buttons/delete-button.js +1 -1
  95. package/buttons/delete-button.style.scss +6 -2
  96. package/buttons/remove-button.d.ts +1 -1
  97. package/buttons/remove-button.js +1 -1
  98. package/buttons/remove-button.style.scss +1 -1
  99. package/buttons/svg-button.d.ts +2 -1
  100. package/buttons/svg-button.js +19 -19
  101. package/calendar/_calendar.scss +27 -26
  102. package/calendar/calendar.js +1 -1
  103. package/calendar/header.js +1 -2
  104. package/calendar/index.js +2 -2
  105. package/cell-input.scss +3 -7
  106. package/cell-visuals/badge.style.scss +6 -3
  107. package/cell-visuals/bar-chart.style.scss +2 -1
  108. package/cell-visuals/column-type.style.css +12 -0
  109. package/cell-visuals/progress-line-value.renderer.style.scss +4 -2
  110. package/cell-visuals/progress-line.style.scss +1 -4
  111. package/cell-visuals/sparkline.style.scss +2 -1
  112. package/cell-visuals/timeline.style.css +4 -2
  113. package/checkbox/checkbox.scss +6 -24
  114. package/choice-chips/index.d.ts +3 -1
  115. package/choice-chips/index.js +1 -1
  116. package/color-palette/color-palette.js +1 -1
  117. package/color-palette/color-palette.style.scss +88 -25
  118. package/color-palette/color-picker.js +2 -2
  119. package/color-palette/color-picker.style.scss +23 -10
  120. package/color-palette/common-palettes.d.ts +1 -1
  121. package/color-palette/common-palettes.js +1 -1
  122. package/color-palette/native.d.ts +15 -2
  123. package/component-catalog.d.ts +24 -11
  124. package/configurator-actions.d.ts +67 -0
  125. package/configurator-actions.js +1 -0
  126. package/configurator-aggregation-list.d.ts +14 -0
  127. package/configurator-aggregation-list.js +63 -0
  128. package/configurator-drop-zone.d.ts +39 -0
  129. package/configurator-drop-zone.js +66 -0
  130. package/configurator-field-icon.d.ts +10 -0
  131. package/configurator-field-icon.js +1 -0
  132. package/configurator-focus.d.ts +4 -0
  133. package/configurator-focus.js +39 -0
  134. package/configurator-sections.d.ts +42 -0
  135. package/configurator-sections.js +71 -0
  136. package/control-attributes.js +7 -7
  137. package/control-presentation.d.ts +8 -2
  138. package/control-presentation.js +25 -20
  139. package/controls.d.ts +19 -7
  140. package/controls.js +4 -3
  141. package/core/editor-popup-position.d.ts +6 -2
  142. package/core/editor-popup.d.ts +4 -0
  143. package/core/editor-popup.js +1 -1
  144. package/core/popover-controller.d.ts +35 -0
  145. package/core/popup-ownership.d.ts +2 -0
  146. package/core/selection-list-tooltips.d.ts +2 -0
  147. package/core/title-tooltip.d.ts +2 -0
  148. package/core/tooltip-session.d.ts +29 -0
  149. package/core/tooltip-surface.d.ts +13 -0
  150. package/core/tooltip-text.d.ts +6 -0
  151. package/core/tooltip.d.ts +35 -0
  152. package/core/top-layer-popup.d.ts +4 -0
  153. package/core/top-layer-popup.js +1 -23
  154. package/date-time/attach.d.ts +1 -1
  155. package/date-time/date-control.d.ts +1 -1
  156. package/date-time/field.d.ts +3 -2
  157. package/date-time/index.js +1 -1
  158. package/date-time/style.scss +242 -39
  159. package/date-time/time-selection.d.ts +3 -1
  160. package/date-time/types.d.ts +5 -1
  161. package/dialog/dialog-action-footer.d.ts +17 -2
  162. package/dialog/dialog.dom.d.ts +15 -2
  163. package/dialog/dialog.dom.js +3 -3
  164. package/dialog/dialog.parts.d.ts +1 -1
  165. package/dialog/dialog.parts.js +1 -1
  166. package/distribution-chart/_distribution-chart.scss +113 -77
  167. package/distribution-chart/area-chart.js +1 -1
  168. package/distribution-chart/bar-chart.d.ts +5 -2
  169. package/distribution-chart/bar-chart.js +7 -3
  170. package/distribution-chart/chart-frame.d.ts +2 -1
  171. package/distribution-chart/index.d.ts +1 -1
  172. package/distribution-chart/line-chart.js +1 -1
  173. package/dropdown/content.d.ts +2 -1
  174. package/dropdown/content.js +1 -142
  175. package/dropdown/control.d.ts +14 -0
  176. package/dropdown/control.js +1 -0
  177. package/dropdown/control.view.d.ts +6 -0
  178. package/dropdown/dropdown.types.d.ts +5 -1
  179. package/dropdown/editor-dropdown.style.scss +54 -16
  180. package/dropdown/index.d.ts +1 -1
  181. package/dropdown/index.js +3 -4
  182. package/dropdown/lookup-field.d.ts +5 -0
  183. package/dropdown/lookup-field.js +2 -1
  184. package/dropdown/popup.d.ts +2 -2
  185. package/dropdown/popup.js +1 -141
  186. package/duration/index.js +1 -1
  187. package/duration/style.scss +1 -1
  188. package/editor-actions.js +1 -1
  189. package/editor-layout/index.d.ts +4 -4
  190. package/editor-layout/index.js +39 -34
  191. package/editor-layout/style.scss +82 -18
  192. package/field-configurator.d.ts +39 -1
  193. package/field-configurator.js +4 -170
  194. package/field-expansion.d.ts +9 -0
  195. package/fieldset.d.ts +3 -0
  196. package/filter/filters/slider/_single-slider.scss +57 -38
  197. package/filter/filters/slider/_slider.scss +41 -33
  198. package/filter/filters/slider/control.js +2 -0
  199. package/filter/filters/slider/runtime.js +49 -22
  200. package/filter/filters/slider/single.js +1 -1
  201. package/filter-badge.js +1 -1
  202. package/filter-controls.d.ts +0 -1
  203. package/filter-controls.js +9 -10
  204. package/form-controls/field-context.d.ts +5 -0
  205. package/form-controls/index.d.ts +10 -2
  206. package/form-controls/index.js +4 -9
  207. package/form-controls/presentation.d.ts +1 -1
  208. package/form-controls/presentation.js +53 -45
  209. package/formatting/index.d.ts +1 -1
  210. package/formatting/index.js +40 -35
  211. package/formatting/styles.scss +14 -57
  212. package/framework.js +237 -226
  213. package/history-controls.d.ts +14 -0
  214. package/history-controls.js +27 -0
  215. package/icon-toolbar.d.ts +62 -0
  216. package/icon-toolbar.js +1 -0
  217. package/icons/icon.d.ts +1 -1
  218. package/legend.d.ts +1 -1
  219. package/masked-input/index.js +1 -1
  220. package/native-control.d.ts +6 -5
  221. package/native-control.js +3 -26
  222. package/native-controls.d.ts +54 -2
  223. package/native-styles.css +1 -1
  224. package/native-styles.scss +6 -2
  225. package/native.d.ts +3 -3
  226. package/native.js +41 -37
  227. package/number-input/index.d.ts +1 -1
  228. package/number-input/index.js +1 -1
  229. package/package.json +88 -14
  230. package/pagination.d.ts +3 -0
  231. package/pagination.js +50 -40
  232. package/pdf-viewer/header.d.ts +1 -1
  233. package/pdf-viewer/index.d.ts +2 -2
  234. package/pdf-viewer/index.js +1 -1
  235. package/pdf-viewer/search-bar.d.ts +1 -1
  236. package/pdf-viewer/status.d.ts +1 -1
  237. package/pdf-viewer/style.scss +205 -45
  238. package/pickers.d.ts +5 -1
  239. package/preact-mount.js +1 -1
  240. package/preact.d.ts +15 -10
  241. package/preact.js +109 -64
  242. package/progress/_bar.scss +9 -3
  243. package/progress/_circular.scss +2 -1
  244. package/rating-choice.js +1 -1
  245. package/react-adapter.d.ts +4 -2
  246. package/react-control.d.ts +1 -0
  247. package/react.d.ts +20 -11
  248. package/react.js +72 -88
  249. package/reorder-list.d.ts +1 -1
  250. package/reorder-list.js +1 -1
  251. package/reorder-list.scss +59 -17
  252. package/resource-picker/resource-picker-popup.js +1 -1
  253. package/resource-picker/resource-picker.js +73 -71
  254. package/resource-picker/resource-picker.scss +66 -35
  255. package/rich-text/engine.d.ts +17 -19
  256. package/rich-text/format-html.d.ts +2 -0
  257. package/rich-text/index.d.ts +11 -7
  258. package/rich-text/index.js +1 -1
  259. package/rich-text/model.d.ts +6 -3
  260. package/rich-text/render-model.d.ts +4 -5
  261. package/rich-text/style.scss +295 -55
  262. package/rich-text/syntax.d.ts +5 -2
  263. package/rich-text/toolbar.d.ts +6 -6
  264. package/rich-text/translations.d.ts +5 -15
  265. package/search-input/index.js +1 -1
  266. package/search-input/native.d.ts +21 -2
  267. package/select.d.ts +22 -0
  268. package/select.js +1 -0
  269. package/selection-list.d.ts +1 -0
  270. package/selection-list.js +3 -1
  271. package/status-feedback/exit-snapshot.js +1 -1
  272. package/status-feedback/index.js +2 -2
  273. package/status-feedback/popover.js +9 -9
  274. package/status-feedback/render.js +3 -44
  275. package/status-feedback/status-feedback.scss +130 -34
  276. package/status-feedback/types.d.ts +4 -0
  277. package/status-feedback/use-auto-dismiss.d.ts +3 -0
  278. package/styles/_activity-message.scss +24 -7
  279. package/styles/_alert.scss +78 -17
  280. package/styles/_cell-editor-frame.scss +11 -0
  281. package/styles/_compositions.scss +404 -82
  282. package/styles/_control.scss +42 -12
  283. package/styles/_disclosure.scss +15 -5
  284. package/styles/_editor-counter.scss +16 -6
  285. package/styles/_editor-slider.scss +8 -4
  286. package/styles/_field-configurator.scss +321 -23
  287. package/styles/_fields-grid.scss +49 -0
  288. package/styles/_filter-controls.scss +10 -2
  289. package/styles/_icon-action.scss +48 -15
  290. package/styles/_loading.scss +12 -3
  291. package/styles/_motion.scss +32 -9
  292. package/styles/_palette.scss +0 -24
  293. package/styles/_primitives.scss +376 -116
  294. package/styles/_theme.scss +130 -86
  295. package/styles/_thresholds.scss +28 -25
  296. package/styles/_time-grid.scss +8 -3
  297. package/styles/_tokens.scss +6 -1
  298. package/styles/configurator-actions.scss +241 -0
  299. package/styles/pagination.css +213 -0
  300. package/styles/{legacy-rating.css → rating.css} +8 -3
  301. package/styles.css +1 -1
  302. package/styles.scss +3 -5
  303. package/surfaces.d.ts +38 -2
  304. package/surfaces.js +37 -134
  305. package/svelte/UiComponent.server.js +1 -48
  306. package/svelte/UiComponent.svelte +44 -32
  307. package/svelte.d.ts +1 -1
  308. package/svelte.js +33 -68
  309. package/switch/index.js +15 -14
  310. package/time-grid.d.ts +0 -1
  311. package/time-grid.js +38 -37
  312. package/timeline-track/_style.scss +96 -24
  313. package/timeline-track/component.d.ts +5 -1
  314. package/timeline-track/index.js +71 -54
  315. package/timeline-track/model.d.ts +9 -0
  316. package/timeline-track/model.js +10 -1
  317. package/ui.css +1 -1
  318. package/view-switcher.d.ts +23 -0
  319. package/vue.d.ts +51 -35
  320. package/vue.js +149 -178
  321. package/_chunks/chart-frame-BC99KjGa.js +0 -127
  322. package/_chunks/choice-chips-Cs4D-3nH.js +0 -110
  323. package/_chunks/compat.module-DDB2pm9O.js +0 -229
  324. package/_chunks/control-tooltip-ztgmsG7H.js +0 -100
  325. package/_chunks/dialog.parts-DBqo3Qwb.js +0 -134
  326. package/_chunks/dropdown-voWqmwAe.js +0 -357
  327. package/_chunks/editor-popup-D3JdS8l3.js +0 -81
  328. package/_chunks/mount-DZe_6VtR.js +0 -90
  329. package/_chunks/request-trail-IdNiFvKH.js +0 -347
  330. package/_chunks/rich-text-BzI1DyfF.js +0 -477
  331. package/avatar/index.view.d.ts +0 -25
  332. package/color-palette/native.view.d.ts +0 -15
  333. package/control-presentation.view.d.ts +0 -8
  334. package/dialog/dialog-action-footer.view.d.ts +0 -20
  335. package/dialog/dialog.dom.view.d.ts +0 -15
  336. package/form-controls/index.view.d.ts +0 -12
  337. package/formatting/control-tooltip.d.ts +0 -27
  338. package/native-controls.view.d.ts +0 -54
  339. package/react-native-select.d.ts +0 -6
  340. package/search-input/native.view.d.ts +0 -21
  341. package/styles/legacy-pagination.css +0 -112
  342. package/surfaces.view.d.ts +0 -63
  343. package/vue-native-select.d.ts +0 -9
@@ -1,27 +1,28 @@
1
1
  import { c as e, i as t, n, o as r, t as i } from "../_chunks/hooks.module-CG3gN83z.js";
2
2
  import { t as a } from "../_chunks/jsxRuntime.module-F6UFnpT-.js";
3
3
  import { createControlId as o } from "../core/control-id.js";
4
- import { t as s } from "../_chunks/chevron-down-GbplLa6s.js";
5
- import { t as ee } from "../_chunks/xmark-DD_PBvZI.js";
6
- import { SearchInput as c } from "../search-input/index.js";
7
- import { resourcePickerClasses as l, resourcePickerDataAttribute as u, resourcePickerIdKey as d } from "./resource-picker.utils.js";
8
- import { ResourcePickerAvatar as f } from "./resource-picker-avatar.js";
9
- import { ResourcePickerOption as p } from "./resource-picker-option.js";
10
- import { ResourcePickerPopup as m } from "./resource-picker-popup.js";
4
+ import { t as s } from "../_chunks/selection-list-tooltips-C5oMJe26.js";
5
+ import { t as c } from "../_chunks/chevron-down-GbplLa6s.js";
6
+ import { t as l } from "../_chunks/xmark-DD_PBvZI.js";
7
+ import { SearchInput as u } from "../search-input/index.js";
8
+ import { resourcePickerClasses as d, resourcePickerDataAttribute as f, resourcePickerIdKey as p } from "./resource-picker.utils.js";
9
+ import { ResourcePickerAvatar as m } from "./resource-picker-avatar.js";
10
+ import { ResourcePickerOption as ee } from "./resource-picker-option.js";
11
+ import { ResourcePickerPopup as h } from "./resource-picker-popup.js";
11
12
  //#region src/resource-picker/resource-picker.tsx
12
- function h({ resources: h, selectedResourceIds: v, text: y, onChange: b, classNames: x, disabled: S = !1, readOnly: C = !1, presentation: w = "inline", multiple: T = !0, preserveOrder: E = !1, unassigned: D, resourceDataAttribute: O, isResourceDisabled: k, getAvatarColor: A }) {
13
- let j = i(null), M = i(null), N = i(null), P = i(null), F = i(!1), [I] = t(() => o("rv-resource-list")), L = `${I}-popup`, R = w === "dropdown", [z, B] = t(!1), [V, H] = t(""), [U, W] = t(0), G = r(() => {
13
+ function g({ resources: g, selectedResourceIds: y, text: b, onChange: x, classNames: S, disabled: C = !1, readOnly: w = !1, presentation: T = "inline", multiple: E = !0, preserveOrder: D = !1, unassigned: O, resourceDataAttribute: te, isResourceDisabled: k, getAvatarColor: A }) {
14
+ let j = i(null), M = i(null), N = i(null), P = i(null), ne = s(".rv-resource-picker__option"), F = i(!1), [I] = t(() => o("rv-resource-list")), L = `${I}-popup`, R = T === "dropdown", [z, B] = t(!1), [V, H] = t(""), [U, W] = t(0), G = r(() => {
14
15
  B(!1), H("");
15
- }, []), K = new Set(v.map(d)), q = n(() => E ? [...h] : [...h].sort((e, t) => e.name.localeCompare(t.name, void 0, {
16
+ }, []), K = new Set(y.map(p)), q = n(() => D ? [...g] : [...g].sort((e, t) => e.name.localeCompare(t.name, void 0, {
16
17
  numeric: !0,
17
18
  sensitivity: "base"
18
- })), [E, h]), J = n(() => {
19
+ })), [D, g]), J = n(() => {
19
20
  let e = V.trim().toLocaleLowerCase();
20
21
  return e ? q.filter((t) => `${t.name} ${t.role ?? ""}`.toLocaleLowerCase().includes(e)) : q;
21
22
  }, [V, q]), Y = n(() => {
22
- let e = new Map(h.map((e) => [d(e.id), e]));
23
- return v.map((t) => e.get(d(t))).filter((e) => !!e);
24
- }, [h, v]), X = R && U >= 0 && U < J.length ? `${I}-option-${U}` : void 0;
23
+ let e = new Map(g.map((e) => [p(e.id), e]));
24
+ return y.map((t) => e.get(p(t))).filter((e) => !!e);
25
+ }, [g, y]), X = R && U >= 0 && U < J.length ? `${I}-option-${U}` : void 0;
25
26
  e(() => {
26
27
  if (!R || !z) return;
27
28
  let e = (e) => {
@@ -49,72 +50,73 @@ function h({ resources: h, selectedResourceIds: v, text: y, onChange: b, classNa
49
50
  e && P.current.contains(e) && e.closest(".rv-resource-picker__option")?.scrollIntoView?.({ block: "nearest" });
50
51
  }, [X, z]);
51
52
  let Z = (e) => {
52
- C || (b(e), !T && R && G());
53
- }, te = () => {
53
+ w || (x(e), !E && R && G());
54
+ }, re = () => {
54
55
  let e = J[U];
55
56
  if (!e) return;
56
- let t = d(e.id);
57
- (!k?.(e) || K.has(t)) && Z(K.has(t) ? v.filter((e) => d(e) !== t) : T ? g([...v, e.id]) : [e.id]);
58
- }, ne = (e) => {
57
+ let t = p(e.id);
58
+ (!k?.(e) || K.has(t)) && Z(K.has(t) ? y.filter((e) => p(e) !== t) : E ? _([...y, e.id]) : [e.id]);
59
+ }, ie = (e) => {
59
60
  if (e.key === "Escape") e.preventDefault(), e.stopPropagation(), G(), M.current?.focus();
60
61
  else if (e.key === "ArrowDown" || e.key === "ArrowUp") {
61
62
  if (e.preventDefault(), e.stopPropagation(), !J.length) return;
62
63
  F.current = !0, W((t) => e.key === "ArrowDown" ? t >= J.length - 1 ? 0 : t + 1 : t <= 0 ? J.length - 1 : t - 1);
63
- } else e.key === "Enter" && (e.preventDefault(), e.stopPropagation(), te());
64
+ } else e.key === "Enter" && (e.preventDefault(), e.stopPropagation(), re());
64
65
  }, Q = typeof document > "u" ? null : j.current?.closest("dialog, .rv-dialog-overlay") ?? document.body, $ = /* @__PURE__ */ a("div", {
66
+ ref: ne,
65
67
  class: "rv-resource-picker__popover",
66
- onKeyDown: R ? ne : void 0,
67
- children: [/* @__PURE__ */ a(c, {
68
+ onKeyDown: R ? ie : void 0,
69
+ children: [/* @__PURE__ */ a(u, {
68
70
  inputRef: N,
69
71
  rootClassName: "rv-resource-picker__search-control",
70
- inputClassName: l("rv-resource-picker__search", x?.search),
72
+ inputClassName: d("rv-resource-picker__search", S?.search),
71
73
  value: V,
72
- disabled: S,
73
- placeholder: y.searchPlaceholder,
74
- "aria-label": y.searchAriaLabel,
74
+ disabled: C,
75
+ placeholder: b.searchPlaceholder,
76
+ "aria-label": b.searchAriaLabel,
75
77
  onValueChange: H
76
78
  }), /* @__PURE__ */ a("div", {
77
79
  ref: P,
78
- class: l("rv-resource-picker__list", x?.list),
80
+ class: d("rv-resource-picker__list", S?.list),
79
81
  role: R ? "listbox" : "group",
80
82
  id: R ? I : void 0,
81
- "aria-multiselectable": R ? T : void 0,
83
+ "aria-multiselectable": R ? E : void 0,
82
84
  "aria-activedescendant": X,
83
- "aria-label": y.groupAriaLabel,
84
- children: [D && !C ? /* @__PURE__ */ a("label", {
85
- class: l("rv-resource-picker__option rv-resource-picker__option--unassigned", x?.option),
85
+ "aria-label": b.groupAriaLabel,
86
+ children: [O && !w ? /* @__PURE__ */ a("label", {
87
+ class: d("rv-resource-picker__option rv-resource-picker__option--unassigned", S?.option),
86
88
  children: [
87
89
  /* @__PURE__ */ a("input", {
88
90
  type: "checkbox",
89
- checked: v.length === 0,
90
- disabled: S,
91
- ...u(D.dataAttribute, ""),
92
- onChange: () => b([])
91
+ checked: y.length === 0,
92
+ disabled: C,
93
+ ...f(O.dataAttribute, ""),
94
+ onChange: () => x([])
93
95
  }),
94
96
  /* @__PURE__ */ a("span", {
95
97
  class: "rv-resource-picker__avatar-spacer",
96
98
  "aria-hidden": "true"
97
99
  }),
98
100
  /* @__PURE__ */ a("span", {
99
- class: l("rv-resource-picker__details", x?.details),
100
- children: /* @__PURE__ */ a("strong", { children: D.label })
101
+ class: d("rv-resource-picker__details", S?.details),
102
+ children: /* @__PURE__ */ a("strong", { children: O.label })
101
103
  })
102
104
  ]
103
- }) : null, h.length === 0 ? /* @__PURE__ */ a(_, {
104
- className: x?.muted,
105
- text: y.emptyResources
106
- }) : J.length === 0 ? /* @__PURE__ */ a(_, {
107
- className: x?.muted,
108
- text: y.emptySearch
109
- }) : J.map((e, t) => /* @__PURE__ */ a(p, {
105
+ }) : null, g.length === 0 ? /* @__PURE__ */ a(v, {
106
+ className: S?.muted,
107
+ text: b.emptyResources
108
+ }) : J.length === 0 ? /* @__PURE__ */ a(v, {
109
+ className: S?.muted,
110
+ text: b.emptySearch
111
+ }) : J.map((e, t) => /* @__PURE__ */ a(ee, {
110
112
  resource: e,
111
- selected: K.has(d(e.id)),
112
- selectedResourceIds: v,
113
- disabled: S,
114
- readOnly: C,
115
- multiple: T,
116
- resourceDataAttribute: O,
117
- classNames: x,
113
+ selected: K.has(p(e.id)),
114
+ selectedResourceIds: y,
115
+ disabled: C,
116
+ readOnly: w,
117
+ multiple: E,
118
+ resourceDataAttribute: te,
119
+ classNames: S,
118
120
  isResourceDisabled: k,
119
121
  getAvatarColor: A,
120
122
  optionId: R ? `${I}-option-${t}` : void 0,
@@ -123,12 +125,12 @@ function h({ resources: h, selectedResourceIds: v, text: y, onChange: b, classNa
123
125
  F.current = !1, W(t);
124
126
  },
125
127
  onChange: Z
126
- }, d(e.id)))]
128
+ }, p(e.id)))]
127
129
  })]
128
130
  });
129
131
  return /* @__PURE__ */ a("div", {
130
132
  ref: j,
131
- class: l("rv-resource-picker", R ? "rv-resource-picker--dropdown" : void 0, z ? "rv-resource-picker--open" : void 0, x?.root),
133
+ class: d("rv-resource-picker", R ? "rv-resource-picker--dropdown" : void 0, z ? "rv-resource-picker--open" : void 0, S?.root),
132
134
  children: [R ? /* @__PURE__ */ a("div", {
133
135
  ref: M,
134
136
  class: "rv-resource-picker__control",
@@ -136,51 +138,51 @@ function h({ resources: h, selectedResourceIds: v, text: y, onChange: b, classNa
136
138
  "aria-expanded": z,
137
139
  "aria-controls": I,
138
140
  "aria-haspopup": "listbox",
139
- "aria-label": y.groupAriaLabel,
140
- tabIndex: S ? -1 : 0,
141
+ "aria-label": b.groupAriaLabel,
142
+ tabIndex: C ? -1 : 0,
141
143
  onClick: (e) => {
142
- S || (e.preventDefault(), z ? G() : B(!0));
144
+ C || (e.preventDefault(), z ? G() : B(!0));
143
145
  },
144
146
  onKeyDown: (e) => {
145
- S || e.target !== e.currentTarget || (e.key === "Enter" || e.key === " " || e.key === "ArrowDown") && (e.preventDefault(), B(!0));
147
+ C || e.target !== e.currentTarget || (e.key === "Enter" || e.key === " " || e.key === "ArrowDown") && (e.preventDefault(), B(!0));
146
148
  },
147
149
  children: [/* @__PURE__ */ a("div", {
148
150
  class: "rv-resource-picker__chips",
149
151
  children: Y.length ? Y.map((e) => /* @__PURE__ */ a("span", {
150
152
  class: "rv-resource-picker__chip",
151
153
  children: [
152
- /* @__PURE__ */ a(f, {
154
+ /* @__PURE__ */ a(m, {
153
155
  resource: e,
154
- className: x?.avatar,
156
+ className: S?.avatar,
155
157
  color: A?.(e)
156
158
  }),
157
159
  /* @__PURE__ */ a("span", {
158
160
  class: "rv-resource-picker__chip-label",
159
161
  children: e.name
160
162
  }),
161
- !S && !C ? /* @__PURE__ */ a("button", {
163
+ !C && !w ? /* @__PURE__ */ a("button", {
162
164
  type: "button",
163
165
  class: "rv-resource-picker__chip-remove",
164
166
  "aria-label": `Remove ${e.name}`,
165
167
  onClick: (t) => {
166
- t.stopPropagation(), b(v.filter((t) => d(t) !== d(e.id)));
168
+ t.stopPropagation(), x(y.filter((t) => p(t) !== p(e.id)));
167
169
  },
168
170
  children: /* @__PURE__ */ a("span", {
169
171
  "aria-hidden": "true",
170
- dangerouslySetInnerHTML: { __html: ee }
172
+ dangerouslySetInnerHTML: { __html: l }
171
173
  })
172
174
  }) : null
173
175
  ]
174
- }, d(e.id))) : /* @__PURE__ */ a("span", {
176
+ }, p(e.id))) : /* @__PURE__ */ a("span", {
175
177
  class: "rv-resource-picker__placeholder",
176
- children: y.searchPlaceholder
178
+ children: b.searchPlaceholder
177
179
  })
178
180
  }), /* @__PURE__ */ a("span", {
179
181
  class: "rv-resource-picker__chevron",
180
182
  "aria-hidden": "true",
181
- dangerouslySetInnerHTML: { __html: s }
183
+ dangerouslySetInnerHTML: { __html: c }
182
184
  })]
183
- }) : null, R ? z && Q ? /* @__PURE__ */ a(m, {
185
+ }) : null, R ? z && Q ? /* @__PURE__ */ a(h, {
184
186
  triggerRef: M,
185
187
  portalTarget: Q,
186
188
  popupId: L,
@@ -188,14 +190,14 @@ function h({ resources: h, selectedResourceIds: v, text: y, onChange: b, classNa
188
190
  }) : null : $]
189
191
  });
190
192
  }
191
- function g(e) {
192
- return [...new Map(e.map((e) => [d(e), e])).values()];
193
+ function _(e) {
194
+ return [...new Map(e.map((e) => [p(e), e])).values()];
193
195
  }
194
- function _({ className: e, text: t }) {
196
+ function v({ className: e, text: t }) {
195
197
  return /* @__PURE__ */ a("span", {
196
- class: l("rv-resource-picker__empty", e),
198
+ class: d("rv-resource-picker__empty", e),
197
199
  children: t
198
200
  });
199
201
  }
200
202
  //#endregion
201
- export { h as SharedResourcePicker };
203
+ export { g as SharedResourcePicker };
@@ -18,7 +18,10 @@
18
18
  --rv-control-border: var(--rv-resource-picker-border, var(--rv-ui-border));
19
19
  }
20
20
  .rv-resource-picker__search-control input {
21
- min-height: var(--rv-resource-picker-search-height, 36px);
21
+ min-height: var(
22
+ --rv-resource-picker-search-height,
23
+ var(--rv-control-height, 32px)
24
+ );
22
25
  }
23
26
 
24
27
  .rv-resource-picker__list {
@@ -31,10 +34,11 @@
31
34
  max-height: var(--rv-resource-picker-max-height, 184px);
32
35
  overflow: auto;
33
36
  padding: var(--rv-resource-picker-list-padding, 6px);
34
- border: 1px solid var(
35
- --rv-resource-picker-border,
36
- color-mix(in srgb, currentColor 14%, transparent)
37
- );
37
+ border: 1px solid
38
+ var(
39
+ --rv-resource-picker-border,
40
+ color-mix(in srgb, currentColor 14%, transparent)
41
+ );
38
42
  border-radius: var(--rv-resource-picker-radius, 6px);
39
43
  background: var(--rv-resource-picker-background, Canvas);
40
44
  }
@@ -133,17 +137,24 @@
133
137
  }
134
138
 
135
139
  .rv-resource-picker__control {
140
+ font-family: inherit;
141
+ font-size: var(--rv-control-font-size, 0.875rem);
142
+ line-height: 1;
136
143
  display: flex;
137
144
  box-sizing: border-box;
138
145
  width: 100%;
139
- min-height: var(--rv-resource-picker-control-height, 42px);
146
+ min-height: var(
147
+ --rv-resource-picker-control-height,
148
+ var(--rv-control-height, 32px)
149
+ );
140
150
  align-items: center;
141
151
  gap: 8px;
142
- padding: var(--rv-resource-picker-control-padding, 5px 10px);
143
- border: 1px solid var(
144
- --rv-resource-picker-border,
145
- color-mix(in srgb, currentColor 14%, transparent)
146
- );
152
+ padding: var(--rv-resource-picker-control-padding, 1px 10px);
153
+ border: 1px solid
154
+ var(
155
+ --rv-resource-picker-border,
156
+ color-mix(in srgb, currentColor 14%, transparent)
157
+ );
147
158
  border-radius: var(--rv-resource-picker-radius, 8px);
148
159
  outline: none;
149
160
  background: var(--rv-resource-picker-background, Canvas);
@@ -162,11 +173,12 @@
162
173
  .rv-resource-picker__control:focus-visible,
163
174
  .rv-resource-picker--open .rv-resource-picker__control {
164
175
  border-color: var(--rv-resource-picker-accent, var(--rv-ui-accent));
165
- box-shadow: 0 0 0 3px color-mix(
166
- in srgb,
167
- var(--rv-resource-picker-accent, var(--rv-ui-shadow)) 16%,
168
- transparent
169
- );
176
+ box-shadow: 0 0 0 3px
177
+ color-mix(
178
+ in srgb,
179
+ var(--rv-resource-picker-accent, var(--rv-ui-shadow)) 16%,
180
+ transparent
181
+ );
170
182
  }
171
183
 
172
184
  .rv-resource-picker__chips {
@@ -185,11 +197,12 @@
185
197
  align-items: center;
186
198
  gap: 5px;
187
199
  padding: 3px 5px 3px 3px;
188
- border: 1px solid color-mix(
189
- in srgb,
190
- var(--rv-resource-picker-accent, var(--rv-ui-accent)) 18%,
191
- transparent
192
- );
200
+ border: 1px solid
201
+ color-mix(
202
+ in srgb,
203
+ var(--rv-resource-picker-accent, var(--rv-ui-accent)) 18%,
204
+ transparent
205
+ );
193
206
  border-radius: 999px;
194
207
  background: color-mix(
195
208
  in srgb,
@@ -264,7 +277,8 @@
264
277
 
265
278
  .rv-resource-picker__chevron {
266
279
  flex: 0 0 auto;
267
- transition: transform var(--rv-ui-motion-normal, 160ms) var(--rv-ui-motion-ease, ease-out);
280
+ transition: transform var(--rv-ui-motion-normal, 160ms)
281
+ var(--rv-ui-motion-ease, ease-out);
268
282
  }
269
283
 
270
284
  .rv-resource-picker__chevron svg,
@@ -287,17 +301,19 @@
287
301
  gap: 6px;
288
302
  box-sizing: border-box;
289
303
  padding: 7px;
290
- border: 1px solid var(
291
- --rv-resource-picker-border,
292
- color-mix(in srgb, currentColor 14%, transparent)
293
- );
304
+ border: 1px solid
305
+ var(
306
+ --rv-resource-picker-border,
307
+ color-mix(in srgb, currentColor 14%, transparent)
308
+ );
294
309
  border-radius: calc(var(--rv-resource-picker-radius, 8px) + 2px);
295
310
  background: var(--rv-resource-picker-popover-background, Canvas);
296
311
  box-shadow: var(
297
312
  --rv-resource-picker-popover-shadow,
298
313
  0 14px 36px var(--rv-ui-shadow)
299
314
  );
300
- animation: rv-resource-picker-popover-in var(--rv-ui-motion-enter, 180ms) var(--rv-ui-motion-ease, ease-out);
315
+ animation: rv-resource-picker-popover-in var(--rv-ui-motion-enter, 180ms)
316
+ var(--rv-ui-motion-ease, ease-out);
301
317
  }
302
318
 
303
319
  .rv-resource-picker__portal.revo-dropdown-menu {
@@ -346,23 +362,38 @@
346
362
  outline: 2px solid var(--rv-resource-picker-accent, var(--rv-ui-accent));
347
363
  outline-offset: -2px;
348
364
  }
349
- .rv-resource-picker__option .avatar-cell.rv-resource-picker__avatar { box-shadow: none; }
350
- .rv-resource-picker__details strong { font-weight: 500; line-height: 1.4; }
351
- .rv-resource-picker__details em { font-size: 12px; line-height: 1.4; }
352
- .rv-resource-picker__list { gap: 4px; }
365
+ .rv-resource-picker__option .avatar-cell.rv-resource-picker__avatar {
366
+ box-shadow: none;
367
+ }
368
+ .rv-resource-picker__details strong {
369
+ font-weight: 500;
370
+ line-height: 1.4;
371
+ }
372
+ .rv-resource-picker__details em {
373
+ font-size: 12px;
374
+ line-height: 1.4;
375
+ }
376
+ .rv-resource-picker__list {
377
+ gap: 4px;
378
+ }
353
379
 
354
380
  // The portal wrapper already owns its entrance; avoid fading nested surfaces twice.
355
- .rv-resource-picker__portal .rv-resource-picker__popover { animation: none; }
381
+ .rv-resource-picker__portal .rv-resource-picker__popover {
382
+ animation: none;
383
+ }
356
384
 
357
385
  .rv-resource-picker__option,
358
386
  .rv-resource-picker__control {
359
387
  transition:
360
- background-color var(--rv-ui-motion-fast, 120ms) var(--rv-ui-motion-ease, ease-out),
361
- border-color var(--rv-ui-motion-fast, 120ms) var(--rv-ui-motion-ease, ease-out),
388
+ background-color var(--rv-ui-motion-fast, 120ms)
389
+ var(--rv-ui-motion-ease, ease-out),
390
+ border-color var(--rv-ui-motion-fast, 120ms)
391
+ var(--rv-ui-motion-ease, ease-out),
362
392
  opacity var(--rv-ui-motion-fast, 120ms) var(--rv-ui-motion-ease, ease-out);
363
393
  }
364
394
  .rv-resource-picker__chip-remove {
365
395
  transition:
366
- background-color var(--rv-ui-motion-fast, 120ms) var(--rv-ui-motion-ease, ease-out),
396
+ background-color var(--rv-ui-motion-fast, 120ms)
397
+ var(--rv-ui-motion-ease, ease-out),
367
398
  opacity var(--rv-ui-motion-fast, 120ms) var(--rv-ui-motion-ease, ease-out);
368
399
  }
@@ -1,21 +1,19 @@
1
- import { LexicalEditor, TextFormatType } from 'lexical';
2
- export type MarkdownBlock = 'paragraph' | 'h1' | 'h2' | 'quote' | 'code' | 'bullet' | 'ordered';
3
- export interface MarkdownSelection {
4
- formats: TextFormatType[];
5
- block: MarkdownBlock | null;
1
+ export type HtmlFormat = 'bold' | 'italic' | 'strikethrough' | 'code';
2
+ export type HtmlBlock = 'paragraph' | 'h1' | 'h2' | 'quote' | 'code' | 'bullet' | 'ordered';
3
+ export interface HtmlSelection {
4
+ formats: HtmlFormat[];
5
+ block: HtmlBlock | null;
6
6
  link: boolean;
7
7
  }
8
- export declare const emptyMarkdownSelection: MarkdownSelection;
9
- export interface MarkdownEngine {
10
- editor: LexicalEditor;
11
- setMarkdown(value: string): void;
12
- format(mark: TextFormatType): void;
13
- block(value: MarkdownBlock): void;
14
- captureSelection(): void;
15
- link(value: string): boolean;
16
- destroy(): void;
17
- }
18
- /** Framework-independent Lexical adapter; consumers own toolbar and mode presentation. */
19
- export declare function createMarkdownEngine(root: HTMLElement, markdown: string, onChange: (value: string, unsafe: boolean) => void, onSelectionChange?: (selection: MarkdownSelection) => void): MarkdownEngine;
20
- /** Parse through Lexical so escaped/entity-encoded Markdown link URLs are checked after decoding. */
21
- export declare function hasUnsafeMarkdownLinks(markdown: string): boolean;
8
+ export declare const emptyHtmlSelection: HtmlSelection;
9
+ /** Native Range editing and bounded local history. No browser execCommand or editor library. */
10
+ export declare function createHtmlEngine(root: HTMLElement, html: string, onChange: (html: string) => void, onSelectionChange?: (selection: HtmlSelection) => void): {
11
+ setHtml: (value: string) => void;
12
+ format: (mark: HtmlFormat) => void;
13
+ block: (value: HtmlBlock) => void;
14
+ focus: () => void;
15
+ captureSelection: () => void;
16
+ link: (value: string) => boolean;
17
+ destroy: () => void;
18
+ };
19
+ export type HtmlEngine = ReturnType<typeof createHtmlEngine>;
@@ -0,0 +1,2 @@
1
+ /** Display-only indentation: keep inline phrases and preformatted content intact. */
2
+ export declare function formatRichTextHtml(html: string, doc?: Document): string;
@@ -1,15 +1,19 @@
1
1
  import { EditorActionText, EditorCommitOptions } from '../editor-actions';
2
- import { MarkdownEditorText } from './translations';
3
- export { defaultMarkdownEditorText, type MarkdownEditorText, } from './translations';
4
- export interface MarkdownEditorProps extends EditorCommitOptions {
2
+ import { HtmlEditorText } from './translations';
3
+ export { defaultHtmlEditorText, type HtmlEditorText } from './translations';
4
+ export interface HtmlEditorProps extends EditorCommitOptions {
5
+ /** Override formatRichTextHtml for source presentation on entry, never while typing. */
6
+ formatSource?: (html: string) => string;
5
7
  value: string;
6
8
  onApply: (value: string) => void;
7
9
  onCancel: () => void;
8
10
  required?: boolean;
9
11
  maxLength?: number;
10
- text?: Partial<MarkdownEditorText>;
12
+ text?: Partial<HtmlEditorText>;
11
13
  actions?: Partial<EditorActionText>;
12
14
  }
13
- export declare function MarkdownEditor(props: MarkdownEditorProps): import("../_vendor/preact/src/index").JSX.Element;
14
- export { markdownVisualIssues, isSafeMarkdownLink } from './model';
15
- export { markdownRenderNodes, type MarkdownRenderNode } from './render-model';
15
+ export declare function HtmlEditor(props: HtmlEditorProps): import("../_vendor/preact/src/index").JSX.Element;
16
+ export { sanitizeRichTextHtml, isSafeRichTextLink } from './model';
17
+ export { htmlRenderNodes, type HtmlRenderNode } from './render-model';
18
+ export { formatRichTextHtml } from './format-html';
19
+ export { HtmlSyntax } from './syntax';
@@ -1 +1 @@
1
- export { t as MarkdownEditor, r as defaultMarkdownEditorText, i as isSafeMarkdownLink, n as markdownRenderNodes, a as markdownVisualIssues } from "../_chunks/rich-text-BzI1DyfF.js";
1
+ export { t as HtmlEditor, s as HtmlSyntax, r as defaultHtmlEditorText, i as formatRichTextHtml, n as htmlRenderNodes, a as isSafeRichTextLink, o as sanitizeRichTextHtml } from "../_chunks/rich-text-BnilBbhU.js";
@@ -1,3 +1,6 @@
1
- /** Supported Markdown boundaries: unsupported syntax remains editable as lossless source. */
2
- export declare function markdownVisualIssues(markdown: string): string[];
3
- export declare function isSafeMarkdownLink(value: string): boolean;
1
+ export declare function isSafeRichTextLink(value: string): boolean;
2
+ /** Remove rich marks inside code while preserving line breaks and selection markers. */
3
+ export declare function flattenCode(element: Element): void;
4
+ /** Parse inertly, then rebuild nodes; never mount user-provided HTML or attributes. */
5
+ export declare function richTextFragment(html: string, doc?: Document): DocumentFragment;
6
+ export declare function sanitizeRichTextHtml(html: string, doc?: Document): string;
@@ -1,9 +1,8 @@
1
- /** Framework-neutral, allowlisted content. Text is always rendered as text, never HTML. */
2
- export interface MarkdownRenderNode {
1
+ export interface HtmlRenderNode {
3
2
  tag?: string;
4
3
  text?: string;
5
4
  attrs?: Record<string, string | number>;
6
- children?: readonly MarkdownRenderNode[];
5
+ children?: readonly HtmlRenderNode[];
7
6
  }
8
- /** The renderer accepts exactly the same Markdown subset as the Visual editor. */
9
- export declare function markdownRenderNodes(markdown: string): readonly MarkdownRenderNode[];
7
+ /** Only allowlisted nodes reach a framework renderer; fresh VNodes are created per cell. */
8
+ export declare function htmlRenderNodes(html: string): readonly HtmlRenderNode[];