@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,3 +1,4 @@
1
+ @use './fields-grid';
1
2
  @use './motion';
2
3
  @use './disclosure';
3
4
  @use './icon-action';
@@ -288,3 +289,149 @@ button.rv-configurator-action-button {
288
289
  @media (prefers-reduced-motion: reduce) {
289
290
  .rv-collapsible-section > .rv-configurator-summary svg { transition: none; }
290
291
  }
292
+
293
+ // Product-neutral panel shell; grid bodies remain rendering slots in their adapters.
294
+ .rv-configurator-panel {
295
+ display: flex;
296
+ flex-direction: column;
297
+ gap: 12px;
298
+ min-height: 0;
299
+ min-width: 0;
300
+ box-sizing: border-box;
301
+ .pivot-field-annotation { color: var(--rv-configurator-muted, var(--rv-ui-text-muted)); font-size: 12px; }
302
+ .pivot-filter-active { width: 6px; height: 6px; border-radius: 50%; background: var(--rv-ui-accent); }
303
+ }
304
+
305
+ .rv-configurator-panel--standalone {
306
+ @include presentation;
307
+ --rv-configurator-bg: var(--rv-ui-surface);
308
+ --rv-configurator-surface: var(--rv-ui-field-surface);
309
+ --rv-configurator-text: var(--rv-ui-text);
310
+ --rv-configurator-muted: var(--rv-ui-text-muted);
311
+ --rv-configurator-border: var(--rv-ui-border);
312
+ --rv-configurator-accent: var(--rv-ui-accent);
313
+ --rv-configurator-accent-text: var(--rv-ui-accent);
314
+ flex-shrink: 0;
315
+ max-width: 100%;
316
+ max-height: 100%;
317
+ overflow: auto;
318
+ padding: 8px 16px 16px;
319
+ border: 1px solid var(--rv-ui-border);
320
+ border-radius: 10px;
321
+ background: var(--rv-ui-surface);
322
+ color: var(--rv-ui-text);
323
+ font: 13px/1.5 sans-serif;
324
+ ul { list-style: none; padding: 0; margin: 0; }
325
+ .rv-configurator-library-content > .rv-configurator-field-search { margin: 8px; width: auto; }
326
+ .rv-configurator-icon svg { width: 12px; height: 12px; }
327
+ }
328
+
329
+ // Compact rail presentation is shared by Grid, Pivot and Pivot Charts.
330
+ .rv-configurator-panel__content { display: contents; }
331
+ .rv-configurator-panel__content[hidden] { display: none; }
332
+ .rv-configurator-rail { display: flex; justify-content: flex-end; gap: 8px; }
333
+ .rv-configurator-rail__button.rv-btn {
334
+ position: relative;
335
+ flex: none;
336
+ width: 36px;
337
+ height: 36px;
338
+ padding: 8px;
339
+ justify-content: center;
340
+ }
341
+ .rv-configurator-rail__button .rv-configurator-icon svg { width: 18px; height: 18px; }
342
+ .rv-configurator-rail__count.rv-badge {
343
+ position: absolute;
344
+ inset: -4px -4px auto auto;
345
+ }
346
+ .rv-configurator-panel[data-compact='true'] {
347
+ border: 0;
348
+ border-left: 1px solid var(--rv-ui-border);
349
+ border-radius: 0;
350
+ width: 56px !important;
351
+ min-width: 56px;
352
+ padding: 8px;
353
+ flex: none;
354
+ }
355
+ .rv-configurator-panel[data-compact='true'] > .rv-configurator-rail {
356
+ flex-direction: column;
357
+ align-items: center;
358
+ justify-content: flex-start;
359
+ }
360
+
361
+ // Configurator hosts supply content; shared switches retain all control appearance.
362
+ .rv-configurator-section-tabs.rv-segmented-switch {
363
+ display: flex;
364
+ flex: none;
365
+ width: 100%;
366
+ min-width: 0;
367
+ overflow-x: auto;
368
+ scrollbar-width: none;
369
+ &::-webkit-scrollbar { display: none; }
370
+ > button { flex: 1 0 auto; }
371
+ }
372
+ .rv-configurator-header {
373
+ position: sticky;
374
+ top: 0;
375
+ z-index: 3;
376
+ display: flex;
377
+ flex: none;
378
+ align-items: center;
379
+ justify-content: space-between;
380
+ gap: 8px;
381
+ min-width: 0;
382
+ padding-block: 8px;
383
+ margin-block: -8px 0;
384
+ margin-inline: var(--rv-configurator-header-inline-offset, 0px);
385
+ background: var(--rv-configurator-bg, var(--rv-ui-surface));
386
+ &::before {
387
+ content: '';
388
+ position: absolute;
389
+ inset: -8px -16px 0;
390
+ z-index: -1;
391
+ background: inherit;
392
+ }
393
+ > .rv-segmented-switch { flex: 1 1 0%; width: 0; }
394
+ }
395
+ .rv-configurator-custom-section,
396
+ .rv-configurator-section-content {
397
+ display: flex;
398
+ flex-direction: column;
399
+ flex: 1;
400
+ min-width: 0;
401
+ min-height: 0;
402
+ }
403
+ .rv-configurator-panel:has(> .rv-configurator-panel__content > .rv-configurator-custom-section:not([hidden])) {
404
+ height: 100%;
405
+ min-height: 0;
406
+ }
407
+ .rv-configurator-custom-section[hidden] { display: none; }
408
+
409
+ // A compact icon with a native/shared select hit target; field text stays in its popup.
410
+ .rv-icon-select {
411
+ position: relative;
412
+ display: grid;
413
+ place-items: center;
414
+ width: 28px;
415
+ height: 28px;
416
+ margin: 0;
417
+ border-radius: 6px;
418
+ &:focus-within { outline: 2px solid var(--rv-ui-accent); outline-offset: 2px; }
419
+ &:has(.rv-select-control.disabled) { opacity: .5; }
420
+ &:has(.rv-select-control:hover:not(.disabled)) { background: var(--rv-ui-surface-hover); }
421
+ // This icon composition must outrank the normal standalone form padding.
422
+ .dropdown-container.rv-select .dropdown-trigger {
423
+ width: 100%;
424
+ min-width: 0;
425
+ padding: 0;
426
+ .selected-value, .dropdown-arrow { display: none; }
427
+ }
428
+ .rv-select-control {
429
+ position: absolute;
430
+ inset: 0;
431
+ width: 100%;
432
+ min-height: 28px;
433
+ padding: 0;
434
+ opacity: 0;
435
+ cursor: pointer;
436
+ }
437
+ }
@@ -0,0 +1,37 @@
1
+ // Shared Fields-grid presentation. Grid adapters supply rows and policy.
2
+ revo-grid.rv-configurator-fields-grid {
3
+ // Checkboxes convey assignment; selected rows retain the neutral Fields surface.
4
+ --revo-selected-row: transparent;
5
+ display: block;
6
+ width: 100%;
7
+ height: 100%;
8
+ min-width: 0;
9
+ border: 0;
10
+ border-radius: 0;
11
+
12
+ revogr-data {
13
+ .rgRow, .groupingRow { box-shadow: none; }
14
+ // Readonly theme rules also paint cell separators. Keep this surface borderless.
15
+ .rgRow .rgCell,
16
+ .rgRow .rgCell.disabled {
17
+ padding-inline: var(--rv-configurator-field-cell-padding, 0);
18
+ background: transparent;
19
+ border: 0;
20
+ box-shadow: none;
21
+ }
22
+ }
23
+
24
+ .rgRow .rv-configurator-field-reorder { display: flex; align-items: center; justify-content: center; }
25
+ .rv-configurator-field-actions { width: 100%; justify-content: flex-end; }
26
+ .rv-configurator-field-drag {
27
+ display: flex;
28
+ align-items: center;
29
+ justify-content: center;
30
+ box-sizing: border-box;
31
+ width: 100%;
32
+ height: 100%;
33
+ min-width: 0;
34
+ cursor: grab;
35
+ .rv-configurator-drag-handle { margin: 0; }
36
+ }
37
+ }
@@ -43,27 +43,3 @@ $white-overlay-8: palettes.color('common', 'rgba_255_255_255_0_08');
43
43
  $white-overlay-14: palettes.color('common', 'rgba_255_255_255_0_14');
44
44
  $gray-52525b: palettes.color('common', 'hex52525b');
45
45
  $gray-e4e4e7: palettes.color('common', 'hexe4e4e7');
46
- $legacy-007bff: palettes.color('common', 'hex007bff');
47
- $legacy-0d63e8: palettes.color('common', 'hex0d63e8');
48
- $legacy-000: palettes.color('common', 'hex000');
49
- $legacy-757575: palettes.color('common', 'hex757575');
50
- $legacy-999: palettes.color('common', 'hex999');
51
- $legacy-f6f6f7: palettes.color('common', 'hexf6f6f7');
52
- $legacy-ebebef: palettes.color('common', 'hexebebef');
53
- $legacy-e4e4e9: palettes.color('common', 'hexe4e4e9');
54
- $legacy-333333: palettes.color('common', 'hex333333');
55
- $legacy-f0f0f0: palettes.color('common', 'hexf0f0f0');
56
- $legacy-2d2d2d: palettes.color('common', 'hex2d2d2d');
57
- $legacy-d4d4d4: palettes.color('common', 'hexd4d4d4');
58
- $legacy-shadow-54: palettes.color('common', 'rgba_0_0_0_0_15');
59
- $legacy-1c1c1c: palettes.color('common', 'hex1c1c1c');
60
- $legacy-686868: palettes.color('common', 'hex686868');
61
- $legacy-shadow-57: palettes.color('common', 'rgba_0_0_0_0_5');
62
- $legacy-2c2c2c: palettes.color('common', 'hex2c2c2c');
63
- $legacy-fa2057: palettes.color('common', 'hexfa2057');
64
- $legacy-f7c605: palettes.color('common', 'hexf7c605');
65
- $legacy-01c26e: palettes.color('common', 'hex01c26e');
66
- $legacy-a8183c: palettes.color('common', 'hexa8183c');
67
- $legacy-5555fc: palettes.color('common', 'hex5555fc');
68
- $legacy-161a42: palettes.color('common', 'hex161a42');
69
- $legacy-252525: palettes.color('common', 'hex252525');
@@ -52,6 +52,8 @@
52
52
  }
53
53
  }
54
54
 
55
+ .rv-btn[hidden]:not([hidden='until-found']) { display: none; }
56
+
55
57
  /* Explicit filled neutral variant (use when outline is not desired). */
56
58
  .rv-btn-solid {
57
59
  @extend %rv-btn-base;
@@ -245,6 +247,14 @@ label.rv-switch-label {
245
247
  .rv-btn-group > .rv-btn:focus-visible {
246
248
  z-index: 1;
247
249
  }
250
+ .rv-btn-group > .rv-btn-group-item:first-child > span {
251
+ border-start-start-radius: calc(var(--rv-ui-radius) - 1px);
252
+ border-end-start-radius: calc(var(--rv-ui-radius) - 1px);
253
+ }
254
+ .rv-btn-group > .rv-btn-group-item:last-child > span {
255
+ border-start-end-radius: calc(var(--rv-ui-radius) - 1px);
256
+ border-end-end-radius: calc(var(--rv-ui-radius) - 1px);
257
+ }
248
258
 
249
259
  .rv-btn-group-item {
250
260
  position: relative;
@@ -343,7 +353,7 @@ label.rv-switch-label {
343
353
  /* ─── Small toggle switch (.rv-switch-sm) ─────────────────────────────────── */
344
354
  /*
345
355
  * Compact variant of .rv-switch for dense toolbars (28×16, 12px knob).
346
- * Supports both the shared button component and the legacy native-input markup.
356
+ * Supports both the shared button component and the native input adapters.
347
357
  *
348
358
  * <label class="rv-switch-label rv-switch-sm">
349
359
  * <input class="rv-switch-input" type="checkbox">
@@ -385,6 +395,23 @@ label.rv-switch-label {
385
395
  gap: 6px;
386
396
  }
387
397
 
398
+ .rv-choice-chips--scrollable {
399
+ display: flex;
400
+ flex-wrap: nowrap;
401
+ min-width: 0;
402
+ max-width: 100%;
403
+ overflow-x: auto;
404
+ scrollbar-width: none;
405
+ padding-block: 3px;
406
+ --rv-choice-chips-fade-left: 0px;
407
+ --rv-choice-chips-fade-right: 0px;
408
+ mask-image: linear-gradient(to right, transparent, #000 var(--rv-choice-chips-fade-left), #000 calc(100% - var(--rv-choice-chips-fade-right)), transparent);
409
+ &[data-scroll-edges~='left'] { --rv-choice-chips-fade-left: 12px; }
410
+ &[data-scroll-edges~='right'] { --rv-choice-chips-fade-right: 36px; }
411
+ &::-webkit-scrollbar { display: none; }
412
+ > .rv-choice-chip { flex: none; }
413
+ }
414
+
388
415
  .rv-choice-chip {
389
416
  appearance: none;
390
417
  min-height: 29px;
@@ -777,24 +804,6 @@ button.rv-badge--inline {
777
804
  // Square icon controls and their native hover/focus tooltips share one owner.
778
805
  .rv-btn-icon { box-sizing: border-box; flex: none; width: var(--rv-icon-button-size, 32px); height: var(--rv-icon-button-size, 32px); padding: 6px; }
779
806
  .rv-btn-icon[aria-pressed='true'], .rv-btn-icon[data-active='true'] { background: var(--rv-ui-selected-bg); color: var(--rv-ui-selected-fg); }
780
- .rv-control-tooltip { display: none; border: 0; position: absolute; bottom: calc(100% + 8px); inset-inline-start: 50%; transform: translateX(-50%); padding: 6px 9px; border-radius: 6px; white-space: nowrap; font: 12px sans-serif; color: var(--rv-ui-surface); background: var(--rv-ui-text); box-shadow: 0 3px 10px var(--rv-ui-shadow); pointer-events: none; visibility: hidden; z-index: 20; }
781
- .rv-icon-action:hover .rv-control-tooltip:not([data-visible]), .rv-icon-action:focus .rv-control-tooltip:not([data-visible]), .rv-btn-icon:hover .rv-control-tooltip:not([data-visible]), .rv-btn-icon:focus .rv-control-tooltip:not([data-visible]) { display: block; visibility: visible; }
782
- // Anchored tooltips stay outside scrollable surface geometry, including while visible.
783
- @supports (anchor-scope: --rv-control-action) {
784
- .rv-icon-action, .rv-btn-icon {
785
- anchor-name: --rv-control-action;
786
- anchor-scope: --rv-control-action;
787
- }
788
- .rv-control-tooltip {
789
- position: fixed;
790
- position-anchor: --rv-control-action;
791
- inset: auto;
792
- position-area: top;
793
- position-try-fallbacks: top span-left, top span-right;
794
- margin-bottom: 8px;
795
- transform: none;
796
- }
797
- }
798
807
 
799
808
 
800
809
  .rv-btn-icon { position: relative; overflow: visible; }
@@ -0,0 +1,141 @@
1
+ @use './built-in-palettes' as palettes;
2
+ // Shared action surfaces for Grid and Pivot. Keep legacy classes and theme tokens compatible.
3
+ .revo-dropdown-menu.pivot-field-action-popover {
4
+ --rv-dropdown-menu-max-height: 400px;
5
+ position: fixed;
6
+ box-sizing: border-box;
7
+ min-width: 0;
8
+ width: min(20rem, calc(100vw - 16px));
9
+ max-width: calc(100vw - 16px);
10
+ overflow: hidden;
11
+ padding: 0;
12
+ color: var(--rv-dropdown-menu-option-color);
13
+ .pivot-field-action-panel {
14
+ display: flex;
15
+ flex-direction: column;
16
+ align-items: stretch;
17
+ min-width: 0;
18
+ max-width: 100%;
19
+ border-radius: .25rem;
20
+ font-weight: normal;
21
+ white-space: normal;
22
+ box-sizing: border-box;
23
+ width: 100%;
24
+ min-height: 0;
25
+ flex: 1 1 auto;
26
+ border: 0;
27
+ padding: 0;
28
+ gap: 0;
29
+ overflow: hidden;
30
+ }
31
+ .pivot-field-action-header {
32
+ flex-shrink: 0;
33
+ padding: 12px;
34
+ background: var(--rv-dropdown-menu-background);
35
+ border-bottom: 1px solid var(--rv-dropdown-menu-border);
36
+ }
37
+ .pivot-field-action-title { display: block; font-size: 13px; font-weight: 600; line-height: 20px; }
38
+ .pivot-field-action-header .rv-search-input { margin: 8px 0 0; }
39
+ .pivot-field-action-body {
40
+ min-height: 0;
41
+ padding: 6px;
42
+ overflow: auto;
43
+ overscroll-behavior: contain;
44
+ scrollbar-width: thin;
45
+ display: flex;
46
+ flex-direction: column;
47
+ gap: 2px;
48
+ }
49
+ .pivot-field-action-group { display: flex; flex: 0 0 auto; flex-direction: column; gap: 2px; }
50
+ .pivot-field-action-group + .pivot-field-action-group {
51
+ border-top: 1px solid var(--rv-dropdown-menu-border);
52
+ margin-top: 4px;
53
+ padding-top: 6px;
54
+ }
55
+ .rv-configurator-action-panel.pivot-field-action-panel button.rv-btn {
56
+ font-family: inherit;
57
+ font-size: 13px;
58
+ line-height: 1.5;
59
+ width: 100%;
60
+ min-height: 36px;
61
+ flex: 0 0 auto;
62
+ padding: 8px;
63
+ margin: 0;
64
+ align-items: center;
65
+ text-align: start;
66
+ white-space: normal;
67
+ flex-wrap: nowrap;
68
+ gap: 10px;
69
+ justify-content: flex-start;
70
+ opacity: 1;
71
+ appearance: none;
72
+ border: 0;
73
+ box-shadow: none;
74
+ background-image: none;
75
+ border-radius: .375rem;
76
+ color: inherit;
77
+ background: transparent;
78
+ }
79
+ .pivot-field-action-panel button.rv-btn:disabled { color: var(--pv-action-muted, var(--rv-ui-text-muted)); opacity: .55; cursor: not-allowed; }
80
+ .pivot-field-action-symbol, .column-icon { display: inline-flex; flex: 0 0 16px; align-items: center; justify-content: center; color: var(--pv-action-muted, var(--rv-ui-text-muted)); }
81
+ .pivot-field-action-symbol svg, .column-icon svg { display: block; width: 12px; height: 12px; fill: currentColor; }
82
+ .pivot-field-action-copy { min-width: 0; }
83
+ .pivot-field-action-check { display: inline-flex; flex: 0 0 12px; margin-left: auto; svg { display: block; width: 12px; height: 12px; fill: currentColor; } }
84
+ .pivot-field-action-panel button.rv-btn:not(:disabled):hover, .pivot-field-action-panel button.rv-btn:focus-visible { background: var(--rv-dropdown-container-hover-background); }
85
+ .pivot-field-action-panel button.rv-btn:focus-visible { outline: 2px solid var(--rv-ui-accent); outline-offset: -2px; }
86
+ .pivot-action-reason { display: block; font-size: 11px; line-height: 16px; font-weight: normal; }
87
+ .pivot-field-picker-list { max-height: none; overflow: visible; }
88
+ .pivot-aggregation-menu { margin: 0; padding: 0; }
89
+ .pivot-aggregation-menu [role='menu'] { display: flex; flex-direction: column; gap: 2px; }
90
+ .pivot-aggregation-heading { padding: 6px 8px; color: var(--pv-action-muted, var(--rv-ui-text-muted)); font-size: 11px; font-weight: 500; }
91
+ .pivot-aggregation-name { flex: 1; min-width: 0; overflow-wrap: anywhere; text-transform: uppercase; font-size: 12px; font-weight: 500; }
92
+ .pivot-aggregation-check { display: inline-flex; flex: 0 0 12px; svg { display: block; width: 12px; height: 12px; fill: currentColor; } }
93
+ .pivot-field-action-panel button.pivot-aggregation-option[aria-checked='true'] {
94
+ background: color-mix(in srgb, var(--rv-ui-accent) 12%, transparent);
95
+ color: var(--pv-inspector-accent-text, var(--pv-action-accent-text, var(--rv-ui-accent)));
96
+ .pivot-field-action-symbol { color: inherit; }
97
+ }
98
+ .rv-search-input { width: 100%; min-width: 0; box-sizing: border-box; }
99
+ }
100
+
101
+ // The shared popup is portalled outside the inspector, so it carries its palette.
102
+ .revo-dropdown-menu.pivot-field-action-popover,
103
+ .revo-dropdown-menu.pivot-editor-popover,
104
+ .rv-pivot-member-filter-dialog {
105
+ --rv-dropdown-menu-background: var(--rv-ui-surface);
106
+ --rv-dropdown-menu-border: var(--rv-ui-border);
107
+ --rv-dropdown-menu-option-color: var(--rv-ui-text);
108
+ --rv-dropdown-container-hover-background: var(--rv-ui-surface-hover);
109
+ --pv-action-muted: var(--rv-ui-text-muted);
110
+ --pv-action-accent-text: color-mix(in srgb, var(--rv-ui-accent) 90%, #{palettes.color('pivot-interface-mix', 'shade')});
111
+ --rv-search-input-bg: var(--rv-ui-surface-sunken);
112
+ --rv-search-input-focus-bg: var(--rv-search-input-bg);
113
+ --rv-search-input-border: var(--rv-ui-border);
114
+ --rv-search-input-color: var(--rv-ui-text);
115
+ --rv-search-input-icon-color: var(--rv-ui-text-muted);
116
+ --rv-search-input-placeholder-color: var(--rv-ui-text-muted);
117
+ --rv-search-input-focus-border: var(--rv-ui-accent);
118
+ // Progressive editors own their palette, even inside a differently themed host.
119
+ // Shared form controls and member lists must resolve this popup's surface.
120
+ --rv-control-bg: var(--rv-dropdown-menu-background);
121
+ --rv-control-border: var(--rv-dropdown-menu-border);
122
+ --rv-form-border: var(--rv-dropdown-menu-border);
123
+ font-family: inherit;
124
+ line-height: 1.5;
125
+ font-size: 13px;
126
+ &[data-theme^='dark'] {
127
+ --rv-dropdown-menu-background: var(--rv-ui-surface);
128
+ --rv-dropdown-menu-border: var(--rv-ui-border);
129
+ --rv-dropdown-menu-option-color: var(--rv-ui-text);
130
+ --rv-dropdown-container-hover-background: var(--rv-ui-surface-hover);
131
+ --pv-action-muted: var(--rv-ui-text-muted);
132
+ --pv-action-accent-text: color-mix(in srgb, var(--rv-ui-accent) 45%, #{palettes.color('pivot-interface-mix', 'tint')});
133
+ --rv-search-input-bg: var(--rv-ui-surface-sunken);
134
+ --rv-search-input-border: var(--rv-ui-border);
135
+ --rv-search-input-color: var(--rv-ui-text);
136
+ --rv-search-input-icon-color: var(--rv-ui-text-muted);
137
+ --rv-search-input-placeholder-color: var(--rv-ui-text-muted);
138
+ --rv-search-input-focus-border: var(--rv-ui-accent);
139
+ }
140
+ }
141
+
@@ -14,7 +14,7 @@
14
14
  line-height: 1.4;
15
15
  font-variant-numeric: tabular-nums;
16
16
  }
17
- .rv-pagination-panel { justify-content: space-between; }
17
+ .rv-pagination-panel { box-sizing: border-box; padding: 8px 12px; justify-content: space-between; }
18
18
  .rv-pagination-panel > span {
19
19
  display: flex;
20
20
  align-items: center;
@@ -98,15 +98,32 @@
98
98
  .rv-pagination-summary--responsive { display: inline-flex; }
99
99
  }
100
100
 
101
- @container (max-width: 420px) {
101
+ @container (max-width: 900px) {
102
102
  .rv-pagination-pages { gap: 2px; }
103
103
  .rv-pagination-button { min-width: 28px !important; width: 28px; height: 28px !important; padding: 4px !important; }
104
104
  .rv-pagination-panel .rv-pagination-button:not(.rv-pagination-button--icon):not([aria-current]),
105
105
  .rv-pagination-panel .rv-pagination-ellipsis { display: none; }
106
106
  }
107
107
  .rv-pagination-panel { container-type: inline-size; inline-size: 100%; }
108
+ @container (max-width: 900px) {
109
+ .rv-pagination-panel > span:first-child { flex-wrap: nowrap; }
110
+ .rv-pagination-panel > span:last-child { margin-inline-start: auto; }
111
+ }
112
+ @container (max-width: 580px) {
113
+ .rv-pagination-panel .rv-pagination-selector { display: none; }
114
+ }
108
115
 
109
116
  /* Numeric fractions keep their reading order inside an RTL navigation row. */
110
117
  .rv-pagination-summary { direction: ltr; unicode-bidi: isolate; }
111
118
 
112
119
  .rv-pagination-button--icon:dir(rtl) .rv-svg-icon { transform: rotate(180deg); }
120
+
121
+ @container (max-width: 420px) {
122
+ .rv-pagination-panel > span:first-child > .rv-pagination-button--icon:first-child,
123
+ .rv-pagination-panel > span:first-child > .rv-pagination-button--icon:last-of-type { display: none; }
124
+ }
125
+
126
+ @container (min-width: 621px) and (max-width: 900px) {
127
+ .rv-pagination-panel .rv-pagination-button:not(.rv-pagination-button--icon):has(+ [aria-current='page']),
128
+ .rv-pagination-panel [aria-current='page'] + .rv-pagination-button:not(.rv-pagination-button--icon) { display: inline-flex; }
129
+ }