@revolist/ui 4.0.6-rc → 4.0.9

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 (339) hide show
  1. package/MIGRATION.md +7 -7
  2. package/OWNERSHIP.md +33 -33
  3. package/README.md +65 -410
  4. package/_button.scss +6 -2
  5. package/_chunks/{arrow-up-Cw8hW9vp.js → arrow-up-BSYhTAus.js} +1 -1
  6. package/_chunks/{calculator-CDWOuAcp.js → calculator-BG0Xd_Uw.js} +1 -1
  7. package/_chunks/{calendar-QWDyYzdo.js → calendar-C4zH4Ppn.js} +7 -7
  8. package/_chunks/{cell-visuals-E-2oEKHg.js → cell-visuals-r6DOOhGh.js} +7 -7
  9. package/_chunks/{chart-frame-hcOlnQ1K.js → chart-frame-DzvJooS2.js} +7 -7
  10. package/_chunks/{check-BwI7iCAm.js → check-BFIC9pge.js} +1 -1
  11. package/_chunks/{chevron-down-GbplLa6s.js → chevron-down-BkrpxJYD.js} +1 -1
  12. package/_chunks/chevron-right-DZ79RmYV.js +4 -0
  13. package/_chunks/{chevron-up-BLuNMPDn.js → chevron-up-Dt846uIR.js} +1 -1
  14. package/_chunks/{choice-chips-A6WR-WJe.js → choice-chips-D2cJju-g.js} +6 -6
  15. package/_chunks/{clock-BOhPNlW3.js → clock-DTfr4p2S.js} +1 -1
  16. package/_chunks/{color-palette-DMJUChWC.js → color-palette-D7AS20M1.js} +5 -5
  17. package/_chunks/{color-picker-BK4W1nd6.js → color-picker-BanAQVfz.js} +8 -8
  18. package/_chunks/{component-CMkF17YZ.js → component-B8SvtSaB.js} +54 -55
  19. package/_chunks/{component-metadata-BKd7U8OW.js → component-metadata-DlVkpW3h.js} +1 -1
  20. package/_chunks/{configurator-actions-By8WSL2m.js → configurator-actions-CvZf5nYp.js} +11 -11
  21. package/_chunks/{configurator-field-icon-CmcM_sPs.js → configurator-field-icon-B0S_208W.js} +2 -2
  22. package/_chunks/{control-mlH7l0Uq.js → control-Dj7IR-i0.js} +4 -4
  23. package/_chunks/{controller-hRBm_Lfz.js → controller-ChkqiANQ.js} +6 -6
  24. package/_chunks/{controls-FUU-MUKC.js → controls-BF6WlGT4.js} +140 -105
  25. package/_chunks/{date-control-Dup_P3w5.js → date-control-BNj2FBF2.js} +8 -8
  26. package/_chunks/{date-time-9z6pAG5T.js → date-time-Ucx1ep76.js} +25 -25
  27. package/_chunks/{delete-button-CW9vjLnk.js → delete-button-DQSK6G-4.js} +2 -2
  28. package/_chunks/{dialog.parts-Bi7YbXqS.js → dialog.parts-BqkmnhIL.js} +7 -7
  29. package/_chunks/{duration-D7oRjsmP.js → duration-BIESsyLI.js} +9 -9
  30. package/_chunks/{editor-commit-Bq3wSgvr.js → editor-commit-BXIUX0As.js} +3 -3
  31. package/_chunks/{editor-popup-ByU7qiub.js → editor-popup-BTmjGg2_.js} +5 -5
  32. package/_chunks/field-configurator-BWZnm3gE.js +288 -0
  33. package/_chunks/field-context-0oUi-w-G.js +5 -0
  34. package/_chunks/{framework-mount-Bk4O_T7T.js → framework-mount-DQ4opSL0.js} +4 -4
  35. package/_chunks/{hooks.module-CG3gN83z.js → hooks.module-CXpO2xq6.js} +2 -2
  36. package/_chunks/{icon-toolbar-DSjOdwM7.js → icon-toolbar-C4J_Wqph.js} +7 -7
  37. package/_chunks/{icons-Ci5mADVc.js → icons-B4qN13Yj.js} +1 -1
  38. package/_chunks/{iso-B0YHBK7m.js → iso-CJQl2kmq.js} +1 -1
  39. package/_chunks/{jsxRuntime.module-F6UFnpT-.js → jsxRuntime.module-ksX_VSbv.js} +2 -2
  40. package/_chunks/{magnifying-glass-CvrTDSkB.js → magnifying-glass-BFZrFs8M.js} +1 -1
  41. package/_chunks/{minus-BOAR3A1C.js → minus-DE8NPK_D.js} +1 -1
  42. package/_chunks/{model-mPO2tG2f.js → model-CFrBgRHm.js} +3 -3
  43. package/_chunks/mount-DTCXtKfT.js +267 -0
  44. package/_chunks/{native-Blr3byjO.js → native-RudS9C_q.js} +3 -3
  45. package/_chunks/{native-control-pFMuHf3G.js → native-control-xc_B4vfn.js} +146 -141
  46. package/_chunks/{number-input-DqXV6vgP.js → number-input-C_TPzAJq.js} +6 -6
  47. package/_chunks/{picker-gEGTu1Ki.js → picker-0h5TwXGT.js} +8 -8
  48. package/_chunks/{plus-CbGRkIGl.js → plus-BaXticu7.js} +1 -1
  49. package/_chunks/{popup-C35Isk7p.js → popup-CISbXDnE.js} +6 -6
  50. package/_chunks/{preact.module-BBM36DnO.js → preact.module-DzTStiZX.js} +1 -1
  51. package/_chunks/{rating-choice-DbxdUJr-.js → rating-choice-FhWNdsiC.js} +4 -4
  52. package/_chunks/{render-m5eMMwFR.js → render-C6PFWlqh.js} +4 -4
  53. package/_chunks/{reorder-list-B0_13Sja.js → reorder-list-CR1DO4EG.js} +5 -5
  54. package/_chunks/{request-trail-CCSK6TJA.js → request-trail-ay92DQpo.js} +155 -146
  55. package/_chunks/{rich-text-5rnc8lpI.js → rich-text-ByjXFv1S.js} +15 -15
  56. package/_chunks/{rotate-left-BF6G883o.js → rotate-left-CTHmcGBP.js} +1 -1
  57. package/_chunks/{rotate-right-Iha5ScJ1.js → rotate-right-BIfKgVun.js} +1 -1
  58. package/_chunks/selection-list-tooltips-DqqLeO_m.js +42 -0
  59. package/_chunks/{title-tooltip-Cw6LOZhb.js → title-tooltip-DKiWhsL7.js} +3 -3
  60. package/_chunks/{tooltip-D4xkio5G.js → tooltip-B5ziciEP.js} +4 -4
  61. package/_chunks/{tooltip-owner-DjdvqKzz.js → tooltip-owner-BYho-vJl.js} +1 -1
  62. package/_chunks/{tooltip-session-B6X6x8G_.js → tooltip-session-D74h-uqu.js} +3 -3
  63. package/_chunks/{tooltip-text-BXsUEmBH.js → tooltip-text-CH_c2J-J.js} +3 -3
  64. package/_chunks/{top-layer-popup-CNSDdfJV.js → top-layer-popup-BHajfliG.js} +4 -4
  65. package/_chunks/{xmark-DD_PBvZI.js → xmark-DQRQfXZI.js} +1 -1
  66. package/_dialog.scss +57 -22
  67. package/_form.scss +71 -21
  68. package/_legend.scss +25 -7
  69. package/_variables.scss +2 -1
  70. package/_view-switcher.scss +6 -0
  71. package/activity-message.d.ts +1 -1
  72. package/activity-message.js +2 -2
  73. package/ai/_chat.scss +7 -0
  74. package/ai/_style.scss +27 -20
  75. package/ai/components.d.ts +3 -1
  76. package/ai/index.js +2 -2
  77. package/ai/mount.d.ts +15 -7
  78. package/ai/request-trail.d.ts +9 -3
  79. package/ai/results/index.d.ts +1 -1
  80. package/ai/translations.d.ts +1 -1
  81. package/angular/angular.d.ts +1 -1
  82. package/angular/angular.js +13 -7
  83. package/assignee/assignee.scss +24 -6
  84. package/assignee/index.js +8 -8
  85. package/avatar/avatar.style.scss +23 -6
  86. package/avatar/index.d.ts +1 -1
  87. package/avatar/index.js +4 -4
  88. package/badge.d.ts +1 -1
  89. package/badge.js +1 -1
  90. package/badge.view.d.ts +1 -1
  91. package/brush-range/_brush-range.scss +55 -49
  92. package/brush-range/component.js +3 -3
  93. package/buttons/delete-button.js +1 -1
  94. package/buttons/delete-button.style.scss +6 -2
  95. package/buttons/remove-button.js +3 -3
  96. package/buttons/svg-button.js +4 -4
  97. package/calendar/_calendar.scss +19 -23
  98. package/calendar/calendar.js +1 -1
  99. package/calendar/day.js +3 -3
  100. package/calendar/header.js +3 -4
  101. package/calendar/index.js +3 -3
  102. package/calendar/model.js +1 -1
  103. package/calendar/month-grid.js +3 -3
  104. package/calendar/translations.js +1 -1
  105. package/calendar/year-grid.js +3 -3
  106. package/cell-input.js +1 -1
  107. package/cell-input.scss +3 -7
  108. package/cell-visuals/badge.style.scss +6 -3
  109. package/cell-visuals/bar-chart.style.scss +2 -1
  110. package/cell-visuals/column-type.style.css +12 -0
  111. package/cell-visuals/index.js +1 -1
  112. package/cell-visuals/progress-line-value.renderer.style.scss +4 -2
  113. package/cell-visuals/progress-line.style.scss +1 -4
  114. package/cell-visuals/sparkline.style.scss +2 -1
  115. package/cell-visuals/timeline.style.css +4 -2
  116. package/checkbox/checkbox.scss +5 -2
  117. package/checkbox/index.js +2 -2
  118. package/choice-chips/index.js +1 -1
  119. package/color-palette/built-in-palettes.js +1 -1
  120. package/color-palette/chart-palettes.js +1 -1
  121. package/color-palette/color-palette.js +1 -1
  122. package/color-palette/color-palette.style.scss +88 -25
  123. package/color-palette/color-picker.constants.js +1 -1
  124. package/color-palette/color-picker.js +2 -2
  125. package/color-palette/color-picker.style.scss +23 -10
  126. package/color-palette/common-palettes.d.ts +1 -1
  127. package/color-palette/common-palettes.js +2 -2
  128. package/color-palette/gantt-palettes.js +1 -1
  129. package/color-palette/palette.js +1 -1
  130. package/color-palette/pivot-palettes.js +1 -1
  131. package/color-palette/platform-palettes.js +1 -1
  132. package/color-palette/pro-palettes.js +1 -1
  133. package/color-palette/scheduler-palettes.js +1 -1
  134. package/configurator-actions.d.ts +6 -6
  135. package/configurator-actions.js +1 -1
  136. package/configurator-aggregation-list.d.ts +1 -1
  137. package/configurator-aggregation-list.js +22 -20
  138. package/configurator-drop-zone.d.ts +2 -1
  139. package/configurator-drop-zone.js +36 -34
  140. package/configurator-field-icon.js +1 -1
  141. package/configurator-focus.js +2 -2
  142. package/configurator-sections.d.ts +3 -3
  143. package/configurator-sections.js +4 -4
  144. package/control-attributes.js +1 -1
  145. package/control-presentation.js +4 -4
  146. package/controls.d.ts +11 -0
  147. package/controls.js +4 -4
  148. package/core/anchored-popover.js +1 -1
  149. package/core/control-id.js +1 -1
  150. package/core/editor-popup.js +1 -1
  151. package/core/motion.js +1 -1
  152. package/{_chunks/popover-controller-D-AvKQ7B.js → core/popover-controller.js} +8 -8
  153. package/core/selection-list-tooltips.d.ts +2 -0
  154. package/core/tooltip.d.ts +1 -1
  155. package/core/top-layer-popup.d.ts +1 -1
  156. package/core/top-layer-popup.js +1 -1
  157. package/date-time/date-control.d.ts +1 -1
  158. package/date-time/field.d.ts +1 -0
  159. package/date-time/index.js +1 -1
  160. package/date-time/style.scss +192 -46
  161. package/date-time/time-selection.d.ts +1 -1
  162. package/dialog/dialog.dom.js +4 -4
  163. package/dialog/dialog.drag.js +1 -1
  164. package/dialog/dialog.parts.js +1 -1
  165. package/dialog/dialog.preact.js +2 -2
  166. package/distribution-chart/_distribution-chart.scss +106 -28
  167. package/distribution-chart/area-chart.js +4 -4
  168. package/distribution-chart/bar-chart.js +3 -3
  169. package/distribution-chart/chart-frame.d.ts +1 -1
  170. package/distribution-chart/index.js +2 -2
  171. package/distribution-chart/line-chart.js +3 -3
  172. package/dropdown/content.js +1 -1
  173. package/dropdown/control.js +1 -1
  174. package/dropdown/dropdown.service.js +2 -2
  175. package/dropdown/dropdown.types.d.ts +1 -1
  176. package/dropdown/editor-dropdown.style.scss +14 -9
  177. package/dropdown/index.js +2 -2
  178. package/dropdown/lookup-field.js +5 -5
  179. package/dropdown/popup.js +1 -1
  180. package/duration/index.js +1 -1
  181. package/editor-actions.js +4 -4
  182. package/editor-layout/index.d.ts +4 -4
  183. package/editor-layout/index.js +40 -35
  184. package/editor-layout/style.scss +82 -18
  185. package/favicon.svg +9 -0
  186. package/field-configurator.d.ts +14 -3
  187. package/field-configurator.js +1 -1
  188. package/field-reorder.hook.js +2 -2
  189. package/field-reorder.js +1 -1
  190. package/filter/filters/slider/_single-slider.scss +57 -38
  191. package/filter/filters/slider/_slider.scss +35 -10
  192. package/filter/filters/slider/component.js +1 -1
  193. package/filter/filters/slider/control.js +1 -1
  194. package/filter/filters/slider/inputs.js +1 -1
  195. package/filter/filters/slider/logic.js +1 -1
  196. package/filter/filters/slider/preact.js +2 -2
  197. package/filter/filters/slider/runtime.js +3 -3
  198. package/filter/filters/slider/single.js +3 -3
  199. package/filter-badge.js +5 -5
  200. package/filter-controls.js +4 -4
  201. package/form-controls/index.js +4 -4
  202. package/form-controls/presentation.d.ts +1 -1
  203. package/form-controls/presentation.js +5 -5
  204. package/formatting/index.js +11 -11
  205. package/formatting/styles.scss +13 -11
  206. package/framework.js +76 -77
  207. package/history-controls.js +4 -4
  208. package/html-controls.js +1 -1
  209. package/icon-toolbar.d.ts +1 -1
  210. package/icon-toolbar.js +1 -1
  211. package/icons/icon.d.ts +1 -1
  212. package/icons/icon.js +2 -2
  213. package/legend.d.ts +1 -1
  214. package/legend.js +2 -2
  215. package/masked-input/index.js +6 -6
  216. package/native-control.js +1 -1
  217. package/native-styles.css +1 -1
  218. package/native-styles.scss +6 -2
  219. package/native.d.ts +3 -3
  220. package/native.js +18 -18
  221. package/number-input/index.d.ts +1 -1
  222. package/number-input/index.js +1 -1
  223. package/package.json +53 -1
  224. package/pagination.js +2 -2
  225. package/pdf-viewer/controller.js +1 -1
  226. package/pdf-viewer/header.d.ts +1 -1
  227. package/pdf-viewer/index.d.ts +2 -2
  228. package/pdf-viewer/index.js +4 -4
  229. package/pdf-viewer/search-bar.d.ts +1 -1
  230. package/pdf-viewer/status.d.ts +1 -1
  231. package/pdf-viewer/style.scss +203 -42
  232. package/preact-mount.js +2 -2
  233. package/preact.d.ts +5 -4
  234. package/preact.js +105 -67
  235. package/progress/_bar.scss +9 -3
  236. package/progress/_circular.scss +2 -1
  237. package/progress/bar.js +1 -1
  238. package/progress/circular.js +1 -1
  239. package/progress/range.js +1 -1
  240. package/rating-choice.js +1 -1
  241. package/react-adapter.d.ts +4 -2
  242. package/react-control.js +1 -1
  243. package/react.d.ts +2 -2
  244. package/react.js +30 -31
  245. package/reorder-list.d.ts +1 -1
  246. package/reorder-list.js +1 -1
  247. package/reorder-list.scss +59 -17
  248. package/resource-picker/resource-picker-avatar.js +3 -3
  249. package/resource-picker/resource-picker-option.js +2 -2
  250. package/resource-picker/resource-picker-popup.js +3 -3
  251. package/resource-picker/resource-picker.js +76 -74
  252. package/resource-picker/resource-picker.scss +62 -34
  253. package/resource-picker/resource-picker.utils.js +1 -1
  254. package/rich-text/index.js +1 -1
  255. package/rich-text/style.scss +203 -49
  256. package/rich-text/toolbar.d.ts +1 -1
  257. package/robots.txt +4 -0
  258. package/search-input/index.js +4 -4
  259. package/segmented-switch/index.js +2 -2
  260. package/select.js +1 -1
  261. package/selection-list.d.ts +1 -0
  262. package/selection-list.js +3 -1
  263. package/status-feedback/badge.js +2 -2
  264. package/status-feedback/exit-snapshot.js +2 -2
  265. package/status-feedback/header.js +5 -5
  266. package/status-feedback/icons.js +1 -1
  267. package/status-feedback/index.js +1 -1
  268. package/status-feedback/item.js +2 -2
  269. package/status-feedback/motion.js +1 -1
  270. package/status-feedback/placement.js +1 -1
  271. package/status-feedback/popover.js +2 -2
  272. package/status-feedback/render.js +1 -1
  273. package/status-feedback/status-feedback.scss +124 -35
  274. package/styles/_activity-message.scss +24 -7
  275. package/styles/_alert.scss +61 -14
  276. package/styles/_cell-editor-frame.scss +11 -0
  277. package/styles/_compositions.scss +399 -79
  278. package/styles/_control.scss +30 -8
  279. package/styles/_disclosure.scss +15 -5
  280. package/styles/_editor-counter.scss +16 -6
  281. package/styles/_editor-slider.scss +8 -2
  282. package/styles/_field-configurator.scss +192 -41
  283. package/styles/_fields-grid.scss +16 -4
  284. package/styles/_filter-controls.scss +10 -2
  285. package/styles/_icon-action.scss +48 -15
  286. package/styles/_loading.scss +12 -3
  287. package/styles/_motion.scss +32 -9
  288. package/styles/_primitives.scss +346 -96
  289. package/styles/_theme.scss +130 -86
  290. package/styles/_thresholds.scss +28 -25
  291. package/styles/_time-grid.scss +8 -3
  292. package/styles/_tokens.scss +6 -1
  293. package/styles/color-roles.js +1 -1
  294. package/styles/configurator-actions.scss +126 -26
  295. package/styles/pagination.css +114 -30
  296. package/styles/rating.css +8 -3
  297. package/styles.css +1 -1
  298. package/styles.scss +1 -3
  299. package/surfaces.d.ts +4 -2
  300. package/surfaces.js +8 -8
  301. package/svelte/UiComponent.svelte +44 -11
  302. package/svelte-control.js +1 -1
  303. package/svelte.d.ts +1 -1
  304. package/svelte.js +5 -5
  305. package/switch/index.js +3 -3
  306. package/time-grid.js +5 -5
  307. package/timeline-track/_style.scss +96 -24
  308. package/timeline-track/index.js +5 -5
  309. package/timeline-track/model.js +1 -1
  310. package/ui.css +1 -1
  311. package/view-switcher.d.ts +23 -0
  312. package/vue-badge.js +1 -1
  313. package/vue-control.js +1 -1
  314. package/vue-segmented-switch.js +1 -1
  315. package/vue.d.ts +3 -2
  316. package/vue.js +45 -46
  317. package/_chunks/badge.view-D30pMUfi.js +0 -14
  318. package/_chunks/chevron-left-D0nc4Z5S.js +0 -4
  319. package/_chunks/chevron-right-sxHQMSkq.js +0 -4
  320. package/_chunks/field-configurator-BCINdXpU.js +0 -223
  321. package/_chunks/field-context-D57PnBbH.js +0 -5
  322. package/_chunks/mount-Cw2zk58T.js +0 -266
  323. package/_shared/data-query/binding.d.ts +0 -30
  324. package/_shared/data-query/blocks.d.ts +0 -30
  325. package/_shared/data-query/commands.d.ts +0 -47
  326. package/_shared/data-query/contracts.d.ts +0 -106
  327. package/_shared/data-query/cursor-reader.d.ts +0 -25
  328. package/_shared/data-query/direct-binding.d.ts +0 -3
  329. package/_shared/data-query/index.d.ts +0 -23
  330. package/_shared/data-query/infinite-binding.d.ts +0 -18
  331. package/_shared/data-query/keys.d.ts +0 -9
  332. package/_shared/data-query/limiter.d.ts +0 -12
  333. package/_shared/data-query/load-options.d.ts +0 -25
  334. package/_shared/data-query/materialize.d.ts +0 -2
  335. package/_shared/data-query/policy.d.ts +0 -14
  336. package/_shared/data-query/provider-queries.d.ts +0 -22
  337. package/_shared/data-query/reader.d.ts +0 -23
  338. package/_shared/data-query/remote-load.d.ts +0 -7
  339. package/_shared/data-query/source.d.ts +0 -40
@@ -17,7 +17,8 @@
17
17
  text-decoration: none;
18
18
  white-space: nowrap;
19
19
  transition:
20
- background-color var(--rv-ui-motion-fast, 120ms) var(--rv-ui-motion-ease, ease),
20
+ background-color var(--rv-ui-motion-fast, 120ms)
21
+ var(--rv-ui-motion-ease, ease),
21
22
  color var(--rv-ui-motion-fast, 120ms) var(--rv-ui-motion-ease, ease),
22
23
  border-color var(--rv-ui-motion-fast, 120ms) var(--rv-ui-motion-ease, ease),
23
24
  opacity var(--rv-ui-motion-fast, 120ms) var(--rv-ui-motion-ease, ease);
@@ -41,18 +42,33 @@
41
42
  @extend %rv-btn-base;
42
43
  // Transparent adapters add the base class even when a variant is supplied.
43
44
  // Default colors must never override a variant's hover or active state.
44
- &:where(:not(.rv-btn-solid, .rv-btn-primary, .rv-btn-danger, .rv-btn-danger-outline, .rv-btn-danger-ghost, .rv-btn-secondary, .rv-btn-ghost, .rv-btn-link, .rv-btn-tab)) {
45
+ &:where(
46
+ :not(
47
+ .rv-btn-solid,
48
+ .rv-btn-primary,
49
+ .rv-btn-danger,
50
+ .rv-btn-danger-outline,
51
+ .rv-btn-danger-ghost,
52
+ .rv-btn-secondary,
53
+ .rv-btn-ghost,
54
+ .rv-btn-link,
55
+ .rv-btn-tab
56
+ )
57
+ ) {
45
58
  background: var(--rv-ui-btn-outline-bg);
46
59
  border-color: var(--rv-ui-btn-outline-border);
47
60
  color: var(--rv-ui-btn-outline-fg);
48
- &:hover, &:active {
61
+ &:hover,
62
+ &:active {
49
63
  background: var(--rv-ui-btn-outline-bg-hover);
50
64
  border-color: var(--rv-ui-btn-outline-border-hover);
51
65
  }
52
66
  }
53
67
  }
54
68
 
55
- .rv-btn[hidden]:not([hidden='until-found']) { display: none; }
69
+ .rv-btn[hidden]:not([hidden='until-found']) {
70
+ display: none;
71
+ }
56
72
 
57
73
  /* Explicit filled neutral variant (use when outline is not desired). */
58
74
  .rv-btn-solid {
@@ -60,8 +76,12 @@
60
76
  background: var(--rv-ui-btn-bg);
61
77
  color: var(--rv-ui-btn-fg);
62
78
 
63
- &:hover { background: var(--rv-ui-btn-bg-hover); }
64
- &:active { background: var(--rv-ui-btn-bg-hover); }
79
+ &:hover {
80
+ background: var(--rv-ui-btn-bg-hover);
81
+ }
82
+ &:active {
83
+ background: var(--rv-ui-btn-bg-hover);
84
+ }
65
85
  }
66
86
 
67
87
  .rv-btn-primary {
@@ -69,8 +89,12 @@
69
89
  background: var(--rv-ui-accent);
70
90
  color: var(--rv-ui-accent-fg);
71
91
 
72
- &:hover { background: var(--rv-ui-accent-hover); }
73
- &:active { background: var(--rv-ui-accent-hover); }
92
+ &:hover {
93
+ background: var(--rv-ui-accent-hover);
94
+ }
95
+ &:active {
96
+ background: var(--rv-ui-accent-hover);
97
+ }
74
98
  }
75
99
 
76
100
  .rv-btn-danger,
@@ -93,7 +117,9 @@
93
117
  color: var(--rv-ui-btn-danger-fg);
94
118
 
95
119
  &:hover,
96
- &:active { background: var(--rv-ui-btn-danger-bg-hover); }
120
+ &:active {
121
+ background: var(--rv-ui-btn-danger-bg-hover);
122
+ }
97
123
  }
98
124
 
99
125
  .rv-btn-secondary {
@@ -101,8 +127,12 @@
101
127
  background: var(--rv-ui-btn-secondary-bg);
102
128
  color: var(--rv-ui-btn-secondary-fg);
103
129
 
104
- &:hover { background: var(--rv-ui-btn-secondary-bg-hover); }
105
- &:active { background: var(--rv-ui-btn-secondary-bg-hover); }
130
+ &:hover {
131
+ background: var(--rv-ui-btn-secondary-bg-hover);
132
+ }
133
+ &:active {
134
+ background: var(--rv-ui-btn-secondary-bg-hover);
135
+ }
106
136
  }
107
137
 
108
138
  .rv-btn-ghost {
@@ -110,8 +140,12 @@
110
140
  background: transparent;
111
141
  color: inherit;
112
142
 
113
- &:hover { background: var(--rv-ui-btn-ghost-hover-bg); }
114
- &:active { background: var(--rv-ui-btn-ghost-active-bg); }
143
+ &:hover {
144
+ background: var(--rv-ui-btn-ghost-hover-bg);
145
+ }
146
+ &:active {
147
+ background: var(--rv-ui-btn-ghost-active-bg);
148
+ }
115
149
  }
116
150
 
117
151
  /* ─── Toggle switch ───────────────────────────────────────────────────────── */
@@ -165,8 +199,12 @@ label.rv-switch-label {
165
199
  overflow: hidden;
166
200
  clip: rect(0 0 0 0);
167
201
 
168
- &:checked + .rv-switch-track { background: var(--rv-ui-accent); }
169
- &:checked + .rv-switch-track .rv-switch-thumb { inset-inline-start: 15px; }
202
+ &:checked + .rv-switch-track {
203
+ background: var(--rv-ui-accent);
204
+ }
205
+ &:checked + .rv-switch-track .rv-switch-thumb {
206
+ inset-inline-start: 15px;
207
+ }
170
208
  &:focus-visible + .rv-switch-track {
171
209
  outline: 2px solid var(--rv-ui-accent);
172
210
  outline-offset: 3px;
@@ -184,7 +222,8 @@ label.rv-switch-label {
184
222
  box-sizing: border-box;
185
223
  border-radius: 999px;
186
224
  background: var(--rv-ui-switch-track-off);
187
- transition: background-color var(--rv-ui-motion-fast, 120ms) var(--rv-ui-motion-ease, ease);
225
+ transition: background-color var(--rv-ui-motion-fast, 120ms)
226
+ var(--rv-ui-motion-ease, ease);
188
227
  }
189
228
 
190
229
  .rv-switch-thumb {
@@ -195,7 +234,8 @@ label.rv-switch-label {
195
234
  border-radius: 50%;
196
235
  background: var(--rv-ui-switch-thumb);
197
236
  box-shadow: 0 1px 3px var(--rv-ui-shadow);
198
- transition: inset-inline-start var(--rv-ui-motion-normal, 160ms) var(--rv-ui-motion-ease, ease);
237
+ transition: inset-inline-start var(--rv-ui-motion-normal, 160ms)
238
+ var(--rv-ui-motion-ease, ease);
199
239
  }
200
240
 
201
241
  .rv-switch[aria-checked='true'] .rv-switch-track {
@@ -280,7 +320,10 @@ label.rv-switch-label {
280
320
  cursor: pointer;
281
321
  user-select: none;
282
322
  color: inherit;
283
- transition: background-color var(--rv-ui-motion-fast, 120ms) var(--rv-ui-motion-ease, ease), color var(--rv-ui-motion-fast, 120ms) var(--rv-ui-motion-ease, ease);
323
+ transition:
324
+ background-color var(--rv-ui-motion-fast, 120ms)
325
+ var(--rv-ui-motion-ease, ease),
326
+ color var(--rv-ui-motion-fast, 120ms) var(--rv-ui-motion-ease, ease);
284
327
  }
285
328
 
286
329
  & + & span {
@@ -311,7 +354,10 @@ label.rv-switch-label {
311
354
  line-height: 1;
312
355
  opacity: 0.5;
313
356
  padding: 0 2px;
314
- transition: opacity var(--rv-ui-motion-fast, 120ms) var(--rv-ui-motion-ease, ease), background-color var(--rv-ui-motion-fast, 120ms) var(--rv-ui-motion-ease, ease);
357
+ transition:
358
+ opacity var(--rv-ui-motion-fast, 120ms) var(--rv-ui-motion-ease, ease),
359
+ background-color var(--rv-ui-motion-fast, 120ms)
360
+ var(--rv-ui-motion-ease, ease);
315
361
 
316
362
  &:hover:not(:disabled) {
317
363
  opacity: 1;
@@ -343,11 +389,20 @@ label.rv-switch-label {
343
389
  cursor: pointer;
344
390
  white-space: nowrap;
345
391
  line-height: 1.4;
346
- transition: background-color var(--rv-ui-motion-fast, 120ms) var(--rv-ui-motion-ease, ease);
392
+ transition: background-color var(--rv-ui-motion-fast, 120ms)
393
+ var(--rv-ui-motion-ease, ease);
347
394
 
348
- &:hover { background: var(--rv-ui-btn-secondary-bg-hover); }
349
- &:active { opacity: 0.75; }
350
- &:disabled, &[disabled] { pointer-events: none; opacity: 0.5; }
395
+ &:hover {
396
+ background: var(--rv-ui-btn-secondary-bg-hover);
397
+ }
398
+ &:active {
399
+ opacity: 0.75;
400
+ }
401
+ &:disabled,
402
+ &[disabled] {
403
+ pointer-events: none;
404
+ opacity: 0.5;
405
+ }
351
406
  }
352
407
 
353
408
  /* ─── Small toggle switch (.rv-switch-sm) ─────────────────────────────────── */
@@ -384,7 +439,9 @@ label.rv-switch-label {
384
439
 
385
440
  @media (prefers-reduced-motion: reduce) {
386
441
  .rv-switch-track,
387
- .rv-switch-thumb { transition: none; }
442
+ .rv-switch-thumb {
443
+ transition: none;
444
+ }
388
445
  }
389
446
 
390
447
  /* ─── Compact choice chips ───────────────────────────────────────────────── */
@@ -405,11 +462,25 @@ label.rv-switch-label {
405
462
  padding-block: 3px;
406
463
  --rv-choice-chips-fade-left: 0px;
407
464
  --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; }
465
+ mask-image: linear-gradient(
466
+ to right,
467
+ transparent,
468
+ #000 var(--rv-choice-chips-fade-left),
469
+ #000 calc(100% - var(--rv-choice-chips-fade-right)),
470
+ transparent
471
+ );
472
+ &[data-scroll-edges~='left'] {
473
+ --rv-choice-chips-fade-left: 12px;
474
+ }
475
+ &[data-scroll-edges~='right'] {
476
+ --rv-choice-chips-fade-right: 36px;
477
+ }
478
+ &::-webkit-scrollbar {
479
+ display: none;
480
+ }
481
+ > .rv-choice-chip {
482
+ flex: none;
483
+ }
413
484
  }
414
485
 
415
486
  .rv-choice-chip {
@@ -427,14 +498,18 @@ label.rv-switch-label {
427
498
  line-height: 1;
428
499
  white-space: nowrap;
429
500
  transition:
430
- background-color var(--rv-ui-motion-fast, 120ms) var(--rv-ui-motion-ease, ease),
501
+ background-color var(--rv-ui-motion-fast, 120ms)
502
+ var(--rv-ui-motion-ease, ease),
431
503
  border-color var(--rv-ui-motion-fast, 120ms) var(--rv-ui-motion-ease, ease),
432
504
  color var(--rv-ui-motion-fast, 120ms) var(--rv-ui-motion-ease, ease),
433
505
  opacity var(--rv-ui-motion-fast, 120ms) var(--rv-ui-motion-ease, ease);
434
506
 
435
- &:hover:not(:disabled) { background: var(--rv-ui-surface-hover); }
507
+ &:hover:not(:disabled) {
508
+ background: var(--rv-ui-surface-hover);
509
+ }
436
510
 
437
- &[aria-pressed='true'], &[data-selected='true'] {
511
+ &[aria-pressed='true'],
512
+ &[data-selected='true'] {
438
513
  border-color: transparent;
439
514
  background: var(--rv-ui-choice-chip-selected-bg, var(--rv-ui-selected-bg));
440
515
  color: var(--rv-ui-selected-fg);
@@ -456,7 +531,8 @@ label.rv-switch-label {
456
531
  border-color: var(--rv-ui-border);
457
532
  background: var(--rv-ui-surface);
458
533
 
459
- &[aria-pressed='true'], &[data-selected='true'] {
534
+ &[aria-pressed='true'],
535
+ &[data-selected='true'] {
460
536
  border-color: transparent;
461
537
  background: var(--rv-ui-choice-chip-selected-bg, var(--rv-ui-selected-bg));
462
538
  }
@@ -499,8 +575,8 @@ label.rv-switch-label {
499
575
  line-height: 1;
500
576
  cursor: pointer;
501
577
  padding: 0;
502
- transition:
503
- background-color var(--rv-ui-motion-fast, 120ms) var(--rv-ui-motion-ease, ease);
578
+ transition: background-color var(--rv-ui-motion-fast, 120ms)
579
+ var(--rv-ui-motion-ease, ease);
504
580
 
505
581
  &:hover {
506
582
  background: var(--rv-ui-btn-ghost-hover-bg);
@@ -511,24 +587,39 @@ label.rv-switch-label {
511
587
 
512
588
  .rv-segmented-switch,
513
589
  .rv-value-selection-editor {
514
- --rv-ui-accent-text: color-mix(in srgb, var(--rv-ui-accent) var(--rv-ui-accent-text-weight, 90%), var(--rv-ui-accent-text-base, black));
590
+ --rv-ui-accent-text: color-mix(
591
+ in srgb,
592
+ var(--rv-ui-accent) var(--rv-ui-accent-text-weight, 90%),
593
+ var(--rv-ui-accent-text-base, black)
594
+ );
515
595
  }
516
596
 
517
597
  .rv-segmented-switch {
518
- --rv-segmented-theme-item-hover-bg: color-mix(in srgb, var(--rv-ui-text) 8%, var(--rv-ui-surface-sunken));
598
+ --rv-segmented-theme-item-hover-bg: color-mix(
599
+ in srgb,
600
+ var(--rv-ui-text) 8%,
601
+ var(--rv-ui-surface-sunken)
602
+ );
519
603
  display: inline-flex;
520
604
  box-sizing: border-box;
521
605
  height: 37px;
522
606
  align-items: center;
523
607
  gap: 2px;
524
- background: var(--rv-segmented-bg, var(--rv-ah-bg-up, var(--rv-segmented-theme-bg, var(--rv-ui-surface-sunken))));
608
+ background: var(
609
+ --rv-segmented-bg,
610
+ var(
611
+ --rv-ah-bg-up,
612
+ var(--rv-segmented-theme-bg, var(--rv-ui-surface-sunken))
613
+ )
614
+ );
525
615
  border: 1px solid var(--rv-segmented-border, var(--rv-ah-border, transparent));
526
616
  border-radius: 10px;
527
617
  padding: 2px;
528
618
  box-shadow: none;
529
619
  }
530
620
 
531
- :where(.dark, [data-theme^='dark'], revo-grid[theme^='dark']) .rv-segmented-switch,
621
+ :where(.dark, [data-theme^='dark'], revo-grid[theme^='dark'])
622
+ .rv-segmented-switch,
532
623
  .rv-segmented-switch[data-theme^='dark'] {
533
624
  --rv-segmented-theme-bg: var(--rv-ui-surface-sunken);
534
625
  --rv-segmented-theme-border: var(--rv-ui-border);
@@ -554,14 +645,18 @@ label.rv-switch-label {
554
645
  border-radius: 7px;
555
646
  padding: 0 14px;
556
647
  background: transparent;
557
- color: var(--rv-segmented-item-color, var(--rv-ah-text-2, var(--rv-segmented-theme-item-color, var(--rv-ui-text))));
648
+ color: var(
649
+ --rv-segmented-item-color,
650
+ var(--rv-ah-text-2, var(--rv-segmented-theme-item-color, var(--rv-ui-text)))
651
+ );
558
652
  cursor: pointer;
559
653
  font: inherit;
560
654
  font-size: 13px;
561
655
  font-weight: 400;
562
656
  line-height: 1;
563
657
  transition:
564
- background-color var(--rv-ui-motion-fast, 120ms) var(--rv-ui-motion-ease, ease),
658
+ background-color var(--rv-ui-motion-fast, 120ms)
659
+ var(--rv-ui-motion-ease, ease),
565
660
  color var(--rv-ui-motion-fast, 120ms) var(--rv-ui-motion-ease, ease),
566
661
  opacity var(--rv-ui-motion-fast, 120ms) var(--rv-ui-motion-ease, ease);
567
662
  }
@@ -580,21 +675,50 @@ label.rv-switch-label {
580
675
  }
581
676
 
582
677
  .rv-segmented-switch-item:where(:not(.on)):hover:not(:disabled) {
583
- background: var(--rv-segmented-item-hover-bg, var(--rv-segmented-theme-item-hover-bg, var(--rv-ui-surface-hover)));
584
- color: var(--rv-segmented-item-hover-color, var(--rv-ah-text-2, var(--rv-segmented-theme-item-hover-color, var(--rv-ui-text))));
678
+ background: var(
679
+ --rv-segmented-item-hover-bg,
680
+ var(--rv-segmented-theme-item-hover-bg, var(--rv-ui-surface-hover))
681
+ );
682
+ color: var(
683
+ --rv-segmented-item-hover-color,
684
+ var(
685
+ --rv-ah-text-2,
686
+ var(--rv-segmented-theme-item-hover-color, var(--rv-ui-text))
687
+ )
688
+ );
585
689
  }
586
690
 
587
691
  .rv-segmented-switch-item.on {
588
- background: var(--rv-segmented-active-bg, var(--rv-ah-bg, var(--rv-segmented-theme-active-bg, var(--rv-ui-surface))));
589
- color: var(--rv-segmented-active-color, var(--rv-ui-selected-accent-fg, var(--rv-ui-accent-text)));
692
+ background: var(
693
+ --rv-segmented-active-bg,
694
+ var(--rv-ah-bg, var(--rv-segmented-theme-active-bg, var(--rv-ui-surface)))
695
+ );
696
+ color: var(
697
+ --rv-segmented-active-color,
698
+ var(--rv-ui-selected-accent-fg, var(--rv-ui-accent-text))
699
+ );
590
700
  font-weight: 500;
591
- border-color: var(--rv-segmented-active-border, var(--rv-segmented-theme-active-border, var(--rv-ui-border)));
701
+ border-color: var(
702
+ --rv-segmented-active-border,
703
+ var(--rv-segmented-theme-active-border, var(--rv-ui-border))
704
+ );
592
705
  box-shadow: none;
593
706
  }
594
707
 
595
708
  .rv-segmented-switch-item:focus-visible {
596
- outline: 2px solid var(--rv-segmented-focus-outline, var(--rv-ah-bg, var(--rv-segmented-theme-focus-outline, var(--rv-ui-text-muted))));
597
- box-shadow: 0 0 0 4px var(--rv-segmented-focus-ring, color-mix(in srgb, var(--rv-ui-accent) 28%, transparent));
709
+ outline: 2px solid
710
+ var(
711
+ --rv-segmented-focus-outline,
712
+ var(
713
+ --rv-ah-bg,
714
+ var(--rv-segmented-theme-focus-outline, var(--rv-ui-text-muted))
715
+ )
716
+ );
717
+ box-shadow: 0 0 0 4px
718
+ var(
719
+ --rv-segmented-focus-ring,
720
+ color-mix(in srgb, var(--rv-ui-accent) 28%, transparent)
721
+ );
598
722
  }
599
723
 
600
724
  .rv-segmented-switch-item:disabled {
@@ -608,14 +732,27 @@ label.rv-switch-label {
608
732
  font-size: 9.5px;
609
733
  padding: 1px 5px;
610
734
  border-radius: 4px;
611
- background: var(--rv-segmented-count-bg, var(--rv-ah-bg-up, var(--rv-ui-surface-sunken)));
612
- color: var(--rv-segmented-count-color, var(--rv-ah-text-2, var(--rv-ui-text-muted)));
613
- border: 1px solid var(--rv-segmented-count-border, var(--rv-ah-border, var(--rv-ui-border)));
735
+ background: var(
736
+ --rv-segmented-count-bg,
737
+ var(--rv-ah-bg-up, var(--rv-ui-surface-sunken))
738
+ );
739
+ color: var(
740
+ --rv-segmented-count-color,
741
+ var(--rv-ah-text-2, var(--rv-ui-text-muted))
742
+ );
743
+ border: 1px solid
744
+ var(--rv-segmented-count-border, var(--rv-ah-border, var(--rv-ui-border)));
614
745
  }
615
746
 
616
747
  .rv-segmented-switch-item.on .rv-segmented-switch-count {
617
- background: var(--rv-segmented-active-count-bg, var(--rv-ah-bg-hover, var(--rv-ui-surface-sunken)));
618
- color: var(--rv-segmented-active-count-color, var(--rv-ah-text-2, var(--rv-ui-text-muted)));
748
+ background: var(
749
+ --rv-segmented-active-count-bg,
750
+ var(--rv-ah-bg-hover, var(--rv-ui-surface-sunken))
751
+ );
752
+ color: var(
753
+ --rv-segmented-active-count-color,
754
+ var(--rv-ah-text-2, var(--rv-ui-text-muted))
755
+ );
619
756
  }
620
757
 
621
758
  .rv-search-input {
@@ -631,7 +768,10 @@ label.rv-switch-label {
631
768
  align-items: center;
632
769
  justify-content: center;
633
770
  transform: translateY(-50%);
634
- color: var(--rv-search-input-icon-color, var(--rv-ah-text-2, var(--rv-ui-text-muted)));
771
+ color: var(
772
+ --rv-search-input-icon-color,
773
+ var(--rv-ah-text-2, var(--rv-ui-text-muted))
774
+ );
635
775
  pointer-events: none;
636
776
  }
637
777
 
@@ -641,8 +781,12 @@ label.rv-switch-label {
641
781
  height: var(--rv-search-input-height, var(--rv-control-height, 32px));
642
782
  min-height: var(--rv-search-input-height, var(--rv-control-height, 32px));
643
783
  appearance: none;
644
- background: var(--rv-search-input-bg, var(--rv-ah-bg-input, var(--rv-ui-surface-sunken)));
645
- border: 1px solid var(--rv-search-input-border, var(--rv-ah-border, var(--rv-ui-border)));
784
+ background: var(
785
+ --rv-search-input-bg,
786
+ var(--rv-ah-bg-input, var(--rv-ui-surface-sunken))
787
+ );
788
+ border: 1px solid
789
+ var(--rv-search-input-border, var(--rv-ah-border, var(--rv-ui-border)));
646
790
  border-radius: 8px;
647
791
  padding-block: 0;
648
792
  padding-inline: 32px 38px;
@@ -652,7 +796,8 @@ label.rv-switch-label {
652
796
  font-size: var(--rv-control-font-size, 0.875rem);
653
797
  transition:
654
798
  border-color var(--rv-ui-motion-fast, 120ms) var(--rv-ui-motion-ease, ease),
655
- background-color var(--rv-ui-motion-fast, 120ms) var(--rv-ui-motion-ease, ease);
799
+ background-color var(--rv-ui-motion-fast, 120ms)
800
+ var(--rv-ui-motion-ease, ease);
656
801
  }
657
802
 
658
803
  .rv-search-input > input[type='search']::-webkit-search-cancel-button {
@@ -660,13 +805,22 @@ label.rv-switch-label {
660
805
  }
661
806
 
662
807
  .rv-search-input > input:is([type='search'], [type='text'])::placeholder {
663
- color: var(--rv-search-input-placeholder-color, var(--rv-ah-text-2, var(--rv-ui-text-muted)));
808
+ color: var(
809
+ --rv-search-input-placeholder-color,
810
+ var(--rv-ah-text-2, var(--rv-ui-text-muted))
811
+ );
664
812
  }
665
813
 
666
814
  .rv-search-input > input:is([type='search'], [type='text']):focus {
667
815
  transition: none;
668
- border-color: var(--rv-search-input-focus-border, var(--rv-ah-border-strong, var(--rv-ui-border-strong)));
669
- background: var(--rv-search-input-focus-bg, var(--rv-ah-bg, var(--rv-ui-surface)));
816
+ border-color: var(
817
+ --rv-search-input-focus-border,
818
+ var(--rv-ah-border-strong, var(--rv-ui-border-strong))
819
+ );
820
+ background: var(
821
+ --rv-search-input-focus-bg,
822
+ var(--rv-ah-bg, var(--rv-ui-surface))
823
+ );
670
824
  }
671
825
 
672
826
  .rv-search-input--no-icon > input:is([type='search'], [type='text']) {
@@ -683,9 +837,19 @@ label.rv-switch-label {
683
837
  top: 50%;
684
838
  transform: translateY(-50%);
685
839
  font-size: 10px;
686
- color: var(--rv-search-input-shortcut-color, var(--rv-ah-text-2, var(--rv-ui-text-muted)));
687
- background: var(--rv-search-input-shortcut-bg, var(--rv-ah-canvas, var(--rv-ui-surface-elevated)));
688
- border: 1px solid var(--rv-search-input-shortcut-border, var(--rv-ah-border, var(--rv-ui-border)));
840
+ color: var(
841
+ --rv-search-input-shortcut-color,
842
+ var(--rv-ah-text-2, var(--rv-ui-text-muted))
843
+ );
844
+ background: var(
845
+ --rv-search-input-shortcut-bg,
846
+ var(--rv-ah-canvas, var(--rv-ui-surface-elevated))
847
+ );
848
+ border: 1px solid
849
+ var(
850
+ --rv-search-input-shortcut-border,
851
+ var(--rv-ah-border, var(--rv-ui-border))
852
+ );
689
853
  padding: 1px 5px;
690
854
  border-radius: 3px;
691
855
  }
@@ -776,7 +940,9 @@ button.rv-badge--inline {
776
940
  color: var(--rv-ui-selected-accent-fg, var(--rv-ui-accent-text));
777
941
  }
778
942
 
779
- .rv-badge--rounded { border-radius: 4px; }
943
+ .rv-badge--rounded {
944
+ border-radius: 4px;
945
+ }
780
946
 
781
947
  .rv-btn:disabled .rv-badge,
782
948
  .rv-btn[disabled] .rv-badge {
@@ -802,17 +968,47 @@ button.rv-badge--inline {
802
968
  }
803
969
 
804
970
  // Square icon controls and their native hover/focus tooltips share one owner.
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; }
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); }
807
-
971
+ .rv-btn-icon {
972
+ box-sizing: border-box;
973
+ flex: none;
974
+ width: var(--rv-icon-button-size, 32px);
975
+ height: var(--rv-icon-button-size, 32px);
976
+ padding: 6px;
977
+ }
978
+ .rv-btn-icon[aria-pressed='true'],
979
+ .rv-btn-icon[data-active='true'] {
980
+ background: var(--rv-ui-selected-bg);
981
+ color: var(--rv-ui-selected-fg);
982
+ }
808
983
 
809
- .rv-btn-icon { position: relative; overflow: visible; }
810
- .rv-btn-icon .rv-badge { position: absolute; inset-block-start: -5px; inset-inline-end: -6px; min-width: 16px; height: 16px; padding: 0 4px; font-size: 10px; line-height: 16px; pointer-events: none; }
984
+ .rv-btn-icon {
985
+ position: relative;
986
+ overflow: visible;
987
+ }
988
+ .rv-btn-icon .rv-badge {
989
+ position: absolute;
990
+ inset-block-start: -5px;
991
+ inset-inline-end: -6px;
992
+ min-width: 16px;
993
+ height: 16px;
994
+ padding: 0 4px;
995
+ font-size: 10px;
996
+ line-height: 16px;
997
+ pointer-events: none;
998
+ }
811
999
  // Reserve the icon badges' overhang so toolbars can center controls without clipping them.
812
- .rv-history-controls { display: flex; align-items: center; gap: 12px; padding-block: 5px; padding-inline-end: 6px; }
1000
+ .rv-history-controls {
1001
+ display: flex;
1002
+ align-items: center;
1003
+ gap: 12px;
1004
+ padding-block: 5px;
1005
+ padding-inline-end: 6px;
1006
+ }
813
1007
 
814
1008
  // Native disabled buttons still expose their explanation on pointer hover.
815
- .rv-btn-icon:disabled { pointer-events: auto; }
1009
+ .rv-btn-icon:disabled {
1010
+ pointer-events: auto;
1011
+ }
816
1012
 
817
1013
  // Contained tool strips share geometry across native Charts and Preact hosts.
818
1014
  .rv-toolbar--surface {
@@ -836,8 +1032,9 @@ button.rv-badge--inline {
836
1032
  .rv-toolbar--surface > .rv-btn-icon[aria-pressed='true']:hover:not(:disabled) {
837
1033
  background: var(--rv-ui-selected-bg);
838
1034
  }
839
- .rv-svg-icon > svg[fill='none'] { fill: none; }
840
-
1035
+ .rv-svg-icon > svg[fill='none'] {
1036
+ fill: none;
1037
+ }
841
1038
 
842
1039
  .rv-choice-chip--composite {
843
1040
  position: relative;
@@ -845,13 +1042,26 @@ button.rv-badge--inline {
845
1042
  align-items: center;
846
1043
  gap: 4px;
847
1044
  cursor: default;
848
- .rv-choice-chip-label { min-width: 0; }
1045
+ .rv-choice-chip-label {
1046
+ min-width: 0;
1047
+ }
849
1048
  button.rv-choice-chip-label {
850
- appearance: none; border: 0; padding: 0; margin: 0;
851
- background: transparent; color: inherit; font: inherit; cursor: pointer;
852
- &:focus-visible { outline: 2px solid var(--rv-ui-accent); outline-offset: 2px; }
1049
+ appearance: none;
1050
+ border: 0;
1051
+ padding: 0;
1052
+ margin: 0;
1053
+ background: transparent;
1054
+ color: inherit;
1055
+ font: inherit;
1056
+ cursor: pointer;
1057
+ &:focus-visible {
1058
+ outline: 2px solid var(--rv-ui-accent);
1059
+ outline-offset: 2px;
1060
+ }
1061
+ }
1062
+ &[aria-disabled='true'] {
1063
+ opacity: 0.5;
853
1064
  }
854
- &[aria-disabled='true'] { opacity: .5; }
855
1065
  }
856
1066
  button.rv-choice-chip-info {
857
1067
  box-sizing: border-box;
@@ -868,10 +1078,13 @@ button.rv-choice-chip-info {
868
1078
  border-radius: 50%;
869
1079
  background: transparent;
870
1080
  color: var(--rv-ui-text-muted);
871
- font: 600 13px/1 system-ui, sans-serif;
1081
+ font:
1082
+ 600 13px/1 system-ui,
1083
+ sans-serif;
872
1084
  cursor: pointer;
873
1085
  transition:
874
- background-color var(--rv-ui-motion-fast, 120ms) var(--rv-ui-motion-ease, ease),
1086
+ background-color var(--rv-ui-motion-fast, 120ms)
1087
+ var(--rv-ui-motion-ease, ease),
875
1088
  color var(--rv-ui-motion-fast, 120ms) var(--rv-ui-motion-ease, ease);
876
1089
  }
877
1090
 
@@ -887,15 +1100,19 @@ button.rv-choice-chip-info:focus-visible,
887
1100
  outline-offset: 1px;
888
1101
  }
889
1102
 
890
-
891
-
892
- .rv-choice-chip[data-color='true']:is([aria-pressed='true'], [data-selected='true']) {
1103
+ .rv-choice-chip[data-color='true']:is(
1104
+ [aria-pressed='true'],
1105
+ [data-selected='true']
1106
+ ) {
893
1107
  border-color: transparent;
894
- background: color-mix(in srgb, var(--rv-choice-chip-color) 9%, var(--rv-ui-surface));
1108
+ background: color-mix(
1109
+ in srgb,
1110
+ var(--rv-choice-chip-color) 9%,
1111
+ var(--rv-ui-surface)
1112
+ );
895
1113
  color: var(--rv-ui-text);
896
1114
  }
897
1115
 
898
-
899
1116
  .rv-btn-tab {
900
1117
  @extend %rv-btn-base;
901
1118
  min-height: 40px;
@@ -917,7 +1134,8 @@ button.rv-choice-chip-info:focus-visible,
917
1134
  content: '';
918
1135
  }
919
1136
 
920
- &:hover:not(:disabled), &[aria-selected='true'] {
1137
+ &:hover:not(:disabled),
1138
+ &[aria-selected='true'] {
921
1139
  color: var(--rv-tab-accent, var(--rv-ui-accent-text));
922
1140
  }
923
1141
  &[aria-selected='true']::after {
@@ -943,31 +1161,63 @@ button.rv-choice-chip-info:focus-visible,
943
1161
  color: var(--rv-ui-accent-text);
944
1162
  font-weight: 400;
945
1163
  text-decoration: none;
946
- svg { width: 12px; height: 12px; fill: currentColor; }
947
- &:hover:not(:disabled) { background: transparent; text-decoration: underline; }
948
- &:focus-visible { outline: 2px solid var(--rv-ui-accent); outline-offset: 2px; box-shadow: none; }
1164
+ svg {
1165
+ width: 12px;
1166
+ height: 12px;
1167
+ fill: currentColor;
1168
+ }
1169
+ &:hover:not(:disabled) {
1170
+ background: transparent;
1171
+ text-decoration: underline;
1172
+ }
1173
+ &:focus-visible {
1174
+ outline: 2px solid var(--rv-ui-accent);
1175
+ outline-offset: 2px;
1176
+ box-shadow: none;
1177
+ }
949
1178
  }
950
1179
 
951
1180
  // Forced colors suppress box shadows; focus must remain a visible outline.
952
1181
  @media (forced-colors: active) {
953
- :is(.rv-btn, .rv-btn-solid, .rv-btn-primary, .rv-btn-ghost, .rv-btn-link,
954
- .rv-control, .rv-choice-chip, .rv-segmented-switch-item, .rv-rating-choice):focus-visible {
1182
+ :is(
1183
+ .rv-btn,
1184
+ .rv-btn-solid,
1185
+ .rv-btn-primary,
1186
+ .rv-btn-ghost,
1187
+ .rv-btn-link,
1188
+ .rv-control,
1189
+ .rv-choice-chip,
1190
+ .rv-segmented-switch-item,
1191
+ .rv-rating-choice
1192
+ ):focus-visible {
955
1193
  outline: 2px solid Highlight;
956
1194
  outline-offset: 2px;
957
1195
  }
958
1196
  }
959
1197
 
960
1198
  // Busy is unavailable for interaction but retains its enabled variant paint.
961
- .rv-btn.rv-btn-busy:disabled { pointer-events: auto; cursor: progress; }
962
- .rv-btn.rv-btn-busy:not(.rv-btn-busy-disabled):disabled { opacity: 1; }
1199
+ .rv-btn.rv-btn-busy:disabled {
1200
+ pointer-events: auto;
1201
+ cursor: progress;
1202
+ }
1203
+ .rv-btn.rv-btn-busy:not(.rv-btn-busy-disabled):disabled {
1204
+ opacity: 1;
1205
+ }
963
1206
  .rv-button-spinner {
964
1207
  @include loading.ring(1em, 2px);
965
1208
  flex: 0 0 auto;
966
1209
  border-color: color-mix(in srgb, currentColor 30%, transparent);
967
1210
  border-block-start-color: currentColor;
968
1211
  }
969
- .rv-btn-busy.rv-btn-icon > :not(.rv-button-spinner) { display: none; }
1212
+ .rv-btn-busy.rv-btn-icon > :not(.rv-button-spinner) {
1213
+ display: none;
1214
+ }
970
1215
 
971
1216
  // Applies uniformly to action variants, icon controls and navigation buttons.
972
- .rv-btn-rounded.rv-btn-rounded { border-radius: 9999px; }
973
- .rv-btn-rounded[aria-disabled='true'] { opacity: .5; pointer-events: none; }
1217
+ .rv-btn-rounded.rv-btn-rounded {
1218
+ border-radius: 9999px;
1219
+ }
1220
+ .rv-btn-rounded[aria-disabled='true'] {
1221
+ opacity: 0.5;
1222
+ pointer-events: none;
1223
+ }