@redseed/redseed-ui-tailwindcss 7.30.2 → 7.32.0
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/components/card.css +7 -0
- package/components/column_picker.css +27 -11
- package/components/form_field_checkbox.css +47 -1
- package/components/loader.css +4 -0
- package/components/message_box.css +4 -0
- package/components/meta_info.css +4 -0
- package/components/metric_card.css +6 -0
- package/components/section_header.css +6 -1
- package/components/section_slider.css +1 -1
- package/components/skeleton.css +4 -0
- package/components/th.css +32 -2
- package/package.json +1 -1
package/components/card.css
CHANGED
|
@@ -100,6 +100,13 @@
|
|
|
100
100
|
@apply focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-border-primary outline-hidden;
|
|
101
101
|
}
|
|
102
102
|
|
|
103
|
+
/* Persistent selection ring for the pressed/current state. The ring (a shape
|
|
104
|
+
boundary, present vs absent) conveys the active state without relying on
|
|
105
|
+
colour alone (WCAG 1.4.1). */
|
|
106
|
+
.rsui-card__action-layer--active {
|
|
107
|
+
@apply ring-2 ring-offset-2 ring-brand-500;
|
|
108
|
+
}
|
|
109
|
+
|
|
103
110
|
.rsui-card__action-layer-label {
|
|
104
111
|
@apply sr-only;
|
|
105
112
|
}
|
|
@@ -1,3 +1,14 @@
|
|
|
1
|
+
/* The picker uses a ButtonTertiary trigger on desktop and a ButtonSecondary
|
|
2
|
+
trigger on mobile so the affordance reads as tappable on touch devices
|
|
3
|
+
(where the tertiary's hover border never fires). */
|
|
4
|
+
.rsui-column-picker__trigger--desktop {
|
|
5
|
+
@apply hidden md:inline-flex;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
.rsui-column-picker__trigger--mobile {
|
|
9
|
+
@apply inline-flex md:hidden;
|
|
10
|
+
}
|
|
11
|
+
|
|
1
12
|
.rsui-column-picker__count {
|
|
2
13
|
@apply inline-flex items-center px-1.5 ml-1 text-xs rounded-md bg-background-disabled text-text-secondary;
|
|
3
14
|
}
|
|
@@ -7,25 +18,30 @@
|
|
|
7
18
|
}
|
|
8
19
|
|
|
9
20
|
.rsui-column-picker__item {
|
|
10
|
-
@apply flex items-center
|
|
21
|
+
@apply flex items-center px-2 py-1.5 rounded-md cursor-pointer text-sm text-text-primary;
|
|
11
22
|
@apply hover:bg-background-secondary;
|
|
12
23
|
@apply focus-visible:bg-background-secondary focus-visible:outline-none;
|
|
13
24
|
}
|
|
14
25
|
|
|
15
|
-
.rsui-column-
|
|
16
|
-
@apply
|
|
17
|
-
@apply
|
|
18
|
-
@apply transition-colors;
|
|
26
|
+
.rsui-column-picker__item--disabled {
|
|
27
|
+
@apply cursor-default text-text-disabled;
|
|
28
|
+
@apply hover:bg-transparent;
|
|
19
29
|
}
|
|
20
30
|
|
|
21
|
-
|
|
22
|
-
|
|
31
|
+
/* The checkbox is presentational (the row is the control), so the wrapper
|
|
32
|
+
carries the row's pointer cursor across the whole item. */
|
|
33
|
+
.rsui-column-picker__checkbox {
|
|
34
|
+
@apply contents;
|
|
23
35
|
}
|
|
24
36
|
|
|
25
|
-
|
|
26
|
-
|
|
37
|
+
/* Vertically centre the checkbox against its single-line label in the dense
|
|
38
|
+
menu row (the form-field default top-aligns for multi-line labels). */
|
|
39
|
+
.rsui-column-picker__item .rsui-form-field-checkbox__checkbox {
|
|
40
|
+
@apply items-center;
|
|
27
41
|
}
|
|
28
42
|
|
|
29
|
-
|
|
30
|
-
|
|
43
|
+
/* Required columns pass `disabled` to the checkbox (native locked styling);
|
|
44
|
+
also grey the label so the whole row reads as locked. */
|
|
45
|
+
.rsui-column-picker__item--disabled .rsui-form-field-checkbox__label {
|
|
46
|
+
@apply text-text-disabled;
|
|
31
47
|
}
|
|
@@ -20,5 +20,51 @@
|
|
|
20
20
|
}
|
|
21
21
|
|
|
22
22
|
.rsui-form-field-checkbox__check svg {
|
|
23
|
-
@apply size-full relative z-1 pointer-events-none;
|
|
23
|
+
@apply size-full relative z-1 pointer-events-none stroke-[2.5] origin-center;
|
|
24
|
+
/* Short, cute draw-on: the tick strokes itself in with a tiny pop.
|
|
25
|
+
dasharray is set a touch above the check path length so the resting
|
|
26
|
+
state has no gap. Disabled under reduced-motion below. */
|
|
27
|
+
stroke-dasharray: 30;
|
|
28
|
+
animation: rsui-checkbox-tick 200ms ease-out;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
@keyframes rsui-checkbox-tick {
|
|
32
|
+
0% { stroke-dashoffset: 30; transform: scale(0.8); }
|
|
33
|
+
60% { transform: scale(1.06); }
|
|
34
|
+
100% { stroke-dashoffset: 0; transform: scale(1); }
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
@media (prefers-reduced-motion: reduce) {
|
|
38
|
+
.rsui-form-field-checkbox__check svg {
|
|
39
|
+
animation: none;
|
|
40
|
+
stroke-dasharray: none;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
/* Smaller variants — for dense surfaces like the table column picker dropdown.
|
|
45
|
+
Sizes follow the system scale: sm = 16px, xs = 12px (default is 24px).
|
|
46
|
+
Declared after the base rules so they win on equal specificity; the radius
|
|
47
|
+
is also set on the input, since the input draws the visible bordered box. */
|
|
48
|
+
.rsui-form-field-checkbox__check--sm {
|
|
49
|
+
@apply size-4 rounded-md;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
.rsui-form-field-checkbox__check--sm input[type="checkbox"] {
|
|
53
|
+
@apply rounded-md;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
.rsui-form-field-checkbox__label--sm {
|
|
57
|
+
@apply leading-5 text-sm;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
.rsui-form-field-checkbox__check--xs {
|
|
61
|
+
@apply size-3 rounded;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
.rsui-form-field-checkbox__check--xs input[type="checkbox"] {
|
|
65
|
+
@apply rounded;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
.rsui-form-field-checkbox__label--xs {
|
|
69
|
+
@apply leading-4 text-xs;
|
|
24
70
|
}
|
package/components/loader.css
CHANGED
|
@@ -36,4 +36,8 @@
|
|
|
36
36
|
|
|
37
37
|
.rsui-message-box__close-icon {
|
|
38
38
|
@apply size-10 cursor-pointer rounded-lg flex items-center justify-center hover:bg-border-secondary transition duration-200;
|
|
39
|
+
/* Reset native <button> chrome so it matches the prior inline affordance ... */
|
|
40
|
+
@apply bg-transparent border-0 p-0;
|
|
41
|
+
/* ... while keeping a visible keyboard focus ring (lib convention). */
|
|
42
|
+
@apply outline-hidden focus-visible:ring-2 focus-visible:ring-offset-2 focus-visible:ring-border-primary;
|
|
39
43
|
}
|
package/components/meta_info.css
CHANGED
|
@@ -16,6 +16,10 @@
|
|
|
16
16
|
|
|
17
17
|
.rsui-meta-info__help {
|
|
18
18
|
@apply flex items-center justify-center text-text-secondary size-4 cursor-pointer;
|
|
19
|
+
/* Reset native <button> chrome so it matches the prior inline affordance ... */
|
|
20
|
+
@apply bg-transparent border-0 p-0 rounded outline-hidden;
|
|
21
|
+
/* ... while keeping a visible keyboard focus ring (lib convention). */
|
|
22
|
+
@apply focus-visible:ring-offset-2 focus-visible:ring-2 focus-visible:ring-border-primary;
|
|
19
23
|
}
|
|
20
24
|
|
|
21
25
|
.rsui-meta-info__value {
|
|
@@ -31,4 +31,10 @@
|
|
|
31
31
|
|
|
32
32
|
.rsui-metric-card__label {
|
|
33
33
|
@apply text-text-tertiary text-base font-semibold;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
/* Active/selected toggle state. The Card action layer supplies the non-colour
|
|
37
|
+
selection ring (WCAG 1.4.1); the brand number is colour reinforcement only. */
|
|
38
|
+
.rsui-metric-card--active .rsui-metric-card__number {
|
|
39
|
+
@apply text-text-brand;
|
|
34
40
|
}
|
|
@@ -24,10 +24,15 @@
|
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
.rsui-section-header__title {
|
|
27
|
-
@apply text-2xl font-bold line-clamp-2 md:line-clamp-1 text-text-primary;
|
|
28
27
|
@apply flex items-center gap-space-xs;
|
|
29
28
|
}
|
|
30
29
|
|
|
30
|
+
.rsui-section-header__title-text {
|
|
31
|
+
@apply text-2xl font-bold line-clamp-2 md:line-clamp-1 text-text-primary;
|
|
32
|
+
/* Reset heading UA margins so an <h1>-<h6> title matches the previous <div> */
|
|
33
|
+
@apply m-0 min-w-0;
|
|
34
|
+
}
|
|
35
|
+
|
|
31
36
|
.rsui-section-header__badge {
|
|
32
37
|
@apply ml-space-xs flex items-center;
|
|
33
38
|
}
|
package/components/skeleton.css
CHANGED
package/components/th.css
CHANGED
|
@@ -48,14 +48,44 @@
|
|
|
48
48
|
}
|
|
49
49
|
|
|
50
50
|
.rsui-th--sortable {
|
|
51
|
-
|
|
52
|
-
|
|
51
|
+
/* Strip cell-level padding so the inner button can own the full click area.
|
|
52
|
+
Without this, pointer events on the th padding area don't reach the button,
|
|
53
|
+
breaking the advertised cursor-pointer target. Button gets matching padding. */
|
|
54
|
+
@apply cursor-pointer p-0;
|
|
53
55
|
}
|
|
54
56
|
|
|
55
57
|
.rsui-th__content {
|
|
56
58
|
@apply inline-flex gap-1 items-center;
|
|
57
59
|
}
|
|
58
60
|
|
|
61
|
+
/* Sortable header trigger — a real <button> reset to match the header text,
|
|
62
|
+
so it reads as activatable to AT while looking identical to a plain header.
|
|
63
|
+
flex + w-full + py-3/px-5 make the button fill the entire cell (including the
|
|
64
|
+
padding area that .rsui-th strips above), so every pixel of the cell is a
|
|
65
|
+
valid click target. Focus ring lives here (the th itself is no longer focusable).
|
|
66
|
+
Default justify-start matches the base left-aligned header. */
|
|
67
|
+
.rsui-th__button {
|
|
68
|
+
@apply flex w-full gap-1 items-center justify-start;
|
|
69
|
+
@apply py-3 px-5 cursor-pointer m-0;
|
|
70
|
+
@apply focus-visible:outline-2 focus-visible:outline-border-primary;
|
|
71
|
+
font: inherit;
|
|
72
|
+
color: inherit;
|
|
73
|
+
background: none;
|
|
74
|
+
border: 0;
|
|
75
|
+
text-align: inherit;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
/* Honor column alignment inside sortable-header buttons.
|
|
79
|
+
The full-width button keeps the click area; justify-* repositions
|
|
80
|
+
the label+icon group within that area to match the column alignment. */
|
|
81
|
+
.rsui-th--center .rsui-th__button {
|
|
82
|
+
@apply justify-center;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
.rsui-th--right .rsui-th__button {
|
|
86
|
+
@apply justify-end;
|
|
87
|
+
}
|
|
88
|
+
|
|
59
89
|
.rsui-th__sort {
|
|
60
90
|
@apply shrink-0 flex items-center justify-center;
|
|
61
91
|
}
|