@revolist/ui 4.0.4-rc → 4.0.6-rc

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 (240) hide show
  1. package/MIGRATION.md +36 -0
  2. package/OWNERSHIP.md +10 -10
  3. package/README.md +22 -4
  4. package/_chunks/arrow-up-Cw8hW9vp.js +4 -0
  5. package/_chunks/badge.view-D30pMUfi.js +14 -0
  6. package/_chunks/calculator-CDWOuAcp.js +4 -0
  7. package/_chunks/{calendar-xpZ0v3xf.js → calendar-QWDyYzdo.js} +19 -19
  8. package/_chunks/chart-frame-hcOlnQ1K.js +145 -0
  9. package/_chunks/check-BwI7iCAm.js +4 -0
  10. package/_chunks/choice-chips-A6WR-WJe.js +126 -0
  11. package/_chunks/{color-palette-D8vyPfld.js → color-palette-DMJUChWC.js} +20 -22
  12. package/_chunks/color-picker-BK4W1nd6.js +143 -0
  13. package/_chunks/{component-C_T2VN5u.js → component-CMkF17YZ.js} +281 -265
  14. package/_chunks/{component-metadata-BMOOmqx5.js → component-metadata-BKd7U8OW.js} +0 -8
  15. package/_chunks/configurator-actions-By8WSL2m.js +155 -0
  16. package/_chunks/configurator-field-icon-CmcM_sPs.js +53 -0
  17. package/_chunks/{control-AHKXD5Eu.js → control-mlH7l0Uq.js} +42 -17
  18. package/_chunks/{controls-DsNi8V8I.js → controls-FUU-MUKC.js} +171 -186
  19. package/_chunks/{date-control-DrVFX13g.js → date-control-Dup_P3w5.js} +1 -1
  20. package/_chunks/{date-time-qIhp5vaX.js → date-time-9z6pAG5T.js} +317 -278
  21. package/_chunks/dialog.parts-Bi7YbXqS.js +131 -0
  22. package/_chunks/{duration-CL68Em0o.js → duration-D7oRjsmP.js} +5 -5
  23. package/_chunks/editor-popup-ByU7qiub.js +82 -0
  24. package/_chunks/field-configurator-BCINdXpU.js +223 -0
  25. package/_chunks/{framework-mount--RTLIqE-.js → framework-mount-Bk4O_T7T.js} +1 -1
  26. package/_chunks/icon-toolbar-DSjOdwM7.js +134 -0
  27. package/_chunks/magnifying-glass-CvrTDSkB.js +4 -0
  28. package/_chunks/minus-BOAR3A1C.js +4 -0
  29. package/_chunks/mount-Cw2zk58T.js +266 -0
  30. package/_chunks/{native.view-ByyZ1CT5.js → native-Blr3byjO.js} +1 -1
  31. package/_chunks/native-control-pFMuHf3G.js +644 -0
  32. package/_chunks/{number-input-BKwA5FnM.js → number-input-DqXV6vgP.js} +7 -7
  33. package/_chunks/{picker-h1P5RUgp.js → picker-gEGTu1Ki.js} +2 -2
  34. package/_chunks/plus-CbGRkIGl.js +4 -0
  35. package/_chunks/popover-controller-D-AvKQ7B.js +102 -0
  36. package/_chunks/{popup-CT2uD3go.js → popup-C35Isk7p.js} +115 -104
  37. package/_chunks/{rating-choice-DZgmaic0.js → rating-choice-DbxdUJr-.js} +1 -1
  38. package/_chunks/{reorder-list-CSlqAGHw.js → reorder-list-B0_13Sja.js} +1 -1
  39. package/_chunks/request-trail-CCSK6TJA.js +753 -0
  40. package/_chunks/rich-text-5rnc8lpI.js +842 -0
  41. package/_chunks/rotate-left-BF6G883o.js +4 -0
  42. package/_chunks/title-tooltip-Cw6LOZhb.js +11 -0
  43. package/_chunks/tooltip-D4xkio5G.js +54 -0
  44. package/_chunks/tooltip-owner-DjdvqKzz.js +19 -0
  45. package/_chunks/tooltip-session-B6X6x8G_.js +110 -0
  46. package/_chunks/tooltip-text-BXsUEmBH.js +12 -0
  47. package/_chunks/top-layer-popup-CNSDdfJV.js +59 -0
  48. package/_variables.scss +33 -32
  49. package/ai/_chat.scss +28 -3
  50. package/ai/_style.scss +55 -2
  51. package/ai/chat.d.ts +3 -1
  52. package/ai/components.d.ts +13 -2
  53. package/ai/index.d.ts +1 -0
  54. package/ai/index.js +3 -3
  55. package/ai/mount.d.ts +17 -1
  56. package/ai/results/_style.scss +83 -0
  57. package/ai/results/index.d.ts +11 -0
  58. package/ai/results/metrics.d.ts +5 -0
  59. package/ai/results/table.d.ts +5 -0
  60. package/ai/results/text.d.ts +5 -0
  61. package/ai/results/types.d.ts +29 -0
  62. package/ai/transcript.d.ts +2 -0
  63. package/ai/translations.d.ts +1 -1
  64. package/assignee/assignee.scss +5 -1
  65. package/assignee/index.js +2 -2
  66. package/avatar/index.d.ts +25 -2
  67. package/avatar/index.js +33 -32
  68. package/badge.view.d.ts +8 -0
  69. package/brush-range/component.d.ts +1 -3
  70. package/brush-range/component.js +27 -27
  71. package/buttons/remove-button.d.ts +1 -1
  72. package/buttons/remove-button.style.scss +1 -1
  73. package/buttons/svg-button.d.ts +1 -1
  74. package/buttons/svg-button.js +16 -16
  75. package/calendar/_calendar.scss +2 -2
  76. package/calendar/calendar.js +1 -1
  77. package/calendar/index.js +2 -2
  78. package/checkbox/checkbox.scss +1 -22
  79. package/choice-chips/index.d.ts +3 -1
  80. package/choice-chips/index.js +1 -1
  81. package/color-palette/color-palette.js +1 -1
  82. package/color-palette/color-palette.style.scss +1 -1
  83. package/color-palette/color-picker.js +2 -2
  84. package/color-palette/common-palettes.d.ts +1 -1
  85. package/color-palette/common-palettes.js +1 -1
  86. package/color-palette/native.d.ts +15 -2
  87. package/component-catalog.d.ts +9 -7
  88. package/configurator-actions.d.ts +67 -0
  89. package/configurator-actions.js +1 -0
  90. package/configurator-aggregation-list.d.ts +14 -0
  91. package/configurator-aggregation-list.js +61 -0
  92. package/configurator-drop-zone.d.ts +38 -0
  93. package/configurator-drop-zone.js +64 -0
  94. package/configurator-field-icon.d.ts +10 -0
  95. package/configurator-field-icon.js +1 -0
  96. package/configurator-focus.d.ts +4 -0
  97. package/configurator-focus.js +39 -0
  98. package/configurator-sections.d.ts +42 -0
  99. package/configurator-sections.js +71 -0
  100. package/control-presentation.d.ts +8 -2
  101. package/control-presentation.js +25 -20
  102. package/controls.d.ts +1 -2
  103. package/controls.js +4 -3
  104. package/core/editor-popup-position.d.ts +6 -2
  105. package/core/editor-popup.d.ts +4 -0
  106. package/core/editor-popup.js +1 -1
  107. package/core/popover-controller.d.ts +35 -0
  108. package/core/popup-ownership.d.ts +2 -0
  109. package/core/title-tooltip.d.ts +2 -0
  110. package/core/tooltip-session.d.ts +29 -0
  111. package/core/tooltip-surface.d.ts +13 -0
  112. package/core/tooltip-text.d.ts +6 -0
  113. package/core/tooltip.d.ts +35 -0
  114. package/core/top-layer-popup.d.ts +4 -0
  115. package/core/top-layer-popup.js +1 -23
  116. package/date-time/attach.d.ts +1 -1
  117. package/date-time/field.d.ts +3 -2
  118. package/date-time/index.js +1 -1
  119. package/date-time/style.scss +64 -7
  120. package/date-time/time-selection.d.ts +3 -1
  121. package/date-time/types.d.ts +5 -1
  122. package/dialog/dialog-action-footer.d.ts +17 -2
  123. package/dialog/dialog.dom.d.ts +15 -2
  124. package/dialog/dialog.dom.js +9 -9
  125. package/dialog/dialog.parts.d.ts +1 -1
  126. package/dialog/dialog.parts.js +1 -1
  127. package/distribution-chart/_distribution-chart.scss +12 -54
  128. package/distribution-chart/area-chart.js +1 -1
  129. package/distribution-chart/bar-chart.js +1 -1
  130. package/distribution-chart/index.d.ts +1 -1
  131. package/distribution-chart/line-chart.js +1 -1
  132. package/dropdown/content.js +1 -1
  133. package/dropdown/control.js +1 -1
  134. package/dropdown/editor-dropdown.style.scss +5 -0
  135. package/dropdown/index.js +2 -2
  136. package/dropdown/lookup-field.d.ts +5 -0
  137. package/dropdown/lookup-field.js +2 -1
  138. package/dropdown/popup.d.ts +2 -2
  139. package/dropdown/popup.js +1 -1
  140. package/duration/index.js +1 -1
  141. package/editor-actions.js +1 -1
  142. package/field-configurator.d.ts +27 -0
  143. package/field-configurator.js +4 -170
  144. package/field-expansion.d.ts +9 -0
  145. package/filter/filters/slider/_slider.scss +8 -25
  146. package/filter/filters/slider/control.js +2 -0
  147. package/filter/filters/slider/runtime.js +49 -22
  148. package/filter/filters/slider/single.js +1 -1
  149. package/filter-badge.js +1 -1
  150. package/filter-controls.d.ts +0 -1
  151. package/filter-controls.js +5 -6
  152. package/form-controls/index.d.ts +10 -2
  153. package/form-controls/index.js +7 -7
  154. package/form-controls/presentation.js +12 -12
  155. package/formatting/index.d.ts +1 -1
  156. package/formatting/index.js +22 -21
  157. package/formatting/styles.scss +2 -47
  158. package/framework.js +226 -222
  159. package/history-controls.js +27 -1
  160. package/icon-toolbar.d.ts +62 -0
  161. package/icon-toolbar.js +1 -0
  162. package/masked-input/index.js +1 -1
  163. package/native-control.d.ts +1 -2
  164. package/native-control.js +1 -1
  165. package/native-controls.d.ts +54 -2
  166. package/native-styles.css +1 -1
  167. package/native.js +46 -43
  168. package/number-input/index.js +1 -1
  169. package/package.json +36 -1
  170. package/pagination.js +11 -11
  171. package/pdf-viewer/index.js +1 -1
  172. package/pickers.d.ts +5 -1
  173. package/preact-mount.js +1 -1
  174. package/preact.d.ts +8 -6
  175. package/preact.js +71 -64
  176. package/rating-choice.js +1 -1
  177. package/react-control.d.ts +2 -0
  178. package/react-control.js +2 -2
  179. package/react.d.ts +5 -6
  180. package/react.js +68 -66
  181. package/reorder-list.js +1 -1
  182. package/resource-picker/resource-picker-popup.js +1 -1
  183. package/resource-picker/resource-picker.js +4 -4
  184. package/rich-text/engine.d.ts +1 -0
  185. package/rich-text/format-html.d.ts +2 -0
  186. package/rich-text/index.d.ts +4 -0
  187. package/rich-text/index.js +1 -1
  188. package/rich-text/model.d.ts +2 -0
  189. package/rich-text/style.scss +165 -70
  190. package/rich-text/syntax.d.ts +5 -0
  191. package/rich-text/translations.d.ts +2 -0
  192. package/search-input/index.js +1 -1
  193. package/search-input/native.d.ts +21 -2
  194. package/select.d.ts +3 -1
  195. package/select.js +1 -1
  196. package/status-feedback/exit-snapshot.js +4 -4
  197. package/status-feedback/popover.js +4 -4
  198. package/styles/_alert.scss +18 -4
  199. package/styles/_compositions.scss +3 -3
  200. package/styles/_editor-slider.scss +0 -2
  201. package/styles/_field-configurator.scss +147 -0
  202. package/styles/_fields-grid.scss +37 -0
  203. package/styles/_palette.scss +0 -24
  204. package/styles/_primitives.scss +28 -19
  205. package/styles/configurator-actions.scss +141 -0
  206. package/styles/{legacy-pagination.css → pagination.css} +19 -2
  207. package/styles.css +1 -1
  208. package/styles.scss +2 -2
  209. package/surfaces.d.ts +36 -2
  210. package/surfaces.js +35 -132
  211. package/svelte.js +3 -3
  212. package/switch/index.js +15 -14
  213. package/time-grid.d.ts +0 -1
  214. package/time-grid.js +38 -37
  215. package/timeline-track/index.js +2 -2
  216. package/ui.css +1 -1
  217. package/vue.d.ts +26 -30
  218. package/vue.js +117 -121
  219. package/_chunks/chart-frame-Cmc7xU1i.js +0 -130
  220. package/_chunks/choice-chips-CHQTUdLs.js +0 -110
  221. package/_chunks/color-picker-CudqPYZo.js +0 -138
  222. package/_chunks/control-tooltip-uscKfAnV.js +0 -100
  223. package/_chunks/dialog.parts-CKGkC5zP.js +0 -134
  224. package/_chunks/editor-popup-WDdtVDNA.js +0 -81
  225. package/_chunks/history-controls-B3u3INEK.js +0 -27
  226. package/_chunks/mount-DQ1cpppK.js +0 -257
  227. package/_chunks/native-control-C_yok8_-.js +0 -605
  228. package/_chunks/request-trail-DSlFix6i.js +0 -618
  229. package/_chunks/rich-text-CH7gIqOS.js +0 -636
  230. package/avatar/index.view.d.ts +0 -25
  231. package/color-palette/native.view.d.ts +0 -15
  232. package/control-presentation.view.d.ts +0 -8
  233. package/dialog/dialog-action-footer.view.d.ts +0 -20
  234. package/dialog/dialog.dom.view.d.ts +0 -15
  235. package/form-controls/index.view.d.ts +0 -10
  236. package/formatting/control-tooltip.d.ts +0 -27
  237. package/native-controls.view.d.ts +0 -54
  238. package/search-input/native.view.d.ts +0 -21
  239. package/surfaces.view.d.ts +0 -63
  240. /package/styles/{legacy-rating.css → rating.css} +0 -0
@@ -1,7 +1,7 @@
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
- import { t as o } from "../_chunks/chevron-down-GbplLa6s.js";
4
- import { createControlId as s } from "../core/control-id.js";
3
+ import { createControlId as o } from "../core/control-id.js";
4
+ import { t as s } from "../_chunks/chevron-down-GbplLa6s.js";
5
5
  import { t as ee } from "../_chunks/xmark-DD_PBvZI.js";
6
6
  import { SearchInput as c } from "../search-input/index.js";
7
7
  import { resourcePickerClasses as l, resourcePickerDataAttribute as u, resourcePickerIdKey as d } from "./resource-picker.utils.js";
@@ -10,7 +10,7 @@ import { ResourcePickerOption as p } from "./resource-picker-option.js";
10
10
  import { ResourcePickerPopup as m } from "./resource-picker-popup.js";
11
11
  //#region src/resource-picker/resource-picker.tsx
12
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(() => s("rv-resource-list")), L = `${I}-popup`, R = w === "dropdown", [z, B] = t(!1), [V, H] = t(""), [U, W] = t(0), G = r(() => {
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(() => {
14
14
  B(!1), H("");
15
15
  }, []), K = new Set(v.map(d)), q = n(() => E ? [...h] : [...h].sort((e, t) => e.name.localeCompare(t.name, void 0, {
16
16
  numeric: !0,
@@ -178,7 +178,7 @@ function h({ resources: h, selectedResourceIds: v, text: y, onChange: b, classNa
178
178
  }), /* @__PURE__ */ a("span", {
179
179
  class: "rv-resource-picker__chevron",
180
180
  "aria-hidden": "true",
181
- dangerouslySetInnerHTML: { __html: o }
181
+ dangerouslySetInnerHTML: { __html: s }
182
182
  })]
183
183
  }) : null, R ? z && Q ? /* @__PURE__ */ a(m, {
184
184
  triggerRef: M,
@@ -11,6 +11,7 @@ export declare function createHtmlEngine(root: HTMLElement, html: string, onChan
11
11
  setHtml: (value: string) => void;
12
12
  format: (mark: HtmlFormat) => void;
13
13
  block: (value: HtmlBlock) => void;
14
+ focus: () => void;
14
15
  captureSelection: () => void;
15
16
  link: (value: string) => boolean;
16
17
  destroy: () => void;
@@ -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;
@@ -2,6 +2,8 @@ import { EditorActionText, EditorCommitOptions } from '../editor-actions';
2
2
  import { HtmlEditorText } from './translations';
3
3
  export { defaultHtmlEditorText, type HtmlEditorText } from './translations';
4
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;
@@ -13,3 +15,5 @@ export interface HtmlEditorProps extends EditorCommitOptions {
13
15
  export declare function HtmlEditor(props: HtmlEditorProps): import("../_vendor/preact/src/index").JSX.Element;
14
16
  export { sanitizeRichTextHtml, isSafeRichTextLink } from './model';
15
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 HtmlEditor, r as defaultHtmlEditorText, n as htmlRenderNodes, i as isSafeRichTextLink, a as sanitizeRichTextHtml } from "../_chunks/rich-text-CH7gIqOS.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-5rnc8lpI.js";
@@ -1,4 +1,6 @@
1
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;
2
4
  /** Parse inertly, then rebuild nodes; never mount user-provided HTML or attributes. */
3
5
  export declare function richTextFragment(html: string, doc?: Document): DocumentFragment;
4
6
  export declare function sanitizeRichTextHtml(html: string, doc?: Document): string;
@@ -1,117 +1,212 @@
1
+ @use '../styles/filter-controls';
2
+
1
3
  .rv-rich-text-editor {
2
- width: min(560px, calc(100vw - 48px));
4
+ box-sizing: border-box;
5
+ width: min(560px, 100%);
6
+ max-width: calc(100vw - 48px);
7
+ min-width: 0;
3
8
  &__toolbar {
4
9
  display: flex;
5
10
  flex-wrap: wrap;
6
11
  align-items: center;
7
- gap: 6px;
8
- padding-block: 8px;
9
- margin-block: 8px;
10
- border-block: 1px solid var(--rv-ui-border);
11
- .rv-toolbar-group { gap: 2px; padding: 0; }
12
- .rv-toolbar-separator { align-self: stretch; height: auto; }
12
+ gap: 8px;
13
+ margin-block: 10px;
14
+ .rv-icon-toolbar { flex: 0 0 auto; }
13
15
  }
14
- &__command {
15
- display: inline-flex;
16
+ .rv-editor-actions {
17
+ display: flex;
18
+ flex-wrap: wrap;
16
19
  align-items: center;
17
- justify-content: center;
18
- gap: 2px;
19
- min-width: 30px;
20
- min-height: 30px;
21
- padding: 6px;
22
- border-color: transparent;
20
+ gap: 8px;
21
+ margin-block-start: 12px;
23
22
  }
24
- &__level { --rv-icon-size: 9px; }
25
23
  &__link {
26
24
  display: flex;
25
+ flex-wrap: wrap;
27
26
  gap: 8px;
27
+ margin-block-end: 8px;
28
+ input { flex: 1; min-width: 0; }
28
29
  }
29
30
  &__visual,
30
31
  &__source {
31
32
  box-sizing: border-box;
32
33
  width: 100%;
33
- min-height: 200px;
34
+ min-height: 220px;
34
35
  max-height: 50vh;
35
36
  overflow: auto;
36
- padding: 10px;
37
+ padding: 16px;
37
38
  border: 1px solid var(--rv-ui-border);
38
39
  border-radius: 6px;
39
40
  background: var(--rv-ui-surface);
40
41
  color: var(--rv-ui-text);
41
- font: inherit;
42
- white-space: pre-wrap;
42
+ font-family: inherit;
43
+ font-size: 14px;
44
+ line-height: 1.6;
45
+ text-align: start;
46
+ overflow-wrap: anywhere;
47
+ &:focus-visible { outline: 2px solid var(--rv-ui-accent); outline-offset: 2px; }
43
48
  }
44
49
  &__source {
45
- font-family: ui-monospace, monospace;
46
- }
47
- &__visual[hidden] {
48
- display: none;
49
- }
50
- &__visual a {
51
- color: var(--rv-ui-accent-text);
52
- text-decoration: underline;
53
- }
54
- &__visual pre {
55
- background: var(--rv-ui-surface-sunken);
56
- padding: 8px;
57
- }
58
- &__visual blockquote {
59
- border-inline-start: 3px solid var(--rv-ui-border);
60
- padding-inline-start: 12px;
61
- margin-inline: 0;
62
- }
63
- &__visual code {
64
- font-family: ui-monospace, monospace;
65
- background: var(--rv-ui-surface-sunken);
50
+ margin-block-start: 12px;
51
+ min-height: 0;
52
+ max-height: none;
53
+ padding: 0;
54
+ overflow: hidden;
55
+ &:focus-within { outline: 2px solid var(--rv-ui-accent); outline-offset: 2px; box-shadow: none; }
56
+ .rv-highlighted-input__highlight,
57
+ textarea.rv-highlighted-input__input {
58
+ padding: 16px;
59
+ font: 14px/1.6 ui-monospace, SFMono-Regular, Consolas, monospace;
60
+ letter-spacing: normal;
61
+ white-space: pre;
62
+ overflow-wrap: normal;
63
+ tab-size: 2;
64
+ text-align: start;
65
+ }
66
+ .rv-highlighted-input__highlight {
67
+ position: absolute;
68
+ inset: 0;
69
+ height: 100%;
70
+ min-height: 0;
71
+ overflow: hidden;
72
+ }
73
+ textarea.rv-highlighted-input__input {
74
+ position: relative;
75
+ inset: auto;
76
+ display: block;
77
+ height: 220px;
78
+ min-height: 220px;
79
+ max-height: 50vh;
80
+ resize: vertical;
81
+ overflow: auto;
82
+ color: transparent;
83
+ -webkit-text-fill-color: transparent;
84
+ caret-color: var(--rv-ui-text);
85
+ }
86
+ }
87
+ &__visual[hidden] { display: none; }
88
+ &__visual {
89
+ white-space: pre-wrap;
90
+ p, h1, h2, h3, h4, h5, h6, pre, blockquote, ul, ol {
91
+ margin: 0 0 0.75em;
92
+ }
93
+ > :first-child { margin-block-start: 0; }
94
+ > :last-child { margin-block-end: 0; }
95
+ p { font: inherit; }
96
+ h1, h2, h3, h4, h5, h6 {
97
+ margin-block-start: 1em;
98
+ font-family: inherit;
99
+ font-weight: 650;
100
+ line-height: 1.3;
101
+ letter-spacing: normal;
102
+ color: inherit;
103
+ }
104
+ h1 { font-size: 1.65em; }
105
+ h2 { font-size: 1.3em; }
106
+ h3, h4, h5, h6 { font-size: 1.1em; }
107
+ strong { font-weight: 700; }
108
+ em { font-style: italic; }
109
+ s { text-decoration: line-through; }
110
+ ul, ol { padding-inline-start: 1.75em; list-style-position: outside; }
111
+ ul { list-style-type: disc; }
112
+ ol { list-style-type: decimal; }
113
+ li { margin-block: 0.25em; padding-inline-start: 0.15em; }
114
+ li > p { margin-block: 0; }
115
+ li > ul, li > ol { margin-block: 0.25em 0; }
116
+ blockquote {
117
+ border-inline-start: 3px solid var(--rv-ui-border);
118
+ padding-inline-start: 14px;
119
+ margin-inline: 0;
120
+ color: var(--rv-ui-text-muted, var(--rv-ui-text));
121
+ > :last-child { margin-block-end: 0; }
122
+ }
123
+ code, pre { font-family: ui-monospace, SFMono-Regular, Consolas, monospace; }
124
+ code { background: var(--rv-ui-surface-sunken); padding: 0.12em 0.3em; border-radius: 3px; font-size: 0.92em; }
125
+ pre {
126
+ background: var(--rv-ui-surface-sunken);
127
+ border: 1px solid var(--rv-ui-border);
128
+ border-radius: 6px;
129
+ padding: 12px 14px;
130
+ font-size: 0.92em;
131
+ font-weight: 400;
132
+ line-height: 1.6;
133
+ white-space: pre-wrap;
134
+ tab-size: 2;
135
+ code { padding: 0; background: none; border-radius: 0; font: inherit; }
136
+ }
137
+ a { color: var(--rv-ui-accent-text); text-decoration: underline; text-underline-offset: 2px; }
138
+ }
139
+ &__help {
140
+ margin: 8px 0 12px;
141
+ color: var(--rv-ui-text-muted, var(--rv-ui-text));
142
+ font-size: 12px;
143
+ line-height: 1.5;
66
144
  }
67
145
  }
68
146
 
69
147
  .rv-rich-text-cell {
148
+ box-sizing: border-box;
149
+ max-height: 100%;
70
150
  color: inherit;
71
151
  font: inherit;
152
+ // Core uses row height as line-height to center plain cells. Rich blocks need
153
+ // text-sized lines so paragraphs, quotes and lists fit inside taller rows.
154
+ line-height: 1.5;
155
+ padding-block: min(8px, max(0px, calc((var(--rg-theme-row-size, 27px) - 1.5em) / 2)));
72
156
  white-space: pre-wrap;
157
+ overflow-wrap: anywhere;
73
158
  overflow: hidden;
74
- p,
75
- h1,
76
- h2,
77
- h3,
78
- h4,
79
- h5,
80
- h6,
81
- pre,
82
- blockquote,
83
- ul,
84
- ol {
85
- margin-block: 0;
159
+ p, h1, h2, h3, h4, h5, h6, pre, blockquote, ul, ol {
160
+ margin: 0 0 0.35em;
161
+ &:last-child { margin-block-end: 0; }
86
162
  }
87
- h1,
88
- h2,
89
- h3,
90
- h4,
91
- h5,
92
- h6 {
163
+ p { font: inherit; }
164
+ h1, h2, h3, h4, h5, h6 {
165
+ font-family: inherit;
93
166
  font-size: inherit;
94
167
  font-weight: 600;
168
+ line-height: inherit;
169
+ color: inherit;
95
170
  }
96
- ul,
97
- ol {
98
- padding-inline-start: 1.5em;
99
- }
171
+ strong { font-weight: 700; }
172
+ em { font-style: italic; }
173
+ s { text-decoration: line-through; }
174
+ ul, ol { padding-inline-start: 1.5em; list-style-position: outside; }
175
+ ul { list-style-type: disc; }
176
+ ol { list-style-type: decimal; }
177
+ li > p { margin-block: 0; }
178
+ li > ul, li > ol { margin-block: 0.15em 0; }
100
179
  blockquote {
101
- border-inline-start: 2px solid currentColor;
102
- padding-inline-start: 8px;
180
+ border-inline-start: 2px solid var(--rv-ui-border, GrayText);
181
+ padding-inline-start: 10px;
103
182
  margin-inline: 0;
183
+ color: var(--rv-ui-text-muted, inherit);
104
184
  }
105
185
  a {
106
- color: inherit;
186
+ color: var(--rv-ui-accent-text, LinkText);
107
187
  text-decoration: underline;
108
188
  text-underline-offset: 2px;
189
+ text-decoration-thickness: 1px;
190
+ &:focus-visible { outline: 2px solid var(--rv-ui-accent, Highlight); outline-offset: 2px; border-radius: 2px; }
109
191
  }
110
- code {
111
- font-family: ui-monospace, monospace;
112
- font-size: 0.9em;
113
- }
192
+ code, pre { font-family: ui-monospace, SFMono-Regular, Consolas, monospace; font-size: 0.9em; }
193
+ code { background: var(--rv-ui-surface-sunken); padding-inline: 0.2em; border-radius: 3px; }
114
194
  pre {
115
195
  white-space: pre-wrap;
196
+ background: var(--rv-ui-surface-sunken);
197
+ padding: 3px 6px;
198
+ border-radius: 3px;
199
+ line-height: 1.5;
200
+ tab-size: 2;
201
+ code { font: inherit; background: none; padding: 0; }
116
202
  }
117
203
  }
204
+
205
+ .rv-html-syntax {
206
+ font: inherit;
207
+ color: var(--rv-ui-text);
208
+ &__tag { color: var(--rv-ui-accent-text); }
209
+ &__attribute { color: var(--rv-ui-warning, var(--rv-ui-accent-text)); }
210
+ &__string { color: var(--rv-ui-success); }
211
+ &__comment { color: var(--rv-ui-text-muted); }
212
+ }
@@ -0,0 +1,5 @@
1
+ import { h } from '../_vendor/preact/src/index';
2
+ /** Paint HTML source as escaped text; source is never interpreted as markup. */
3
+ export declare function HtmlSyntax({ code }: {
4
+ code: string;
5
+ }): h.JSX.Element;
@@ -1,5 +1,7 @@
1
1
  /** Visible and accessible labels for the shared HTML editor. */
2
2
  export interface HtmlEditorText {
3
+ keyboardHelp?: string;
4
+ codeHelp?: string;
3
5
  visual: string;
4
6
  source: string;
5
7
  label: string;
@@ -1,6 +1,6 @@
1
1
  import { c as e } from "../_chunks/preact.module-BBM36DnO.js";
2
2
  import { t } from "../_chunks/jsxRuntime.module-F6UFnpT-.js";
3
- import { n } from "../_chunks/native.view-ByyZ1CT5.js";
3
+ import { n } from "../_chunks/native-Blr3byjO.js";
4
4
  //#region src/search-input/index.tsx
5
5
  function r() {
6
6
  return /* @__PURE__ */ t("svg", {
@@ -1,2 +1,21 @@
1
- /** Compatibility entry; markup is owned by the Preact TSX implementation. */
2
- export * from './native.view';
1
+ export interface SearchPresentation {
2
+ rootClassName?: string;
3
+ inputClassName?: string;
4
+ iconClassName?: string;
5
+ shortcutClassName?: string;
6
+ hideIcon?: boolean;
7
+ icon?: any;
8
+ shortcut?: any;
9
+ leading?: any;
10
+ trailing?: any;
11
+ testId?: string;
12
+ inputAttributes?: Record<string, any>;
13
+ }
14
+ /** One search composition for native, grid and Preact rendering. */
15
+ export declare function renderSearchInput<H extends (...args: any[]) => any>(h: H, options: SearchPresentation): ReturnType<H>;
16
+ export declare function createSearchInput(document: Document, options: Omit<SearchPresentation, 'icon'> & {
17
+ iconSvg: string;
18
+ }): {
19
+ root: HTMLElement;
20
+ input: HTMLInputElement;
21
+ };
package/select.d.ts CHANGED
@@ -1,8 +1,10 @@
1
1
  import { ComponentChildren, JSX } from './_vendor/preact/src/index';
2
- import { DropdownOption } from './dropdown/dropdown.types';
2
+ import { DropdownEnvironment, DropdownOption } from './dropdown/dropdown.types';
3
3
  export type SelectOptionProps = JSX.IntrinsicElements['option'];
4
4
  type Attributes = Omit<JSX.IntrinsicElements['select'], 'value' | 'defaultValue' | 'onChange' | 'onInput' | 'multiple' | 'ref'>;
5
5
  export type SelectProps = Attributes & {
6
+ /** Optional host integration for portalled popup lifecycle and pointer releases. */
7
+ environment?: DropdownEnvironment;
6
8
  value?: string | number | readonly string[];
7
9
  defaultValue?: string | number | readonly string[];
8
10
  /** Optional domain policy for option descriptors; no native option nodes are mounted. */
package/select.js CHANGED
@@ -1 +1 @@
1
- export { s as Select, c as selectOptions } from "./_chunks/native-control-C_yok8_-.js";
1
+ export { s as Select, c as selectOptions } from "./_chunks/native-control-pFMuHf3G.js";
@@ -1,10 +1,10 @@
1
- import { isUiMotionEnabled as e } from "../core/motion.js";
2
- import { showTopLayerPopup as t } from "../core/top-layer-popup.js";
1
+ import { r as e } from "../_chunks/top-layer-popup-CNSDdfJV.js";
2
+ import { isUiMotionEnabled as t } from "../core/motion.js";
3
3
  import { animateStatusFeedback as n } from "./motion.js";
4
4
  //#region src/status-feedback/exit-snapshot.ts
5
5
  function r(r) {
6
6
  let i = r.ownerDocument.defaultView;
7
- if (!i || typeof r.animate != "function" || !e(r)) return;
7
+ if (!i || typeof r.animate != "function" || !t(r)) return;
8
8
  let a = r.getBoundingClientRect(), o = r.cloneNode(!0), s = [r, ...r.querySelectorAll("*")], c = [o, ...o.querySelectorAll("*")];
9
9
  o.removeAttribute("popover"), o.removeAttribute("id"), o.querySelectorAll("[id]").forEach((e) => e.removeAttribute("id")), o.querySelectorAll("[role], [aria-live]").forEach((e) => {
10
10
  e.removeAttribute("role"), e.removeAttribute("aria-live");
@@ -24,7 +24,7 @@ function r(r) {
24
24
  borderColor: l.borderColor,
25
25
  fontFamily: l.fontFamily,
26
26
  boxShadow: l.boxShadow
27
- }), r.ownerDocument.body.append(o), t(o), s.forEach((e, t) => {
27
+ }), r.ownerDocument.body.append(o), e(o), s.forEach((e, t) => {
28
28
  e.scrollTop && (c[t].scrollTop = e.scrollTop), e.scrollLeft && (c[t].scrollLeft = e.scrollLeft);
29
29
  });
30
30
  let u = () => {
@@ -1,6 +1,6 @@
1
1
  import { calculateAnchoredPopoverPosition as e } from "../core/anchored-popover.js";
2
- import { inheritUiMotion as t } from "../core/motion.js";
3
- import { hideTopLayerPopup as n, showTopLayerPopup as r } from "../core/top-layer-popup.js";
2
+ import { r as t, t as n } from "../_chunks/top-layer-popup-CNSDdfJV.js";
3
+ import { inheritUiMotion as r } from "../core/motion.js";
4
4
  import { statusFeedbackSize as i } from "./placement.js";
5
5
  import { animateStatusFeedback as a } from "./motion.js";
6
6
  import { statusFeedbackExit as o } from "./exit-snapshot.js";
@@ -58,9 +58,9 @@ var s = 0, c = class {
58
58
  width: s.innerWidth,
59
59
  height: s.innerHeight
60
60
  }, c, this.collapsed, this.options), u = l.width;
61
- n.style.width = `${u}px`, n.style.maxHeight = `${l.maxHeight}px`, this.releaseMotion ??= t(o, n);
61
+ n.style.width = `${u}px`, n.style.maxHeight = `${l.maxHeight}px`, this.releaseMotion ??= r(o, n);
62
62
  let d = !this.mode;
63
- d && (this.removeExit?.(), this.removeExit = void 0, this.mode = r(n));
63
+ d && (this.removeExit?.(), this.removeExit = void 0, this.mode = t(n));
64
64
  let f = o.getBoundingClientRect(), p = e({
65
65
  left: f.right - u,
66
66
  right: f.right,
@@ -8,7 +8,7 @@
8
8
  padding: 12px 16px;
9
9
  border: 1px solid var(--rv-ui-border);
10
10
  border-radius: var(--rv-ui-radius, 8px);
11
- background: var(--rv-ui-surface);
11
+ background: var(--rv-alert-surface, var(--rv-ui-surface));
12
12
  color: var(--rv-ui-text);
13
13
  font-size: 14px;
14
14
  font-weight: 400;
@@ -22,10 +22,24 @@
22
22
  .rv-alert__title { font-weight: 500; }
23
23
  .rv-alert__description { color: var(--rv-ui-text-muted); }
24
24
  .rv-alert__content > p, .rv-alert__description > p { margin: 0; }
25
- .rv-alert--danger { --rv-alert-tone: var(--rv-ui-danger); color: var(--rv-alert-tone); }
25
+ .rv-alert--danger,
26
+ .rv-alert--warning,
27
+ .rv-alert--success { border: 0; }
28
+
29
+ .rv-alert--danger {
30
+ --rv-alert-tone: var(--rv-ui-danger);
31
+ --rv-alert-surface: var(--rv-ui-danger-surface);
32
+ color: var(--rv-alert-tone);
33
+ }
26
34
  .rv-alert--danger .rv-alert__description { color: inherit; }
27
- .rv-alert--warning { --rv-alert-tone: var(--rv-ui-warning); }
28
- .rv-alert--success { --rv-alert-tone: var(--rv-ui-success); }
35
+ .rv-alert--warning {
36
+ --rv-alert-tone: var(--rv-ui-warning);
37
+ --rv-alert-surface: var(--rv-ui-warning-surface);
38
+ }
39
+ .rv-alert--success {
40
+ --rv-alert-tone: var(--rv-ui-success);
41
+ --rv-alert-surface: var(--rv-ui-success-surface);
42
+ }
29
43
 
30
44
  .rv-alert--with-actions { grid-template-columns: minmax(0, 1fr) auto; column-gap: 12px; align-items: center; }
31
45
  .rv-alert--with-icon.rv-alert--with-actions { grid-template-columns: 16px minmax(0, 1fr) auto; }
@@ -23,12 +23,12 @@
23
23
  .rv-field__error { color: var(--rv-ui-danger); font-size: 12px; }
24
24
  .rv-panel, .rv-empty-state { padding: 16px; border: 1px solid var(--rv-ui-border); border-radius: var(--rv-ui-radius, 8px); background: var(--rv-ui-surface); color: var(--rv-ui-text); }
25
25
  .rv-empty-state { text-align: center; }
26
- .rv-popover, .rv-menu, .rv-tooltip { border: 1px solid var(--rv-ui-border); border-radius: var(--rv-ui-radius, 8px); background: var(--rv-ui-surface-elevated); color: var(--rv-ui-text); box-shadow: 0 8px 24px var(--rv-ui-shadow); padding: 8px; max-width: calc(100vw - 16px); max-height: calc(100vh - 16px); overflow: auto; z-index: 10000; }
26
+ .rv-popover, .rv-menu { border: 1px solid var(--rv-ui-border); border-radius: var(--rv-ui-radius, 8px); background: var(--rv-ui-surface-elevated); color: var(--rv-ui-text); box-shadow: 0 8px 24px var(--rv-ui-shadow); padding: 8px; max-width: calc(100vw - 16px); max-height: calc(100vh - 16px); overflow: auto; z-index: 10000; }
27
27
  .rv-popover[hidden] { display: none; }
28
28
  .rv-menu { display: grid; gap: 2px; }
29
29
  .rv-menu > [role='menuitem'] { justify-content: start; text-align: start; }
30
30
  .rv-menu-separator { border-block-start: 1px solid var(--rv-ui-border); margin-block: 4px; }
31
- .rv-tooltip { font-size: 12px; padding: 6px 10px; pointer-events: none; }
31
+
32
32
  .rv-radio-group { display: flex; flex-wrap: wrap; gap: 12px; border: 0; padding: 0; margin: 0; }
33
33
  .rv-radio-group label { display: inline-flex; align-items: center; gap: 6px; }
34
34
  .rv-loading-container { position: relative; }
@@ -38,7 +38,7 @@
38
38
 
39
39
  .rv-circular-progress { width: 36px; height: 36px; stroke-width: 3; color: var(--rv-ui-accent); }
40
40
  .rv-resize-handle { position: relative; width: 12px; min-height: 48px; flex: 0 0 12px; cursor: col-resize; touch-action: none; user-select: none; }
41
- .rv-resize-handle::after { content: ''; position: absolute; inset-block: 0; inset-inline-start: 5px; width: 2px; border-radius: 2px; background: var(--rv-ui-border-strong); transition: background-color var(--rv-ui-motion-fast, 120ms) var(--rv-ui-motion-ease, cubic-bezier(.2, 0, 0, 1)); }
41
+ .rv-resize-handle::after { content: ''; position: absolute; inset-block: 0; inset-inline-start: 5px; width: 1px; border-radius: 2px; background: var(--rv-ui-border); transition: background-color var(--rv-ui-motion-fast, 120ms) var(--rv-ui-motion-ease, cubic-bezier(.2, 0, 0, 1)); }
42
42
  .rv-resize-handle:hover::after, .rv-resize-handle:focus-visible::after { background: var(--rv-ui-accent); }
43
43
  .rv-resize-handle:focus-visible { outline: 2px solid var(--rv-ui-accent); }
44
44
  .rv-btn[aria-pressed='true'] { background: var(--rv-ui-selected-bg); color: var(--rv-ui-selected-accent-fg, var(--rv-ui-accent-text)); border-color: transparent; font-weight: 500; }
@@ -33,8 +33,6 @@ revo-grid, .rv-ui, :root {
33
33
  display: flex;
34
34
  align-items: center;
35
35
  }
36
- // Retain the legacy hook; the shared input now owns the track fill.
37
- &-fill { display: none; }
38
36
  &-input {
39
37
  @include single-slider.presentation;
40
38
  min-width: 0;