@revolist/ui 4.0.3-rc → 4.0.3

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 (314) hide show
  1. package/MIGRATION.md +36 -0
  2. package/OWNERSHIP.md +32 -32
  3. package/README.md +136 -78
  4. package/_button.scss +6 -2
  5. package/_chunks/arrow-up-Cw8hW9vp.js +4 -0
  6. package/_chunks/calculator-CDWOuAcp.js +4 -0
  7. package/_chunks/{calendar-xpZ0v3xf.js → calendar-CgXQgkga.js} +19 -19
  8. package/_chunks/chart-frame-hcOlnQ1K.js +145 -0
  9. package/_chunks/{chevron-right-sxHQMSkq.js → check-BwI7iCAm.js} +2 -2
  10. package/_chunks/{chevron-left-D0nc4Z5S.js → chevron-right-CM3ljziP.js} +2 -2
  11. package/_chunks/choice-chips-SkllS5Kl.js +126 -0
  12. package/_chunks/{color-palette-D8vyPfld.js → color-palette-DMJUChWC.js} +20 -22
  13. package/_chunks/color-picker-BpCTuIdm.js +143 -0
  14. package/_chunks/{component-C_T2VN5u.js → component-CfeHXgIw.js} +279 -264
  15. package/_chunks/{component-metadata-BMOOmqx5.js → component-metadata-BKd7U8OW.js} +0 -8
  16. package/_chunks/configurator-actions-DnStE6Yl.js +155 -0
  17. package/_chunks/configurator-field-icon-CmcM_sPs.js +53 -0
  18. package/_chunks/{control-AHKXD5Eu.js → control-Dcrjsunl.js} +42 -17
  19. package/_chunks/controls-B_6NJarZ.js +650 -0
  20. package/_chunks/{date-control-DrVFX13g.js → date-control-C4h4m75W.js} +1 -1
  21. package/_chunks/{date-time-qIhp5vaX.js → date-time-CTOSbzb0.js} +317 -278
  22. package/_chunks/dialog.parts-3w5FR06n.js +131 -0
  23. package/_chunks/{duration-CL68Em0o.js → duration-Bf2OS1V5.js} +5 -5
  24. package/_chunks/editor-popup-ByU7qiub.js +82 -0
  25. package/_chunks/field-configurator-D5dZRhDe.js +288 -0
  26. package/_chunks/{framework-mount--RTLIqE-.js → framework-mount-Bk4O_T7T.js} +1 -1
  27. package/_chunks/icon-toolbar-DSjOdwM7.js +134 -0
  28. package/_chunks/magnifying-glass-CvrTDSkB.js +4 -0
  29. package/_chunks/minus-BOAR3A1C.js +4 -0
  30. package/_chunks/mount-BRdcG60g.js +267 -0
  31. package/_chunks/{native.view-ByyZ1CT5.js → native-Blr3byjO.js} +1 -1
  32. package/_chunks/native-control-B_fVA5bL.js +649 -0
  33. package/_chunks/{number-input-BKwA5FnM.js → number-input-CmM6_2vR.js} +7 -7
  34. package/_chunks/{picker-h1P5RUgp.js → picker-DTqET-2W.js} +2 -2
  35. package/_chunks/plus-CbGRkIGl.js +4 -0
  36. package/_chunks/popover-controller-D-AvKQ7B.js +102 -0
  37. package/_chunks/{popup-CT2uD3go.js → popup-C35Isk7p.js} +115 -104
  38. package/_chunks/{rating-choice-DZgmaic0.js → rating-choice-C-6wcb9U.js} +1 -1
  39. package/_chunks/{reorder-list-CSlqAGHw.js → reorder-list-DIl1gkV6.js} +1 -1
  40. package/_chunks/request-trail-DrhdpWiH.js +762 -0
  41. package/_chunks/rich-text-BnilBbhU.js +842 -0
  42. package/_chunks/rotate-left-BF6G883o.js +4 -0
  43. package/_chunks/selection-list-tooltips-C5oMJe26.js +42 -0
  44. package/_chunks/title-tooltip-Cw6LOZhb.js +11 -0
  45. package/_chunks/tooltip-D4xkio5G.js +54 -0
  46. package/_chunks/tooltip-owner-DjdvqKzz.js +19 -0
  47. package/_chunks/tooltip-session-B6X6x8G_.js +110 -0
  48. package/_chunks/tooltip-text-BXsUEmBH.js +12 -0
  49. package/_chunks/top-layer-popup-CNSDdfJV.js +59 -0
  50. package/_dialog.scss +57 -22
  51. package/_form.scss +71 -21
  52. package/_legend.scss +25 -7
  53. package/_shared/data-query/index.d.ts +2 -2
  54. package/_shared/data-query/load-options.d.ts +2 -2
  55. package/_variables.scss +34 -32
  56. package/_view-switcher.scss +6 -0
  57. package/activity-message.d.ts +1 -1
  58. package/ai/_chat.scss +35 -3
  59. package/ai/_style.scss +76 -16
  60. package/ai/chat.d.ts +3 -1
  61. package/ai/components.d.ts +16 -3
  62. package/ai/index.d.ts +1 -0
  63. package/ai/index.js +3 -3
  64. package/ai/mount.d.ts +30 -6
  65. package/ai/request-trail.d.ts +9 -3
  66. package/ai/results/_style.scss +83 -0
  67. package/ai/results/index.d.ts +11 -0
  68. package/ai/results/metrics.d.ts +5 -0
  69. package/ai/results/table.d.ts +5 -0
  70. package/ai/results/text.d.ts +5 -0
  71. package/ai/results/types.d.ts +29 -0
  72. package/ai/transcript.d.ts +2 -0
  73. package/ai/translations.d.ts +1 -1
  74. package/angular/angular.d.ts +1 -1
  75. package/angular/angular.js +13 -7
  76. package/assignee/assignee.scss +28 -6
  77. package/assignee/index.js +2 -2
  78. package/avatar/avatar.style.scss +23 -6
  79. package/avatar/index.d.ts +25 -2
  80. package/avatar/index.js +33 -32
  81. package/badge.d.ts +1 -1
  82. package/badge.view.d.ts +8 -0
  83. package/brush-range/_brush-range.scss +55 -49
  84. package/brush-range/component.d.ts +1 -3
  85. package/brush-range/component.js +27 -27
  86. package/buttons/delete-button.style.scss +6 -2
  87. package/buttons/remove-button.d.ts +1 -1
  88. package/buttons/remove-button.style.scss +1 -1
  89. package/buttons/svg-button.d.ts +1 -1
  90. package/buttons/svg-button.js +16 -16
  91. package/calendar/_calendar.scss +21 -25
  92. package/calendar/calendar.js +1 -1
  93. package/calendar/header.js +1 -2
  94. package/calendar/index.js +2 -2
  95. package/cell-input.scss +3 -7
  96. package/cell-visuals/badge.style.scss +6 -3
  97. package/cell-visuals/bar-chart.style.scss +2 -1
  98. package/cell-visuals/column-type.style.css +12 -0
  99. package/cell-visuals/progress-line-value.renderer.style.scss +4 -2
  100. package/cell-visuals/progress-line.style.scss +1 -4
  101. package/cell-visuals/sparkline.style.scss +2 -1
  102. package/cell-visuals/timeline.style.css +4 -2
  103. package/checkbox/checkbox.scss +6 -24
  104. package/choice-chips/index.d.ts +3 -1
  105. package/choice-chips/index.js +1 -1
  106. package/color-palette/color-palette.js +1 -1
  107. package/color-palette/color-palette.style.scss +88 -25
  108. package/color-palette/color-picker.js +2 -2
  109. package/color-palette/color-picker.style.scss +23 -10
  110. package/color-palette/common-palettes.d.ts +1 -1
  111. package/color-palette/common-palettes.js +1 -1
  112. package/color-palette/native.d.ts +15 -2
  113. package/component-catalog.d.ts +9 -7
  114. package/configurator-actions.d.ts +67 -0
  115. package/configurator-actions.js +1 -0
  116. package/configurator-aggregation-list.d.ts +14 -0
  117. package/configurator-aggregation-list.js +63 -0
  118. package/configurator-drop-zone.d.ts +39 -0
  119. package/configurator-drop-zone.js +66 -0
  120. package/configurator-field-icon.d.ts +10 -0
  121. package/configurator-field-icon.js +1 -0
  122. package/configurator-focus.d.ts +4 -0
  123. package/configurator-focus.js +39 -0
  124. package/configurator-sections.d.ts +42 -0
  125. package/configurator-sections.js +71 -0
  126. package/control-presentation.d.ts +8 -2
  127. package/control-presentation.js +25 -20
  128. package/controls.d.ts +12 -2
  129. package/controls.js +4 -3
  130. package/core/editor-popup-position.d.ts +6 -2
  131. package/core/editor-popup.d.ts +4 -0
  132. package/core/editor-popup.js +1 -1
  133. package/core/popover-controller.d.ts +35 -0
  134. package/core/popup-ownership.d.ts +2 -0
  135. package/core/selection-list-tooltips.d.ts +2 -0
  136. package/core/title-tooltip.d.ts +2 -0
  137. package/core/tooltip-session.d.ts +29 -0
  138. package/core/tooltip-surface.d.ts +13 -0
  139. package/core/tooltip-text.d.ts +6 -0
  140. package/core/tooltip.d.ts +35 -0
  141. package/core/top-layer-popup.d.ts +4 -0
  142. package/core/top-layer-popup.js +1 -23
  143. package/date-time/attach.d.ts +1 -1
  144. package/date-time/date-control.d.ts +1 -1
  145. package/date-time/field.d.ts +3 -2
  146. package/date-time/index.js +1 -1
  147. package/date-time/style.scss +239 -36
  148. package/date-time/time-selection.d.ts +3 -1
  149. package/date-time/types.d.ts +5 -1
  150. package/dialog/dialog-action-footer.d.ts +17 -2
  151. package/dialog/dialog.dom.d.ts +15 -2
  152. package/dialog/dialog.dom.js +9 -9
  153. package/dialog/dialog.parts.d.ts +1 -1
  154. package/dialog/dialog.parts.js +1 -1
  155. package/distribution-chart/_distribution-chart.scss +113 -77
  156. package/distribution-chart/area-chart.js +1 -1
  157. package/distribution-chart/bar-chart.js +1 -1
  158. package/distribution-chart/chart-frame.d.ts +1 -1
  159. package/distribution-chart/index.d.ts +1 -1
  160. package/distribution-chart/line-chart.js +1 -1
  161. package/dropdown/content.js +1 -1
  162. package/dropdown/control.js +1 -1
  163. package/dropdown/dropdown.types.d.ts +1 -1
  164. package/dropdown/editor-dropdown.style.scss +19 -9
  165. package/dropdown/index.js +2 -2
  166. package/dropdown/lookup-field.d.ts +5 -0
  167. package/dropdown/lookup-field.js +2 -1
  168. package/dropdown/popup.d.ts +2 -2
  169. package/dropdown/popup.js +1 -1
  170. package/duration/index.js +1 -1
  171. package/editor-actions.js +1 -1
  172. package/editor-layout/index.d.ts +4 -4
  173. package/editor-layout/index.js +39 -34
  174. package/editor-layout/style.scss +82 -18
  175. package/field-configurator.d.ts +39 -1
  176. package/field-configurator.js +4 -170
  177. package/field-expansion.d.ts +9 -0
  178. package/filter/filters/slider/_single-slider.scss +57 -38
  179. package/filter/filters/slider/_slider.scss +41 -33
  180. package/filter/filters/slider/control.js +2 -0
  181. package/filter/filters/slider/runtime.js +49 -22
  182. package/filter/filters/slider/single.js +1 -1
  183. package/filter-badge.js +1 -1
  184. package/filter-controls.d.ts +0 -1
  185. package/filter-controls.js +5 -6
  186. package/form-controls/index.d.ts +10 -2
  187. package/form-controls/index.js +7 -7
  188. package/form-controls/presentation.d.ts +1 -1
  189. package/form-controls/presentation.js +12 -12
  190. package/formatting/index.d.ts +1 -1
  191. package/formatting/index.js +22 -21
  192. package/formatting/styles.scss +14 -57
  193. package/framework.js +227 -224
  194. package/history-controls.js +27 -1
  195. package/icon-toolbar.d.ts +62 -0
  196. package/icon-toolbar.js +1 -0
  197. package/icons/icon.d.ts +1 -1
  198. package/legend.d.ts +1 -1
  199. package/masked-input/index.js +1 -1
  200. package/native-control.d.ts +1 -2
  201. package/native-control.js +1 -1
  202. package/native-controls.d.ts +54 -2
  203. package/native-styles.css +1 -1
  204. package/native-styles.scss +6 -2
  205. package/native.d.ts +3 -3
  206. package/native.js +46 -43
  207. package/number-input/index.d.ts +1 -1
  208. package/number-input/index.js +1 -1
  209. package/package.json +71 -2
  210. package/pagination.js +11 -11
  211. package/pdf-viewer/header.d.ts +1 -1
  212. package/pdf-viewer/index.d.ts +2 -2
  213. package/pdf-viewer/index.js +1 -1
  214. package/pdf-viewer/search-bar.d.ts +1 -1
  215. package/pdf-viewer/status.d.ts +1 -1
  216. package/pdf-viewer/style.scss +203 -42
  217. package/pickers.d.ts +5 -1
  218. package/preact-mount.js +1 -1
  219. package/preact.d.ts +13 -10
  220. package/preact.js +109 -64
  221. package/progress/_bar.scss +9 -3
  222. package/progress/_circular.scss +2 -1
  223. package/rating-choice.js +1 -1
  224. package/react-adapter.d.ts +4 -2
  225. package/react-control.d.ts +2 -0
  226. package/react-control.js +2 -2
  227. package/react.d.ts +7 -8
  228. package/react.js +67 -66
  229. package/reorder-list.d.ts +1 -1
  230. package/reorder-list.js +1 -1
  231. package/reorder-list.scss +59 -17
  232. package/resource-picker/resource-picker-popup.js +1 -1
  233. package/resource-picker/resource-picker.js +74 -72
  234. package/resource-picker/resource-picker.scss +62 -34
  235. package/rich-text/engine.d.ts +1 -0
  236. package/rich-text/format-html.d.ts +2 -0
  237. package/rich-text/index.d.ts +4 -0
  238. package/rich-text/index.js +1 -1
  239. package/rich-text/model.d.ts +2 -0
  240. package/rich-text/style.scss +293 -44
  241. package/rich-text/syntax.d.ts +5 -0
  242. package/rich-text/toolbar.d.ts +1 -1
  243. package/rich-text/translations.d.ts +2 -0
  244. package/search-input/index.js +1 -1
  245. package/search-input/native.d.ts +21 -2
  246. package/select.d.ts +3 -1
  247. package/select.js +1 -1
  248. package/selection-list.d.ts +1 -0
  249. package/selection-list.js +3 -1
  250. package/status-feedback/exit-snapshot.js +4 -4
  251. package/status-feedback/popover.js +4 -4
  252. package/status-feedback/status-feedback.scss +124 -35
  253. package/styles/_activity-message.scss +24 -7
  254. package/styles/_alert.scss +78 -17
  255. package/styles/_cell-editor-frame.scss +11 -0
  256. package/styles/_compositions.scss +400 -80
  257. package/styles/_control.scss +30 -8
  258. package/styles/_disclosure.scss +15 -5
  259. package/styles/_editor-counter.scss +16 -6
  260. package/styles/_editor-slider.scss +8 -4
  261. package/styles/_field-configurator.scss +321 -23
  262. package/styles/_fields-grid.scss +49 -0
  263. package/styles/_filter-controls.scss +10 -2
  264. package/styles/_icon-action.scss +48 -15
  265. package/styles/_loading.scss +12 -3
  266. package/styles/_motion.scss +32 -9
  267. package/styles/_palette.scss +0 -24
  268. package/styles/_primitives.scss +369 -110
  269. package/styles/_theme.scss +130 -86
  270. package/styles/_thresholds.scss +28 -25
  271. package/styles/_time-grid.scss +8 -3
  272. package/styles/_tokens.scss +6 -1
  273. package/styles/configurator-actions.scss +241 -0
  274. package/styles/pagination.css +213 -0
  275. package/styles/{legacy-rating.css → rating.css} +8 -3
  276. package/styles.css +1 -1
  277. package/styles.scss +3 -5
  278. package/surfaces.d.ts +38 -2
  279. package/surfaces.js +37 -134
  280. package/svelte/UiComponent.svelte +44 -11
  281. package/svelte.d.ts +1 -1
  282. package/svelte.js +3 -3
  283. package/switch/index.js +15 -14
  284. package/time-grid.d.ts +0 -1
  285. package/time-grid.js +38 -37
  286. package/timeline-track/_style.scss +96 -24
  287. package/timeline-track/index.js +2 -2
  288. package/ui.css +1 -1
  289. package/view-switcher.d.ts +23 -0
  290. package/vue.d.ts +29 -32
  291. package/vue.js +116 -121
  292. package/_chunks/chart-frame-Cmc7xU1i.js +0 -130
  293. package/_chunks/choice-chips-CHQTUdLs.js +0 -110
  294. package/_chunks/color-picker-CudqPYZo.js +0 -138
  295. package/_chunks/control-tooltip-uscKfAnV.js +0 -100
  296. package/_chunks/controls-DsNi8V8I.js +0 -630
  297. package/_chunks/dialog.parts-CKGkC5zP.js +0 -134
  298. package/_chunks/editor-popup-WDdtVDNA.js +0 -81
  299. package/_chunks/history-controls-B3u3INEK.js +0 -27
  300. package/_chunks/mount-DQ1cpppK.js +0 -257
  301. package/_chunks/native-control-C_yok8_-.js +0 -605
  302. package/_chunks/request-trail-DSlFix6i.js +0 -618
  303. package/_chunks/rich-text-CH7gIqOS.js +0 -636
  304. package/avatar/index.view.d.ts +0 -25
  305. package/color-palette/native.view.d.ts +0 -15
  306. package/control-presentation.view.d.ts +0 -8
  307. package/dialog/dialog-action-footer.view.d.ts +0 -20
  308. package/dialog/dialog.dom.view.d.ts +0 -15
  309. package/form-controls/index.view.d.ts +0 -10
  310. package/formatting/control-tooltip.d.ts +0 -27
  311. package/native-controls.view.d.ts +0 -54
  312. package/search-input/native.view.d.ts +0 -21
  313. package/styles/legacy-pagination.css +0 -112
  314. package/surfaces.view.d.ts +0 -63
@@ -5,9 +5,9 @@ import type { QueryObserverOptions } from '@tanstack/query-core';
5
5
  /** Read policy only: identity, transport, acceptance framing and projection stay engine-owned. */
6
6
  export declare const nativeReadOptionKeys: readonly ["enabled", "staleTime", "gcTime", "refetchInterval", "refetchIntervalInBackground", "refetchOnMount", "refetchOnWindowFocus", "refetchOnReconnect", "retry", "retryDelay", "retryOnMount", "networkMode", "meta"];
7
7
  /** Native callbacks receive the native Query; its cached data is engine-owned/opaque. */
8
- export type NativeReadOptions = Pick<QueryObserverOptions<unknown, unknown>, typeof nativeReadOptionKeys[number]>;
8
+ export type NativeReadOptions = Pick<QueryObserverOptions<unknown, unknown>, (typeof nativeReadOptionKeys)[number]>;
9
9
  /** Also protects JavaScript callers from overriding keys, queryFn or acceptance framing. */
10
- export declare function nativeReadOptions<FnData, Data = FnData>(options?: NativeReadOptions): Pick<QueryObserverOptions<FnData, unknown, Data, Data>, typeof nativeReadOptionKeys[number]>;
10
+ export declare function nativeReadOptions<FnData, Data = FnData>(options?: NativeReadOptions): Pick<QueryObserverOptions<FnData, unknown, Data, Data>, (typeof nativeReadOptionKeys)[number]>;
11
11
  /**
12
12
  * Optional native read policies plus shared scope, consistency and product reconciliation.
13
13
  * Native options: enabled, staleTime, gcTime, refetchInterval, refetchIntervalInBackground,
package/_variables.scss CHANGED
@@ -1,3 +1,4 @@
1
+ @use 'styles/built-in-palettes' as palettes;
1
2
  @use './styles/palette';
2
3
  /**
3
4
  * Variables
@@ -5,47 +6,48 @@
5
6
 
6
7
  $rv-font-weight-medium: 500 !default;
7
8
 
8
- $primary-color-light: palette.$legacy-007bff;
9
- $primary-color-dark: palette.$legacy-0d63e8;
9
+ $primary-color-light: palettes.color('common', 'hex007bff');
10
+ $primary-color-dark: palettes.color('common', 'hex0d63e8');
10
11
 
11
- $text-color-light: palette.$legacy-000;
12
- $text-color-light-secondary: palette.$legacy-757575;
12
+ $text-color-light: palettes.color('common', 'hex000');
13
+ $text-color-light-secondary: palettes.color('common', 'hex757575');
13
14
  $text-color-dark: palette.$white;
14
- $text-color-dark-secondary: palette.$legacy-999;
15
- $background-color-light: palette.$legacy-f6f6f7;
15
+ $text-color-dark-secondary: palettes.color('common', 'hex999');
16
+ $background-color-light: palettes.color('common', 'hexf6f6f7');
16
17
 
17
- $button-alt-bg-light: palette.$legacy-ebebef;
18
- $button-alt-bg-light-hover: palette.$legacy-e4e4e9;
18
+ $button-alt-bg-light: palettes.color('common', 'hexebebef');
19
+ $button-alt-bg-light-hover: palettes.color('common', 'hexe4e4e9');
19
20
 
20
- $background-color-dark: palette.$legacy-333333;
21
+ $background-color-dark: palettes.color('common', 'hex333333');
21
22
 
22
- $border-color-light: palette.$legacy-ebebef;
23
- $border-color-dark: palette.$legacy-ebebef;
23
+ $border-color-light: palettes.color('common', 'hexebebef');
24
+ $border-color-dark: palettes.color('common', 'hexebebef');
24
25
 
25
- $rv-badge-bg-color: palette.$legacy-f0f0f0;
26
- $rv-badge-bg-color-dark: palette.$legacy-2d2d2d;
26
+ $rv-badge-bg-color: palettes.color('common', 'hexf0f0f0');
27
+ $rv-badge-bg-color-dark: palettes.color('common', 'hex2d2d2d');
27
28
 
28
29
  $rv-popup-bg-color: palette.$white;
29
- $rv-popup-border-color: palette.$legacy-d4d4d4;
30
+ $rv-popup-border-color: palettes.color('common', 'hexd4d4d4');
30
31
  $rv-popup-border-opacity: 0.5;
31
- $rv-popup-shadow-color: palette.$legacy-shadow-54;
32
- $rv-popup-hover-bg-color: palette.$legacy-f6f6f7;
32
+ $rv-popup-shadow-color: palettes.color('common', 'rgba_0_0_0_0_15');
33
+ $rv-popup-hover-bg-color: palettes.color('common', 'hexf6f6f7');
33
34
  $rv-popup-border-radius: 8px;
34
35
  $rv-popup-padding: 10px;
35
- $rv-popup-box-shadow: 0 4px 12px #{palette.$legacy-shadow-54};
36
- $rv-popup-bg-color-dark: palette.$legacy-1c1c1c;
37
- $rv-popup-border-color-dark: palette.$legacy-686868;
36
+ $rv-popup-box-shadow: 0 4px 12px #{palettes.color('common', 'rgba_0_0_0_0_15')};
37
+ $rv-popup-bg-color-dark: palettes.color('common', 'hex1c1c1c');
38
+ $rv-popup-border-color-dark: palettes.color('common', 'hex686868');
38
39
  $rv-popup-border-opacity-dark: 0;
39
- $rv-popup-shadow-color-dark: palette.$legacy-shadow-57;
40
- $rv-popup-hover-bg-color-dark: palette.$legacy-2c2c2c;
41
- $rv-popup-box-shadow-dark: 0 4px 12px #{palette.$legacy-shadow-57};
42
-
43
- $rv-low-color: palette.$legacy-fa2057;
44
- $rv-medium-color: palette.$legacy-f7c605;
45
- $rv-high-color: palette.$legacy-01c26e;
46
- $rv-critical-color: palette.$legacy-a8183c;
47
- $rv-info-color: palette.$legacy-5555fc;
48
- $rv-neutral-color: palette.$legacy-161a42;
49
-
50
- $rv-progress-bg-color: palette.$legacy-f0f0f0;
51
- $rv-progress-bg-color-dark: palette.$legacy-252525;
40
+ $rv-popup-shadow-color-dark: palettes.color('common', 'rgba_0_0_0_0_5');
41
+ $rv-popup-hover-bg-color-dark: palettes.color('common', 'hex2c2c2c');
42
+ $rv-popup-box-shadow-dark: 0 4px 12px
43
+ #{palettes.color('common', 'rgba_0_0_0_0_5')};
44
+
45
+ $rv-low-color: palettes.color('common', 'hexfa2057');
46
+ $rv-medium-color: palettes.color('common', 'hexf7c605');
47
+ $rv-high-color: palettes.color('common', 'hex01c26e');
48
+ $rv-critical-color: palettes.color('common', 'hexa8183c');
49
+ $rv-info-color: palettes.color('common', 'hex5555fc');
50
+ $rv-neutral-color: palettes.color('common', 'hex161a42');
51
+
52
+ $rv-progress-bg-color: palettes.color('common', 'hexf0f0f0');
53
+ $rv-progress-bg-color-dark: palettes.color('common', 'hex252525');
@@ -0,0 +1,6 @@
1
+ .rv-view-switcher-controls {
2
+ display: flex;
3
+ align-items: center;
4
+ flex-wrap: wrap;
5
+ gap: 0.5rem;
6
+ }
@@ -9,4 +9,4 @@ export interface ActivityMessageProps {
9
9
  details?: ComponentChildren;
10
10
  }
11
11
  /** A compact, composable message with an avatar, timestamp and optional actions. */
12
- export declare function ActivityMessage({ className, avatar, timestamp, header, children, actions, details }: ActivityMessageProps): h.JSX.Element;
12
+ export declare function ActivityMessage({ className, avatar, timestamp, header, children, actions, details, }: ActivityMessageProps): h.JSX.Element;
package/ai/_chat.scss CHANGED
@@ -45,13 +45,31 @@
45
45
  color: var(--rv-ui-text-muted);
46
46
  margin-block: 0.5rem;
47
47
  }
48
+ .rv-ai-chat-empty > strong {
49
+ font-size: calc(1em + 2px);
50
+ }
51
+ .rv-ai-chat-empty img {
52
+ max-width: 100%;
53
+ height: auto;
54
+ }
55
+ .rv-ai-mounted-chat .rv-ai-chat-content:has(> .rv-ai-chat-empty:only-child) {
56
+ box-sizing: border-box;
57
+ min-height: 100%;
58
+ }
48
59
  .rv-ai-chat-jump.rv-btn {
49
60
  position: absolute;
50
61
  inset-block-end: 0.75rem;
51
62
  inset-inline-start: 50%;
52
63
  transform: translateX(-50%);
53
- box-shadow: 0 2px 12px var(--rv-ui-focus-ring);
54
- white-space: nowrap;
64
+ width: 2rem;
65
+ min-width: 2rem;
66
+ height: 2rem;
67
+ padding: 0.375rem;
68
+ border: 1px solid var(--rv-ui-border);
69
+ border-radius: 50%;
70
+ background: var(--rv-ui-surface);
71
+ color: var(--rv-ui-text);
72
+ box-shadow: none;
55
73
  }
56
74
  .rv-ai-chat-composer {
57
75
  flex: none;
@@ -65,6 +83,10 @@
65
83
  max-width: 100%;
66
84
  align-self: flex-start;
67
85
  }
86
+ .rv-ai-message--assistant {
87
+ align-self: stretch;
88
+ width: 100%;
89
+ }
68
90
  .rv-ai-message-content {
69
91
  white-space: pre-wrap;
70
92
  overflow-wrap: anywhere;
@@ -127,7 +149,7 @@
127
149
  }
128
150
  .rv-ai-task-icon {
129
151
  display: inline-flex;
130
- width: 1rem;
152
+ width: 1.25rem;
131
153
  height: 1.25rem;
132
154
  flex: none;
133
155
  align-items: center;
@@ -182,6 +204,9 @@
182
204
  .rv-ai-chat-composer {
183
205
  padding: 0.75rem 0 0;
184
206
  }
207
+ .rv-ai-result-actions {
208
+ margin-block-start: 0.75rem;
209
+ }
185
210
  }
186
211
  .rv-ai-chat-result {
187
212
  max-width: 100%;
@@ -193,3 +218,10 @@
193
218
  white-space: pre-wrap;
194
219
  overflow-wrap: anywhere;
195
220
  }
221
+
222
+ .rv-ai-chat-actions {
223
+ display: flex;
224
+ justify-content: flex-end;
225
+ align-items: center;
226
+ gap: 0.25rem;
227
+ }
package/ai/_style.scss CHANGED
@@ -1,4 +1,5 @@
1
1
  @use './chat';
2
+ @use './results/style';
2
3
  .rv-ai-assistant {
3
4
  box-sizing: border-box;
4
5
  width: 100%;
@@ -86,21 +87,6 @@
86
87
  .rv-ai-request-trail {
87
88
  min-width: 0;
88
89
  }
89
- .rv-ai-request-trail .rv-ai-trail-trigger {
90
- color: var(--rv-ui-accent-text);
91
- background: var(--rv-ui-selected-bg);
92
- &:hover:not(:disabled), &:focus-visible {
93
- color: var(--rv-ui-accent-text);
94
- background: var(--rv-ui-selected-bg);
95
- }
96
- }
97
- .rv-ai-trail-trigger .rv-svg-icon {
98
- transition: transform var(--rv-ui-motion-fast, 120ms)
99
- var(--rv-ui-motion-ease, ease);
100
- }
101
- .rv-ai-trail-trigger[aria-expanded='true'] .rv-svg-icon {
102
- transform: rotate(180deg);
103
- }
104
90
  .rv-popover.rv-ai-trail-popover {
105
91
  box-sizing: border-box;
106
92
  width: 22rem;
@@ -161,7 +147,11 @@
161
147
  background: var(--rv-ui-surface-hover);
162
148
  }
163
149
  .rv-ai-step[data-current] .rv-ai-step-chip {
164
- background: color-mix(in srgb, var(--rv-ui-selected-bg) 55%, var(--rv-ui-surface));
150
+ background: color-mix(
151
+ in srgb,
152
+ var(--rv-ui-selected-bg) 55%,
153
+ var(--rv-ui-surface)
154
+ );
165
155
  }
166
156
  .rv-ai-step-number {
167
157
  position: relative;
@@ -321,3 +311,73 @@
321
311
  overflow-wrap: anywhere;
322
312
  font-size: 0.875em;
323
313
  }
314
+ .rv-ai-preview-changes {
315
+ max-width: 100%;
316
+ overflow-x: auto;
317
+ table {
318
+ width: 100%;
319
+ border-collapse: collapse;
320
+ font-size: 0.875rem;
321
+ }
322
+ th,
323
+ td {
324
+ padding: 0.5rem 0.625rem;
325
+ border-bottom: 1px solid var(--rv-ui-border);
326
+ text-align: start;
327
+ vertical-align: top;
328
+ overflow-wrap: anywhere;
329
+ }
330
+ th {
331
+ font-weight: 500;
332
+ }
333
+ thead th {
334
+ color: var(--rv-ui-text-muted);
335
+ }
336
+ td {
337
+ min-width: 4rem;
338
+ }
339
+ }
340
+ .rv-ai-preview-item {
341
+ display: block;
342
+ font-weight: 600;
343
+ margin-bottom: 0.125rem;
344
+ }
345
+ .rv-ai-preview-notice {
346
+ margin: 0;
347
+ color: var(--rv-ui-text-muted);
348
+ }
349
+
350
+ // Opt-in bounded chat surfaces; toolbar mounts keep their natural height.
351
+ .rv-ai-assistant--fill {
352
+ padding: 0;
353
+ flex: 1;
354
+ min-height: 0;
355
+ height: 100%;
356
+ > .rv-ai-mounted-chat {
357
+ flex: 1;
358
+ min-height: 0;
359
+ }
360
+ .rv-ai-chat-viewport {
361
+ max-height: none;
362
+ }
363
+ .rv-ai-result-actions,
364
+ .rv-ai-assistant-footer {
365
+ flex: none;
366
+ }
367
+ .rv-ai-chat-content {
368
+ min-height: 100%;
369
+ box-sizing: border-box;
370
+ }
371
+ }
372
+
373
+ // Keep the trigger compact while giving long requests room in the shared popup.
374
+ .rv-ai-examples-menu {
375
+ box-sizing: border-box;
376
+ width: min(420px, calc(100vw - 16px));
377
+ max-width: calc(100vw - 16px);
378
+
379
+ .dropdown-option {
380
+ min-height: 36px;
381
+ white-space: normal;
382
+ }
383
+ }
package/ai/chat.d.ts CHANGED
@@ -24,8 +24,10 @@ export declare function AiChatContent({ children, className, autoScroll, busy, l
24
24
  export interface AiChatEmptyStateProps extends AiChatPartProps {
25
25
  title?: string;
26
26
  description?: string;
27
+ /** Framework-owned image/text content. Return cleanup for listeners or mounted views. */
28
+ renderContent?(host: HTMLElement): void | (() => void);
27
29
  }
28
- export declare function AiChatEmptyState({ title, description, children, className, translations, }: AiChatEmptyStateProps): h.JSX.Element;
30
+ export declare function AiChatEmptyState({ title, description, children, className, translations, renderContent, }: AiChatEmptyStateProps): h.JSX.Element;
29
31
  /** Existing composer behavior, with chat-specific defaults. */
30
32
  export declare function AiChatComposer(props: AiPromptInputProps): h.JSX.Element;
31
33
  export interface AiMessageProps extends AiChatPartProps {
@@ -32,13 +32,15 @@ export interface AiSuggestionChoice {
32
32
  prompt: string;
33
33
  }
34
34
  export interface AiSuggestionsProps {
35
+ /** Number of inline choices; remaining choices are available under More. Default: 2. */
36
+ maxVisible?: number;
35
37
  translations?: AiUiTranslations;
36
38
  items: readonly (string | AiSuggestionChoice)[];
37
39
  onSelect(value: string): void;
38
40
  disabled?: boolean;
39
41
  label?: string;
40
42
  }
41
- export declare function AiSuggestions({ translations, items, onSelect, disabled, label, }: AiSuggestionsProps): h.JSX.Element | null;
43
+ export declare function AiSuggestions({ translations, items, onSelect, disabled, label, maxVisible, }: AiSuggestionsProps): h.JSX.Element | null;
42
44
  export interface AiActionStatusProps {
43
45
  translations?: AiUiTranslations;
44
46
  phase: AiActionPhase;
@@ -55,6 +57,8 @@ export interface AiResultProps {
55
57
  }
56
58
  export declare function AiResult({ translations, summary, matchedRows, countLabel, actions, children, }: AiResultProps): h.JSX.Element;
57
59
  export interface AiAssistantProps {
60
+ /** Fill a bounded parent, with messages scrolling above the composer. */
61
+ layout?: 'flow' | 'fill';
58
62
  translations?: AiUiTranslations;
59
63
  label?: string;
60
64
  children?: ComponentChildren;
@@ -62,14 +66,23 @@ export interface AiAssistantProps {
62
66
  busy?: boolean;
63
67
  }
64
68
  /** Neutral composition; grid/model/query policy remains in the consuming product. */
65
- export declare function AiAssistant({ translations, label, children, footer, busy, }: AiAssistantProps): h.JSX.Element;
69
+ export declare function AiAssistant({ layout, translations, label, children, footer, busy, }: AiAssistantProps): h.JSX.Element;
70
+ export interface AiPreviewChange {
71
+ /** User-facing record, task or chart name. */
72
+ item?: string;
73
+ label: string;
74
+ before?: string;
75
+ after?: string;
76
+ }
66
77
  export interface AiChangePreviewProps {
67
78
  translations?: AiUiTranslations;
68
79
  summary: string;
69
80
  details?: string;
81
+ changes?: readonly AiPreviewChange[];
82
+ notice?: string;
70
83
  disabled?: boolean;
71
84
  onApply(): void;
72
85
  onCancel(): void;
73
86
  }
74
87
  /** Generic approval surface; the host retains the prepared command and its mutation policy. */
75
- export declare function AiChangePreview({ translations, summary, details, disabled, onApply, onCancel, }: AiChangePreviewProps): h.JSX.Element;
88
+ export declare function AiChangePreview({ translations, summary, details, changes, notice, disabled, onApply, onCancel, }: AiChangePreviewProps): h.JSX.Element;
package/ai/index.d.ts CHANGED
@@ -5,3 +5,4 @@ export * from './translations';
5
5
  export type { AiPromptHistoryOptions } from './prompt-history';
6
6
  export { AiTranslationProvider } from './translation-context';
7
7
  export * from './chat';
8
+ export * from './results';
package/ai/index.js CHANGED
@@ -1,3 +1,3 @@
1
- import { t as e } from "../_chunks/mount-DQ1cpppK.js";
2
- import { _ as t, a as n, b as r, c as i, d as a, f as o, g as s, h as c, i as l, l as u, m as d, n as f, o as p, p as m, r as h, s as g, t as _, u as v, x as y, y as b } from "../_chunks/request-trail-DSlFix6i.js";
3
- export { r as AI_UI_MESSAGES, o as AiActionStatus, m as AiAssistant, d as AiChangePreview, f as AiChat, h as AiChatComposer, l as AiChatContent, n as AiChatEmptyState, p as AiMessage, g as AiMessageActions, i as AiMessageContent, c as AiPromptInput, u as AiReasoning, _ as AiRequestTrail, s as AiResult, t as AiSuggestions, v as AiTask, a as AiTaskItem, b as AiTranslationProvider, e as mountAiAssistant, y as translateAiText };
1
+ import { t as e } from "../_chunks/mount-BRdcG60g.js";
2
+ import { C as t, E as n, S as r, T as i, _ as a, a as o, b as s, c, d as l, f as u, g as d, h as f, i as p, l as m, m as h, n as g, o as _, p as v, r as y, s as b, t as x, u as S, w as C, x as w, y as T } from "../_chunks/request-trail-DrhdpWiH.js";
3
+ export { i as AI_UI_MESSAGES, u as AiActionStatus, v as AiAssistant, h as AiChangePreview, g as AiChat, y as AiChatComposer, p as AiChatContent, o as AiChatEmptyState, _ as AiMessage, b as AiMessageActions, c as AiMessageContent, f as AiPromptInput, m as AiReasoning, x as AiRequestTrail, d as AiResult, w as AiResultMetrics, r as AiResultTable, s as AiResultText, T as AiResultView, a as AiSuggestions, S as AiTask, l as AiTaskItem, C as AiTranslationProvider, t as formatAiResultValue, e as mountAiAssistant, n as translateAiText };
package/ai/mount.d.ts CHANGED
@@ -1,5 +1,7 @@
1
+ import { AiResultContent, AiTableRenderer } from './results';
2
+ import { AiChatEmptyStateProps } from './chat';
1
3
  import { AiUiTranslations } from './translations';
2
- import { AiActionPhase, AiPromptInputProps, AiSuggestionChoice } from './components';
4
+ import { AiActionPhase, AiPromptInputProps, AiPreviewChange, AiSuggestionChoice } from './components';
3
5
  import { AiRequestTrailItem, AiRequestTrailProps } from './request-trail';
4
6
  import { AiPromptHistoryOptions } from './prompt-history';
5
7
  export interface AiAssistantMountState {
@@ -14,9 +16,12 @@ export interface AiAssistantMountState {
14
16
  message: string;
15
17
  /** Plain text from a bounded host-owned action result. */
16
18
  resultDetails?: string;
19
+ result?: AiResultContent;
17
20
  pendingAction?: {
18
21
  summary: string;
19
22
  details?: string;
23
+ changes?: readonly AiPreviewChange[];
24
+ notice?: string;
20
25
  };
21
26
  canUndoData?: boolean;
22
27
  canRedoData?: boolean;
@@ -26,10 +31,30 @@ export interface AiAssistantMountState {
26
31
  choices?: readonly AiSuggestionChoice[];
27
32
  steps?: readonly AiRequestTrailItem[];
28
33
  canEditSteps?: boolean;
34
+ /** Host-owned chart view can return to the record grid. */
35
+ canClearChart?: boolean;
36
+ viewSwitching?: boolean;
29
37
  }
30
38
  export interface AiAssistantMountOptions {
39
+ /** Trusted host renderer for tabular results; never supplied by model output. */
40
+ renderTable?: AiTableRenderer;
31
41
  mode?: 'toolbar' | 'chat';
42
+ layout?: 'flow' | 'fill';
43
+ /** Optional host for reactive undo/redo and view controls. Cleaned up on destroy. */
44
+ controlsMountTo?: HTMLElement;
45
+ /** Show the separate New conversation icon. Defaults to true. */
46
+ showNewConversation?: boolean;
47
+ /** @deprecated Use showNewConversation. */
48
+ showClearChat?: boolean;
49
+ /** Request-history popup: hidden by default in chat, visible in toolbar mode. */
50
+ showRequestHistory?: boolean;
51
+ /** Hide native data Undo/Redo controls. Workspace reset belongs to the application. */
52
+ showHistoryControls?: boolean;
53
+ /** Optional welcome content shown only while the local chat transcript is empty. */
54
+ emptyState?: AiChatEmptyStateProps | false;
32
55
  onClearChat?(): void;
56
+ /** Return to the grid while retaining the chart configuration. */
57
+ onClearChart?(): void;
33
58
  /** Local input recall and optional host persistence; never sent to the model automatically. */
34
59
  promptHistory?: AiPromptHistoryOptions;
35
60
  /** Auto-dismiss settled activity messages; disabled unless configured. */
@@ -41,16 +66,15 @@ export interface AiAssistantMountOptions {
41
66
  onRedoData?(): void;
42
67
  onSubmit(prompt: string): void;
43
68
  onStop(): void;
44
- onRestore(): void;
45
- onReset(): void;
46
69
  onRemoveStep?(id: string): void;
47
70
  suggestions?: readonly string[];
71
+ /** Inline choice count; additional choices remain under More. Default: 2. */
72
+ maxVisibleSuggestions?: number;
48
73
  label?: string;
49
74
  footer?: string;
50
- restoreLabel?: string;
51
- resetLabel?: string;
75
+ /** Format the matched-row count in command activity, independently of request history. */
52
76
  countLabel?: (count: number) => string;
53
- trail?: Pick<AiRequestTrailProps, 'label' | 'triggerLabel' | 'clearLabel' | 'clearDescription' | 'removeLabel' | 'countLabel' | 'changedMessage'>;
77
+ trail?: Pick<AiRequestTrailProps, 'label' | 'triggerLabel' | 'removeLabel' | 'countLabel' | 'changedMessage'>;
54
78
  prompt?: Pick<AiPromptInputProps, 'label' | 'placeholder' | 'submitLabel' | 'stopLabel' | 'hint' | 'textareaProps'>;
55
79
  }
56
80
  /** Framework-independent mount of the same TSX used by the public components. */
@@ -1,7 +1,9 @@
1
1
  import { AiUiTranslations } from './translations';
2
- import { h } from '../_vendor/preact/src/index';
2
+ import { h, ComponentChildren } from '../_vendor/preact/src/index';
3
3
  export interface AiRequestTrailItem {
4
4
  id: string;
5
+ /** Hide removal when the host cannot safely undo this individual request. */
6
+ removable?: boolean;
5
7
  label: string;
6
8
  /** Number of earlier requests represented by a grouped step. */
7
9
  count?: number;
@@ -10,8 +12,12 @@ export interface AiRequestTrailProps {
10
12
  translations?: AiUiTranslations;
11
13
  items: readonly AiRequestTrailItem[];
12
14
  onRemove(id: string): void;
13
- onClear(): void;
15
+ onClear?(): void;
14
16
  onEmpty?(): void;
17
+ /** Additional host-owned actions in the steps popup. */
18
+ footer?: ComponentChildren;
19
+ /** Optional application-owned clear action for standalone history presentation. */
20
+ showClear?: boolean;
15
21
  disabled?: boolean;
16
22
  removalsDisabled?: boolean;
17
23
  label?: string;
@@ -23,4 +29,4 @@ export interface AiRequestTrailProps {
23
29
  changedMessage?: string;
24
30
  }
25
31
  /** Applied context only. The host owns replay, persistence and view mutations. */
26
- export declare function AiRequestTrail({ translations, items, onRemove, onClear, onEmpty, disabled, removalsDisabled, label, triggerLabel, clearLabel, clearDescription, removeLabel, countLabel, changedMessage, }: AiRequestTrailProps): h.JSX.Element | null;
32
+ export declare function AiRequestTrail({ translations, items, onRemove, onClear, onEmpty, footer, showClear, disabled, removalsDisabled, label, triggerLabel, clearLabel, clearDescription, removeLabel, countLabel, changedMessage, }: AiRequestTrailProps): h.JSX.Element | null;
@@ -0,0 +1,83 @@
1
+ .rv-ai-result-content {
2
+ box-sizing: border-box;
3
+ width: 100%;
4
+ max-width: 100%;
5
+ min-width: 0;
6
+ border: 1px solid var(--rv-ui-border);
7
+ border-radius: 0.75rem;
8
+ padding: 1rem;
9
+ background: var(--rv-ui-surface);
10
+ overflow-wrap: anywhere;
11
+ }
12
+ .rv-ai-result-table-scroll {
13
+ max-width: 100%;
14
+ overflow: auto;
15
+ }
16
+ .rv-ai-result-content--grid {
17
+ border: 0;
18
+ border-radius: 0;
19
+ padding: 0;
20
+ background: transparent;
21
+ }
22
+ .rv-ai-result-table {
23
+ width: 100%;
24
+ white-space: nowrap;
25
+ overflow-wrap: normal;
26
+ border-collapse: collapse;
27
+ font: inherit;
28
+ caption {
29
+ text-align: start;
30
+ padding-block-end: 0.75rem;
31
+ }
32
+ caption span {
33
+ display: block;
34
+ color: var(--rv-ui-text-muted);
35
+ font-size: 0.8125rem;
36
+ margin-block-start: 0.25rem;
37
+ }
38
+ th,
39
+ td {
40
+ min-width: 6rem;
41
+ padding: 0.625rem;
42
+ text-align: start;
43
+ border-block-end: 1px solid var(--rv-ui-border);
44
+ }
45
+ th {
46
+ color: var(--rv-ui-text-muted);
47
+ font-weight: 500;
48
+ }
49
+ tbody tr:last-child td {
50
+ border: 0;
51
+ }
52
+ .rv-ai-result-number {
53
+ min-width: 4rem;
54
+ text-align: end;
55
+ font-variant-numeric: tabular-nums;
56
+ white-space: nowrap;
57
+ }
58
+ }
59
+ .rv-ai-result-description,
60
+ .rv-ai-result-empty {
61
+ color: var(--rv-ui-text-muted);
62
+ margin-block: 0.25rem 0;
63
+ }
64
+ .rv-ai-result-metrics {
65
+ display: grid;
66
+ grid-template-columns: repeat(auto-fit, minmax(min(100%, 8rem), 1fr));
67
+ gap: 1rem;
68
+ margin-block: 1rem 0;
69
+ dt {
70
+ color: var(--rv-ui-text-muted);
71
+ font-size: 0.8125rem;
72
+ }
73
+ dd {
74
+ margin: 0.25rem 0 0;
75
+ font-size: 1.25rem;
76
+ font-weight: 600;
77
+ font-variant-numeric: tabular-nums;
78
+ }
79
+ }
80
+ .rv-ai-result-text {
81
+ margin-block-end: 0;
82
+ white-space: pre-wrap;
83
+ }
@@ -0,0 +1,11 @@
1
+ import { ComponentChildren } from '../../_vendor/preact/src/index';
2
+ import { AiResultContent, AiTableResult } from './types';
3
+ export type AiTableRenderer = (result: AiTableResult) => ComponentChildren;
4
+ export * from './types';
5
+ export * from './table';
6
+ export * from './metrics';
7
+ export * from './text';
8
+ export declare function AiResultView({ result, renderTable, }: {
9
+ result: AiResultContent;
10
+ renderTable?: AiTableRenderer;
11
+ }): ComponentChildren;
@@ -0,0 +1,5 @@
1
+ import { h } from '../../_vendor/preact/src/index';
2
+ import { AiMetricsResult } from './types';
3
+ export declare function AiResultMetrics({ result }: {
4
+ result: AiMetricsResult;
5
+ }): h.JSX.Element;
@@ -0,0 +1,5 @@
1
+ import { h } from '../../_vendor/preact/src/index';
2
+ import { AiTableResult } from './types';
3
+ export declare function AiResultTable({ result }: {
4
+ result: AiTableResult;
5
+ }): h.JSX.Element;
@@ -0,0 +1,5 @@
1
+ import { h } from '../../_vendor/preact/src/index';
2
+ import { AiTextResult } from './types';
3
+ export declare function AiResultText({ result }: {
4
+ result: AiTextResult;
5
+ }): h.JSX.Element;
@@ -0,0 +1,29 @@
1
+ /** Presentation-only values. No HTML, grid records or executable render callbacks. */
2
+ export type AiResultValue = string | number | boolean | null;
3
+ interface ResultBase {
4
+ title: string;
5
+ description?: string;
6
+ }
7
+ export interface AiTableResult extends ResultBase {
8
+ kind: 'table';
9
+ columns: readonly {
10
+ label: string;
11
+ numeric?: boolean;
12
+ }[];
13
+ rows: readonly (readonly AiResultValue[])[];
14
+ }
15
+ export interface AiMetricsResult extends ResultBase {
16
+ kind: 'metrics';
17
+ items: readonly {
18
+ label: string;
19
+ value: AiResultValue;
20
+ }[];
21
+ }
22
+ export interface AiTextResult extends ResultBase {
23
+ kind: 'text';
24
+ text: string;
25
+ }
26
+ /** Add new result kinds here and their renderer in AiResultView. */
27
+ export type AiResultContent = AiTableResult | AiMetricsResult | AiTextResult;
28
+ export declare function formatAiResultValue(value: AiResultValue): string;
29
+ export {};
@@ -1,4 +1,5 @@
1
1
  import { AiAssistantMountState } from './mount';
2
+ import { AiResultContent } from './results';
2
3
  export interface AiTranscriptMessage {
3
4
  id: string;
4
5
  group: string;
@@ -6,6 +7,7 @@ export interface AiTranscriptMessage {
6
7
  text: string;
7
8
  phase?: AiAssistantMountState['phase'];
8
9
  details?: string;
10
+ result?: AiResultContent;
9
11
  pending?: boolean;
10
12
  }
11
13
  /** Local presentation state only. Never supplies model context or persists values. */
@@ -1,4 +1,4 @@
1
1
  /** English message IDs and fallbacks; hosts supply translated values. */
2
- export declare const AI_UI_MESSAGES: readonly ["AI chat", "Clear chat", "Conversation messages", "Jump to latest", "You", "Assistant", "System", "Message actions", "Start a conversation", "Ask a question to get started.", "Message", "Type a message…", "Working…", "Reasoning summary", "Pending", "Running", "Completed", "Failed", "Cancelled", "{seconds}s", "Data history", "Review changes", "Apply changes", "Cancel changes", "Undo data change", "Redo data change", "Ask AI to change this view", "Filter or sort your data…", "Send", "Stop", "Enter to send · Shift+Enter for a new line", "Suggested requests", "More", "Activity", "Collapse activity", "Expand activity", "AI view assistant", "View steps", "Clear all", "Restore the starting view", "Restore previous view", "Reset view", "The view changed manually. Start a new request to continue.", "Remove request: {label}", "{count} step", "{count} steps", "{count} applied request", "{count} applied requests", "{count} matching rows"];
2
+ export declare const AI_UI_MESSAGES: readonly ["AI chat", "No results", "Clear chat", "Restart conversation", "New conversation", "Request history", "Clear chart", "Conversation messages", "Jump to latest", "You", "Assistant", "System", "Message actions", "Start a conversation", "Ask a question to get started.", "Message", "Type a message…", "Working…", "Reasoning summary", "Pending", "Running", "Completed", "Failed", "Cancelled", "{seconds}s", "Data history", "Review changes", "Proposed changes", "Change", "Current", "Proposed", "Apply changes", "Cancel changes", "Undo data change", "Redo data change", "Ask AI to change this view", "Filter or sort your data…", "Send", "Stop", "Enter to send · Shift+Enter for a new line", "Suggested requests", "More", "Search requests", "Activity", "Collapse activity", "Expand activity", "AI view assistant", "View steps", "Clear all", "Restore the starting view", "Restore previous view", "Reset view", "The view changed manually. Start a new request to continue.", "Remove request: {label}", "{count} step", "{count} steps", "{count} applied request", "{count} applied requests", "{count} matching rows"];
3
3
  export type AiUiTranslations = Partial<Record<(typeof AI_UI_MESSAGES)[number], string>>;
4
4
  export declare function translateAiText(text: string, translations?: Readonly<Record<string, string | undefined>>, values?: Readonly<Record<string, string | number>>): string;