@salmexio/ui 1.0.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 +1 -1
- package/dist/dialogs/ContextMenu/ContextMenu.svelte +6 -6
- package/dist/dialogs/ContextMenu/ContextMenu.svelte.d.ts +1 -1
- package/dist/dialogs/Modal/Modal.svelte +3 -3
- package/dist/dialogs/Modal/Modal.svelte.d.ts +1 -1
- package/dist/feedback/Alert/Alert.svelte +16 -11
- package/dist/feedback/Alert/Alert.svelte.d.ts +1 -1
- package/dist/feedback/ProgressBar/ProgressBar.svelte +23 -4
- package/dist/feedback/ProgressBar/ProgressBar.svelte.d.ts +1 -1
- package/dist/feedback/Skeleton/Skeleton.svelte +7 -3
- package/dist/feedback/Skeleton/Skeleton.svelte.d.ts +1 -1
- package/dist/feedback/Spinner/Spinner.svelte +3 -3
- package/dist/feedback/Spinner/Spinner.svelte.d.ts +2 -2
- package/dist/feedback/Toast/Toaster.svelte +10 -10
- package/dist/feedback/Toast/Toaster.svelte.d.ts +1 -1
- package/dist/forms/Checkbox/Checkbox.svelte +13 -8
- package/dist/forms/Checkbox/Checkbox.svelte.d.ts +1 -1
- package/dist/forms/Select/Select.svelte +11 -11
- package/dist/forms/Select/Select.svelte.d.ts +1 -1
- package/dist/forms/Slider/Slider.svelte +27 -27
- package/dist/forms/Slider/Slider.svelte.d.ts +1 -1
- package/dist/forms/TextInput/TextInput.svelte +16 -6
- package/dist/forms/TextInput/TextInput.svelte.d.ts +1 -1
- package/dist/forms/Textarea/Textarea.svelte +5 -5
- package/dist/forms/Textarea/Textarea.svelte.d.ts +1 -1
- package/dist/forms/Toggle/Toggle.svelte +8 -8
- package/dist/forms/Toggle/Toggle.svelte.d.ts +1 -1
- package/dist/layout/Card/Card.svelte +6 -4
- package/dist/layout/Card/Card.svelte.d.ts +1 -1
- package/dist/layout/Container/Container.svelte +1 -1
- package/dist/layout/Container/Container.svelte.d.ts +1 -1
- 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 +8 -8
- package/dist/navigation/CommandPalette/CommandPalette.svelte.d.ts +1 -1
- package/dist/navigation/Tabs/Tabs.svelte +43 -10
- package/dist/navigation/Tabs/Tabs.svelte.d.ts +1 -1
- package/dist/primitives/Badge/Badge.svelte +16 -14
- package/dist/primitives/Badge/Badge.svelte.d.ts +1 -1
- package/dist/primitives/Button/Button.svelte +87 -16
- package/dist/primitives/Button/Button.svelte.d.ts +1 -1
- package/dist/primitives/Tooltip/Tooltip.svelte +1 -1
- package/dist/primitives/Tooltip/Tooltip.svelte.d.ts +1 -1
- package/dist/styles/tokens.css +201 -64
- package/package.json +3 -3
package/README.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<!--
|
|
2
2
|
@component ContextMenu
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
INFRARED — Right-click context menu with glass panel, keyboard navigation,
|
|
5
5
|
separators, section headers, submenus, and keyboard shortcut hints.
|
|
6
6
|
|
|
7
7
|
@example
|
|
@@ -421,8 +421,8 @@ onMount(() => {
|
|
|
421
421
|
}
|
|
422
422
|
|
|
423
423
|
.sx-context-item-active {
|
|
424
|
-
background: var(--sx-color-
|
|
425
|
-
color: var(--sx-color-
|
|
424
|
+
background: var(--sx-color-primary-hover);
|
|
425
|
+
color: var(--sx-color-primary);
|
|
426
426
|
}
|
|
427
427
|
|
|
428
428
|
.sx-context-item-disabled {
|
|
@@ -450,7 +450,7 @@ onMount(() => {
|
|
|
450
450
|
}
|
|
451
451
|
|
|
452
452
|
.sx-context-item-active .sx-context-icon {
|
|
453
|
-
color: var(--sx-color-
|
|
453
|
+
color: var(--sx-color-primary);
|
|
454
454
|
}
|
|
455
455
|
|
|
456
456
|
.sx-context-icon-spacer {
|
|
@@ -474,7 +474,7 @@ onMount(() => {
|
|
|
474
474
|
}
|
|
475
475
|
|
|
476
476
|
.sx-context-item-active .sx-context-shortcut {
|
|
477
|
-
color: var(--sx-color-
|
|
477
|
+
color: var(--sx-color-primary);
|
|
478
478
|
opacity: 0.7;
|
|
479
479
|
}
|
|
480
480
|
|
|
@@ -488,7 +488,7 @@ onMount(() => {
|
|
|
488
488
|
}
|
|
489
489
|
|
|
490
490
|
.sx-context-item-active .sx-context-submenu-arrow {
|
|
491
|
-
color: var(--sx-color-
|
|
491
|
+
color: var(--sx-color-primary);
|
|
492
492
|
}
|
|
493
493
|
|
|
494
494
|
/* ========================================
|
|
@@ -28,7 +28,7 @@ interface Props {
|
|
|
28
28
|
/**
|
|
29
29
|
* ContextMenu
|
|
30
30
|
*
|
|
31
|
-
*
|
|
31
|
+
* INFRARED — Right-click context menu with glass panel, keyboard navigation,
|
|
32
32
|
* separators, section headers, submenus, and keyboard shortcut hints.
|
|
33
33
|
*
|
|
34
34
|
* @example
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<!--
|
|
2
2
|
@component Modal
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
INFRARED — Dialog with glass surface, subtle border, clean header.
|
|
5
5
|
Follows WAI-ARIA Dialog (Modal) pattern: focus trap, restore focus on close,
|
|
6
6
|
aria-labelledby, aria-describedby, aria-modal. Escape and backdrop close.
|
|
7
7
|
For full inert support (background not focusable), render modal in a portal
|
|
@@ -331,7 +331,7 @@ const closeLabel = $derived(closeBtnAriaLabel ?? 'Close dialog');
|
|
|
331
331
|
}
|
|
332
332
|
|
|
333
333
|
.sx-modal-title-wrap:focus-visible {
|
|
334
|
-
outline: 2px solid var(--sx-color-
|
|
334
|
+
outline: 2px solid var(--sx-color-primary);
|
|
335
335
|
outline-offset: 2px;
|
|
336
336
|
}
|
|
337
337
|
|
|
@@ -376,7 +376,7 @@ const closeLabel = $derived(closeBtnAriaLabel ?? 'Close dialog');
|
|
|
376
376
|
}
|
|
377
377
|
|
|
378
378
|
.sx-modal-close:focus-visible {
|
|
379
|
-
outline: 2px solid var(--sx-color-
|
|
379
|
+
outline: 2px solid var(--sx-color-primary);
|
|
380
380
|
outline-offset: 2px;
|
|
381
381
|
}
|
|
382
382
|
|
|
@@ -31,7 +31,7 @@ interface Props {
|
|
|
31
31
|
/**
|
|
32
32
|
* Modal
|
|
33
33
|
*
|
|
34
|
-
*
|
|
34
|
+
* INFRARED — Dialog with glass surface, subtle border, clean header.
|
|
35
35
|
* Follows WAI-ARIA Dialog (Modal) pattern: focus trap, restore focus on close,
|
|
36
36
|
* aria-labelledby, aria-describedby, aria-modal. Escape and backdrop close.
|
|
37
37
|
* For full inert support (background not focusable), render modal in a portal
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<!--
|
|
2
2
|
@component Alert
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
INFRARED — Clean message banner. Left accent border, dark surface.
|
|
5
5
|
Dismissible, expandable, optional title; role="alert" for errors.
|
|
6
6
|
-->
|
|
7
7
|
<script lang="ts">
|
|
@@ -157,7 +157,7 @@ function toggleExpanded() {
|
|
|
157
157
|
</div>
|
|
158
158
|
|
|
159
159
|
<style>
|
|
160
|
-
/*
|
|
160
|
+
/* INFRARED: surface card, left accent border, subtle type tint */
|
|
161
161
|
.sx-alert {
|
|
162
162
|
display: flex;
|
|
163
163
|
gap: var(--sx-space-3);
|
|
@@ -168,6 +168,7 @@ function toggleExpanded() {
|
|
|
168
168
|
border-radius: var(--sx-radius-md);
|
|
169
169
|
font-family: var(--sx-font-body);
|
|
170
170
|
transition: box-shadow var(--sx-transition-fast);
|
|
171
|
+
animation: sx-alert-in var(--sx-duration-base) var(--sx-ease-out) both;
|
|
171
172
|
}
|
|
172
173
|
|
|
173
174
|
.sx-alert-standard {
|
|
@@ -251,7 +252,7 @@ function toggleExpanded() {
|
|
|
251
252
|
|
|
252
253
|
.sx-alert-title-btn:focus-visible {
|
|
253
254
|
outline: none;
|
|
254
|
-
box-shadow: 0 0 0 2px var(--sx-color-
|
|
255
|
+
box-shadow: 0 0 0 2px var(--sx-color-primary);
|
|
255
256
|
}
|
|
256
257
|
|
|
257
258
|
.sx-alert-expand-icon {
|
|
@@ -288,7 +289,7 @@ function toggleExpanded() {
|
|
|
288
289
|
|
|
289
290
|
.sx-alert-dismiss:focus-visible {
|
|
290
291
|
outline: none;
|
|
291
|
-
box-shadow: 0 0 0 2px var(--sx-color-
|
|
292
|
+
box-shadow: 0 0 0 2px var(--sx-color-primary);
|
|
292
293
|
}
|
|
293
294
|
|
|
294
295
|
/* Type: success */
|
|
@@ -321,12 +322,12 @@ function toggleExpanded() {
|
|
|
321
322
|
|
|
322
323
|
/* Type: warning */
|
|
323
324
|
.sx-alert-warning {
|
|
324
|
-
background: var(--sx-color-
|
|
325
|
-
border-left-color: var(--sx-color-
|
|
325
|
+
background: var(--sx-color-brass-subtle);
|
|
326
|
+
border-left-color: var(--sx-color-secondary);
|
|
326
327
|
}
|
|
327
328
|
|
|
328
329
|
.sx-alert-warning .sx-alert-icon {
|
|
329
|
-
color: var(--sx-color-
|
|
330
|
+
color: var(--sx-color-secondary);
|
|
330
331
|
}
|
|
331
332
|
|
|
332
333
|
.sx-alert-warning .sx-alert-title {
|
|
@@ -335,12 +336,12 @@ function toggleExpanded() {
|
|
|
335
336
|
|
|
336
337
|
/* Type: info */
|
|
337
338
|
.sx-alert-info {
|
|
338
|
-
background: var(--sx-color-
|
|
339
|
-
border-left-color: var(--sx-color-
|
|
339
|
+
background: var(--sx-color-primary-subtle);
|
|
340
|
+
border-left-color: var(--sx-color-primary);
|
|
340
341
|
}
|
|
341
342
|
|
|
342
343
|
.sx-alert-info .sx-alert-icon {
|
|
343
|
-
color: var(--sx-color-
|
|
344
|
+
color: var(--sx-color-primary);
|
|
344
345
|
}
|
|
345
346
|
|
|
346
347
|
.sx-alert-info .sx-alert-title {
|
|
@@ -362,7 +363,11 @@ function toggleExpanded() {
|
|
|
362
363
|
}
|
|
363
364
|
|
|
364
365
|
@media (prefers-reduced-motion: reduce) {
|
|
365
|
-
.sx-alert
|
|
366
|
+
.sx-alert {
|
|
367
|
+
transition: none;
|
|
368
|
+
animation: none;
|
|
369
|
+
}
|
|
370
|
+
|
|
366
371
|
.sx-alert-dismiss,
|
|
367
372
|
.sx-alert-title-btn {
|
|
368
373
|
transition: none;
|
|
@@ -21,7 +21,7 @@ interface Props {
|
|
|
21
21
|
/**
|
|
22
22
|
* Alert
|
|
23
23
|
*
|
|
24
|
-
*
|
|
24
|
+
* INFRARED — Clean message banner. Left accent border, dark surface.
|
|
25
25
|
* Dismissible, expandable, optional title; role="alert" for errors.
|
|
26
26
|
*/
|
|
27
27
|
declare const Alert: import("svelte").Component<Props, {}, "">;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<!--
|
|
2
2
|
@component ProgressBar
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
INFRARED — Determinate & indeterminate progress indicator with
|
|
5
5
|
optional label, value display, size variants, and full ARIA compliance.
|
|
6
6
|
|
|
7
7
|
@example
|
|
@@ -184,27 +184,46 @@ const labelId = $derived(label ? `${stableId}-label` : undefined);
|
|
|
184
184
|
height: 100%;
|
|
185
185
|
border-radius: var(--sx-radius-full);
|
|
186
186
|
transition: width 0.3s var(--sx-ease-out);
|
|
187
|
+
position: relative;
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
/* Leading-edge glow — subtle light at the tip of the bar */
|
|
191
|
+
.sx-progress-fill::after {
|
|
192
|
+
content: '';
|
|
193
|
+
position: absolute;
|
|
194
|
+
right: 0;
|
|
195
|
+
top: 0;
|
|
196
|
+
bottom: 0;
|
|
197
|
+
width: 24px;
|
|
198
|
+
border-radius: inherit;
|
|
199
|
+
background: linear-gradient(90deg, transparent, rgba(255, 255, 255, 0.2));
|
|
200
|
+
opacity: 0.6;
|
|
187
201
|
}
|
|
188
202
|
|
|
189
203
|
/* Colors */
|
|
190
204
|
.sx-progress-color-cyan {
|
|
191
|
-
background: var(--sx-color-
|
|
205
|
+
background: var(--sx-color-primary);
|
|
206
|
+
box-shadow: 0 0 8px rgba(255, 107, 53, 0.2);
|
|
192
207
|
}
|
|
193
208
|
|
|
194
209
|
.sx-progress-color-green {
|
|
195
210
|
background: var(--sx-color-green);
|
|
211
|
+
box-shadow: 0 0 8px rgba(74, 222, 128, 0.2);
|
|
196
212
|
}
|
|
197
213
|
|
|
198
214
|
.sx-progress-color-gold {
|
|
199
|
-
background: var(--sx-color-
|
|
215
|
+
background: var(--sx-color-secondary);
|
|
216
|
+
box-shadow: 0 0 8px rgba(200, 168, 78, 0.2);
|
|
200
217
|
}
|
|
201
218
|
|
|
202
219
|
.sx-progress-color-red {
|
|
203
220
|
background: var(--sx-color-red);
|
|
221
|
+
box-shadow: 0 0 8px rgba(220, 38, 38, 0.2);
|
|
204
222
|
}
|
|
205
223
|
|
|
206
224
|
.sx-progress-color-purple {
|
|
207
|
-
background: var(--sx-color-
|
|
225
|
+
background: var(--sx-color-teal);
|
|
226
|
+
box-shadow: 0 0 8px rgba(61, 139, 139, 0.2);
|
|
208
227
|
}
|
|
209
228
|
|
|
210
229
|
/* Indeterminate */
|
|
@@ -26,7 +26,7 @@ interface Props {
|
|
|
26
26
|
/**
|
|
27
27
|
* ProgressBar
|
|
28
28
|
*
|
|
29
|
-
*
|
|
29
|
+
* INFRARED — Determinate & indeterminate progress indicator with
|
|
30
30
|
* optional label, value display, size variants, and full ARIA compliance.
|
|
31
31
|
*
|
|
32
32
|
* @example
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<!--
|
|
2
2
|
@component Skeleton
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
INFRARED — Content placeholder with shimmer animation.
|
|
5
5
|
Supports text lines, circles (avatars), and rectangular shapes.
|
|
6
6
|
Uses aria-busy for screen readers.
|
|
7
7
|
|
|
@@ -124,12 +124,16 @@ const lineWidths = $derived(
|
|
|
124
124
|
position: absolute;
|
|
125
125
|
inset: 0;
|
|
126
126
|
background: linear-gradient(
|
|
127
|
-
|
|
127
|
+
100deg,
|
|
128
128
|
transparent 0%,
|
|
129
|
+
transparent 35%,
|
|
130
|
+
rgba(255, 255, 255, 0.04) 45%,
|
|
129
131
|
var(--sx-color-surface-3) 50%,
|
|
132
|
+
rgba(255, 255, 255, 0.04) 55%,
|
|
133
|
+
transparent 65%,
|
|
130
134
|
transparent 100%
|
|
131
135
|
);
|
|
132
|
-
animation: sx-skeleton-sweep 1.8s ease-in-out infinite;
|
|
136
|
+
animation: sx-skeleton-sweep 1.8s var(--sx-ease-in-out) infinite;
|
|
133
137
|
}
|
|
134
138
|
|
|
135
139
|
@keyframes sx-skeleton-sweep {
|
|
@@ -21,7 +21,7 @@ interface Props {
|
|
|
21
21
|
/**
|
|
22
22
|
* Skeleton
|
|
23
23
|
*
|
|
24
|
-
*
|
|
24
|
+
* INFRARED — Content placeholder with shimmer animation.
|
|
25
25
|
* Supports text lines, circles (avatars), and rectangular shapes.
|
|
26
26
|
* Uses aria-busy for screen readers.
|
|
27
27
|
*
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
<!--
|
|
2
2
|
@component Spinner
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
INFRARED — Clean loading indicator.
|
|
5
|
+
Vermilion accent, dark surfaces, geometric shapes.
|
|
6
6
|
role="status", aria-label, delay, overlay. prefers-reduced-motion respected.
|
|
7
7
|
|
|
8
8
|
Three styles: ring (default), dots (inline), pulse (radar/broadcast).
|
|
@@ -191,7 +191,7 @@ const config = $derived(sizeConfig[size]);
|
|
|
191
191
|
|
|
192
192
|
/* Variants */
|
|
193
193
|
.sx-spinner-primary {
|
|
194
|
-
color: var(--sx-color-
|
|
194
|
+
color: var(--sx-color-primary);
|
|
195
195
|
}
|
|
196
196
|
|
|
197
197
|
.sx-spinner-secondary {
|
|
@@ -15,8 +15,8 @@ interface Props {
|
|
|
15
15
|
/**
|
|
16
16
|
* Spinner
|
|
17
17
|
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
18
|
+
* INFRARED — Clean loading indicator.
|
|
19
|
+
* Vermilion accent, dark surfaces, geometric shapes.
|
|
20
20
|
* role="status", aria-label, delay, overlay. prefers-reduced-motion respected.
|
|
21
21
|
*
|
|
22
22
|
* Three styles: ring (default), dots (inline), pulse (radar/broadcast).
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<!--
|
|
2
2
|
@component Toaster
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
INFRARED — Toast notification container.
|
|
5
5
|
Renders stacked toast notifications with slide-in/out animations,
|
|
6
6
|
auto-dismiss with pause-on-hover, keyboard dismiss, and ARIA live region.
|
|
7
7
|
|
|
@@ -231,7 +231,7 @@ onMount(() => {
|
|
|
231
231
|
}
|
|
232
232
|
|
|
233
233
|
.sx-toast:focus-visible {
|
|
234
|
-
outline: 2px solid var(--sx-color-
|
|
234
|
+
outline: 2px solid var(--sx-color-primary);
|
|
235
235
|
outline-offset: 2px;
|
|
236
236
|
}
|
|
237
237
|
|
|
@@ -249,11 +249,11 @@ onMount(() => {
|
|
|
249
249
|
}
|
|
250
250
|
|
|
251
251
|
.sx-toast-warning {
|
|
252
|
-
border-left-color: var(--sx-color-
|
|
252
|
+
border-left-color: var(--sx-color-secondary);
|
|
253
253
|
}
|
|
254
254
|
|
|
255
255
|
.sx-toast-info {
|
|
256
|
-
border-left-color: var(--sx-color-
|
|
256
|
+
border-left-color: var(--sx-color-primary);
|
|
257
257
|
}
|
|
258
258
|
|
|
259
259
|
/* Icon */
|
|
@@ -273,11 +273,11 @@ onMount(() => {
|
|
|
273
273
|
}
|
|
274
274
|
|
|
275
275
|
.sx-toast-warning .sx-toast-icon {
|
|
276
|
-
color: var(--sx-color-
|
|
276
|
+
color: var(--sx-color-secondary);
|
|
277
277
|
}
|
|
278
278
|
|
|
279
279
|
.sx-toast-info .sx-toast-icon {
|
|
280
|
-
color: var(--sx-color-
|
|
280
|
+
color: var(--sx-color-primary);
|
|
281
281
|
}
|
|
282
282
|
|
|
283
283
|
/* Content */
|
|
@@ -317,7 +317,7 @@ onMount(() => {
|
|
|
317
317
|
font-family: var(--sx-font-body);
|
|
318
318
|
font-size: var(--sx-text-xs);
|
|
319
319
|
font-weight: 600;
|
|
320
|
-
color: var(--sx-color-
|
|
320
|
+
color: var(--sx-color-primary);
|
|
321
321
|
cursor: pointer;
|
|
322
322
|
padding: var(--sx-space-1) var(--sx-space-2);
|
|
323
323
|
border-radius: var(--sx-radius-sm);
|
|
@@ -325,11 +325,11 @@ onMount(() => {
|
|
|
325
325
|
}
|
|
326
326
|
|
|
327
327
|
.sx-toast-action-btn:hover {
|
|
328
|
-
background: var(--sx-color-
|
|
328
|
+
background: var(--sx-color-primary-subtle);
|
|
329
329
|
}
|
|
330
330
|
|
|
331
331
|
.sx-toast-action-btn:focus-visible {
|
|
332
|
-
outline: 2px solid var(--sx-color-
|
|
332
|
+
outline: 2px solid var(--sx-color-primary);
|
|
333
333
|
outline-offset: 1px;
|
|
334
334
|
}
|
|
335
335
|
|
|
@@ -353,7 +353,7 @@ onMount(() => {
|
|
|
353
353
|
}
|
|
354
354
|
|
|
355
355
|
.sx-toast-close:focus-visible {
|
|
356
|
-
outline: 2px solid var(--sx-color-
|
|
356
|
+
outline: 2px solid var(--sx-color-primary);
|
|
357
357
|
outline-offset: 1px;
|
|
358
358
|
}
|
|
359
359
|
|
|
@@ -8,7 +8,7 @@ interface Props {
|
|
|
8
8
|
/**
|
|
9
9
|
* Toaster
|
|
10
10
|
*
|
|
11
|
-
*
|
|
11
|
+
* INFRARED — Toast notification container.
|
|
12
12
|
* Renders stacked toast notifications with slide-in/out animations,
|
|
13
13
|
* auto-dismiss with pause-on-hover, keyboard dismiss, and ARIA live region.
|
|
14
14
|
*
|
|
@@ -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
|
-->
|
|
@@ -209,22 +209,23 @@ function handleChange(e: Event) {
|
|
|
209
209
|
width: 100%;
|
|
210
210
|
height: 100%;
|
|
211
211
|
padding: 2px;
|
|
212
|
+
animation: sx-check-in var(--sx-duration-fast) var(--sx-ease-out) both;
|
|
212
213
|
}
|
|
213
214
|
|
|
214
215
|
.sx-checkbox-icon-minus {
|
|
215
216
|
padding: 3px 4px;
|
|
216
217
|
}
|
|
217
218
|
|
|
218
|
-
/* Checked --
|
|
219
|
+
/* Checked -- vermilion fill, white checkmark */
|
|
219
220
|
.sx-checkbox-box-checked {
|
|
220
|
-
background: var(--sx-color-
|
|
221
|
-
border-color: var(--sx-color-
|
|
221
|
+
background: var(--sx-color-primary);
|
|
222
|
+
border-color: var(--sx-color-primary);
|
|
222
223
|
}
|
|
223
224
|
|
|
224
225
|
/* Indeterminate -- same as checked */
|
|
225
226
|
.sx-checkbox-box-indeterminate {
|
|
226
|
-
background: var(--sx-color-
|
|
227
|
-
border-color: var(--sx-color-
|
|
227
|
+
background: var(--sx-color-primary);
|
|
228
|
+
border-color: var(--sx-color-primary);
|
|
228
229
|
}
|
|
229
230
|
|
|
230
231
|
/* Hover -- border brightens on unchecked box */
|
|
@@ -232,9 +233,9 @@ function handleChange(e: Event) {
|
|
|
232
233
|
border-color: var(--sx-color-border-hover);
|
|
233
234
|
}
|
|
234
235
|
|
|
235
|
-
/* Focus --
|
|
236
|
+
/* Focus -- primary outline */
|
|
236
237
|
.sx-checkbox-input:focus-visible + .sx-checkbox-box {
|
|
237
|
-
outline: 2px solid var(--sx-color-
|
|
238
|
+
outline: 2px solid var(--sx-color-primary);
|
|
238
239
|
outline-offset: 2px;
|
|
239
240
|
}
|
|
240
241
|
|
|
@@ -303,5 +304,9 @@ function handleChange(e: Event) {
|
|
|
303
304
|
.sx-checkbox-box {
|
|
304
305
|
transition: none;
|
|
305
306
|
}
|
|
307
|
+
|
|
308
|
+
.sx-checkbox-icon {
|
|
309
|
+
animation: none;
|
|
310
|
+
}
|
|
306
311
|
}
|
|
307
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
|
*/
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<!--
|
|
2
2
|
@component Select
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
INFRARED — Dropdown select with clean trigger field, glass-blur panel,
|
|
5
5
|
keyboard-first navigation, type-ahead search, option groups, and multi-select.
|
|
6
6
|
|
|
7
7
|
Follows WAI-ARIA APG Select-Only Combobox pattern: DOM focus stays on
|
|
@@ -646,13 +646,13 @@ onMount(() => {
|
|
|
646
646
|
|
|
647
647
|
.sx-select-trigger:focus-visible {
|
|
648
648
|
outline: none;
|
|
649
|
-
border-color: var(--sx-color-
|
|
650
|
-
box-shadow: 0 0 0 3px var(--sx-color-
|
|
649
|
+
border-color: var(--sx-color-primary);
|
|
650
|
+
box-shadow: 0 0 0 3px var(--sx-color-primary-ring);
|
|
651
651
|
}
|
|
652
652
|
|
|
653
653
|
.sx-select-trigger-open {
|
|
654
|
-
border-color: var(--sx-color-
|
|
655
|
-
box-shadow: 0 0 0 3px var(--sx-color-
|
|
654
|
+
border-color: var(--sx-color-primary);
|
|
655
|
+
box-shadow: 0 0 0 3px var(--sx-color-primary-ring);
|
|
656
656
|
}
|
|
657
657
|
|
|
658
658
|
.sx-select-trigger-error {
|
|
@@ -747,12 +747,12 @@ onMount(() => {
|
|
|
747
747
|
}
|
|
748
748
|
|
|
749
749
|
.sx-select-option-active {
|
|
750
|
-
background: var(--sx-color-
|
|
751
|
-
color: var(--sx-color-
|
|
750
|
+
background: var(--sx-color-primary-hover);
|
|
751
|
+
color: var(--sx-color-primary);
|
|
752
752
|
}
|
|
753
753
|
|
|
754
754
|
.sx-select-option-selected:not(.sx-select-option-active) {
|
|
755
|
-
background: var(--sx-color-
|
|
755
|
+
background: var(--sx-color-primary-subtle);
|
|
756
756
|
}
|
|
757
757
|
|
|
758
758
|
.sx-select-option-disabled {
|
|
@@ -772,11 +772,11 @@ onMount(() => {
|
|
|
772
772
|
flex-shrink: 0;
|
|
773
773
|
display: flex;
|
|
774
774
|
align-items: center;
|
|
775
|
-
color: var(--sx-color-
|
|
775
|
+
color: var(--sx-color-primary);
|
|
776
776
|
}
|
|
777
777
|
|
|
778
778
|
.sx-select-option-active .sx-select-checkmark {
|
|
779
|
-
color: var(--sx-color-
|
|
779
|
+
color: var(--sx-color-primary);
|
|
780
780
|
}
|
|
781
781
|
|
|
782
782
|
/* Checkbox square for multi select */
|
|
@@ -793,7 +793,7 @@ onMount(() => {
|
|
|
793
793
|
}
|
|
794
794
|
|
|
795
795
|
.sx-select-option-active .sx-select-check {
|
|
796
|
-
border-color: var(--sx-color-
|
|
796
|
+
border-color: var(--sx-color-primary);
|
|
797
797
|
}
|
|
798
798
|
|
|
799
799
|
/* ========================================
|
|
@@ -47,7 +47,7 @@ interface Props {
|
|
|
47
47
|
/**
|
|
48
48
|
* Select
|
|
49
49
|
*
|
|
50
|
-
*
|
|
50
|
+
* INFRARED — Dropdown select with clean trigger field, glass-blur panel,
|
|
51
51
|
* keyboard-first navigation, type-ahead search, option groups, and multi-select.
|
|
52
52
|
*
|
|
53
53
|
* Follows WAI-ARIA APG Select-Only Combobox pattern: DOM focus stays on
|