@agorapulse/ui-theme 20.1.19 → 20.1.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/agorapulse-ui-theme-20.1.21.tgz +0 -0
- package/assets/desktop_variables.css +10 -0
- package/assets/mobile_variables.css +10 -0
- package/assets/style/_tooltip.scss +6 -1
- package/assets/style/css-ui/_accordion.scss +54 -0
- package/assets/style/css-ui/_action-dropdown.scss +163 -0
- package/assets/style/css-ui/_avatar-group.scss +61 -0
- package/assets/style/css-ui/_avatar.scss +183 -0
- package/assets/style/css-ui/{badge.css → _badge.scss} +10 -12
- package/assets/style/css-ui/_button.scss +258 -0
- package/assets/style/css-ui/_card.scss +17 -0
- package/assets/style/css-ui/_checkbox.scss +164 -0
- package/assets/style/css-ui/_counter.scss +76 -0
- package/assets/style/css-ui/_datepicker.scss +307 -0
- package/assets/style/css-ui/_dialog.scss +74 -0
- package/assets/style/css-ui/_dot-stepper.scss +68 -0
- package/assets/style/{_helpers.scss → css-ui/_helpers.scss} +14 -13
- package/assets/style/css-ui/_icon-button.scss +162 -0
- package/assets/style/css-ui/_infobox.scss +154 -0
- package/assets/style/css-ui/_input.scss +129 -0
- package/assets/style/css-ui/_label.scss +95 -0
- package/assets/style/css-ui/_link.scss +86 -0
- package/assets/style/css-ui/_list-panel.scss +73 -0
- package/assets/style/css-ui/_loader.scss +173 -0
- package/assets/style/css-ui/_mixins.scss +50 -0
- package/assets/style/css-ui/_pagination.scss +177 -0
- package/assets/style/css-ui/_radio-card.scss +200 -0
- package/assets/style/css-ui/_radio.scss +107 -0
- package/assets/style/css-ui/{select.css → _select.scss} +290 -298
- package/assets/style/css-ui/_selection-dropdown.scss +183 -0
- package/assets/style/css-ui/_snackbar.scss +161 -0
- package/assets/style/css-ui/_split-button.scss +74 -0
- package/assets/style/css-ui/_status.scss +71 -0
- package/assets/style/css-ui/_stepper.scss +113 -0
- package/assets/style/css-ui/_table.scss +325 -0
- package/assets/style/css-ui/_tabs.scss +182 -0
- package/assets/style/css-ui/_tag.scss +169 -0
- package/assets/style/css-ui/_textarea.scss +121 -0
- package/assets/style/css-ui/_toggle.scss +132 -0
- package/assets/style/css-ui/_tooltip.scss +122 -0
- package/assets/style/{_mat-typography.scss → css-ui/_typography.scss} +34 -26
- package/assets/style/css-ui/font-face.css +43 -0
- package/assets/style/css-ui/index.css +4907 -27
- package/assets/style/css-ui/index.css.map +1 -0
- package/assets/style/css-ui/index.scss +39 -0
- package/assets/style/theme.scss +9 -2
- package/package.json +17 -2
- package/src/tokens/system/icon.json +33 -0
- package/agorapulse-ui-theme-20.1.19.tgz +0 -0
- package/assets/style/css-ui/action-dropdown.css +0 -172
- package/assets/style/css-ui/avatar.css +0 -199
- package/assets/style/css-ui/button.css +0 -446
- package/assets/style/css-ui/checkbox.css +0 -170
- package/assets/style/css-ui/counter.css +0 -73
- package/assets/style/css-ui/datepicker.css +0 -294
- package/assets/style/css-ui/dot-stepper.css +0 -67
- package/assets/style/css-ui/infobox.css +0 -163
- package/assets/style/css-ui/input.css +0 -119
- package/assets/style/css-ui/label.css +0 -67
- package/assets/style/css-ui/link.css +0 -92
- package/assets/style/css-ui/loader.css +0 -247
- package/assets/style/css-ui/pagination.css +0 -161
- package/assets/style/css-ui/radio.css +0 -109
- package/assets/style/css-ui/snackbar.css +0 -166
- package/assets/style/css-ui/status.css +0 -87
- package/assets/style/css-ui/stepper.css +0 -123
- package/assets/style/css-ui/table.css +0 -305
- package/assets/style/css-ui/tabs.css +0 -188
- package/assets/style/css-ui/tag.css +0 -171
- package/assets/style/css-ui/textarea.css +0 -158
- package/assets/style/css-ui/toggle.css +0 -161
- package/assets/style/css-ui/tooltip.css +0 -228
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
// Shared mixins for css-ui components
|
|
2
|
+
|
|
3
|
+
// Focus ring standard
|
|
4
|
+
@mixin focus-ring {
|
|
5
|
+
outline: 2px solid var(--ref-color-electric-blue-100);
|
|
6
|
+
outline-offset: 1px;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
// Focus ring with 3px width (checkbox, radio)
|
|
10
|
+
@mixin focus-ring-3px {
|
|
11
|
+
outline: 3px solid var(--ref-color-electric-blue-100);
|
|
12
|
+
outline-offset: 1px;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
// Visually hidden, accessible to screen readers
|
|
16
|
+
@mixin sr-only {
|
|
17
|
+
position: absolute;
|
|
18
|
+
clip: rect(0, 0, 0, 0);
|
|
19
|
+
width: 1px;
|
|
20
|
+
height: 1px;
|
|
21
|
+
margin: -1px;
|
|
22
|
+
padding: 0;
|
|
23
|
+
border: 0;
|
|
24
|
+
overflow: hidden;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
// Truncate text with ellipsis
|
|
28
|
+
@mixin truncate {
|
|
29
|
+
white-space: nowrap;
|
|
30
|
+
overflow: hidden;
|
|
31
|
+
text-overflow: ellipsis;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// Fixed size (width + height + min + max)
|
|
35
|
+
@mixin fixed-size($size) {
|
|
36
|
+
width: $size;
|
|
37
|
+
height: $size;
|
|
38
|
+
min-width: $size;
|
|
39
|
+
min-height: $size;
|
|
40
|
+
max-width: $size;
|
|
41
|
+
max-height: $size;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// Text-style shorthand
|
|
45
|
+
@mixin text-style($name) {
|
|
46
|
+
font-family: var(--sys-text-style-#{$name}-font-family);
|
|
47
|
+
font-size: var(--sys-text-style-#{$name}-size);
|
|
48
|
+
font-weight: var(--sys-text-style-#{$name}-weight);
|
|
49
|
+
line-height: var(--sys-text-style-#{$name}-line-height);
|
|
50
|
+
}
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
// Agorapulse Pagination Styles
|
|
2
|
+
@use 'mixins' as m;
|
|
3
|
+
@use 'ui-symbol/icons/build/ap-icons-data' as icons;
|
|
4
|
+
|
|
5
|
+
.ap-pagination {
|
|
6
|
+
--paginator-button-size: 36px;
|
|
7
|
+
|
|
8
|
+
display: flex;
|
|
9
|
+
align-items: center;
|
|
10
|
+
gap: var(--ref-spacing-lg);
|
|
11
|
+
width: 100%;
|
|
12
|
+
justify-content: space-between;
|
|
13
|
+
|
|
14
|
+
// Item count display — implicit > span
|
|
15
|
+
> span {
|
|
16
|
+
font-weight: var(--ref-font-weight-regular);
|
|
17
|
+
font-size: var(--ref-font-size-sm);
|
|
18
|
+
line-height: var(--ref-line-height-sm);
|
|
19
|
+
color: var(--ref-color-grey-60);
|
|
20
|
+
white-space: nowrap;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
// Page numbers container (includes nav buttons + page buttons)
|
|
25
|
+
.ap-pagination-pages {
|
|
26
|
+
display: flex;
|
|
27
|
+
align-items: center;
|
|
28
|
+
justify-self: center;
|
|
29
|
+
color: var(--ref-color-electric-blue-100);
|
|
30
|
+
gap: var(--ref-spacing-xxxs);
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
// Navigation buttons (prev/next)
|
|
34
|
+
.ap-pagination-nav {
|
|
35
|
+
display: grid;
|
|
36
|
+
place-content: center;
|
|
37
|
+
@include m.fixed-size(var(--paginator-button-size));
|
|
38
|
+
border-radius: var(--ref-border-radius-sm);
|
|
39
|
+
background: transparent;
|
|
40
|
+
border: none;
|
|
41
|
+
color: var(--ref-color-electric-blue-100);
|
|
42
|
+
padding: 0;
|
|
43
|
+
|
|
44
|
+
&:not(:disabled) {
|
|
45
|
+
cursor: pointer;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
&:disabled {
|
|
49
|
+
pointer-events: none;
|
|
50
|
+
color: var(--ref-color-grey-40);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
&:hover:not(:disabled) {
|
|
54
|
+
background: var(--ref-color-electric-blue-10);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
&:active:not(:disabled) {
|
|
58
|
+
background: var(--ref-color-electric-blue-20);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
@media (hover: hover) {
|
|
62
|
+
&:focus:not(:disabled):not(:active) {
|
|
63
|
+
@include m.focus-ring;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
// Nav icon — implicit > i
|
|
68
|
+
> i {
|
|
69
|
+
width: 16px;
|
|
70
|
+
height: 16px;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// Arrow icon via ::before (no <i> needed)
|
|
74
|
+
&::before {
|
|
75
|
+
@include icons.icon-base;
|
|
76
|
+
width: 16px;
|
|
77
|
+
height: 16px;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
// Arrow direction by position — first nav = left, last nav = right
|
|
82
|
+
.ap-pagination-pages > .ap-pagination-nav:first-child::before {
|
|
83
|
+
@include icons.icon('arrow-left');
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
.ap-pagination-pages > .ap-pagination-nav:last-child::before {
|
|
87
|
+
@include icons.icon('arrow-right');
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// Individual page button
|
|
91
|
+
.ap-pagination-page {
|
|
92
|
+
@include m.fixed-size(var(--paginator-button-size));
|
|
93
|
+
border-radius: var(--ref-border-radius-sm);
|
|
94
|
+
background: transparent;
|
|
95
|
+
display: flex;
|
|
96
|
+
align-items: center;
|
|
97
|
+
justify-content: center;
|
|
98
|
+
border: none;
|
|
99
|
+
box-sizing: border-box;
|
|
100
|
+
color: var(--ref-color-electric-blue-100);
|
|
101
|
+
font-family: var(--ref-font-family);
|
|
102
|
+
font-weight: var(--ref-font-weight-regular);
|
|
103
|
+
font-size: var(--ref-font-size-sm);
|
|
104
|
+
line-height: var(--ref-line-height-sm);
|
|
105
|
+
padding: 0;
|
|
106
|
+
|
|
107
|
+
&:hover:not(.active) {
|
|
108
|
+
cursor: pointer;
|
|
109
|
+
background-color: var(--ref-color-electric-blue-10);
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
@media (hover: hover) {
|
|
113
|
+
&:focus:not(.disabled):not(:active) {
|
|
114
|
+
@include m.focus-ring;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
&:active:not(.active) {
|
|
119
|
+
background-color: var(--ref-color-electric-blue-20);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
&.active {
|
|
123
|
+
background-color: var(--ref-color-electric-blue-100);
|
|
124
|
+
color: var(--ref-color-white);
|
|
125
|
+
cursor: default;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
// Ellipsis — text injected via ::before (no inner text needed)
|
|
130
|
+
.ap-pagination-ellipsis {
|
|
131
|
+
display: inline-block;
|
|
132
|
+
width: var(--paginator-button-size);
|
|
133
|
+
line-height: var(--paginator-button-size);
|
|
134
|
+
text-align: center;
|
|
135
|
+
color: var(--ref-color-grey-60);
|
|
136
|
+
font-family: var(--ref-font-family);
|
|
137
|
+
font-size: var(--ref-font-size-sm);
|
|
138
|
+
|
|
139
|
+
&::before {
|
|
140
|
+
content: '...';
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
// Go to page section
|
|
145
|
+
.ap-pagination-goto {
|
|
146
|
+
display: flex;
|
|
147
|
+
align-items: center;
|
|
148
|
+
gap: var(--ref-spacing-xs);
|
|
149
|
+
|
|
150
|
+
// Label — implicit > span
|
|
151
|
+
> span {
|
|
152
|
+
font-weight: var(--ref-font-weight-standard);
|
|
153
|
+
font-size: var(--ref-font-size-sm);
|
|
154
|
+
line-height: var(--ref-line-height-sm);
|
|
155
|
+
color: var(--ref-color-grey-60);
|
|
156
|
+
white-space: nowrap;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
// Input — implicit > input
|
|
160
|
+
> input {
|
|
161
|
+
box-sizing: border-box;
|
|
162
|
+
background: var(--ref-color-white);
|
|
163
|
+
width: 48px;
|
|
164
|
+
height: var(--paginator-button-size);
|
|
165
|
+
border-radius: var(--ref-border-radius-sm);
|
|
166
|
+
border: 1px solid var(--ref-color-grey-20);
|
|
167
|
+
padding: var(--ref-spacing-xs) var(--ref-spacing-sm);
|
|
168
|
+
font-family: var(--ref-font-family);
|
|
169
|
+
font-size: var(--ref-font-size-sm);
|
|
170
|
+
text-align: center;
|
|
171
|
+
|
|
172
|
+
&:focus {
|
|
173
|
+
outline: none;
|
|
174
|
+
border-color: var(--ref-color-electric-blue-100);
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
// Agorapulse Radio Button Card Styles
|
|
2
|
+
@use 'mixins' as m;
|
|
3
|
+
|
|
4
|
+
.ap-radio-card {
|
|
5
|
+
display: flex;
|
|
6
|
+
align-items: flex-start;
|
|
7
|
+
gap: var(--ref-spacing-xxs);
|
|
8
|
+
cursor: pointer;
|
|
9
|
+
position: relative;
|
|
10
|
+
box-sizing: border-box;
|
|
11
|
+
|
|
12
|
+
// Hide native radio input (accessible)
|
|
13
|
+
> input[type='radio'] {
|
|
14
|
+
@include m.sr-only;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
// Radio indicator — ::before pseudo-element (no empty span needed)
|
|
18
|
+
&::before {
|
|
19
|
+
content: '';
|
|
20
|
+
@include m.fixed-size(16px);
|
|
21
|
+
border-radius: 100%;
|
|
22
|
+
border: 1px solid var(--ref-color-grey-60);
|
|
23
|
+
background: var(--ref-color-electric-blue-100);
|
|
24
|
+
box-shadow: inset 0 0 0 16px var(--ref-color-white);
|
|
25
|
+
transition: box-shadow var(--comp-radio-transition-duration);
|
|
26
|
+
flex-shrink: 0;
|
|
27
|
+
box-sizing: border-box;
|
|
28
|
+
margin-top: 1px;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
// Indicator: checked
|
|
32
|
+
&:has(input:checked)::before {
|
|
33
|
+
border-color: var(--ref-color-electric-blue-100);
|
|
34
|
+
box-shadow: inset 0 0 0 3px var(--ref-color-white);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// Indicator: disabled
|
|
38
|
+
&:has(input:disabled)::before {
|
|
39
|
+
box-shadow: inset 0 0 0 16px var(--ref-color-grey-10);
|
|
40
|
+
border-color: var(--ref-color-grey-40);
|
|
41
|
+
opacity: 0.6;
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// Indicator: disabled + checked
|
|
45
|
+
&:has(input:disabled:checked)::before {
|
|
46
|
+
background: var(--ref-color-grey-40);
|
|
47
|
+
box-shadow: inset 0 0 0 3px var(--ref-color-grey-10);
|
|
48
|
+
border-color: var(--ref-color-grey-40);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
// Indicator: hover (not disabled, not locked)
|
|
52
|
+
&:hover:not(:has(input:disabled)):not(.locked)::before {
|
|
53
|
+
border-color: var(--ref-color-grey-80);
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// Indicator: hover + checked
|
|
57
|
+
&:hover:not(:has(input:disabled)):not(.locked):has(input:checked)::before {
|
|
58
|
+
border-color: var(--ref-color-electric-blue-100);
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// Indicator: error — red fill (dot) + border, compound selectors override checked/hover
|
|
62
|
+
&.error::before,
|
|
63
|
+
&.error:has(input:checked)::before {
|
|
64
|
+
border-color: var(--ref-color-red-100);
|
|
65
|
+
background: var(--ref-color-red-100);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
&.error:hover:not(:has(input:disabled))::before {
|
|
69
|
+
border-color: var(--ref-color-red-60);
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
// Locked — hide indicator, lock icon takes its place
|
|
73
|
+
&.locked::before {
|
|
74
|
+
display: none;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// Disabled state — cursor + content opacity (matches Angular --radio-content-opacity: 0.6)
|
|
78
|
+
&:has(input:disabled) {
|
|
79
|
+
cursor: default;
|
|
80
|
+
|
|
81
|
+
> :is(span, div) {
|
|
82
|
+
opacity: 0.6;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// Body — direct div child (structured content area)
|
|
87
|
+
> div {
|
|
88
|
+
display: flex;
|
|
89
|
+
flex-direction: column;
|
|
90
|
+
gap: var(--ref-spacing-xxxs);
|
|
91
|
+
flex: 1;
|
|
92
|
+
min-width: 0;
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
// Description — span inside body div
|
|
96
|
+
> div > span {
|
|
97
|
+
font-family: var(--ref-font-family);
|
|
98
|
+
font-size: var(--ref-font-size-sm);
|
|
99
|
+
line-height: var(--ref-font-line-height-sm);
|
|
100
|
+
color: var(--ref-color-grey-80);
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
// Link inside body
|
|
104
|
+
> div > a {
|
|
105
|
+
display: block;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
// Card mode
|
|
109
|
+
&.card {
|
|
110
|
+
padding: var(--ref-spacing-xs);
|
|
111
|
+
border: 1px solid var(--ref-color-grey-20);
|
|
112
|
+
border-radius: var(--ref-border-radius-md);
|
|
113
|
+
background: var(--ref-color-white);
|
|
114
|
+
transition: border-color 0.2s ease-in-out;
|
|
115
|
+
|
|
116
|
+
&:hover:not(:has(input:disabled)):not(.locked) {
|
|
117
|
+
border-color: var(--ref-color-grey-40);
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
// Checked card
|
|
121
|
+
&:has(input:checked) {
|
|
122
|
+
border-color: var(--ref-color-electric-blue-100);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
// Disabled card (not locked — locked has own styles)
|
|
126
|
+
&:has(input:disabled):not(.locked) {
|
|
127
|
+
border-color: var(--ref-color-grey-20);
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
// Error card — compound selectors override :has(input:checked) specificity
|
|
131
|
+
&.error,
|
|
132
|
+
&.error:has(input:checked) {
|
|
133
|
+
border-color: var(--ref-color-red-100);
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
&.error:hover:not(:has(input:disabled)) {
|
|
137
|
+
border-color: var(--ref-color-red-60);
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
// Locked card
|
|
141
|
+
&.locked {
|
|
142
|
+
cursor: default;
|
|
143
|
+
background: var(--ref-color-purple-10);
|
|
144
|
+
border-color: var(--ref-color-purple-20);
|
|
145
|
+
|
|
146
|
+
&:hover {
|
|
147
|
+
border-color: var(--ref-color-purple-40);
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
// Lock icon replaces radio indicator
|
|
151
|
+
> i.ap-icon-feature-lock {
|
|
152
|
+
color: var(--ref-color-purple-100);
|
|
153
|
+
@include m.fixed-size(16px);
|
|
154
|
+
flex-shrink: 0;
|
|
155
|
+
margin-top: 1px;
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
// Focus ring when radio is focused
|
|
161
|
+
&:has(input:focus-visible) {
|
|
162
|
+
@include m.focus-ring-3px;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
// Header row (icon + title + badge + info)
|
|
167
|
+
.ap-radio-card-header {
|
|
168
|
+
display: flex;
|
|
169
|
+
align-items: flex-start;
|
|
170
|
+
gap: var(--ref-spacing-xxxs);
|
|
171
|
+
|
|
172
|
+
> i:first-child {
|
|
173
|
+
@include m.fixed-size(16px);
|
|
174
|
+
flex-shrink: 0;
|
|
175
|
+
margin-top: 1px; // center 16px icon with 18px title line-height
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
|
|
179
|
+
// Title text
|
|
180
|
+
.ap-radio-card-title {
|
|
181
|
+
font-family: var(--ref-font-family);
|
|
182
|
+
font-size: var(--ref-font-size-sm);
|
|
183
|
+
font-weight: var(--ref-font-weight-bold);
|
|
184
|
+
line-height: var(--ref-font-line-height-sm);
|
|
185
|
+
color: var(--ref-color-grey-100);
|
|
186
|
+
flex: 1;
|
|
187
|
+
min-width: 0;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
// Info icon (tooltip anchor in header)
|
|
191
|
+
.ap-radio-card-info {
|
|
192
|
+
@include m.fixed-size(16px);
|
|
193
|
+
color: var(--ref-color-grey-60);
|
|
194
|
+
flex-shrink: 0;
|
|
195
|
+
cursor: pointer;
|
|
196
|
+
|
|
197
|
+
&:hover {
|
|
198
|
+
color: var(--ref-color-grey-80);
|
|
199
|
+
}
|
|
200
|
+
}
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
// Agorapulse Radio Styles
|
|
2
|
+
@use 'mixins' as m;
|
|
3
|
+
|
|
4
|
+
.ap-radio-container {
|
|
5
|
+
display: flex;
|
|
6
|
+
align-items: center;
|
|
7
|
+
gap: var(--ref-spacing-xxs);
|
|
8
|
+
cursor: pointer;
|
|
9
|
+
|
|
10
|
+
// Hide native radio input (accessible)
|
|
11
|
+
> input[type='radio'] {
|
|
12
|
+
@include m.sr-only;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
// Disabled container
|
|
17
|
+
&:has(input:disabled) {
|
|
18
|
+
cursor: default;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
// Radio indicator — ::before pseudo-element (no empty span needed)
|
|
22
|
+
&::before {
|
|
23
|
+
content: '';
|
|
24
|
+
@include m.fixed-size(16px);
|
|
25
|
+
border-radius: 100%;
|
|
26
|
+
border: 1px solid var(--ref-color-grey-60);
|
|
27
|
+
background: var(--ref-color-electric-blue-100);
|
|
28
|
+
box-shadow: inset 0 0 0 16px var(--ref-color-white);
|
|
29
|
+
transition: box-shadow var(--comp-radio-transition-duration);
|
|
30
|
+
flex-shrink: 0;
|
|
31
|
+
box-sizing: border-box;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// Indicator: checked
|
|
35
|
+
&:has(input:checked)::before {
|
|
36
|
+
border-color: var(--ref-color-electric-blue-100);
|
|
37
|
+
box-shadow: inset 0 0 0 3px var(--ref-color-white);
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
// Indicator: disabled
|
|
41
|
+
&:has(input:disabled)::before {
|
|
42
|
+
box-shadow: inset 0 0 0 16px var(--ref-color-grey-10);
|
|
43
|
+
border-color: var(--ref-color-grey-20);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
// Indicator: disabled + checked
|
|
47
|
+
&:has(input:disabled:checked)::before {
|
|
48
|
+
background: var(--ref-color-grey-40);
|
|
49
|
+
box-shadow: inset 0 0 0 3px var(--ref-color-grey-10);
|
|
50
|
+
border-color: var(--ref-color-grey-20);
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// Indicator: hover (not disabled)
|
|
54
|
+
&:hover:not(:has(input:disabled))::before {
|
|
55
|
+
border-color: var(--ref-color-grey-80);
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// Indicator: hover + checked (keep blue)
|
|
59
|
+
&:hover:not(:has(input:disabled)):has(input:checked)::before {
|
|
60
|
+
border-color: var(--ref-color-electric-blue-100);
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// Focus ring on indicator (keyboard only)
|
|
64
|
+
&:has(input:focus-visible)::before {
|
|
65
|
+
outline: 3px solid var(--ref-color-electric-blue-100);
|
|
66
|
+
outline-offset: 1px;
|
|
67
|
+
border-color: var(--ref-color-grey-80);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// Focus + checked
|
|
71
|
+
&:has(input:focus-visible:checked)::before {
|
|
72
|
+
border-color: var(--ref-color-electric-blue-100);
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
// Error state — compound selectors to override :has(input:checked) specificity
|
|
76
|
+
&.error::before,
|
|
77
|
+
&.error:has(input:checked)::before {
|
|
78
|
+
border-color: var(--ref-color-red-100);
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
&.error:hover:not(:has(input:disabled))::before {
|
|
82
|
+
border-color: var(--ref-color-red-60);
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
&.error:has(input:focus-visible)::before {
|
|
86
|
+
outline-color: var(--ref-color-red-100);
|
|
87
|
+
border-color: var(--ref-color-red-60);
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// Label — direct span child
|
|
91
|
+
> span {
|
|
92
|
+
display: flex;
|
|
93
|
+
align-items: center;
|
|
94
|
+
@include m.text-style('body');
|
|
95
|
+
color: var(--ref-color-grey-100);
|
|
96
|
+
user-select: none;
|
|
97
|
+
|
|
98
|
+
&:empty {
|
|
99
|
+
display: none;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
// Label: disabled
|
|
104
|
+
&:has(input:disabled) > span {
|
|
105
|
+
color: var(--ref-color-grey-60);
|
|
106
|
+
}
|
|
107
|
+
}
|