@rojaostudio/ds 2.0.0-next.2 → 2.0.0-next.21
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.
- package/README.md +42 -2
- package/THIRD_PARTY_NOTICES.md +66 -0
- package/dist/components/avatar.d.ts +20 -12
- package/dist/components/avatar.js +8 -6
- package/dist/components/badge.d.ts +7 -6
- package/dist/components/badge.js +2 -1
- package/dist/components/breadcrumb.d.ts +4 -4
- package/dist/components/breadcrumb.js +1 -1
- package/dist/components/bubble.d.ts +26 -11
- package/dist/components/bubble.js +3 -3
- package/dist/components/button.d.ts +1 -1
- package/dist/components/card.d.ts +28 -12
- package/dist/components/card.js +4 -2
- package/dist/components/chart.d.ts +17 -3
- package/dist/components/chart.js +70 -24
- package/dist/components/choice-carousel.d.ts +1 -1
- package/dist/components/choice-carousel.js +2 -4
- package/dist/components/choice-list.d.ts +40 -0
- package/dist/components/choice-list.js +122 -0
- package/dist/components/choice-preview-card.d.ts +1 -7
- package/dist/components/color-input.d.ts +1 -1
- package/dist/components/context-menu.d.ts +5 -2
- package/dist/components/currency-input.d.ts +0 -2
- package/dist/components/data-table-header.d.ts +34 -16
- package/dist/components/data-table-header.js +132 -67
- package/dist/components/date-picker.d.ts +1 -1
- package/dist/components/dialog.d.ts +6 -3
- package/dist/components/dialog.js +2 -2
- package/dist/components/dropdown-menu.d.ts +5 -2
- package/dist/components/dropzone.d.ts +2 -2
- package/dist/components/dropzone.js +1 -1
- package/dist/components/file-input.d.ts +13 -8
- package/dist/components/file-input.js +24 -21
- package/dist/components/filter-chip.d.ts +11 -5
- package/dist/components/filter-chip.js +15 -6
- package/dist/components/floating-stepper.d.ts +11 -28
- package/dist/components/floating-stepper.js +2 -30
- package/dist/components/heading.d.ts +42 -0
- package/dist/components/heading.js +25 -0
- package/dist/components/icon-button.d.ts +1 -1
- package/dist/components/image-crop-dialog.d.ts +60 -0
- package/dist/components/image-crop-dialog.js +240 -0
- package/dist/components/image-crop-modal.d.ts +12 -55
- package/dist/components/image-crop-modal.js +2 -249
- package/dist/components/image-upload.d.ts +8 -17
- package/dist/components/image-upload.js +3 -3
- package/dist/components/index.d.ts +11 -8
- package/dist/components/index.js +8 -0
- package/dist/components/internal/button.d.ts +1 -1
- package/dist/components/internal/icons.d.ts +11 -1
- package/dist/components/internal/icons.js +20 -0
- package/dist/components/internal/menu.d.ts +3 -2
- package/dist/components/internal/menu.js +1 -1
- package/dist/components/internal/modal.js +9 -0
- package/dist/components/internal/toggle.d.ts +1 -1
- package/dist/components/item.d.ts +14 -7
- package/dist/components/item.js +5 -2
- package/dist/components/marker.d.ts +11 -3
- package/dist/components/marker.js +4 -3
- package/dist/components/number-input.d.ts +1 -1
- package/dist/components/progress.d.ts +3 -3
- package/dist/components/progress.js +2 -2
- package/dist/components/row-actions.d.ts +3 -0
- package/dist/components/row-actions.js +8 -4
- package/dist/components/saving-bar.d.ts +16 -4
- package/dist/components/saving-bar.js +37 -9
- package/dist/components/section-header.d.ts +4 -3
- package/dist/components/selectable-card.d.ts +2 -10
- package/dist/components/sidebar.d.ts +8 -11
- package/dist/components/sidebar.js +4 -5
- package/dist/components/spinner.d.ts +9 -6
- package/dist/components/spinner.js +3 -3
- package/dist/components/star-rating.d.ts +3 -3
- package/dist/components/star-rating.js +2 -2
- package/dist/components/stat.d.ts +18 -6
- package/dist/components/stat.js +9 -3
- package/dist/components/status.d.ts +4 -4
- package/dist/components/status.js +2 -2
- package/dist/components/stepper.d.ts +33 -0
- package/dist/components/stepper.js +36 -0
- package/dist/components/summary-bar.d.ts +3 -2
- package/dist/components/summary-bar.js +10 -1
- package/dist/components/tile.d.ts +5 -5
- package/dist/components/tile.js +2 -2
- package/dist/components/time-picker.d.ts +1 -1
- package/dist/components/toast.d.ts +17 -6
- package/dist/components/toast.js +5 -3
- package/dist/components/toggle-card-compact.d.ts +6 -25
- package/dist/components/toggle-card-compact.js +8 -35
- package/dist/components/toggle-card.d.ts +23 -9
- package/dist/components/toggle-card.js +38 -2
- package/dist/components/toggle.d.ts +1 -1
- package/dist/components/typing-indicator.d.ts +2 -2
- package/dist/components/typing-indicator.js +1 -1
- package/package.json +4 -4
- package/styles/base.css +13 -1
- package/styles/rds/components-styles.css +611 -173
- package/styles/rds/components.css +40 -25
- package/styles/rds/foundation.css +1 -1
- package/styles/rds/theme.css +40 -29
- package/styles/rds.css +1 -1
|
@@ -554,7 +554,7 @@
|
|
|
554
554
|
line-height: var(--type-body-line);
|
|
555
555
|
}
|
|
556
556
|
|
|
557
|
-
.rds-avatar--brand.rds-avatar--
|
|
557
|
+
.rds-avatar--brand.rds-avatar--md {
|
|
558
558
|
font-size: var(--type-body-size);
|
|
559
559
|
line-height: var(--type-body-line);
|
|
560
560
|
}
|
|
@@ -665,8 +665,8 @@
|
|
|
665
665
|
--_background: var(--badge-accent-fill-background);
|
|
666
666
|
--_label: var(--badge-accent-fill-label);
|
|
667
667
|
}
|
|
668
|
-
/*
|
|
669
|
-
.rds-badge--accent-
|
|
668
|
+
/* accent soft: the brand's highlighter, the one badge that reads as a marker (the old `highlight`). */
|
|
669
|
+
.rds-badge--accent-soft {
|
|
670
670
|
--_background: var(--badge-accent-highlight-background);
|
|
671
671
|
--_label: var(--badge-accent-highlight-label);
|
|
672
672
|
}
|
|
@@ -1156,27 +1156,30 @@ button.rds-breadcrumb__link:focus-visible {
|
|
|
1156
1156
|
--_text: var(--bubble-fill-text);
|
|
1157
1157
|
}
|
|
1158
1158
|
|
|
1159
|
-
|
|
1159
|
+
/* soft + neutral (the old `muted`): the one answering. */
|
|
1160
|
+
.rds-bubble--soft {
|
|
1160
1161
|
--_background: var(--bubble-muted-background);
|
|
1161
1162
|
--_text: var(--bubble-muted-text);
|
|
1162
1163
|
}
|
|
1163
1164
|
|
|
1164
|
-
|
|
1165
|
+
/* soft + action (the old `tinted`): the one answering, on the brand tint. */
|
|
1166
|
+
.rds-bubble--soft.rds-bubble--action {
|
|
1165
1167
|
--_background: var(--bubble-tinted-background);
|
|
1166
1168
|
--_text: var(--bubble-tinted-text);
|
|
1167
1169
|
}
|
|
1168
1170
|
|
|
1171
|
+
/* soft + danger (the old `error`): it was not sent. */
|
|
1172
|
+
.rds-bubble--soft.rds-bubble--danger {
|
|
1173
|
+
--_background: var(--bubble-error-background);
|
|
1174
|
+
--_text: var(--bubble-error-text);
|
|
1175
|
+
}
|
|
1176
|
+
|
|
1169
1177
|
.rds-bubble--outline {
|
|
1170
1178
|
--_background: var(--bubble-outline-background);
|
|
1171
1179
|
--_text: var(--bubble-outline-text);
|
|
1172
1180
|
border-color: var(--bubble-outline-border);
|
|
1173
1181
|
}
|
|
1174
1182
|
|
|
1175
|
-
.rds-bubble--error {
|
|
1176
|
-
--_background: var(--bubble-error-background);
|
|
1177
|
-
--_text: var(--bubble-error-text);
|
|
1178
|
-
}
|
|
1179
|
-
|
|
1180
1183
|
.rds-bubble--ghost {
|
|
1181
1184
|
--_background: transparent;
|
|
1182
1185
|
--_text: var(--bubble-ghost-text);
|
|
@@ -1749,34 +1752,45 @@ button.rds-breadcrumb__link:focus-visible {
|
|
|
1749
1752
|
/* components/card.css */
|
|
1750
1753
|
/* @tokens card */
|
|
1751
1754
|
/*
|
|
1752
|
-
* Card (Content collection, card/*): header, content and footer.
|
|
1753
|
-
*
|
|
1755
|
+
* Card (Content collection, card/*): header, content and footer. md pads 24, sm pads 16; 24 between the
|
|
1756
|
+
* header, the content and the actions (sm: 16). Corners in radius/container. The Figma `variant`:
|
|
1757
|
+
* surface: card/background, a card/border hairline and elevation/raised (the default).
|
|
1758
|
+
* outline: only the hairline, no fill, no shadow; it takes the surface underneath (cards side by side in a grid,
|
|
1759
|
+
* inside a panel or a list, where stacked shadows turn into noise).
|
|
1760
|
+
* soft: the brand's light plate (card/tint/background), no border, no shadow, title in card/tint/title.
|
|
1761
|
+
* The footer has no band and no rule: the actions sit side by side, the main one last (on the right). The
|
|
1762
|
+
* card/footer/background tokens are obsolete in Figma (03/10/2026) and not read here.
|
|
1754
1763
|
*/
|
|
1755
1764
|
.rds-card {
|
|
1756
|
-
--_pad: var(--space-
|
|
1757
|
-
--
|
|
1758
|
-
--_footer: var(--card-footer-background);
|
|
1759
|
-
--_border: var(--card-border);
|
|
1765
|
+
--_pad: var(--space-24);
|
|
1766
|
+
--_title: var(--card-title);
|
|
1760
1767
|
|
|
1761
1768
|
box-sizing: border-box;
|
|
1762
1769
|
display: flex;
|
|
1763
1770
|
flex-direction: column;
|
|
1764
1771
|
overflow: hidden;
|
|
1765
|
-
border: var(--border-width) solid var(--
|
|
1772
|
+
border: var(--border-width) solid var(--card-border);
|
|
1766
1773
|
border-radius: var(--radius-container);
|
|
1767
|
-
background: var(--
|
|
1774
|
+
background: var(--card-background);
|
|
1768
1775
|
box-shadow: var(--elevation-raised);
|
|
1769
1776
|
font-family: var(--type-font-stack);
|
|
1770
1777
|
}
|
|
1771
1778
|
|
|
1772
1779
|
.rds-card--sm {
|
|
1773
|
-
--_pad: var(--space-
|
|
1780
|
+
--_pad: var(--space-16);
|
|
1774
1781
|
}
|
|
1775
1782
|
|
|
1776
|
-
.rds-card--
|
|
1777
|
-
|
|
1778
|
-
|
|
1779
|
-
|
|
1783
|
+
.rds-card--outline {
|
|
1784
|
+
background: transparent;
|
|
1785
|
+
box-shadow: none;
|
|
1786
|
+
}
|
|
1787
|
+
|
|
1788
|
+
.rds-card--soft {
|
|
1789
|
+
--_title: var(--card-tint-title);
|
|
1790
|
+
|
|
1791
|
+
border-color: transparent;
|
|
1792
|
+
background: var(--card-tint-background);
|
|
1793
|
+
box-shadow: none;
|
|
1780
1794
|
}
|
|
1781
1795
|
|
|
1782
1796
|
.rds-card__header {
|
|
@@ -1807,7 +1821,7 @@ button.rds-breadcrumb__link:focus-visible {
|
|
|
1807
1821
|
|
|
1808
1822
|
.rds-card__title {
|
|
1809
1823
|
margin: 0;
|
|
1810
|
-
color: var(--
|
|
1824
|
+
color: var(--_title);
|
|
1811
1825
|
font-size: var(--type-label-size);
|
|
1812
1826
|
line-height: var(--type-label-line);
|
|
1813
1827
|
font-weight: 500;
|
|
@@ -1846,32 +1860,27 @@ button.rds-breadcrumb__link:focus-visible {
|
|
|
1846
1860
|
display: flex;
|
|
1847
1861
|
flex-direction: column;
|
|
1848
1862
|
gap: var(--space-16);
|
|
1849
|
-
padding: var(--_pad);
|
|
1850
|
-
border-top: var(--border-width) solid var(--card-border);
|
|
1851
|
-
background: var(--_footer);
|
|
1852
|
-
}
|
|
1853
|
-
|
|
1854
|
-
.rds-card--tint .rds-card__footer {
|
|
1855
|
-
border-top-color: transparent;
|
|
1863
|
+
padding: 0 var(--_pad) var(--_pad);
|
|
1856
1864
|
}
|
|
1857
1865
|
|
|
1858
1866
|
.rds-card__actions {
|
|
1859
1867
|
display: flex;
|
|
1860
1868
|
flex-wrap: wrap;
|
|
1861
|
-
gap: var(--space-
|
|
1869
|
+
gap: var(--space-12);
|
|
1862
1870
|
}
|
|
1863
1871
|
|
|
1864
1872
|
.rds-card__footer--end .rds-card__actions {
|
|
1865
1873
|
justify-content: flex-end;
|
|
1866
1874
|
}
|
|
1867
1875
|
|
|
1876
|
+
/* full: the two actions side by side, half each, for a narrow card on a phone. */
|
|
1868
1877
|
.rds-card__footer--full .rds-card__actions {
|
|
1869
|
-
flex-
|
|
1870
|
-
gap: var(--space-8);
|
|
1878
|
+
flex-wrap: nowrap;
|
|
1871
1879
|
}
|
|
1872
1880
|
|
|
1873
1881
|
.rds-card__footer--full .rds-card__actions > * {
|
|
1874
|
-
|
|
1882
|
+
flex: 1 1 0;
|
|
1883
|
+
min-width: 0;
|
|
1875
1884
|
}
|
|
1876
1885
|
|
|
1877
1886
|
.rds-card__note {
|
|
@@ -1882,8 +1891,7 @@ button.rds-breadcrumb__link:focus-visible {
|
|
|
1882
1891
|
}
|
|
1883
1892
|
|
|
1884
1893
|
@media (forced-colors: active) {
|
|
1885
|
-
.rds-card
|
|
1886
|
-
.rds-card--tint .rds-card__footer {
|
|
1894
|
+
.rds-card {
|
|
1887
1895
|
border-color: CanvasText;
|
|
1888
1896
|
}
|
|
1889
1897
|
}
|
|
@@ -1992,6 +2000,8 @@ button.rds-breadcrumb__link:focus-visible {
|
|
|
1992
2000
|
* in --_series: chart.tsx picks one of the --_series-N locals below, each one a chart/series-color/N token.
|
|
1993
2001
|
*/
|
|
1994
2002
|
.rds-chart {
|
|
2003
|
+
/* Anchors the hidden alternative table (and any absolute part) to the chart, not to the page. */
|
|
2004
|
+
position: relative;
|
|
1995
2005
|
--_series-1: var(--chart-series-color-1);
|
|
1996
2006
|
--_series-2: var(--chart-series-color-2);
|
|
1997
2007
|
--_series-3: var(--chart-series-color-3);
|
|
@@ -2180,14 +2190,31 @@ button.rds-breadcrumb__link:focus-visible {
|
|
|
2180
2190
|
white-space: nowrap;
|
|
2181
2191
|
}
|
|
2182
2192
|
|
|
2183
|
-
.rds-chart__labels-track--line .rds-chart__label:first-
|
|
2193
|
+
.rds-chart__labels-track--line .rds-chart__label:first-of-type {
|
|
2184
2194
|
transform: none;
|
|
2185
2195
|
}
|
|
2186
2196
|
|
|
2187
|
-
.rds-chart__labels-track--line .rds-chart__label:last-
|
|
2197
|
+
.rds-chart__labels-track--line .rds-chart__label:last-of-type {
|
|
2188
2198
|
transform: translateX(-100%);
|
|
2189
2199
|
}
|
|
2190
2200
|
|
|
2201
|
+
/* dateEvery: a 1x4 tick on every point, the labels under them. */
|
|
2202
|
+
.rds-chart__labels-track--ticks {
|
|
2203
|
+
height: calc(var(--type-caption-line) + var(--space-4));
|
|
2204
|
+
}
|
|
2205
|
+
|
|
2206
|
+
.rds-chart__labels-track--ticks .rds-chart__label {
|
|
2207
|
+
top: var(--space-4);
|
|
2208
|
+
}
|
|
2209
|
+
|
|
2210
|
+
.rds-chart__tick {
|
|
2211
|
+
position: absolute;
|
|
2212
|
+
top: 0;
|
|
2213
|
+
width: 1px;
|
|
2214
|
+
height: var(--space-4);
|
|
2215
|
+
background: var(--chart-tick);
|
|
2216
|
+
}
|
|
2217
|
+
|
|
2191
2218
|
/* Bars: label, track, value. */
|
|
2192
2219
|
.rds-chart__bars {
|
|
2193
2220
|
display: flex;
|
|
@@ -2218,6 +2245,50 @@ button.rds-breadcrumb__link:focus-visible {
|
|
|
2218
2245
|
background: var(--_series);
|
|
2219
2246
|
}
|
|
2220
2247
|
|
|
2248
|
+
/* A bar with a destination (hrefs or onSelect): the row is the link or button. */
|
|
2249
|
+
.rds-chart__bar-row--link {
|
|
2250
|
+
box-sizing: border-box;
|
|
2251
|
+
width: 100%;
|
|
2252
|
+
margin: 0;
|
|
2253
|
+
padding: 0;
|
|
2254
|
+
border: 0;
|
|
2255
|
+
border-radius: var(--radius-focus);
|
|
2256
|
+
background: none;
|
|
2257
|
+
color: inherit;
|
|
2258
|
+
font: inherit;
|
|
2259
|
+
text-align: start;
|
|
2260
|
+
text-decoration: none;
|
|
2261
|
+
cursor: pointer;
|
|
2262
|
+
}
|
|
2263
|
+
|
|
2264
|
+
.rds-chart__bar-row--link:hover .rds-chart__track {
|
|
2265
|
+
background: var(--chart-bar-hover);
|
|
2266
|
+
}
|
|
2267
|
+
|
|
2268
|
+
.rds-chart__bar-row--link:hover .rds-chart__bar-label {
|
|
2269
|
+
text-decoration: underline;
|
|
2270
|
+
}
|
|
2271
|
+
|
|
2272
|
+
.rds-chart__bar-row--link:focus-visible,
|
|
2273
|
+
.rds-chart__table-link:focus-visible {
|
|
2274
|
+
outline: var(--focus-ring-width) solid var(--chart-focus-ring);
|
|
2275
|
+
outline-offset: var(--focus-ring-width);
|
|
2276
|
+
}
|
|
2277
|
+
|
|
2278
|
+
.rds-chart--linked.rds-chart--column .rds-chart__plot {
|
|
2279
|
+
cursor: pointer;
|
|
2280
|
+
}
|
|
2281
|
+
|
|
2282
|
+
.rds-chart__table-link {
|
|
2283
|
+
padding: 0;
|
|
2284
|
+
border: 0;
|
|
2285
|
+
background: none;
|
|
2286
|
+
color: inherit;
|
|
2287
|
+
font: inherit;
|
|
2288
|
+
text-decoration: underline;
|
|
2289
|
+
cursor: pointer;
|
|
2290
|
+
}
|
|
2291
|
+
|
|
2221
2292
|
.rds-chart__bar-value {
|
|
2222
2293
|
color: var(--chart-axis);
|
|
2223
2294
|
font-variant-numeric: tabular-nums;
|
|
@@ -2251,7 +2322,8 @@ button.rds-breadcrumb__link:focus-visible {
|
|
|
2251
2322
|
background: CanvasText;
|
|
2252
2323
|
}
|
|
2253
2324
|
|
|
2254
|
-
.rds-chart__plot:focus-visible
|
|
2325
|
+
.rds-chart__plot:focus-visible,
|
|
2326
|
+
.rds-chart__bar-row--link:focus-visible {
|
|
2255
2327
|
outline-color: Highlight;
|
|
2256
2328
|
}
|
|
2257
2329
|
}
|
|
@@ -2608,10 +2680,10 @@ input:focus-visible + .rds-checkbox__box {
|
|
|
2608
2680
|
* an 8 dot. Selected fills the card with the brand. Disabled is the same card at half opacity (as in Figma).
|
|
2609
2681
|
* tile: a grid cell, 16 inside, centred: the icon, then the label 14/20 semibold and the description 12/16 (8 below
|
|
2610
2682
|
* the icon). Selected fills it with the brand, the icon square at 10% of choice-card/icon/background/selected, the
|
|
2611
|
-
* description at
|
|
2683
|
+
* description at full opacity, and a 16 check (11 glyph) 8 from the top right corner.
|
|
2612
2684
|
* preview: 8 inside, the picture on top (16:9, a 1px border, corners radius/container, a 24 placeholder icon), then
|
|
2613
2685
|
* the label 16/24 semibold and the description 14/20, 4 in from the sides. Selected keeps the surface: a 2px border
|
|
2614
|
-
* in the brand, the description at
|
|
2686
|
+
* in the brand, the description at full opacity and a 20 check (12 glyph) in the picture's bottom right corner.
|
|
2615
2687
|
* The group stacks rows 8 apart; tiles and previews go in a grid (cells of at least 160 and 240), 8 apart.
|
|
2616
2688
|
*/
|
|
2617
2689
|
.rds-choice-card-group {
|
|
@@ -2803,11 +2875,6 @@ input:focus-visible + .rds-checkbox__box {
|
|
|
2803
2875
|
color: var(--choice-card-icon-color-selected);
|
|
2804
2876
|
}
|
|
2805
2877
|
|
|
2806
|
-
.rds-choice-card--tile.rds-choice-card--selected .rds-choice-card__description,
|
|
2807
|
-
.rds-choice-card--preview.rds-choice-card--selected .rds-choice-card__description {
|
|
2808
|
-
color: color-mix(in srgb, var(--_description) 70%, transparent);
|
|
2809
|
-
}
|
|
2810
|
-
|
|
2811
2878
|
.rds-choice-card--tile .rds-choice-card__check {
|
|
2812
2879
|
position: absolute;
|
|
2813
2880
|
top: calc(var(--space-8) - var(--border-width));
|
|
@@ -2914,7 +2981,7 @@ input:focus-visible + .rds-checkbox__box {
|
|
|
2914
2981
|
/*
|
|
2915
2982
|
* ChoiceCarousel: no tokens of its own; the IconButtons bring theirs. A row that scrolls sideways and snaps to each
|
|
2916
2983
|
* option (160 wide, 200 from 768), 12 apart, no scrollbar. From 768 the outline arrows sit on the row's edges, half
|
|
2917
|
-
* outside, and
|
|
2984
|
+
* outside, and are not there when there is nothing more that way.
|
|
2918
2985
|
*/
|
|
2919
2986
|
.rds-choice-carousel {
|
|
2920
2987
|
position: relative;
|
|
@@ -2968,7 +3035,6 @@ input:focus-visible + .rds-checkbox__box {
|
|
|
2968
3035
|
display: inline-flex;
|
|
2969
3036
|
border-radius: var(--radius-full);
|
|
2970
3037
|
box-shadow: var(--elevation-raised);
|
|
2971
|
-
transition: opacity var(--motion-duration-base) var(--motion-easing-standard);
|
|
2972
3038
|
}
|
|
2973
3039
|
|
|
2974
3040
|
.rds-choice-carousel__arrow--prev {
|
|
@@ -2980,11 +3046,6 @@ input:focus-visible + .rds-checkbox__box {
|
|
|
2980
3046
|
right: 0;
|
|
2981
3047
|
transform: translate(50%, -50%);
|
|
2982
3048
|
}
|
|
2983
|
-
|
|
2984
|
-
.rds-choice-carousel__arrow[aria-disabled='true'] {
|
|
2985
|
-
opacity: 0;
|
|
2986
|
-
pointer-events: none;
|
|
2987
|
-
}
|
|
2988
3049
|
}
|
|
2989
3050
|
|
|
2990
3051
|
@media (prefers-reduced-motion: reduce) {
|
|
@@ -2993,6 +3054,132 @@ input:focus-visible + .rds-checkbox__box {
|
|
|
2993
3054
|
}
|
|
2994
3055
|
}
|
|
2995
3056
|
|
|
3057
|
+
/* components/choice-list.css */
|
|
3058
|
+
/* @tokens choice-list */
|
|
3059
|
+
/*
|
|
3060
|
+
* ChoiceList (Content collection, choice-list/*): the dense list to choose one from. Each row pads 12 16 with 12
|
|
3061
|
+
* between media, text and trailing; a line of border-width only at the bottom (padding-bottom gives it back, so the
|
|
3062
|
+
* row is 60 with a description, 44 without). Title small medium, description caption, trailing small.
|
|
3063
|
+
* Hover: choice-list/item/background/hover. Chosen: the tint and a bar of border-width-strong on the left, no hover.
|
|
3064
|
+
* Focus: the list holds it (aria-activedescendant); the active row draws the ring inside its box, as the rows touch.
|
|
3065
|
+
* Disabled: text in the disabled tokens, media at half; it stays chosen if it was.
|
|
3066
|
+
*/
|
|
3067
|
+
.rds-choice-list {
|
|
3068
|
+
box-sizing: border-box;
|
|
3069
|
+
margin: 0;
|
|
3070
|
+
padding: 0;
|
|
3071
|
+
overflow-y: auto;
|
|
3072
|
+
font-family: var(--type-font-stack);
|
|
3073
|
+
list-style: none;
|
|
3074
|
+
outline: none;
|
|
3075
|
+
}
|
|
3076
|
+
|
|
3077
|
+
.rds-choice-list__item {
|
|
3078
|
+
--_background: transparent;
|
|
3079
|
+
--_title: var(--choice-list-item-title-default);
|
|
3080
|
+
--_description: var(--choice-list-item-description-default);
|
|
3081
|
+
--_trailing: var(--choice-list-item-trailing-default);
|
|
3082
|
+
|
|
3083
|
+
box-sizing: border-box;
|
|
3084
|
+
display: flex;
|
|
3085
|
+
align-items: center;
|
|
3086
|
+
gap: var(--space-12);
|
|
3087
|
+
min-height: calc(var(--space-12) * 2 + var(--type-button-line));
|
|
3088
|
+
padding: var(--space-12) var(--space-16) calc(var(--space-12) - var(--border-width));
|
|
3089
|
+
border-bottom: var(--border-width) solid var(--choice-list-item-border);
|
|
3090
|
+
background: var(--_background);
|
|
3091
|
+
cursor: pointer;
|
|
3092
|
+
user-select: none;
|
|
3093
|
+
}
|
|
3094
|
+
|
|
3095
|
+
@media (hover: hover) {
|
|
3096
|
+
.rds-choice-list__item:not([aria-selected='true'], [aria-disabled='true']):hover {
|
|
3097
|
+
--_background: var(--choice-list-item-background-hover);
|
|
3098
|
+
}
|
|
3099
|
+
}
|
|
3100
|
+
|
|
3101
|
+
.rds-choice-list__item[aria-selected='true'] {
|
|
3102
|
+
--_background: var(--choice-list-item-background-selected);
|
|
3103
|
+
/* On the tint the muted line does not hold contrast in dark: it takes text/on/tint. */
|
|
3104
|
+
--_description: var(--choice-list-item-description-selected);
|
|
3105
|
+
|
|
3106
|
+
box-shadow: inset var(--border-width-strong) 0 0 var(--choice-list-item-indicator);
|
|
3107
|
+
}
|
|
3108
|
+
|
|
3109
|
+
.rds-choice-list:focus-visible .rds-choice-list__item[data-active] {
|
|
3110
|
+
outline: var(--focus-ring-width) solid var(--choice-list-focus-ring);
|
|
3111
|
+
outline-offset: calc(-1 * var(--focus-ring-width));
|
|
3112
|
+
}
|
|
3113
|
+
|
|
3114
|
+
.rds-choice-list__item[aria-disabled='true'] {
|
|
3115
|
+
--_title: var(--choice-list-item-title-disabled);
|
|
3116
|
+
--_description: var(--choice-list-item-description-disabled);
|
|
3117
|
+
--_trailing: var(--choice-list-item-trailing-disabled);
|
|
3118
|
+
|
|
3119
|
+
cursor: not-allowed;
|
|
3120
|
+
}
|
|
3121
|
+
|
|
3122
|
+
.rds-choice-list__media {
|
|
3123
|
+
display: inline-flex;
|
|
3124
|
+
flex: none;
|
|
3125
|
+
}
|
|
3126
|
+
|
|
3127
|
+
.rds-choice-list__item[aria-disabled='true'] .rds-choice-list__media {
|
|
3128
|
+
opacity: 0.5;
|
|
3129
|
+
}
|
|
3130
|
+
|
|
3131
|
+
.rds-choice-list__content {
|
|
3132
|
+
display: flex;
|
|
3133
|
+
flex: 1;
|
|
3134
|
+
flex-direction: column;
|
|
3135
|
+
min-width: 0;
|
|
3136
|
+
}
|
|
3137
|
+
|
|
3138
|
+
.rds-choice-list__title,
|
|
3139
|
+
.rds-choice-list__description {
|
|
3140
|
+
overflow: hidden;
|
|
3141
|
+
text-overflow: ellipsis;
|
|
3142
|
+
white-space: nowrap;
|
|
3143
|
+
}
|
|
3144
|
+
|
|
3145
|
+
.rds-choice-list__title {
|
|
3146
|
+
color: var(--_title);
|
|
3147
|
+
font-size: var(--type-small-size);
|
|
3148
|
+
line-height: var(--type-small-line);
|
|
3149
|
+
font-weight: 500;
|
|
3150
|
+
}
|
|
3151
|
+
|
|
3152
|
+
.rds-choice-list__description {
|
|
3153
|
+
color: var(--_description);
|
|
3154
|
+
font-size: var(--type-caption-size);
|
|
3155
|
+
line-height: var(--type-caption-line);
|
|
3156
|
+
}
|
|
3157
|
+
|
|
3158
|
+
.rds-choice-list__trailing {
|
|
3159
|
+
flex: none;
|
|
3160
|
+
color: var(--_trailing);
|
|
3161
|
+
font-size: var(--type-small-size);
|
|
3162
|
+
line-height: var(--type-small-line);
|
|
3163
|
+
font-variant-numeric: tabular-nums;
|
|
3164
|
+
text-align: right;
|
|
3165
|
+
}
|
|
3166
|
+
|
|
3167
|
+
@media (forced-colors: active) {
|
|
3168
|
+
.rds-choice-list__item[aria-selected='true'] {
|
|
3169
|
+
forced-color-adjust: none;
|
|
3170
|
+
background: Highlight;
|
|
3171
|
+
color: HighlightText;
|
|
3172
|
+
}
|
|
3173
|
+
|
|
3174
|
+
.rds-choice-list__item[aria-selected='true'] :is(.rds-choice-list__title, .rds-choice-list__description, .rds-choice-list__trailing) {
|
|
3175
|
+
color: HighlightText;
|
|
3176
|
+
}
|
|
3177
|
+
|
|
3178
|
+
.rds-choice-list:focus-visible .rds-choice-list__item[data-active] {
|
|
3179
|
+
outline-color: CanvasText;
|
|
3180
|
+
}
|
|
3181
|
+
}
|
|
3182
|
+
|
|
2996
3183
|
/* components/color-input.css */
|
|
2997
3184
|
/* @tokens color-input */
|
|
2998
3185
|
/*
|
|
@@ -3045,7 +3232,7 @@ input:focus-visible + .rds-checkbox__box {
|
|
|
3045
3232
|
.rds-color-input__swatch:focus-visible,
|
|
3046
3233
|
.rds-color-input__swatch:has(.rds-color-input__native:focus-visible) {
|
|
3047
3234
|
outline: var(--focus-ring-width) solid var(--_border-focus);
|
|
3048
|
-
outline-offset: var(--
|
|
3235
|
+
outline-offset: var(--focus-ring-width);
|
|
3049
3236
|
}
|
|
3050
3237
|
|
|
3051
3238
|
.rds-color-input__native {
|
|
@@ -3112,14 +3299,15 @@ input:focus-visible + .rds-checkbox__box {
|
|
|
3112
3299
|
cursor: pointer;
|
|
3113
3300
|
}
|
|
3114
3301
|
|
|
3302
|
+
/* Selected and focus: the ring of Button and Checkbox, focus-ring-width wide and as far off the swatch (a gap). */
|
|
3115
3303
|
.rds-color-input__choice[aria-pressed='true'] {
|
|
3116
|
-
outline:
|
|
3117
|
-
outline-offset: var(--
|
|
3304
|
+
outline: var(--focus-ring-width) solid var(--color-input-swatch-selected);
|
|
3305
|
+
outline-offset: var(--focus-ring-width);
|
|
3118
3306
|
}
|
|
3119
3307
|
|
|
3120
3308
|
.rds-color-input__choice:focus-visible {
|
|
3121
3309
|
outline: var(--focus-ring-width) solid var(--color-input-border-focus);
|
|
3122
|
-
outline-offset: var(--
|
|
3310
|
+
outline-offset: var(--focus-ring-width);
|
|
3123
3311
|
}
|
|
3124
3312
|
|
|
3125
3313
|
@media (forced-colors: active) {
|
|
@@ -3394,23 +3582,52 @@ input:focus-visible + .rds-checkbox__box {
|
|
|
3394
3582
|
/* components/data-table-header.css */
|
|
3395
3583
|
/* @tokens data-table-header */
|
|
3396
3584
|
/*
|
|
3397
|
-
* DataTableHeader: no tokens of its own; the Input, FilterChip, Chip, Button,
|
|
3398
|
-
* Popover and Drawer bring theirs.
|
|
3399
|
-
*
|
|
3400
|
-
*
|
|
3585
|
+
* DataTableHeader: no tokens of its own; the Input, FilterChip, Chip, Button, Separator, Checkbox, DropdownMenu,
|
|
3586
|
+
* Popover and Drawer bring theirs. The bar is one row that never wraps, aligned to the top, 8 apart, 12 above the
|
|
3587
|
+
* table: the `tools` group (the search, the quick filters, the filters, the view control) takes the free width and
|
|
3588
|
+
* is what wraps, packed to the right, the search on the left taking the free width, at least 320 (never wider than
|
|
3589
|
+
* the group); the action sits outside it, fixed at the end of the FIRST line, on the right, and never goes down.
|
|
3590
|
+
* Two arrangements, by the screen width, as the Figma viewport mode (layout/compact below lg 1024; the SavingBar's cut):
|
|
3591
|
+
* expanded from 1024 (the __wide parts: Separator, Buttons with labels); compact below it (the __narrow parts: the
|
|
3592
|
+
* filter as an IconButton of 44), where the search accepts 200. On the IconButton, while a filter is on, a dot of 8
|
|
3593
|
+
* (badge neutral fill, 6 in from the top right corner) or a neutral number Badge over the corner (-6 top, -12 right).
|
|
3594
|
+
* In the Popover and the Drawer the filters stack 16 apart, each one a caption-sized label over its chips.
|
|
3401
3595
|
*/
|
|
3402
3596
|
.rds-data-table-header {
|
|
3597
|
+
box-sizing: border-box;
|
|
3598
|
+
width: 100%;
|
|
3599
|
+
display: flex;
|
|
3600
|
+
flex-wrap: nowrap;
|
|
3601
|
+
align-items: flex-start;
|
|
3602
|
+
gap: var(--space-8);
|
|
3603
|
+
margin-bottom: var(--space-12);
|
|
3604
|
+
}
|
|
3605
|
+
|
|
3606
|
+
/* Figma `tools`: horizontal, wrap, fill. */
|
|
3607
|
+
.rds-data-table-header__tools {
|
|
3608
|
+
flex: 1 1 0;
|
|
3609
|
+
min-width: 0;
|
|
3403
3610
|
display: flex;
|
|
3404
3611
|
flex-wrap: wrap;
|
|
3405
3612
|
align-items: center;
|
|
3613
|
+
justify-content: flex-end;
|
|
3406
3614
|
gap: var(--space-8);
|
|
3407
|
-
margin-bottom: var(--space-12);
|
|
3408
3615
|
}
|
|
3409
3616
|
|
|
3410
|
-
.
|
|
3411
|
-
|
|
3617
|
+
/* Figma `actions`: outside `tools`, at the end of the first line. */
|
|
3618
|
+
.rds-data-table-header__actions {
|
|
3619
|
+
flex: none;
|
|
3620
|
+
align-self: flex-start;
|
|
3621
|
+
}
|
|
3622
|
+
|
|
3623
|
+
/* Scoped to the bar: the field's own `min-width: 0` (internal/field.css) comes later in the bundle. */
|
|
3624
|
+
.rds-data-table-header .rds-data-table-header__search {
|
|
3625
|
+
flex: 1 1 calc(var(--space-64) * 5);
|
|
3626
|
+
min-width: min(calc(var(--space-64) * 5), 100%);
|
|
3412
3627
|
}
|
|
3413
3628
|
|
|
3629
|
+
.rds-data-table-header__quick,
|
|
3630
|
+
.rds-data-table-header__view,
|
|
3414
3631
|
.rds-data-table-header__wide,
|
|
3415
3632
|
.rds-data-table-header__actions,
|
|
3416
3633
|
.rds-data-table-header__narrow {
|
|
@@ -3420,17 +3637,55 @@ input:focus-visible + .rds-checkbox__box {
|
|
|
3420
3637
|
gap: var(--space-8);
|
|
3421
3638
|
}
|
|
3422
3639
|
|
|
3423
|
-
.rds-data-table-
|
|
3640
|
+
.rds-data-table-header__narrow {
|
|
3424
3641
|
display: none;
|
|
3425
3642
|
}
|
|
3426
3643
|
|
|
3427
|
-
@media (
|
|
3644
|
+
@media (max-width: 1023px) {
|
|
3428
3645
|
.rds-data-table-header__wide {
|
|
3429
|
-
display:
|
|
3646
|
+
display: none;
|
|
3430
3647
|
}
|
|
3431
3648
|
|
|
3432
3649
|
.rds-data-table-header__narrow {
|
|
3433
|
-
display:
|
|
3650
|
+
display: flex;
|
|
3651
|
+
}
|
|
3652
|
+
|
|
3653
|
+
/* Compact: the search accepts 200 (40 × 5), so it sits on one line with the filter and an IconButton at 390. */
|
|
3654
|
+
.rds-data-table-header .rds-data-table-header__search {
|
|
3655
|
+
flex-basis: calc(var(--space-40) * 5);
|
|
3656
|
+
min-width: min(calc(var(--space-40) * 5), 100%);
|
|
3657
|
+
}
|
|
3658
|
+
}
|
|
3659
|
+
|
|
3660
|
+
/* The compact filter: the IconButton with its indicator on the corner. */
|
|
3661
|
+
.rds-data-table-header__trigger {
|
|
3662
|
+
position: relative;
|
|
3663
|
+
display: inline-flex;
|
|
3664
|
+
}
|
|
3665
|
+
|
|
3666
|
+
.rds-data-table-header__dot,
|
|
3667
|
+
.rds-data-table-header__count {
|
|
3668
|
+
position: absolute;
|
|
3669
|
+
pointer-events: none;
|
|
3670
|
+
}
|
|
3671
|
+
|
|
3672
|
+
.rds-data-table-header__dot {
|
|
3673
|
+
top: calc(var(--space-4) * 1.5);
|
|
3674
|
+
right: calc(var(--space-4) * 1.5);
|
|
3675
|
+
width: var(--space-8);
|
|
3676
|
+
height: var(--space-8);
|
|
3677
|
+
border-radius: var(--radius-full);
|
|
3678
|
+
background: var(--badge-neutral-fill-background);
|
|
3679
|
+
}
|
|
3680
|
+
|
|
3681
|
+
.rds-data-table-header__count {
|
|
3682
|
+
top: calc(var(--space-4) * -1.5);
|
|
3683
|
+
right: calc(var(--space-12) * -1);
|
|
3684
|
+
}
|
|
3685
|
+
|
|
3686
|
+
@media (forced-colors: active) {
|
|
3687
|
+
.rds-data-table-header__dot {
|
|
3688
|
+
background: CanvasText;
|
|
3434
3689
|
}
|
|
3435
3690
|
}
|
|
3436
3691
|
|
|
@@ -3590,6 +3845,8 @@ input:focus-visible + .rds-checkbox__box {
|
|
|
3590
3845
|
* Drawer (Overlays collection, drawer/*): stuck to the bottom, the top corners in radius/container; 12 above (the
|
|
3591
3846
|
* handle, 40 × 4), 24 on the sides, 32 below, 20 between parts; no border and no ×. On a wide screen it stops at
|
|
3592
3847
|
* 560 and centres (the Figma draws it on a 390 phone only).
|
|
3848
|
+
* Height by the content, up to 85% of the screen (717 on an 844): past it, only the content scrolls inside; the
|
|
3849
|
+
* handle, the title and the footer stay put.
|
|
3593
3850
|
*/
|
|
3594
3851
|
.rds-drawer__scrim {
|
|
3595
3852
|
background: var(--drawer-scrim);
|
|
@@ -3601,7 +3858,7 @@ input:focus-visible + .rds-checkbox__box {
|
|
|
3601
3858
|
left: 0;
|
|
3602
3859
|
gap: calc(var(--space-16) + var(--space-4));
|
|
3603
3860
|
max-width: 560px;
|
|
3604
|
-
max-height:
|
|
3861
|
+
max-height: 85dvh;
|
|
3605
3862
|
margin-inline: auto;
|
|
3606
3863
|
padding: var(--space-12) var(--space-24) var(--space-32);
|
|
3607
3864
|
border-radius: var(--radius-container) var(--radius-container) 0 0;
|
|
@@ -3625,6 +3882,18 @@ input:focus-visible + .rds-checkbox__box {
|
|
|
3625
3882
|
background: var(--drawer-handle);
|
|
3626
3883
|
}
|
|
3627
3884
|
|
|
3885
|
+
.rds-drawer .rds-modal__header,
|
|
3886
|
+
.rds-drawer .rds-modal__footer {
|
|
3887
|
+
flex: none;
|
|
3888
|
+
}
|
|
3889
|
+
|
|
3890
|
+
.rds-drawer .rds-modal__body {
|
|
3891
|
+
flex: 1;
|
|
3892
|
+
min-height: 0;
|
|
3893
|
+
overflow-y: auto;
|
|
3894
|
+
overscroll-behavior: contain;
|
|
3895
|
+
}
|
|
3896
|
+
|
|
3628
3897
|
.rds-drawer .rds-modal__heading {
|
|
3629
3898
|
padding-top: 0;
|
|
3630
3899
|
}
|
|
@@ -4105,7 +4374,7 @@ input:focus-visible + .rds-checkbox__box {
|
|
|
4105
4374
|
* FilterChip (Forms collection, filter-chip/*): 32 tall, pill, 12 inside, 4 between icon, label and count;
|
|
4106
4375
|
* label 14/20 medium. inactive: card fill and a hairline; hover: muted fill, strong hairline; active: the brand
|
|
4107
4376
|
* at 12% over what is behind, brand border and label; disabled: the whole chip at 50%, the label at 40%.
|
|
4108
|
-
* The count reads
|
|
4377
|
+
* The count reads in the label's colour, at full opacity. Icon 14, in the label's colour.
|
|
4109
4378
|
*/
|
|
4110
4379
|
.rds-filter-chip-group {
|
|
4111
4380
|
display: flex;
|
|
@@ -4149,14 +4418,14 @@ input:focus-visible + .rds-checkbox__box {
|
|
|
4149
4418
|
}
|
|
4150
4419
|
|
|
4151
4420
|
@media (hover: hover) {
|
|
4152
|
-
.rds-filter-chip:not(.rds-filter-chip--
|
|
4421
|
+
.rds-filter-chip:not(.rds-filter-chip--pressed, [aria-disabled='true']):hover {
|
|
4153
4422
|
--_surface: var(--filter-chip-surface-hover);
|
|
4154
4423
|
--_stroke: var(--filter-chip-stroke-hover);
|
|
4155
4424
|
--_text: var(--filter-chip-text-hover);
|
|
4156
4425
|
}
|
|
4157
4426
|
}
|
|
4158
4427
|
|
|
4159
|
-
.rds-filter-chip--
|
|
4428
|
+
.rds-filter-chip--pressed {
|
|
4160
4429
|
--_surface: color-mix(in srgb, var(--filter-chip-surface-active) 12%, transparent);
|
|
4161
4430
|
--_stroke: var(--filter-chip-stroke-active);
|
|
4162
4431
|
--_text: var(--filter-chip-text-active);
|
|
@@ -4196,7 +4465,6 @@ input:focus-visible + .rds-checkbox__box {
|
|
|
4196
4465
|
}
|
|
4197
4466
|
|
|
4198
4467
|
.rds-filter-chip__count {
|
|
4199
|
-
color: color-mix(in srgb, currentColor 60%, transparent);
|
|
4200
4468
|
font-variant-numeric: tabular-nums;
|
|
4201
4469
|
}
|
|
4202
4470
|
|
|
@@ -4205,7 +4473,7 @@ input:focus-visible + .rds-checkbox__box {
|
|
|
4205
4473
|
border-color: CanvasText;
|
|
4206
4474
|
}
|
|
4207
4475
|
|
|
4208
|
-
.rds-filter-chip--
|
|
4476
|
+
.rds-filter-chip--pressed {
|
|
4209
4477
|
border-color: Highlight;
|
|
4210
4478
|
outline: var(--border-width) solid Highlight;
|
|
4211
4479
|
}
|
|
@@ -4215,38 +4483,6 @@ input:focus-visible + .rds-checkbox__box {
|
|
|
4215
4483
|
}
|
|
4216
4484
|
}
|
|
4217
4485
|
|
|
4218
|
-
/* components/floating-stepper.css */
|
|
4219
|
-
/* @tokens floating-stepper */
|
|
4220
|
-
/*
|
|
4221
|
-
* FloatingStepper: no tokens of its own; the Card and the Buttons bring theirs. A pill (radius/full) of 44 Buttons,
|
|
4222
|
-
* 4 inside and 4 apart, raised by elevation/overlay because it floats over the page. A 1 × 24 line in the card's
|
|
4223
|
-
* border colour before the action.
|
|
4224
|
-
*/
|
|
4225
|
-
.rds-floating-stepper {
|
|
4226
|
-
flex-direction: row;
|
|
4227
|
-
align-items: center;
|
|
4228
|
-
gap: var(--space-4);
|
|
4229
|
-
width: max-content;
|
|
4230
|
-
max-width: 100%;
|
|
4231
|
-
padding: var(--space-4);
|
|
4232
|
-
border-radius: var(--radius-full);
|
|
4233
|
-
box-shadow: var(--elevation-overlay);
|
|
4234
|
-
overflow-x: auto;
|
|
4235
|
-
}
|
|
4236
|
-
|
|
4237
|
-
.rds-floating-stepper > .rds-button {
|
|
4238
|
-
flex: none;
|
|
4239
|
-
border-radius: var(--radius-full);
|
|
4240
|
-
}
|
|
4241
|
-
|
|
4242
|
-
.rds-floating-stepper__divider {
|
|
4243
|
-
flex: none;
|
|
4244
|
-
width: var(--border-width);
|
|
4245
|
-
height: var(--size-24);
|
|
4246
|
-
margin-inline: var(--space-4);
|
|
4247
|
-
background: var(--card-border);
|
|
4248
|
-
}
|
|
4249
|
-
|
|
4250
4486
|
/* components/footer.css */
|
|
4251
4487
|
/* @tokens footer */
|
|
4252
4488
|
/*
|
|
@@ -4595,6 +4831,48 @@ input:focus-visible + .rds-checkbox__box {
|
|
|
4595
4831
|
}
|
|
4596
4832
|
}
|
|
4597
4833
|
|
|
4834
|
+
/* components/heading.css */
|
|
4835
|
+
/* @tokens heading */
|
|
4836
|
+
/*
|
|
4837
|
+
* Heading (Content collection, heading/*): a title in the brand pair. heading/default is text/heading, heading/accent
|
|
4838
|
+
* the logo orange; .heading/mark paints a stretch in the other one. level follows the type scale (band, heading,
|
|
4839
|
+
* value), all bold.
|
|
4840
|
+
*/
|
|
4841
|
+
.rds-heading {
|
|
4842
|
+
margin: 0;
|
|
4843
|
+
font-family: var(--type-font-stack);
|
|
4844
|
+
font-weight: var(--type-heading-weight);
|
|
4845
|
+
color: var(--heading-default);
|
|
4846
|
+
text-wrap: balance;
|
|
4847
|
+
}
|
|
4848
|
+
|
|
4849
|
+
.rds-heading--band {
|
|
4850
|
+
font-size: var(--type-band-size);
|
|
4851
|
+
line-height: var(--type-band-line);
|
|
4852
|
+
}
|
|
4853
|
+
|
|
4854
|
+
.rds-heading--heading {
|
|
4855
|
+
font-size: var(--type-heading-size);
|
|
4856
|
+
line-height: var(--type-heading-line);
|
|
4857
|
+
}
|
|
4858
|
+
|
|
4859
|
+
.rds-heading--value {
|
|
4860
|
+
font-size: var(--type-value-size);
|
|
4861
|
+
line-height: var(--type-value-line);
|
|
4862
|
+
}
|
|
4863
|
+
|
|
4864
|
+
.rds-heading--accent {
|
|
4865
|
+
color: var(--heading-accent);
|
|
4866
|
+
}
|
|
4867
|
+
|
|
4868
|
+
.rds-heading__mark {
|
|
4869
|
+
color: var(--heading-accent);
|
|
4870
|
+
}
|
|
4871
|
+
|
|
4872
|
+
.rds-heading--accent .rds-heading__mark {
|
|
4873
|
+
color: var(--heading-default);
|
|
4874
|
+
}
|
|
4875
|
+
|
|
4598
4876
|
/* components/hover-card.css */
|
|
4599
4877
|
/* @tokens hovercard */
|
|
4600
4878
|
/* HoverCard (Feedback collection, hovercard/*): 320 wide, 16 inside, 12 between avatar and text, elevation/overlay. */
|
|
@@ -4669,13 +4947,14 @@ input:focus-visible + .rds-checkbox__box {
|
|
|
4669
4947
|
}
|
|
4670
4948
|
}
|
|
4671
4949
|
|
|
4672
|
-
/* components/image-crop-
|
|
4673
|
-
/* @tokens image-crop-
|
|
4950
|
+
/* components/image-crop-dialog.css */
|
|
4951
|
+
/* @tokens image-crop-dialog */
|
|
4674
4952
|
/*
|
|
4675
|
-
*
|
|
4676
|
-
*
|
|
4677
|
-
*
|
|
4678
|
-
* the dialog's
|
|
4953
|
+
* ImageCropDialog (Figma [RDS] Overlays/ImageCropDialog): the Dialog, the ToggleGroup, the Alert and the Spinner bring
|
|
4954
|
+
* their tokens; the crop brings its own (Overlays, image-crop-dialog/*). 12 apart: the presets (they share the
|
|
4955
|
+
* width), the stage (320 tall, on image-crop-dialog/stage/background, the image letterboxed inside 16 of padding, a
|
|
4956
|
+
* line in the dialog's border colour), the error or the hint. Over the image, outside the crop, the shade; the crop's
|
|
4957
|
+
* line and its handles in their own colours. While sending, the dialog's scrim covers the stage.
|
|
4679
4958
|
*/
|
|
4680
4959
|
.rds-image-crop {
|
|
4681
4960
|
display: flex;
|
|
@@ -4698,17 +4977,42 @@ input:focus-visible + .rds-checkbox__box {
|
|
|
4698
4977
|
display: flex;
|
|
4699
4978
|
align-items: center;
|
|
4700
4979
|
justify-content: center;
|
|
4701
|
-
|
|
4980
|
+
height: 320px;
|
|
4981
|
+
/* On a short viewport (a phone on its side) the stage gives way so the footer stays in view. */
|
|
4702
4982
|
max-height: 60vh;
|
|
4703
4983
|
padding: var(--space-16);
|
|
4704
4984
|
overflow: hidden;
|
|
4985
|
+
background: var(--image-crop-dialog-stage-background);
|
|
4705
4986
|
border: var(--border-width) solid var(--dialog-border);
|
|
4706
4987
|
border-radius: var(--radius-control);
|
|
4707
4988
|
}
|
|
4708
4989
|
|
|
4990
|
+
/*
|
|
4991
|
+
* react-image-crop's own stylesheet is unlayered, so it wins over these layered rules wherever both set the same
|
|
4992
|
+
* property. The shade is an SVG rect with fill as an attribute (black at 50%): any CSS beats it. The handles read
|
|
4993
|
+
* the library's variables, set here. The selection's marching ants are hard-coded: the two !important take them
|
|
4994
|
+
* off so the crop is one solid line in the selection colour (the library's focus outline stays).
|
|
4995
|
+
*/
|
|
4709
4996
|
.rds-image-crop__crop {
|
|
4710
4997
|
max-width: 100%;
|
|
4711
|
-
max-height: calc(60vh - var(--space-32));
|
|
4998
|
+
max-height: calc(min(320px, 60vh) - var(--space-32));
|
|
4999
|
+
--rc-drag-handle-bg-colour: var(--image-crop-dialog-handle);
|
|
5000
|
+
--rc-border-color: var(--image-crop-dialog-handle);
|
|
5001
|
+
}
|
|
5002
|
+
|
|
5003
|
+
.rds-image-crop__crop .ReactCrop__crop-mask > rect {
|
|
5004
|
+
fill: var(--image-crop-dialog-shade);
|
|
5005
|
+
fill-opacity: 1;
|
|
5006
|
+
}
|
|
5007
|
+
|
|
5008
|
+
.rds-image-crop__crop .ReactCrop__crop-selection {
|
|
5009
|
+
background-image: none !important;
|
|
5010
|
+
border: var(--border-width) solid var(--image-crop-dialog-selection);
|
|
5011
|
+
animation: none !important;
|
|
5012
|
+
}
|
|
5013
|
+
|
|
5014
|
+
.rds-image-crop__crop .ReactCrop__drag-handle {
|
|
5015
|
+
border-radius: var(--radius-xs);
|
|
4712
5016
|
}
|
|
4713
5017
|
|
|
4714
5018
|
.rds-image-crop__image {
|
|
@@ -5298,6 +5602,23 @@ input:focus-visible + .rds-checkbox__box {
|
|
|
5298
5602
|
font: inherit;
|
|
5299
5603
|
}
|
|
5300
5604
|
|
|
5605
|
+
/*
|
|
5606
|
+
* Browser autofill paints the control's own background (blue in light, yellow in dark) and the control is smaller
|
|
5607
|
+
* than the box that draws the border: it showed as a patch in the middle of the field. Cover it with the box
|
|
5608
|
+
* colour and keep the value colour. The background-color transition is the fallback for browsers that ignore the
|
|
5609
|
+
* inset shadow on autofill.
|
|
5610
|
+
*/
|
|
5611
|
+
.rds-field__control:-webkit-autofill,
|
|
5612
|
+
.rds-field__control:-webkit-autofill:hover,
|
|
5613
|
+
.rds-field__control:-webkit-autofill:focus,
|
|
5614
|
+
.rds-field__control:autofill {
|
|
5615
|
+
-webkit-box-shadow: 0 0 0 1000px var(--_background) inset;
|
|
5616
|
+
box-shadow: 0 0 0 1000px var(--_background) inset;
|
|
5617
|
+
-webkit-text-fill-color: var(--_value);
|
|
5618
|
+
caret-color: var(--_value);
|
|
5619
|
+
transition: background-color 600000s 0s;
|
|
5620
|
+
}
|
|
5621
|
+
|
|
5301
5622
|
.rds-field__control::placeholder {
|
|
5302
5623
|
color: var(--_placeholder);
|
|
5303
5624
|
opacity: 1;
|
|
@@ -6319,7 +6640,7 @@ body:has(.rds-modal) {
|
|
|
6319
6640
|
/* components/item.css */
|
|
6320
6641
|
/* @tokens item */
|
|
6321
6642
|
/*
|
|
6322
|
-
* Item (Content collection, item/*): one list row, at least 44 tall.
|
|
6643
|
+
* Item (Content collection, item/*): one list row, at least 44 tall. md pads 12 16, gap 16; sm pads 8 12,
|
|
6323
6644
|
* gap 12. Corners in radius/container. Title in label (16/24 medium), description in small (14/20); sm one step down.
|
|
6324
6645
|
*/
|
|
6325
6646
|
.rds-item-group {
|
|
@@ -6331,11 +6652,11 @@ body:has(.rds-modal) {
|
|
|
6331
6652
|
list-style: none;
|
|
6332
6653
|
}
|
|
6333
6654
|
|
|
6334
|
-
.rds-item-group:has(> .rds-item--
|
|
6655
|
+
.rds-item-group:has(> .rds-item--ghost) {
|
|
6335
6656
|
gap: 0;
|
|
6336
6657
|
}
|
|
6337
6658
|
|
|
6338
|
-
.rds-item-group > .rds-item--
|
|
6659
|
+
.rds-item-group > .rds-item--ghost + .rds-item--ghost {
|
|
6339
6660
|
border-top: var(--border-width) solid var(--item-border);
|
|
6340
6661
|
}
|
|
6341
6662
|
|
|
@@ -6361,7 +6682,7 @@ body:has(.rds-modal) {
|
|
|
6361
6682
|
--_gap: var(--space-12);
|
|
6362
6683
|
}
|
|
6363
6684
|
|
|
6364
|
-
.rds-item--
|
|
6685
|
+
.rds-item--ghost {
|
|
6365
6686
|
padding: var(--_pad-y) var(--_pad-x);
|
|
6366
6687
|
border-width: 0;
|
|
6367
6688
|
border-radius: 0;
|
|
@@ -6371,7 +6692,7 @@ body:has(.rds-modal) {
|
|
|
6371
6692
|
border-color: var(--item-border);
|
|
6372
6693
|
}
|
|
6373
6694
|
|
|
6374
|
-
.rds-item--
|
|
6695
|
+
.rds-item--soft {
|
|
6375
6696
|
background: var(--item-muted-background);
|
|
6376
6697
|
}
|
|
6377
6698
|
|
|
@@ -6417,7 +6738,7 @@ body:has(.rds-modal) {
|
|
|
6417
6738
|
|
|
6418
6739
|
@media (forced-colors: active) {
|
|
6419
6740
|
.rds-item--outline,
|
|
6420
|
-
.rds-item--
|
|
6741
|
+
.rds-item--soft {
|
|
6421
6742
|
border-color: CanvasText;
|
|
6422
6743
|
}
|
|
6423
6744
|
}
|
|
@@ -7109,8 +7430,9 @@ body:has(.rds-modal) {
|
|
|
7109
7430
|
/* @tokens page-skeleton */
|
|
7110
7431
|
/*
|
|
7111
7432
|
* PageSkeleton and CardsSkeleton: no tokens of their own; the Skeleton and the Card bring theirs. Blocks 24 apart
|
|
7112
|
-
* (24 padding when padded). The
|
|
7113
|
-
* between rows. The cards: 2 per row (4 from 1024), the charts
|
|
7433
|
+
* (24 padding when padded). The Cards keep their elevation/raised, as in the Figma. The table is a small Card: the
|
|
7434
|
+
* header row on the table header background (table/header/background), a line between rows. The cards: 2 per row (4 from 1024), the charts
|
|
7435
|
+
* 1 (2 from 1024), 16 apart.
|
|
7114
7436
|
*/
|
|
7115
7437
|
.rds-page-skeleton {
|
|
7116
7438
|
display: flex;
|
|
@@ -7129,10 +7451,6 @@ body:has(.rds-modal) {
|
|
|
7129
7451
|
gap: var(--space-16);
|
|
7130
7452
|
}
|
|
7131
7453
|
|
|
7132
|
-
.rds-page-skeleton__table {
|
|
7133
|
-
box-shadow: none;
|
|
7134
|
-
}
|
|
7135
|
-
|
|
7136
7454
|
.rds-page-skeleton__row {
|
|
7137
7455
|
display: flex;
|
|
7138
7456
|
align-items: center;
|
|
@@ -7145,7 +7463,7 @@ body:has(.rds-modal) {
|
|
|
7145
7463
|
}
|
|
7146
7464
|
|
|
7147
7465
|
.rds-page-skeleton__row--head {
|
|
7148
|
-
background: var(--
|
|
7466
|
+
background: var(--table-header-background);
|
|
7149
7467
|
}
|
|
7150
7468
|
|
|
7151
7469
|
.rds-page-skeleton__row .rds-skeleton {
|
|
@@ -7179,7 +7497,6 @@ body:has(.rds-modal) {
|
|
|
7179
7497
|
.rds-page-skeleton__card {
|
|
7180
7498
|
gap: var(--space-12);
|
|
7181
7499
|
padding: var(--space-16);
|
|
7182
|
-
box-shadow: none;
|
|
7183
7500
|
}
|
|
7184
7501
|
|
|
7185
7502
|
.rds-page-skeleton__card .rds-skeleton {
|
|
@@ -8143,15 +8460,20 @@ input:focus-visible + .rds-radio__circle {
|
|
|
8143
8460
|
/* @tokens savingbar */
|
|
8144
8461
|
/*
|
|
8145
8462
|
* SavingBar (Actions collection, savingbar/*): full width (at least 320), 12 24 padding, 16 between the
|
|
8146
|
-
* message (label, medium) and the actions (8 apart). The
|
|
8147
|
-
*
|
|
8463
|
+
* message (label, medium, at most 2 lines with an ellipsis) and the actions (8 apart). The bar is the brand plate
|
|
8464
|
+
* (.ds-plate on the element, set by the component): savingbar/background is surface/page and savingbar/text is text/body,
|
|
8465
|
+
* read in the brand mode, so it comes out the same over a light or a dark page. The Buttons are tone action (Salvar)
|
|
8466
|
+
* and tone neutral ghost (Descartar), read on the plate too.
|
|
8467
|
+
* Two arrangements, by the screen width, as the Figma viewport mode (layout/compact below lg 1024): expanded from 1024,
|
|
8468
|
+
* the message grows (at least 160) beside the actions; compact below it, the message on top and Descartar and
|
|
8469
|
+
* Salvar under it, sharing the width.
|
|
8470
|
+
* Details (showDetails, onDetails in code): in compact, the unsaved message becomes a text button with chevron-up 20 at
|
|
8471
|
+
* the right (12 apart) that opens the Drawer with what is missing; hover underlines, focus draws the ring
|
|
8472
|
+
* savingbar/focus/ring (focus/ring-width, radius/focus) 4 around the message box, inside stroke, as the Figma
|
|
8473
|
+
* focus-ring frame. The touch area is 44 tall without changing the drawing. Expanded, the message stays text.
|
|
8148
8474
|
*/
|
|
8149
8475
|
.rds-savingbar {
|
|
8150
8476
|
box-sizing: border-box;
|
|
8151
|
-
display: flex;
|
|
8152
|
-
flex-wrap: wrap;
|
|
8153
|
-
align-items: center;
|
|
8154
|
-
gap: var(--space-16);
|
|
8155
8477
|
width: 100%;
|
|
8156
8478
|
min-width: min(320px, 100%);
|
|
8157
8479
|
padding: var(--space-12) var(--space-24);
|
|
@@ -8160,18 +8482,34 @@ input:focus-visible + .rds-radio__circle {
|
|
|
8160
8482
|
font-family: var(--type-font-stack);
|
|
8161
8483
|
}
|
|
8162
8484
|
|
|
8485
|
+
.rds-savingbar__row {
|
|
8486
|
+
display: flex;
|
|
8487
|
+
align-items: center;
|
|
8488
|
+
gap: var(--space-16);
|
|
8489
|
+
}
|
|
8490
|
+
|
|
8163
8491
|
.rds-savingbar__message {
|
|
8164
8492
|
display: flex;
|
|
8165
|
-
flex: 1;
|
|
8493
|
+
flex: 1 1 160px;
|
|
8166
8494
|
align-items: center;
|
|
8167
8495
|
gap: var(--space-12);
|
|
8168
|
-
min-width:
|
|
8496
|
+
min-width: 160px;
|
|
8169
8497
|
margin: 0;
|
|
8170
8498
|
font-size: var(--type-label-size);
|
|
8171
8499
|
font-weight: 500;
|
|
8172
8500
|
line-height: var(--type-label-line);
|
|
8173
8501
|
}
|
|
8174
8502
|
|
|
8503
|
+
.rds-savingbar__text {
|
|
8504
|
+
display: -webkit-box;
|
|
8505
|
+
flex: 1;
|
|
8506
|
+
min-width: 0;
|
|
8507
|
+
overflow: hidden;
|
|
8508
|
+
-webkit-box-orient: vertical;
|
|
8509
|
+
-webkit-line-clamp: 2;
|
|
8510
|
+
line-clamp: 2;
|
|
8511
|
+
}
|
|
8512
|
+
|
|
8175
8513
|
.rds-savingbar__icon {
|
|
8176
8514
|
display: inline-flex;
|
|
8177
8515
|
flex: none;
|
|
@@ -8202,10 +8540,74 @@ input:focus-visible + .rds-radio__circle {
|
|
|
8202
8540
|
|
|
8203
8541
|
.rds-savingbar__actions {
|
|
8204
8542
|
display: flex;
|
|
8205
|
-
flex
|
|
8543
|
+
flex: none;
|
|
8206
8544
|
gap: var(--space-8);
|
|
8207
8545
|
}
|
|
8208
8546
|
|
|
8547
|
+
.rds-savingbar__details {
|
|
8548
|
+
position: relative;
|
|
8549
|
+
display: none;
|
|
8550
|
+
flex: 1;
|
|
8551
|
+
align-items: center;
|
|
8552
|
+
gap: var(--space-12);
|
|
8553
|
+
min-width: 0;
|
|
8554
|
+
margin: 0;
|
|
8555
|
+
padding: 0;
|
|
8556
|
+
border: 0;
|
|
8557
|
+
border-radius: var(--radius-focus);
|
|
8558
|
+
background: none;
|
|
8559
|
+
color: inherit;
|
|
8560
|
+
font: inherit;
|
|
8561
|
+
text-align: start;
|
|
8562
|
+
cursor: pointer;
|
|
8563
|
+
}
|
|
8564
|
+
|
|
8565
|
+
/* The touch area: 44 tall around the message, invisible. */
|
|
8566
|
+
.rds-savingbar__details::after {
|
|
8567
|
+
content: '';
|
|
8568
|
+
position: absolute;
|
|
8569
|
+
top: 50%;
|
|
8570
|
+
right: 0;
|
|
8571
|
+
left: 0;
|
|
8572
|
+
min-height: 44px;
|
|
8573
|
+
height: 100%;
|
|
8574
|
+
transform: translateY(-50%);
|
|
8575
|
+
}
|
|
8576
|
+
|
|
8577
|
+
.rds-savingbar__details:hover .rds-savingbar__text {
|
|
8578
|
+
text-decoration: underline;
|
|
8579
|
+
}
|
|
8580
|
+
|
|
8581
|
+
.rds-savingbar__details:focus-visible {
|
|
8582
|
+
outline: var(--focus-ring-width) solid var(--savingbar-focus-ring);
|
|
8583
|
+
outline-offset: var(--focus-ring-width);
|
|
8584
|
+
}
|
|
8585
|
+
|
|
8586
|
+
@media (max-width: 1023px) {
|
|
8587
|
+
.rds-savingbar__row {
|
|
8588
|
+
flex-direction: column;
|
|
8589
|
+
align-items: stretch;
|
|
8590
|
+
}
|
|
8591
|
+
|
|
8592
|
+
.rds-savingbar__message {
|
|
8593
|
+
flex: none;
|
|
8594
|
+
min-width: 0;
|
|
8595
|
+
}
|
|
8596
|
+
|
|
8597
|
+
.rds-savingbar__actions > * {
|
|
8598
|
+
flex: 1 1 0;
|
|
8599
|
+
min-width: 0;
|
|
8600
|
+
}
|
|
8601
|
+
|
|
8602
|
+
.rds-savingbar__message--details > .rds-savingbar__text {
|
|
8603
|
+
display: none;
|
|
8604
|
+
}
|
|
8605
|
+
|
|
8606
|
+
.rds-savingbar__details {
|
|
8607
|
+
display: flex;
|
|
8608
|
+
}
|
|
8609
|
+
}
|
|
8610
|
+
|
|
8209
8611
|
@media (forced-colors: active) {
|
|
8210
8612
|
.rds-savingbar {
|
|
8211
8613
|
border-top: var(--border-width) solid CanvasText;
|
|
@@ -8573,9 +8975,12 @@ input:focus-visible + .rds-radio__circle {
|
|
|
8573
8975
|
/*
|
|
8574
8976
|
* Sidebar (Navigation collection, sidebar/*): 240 wide (64 collapsed), 12 × 8 inside, a 1px border on the right.
|
|
8575
8977
|
* Header: the brand mark (24) and the module (16/24 medium), 10 apart, 44 tall. Entries of 44, 12 inside, 12 between
|
|
8576
|
-
* icon (20) and label (14/20 medium), 4 apart; the current one on the brand tint
|
|
8978
|
+
* icon (20) and label (14/20 medium), 4 apart; the current one on the brand tint, its label semibold in
|
|
8979
|
+
* sidebar/item/label/active and a 3 × 20 marker on the left in sidebar/item/indicator, so the current entry does not
|
|
8980
|
+
* rest on colour alone.
|
|
8577
8981
|
* Section labels 11/14 bold, 16 above and 6 below, with a 14 chevron. Foot: who is signed in (12/16) and Sair.
|
|
8578
|
-
*
|
|
8982
|
+
* No tone: the Sidebar follows its container's mode. The brand-coloured bar is a `.ds-plate` around it (the brand
|
|
8983
|
+
* mode), the dark one a `.dark`.
|
|
8579
8984
|
*/
|
|
8580
8985
|
.rds-sidebar {
|
|
8581
8986
|
--_background: var(--sidebar-background);
|
|
@@ -8601,21 +9006,6 @@ input:focus-visible + .rds-radio__circle {
|
|
|
8601
9006
|
font-family: var(--type-font-stack);
|
|
8602
9007
|
}
|
|
8603
9008
|
|
|
8604
|
-
.rds-sidebar--dark {
|
|
8605
|
-
--_background: var(--sidebar-dark-background);
|
|
8606
|
-
--_label: var(--sidebar-dark-item-label-default);
|
|
8607
|
-
--_label-hover: var(--sidebar-dark-item-label-hover);
|
|
8608
|
-
--_hover: var(--sidebar-dark-item-background-hover);
|
|
8609
|
-
--_module: var(--sidebar-dark-module);
|
|
8610
|
-
--_user: var(--sidebar-dark-user);
|
|
8611
|
-
--_section: var(--sidebar-dark-section-label);
|
|
8612
|
-
--_count: var(--sidebar-dark-item-label-default);
|
|
8613
|
-
/* No dark ring token: the strongest text over the brand, which is what the ring needs to show there. */
|
|
8614
|
-
--_ring: var(--sidebar-dark-module);
|
|
8615
|
-
|
|
8616
|
-
border-right-color: transparent;
|
|
8617
|
-
}
|
|
8618
|
-
|
|
8619
9009
|
.rds-sidebar--collapsed {
|
|
8620
9010
|
width: var(--space-64);
|
|
8621
9011
|
}
|
|
@@ -8678,6 +9068,7 @@ input:focus-visible + .rds-radio__circle {
|
|
|
8678
9068
|
}
|
|
8679
9069
|
|
|
8680
9070
|
.rds-sidebar__item {
|
|
9071
|
+
position: relative;
|
|
8681
9072
|
box-sizing: border-box;
|
|
8682
9073
|
display: flex;
|
|
8683
9074
|
align-items: center;
|
|
@@ -8737,8 +9128,21 @@ input:focus-visible + .rds-radio__circle {
|
|
|
8737
9128
|
color: var(--sidebar-item-label-active);
|
|
8738
9129
|
}
|
|
8739
9130
|
|
|
8740
|
-
.rds-sidebar__item[aria-current='page'] .rds-
|
|
8741
|
-
|
|
9131
|
+
.rds-sidebar__item[aria-current='page'] .rds-sidebar__label {
|
|
9132
|
+
font-weight: 600;
|
|
9133
|
+
}
|
|
9134
|
+
|
|
9135
|
+
/* Figma .sidebar/item state=active: the marker, 3 × 20, on the left edge, vertically centred, radius 2. */
|
|
9136
|
+
.rds-sidebar__item[aria-current='page']::before {
|
|
9137
|
+
content: '';
|
|
9138
|
+
position: absolute;
|
|
9139
|
+
inset-inline-start: 0;
|
|
9140
|
+
top: 50%;
|
|
9141
|
+
width: 3px;
|
|
9142
|
+
height: var(--size-20);
|
|
9143
|
+
border-radius: 2px;
|
|
9144
|
+
background: var(--sidebar-item-indicator);
|
|
9145
|
+
transform: translateY(-50%);
|
|
8742
9146
|
}
|
|
8743
9147
|
|
|
8744
9148
|
.rds-sidebar__item:focus-visible,
|
|
@@ -8772,9 +9176,12 @@ input:focus-visible + .rds-radio__circle {
|
|
|
8772
9176
|
cursor: pointer;
|
|
8773
9177
|
}
|
|
8774
9178
|
|
|
9179
|
+
/* Figma .sidebar/section: label in caps with 6% tracking; the count keeps its own case and no tracking. */
|
|
8775
9180
|
.rds-sidebar__section-label {
|
|
8776
9181
|
flex: 1;
|
|
8777
9182
|
min-width: 0;
|
|
9183
|
+
text-transform: uppercase;
|
|
9184
|
+
letter-spacing: 0.06em;
|
|
8778
9185
|
}
|
|
8779
9186
|
|
|
8780
9187
|
.rds-sidebar__section-count {
|
|
@@ -8804,6 +9211,10 @@ input:focus-visible + .rds-radio__circle {
|
|
|
8804
9211
|
.rds-sidebar__item[aria-current='page'] {
|
|
8805
9212
|
outline: var(--border-width) solid CanvasText;
|
|
8806
9213
|
}
|
|
9214
|
+
|
|
9215
|
+
.rds-sidebar__item[aria-current='page']::before {
|
|
9216
|
+
background: Highlight;
|
|
9217
|
+
}
|
|
8807
9218
|
}
|
|
8808
9219
|
|
|
8809
9220
|
/* components/skeleton.css */
|
|
@@ -9197,6 +9608,7 @@ input:focus-visible + .rds-radio__circle {
|
|
|
9197
9608
|
/*
|
|
9198
9609
|
* Stat (Content collection, stat/*): 8 between the text and the sparkline. Text: the label 14/20, the row (the
|
|
9199
9610
|
* value in type/value bold and the Delta, 8 apart, wrapping 4 below) and the caption 12/16, 4 apart.
|
|
9611
|
+
* tone neutral (default), success, danger, warning; muted greys a zero out.
|
|
9200
9612
|
* framed=true: 16 inside, a 1px border, corners radius/container. framed=false (the SummaryBar cell): 12 16, no border.
|
|
9201
9613
|
*/
|
|
9202
9614
|
.rds-stat {
|
|
@@ -9218,11 +9630,11 @@ input:focus-visible + .rds-radio__circle {
|
|
|
9218
9630
|
border-radius: var(--radius-container);
|
|
9219
9631
|
}
|
|
9220
9632
|
|
|
9221
|
-
.rds-stat--
|
|
9633
|
+
.rds-stat--success {
|
|
9222
9634
|
--_value: var(--stat-value-positive);
|
|
9223
9635
|
}
|
|
9224
9636
|
|
|
9225
|
-
.rds-stat--
|
|
9637
|
+
.rds-stat--danger {
|
|
9226
9638
|
--_value: var(--stat-value-negative);
|
|
9227
9639
|
}
|
|
9228
9640
|
|
|
@@ -9230,6 +9642,7 @@ input:focus-visible + .rds-radio__circle {
|
|
|
9230
9642
|
--_value: var(--stat-value-warning);
|
|
9231
9643
|
}
|
|
9232
9644
|
|
|
9645
|
+
/* muted (zero, nothing to see) wins over the tone: the Figma draws it only on neutral. */
|
|
9233
9646
|
.rds-stat--muted {
|
|
9234
9647
|
--_value: var(--stat-value-muted);
|
|
9235
9648
|
}
|
|
@@ -9456,6 +9869,35 @@ input:focus-visible + .rds-radio__circle {
|
|
|
9456
9869
|
}
|
|
9457
9870
|
}
|
|
9458
9871
|
|
|
9872
|
+
/* components/stepper.css */
|
|
9873
|
+
/* @tokens stepper */
|
|
9874
|
+
/*
|
|
9875
|
+
* Stepper: no tokens of its own; the Card and the Buttons bring theirs. A pill (radius/full) of 44 Buttons,
|
|
9876
|
+
* 4 inside and 4 apart, raised by elevation/overlay because it floats over the page. A vertical Separator, 24
|
|
9877
|
+
* tall, before the action.
|
|
9878
|
+
*/
|
|
9879
|
+
.rds-stepper {
|
|
9880
|
+
flex-direction: row;
|
|
9881
|
+
align-items: center;
|
|
9882
|
+
gap: var(--space-4);
|
|
9883
|
+
width: max-content;
|
|
9884
|
+
max-width: 100%;
|
|
9885
|
+
padding: var(--space-4);
|
|
9886
|
+
border-radius: var(--radius-full);
|
|
9887
|
+
box-shadow: var(--elevation-overlay);
|
|
9888
|
+
overflow-x: auto;
|
|
9889
|
+
}
|
|
9890
|
+
|
|
9891
|
+
.rds-stepper > .rds-button {
|
|
9892
|
+
flex: none;
|
|
9893
|
+
border-radius: var(--radius-full);
|
|
9894
|
+
}
|
|
9895
|
+
|
|
9896
|
+
.rds-stepper > .rds-stepper__divider {
|
|
9897
|
+
align-self: center;
|
|
9898
|
+
height: var(--size-24);
|
|
9899
|
+
}
|
|
9900
|
+
|
|
9459
9901
|
/* components/summary-bar.css */
|
|
9460
9902
|
/* @tokens summary-bar */
|
|
9461
9903
|
/*
|
|
@@ -10390,23 +10832,13 @@ tbody > tr:last-child > .rds-table__status {
|
|
|
10390
10832
|
}
|
|
10391
10833
|
}
|
|
10392
10834
|
|
|
10393
|
-
/* components/toggle-card-compact.css */
|
|
10394
|
-
/* @tokens toggle-card-compact */
|
|
10395
|
-
/*
|
|
10396
|
-
* ToggleCardCompact: no tokens of its own; the Item, the Switch and the IconButton bring theirs. The pencil and the
|
|
10397
|
-
* Switch 8 apart at the end of the row.
|
|
10398
|
-
*/
|
|
10399
|
-
.rds-toggle-card-compact__actions {
|
|
10400
|
-
display: inline-flex;
|
|
10401
|
-
align-items: center;
|
|
10402
|
-
gap: var(--space-8);
|
|
10403
|
-
}
|
|
10404
|
-
|
|
10405
10835
|
/* components/toggle-card.css */
|
|
10406
10836
|
/* @tokens toggle-card */
|
|
10407
10837
|
/*
|
|
10408
|
-
* ToggleCard: no tokens of its own; the Card
|
|
10409
|
-
* bottom); the options under it pad 16, 16 apart,
|
|
10838
|
+
* ToggleCard: no tokens of its own; the Card, the Item, the Switch and the IconButton bring theirs.
|
|
10839
|
+
* layout=default: the Switch row pads 16 on the sides (4 top and bottom); the options under it pad 16, 16 apart,
|
|
10840
|
+
* after a line in the card's border colour.
|
|
10841
|
+
* layout=compact: the outline Item; the pencil and the Switch 8 apart at the end of the row.
|
|
10410
10842
|
*/
|
|
10411
10843
|
.rds-toggle-card__header {
|
|
10412
10844
|
padding: var(--space-4) var(--space-16);
|
|
@@ -10420,6 +10852,12 @@ tbody > tr:last-child > .rds-table__status {
|
|
|
10420
10852
|
border-top: var(--border-width) solid var(--card-border);
|
|
10421
10853
|
}
|
|
10422
10854
|
|
|
10855
|
+
.rds-toggle-card__actions {
|
|
10856
|
+
display: inline-flex;
|
|
10857
|
+
align-items: center;
|
|
10858
|
+
gap: var(--space-8);
|
|
10859
|
+
}
|
|
10860
|
+
|
|
10423
10861
|
/* components/toggle-group.css */
|
|
10424
10862
|
/* @tokens toggle-group */
|
|
10425
10863
|
/* ToggleGroup: Toggles side by side, 4 apart (Figma: slot items, gap space/4). No tokens of its own. */
|