@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
package/ai/chat.d.ts ADDED
@@ -0,0 +1,65 @@
1
+ import { h, ComponentChildren, JSX } from '../_vendor/preact/src/index';
2
+ import { AiPromptInputProps } from './components';
3
+ import { AiUiTranslations } from './translations';
4
+ export interface AiChatPartProps {
5
+ children?: ComponentChildren;
6
+ className?: string;
7
+ translations?: AiUiTranslations;
8
+ }
9
+ export interface AiChatProps extends AiChatPartProps {
10
+ label?: string;
11
+ style?: JSX.CSSProperties;
12
+ }
13
+ /** Presentation only. The host owns transcript, provider, actions and persistence. */
14
+ export declare function AiChat({ children, className, label, style, translations, }: AiChatProps): h.JSX.Element;
15
+ export interface AiChatContentProps extends AiChatPartProps {
16
+ label?: string;
17
+ /** Follow updates only while the reader remains at the live edge. */
18
+ autoScroll?: boolean;
19
+ busy?: boolean;
20
+ jumpLabel?: string;
21
+ }
22
+ /** Scroll measurement belongs to this visual viewport, never to a grid/data owner. */
23
+ export declare function AiChatContent({ children, className, autoScroll, busy, label, jumpLabel, translations, }: AiChatContentProps): h.JSX.Element;
24
+ export interface AiChatEmptyStateProps extends AiChatPartProps {
25
+ title?: string;
26
+ description?: string;
27
+ /** Framework-owned image/text content. Return cleanup for listeners or mounted views. */
28
+ renderContent?(host: HTMLElement): void | (() => void);
29
+ }
30
+ export declare function AiChatEmptyState({ title, description, children, className, translations, renderContent, }: AiChatEmptyStateProps): h.JSX.Element;
31
+ /** Existing composer behavior, with chat-specific defaults. */
32
+ export declare function AiChatComposer(props: AiPromptInputProps): h.JSX.Element;
33
+ export interface AiMessageProps extends AiChatPartProps {
34
+ from: 'user' | 'assistant' | 'system';
35
+ label?: string;
36
+ isStreaming?: boolean;
37
+ }
38
+ export declare function AiMessage({ from, label, isStreaming, children, className, translations, }: AiMessageProps): h.JSX.Element;
39
+ /** Text stays text. Hosts can supply their own trusted Markdown renderer as children. */
40
+ export declare function AiMessageContent({ children, className, }: AiChatPartProps): h.JSX.Element;
41
+ export interface AiMessageActionsProps extends AiChatPartProps {
42
+ label?: string;
43
+ }
44
+ export declare function AiMessageActions({ children, className, label, translations, }: AiMessageActionsProps): h.JSX.Element;
45
+ export type AiTaskStatus = 'pending' | 'running' | 'completed' | 'error' | 'cancelled';
46
+ export interface AiTaskProps extends AiChatPartProps {
47
+ title: string;
48
+ status?: AiTaskStatus;
49
+ open?: boolean;
50
+ defaultOpen?: boolean;
51
+ onOpenChange?(open: boolean): void;
52
+ }
53
+ export declare function AiTask(props: AiTaskProps): h.JSX.Element;
54
+ export interface AiTaskItemProps extends AiChatPartProps {
55
+ status?: AiTaskStatus;
56
+ }
57
+ export declare function AiTaskItem({ status, children, className, translations, }: AiTaskItemProps): h.JSX.Element;
58
+ export interface AiReasoningProps extends Omit<AiTaskProps, 'title' | 'status'> {
59
+ title?: string;
60
+ isStreaming?: boolean;
61
+ /** Host-supplied elapsed seconds; no hidden timer or invented reasoning. */
62
+ duration?: number;
63
+ }
64
+ /** Render only reasoning/summary text explicitly supplied by the host or provider. */
65
+ export declare function AiReasoning({ title, isStreaming, duration, children, translations, ...props }: AiReasoningProps): h.JSX.Element;
@@ -1,7 +1,7 @@
1
1
  import { AiUiTranslations } from './translations';
2
2
  import { h, ComponentChildren, ComponentProps } from '../_vendor/preact/src/index';
3
3
  import { Textarea } from '../controls';
4
- export type AiActionPhase = 'idle' | 'understanding' | 'applying' | 'completed' | 'clarification' | 'unsupported' | 'error' | 'cancelled';
4
+ export type AiActionPhase = 'idle' | 'understanding' | 'applying' | 'preview' | 'completed' | 'clarification' | 'unsupported' | 'error' | 'cancelled';
5
5
  export interface AiPromptInputProps {
6
6
  translations?: AiUiTranslations;
7
7
  value: string;
@@ -14,6 +14,8 @@ export interface AiPromptInputProps {
14
14
  placeholder?: string;
15
15
  submitLabel?: string;
16
16
  stopLabel?: string;
17
+ /** Opt-in local prompt recall. Arrow keys retain normal multiline behavior away from text edges. */
18
+ promptHistory?: readonly string[];
17
19
  /** Empty-draft keyboard guidance. An empty string lets toolbar context replace it. */
18
20
  hint?: string;
19
21
  /** Host-supported actions or context, displayed in the composer toolbar. */
@@ -24,15 +26,21 @@ export interface AiPromptInputProps {
24
26
  textareaProps?: Pick<ComponentProps<typeof Textarea>, 'className' | 'style' | 'rows'>;
25
27
  }
26
28
  /** Shared composer: Enter submits, Shift+Enter inserts a line; IME never submits. */
27
- export declare function AiPromptInput({ translations, value, onValueChange, onSubmit, onStop, busy, disabled, label, placeholder, submitLabel, stopLabel, hint, actions, footer, textareaProps, }: AiPromptInputProps): h.JSX.Element;
29
+ export declare function AiPromptInput({ translations, value, onValueChange, onSubmit, onStop, busy, disabled, label, placeholder, submitLabel, stopLabel, promptHistory, hint, actions, footer, textareaProps, }: AiPromptInputProps): h.JSX.Element;
30
+ export interface AiSuggestionChoice {
31
+ label: string;
32
+ prompt: string;
33
+ }
28
34
  export interface AiSuggestionsProps {
35
+ /** Number of inline choices; remaining choices are available under More. Default: 2. */
36
+ maxVisible?: number;
29
37
  translations?: AiUiTranslations;
30
- items: readonly string[];
38
+ items: readonly (string | AiSuggestionChoice)[];
31
39
  onSelect(value: string): void;
32
40
  disabled?: boolean;
33
41
  label?: string;
34
42
  }
35
- 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;
36
44
  export interface AiActionStatusProps {
37
45
  translations?: AiUiTranslations;
38
46
  phase: AiActionPhase;
@@ -49,6 +57,8 @@ export interface AiResultProps {
49
57
  }
50
58
  export declare function AiResult({ translations, summary, matchedRows, countLabel, actions, children, }: AiResultProps): h.JSX.Element;
51
59
  export interface AiAssistantProps {
60
+ /** Fill a bounded parent, with messages scrolling above the composer. */
61
+ layout?: 'flow' | 'fill';
52
62
  translations?: AiUiTranslations;
53
63
  label?: string;
54
64
  children?: ComponentChildren;
@@ -56,4 +66,23 @@ export interface AiAssistantProps {
56
66
  busy?: boolean;
57
67
  }
58
68
  /** Neutral composition; grid/model/query policy remains in the consuming product. */
59
- 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
+ }
77
+ export interface AiChangePreviewProps {
78
+ translations?: AiUiTranslations;
79
+ summary: string;
80
+ details?: string;
81
+ changes?: readonly AiPreviewChange[];
82
+ notice?: string;
83
+ disabled?: boolean;
84
+ onApply(): void;
85
+ onCancel(): void;
86
+ }
87
+ /** Generic approval surface; the host retains the prepared command and its mutation policy. */
88
+ export declare function AiChangePreview({ translations, summary, details, changes, notice, disabled, onApply, onCancel, }: AiChangePreviewProps): h.JSX.Element;
package/ai/index.d.ts CHANGED
@@ -2,4 +2,7 @@ export * from './components';
2
2
  export * from './mount';
3
3
  export * from './request-trail';
4
4
  export * from './translations';
5
+ export type { AiPromptHistoryOptions } from './prompt-history';
5
6
  export { AiTranslationProvider } from './translation-context';
7
+ export * from './chat';
8
+ export * from './results';
package/ai/index.js CHANGED
@@ -1,3 +1,3 @@
1
- import { a as e, c as t, i as n, l as r, n as i, o as a, r as o, s, t as c } from "../_chunks/request-trail-IdNiFvKH.js";
2
- import { t as l } from "../_chunks/mount-DZe_6VtR.js";
3
- export { t as AI_UI_MESSAGES, i as AiActionStatus, o as AiAssistant, n as AiPromptInput, c as AiRequestTrail, e as AiResult, a as AiSuggestions, s as AiTranslationProvider, l as mountAiAssistant, r 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,33 +1,86 @@
1
+ import { AiResultContent, AiTableRenderer } from './results';
2
+ import { AiChatEmptyStateProps } from './chat';
1
3
  import { AiUiTranslations } from './translations';
2
- import { AiActionPhase, AiPromptInputProps } from './components';
4
+ import { AiActionPhase, AiPromptInputProps, AiPreviewChange, AiSuggestionChoice } from './components';
3
5
  import { AiRequestTrailItem, AiRequestTrailProps } from './request-trail';
6
+ import { AiPromptHistoryOptions } from './prompt-history';
4
7
  export interface AiAssistantMountState {
5
8
  phase: AiActionPhase;
9
+ /** Accepted public user request only; never an internal model prompt. */
10
+ request?: {
11
+ id: string;
12
+ prompt: string;
13
+ };
14
+ /** Increment to clear the local chat transcript and composer. */
15
+ chatKey?: number;
6
16
  message: string;
17
+ /** Plain text from a bounded host-owned action result. */
18
+ resultDetails?: string;
19
+ result?: AiResultContent;
20
+ pendingAction?: {
21
+ summary: string;
22
+ details?: string;
23
+ changes?: readonly AiPreviewChange[];
24
+ notice?: string;
25
+ };
26
+ canUndoData?: boolean;
27
+ canRedoData?: boolean;
7
28
  matchedRows?: number;
8
29
  canRestore?: boolean;
9
30
  suggestions?: readonly string[];
31
+ choices?: readonly AiSuggestionChoice[];
10
32
  steps?: readonly AiRequestTrailItem[];
11
33
  canEditSteps?: boolean;
34
+ /** Host-owned chart view can return to the record grid. */
35
+ canClearChart?: boolean;
36
+ viewSwitching?: boolean;
12
37
  }
13
38
  export interface AiAssistantMountOptions {
39
+ /** Trusted host renderer for tabular results; never supplied by model output. */
40
+ renderTable?: AiTableRenderer;
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;
55
+ onClearChat?(): void;
56
+ /** Return to the grid while retaining the chart configuration. */
57
+ onClearChart?(): void;
58
+ /** Local input recall and optional host persistence; never sent to the model automatically. */
59
+ promptHistory?: AiPromptHistoryOptions;
60
+ /** Auto-dismiss settled activity messages; disabled unless configured. */
61
+ activityDurationMs?: number;
14
62
  translations?: AiUiTranslations;
63
+ onApplyAction?(): void;
64
+ onCancelAction?(): void;
65
+ onUndoData?(): void;
66
+ onRedoData?(): void;
15
67
  onSubmit(prompt: string): void;
16
68
  onStop(): void;
17
- onRestore(): void;
18
- onReset(): void;
19
69
  onRemoveStep?(id: string): void;
20
70
  suggestions?: readonly string[];
71
+ /** Inline choice count; additional choices remain under More. Default: 2. */
72
+ maxVisibleSuggestions?: number;
21
73
  label?: string;
22
74
  footer?: string;
23
- restoreLabel?: string;
24
- resetLabel?: string;
75
+ /** Format the matched-row count in command activity, independently of request history. */
25
76
  countLabel?: (count: number) => string;
26
- trail?: Pick<AiRequestTrailProps, 'label' | 'triggerLabel' | 'clearLabel' | 'clearDescription' | 'removeLabel' | 'countLabel' | 'changedMessage'>;
77
+ trail?: Pick<AiRequestTrailProps, 'label' | 'triggerLabel' | 'removeLabel' | 'countLabel' | 'changedMessage'>;
27
78
  prompt?: Pick<AiPromptInputProps, 'label' | 'placeholder' | 'submitLabel' | 'stopLabel' | 'hint' | 'textareaProps'>;
28
79
  }
29
80
  /** Framework-independent mount of the same TSX used by the public components. */
30
81
  export declare function mountAiAssistant(host: HTMLElement, options: AiAssistantMountOptions): {
31
82
  update(state: AiAssistantMountState): void;
83
+ /** Update example choices without remounting the composer or losing its draft. */
84
+ setSuggestions(items: readonly string[]): void;
32
85
  destroy(): void;
33
86
  };
@@ -0,0 +1,13 @@
1
+ /** Recall stays local to the UI; it never becomes model conversation automatically. */
2
+ export interface AiPromptHistoryOptions {
3
+ /** Initial prompts loaded by the host from its preferred storage. Newest comes last. */
4
+ items?: readonly string[];
5
+ /** Optional host-owned persistence. No browser storage is read or written by the component. */
6
+ onChange?(items: readonly string[]): void;
7
+ }
8
+ export declare function boundAiPromptHistory(items: readonly string[]): string[];
9
+ export declare class AiPromptRecall {
10
+ private state?;
11
+ reset(): void;
12
+ move(value: string, direction: 'up' | 'down', items: readonly string[]): string | undefined;
13
+ }
@@ -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 {};
@@ -0,0 +1,27 @@
1
+ import { AiAssistantMountState } from './mount';
2
+ import { AiResultContent } from './results';
3
+ export interface AiTranscriptMessage {
4
+ id: string;
5
+ group: string;
6
+ from: 'user' | 'assistant' | 'system';
7
+ text: string;
8
+ phase?: AiAssistantMountState['phase'];
9
+ details?: string;
10
+ result?: AiResultContent;
11
+ pending?: boolean;
12
+ }
13
+ /** Local presentation state only. Never supplies model context or persists values. */
14
+ export declare class AiTranscript {
15
+ messages: readonly AiTranscriptMessage[];
16
+ private epoch;
17
+ private initialized;
18
+ private requestId?;
19
+ private ignoredRequest?;
20
+ private currentId?;
21
+ private active;
22
+ private lastPhase?;
23
+ private key;
24
+ private sequence;
25
+ update(state: AiAssistantMountState): void;
26
+ clear(): void;
27
+ }
@@ -1,4 +1,4 @@
1
1
  /** English message IDs and fallbacks; hosts supply translated values. */
2
- export declare const AI_UI_MESSAGES: readonly ["Ask AI to change this view", "Filter or sort your data…", "Send", "Stop", "Enter to send · Shift+Enter for a new line", "Suggested requests", "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;
@@ -40,5 +40,5 @@ export declare class UiComponent implements AfterContentInit, AfterViewInit, OnC
40
40
  }
41
41
  export type { PdfViewerProps, PdfViewerText } from '../pdf-viewer/component.js';
42
42
  export type { PdfViewerToolbarProps } from '../pdf-viewer/toolbar.js';
43
- export type { PdfViewerButton, PdfViewerButtonOptions, PdfViewerToolbarOptions, PdfViewerToolbarConfig } from '../pdf-viewer/toolbar-options.js';
43
+ export type { PdfViewerButton, PdfViewerButtonOptions, PdfViewerToolbarOptions, PdfViewerToolbarConfig, } from '../pdf-viewer/toolbar-options.js';
44
44
  export { defaultPdfViewerText } from '../pdf-viewer/index.js';
@@ -35,10 +35,12 @@ export class UiComponent {
35
35
  ngAfterViewInit() {
36
36
  if (!this.browser)
37
37
  return;
38
- this.mount = createFrameworkMount(this.host.nativeElement, targets => this.renderTemplates(targets));
38
+ this.mount = createFrameworkMount(this.host.nativeElement, (targets) => this.renderTemplates(targets));
39
+ this.update();
40
+ }
41
+ ngOnChanges() {
39
42
  this.update();
40
43
  }
41
- ngOnChanges() { this.update(); }
42
44
  update() {
43
45
  if (!this.mount || this.destroyed)
44
46
  return;
@@ -47,8 +49,11 @@ export class UiComponent {
47
49
  throw new Error(`Unknown UI component: ${this.component}`);
48
50
  const props = { ...this.props };
49
51
  const model = componentModels[this.component];
50
- const callbacks = new Set([...Object.keys(props).filter(key => /^on[A-Z]/.test(key)),
51
- 'onClose', ...(model ? [model.callback] : [])]);
52
+ const callbacks = new Set([
53
+ ...Object.keys(props).filter((key) => /^on[A-Z]/.test(key)),
54
+ 'onClose',
55
+ ...(model ? [model.callback] : []),
56
+ ]);
52
57
  for (const name of callbacks) {
53
58
  const original = props[name];
54
59
  props[name] = (...args) => {
@@ -60,16 +65,13 @@ export class UiComponent {
60
65
  return result;
61
66
  };
62
67
  }
63
- const slots = Object.fromEntries(this.slots?.map(slot => [slot.rvUiSlot, slot]) ?? []);
64
- if (this.component === 'NativeSelect' && Object.keys(slots).length) {
65
- throw new Error('Use <select rvControl> for native Angular option templates.');
66
- }
68
+ const slots = Object.fromEntries(this.slots?.map((slot) => [slot.rvUiSlot, slot]) ?? []);
67
69
  this.mount.render(component, props, (props, content) => withFrameworkContent(this.component, props, slots, content));
68
70
  }
69
71
  renderTemplates(targets) {
70
72
  if (this.destroyed)
71
73
  return;
72
- const live = new Set(targets.map(target => target.id));
74
+ const live = new Set(targets.map((target) => target.id));
73
75
  for (const [id, record] of this.views) {
74
76
  if (!live.has(id)) {
75
77
  this.release(record);
@@ -126,7 +128,8 @@ export class UiComponent {
126
128
  i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "22.2.0", ngImport: i0, type: UiComponent, decorators: [{
127
129
  type: Component,
128
130
  args: [{
129
- selector: 'rv-ui', standalone: true,
131
+ selector: 'rv-ui',
132
+ standalone: true,
130
133
  template: '<span #host style="display: contents"></span>',
131
134
  host: { style: 'display: contents' },
132
135
  }]
@@ -45,7 +45,7 @@
45
45
  }
46
46
  }
47
47
 
48
- .rv-assignee-editor .selected-tag {
48
+ .rv-assignee-editor.dropdown-container .selected-tag {
49
49
  display: inline-flex;
50
50
  align-items: center;
51
51
  border-radius: 16px;
@@ -53,6 +53,12 @@
53
53
  font-size: 14px;
54
54
  line-height: 18px;
55
55
  white-space: nowrap;
56
+ color: var(--rv-ui-text);
57
+
58
+ // Keep the full 24px remove target within the 24px value pill.
59
+ > button.rv-remove-button {
60
+ margin-block: -3px;
61
+ }
56
62
  }
57
63
  .rv-assignee-picker__allocations {
58
64
  display: grid;
@@ -90,15 +96,31 @@
90
96
  }
91
97
  .rv-assignee-picker__allocations {
92
98
  border-top: 1px solid var(--rv-ui-border);
93
- &:empty { display: none; }
99
+ &:empty {
100
+ display: none;
101
+ }
94
102
  label {
95
103
  padding: 8px 10px;
96
104
  border-radius: 8px;
97
105
  background: var(--rv-ui-field-surface);
98
106
  font-size: 12px;
99
- > span { min-width: 0; overflow-wrap: anywhere; }
107
+ > span {
108
+ min-width: 0;
109
+ overflow-wrap: anywhere;
110
+ }
111
+ }
112
+ input {
113
+ flex: 0 0 88px;
114
+ width: 88px;
115
+ min-height: 32px;
116
+ padding: 6px 8px;
117
+ font-size: 12px;
100
118
  }
101
- input { flex: 0 0 88px; width: 88px; min-height: 32px; padding: 6px 8px; font-size: 12px; }
102
119
  }
103
- .rv-assignee-picker__footer { flex-wrap: wrap; font-size: 12px; }
104
- .rv-assignee-picker__footer .rv-editor-actions { margin-inline-start: auto; }
120
+ .rv-assignee-picker__footer {
121
+ flex-wrap: wrap;
122
+ font-size: 12px;
123
+ }
124
+ .rv-assignee-picker__footer .rv-editor-actions {
125
+ margin-inline-start: auto;
126
+ }