@revolist/ui 4.0.4-rc → 4.0.4

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 (401) hide show
  1. package/MIGRATION.md +36 -0
  2. package/OWNERSHIP.md +36 -36
  3. package/README.md +65 -392
  4. package/_button.scss +6 -2
  5. package/_chunks/arrow-up-Cw8hW9vp.js +4 -0
  6. package/_chunks/calculator-CDWOuAcp.js +4 -0
  7. package/_chunks/{calendar-xpZ0v3xf.js → calendar-BQYQLu8Q.js} +23 -23
  8. package/_chunks/{cell-visuals-E-2oEKHg.js → cell-visuals-r6DOOhGh.js} +7 -7
  9. package/_chunks/chart-frame-GprenwEg.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-C5OxD0GV.js +126 -0
  13. package/_chunks/{color-palette-D8vyPfld.js → color-palette-7siNch__.js} +22 -24
  14. package/_chunks/color-picker-Cfc9eqZb.js +143 -0
  15. package/_chunks/{component-C_T2VN5u.js → component-C3k_8uIq.js} +290 -275
  16. package/_chunks/{component-metadata-BMOOmqx5.js → component-metadata-DlVkpW3h.js} +1 -9
  17. package/_chunks/configurator-actions-vRnI54mO.js +155 -0
  18. package/_chunks/configurator-field-icon-CmcM_sPs.js +53 -0
  19. package/_chunks/control-BRfF5DWQ.js +118 -0
  20. package/_chunks/{controller-hRBm_Lfz.js → controller-BbiQuRt-.js} +5 -5
  21. package/_chunks/controls-B3EgM_DS.js +650 -0
  22. package/_chunks/{date-control-DrVFX13g.js → date-control-87dcA5br.js} +5 -5
  23. package/_chunks/{date-time-qIhp5vaX.js → date-time-CfiFYodx.js} +332 -293
  24. package/_chunks/{delete-button-CW9vjLnk.js → delete-button-jneO24wa.js} +1 -1
  25. package/_chunks/dialog.parts-NqEEVc9P.js +131 -0
  26. package/_chunks/{duration-CL68Em0o.js → duration-BGZ_qJ99.js} +10 -10
  27. package/_chunks/{editor-commit-Bq3wSgvr.js → editor-commit-Dyo-FMgD.js} +1 -1
  28. package/_chunks/editor-popup-NNP9Fh9U.js +82 -0
  29. package/_chunks/field-configurator-DPulsY3l.js +288 -0
  30. package/_chunks/{field-context-D57PnBbH.js → field-context-C4_WrO2z.js} +1 -1
  31. package/_chunks/{framework-mount--RTLIqE-.js → framework-mount-D4I8HpVp.js} +2 -2
  32. package/_chunks/icon-toolbar-BAAdEvr9.js +134 -0
  33. package/_chunks/{icons-Ci5mADVc.js → icons-B4qN13Yj.js} +1 -1
  34. package/_chunks/{iso-B0YHBK7m.js → iso-CJQl2kmq.js} +1 -1
  35. package/_chunks/magnifying-glass-CvrTDSkB.js +4 -0
  36. package/_chunks/minus-BOAR3A1C.js +4 -0
  37. package/_chunks/{model-mPO2tG2f.js → model-CFrBgRHm.js} +3 -3
  38. package/_chunks/mount-C8CnIW9k.js +267 -0
  39. package/_chunks/{native.view-ByyZ1CT5.js → native-CJm3eq3-.js} +1 -1
  40. package/_chunks/native-control-um1L1wgZ.js +649 -0
  41. package/_chunks/{number-input-BKwA5FnM.js → number-input-CKiA4d1N.js} +9 -9
  42. package/_chunks/{picker-h1P5RUgp.js → picker-igNshTRC.js} +5 -5
  43. package/_chunks/plus-CbGRkIGl.js +4 -0
  44. package/_chunks/{popup-CT2uD3go.js → popup-DECYM9FI.js} +116 -105
  45. package/_chunks/{rating-choice-DZgmaic0.js → rating-choice-CepVfGUq.js} +2 -2
  46. package/_chunks/{render-m5eMMwFR.js → render-bTk3curw.js} +2 -2
  47. package/_chunks/{reorder-list-CSlqAGHw.js → reorder-list-B4w3aARt.js} +2 -2
  48. package/_chunks/request-trail-B1zVRPEf.js +762 -0
  49. package/_chunks/rich-text-Ci4d6dHn.js +842 -0
  50. package/_chunks/rotate-left-BF6G883o.js +4 -0
  51. package/_chunks/selection-list-tooltips-m00U3L6z.js +42 -0
  52. package/_chunks/title-tooltip-ncldbUwS.js +11 -0
  53. package/_chunks/tooltip-h-Z8yFBY.js +54 -0
  54. package/_chunks/tooltip-owner-BYho-vJl.js +19 -0
  55. package/_chunks/tooltip-session-CBtRMBPr.js +110 -0
  56. package/_chunks/tooltip-text-BN5WdGHn.js +12 -0
  57. package/_chunks/top-layer-popup-CKJ7VJOF.js +59 -0
  58. package/_dialog.scss +57 -22
  59. package/_form.scss +71 -21
  60. package/_legend.scss +25 -7
  61. package/_variables.scss +34 -32
  62. package/_view-switcher.scss +6 -0
  63. package/activity-message.d.ts +1 -1
  64. package/activity-message.js +1 -1
  65. package/ai/_chat.scss +35 -3
  66. package/ai/_style.scss +76 -16
  67. package/ai/chat.d.ts +3 -1
  68. package/ai/components.d.ts +16 -3
  69. package/ai/index.d.ts +1 -0
  70. package/ai/index.js +3 -3
  71. package/ai/mount.d.ts +30 -6
  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 +2 -0
  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 +28 -6
  84. package/assignee/index.js +6 -6
  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.js +1 -1
  90. package/badge.view.d.ts +8 -0
  91. package/brush-range/_brush-range.scss +55 -49
  92. package/brush-range/component.d.ts +1 -3
  93. package/brush-range/component.js +28 -28
  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 +2 -2
  98. package/buttons/remove-button.style.scss +1 -1
  99. package/buttons/svg-button.d.ts +1 -1
  100. package/buttons/svg-button.js +17 -17
  101. package/calendar/_calendar.scss +21 -25
  102. package/calendar/calendar.js +1 -1
  103. package/calendar/day.js +2 -2
  104. package/calendar/header.js +2 -3
  105. package/calendar/index.js +3 -3
  106. package/calendar/model.js +1 -1
  107. package/calendar/month-grid.js +2 -2
  108. package/calendar/translations.js +1 -1
  109. package/calendar/year-grid.js +2 -2
  110. package/cell-input.js +1 -1
  111. package/cell-input.scss +3 -7
  112. package/cell-visuals/badge.style.scss +6 -3
  113. package/cell-visuals/bar-chart.style.scss +2 -1
  114. package/cell-visuals/column-type.style.css +12 -0
  115. package/cell-visuals/index.js +1 -1
  116. package/cell-visuals/progress-line-value.renderer.style.scss +4 -2
  117. package/cell-visuals/progress-line.style.scss +1 -4
  118. package/cell-visuals/sparkline.style.scss +2 -1
  119. package/cell-visuals/timeline.style.css +4 -2
  120. package/checkbox/checkbox.scss +6 -24
  121. package/checkbox/index.js +1 -1
  122. package/choice-chips/index.d.ts +3 -1
  123. package/choice-chips/index.js +1 -1
  124. package/color-palette/built-in-palettes.js +1 -1
  125. package/color-palette/chart-palettes.js +1 -1
  126. package/color-palette/color-palette.js +1 -1
  127. package/color-palette/color-palette.style.scss +88 -25
  128. package/color-palette/color-picker.constants.js +1 -1
  129. package/color-palette/color-picker.js +2 -2
  130. package/color-palette/color-picker.style.scss +23 -10
  131. package/color-palette/common-palettes.d.ts +1 -1
  132. package/color-palette/common-palettes.js +2 -2
  133. package/color-palette/gantt-palettes.js +1 -1
  134. package/color-palette/native.d.ts +15 -2
  135. package/color-palette/palette.js +1 -1
  136. package/color-palette/pivot-palettes.js +1 -1
  137. package/color-palette/platform-palettes.js +1 -1
  138. package/color-palette/pro-palettes.js +1 -1
  139. package/color-palette/scheduler-palettes.js +1 -1
  140. package/component-catalog.d.ts +9 -7
  141. package/configurator-actions.d.ts +67 -0
  142. package/configurator-actions.js +1 -0
  143. package/configurator-aggregation-list.d.ts +14 -0
  144. package/configurator-aggregation-list.js +63 -0
  145. package/configurator-drop-zone.d.ts +39 -0
  146. package/configurator-drop-zone.js +66 -0
  147. package/configurator-field-icon.d.ts +10 -0
  148. package/configurator-field-icon.js +1 -0
  149. package/configurator-focus.d.ts +4 -0
  150. package/configurator-focus.js +39 -0
  151. package/configurator-sections.d.ts +42 -0
  152. package/configurator-sections.js +71 -0
  153. package/control-attributes.js +1 -1
  154. package/control-presentation.d.ts +8 -2
  155. package/control-presentation.js +25 -20
  156. package/controls.d.ts +12 -2
  157. package/controls.js +4 -3
  158. package/core/anchored-popover.js +1 -1
  159. package/core/control-id.js +1 -1
  160. package/core/editor-popup-position.d.ts +6 -2
  161. package/core/editor-popup.d.ts +4 -0
  162. package/core/editor-popup.js +1 -1
  163. package/core/motion.js +1 -1
  164. package/core/popover-controller.d.ts +35 -0
  165. package/core/popover-controller.js +102 -0
  166. package/core/popup-ownership.d.ts +2 -0
  167. package/core/selection-list-tooltips.d.ts +2 -0
  168. package/core/title-tooltip.d.ts +2 -0
  169. package/core/tooltip-session.d.ts +29 -0
  170. package/core/tooltip-surface.d.ts +13 -0
  171. package/core/tooltip-text.d.ts +6 -0
  172. package/core/tooltip.d.ts +35 -0
  173. package/core/top-layer-popup.d.ts +4 -0
  174. package/core/top-layer-popup.js +1 -23
  175. package/date-time/attach.d.ts +1 -1
  176. package/date-time/date-control.d.ts +1 -1
  177. package/date-time/field.d.ts +4 -2
  178. package/date-time/index.js +1 -1
  179. package/date-time/style.scss +239 -36
  180. package/date-time/time-selection.d.ts +3 -1
  181. package/date-time/types.d.ts +5 -1
  182. package/dialog/dialog-action-footer.d.ts +17 -2
  183. package/dialog/dialog.dom.d.ts +15 -2
  184. package/dialog/dialog.dom.js +9 -9
  185. package/dialog/dialog.drag.js +1 -1
  186. package/dialog/dialog.parts.d.ts +1 -1
  187. package/dialog/dialog.parts.js +1 -1
  188. package/dialog/dialog.preact.js +1 -1
  189. package/distribution-chart/_distribution-chart.scss +113 -77
  190. package/distribution-chart/area-chart.js +2 -2
  191. package/distribution-chart/bar-chart.js +2 -2
  192. package/distribution-chart/chart-frame.d.ts +1 -1
  193. package/distribution-chart/index.d.ts +1 -1
  194. package/distribution-chart/index.js +1 -1
  195. package/distribution-chart/line-chart.js +2 -2
  196. package/dropdown/content.js +1 -1
  197. package/dropdown/control.js +1 -1
  198. package/dropdown/dropdown.service.js +1 -1
  199. package/dropdown/dropdown.types.d.ts +1 -1
  200. package/dropdown/editor-dropdown.style.scss +19 -9
  201. package/dropdown/index.js +2 -2
  202. package/dropdown/lookup-field.d.ts +5 -0
  203. package/dropdown/lookup-field.js +4 -3
  204. package/dropdown/popup.d.ts +2 -2
  205. package/dropdown/popup.js +1 -1
  206. package/duration/index.js +1 -1
  207. package/editor-actions.js +2 -2
  208. package/editor-layout/index.d.ts +4 -4
  209. package/editor-layout/index.js +40 -35
  210. package/editor-layout/style.scss +82 -18
  211. package/favicon.svg +9 -0
  212. package/field-configurator.d.ts +39 -1
  213. package/field-configurator.js +4 -170
  214. package/field-expansion.d.ts +9 -0
  215. package/field-reorder.hook.js +1 -1
  216. package/field-reorder.js +1 -1
  217. package/filter/filters/slider/_single-slider.scss +57 -38
  218. package/filter/filters/slider/_slider.scss +41 -33
  219. package/filter/filters/slider/component.js +1 -1
  220. package/filter/filters/slider/control.js +3 -1
  221. package/filter/filters/slider/inputs.js +1 -1
  222. package/filter/filters/slider/logic.js +1 -1
  223. package/filter/filters/slider/preact.js +1 -1
  224. package/filter/filters/slider/runtime.js +50 -23
  225. package/filter/filters/slider/single.js +2 -2
  226. package/filter-badge.js +2 -2
  227. package/filter-controls.d.ts +0 -1
  228. package/filter-controls.js +6 -7
  229. package/form-controls/index.d.ts +10 -2
  230. package/form-controls/index.js +7 -7
  231. package/form-controls/presentation.d.ts +1 -1
  232. package/form-controls/presentation.js +13 -13
  233. package/formatting/index.d.ts +1 -1
  234. package/formatting/index.js +26 -25
  235. package/formatting/styles.scss +14 -57
  236. package/framework.js +228 -225
  237. package/history-controls.js +27 -1
  238. package/html-controls.js +1 -1
  239. package/icon-toolbar.d.ts +62 -0
  240. package/icon-toolbar.js +1 -0
  241. package/icons/icon.d.ts +1 -1
  242. package/icons/icon.js +1 -1
  243. package/legend.d.ts +1 -1
  244. package/legend.js +1 -1
  245. package/masked-input/index.js +4 -4
  246. package/native-control.d.ts +1 -2
  247. package/native-control.js +1 -1
  248. package/native-controls.d.ts +54 -2
  249. package/native-styles.css +1 -1
  250. package/native-styles.scss +6 -2
  251. package/native.d.ts +3 -3
  252. package/native.js +48 -45
  253. package/number-input/index.d.ts +1 -1
  254. package/number-input/index.js +1 -1
  255. package/package.json +84 -1
  256. package/pagination.js +12 -12
  257. package/pdf-viewer/controller.js +1 -1
  258. package/pdf-viewer/header.d.ts +1 -1
  259. package/pdf-viewer/index.d.ts +2 -2
  260. package/pdf-viewer/index.js +3 -3
  261. package/pdf-viewer/search-bar.d.ts +1 -1
  262. package/pdf-viewer/status.d.ts +1 -1
  263. package/pdf-viewer/style.scss +203 -42
  264. package/pickers.d.ts +5 -1
  265. package/preact-mount.js +1 -1
  266. package/preact.d.ts +13 -10
  267. package/preact.js +109 -64
  268. package/progress/_bar.scss +9 -3
  269. package/progress/_circular.scss +2 -1
  270. package/progress/bar.js +1 -1
  271. package/progress/circular.js +1 -1
  272. package/progress/range.js +1 -1
  273. package/rating-choice.js +1 -1
  274. package/react-adapter.d.ts +4 -2
  275. package/react-control.d.ts +2 -0
  276. package/react-control.js +3 -3
  277. package/react.d.ts +7 -8
  278. package/react.js +69 -68
  279. package/reorder-list.d.ts +1 -1
  280. package/reorder-list.js +1 -1
  281. package/reorder-list.scss +59 -17
  282. package/resource-picker/resource-picker-avatar.js +1 -1
  283. package/resource-picker/resource-picker-option.js +1 -1
  284. package/resource-picker/resource-picker-popup.js +2 -2
  285. package/resource-picker/resource-picker.js +75 -73
  286. package/resource-picker/resource-picker.scss +62 -34
  287. package/resource-picker/resource-picker.utils.js +1 -1
  288. package/rich-text/engine.d.ts +1 -0
  289. package/rich-text/format-html.d.ts +2 -0
  290. package/rich-text/index.d.ts +4 -0
  291. package/rich-text/index.js +1 -1
  292. package/rich-text/model.d.ts +2 -0
  293. package/rich-text/style.scss +293 -44
  294. package/rich-text/syntax.d.ts +5 -0
  295. package/rich-text/toolbar.d.ts +1 -1
  296. package/rich-text/translations.d.ts +2 -0
  297. package/robots.txt +4 -0
  298. package/search-input/index.js +2 -2
  299. package/search-input/native.d.ts +21 -2
  300. package/segmented-switch/index.js +1 -1
  301. package/select.d.ts +3 -1
  302. package/select.js +1 -1
  303. package/selection-list.d.ts +1 -0
  304. package/selection-list.js +3 -1
  305. package/status-feedback/badge.js +2 -2
  306. package/status-feedback/exit-snapshot.js +5 -5
  307. package/status-feedback/header.js +2 -2
  308. package/status-feedback/icons.js +1 -1
  309. package/status-feedback/index.js +1 -1
  310. package/status-feedback/item.js +2 -2
  311. package/status-feedback/motion.js +1 -1
  312. package/status-feedback/placement.js +1 -1
  313. package/status-feedback/popover.js +5 -5
  314. package/status-feedback/render.js +1 -1
  315. package/status-feedback/status-feedback.scss +124 -35
  316. package/styles/_activity-message.scss +24 -7
  317. package/styles/_alert.scss +78 -17
  318. package/styles/_cell-editor-frame.scss +11 -0
  319. package/styles/_compositions.scss +400 -80
  320. package/styles/_control.scss +30 -8
  321. package/styles/_disclosure.scss +15 -5
  322. package/styles/_editor-counter.scss +16 -6
  323. package/styles/_editor-slider.scss +8 -4
  324. package/styles/_field-configurator.scss +321 -23
  325. package/styles/_fields-grid.scss +49 -0
  326. package/styles/_filter-controls.scss +10 -2
  327. package/styles/_icon-action.scss +48 -15
  328. package/styles/_loading.scss +12 -3
  329. package/styles/_motion.scss +32 -9
  330. package/styles/_palette.scss +0 -24
  331. package/styles/_primitives.scss +369 -110
  332. package/styles/_theme.scss +130 -86
  333. package/styles/_thresholds.scss +28 -25
  334. package/styles/_time-grid.scss +8 -3
  335. package/styles/_tokens.scss +6 -1
  336. package/styles/color-roles.js +1 -1
  337. package/styles/configurator-actions.scss +241 -0
  338. package/styles/pagination.css +213 -0
  339. package/styles/{legacy-rating.css → rating.css} +8 -3
  340. package/styles.css +1 -1
  341. package/styles.scss +3 -5
  342. package/surfaces.d.ts +38 -2
  343. package/surfaces.js +37 -134
  344. package/svelte/UiComponent.svelte +44 -11
  345. package/svelte-control.js +1 -1
  346. package/svelte.d.ts +1 -1
  347. package/svelte.js +5 -5
  348. package/switch/index.js +16 -15
  349. package/time-grid.d.ts +0 -1
  350. package/time-grid.js +39 -38
  351. package/timeline-track/_style.scss +96 -24
  352. package/timeline-track/index.js +3 -3
  353. package/timeline-track/model.js +1 -1
  354. package/ui.css +1 -1
  355. package/view-switcher.d.ts +23 -0
  356. package/vue-badge.js +1 -1
  357. package/vue-control.js +1 -1
  358. package/vue-segmented-switch.js +1 -1
  359. package/vue.d.ts +29 -32
  360. package/vue.js +118 -123
  361. package/_chunks/chart-frame-Cmc7xU1i.js +0 -130
  362. package/_chunks/choice-chips-CHQTUdLs.js +0 -110
  363. package/_chunks/color-picker-CudqPYZo.js +0 -138
  364. package/_chunks/control-AHKXD5Eu.js +0 -93
  365. package/_chunks/control-tooltip-uscKfAnV.js +0 -100
  366. package/_chunks/controls-DsNi8V8I.js +0 -630
  367. package/_chunks/dialog.parts-CKGkC5zP.js +0 -134
  368. package/_chunks/editor-popup-WDdtVDNA.js +0 -81
  369. package/_chunks/history-controls-B3u3INEK.js +0 -27
  370. package/_chunks/mount-DQ1cpppK.js +0 -257
  371. package/_chunks/native-control-C_yok8_-.js +0 -605
  372. package/_chunks/request-trail-DSlFix6i.js +0 -618
  373. package/_chunks/rich-text-CH7gIqOS.js +0 -636
  374. package/_shared/data-query/binding.d.ts +0 -30
  375. package/_shared/data-query/blocks.d.ts +0 -30
  376. package/_shared/data-query/commands.d.ts +0 -47
  377. package/_shared/data-query/contracts.d.ts +0 -106
  378. package/_shared/data-query/cursor-reader.d.ts +0 -25
  379. package/_shared/data-query/direct-binding.d.ts +0 -3
  380. package/_shared/data-query/index.d.ts +0 -23
  381. package/_shared/data-query/infinite-binding.d.ts +0 -18
  382. package/_shared/data-query/keys.d.ts +0 -9
  383. package/_shared/data-query/limiter.d.ts +0 -12
  384. package/_shared/data-query/load-options.d.ts +0 -25
  385. package/_shared/data-query/materialize.d.ts +0 -2
  386. package/_shared/data-query/policy.d.ts +0 -14
  387. package/_shared/data-query/provider-queries.d.ts +0 -22
  388. package/_shared/data-query/reader.d.ts +0 -23
  389. package/_shared/data-query/remote-load.d.ts +0 -7
  390. package/_shared/data-query/source.d.ts +0 -40
  391. package/avatar/index.view.d.ts +0 -25
  392. package/color-palette/native.view.d.ts +0 -15
  393. package/control-presentation.view.d.ts +0 -8
  394. package/dialog/dialog-action-footer.view.d.ts +0 -20
  395. package/dialog/dialog.dom.view.d.ts +0 -15
  396. package/form-controls/index.view.d.ts +0 -10
  397. package/formatting/control-tooltip.d.ts +0 -27
  398. package/native-controls.view.d.ts +0 -54
  399. package/search-input/native.view.d.ts +0 -21
  400. package/styles/legacy-pagination.css +0 -112
  401. package/surfaces.view.d.ts +0 -63
@@ -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,25 +42,46 @@
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
 
69
+ .rv-btn[hidden]:not([hidden='until-found']) {
70
+ display: none;
71
+ }
72
+
55
73
  /* Explicit filled neutral variant (use when outline is not desired). */
56
74
  .rv-btn-solid {
57
75
  @extend %rv-btn-base;
58
76
  background: var(--rv-ui-btn-bg);
59
77
  color: var(--rv-ui-btn-fg);
60
78
 
61
- &:hover { background: var(--rv-ui-btn-bg-hover); }
62
- &: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
+ }
63
85
  }
64
86
 
65
87
  .rv-btn-primary {
@@ -67,8 +89,12 @@
67
89
  background: var(--rv-ui-accent);
68
90
  color: var(--rv-ui-accent-fg);
69
91
 
70
- &:hover { background: var(--rv-ui-accent-hover); }
71
- &: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
+ }
72
98
  }
73
99
 
74
100
  .rv-btn-danger,
@@ -91,7 +117,9 @@
91
117
  color: var(--rv-ui-btn-danger-fg);
92
118
 
93
119
  &:hover,
94
- &:active { background: var(--rv-ui-btn-danger-bg-hover); }
120
+ &:active {
121
+ background: var(--rv-ui-btn-danger-bg-hover);
122
+ }
95
123
  }
96
124
 
97
125
  .rv-btn-secondary {
@@ -99,8 +127,12 @@
99
127
  background: var(--rv-ui-btn-secondary-bg);
100
128
  color: var(--rv-ui-btn-secondary-fg);
101
129
 
102
- &:hover { background: var(--rv-ui-btn-secondary-bg-hover); }
103
- &: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
+ }
104
136
  }
105
137
 
106
138
  .rv-btn-ghost {
@@ -108,8 +140,12 @@
108
140
  background: transparent;
109
141
  color: inherit;
110
142
 
111
- &:hover { background: var(--rv-ui-btn-ghost-hover-bg); }
112
- &: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
+ }
113
149
  }
114
150
 
115
151
  /* ─── Toggle switch ───────────────────────────────────────────────────────── */
@@ -163,8 +199,12 @@ label.rv-switch-label {
163
199
  overflow: hidden;
164
200
  clip: rect(0 0 0 0);
165
201
 
166
- &:checked + .rv-switch-track { background: var(--rv-ui-accent); }
167
- &: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
+ }
168
208
  &:focus-visible + .rv-switch-track {
169
209
  outline: 2px solid var(--rv-ui-accent);
170
210
  outline-offset: 3px;
@@ -182,7 +222,8 @@ label.rv-switch-label {
182
222
  box-sizing: border-box;
183
223
  border-radius: 999px;
184
224
  background: var(--rv-ui-switch-track-off);
185
- 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);
186
227
  }
187
228
 
188
229
  .rv-switch-thumb {
@@ -193,7 +234,8 @@ label.rv-switch-label {
193
234
  border-radius: 50%;
194
235
  background: var(--rv-ui-switch-thumb);
195
236
  box-shadow: 0 1px 3px var(--rv-ui-shadow);
196
- 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);
197
239
  }
198
240
 
199
241
  .rv-switch[aria-checked='true'] .rv-switch-track {
@@ -245,6 +287,14 @@ label.rv-switch-label {
245
287
  .rv-btn-group > .rv-btn:focus-visible {
246
288
  z-index: 1;
247
289
  }
290
+ .rv-btn-group > .rv-btn-group-item:first-child > span {
291
+ border-start-start-radius: calc(var(--rv-ui-radius) - 1px);
292
+ border-end-start-radius: calc(var(--rv-ui-radius) - 1px);
293
+ }
294
+ .rv-btn-group > .rv-btn-group-item:last-child > span {
295
+ border-start-end-radius: calc(var(--rv-ui-radius) - 1px);
296
+ border-end-end-radius: calc(var(--rv-ui-radius) - 1px);
297
+ }
248
298
 
249
299
  .rv-btn-group-item {
250
300
  position: relative;
@@ -270,7 +320,10 @@ label.rv-switch-label {
270
320
  cursor: pointer;
271
321
  user-select: none;
272
322
  color: inherit;
273
- 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);
274
327
  }
275
328
 
276
329
  & + & span {
@@ -301,7 +354,10 @@ label.rv-switch-label {
301
354
  line-height: 1;
302
355
  opacity: 0.5;
303
356
  padding: 0 2px;
304
- 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);
305
361
 
306
362
  &:hover:not(:disabled) {
307
363
  opacity: 1;
@@ -333,17 +389,26 @@ label.rv-switch-label {
333
389
  cursor: pointer;
334
390
  white-space: nowrap;
335
391
  line-height: 1.4;
336
- 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);
337
394
 
338
- &:hover { background: var(--rv-ui-btn-secondary-bg-hover); }
339
- &:active { opacity: 0.75; }
340
- &: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
+ }
341
406
  }
342
407
 
343
408
  /* ─── Small toggle switch (.rv-switch-sm) ─────────────────────────────────── */
344
409
  /*
345
410
  * 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.
411
+ * Supports both the shared button component and the native input adapters.
347
412
  *
348
413
  * <label class="rv-switch-label rv-switch-sm">
349
414
  * <input class="rv-switch-input" type="checkbox">
@@ -374,7 +439,9 @@ label.rv-switch-label {
374
439
 
375
440
  @media (prefers-reduced-motion: reduce) {
376
441
  .rv-switch-track,
377
- .rv-switch-thumb { transition: none; }
442
+ .rv-switch-thumb {
443
+ transition: none;
444
+ }
378
445
  }
379
446
 
380
447
  /* ─── Compact choice chips ───────────────────────────────────────────────── */
@@ -385,6 +452,37 @@ label.rv-switch-label {
385
452
  gap: 6px;
386
453
  }
387
454
 
455
+ .rv-choice-chips--scrollable {
456
+ display: flex;
457
+ flex-wrap: nowrap;
458
+ min-width: 0;
459
+ max-width: 100%;
460
+ overflow-x: auto;
461
+ scrollbar-width: none;
462
+ padding-block: 3px;
463
+ --rv-choice-chips-fade-left: 0px;
464
+ --rv-choice-chips-fade-right: 0px;
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
+ }
484
+ }
485
+
388
486
  .rv-choice-chip {
389
487
  appearance: none;
390
488
  min-height: 29px;
@@ -400,14 +498,18 @@ label.rv-switch-label {
400
498
  line-height: 1;
401
499
  white-space: nowrap;
402
500
  transition:
403
- 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),
404
503
  border-color var(--rv-ui-motion-fast, 120ms) var(--rv-ui-motion-ease, ease),
405
504
  color var(--rv-ui-motion-fast, 120ms) var(--rv-ui-motion-ease, ease),
406
505
  opacity var(--rv-ui-motion-fast, 120ms) var(--rv-ui-motion-ease, ease);
407
506
 
408
- &:hover:not(:disabled) { background: var(--rv-ui-surface-hover); }
507
+ &:hover:not(:disabled) {
508
+ background: var(--rv-ui-surface-hover);
509
+ }
409
510
 
410
- &[aria-pressed='true'], &[data-selected='true'] {
511
+ &[aria-pressed='true'],
512
+ &[data-selected='true'] {
411
513
  border-color: transparent;
412
514
  background: var(--rv-ui-choice-chip-selected-bg, var(--rv-ui-selected-bg));
413
515
  color: var(--rv-ui-selected-fg);
@@ -429,7 +531,8 @@ label.rv-switch-label {
429
531
  border-color: var(--rv-ui-border);
430
532
  background: var(--rv-ui-surface);
431
533
 
432
- &[aria-pressed='true'], &[data-selected='true'] {
534
+ &[aria-pressed='true'],
535
+ &[data-selected='true'] {
433
536
  border-color: transparent;
434
537
  background: var(--rv-ui-choice-chip-selected-bg, var(--rv-ui-selected-bg));
435
538
  }
@@ -472,8 +575,8 @@ label.rv-switch-label {
472
575
  line-height: 1;
473
576
  cursor: pointer;
474
577
  padding: 0;
475
- transition:
476
- 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);
477
580
 
478
581
  &:hover {
479
582
  background: var(--rv-ui-btn-ghost-hover-bg);
@@ -484,24 +587,39 @@ label.rv-switch-label {
484
587
 
485
588
  .rv-segmented-switch,
486
589
  .rv-value-selection-editor {
487
- --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
+ );
488
595
  }
489
596
 
490
597
  .rv-segmented-switch {
491
- --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
+ );
492
603
  display: inline-flex;
493
604
  box-sizing: border-box;
494
605
  height: 37px;
495
606
  align-items: center;
496
607
  gap: 2px;
497
- 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
+ );
498
615
  border: 1px solid var(--rv-segmented-border, var(--rv-ah-border, transparent));
499
616
  border-radius: 10px;
500
617
  padding: 2px;
501
618
  box-shadow: none;
502
619
  }
503
620
 
504
- :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,
505
623
  .rv-segmented-switch[data-theme^='dark'] {
506
624
  --rv-segmented-theme-bg: var(--rv-ui-surface-sunken);
507
625
  --rv-segmented-theme-border: var(--rv-ui-border);
@@ -527,14 +645,18 @@ label.rv-switch-label {
527
645
  border-radius: 7px;
528
646
  padding: 0 14px;
529
647
  background: transparent;
530
- 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
+ );
531
652
  cursor: pointer;
532
653
  font: inherit;
533
654
  font-size: 13px;
534
655
  font-weight: 400;
535
656
  line-height: 1;
536
657
  transition:
537
- 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),
538
660
  color var(--rv-ui-motion-fast, 120ms) var(--rv-ui-motion-ease, ease),
539
661
  opacity var(--rv-ui-motion-fast, 120ms) var(--rv-ui-motion-ease, ease);
540
662
  }
@@ -553,21 +675,50 @@ label.rv-switch-label {
553
675
  }
554
676
 
555
677
  .rv-segmented-switch-item:where(:not(.on)):hover:not(:disabled) {
556
- background: var(--rv-segmented-item-hover-bg, var(--rv-segmented-theme-item-hover-bg, var(--rv-ui-surface-hover)));
557
- 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
+ );
558
689
  }
559
690
 
560
691
  .rv-segmented-switch-item.on {
561
- background: var(--rv-segmented-active-bg, var(--rv-ah-bg, var(--rv-segmented-theme-active-bg, var(--rv-ui-surface))));
562
- 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
+ );
563
700
  font-weight: 500;
564
- 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
+ );
565
705
  box-shadow: none;
566
706
  }
567
707
 
568
708
  .rv-segmented-switch-item:focus-visible {
569
- outline: 2px solid var(--rv-segmented-focus-outline, var(--rv-ah-bg, var(--rv-segmented-theme-focus-outline, var(--rv-ui-text-muted))));
570
- 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
+ );
571
722
  }
572
723
 
573
724
  .rv-segmented-switch-item:disabled {
@@ -581,14 +732,27 @@ label.rv-switch-label {
581
732
  font-size: 9.5px;
582
733
  padding: 1px 5px;
583
734
  border-radius: 4px;
584
- background: var(--rv-segmented-count-bg, var(--rv-ah-bg-up, var(--rv-ui-surface-sunken)));
585
- color: var(--rv-segmented-count-color, var(--rv-ah-text-2, var(--rv-ui-text-muted)));
586
- 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)));
587
745
  }
588
746
 
589
747
  .rv-segmented-switch-item.on .rv-segmented-switch-count {
590
- background: var(--rv-segmented-active-count-bg, var(--rv-ah-bg-hover, var(--rv-ui-surface-sunken)));
591
- 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
+ );
592
756
  }
593
757
 
594
758
  .rv-search-input {
@@ -604,7 +768,10 @@ label.rv-switch-label {
604
768
  align-items: center;
605
769
  justify-content: center;
606
770
  transform: translateY(-50%);
607
- 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
+ );
608
775
  pointer-events: none;
609
776
  }
610
777
 
@@ -614,8 +781,12 @@ label.rv-switch-label {
614
781
  height: var(--rv-search-input-height, var(--rv-control-height, 32px));
615
782
  min-height: var(--rv-search-input-height, var(--rv-control-height, 32px));
616
783
  appearance: none;
617
- background: var(--rv-search-input-bg, var(--rv-ah-bg-input, var(--rv-ui-surface-sunken)));
618
- 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)));
619
790
  border-radius: 8px;
620
791
  padding-block: 0;
621
792
  padding-inline: 32px 38px;
@@ -625,7 +796,8 @@ label.rv-switch-label {
625
796
  font-size: var(--rv-control-font-size, 0.875rem);
626
797
  transition:
627
798
  border-color var(--rv-ui-motion-fast, 120ms) var(--rv-ui-motion-ease, ease),
628
- 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);
629
801
  }
630
802
 
631
803
  .rv-search-input > input[type='search']::-webkit-search-cancel-button {
@@ -633,13 +805,22 @@ label.rv-switch-label {
633
805
  }
634
806
 
635
807
  .rv-search-input > input:is([type='search'], [type='text'])::placeholder {
636
- 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
+ );
637
812
  }
638
813
 
639
814
  .rv-search-input > input:is([type='search'], [type='text']):focus {
640
815
  transition: none;
641
- border-color: var(--rv-search-input-focus-border, var(--rv-ah-border-strong, var(--rv-ui-border-strong)));
642
- 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
+ );
643
824
  }
644
825
 
645
826
  .rv-search-input--no-icon > input:is([type='search'], [type='text']) {
@@ -656,9 +837,19 @@ label.rv-switch-label {
656
837
  top: 50%;
657
838
  transform: translateY(-50%);
658
839
  font-size: 10px;
659
- color: var(--rv-search-input-shortcut-color, var(--rv-ah-text-2, var(--rv-ui-text-muted)));
660
- background: var(--rv-search-input-shortcut-bg, var(--rv-ah-canvas, var(--rv-ui-surface-elevated)));
661
- 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
+ );
662
853
  padding: 1px 5px;
663
854
  border-radius: 3px;
664
855
  }
@@ -749,7 +940,9 @@ button.rv-badge--inline {
749
940
  color: var(--rv-ui-selected-accent-fg, var(--rv-ui-accent-text));
750
941
  }
751
942
 
752
- .rv-badge--rounded { border-radius: 4px; }
943
+ .rv-badge--rounded {
944
+ border-radius: 4px;
945
+ }
753
946
 
754
947
  .rv-btn:disabled .rv-badge,
755
948
  .rv-btn[disabled] .rv-badge {
@@ -775,35 +968,47 @@ button.rv-badge--inline {
775
968
  }
776
969
 
777
970
  // Square icon controls and their native hover/focus tooltips share one owner.
778
- .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
- .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
-
799
-
800
- .rv-btn-icon { position: relative; overflow: visible; }
801
- .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; }
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
+ }
983
+
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
+ }
802
999
  // Reserve the icon badges' overhang so toolbars can center controls without clipping them.
803
- .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
+ }
804
1007
 
805
1008
  // Native disabled buttons still expose their explanation on pointer hover.
806
- .rv-btn-icon:disabled { pointer-events: auto; }
1009
+ .rv-btn-icon:disabled {
1010
+ pointer-events: auto;
1011
+ }
807
1012
 
808
1013
  // Contained tool strips share geometry across native Charts and Preact hosts.
809
1014
  .rv-toolbar--surface {
@@ -827,8 +1032,9 @@ button.rv-badge--inline {
827
1032
  .rv-toolbar--surface > .rv-btn-icon[aria-pressed='true']:hover:not(:disabled) {
828
1033
  background: var(--rv-ui-selected-bg);
829
1034
  }
830
- .rv-svg-icon > svg[fill='none'] { fill: none; }
831
-
1035
+ .rv-svg-icon > svg[fill='none'] {
1036
+ fill: none;
1037
+ }
832
1038
 
833
1039
  .rv-choice-chip--composite {
834
1040
  position: relative;
@@ -836,13 +1042,26 @@ button.rv-badge--inline {
836
1042
  align-items: center;
837
1043
  gap: 4px;
838
1044
  cursor: default;
839
- .rv-choice-chip-label { min-width: 0; }
1045
+ .rv-choice-chip-label {
1046
+ min-width: 0;
1047
+ }
840
1048
  button.rv-choice-chip-label {
841
- appearance: none; border: 0; padding: 0; margin: 0;
842
- background: transparent; color: inherit; font: inherit; cursor: pointer;
843
- &: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;
844
1064
  }
845
- &[aria-disabled='true'] { opacity: .5; }
846
1065
  }
847
1066
  button.rv-choice-chip-info {
848
1067
  box-sizing: border-box;
@@ -859,10 +1078,13 @@ button.rv-choice-chip-info {
859
1078
  border-radius: 50%;
860
1079
  background: transparent;
861
1080
  color: var(--rv-ui-text-muted);
862
- font: 600 13px/1 system-ui, sans-serif;
1081
+ font:
1082
+ 600 13px/1 system-ui,
1083
+ sans-serif;
863
1084
  cursor: pointer;
864
1085
  transition:
865
- 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),
866
1088
  color var(--rv-ui-motion-fast, 120ms) var(--rv-ui-motion-ease, ease);
867
1089
  }
868
1090
 
@@ -878,15 +1100,19 @@ button.rv-choice-chip-info:focus-visible,
878
1100
  outline-offset: 1px;
879
1101
  }
880
1102
 
881
-
882
-
883
- .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
+ ) {
884
1107
  border-color: transparent;
885
- 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
+ );
886
1113
  color: var(--rv-ui-text);
887
1114
  }
888
1115
 
889
-
890
1116
  .rv-btn-tab {
891
1117
  @extend %rv-btn-base;
892
1118
  min-height: 40px;
@@ -908,7 +1134,8 @@ button.rv-choice-chip-info:focus-visible,
908
1134
  content: '';
909
1135
  }
910
1136
 
911
- &:hover:not(:disabled), &[aria-selected='true'] {
1137
+ &:hover:not(:disabled),
1138
+ &[aria-selected='true'] {
912
1139
  color: var(--rv-tab-accent, var(--rv-ui-accent-text));
913
1140
  }
914
1141
  &[aria-selected='true']::after {
@@ -934,31 +1161,63 @@ button.rv-choice-chip-info:focus-visible,
934
1161
  color: var(--rv-ui-accent-text);
935
1162
  font-weight: 400;
936
1163
  text-decoration: none;
937
- svg { width: 12px; height: 12px; fill: currentColor; }
938
- &:hover:not(:disabled) { background: transparent; text-decoration: underline; }
939
- &: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
+ }
940
1178
  }
941
1179
 
942
1180
  // Forced colors suppress box shadows; focus must remain a visible outline.
943
1181
  @media (forced-colors: active) {
944
- :is(.rv-btn, .rv-btn-solid, .rv-btn-primary, .rv-btn-ghost, .rv-btn-link,
945
- .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 {
946
1193
  outline: 2px solid Highlight;
947
1194
  outline-offset: 2px;
948
1195
  }
949
1196
  }
950
1197
 
951
1198
  // Busy is unavailable for interaction but retains its enabled variant paint.
952
- .rv-btn.rv-btn-busy:disabled { pointer-events: auto; cursor: progress; }
953
- .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
+ }
954
1206
  .rv-button-spinner {
955
1207
  @include loading.ring(1em, 2px);
956
1208
  flex: 0 0 auto;
957
1209
  border-color: color-mix(in srgb, currentColor 30%, transparent);
958
1210
  border-block-start-color: currentColor;
959
1211
  }
960
- .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
+ }
961
1215
 
962
1216
  // Applies uniformly to action variants, icon controls and navigation buttons.
963
- .rv-btn-rounded.rv-btn-rounded { border-radius: 9999px; }
964
- .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
+ }