@salmexio/ui 0.4.0 → 1.1.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/README.md +52 -3
- package/dist/dialogs/ContextMenu/ContextMenu.svelte +97 -94
- package/dist/dialogs/ContextMenu/ContextMenu.svelte.d.ts +3 -2
- package/dist/dialogs/ContextMenu/ContextMenu.svelte.d.ts.map +1 -1
- package/dist/dialogs/Modal/Modal.svelte +112 -116
- package/dist/dialogs/Modal/Modal.svelte.d.ts +1 -1
- package/dist/feedback/Alert/Alert.svelte +119 -220
- package/dist/feedback/Alert/Alert.svelte.d.ts +1 -1
- package/dist/feedback/ProgressBar/ProgressBar.svelte +265 -0
- package/dist/feedback/ProgressBar/ProgressBar.svelte.d.ts +40 -0
- package/dist/feedback/ProgressBar/ProgressBar.svelte.d.ts.map +1 -0
- package/dist/feedback/ProgressBar/index.d.ts +2 -0
- package/dist/feedback/ProgressBar/index.d.ts.map +1 -0
- package/dist/feedback/ProgressBar/index.js +1 -0
- package/dist/feedback/Skeleton/Skeleton.svelte +157 -0
- package/dist/feedback/Skeleton/Skeleton.svelte.d.ts +37 -0
- package/dist/feedback/Skeleton/Skeleton.svelte.d.ts.map +1 -0
- package/dist/feedback/Skeleton/index.d.ts +2 -0
- package/dist/feedback/Skeleton/index.d.ts.map +1 -0
- package/dist/feedback/Skeleton/index.js +1 -0
- package/dist/feedback/Spinner/Spinner.svelte +86 -151
- package/dist/feedback/Spinner/Spinner.svelte.d.ts +5 -3
- package/dist/feedback/Spinner/Spinner.svelte.d.ts.map +1 -1
- package/dist/feedback/Toast/Toaster.svelte +431 -0
- package/dist/feedback/Toast/Toaster.svelte.d.ts +22 -0
- package/dist/feedback/Toast/Toaster.svelte.d.ts.map +1 -0
- package/dist/feedback/Toast/index.d.ts +4 -0
- package/dist/feedback/Toast/index.d.ts.map +1 -0
- package/dist/feedback/Toast/index.js +2 -0
- package/dist/feedback/Toast/toastStore.d.ts +34 -0
- package/dist/feedback/Toast/toastStore.d.ts.map +1 -0
- package/dist/feedback/Toast/toastStore.js +43 -0
- package/dist/feedback/index.d.ts +4 -0
- package/dist/feedback/index.d.ts.map +1 -1
- package/dist/feedback/index.js +3 -0
- package/dist/forms/Checkbox/Checkbox.svelte +87 -104
- package/dist/forms/Checkbox/Checkbox.svelte.d.ts +1 -1
- package/dist/forms/Select/Select.svelte +137 -179
- package/dist/forms/Select/Select.svelte.d.ts +1 -1
- package/dist/forms/Slider/Slider.svelte +356 -0
- package/dist/forms/Slider/Slider.svelte.d.ts +50 -0
- package/dist/forms/Slider/Slider.svelte.d.ts.map +1 -0
- package/dist/forms/Slider/index.d.ts +2 -0
- package/dist/forms/Slider/index.d.ts.map +1 -0
- package/dist/forms/Slider/index.js +1 -0
- package/dist/forms/TextInput/TextInput.svelte +161 -167
- package/dist/forms/TextInput/TextInput.svelte.d.ts +1 -1
- package/dist/forms/Textarea/Textarea.svelte +615 -0
- package/dist/forms/Textarea/Textarea.svelte.d.ts +47 -0
- package/dist/forms/Textarea/Textarea.svelte.d.ts.map +1 -0
- package/dist/forms/Textarea/index.d.ts +2 -0
- package/dist/forms/Textarea/index.d.ts.map +1 -0
- package/dist/forms/Textarea/index.js +1 -0
- package/dist/forms/Toggle/Toggle.svelte +239 -0
- package/dist/forms/Toggle/Toggle.svelte.d.ts +39 -0
- package/dist/forms/Toggle/Toggle.svelte.d.ts.map +1 -0
- package/dist/forms/Toggle/index.d.ts +2 -0
- package/dist/forms/Toggle/index.d.ts.map +1 -0
- package/dist/forms/Toggle/index.js +1 -0
- package/dist/forms/index.d.ts +3 -0
- package/dist/forms/index.d.ts.map +1 -1
- package/dist/forms/index.js +3 -0
- package/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -1
- package/dist/layout/Card/Card.svelte +66 -39
- package/dist/layout/Card/Card.svelte.d.ts +1 -1
- package/dist/layout/Card/Card.svelte.d.ts.map +1 -1
- package/dist/layout/Container/Container.svelte +71 -71
- package/dist/layout/Container/Container.svelte.d.ts +2 -2
- package/dist/layout/ThermalBackground/ThermalBackground.svelte +313 -0
- package/dist/layout/ThermalBackground/ThermalBackground.svelte.d.ts +16 -0
- package/dist/layout/ThermalBackground/ThermalBackground.svelte.d.ts.map +1 -0
- package/dist/layout/ThermalBackground/index.d.ts +2 -0
- package/dist/layout/ThermalBackground/index.d.ts.map +1 -0
- package/dist/layout/ThermalBackground/index.js +1 -0
- package/dist/layout/index.d.ts +1 -0
- package/dist/layout/index.d.ts.map +1 -1
- package/dist/layout/index.js +1 -0
- package/dist/navigation/CommandPalette/CommandPalette.svelte +407 -189
- package/dist/navigation/CommandPalette/CommandPalette.svelte.d.ts +8 -3
- package/dist/navigation/CommandPalette/CommandPalette.svelte.d.ts.map +1 -1
- package/dist/navigation/Tabs/Tabs.svelte +139 -192
- package/dist/navigation/Tabs/Tabs.svelte.d.ts +2 -2
- package/dist/primitives/Badge/Badge.svelte +85 -220
- package/dist/primitives/Badge/Badge.svelte.d.ts +2 -2
- package/dist/primitives/Badge/Badge.svelte.d.ts.map +1 -1
- package/dist/primitives/Button/Button.svelte +214 -194
- package/dist/primitives/Button/Button.svelte.d.ts +3 -3
- package/dist/primitives/Button/Button.svelte.d.ts.map +1 -1
- package/dist/primitives/Tooltip/Tooltip.svelte +260 -0
- package/dist/primitives/Tooltip/Tooltip.svelte.d.ts +36 -0
- package/dist/primitives/Tooltip/Tooltip.svelte.d.ts.map +1 -0
- package/dist/primitives/Tooltip/index.d.ts +2 -0
- package/dist/primitives/Tooltip/index.d.ts.map +1 -0
- package/dist/primitives/Tooltip/index.js +1 -0
- package/dist/primitives/index.d.ts +1 -0
- package/dist/primitives/index.d.ts.map +1 -1
- package/dist/primitives/index.js +1 -0
- package/dist/styles/tokens.css +329 -260
- package/package.json +5 -5
- package/dist/windowing/Window/Window.svelte +0 -637
- package/dist/windowing/Window/Window.svelte.d.ts +0 -65
- package/dist/windowing/Window/Window.svelte.d.ts.map +0 -1
- package/dist/windowing/Window/index.d.ts +0 -2
- package/dist/windowing/Window/index.d.ts.map +0 -1
- package/dist/windowing/Window/index.js +0 -1
- package/dist/windowing/WindowManager/WindowManager.svelte +0 -425
- package/dist/windowing/WindowManager/WindowManager.svelte.d.ts +0 -38
- package/dist/windowing/WindowManager/WindowManager.svelte.d.ts.map +0 -1
- package/dist/windowing/WindowManager/index.d.ts +0 -2
- package/dist/windowing/WindowManager/index.d.ts.map +0 -1
- package/dist/windowing/WindowManager/index.js +0 -1
- package/dist/windowing/index.d.ts +0 -5
- package/dist/windowing/index.d.ts.map +0 -1
- package/dist/windowing/index.js +0 -3
- package/dist/windowing/windowStore.svelte.d.ts +0 -49
- package/dist/windowing/windowStore.svelte.d.ts.map +0 -1
- package/dist/windowing/windowStore.svelte.js +0 -170
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<!--
|
|
2
2
|
@component Checkbox
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
INFRARED — Clean checkbox with vermilion accent fill and white checkmark.
|
|
5
5
|
Uses native <input type="checkbox"> per WAI-ARIA APG (best practice: native over custom role="checkbox").
|
|
6
6
|
Label, description, error, indeterminate. Full a11y; focus and semantics follow the native input.
|
|
7
7
|
-->
|
|
@@ -74,13 +74,13 @@ function handleChange(e: Event) {
|
|
|
74
74
|
|
|
75
75
|
<div
|
|
76
76
|
class={cn(
|
|
77
|
-
'
|
|
78
|
-
`
|
|
79
|
-
disabled && '
|
|
77
|
+
'sx-checkbox',
|
|
78
|
+
`sx-checkbox-${size}`,
|
|
79
|
+
disabled && 'sx-checkbox-disabled',
|
|
80
80
|
className
|
|
81
81
|
)}
|
|
82
82
|
>
|
|
83
|
-
<label for={id} class="
|
|
83
|
+
<label for={id} class="sx-checkbox-label">
|
|
84
84
|
<input
|
|
85
85
|
bind:this={inputElement}
|
|
86
86
|
{id}
|
|
@@ -92,80 +92,80 @@ function handleChange(e: Event) {
|
|
|
92
92
|
{required}
|
|
93
93
|
aria-invalid={showError}
|
|
94
94
|
aria-describedby={ariaDescribedBy}
|
|
95
|
-
class="
|
|
95
|
+
class="sx-checkbox-input"
|
|
96
96
|
data-testid={testId}
|
|
97
97
|
onchange={handleChange}
|
|
98
98
|
/>
|
|
99
99
|
<span
|
|
100
100
|
class={cn(
|
|
101
|
-
'
|
|
102
|
-
(checked || indeterminate) && '
|
|
103
|
-
indeterminate && '
|
|
104
|
-
showError && '
|
|
101
|
+
'sx-checkbox-box',
|
|
102
|
+
(checked || indeterminate) && 'sx-checkbox-box-checked',
|
|
103
|
+
indeterminate && 'sx-checkbox-box-indeterminate',
|
|
104
|
+
showError && 'sx-checkbox-box-error'
|
|
105
105
|
)}
|
|
106
106
|
aria-hidden="true"
|
|
107
107
|
>
|
|
108
108
|
{#if showChecked}
|
|
109
|
-
<svg class="
|
|
109
|
+
<svg class="sx-checkbox-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
|
|
110
110
|
<polyline points="20 6 9 17 4 12" />
|
|
111
111
|
</svg>
|
|
112
112
|
{:else if indeterminate}
|
|
113
|
-
<svg class="
|
|
113
|
+
<svg class="sx-checkbox-icon sx-checkbox-icon-minus" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" aria-hidden="true">
|
|
114
114
|
<line x1="5" y1="12" x2="19" y2="12" />
|
|
115
115
|
</svg>
|
|
116
116
|
{/if}
|
|
117
117
|
</span>
|
|
118
|
-
<span class="
|
|
119
|
-
<span class="
|
|
118
|
+
<span class="sx-checkbox-content" class:sx-sr-only={hideLabel}>
|
|
119
|
+
<span class="sx-checkbox-text">
|
|
120
120
|
{label}
|
|
121
121
|
{#if required}
|
|
122
|
-
<span class="
|
|
122
|
+
<span class="sx-checkbox-required" aria-hidden="true">*</span>
|
|
123
123
|
{/if}
|
|
124
124
|
</span>
|
|
125
125
|
{#if description && !hideLabel}
|
|
126
|
-
<span id={descriptionId} class="
|
|
126
|
+
<span id={descriptionId} class="sx-checkbox-description">{description}</span>
|
|
127
127
|
{/if}
|
|
128
128
|
</span>
|
|
129
129
|
</label>
|
|
130
130
|
{#if showError}
|
|
131
|
-
<p id={errorId} class="
|
|
131
|
+
<p id={errorId} class="sx-checkbox-error" role="alert">{error}</p>
|
|
132
132
|
{/if}
|
|
133
133
|
</div>
|
|
134
134
|
|
|
135
135
|
<style>
|
|
136
|
-
.
|
|
136
|
+
.sx-checkbox {
|
|
137
137
|
display: flex;
|
|
138
138
|
flex-direction: column;
|
|
139
|
-
gap: var(--
|
|
139
|
+
gap: var(--sx-space-1);
|
|
140
140
|
}
|
|
141
141
|
|
|
142
|
-
.
|
|
143
|
-
opacity: 0.
|
|
142
|
+
.sx-checkbox-disabled {
|
|
143
|
+
opacity: 0.5;
|
|
144
144
|
}
|
|
145
145
|
|
|
146
|
-
.
|
|
146
|
+
.sx-checkbox-label {
|
|
147
147
|
display: flex;
|
|
148
148
|
align-items: center;
|
|
149
|
-
gap: var(--
|
|
149
|
+
gap: var(--sx-space-2);
|
|
150
150
|
cursor: pointer;
|
|
151
151
|
user-select: none;
|
|
152
|
-
font-family: var(--
|
|
152
|
+
font-family: var(--sx-font-body);
|
|
153
153
|
}
|
|
154
154
|
|
|
155
|
-
.
|
|
155
|
+
.sx-checkbox-label:has(.sx-checkbox-description) {
|
|
156
156
|
align-items: flex-start;
|
|
157
157
|
}
|
|
158
158
|
|
|
159
|
-
.
|
|
159
|
+
.sx-checkbox-label:has(.sx-checkbox-description) .sx-checkbox-box {
|
|
160
160
|
margin-top: 2px;
|
|
161
161
|
}
|
|
162
162
|
|
|
163
|
-
.
|
|
163
|
+
.sx-checkbox-disabled .sx-checkbox-label {
|
|
164
164
|
cursor: not-allowed;
|
|
165
165
|
}
|
|
166
166
|
|
|
167
|
-
/* Visually hidden, not display:none
|
|
168
|
-
.
|
|
167
|
+
/* Visually hidden, not display:none -- keeps focus and semantics */
|
|
168
|
+
.sx-checkbox-input {
|
|
169
169
|
position: absolute;
|
|
170
170
|
width: 1px;
|
|
171
171
|
height: 1px;
|
|
@@ -177,139 +177,118 @@ function handleChange(e: Event) {
|
|
|
177
177
|
border: 0;
|
|
178
178
|
}
|
|
179
179
|
|
|
180
|
-
|
|
181
|
-
.salmex-checkbox-box {
|
|
180
|
+
.sx-checkbox-box {
|
|
182
181
|
flex-shrink: 0;
|
|
183
182
|
display: flex;
|
|
184
183
|
align-items: center;
|
|
185
184
|
justify-content: center;
|
|
186
|
-
background:
|
|
187
|
-
border: 1px solid
|
|
188
|
-
border-radius: var(--
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
transition: background var(--salmex-transition-fast), border-color var(--salmex-transition-fast),
|
|
193
|
-
box-shadow var(--salmex-transition-fast);
|
|
194
|
-
color: rgb(var(--salmex-chalk-white));
|
|
185
|
+
background: var(--sx-color-surface);
|
|
186
|
+
border: 1px solid var(--sx-color-border-strong);
|
|
187
|
+
border-radius: var(--sx-radius-sm);
|
|
188
|
+
transition: background var(--sx-transition-fast), border-color var(--sx-transition-fast),
|
|
189
|
+
box-shadow var(--sx-transition-fast);
|
|
190
|
+
color: #fff;
|
|
195
191
|
}
|
|
196
192
|
|
|
197
|
-
.
|
|
193
|
+
.sx-checkbox-sm .sx-checkbox-box {
|
|
198
194
|
width: 16px;
|
|
199
195
|
height: 16px;
|
|
200
196
|
}
|
|
201
197
|
|
|
202
|
-
.
|
|
198
|
+
.sx-checkbox-md .sx-checkbox-box {
|
|
203
199
|
width: 20px;
|
|
204
200
|
height: 20px;
|
|
205
201
|
}
|
|
206
202
|
|
|
207
|
-
.
|
|
203
|
+
.sx-checkbox-lg .sx-checkbox-box {
|
|
208
204
|
width: 24px;
|
|
209
205
|
height: 24px;
|
|
210
206
|
}
|
|
211
207
|
|
|
212
|
-
.
|
|
208
|
+
.sx-checkbox-icon {
|
|
213
209
|
width: 100%;
|
|
214
210
|
height: 100%;
|
|
215
211
|
padding: 2px;
|
|
212
|
+
animation: sx-check-in var(--sx-duration-fast) var(--sx-ease-out) both;
|
|
216
213
|
}
|
|
217
214
|
|
|
218
|
-
.
|
|
215
|
+
.sx-checkbox-icon-minus {
|
|
219
216
|
padding: 3px 4px;
|
|
220
217
|
}
|
|
221
218
|
|
|
222
|
-
/* Checked
|
|
223
|
-
.
|
|
224
|
-
background:
|
|
225
|
-
border-color:
|
|
226
|
-
box-shadow:
|
|
227
|
-
inset 1px 1px 0 rgb(var(--salmex-button-highlight)),
|
|
228
|
-
inset -1px -1px 0 rgb(var(--salmex-button-shadow)),
|
|
229
|
-
0 0 0 2px rgb(var(--salmex-border-dark));
|
|
219
|
+
/* Checked -- vermilion fill, white checkmark */
|
|
220
|
+
.sx-checkbox-box-checked {
|
|
221
|
+
background: var(--sx-color-primary);
|
|
222
|
+
border-color: var(--sx-color-primary);
|
|
230
223
|
}
|
|
231
224
|
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
225
|
+
/* Indeterminate -- same as checked */
|
|
226
|
+
.sx-checkbox-box-indeterminate {
|
|
227
|
+
background: var(--sx-color-primary);
|
|
228
|
+
border-color: var(--sx-color-primary);
|
|
235
229
|
}
|
|
236
230
|
|
|
237
|
-
/*
|
|
238
|
-
.
|
|
239
|
-
|
|
240
|
-
border-color: rgb(var(--salmex-button-dark-edge));
|
|
231
|
+
/* Hover -- border brightens on unchecked box */
|
|
232
|
+
.sx-checkbox-label:hover .sx-checkbox-box:not(.sx-checkbox-box-checked):not(.sx-checkbox-box-indeterminate) {
|
|
233
|
+
border-color: var(--sx-color-border-hover);
|
|
241
234
|
}
|
|
242
235
|
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
/* Focus — crown yellow ring (design system) */
|
|
248
|
-
.salmex-checkbox-input:focus-visible + .salmex-checkbox-box {
|
|
249
|
-
box-shadow:
|
|
250
|
-
inset 1px 1px 0 rgb(var(--salmex-button-highlight)),
|
|
251
|
-
inset -1px -1px 0 rgb(var(--salmex-button-shadow)),
|
|
252
|
-
0 0 0 2px rgb(var(--salmex-midnight-black)),
|
|
253
|
-
0 0 2px 4px rgb(var(--salmex-crown-yellow));
|
|
254
|
-
}
|
|
255
|
-
|
|
256
|
-
:global([data-theme='dark']) .salmex-checkbox-input:focus-visible + .salmex-checkbox-box {
|
|
257
|
-
box-shadow:
|
|
258
|
-
inset 1px 1px 0 rgb(var(--salmex-button-highlight)),
|
|
259
|
-
inset -1px -1px 0 rgb(var(--salmex-button-shadow)),
|
|
260
|
-
0 0 2px 3px rgb(var(--salmex-crown-yellow));
|
|
236
|
+
/* Focus -- primary outline */
|
|
237
|
+
.sx-checkbox-input:focus-visible + .sx-checkbox-box {
|
|
238
|
+
outline: 2px solid var(--sx-color-primary);
|
|
239
|
+
outline-offset: 2px;
|
|
261
240
|
}
|
|
262
241
|
|
|
263
242
|
/* High contrast / forced colors: solid outline so focus is visible (APG) */
|
|
264
243
|
@media (forced-colors: active) {
|
|
265
|
-
.
|
|
244
|
+
.sx-checkbox-input:focus-visible + .sx-checkbox-box {
|
|
266
245
|
outline: 2px solid CanvasText;
|
|
267
246
|
outline-offset: 2px;
|
|
268
247
|
}
|
|
269
248
|
}
|
|
270
249
|
|
|
271
|
-
.
|
|
272
|
-
border-color:
|
|
273
|
-
}
|
|
274
|
-
|
|
275
|
-
:global([data-theme='dark']) .salmex-checkbox-box-error {
|
|
276
|
-
border-color: rgb(var(--salmex-street-red));
|
|
250
|
+
.sx-checkbox-box-error {
|
|
251
|
+
border-color: var(--sx-color-red);
|
|
277
252
|
}
|
|
278
253
|
|
|
279
|
-
.
|
|
254
|
+
.sx-checkbox-content {
|
|
280
255
|
display: flex;
|
|
281
256
|
flex-direction: column;
|
|
282
257
|
gap: 2px;
|
|
283
258
|
}
|
|
284
259
|
|
|
285
|
-
.
|
|
286
|
-
font-size: var(--
|
|
287
|
-
font-weight:
|
|
288
|
-
color:
|
|
260
|
+
.sx-checkbox-text {
|
|
261
|
+
font-size: var(--sx-text-sm);
|
|
262
|
+
font-weight: 500;
|
|
263
|
+
color: var(--sx-color-text);
|
|
289
264
|
}
|
|
290
265
|
|
|
291
|
-
.
|
|
292
|
-
color:
|
|
266
|
+
.sx-checkbox-required {
|
|
267
|
+
color: var(--sx-color-red);
|
|
293
268
|
margin-left: 2px;
|
|
294
269
|
}
|
|
295
270
|
|
|
296
|
-
.
|
|
297
|
-
font-size: var(--
|
|
298
|
-
color:
|
|
271
|
+
.sx-checkbox-description {
|
|
272
|
+
font-size: var(--sx-text-xs);
|
|
273
|
+
color: var(--sx-color-text-secondary);
|
|
274
|
+
}
|
|
275
|
+
|
|
276
|
+
.sx-checkbox-error {
|
|
277
|
+
font-size: var(--sx-text-xs);
|
|
278
|
+
font-weight: 500;
|
|
279
|
+
color: var(--sx-color-red);
|
|
280
|
+
margin: 0 0 0 calc(20px + var(--sx-space-2));
|
|
299
281
|
}
|
|
300
282
|
|
|
301
|
-
.
|
|
302
|
-
|
|
303
|
-
font-weight: 600;
|
|
304
|
-
color: rgb(var(--salmex-street-red));
|
|
305
|
-
margin: 0 0 0 calc(20px + var(--salmex-space-2));
|
|
283
|
+
.sx-checkbox-sm .sx-checkbox-error {
|
|
284
|
+
margin-left: calc(16px + var(--sx-space-2));
|
|
306
285
|
}
|
|
307
286
|
|
|
308
|
-
.
|
|
309
|
-
margin-left: calc(24px + var(--
|
|
287
|
+
.sx-checkbox-lg .sx-checkbox-error {
|
|
288
|
+
margin-left: calc(24px + var(--sx-space-2));
|
|
310
289
|
}
|
|
311
290
|
|
|
312
|
-
.
|
|
291
|
+
.sx-sr-only {
|
|
313
292
|
position: absolute;
|
|
314
293
|
width: 1px;
|
|
315
294
|
height: 1px;
|
|
@@ -322,8 +301,12 @@ function handleChange(e: Event) {
|
|
|
322
301
|
}
|
|
323
302
|
|
|
324
303
|
@media (prefers-reduced-motion: reduce) {
|
|
325
|
-
.
|
|
304
|
+
.sx-checkbox-box {
|
|
326
305
|
transition: none;
|
|
327
306
|
}
|
|
307
|
+
|
|
308
|
+
.sx-checkbox-icon {
|
|
309
|
+
animation: none;
|
|
310
|
+
}
|
|
328
311
|
}
|
|
329
312
|
</style>
|
|
@@ -20,7 +20,7 @@ interface Props {
|
|
|
20
20
|
/**
|
|
21
21
|
* Checkbox
|
|
22
22
|
*
|
|
23
|
-
*
|
|
23
|
+
* INFRARED — Clean checkbox with vermilion accent fill and white checkmark.
|
|
24
24
|
* Uses native <input type="checkbox"> per WAI-ARIA APG (best practice: native over custom role="checkbox").
|
|
25
25
|
* Label, description, error, indeterminate. Full a11y; focus and semantics follow the native input.
|
|
26
26
|
*/
|