@salmexio/ui 0.3.1 → 1.0.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 +96 -93
- 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 -102
- package/dist/dialogs/Modal/Modal.svelte.d.ts +1 -1
- package/dist/feedback/Alert/Alert.svelte +115 -221
- package/dist/feedback/Alert/Alert.svelte.d.ts +1 -1
- package/dist/feedback/ProgressBar/ProgressBar.svelte +246 -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 +153 -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 +88 -154
- 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 +82 -103
- package/dist/forms/Checkbox/Checkbox.svelte.d.ts +1 -1
- package/dist/forms/Select/Select.svelte +136 -177
- 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 +148 -164
- 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 +64 -40
- 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/navigation/CommandPalette/CommandPalette.svelte +410 -181
- 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 +94 -178
- package/dist/navigation/Tabs/Tabs.svelte.d.ts +2 -2
- package/dist/primitives/Badge/Badge.svelte +85 -223
- 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 +138 -208
- 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 +200 -259
- package/package.json +5 -5
- package/dist/windowing/Window/Window.svelte +0 -602
- 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 -410
- 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,16 +1,18 @@
|
|
|
1
1
|
<!--
|
|
2
2
|
@component Spinner
|
|
3
3
|
|
|
4
|
-
|
|
5
|
-
|
|
4
|
+
Neo-Brutalist Dark — Clean loading indicator.
|
|
5
|
+
Cyan accent, dark surfaces, geometric shapes.
|
|
6
6
|
role="status", aria-label, delay, overlay. prefers-reduced-motion respected.
|
|
7
|
+
|
|
8
|
+
Three styles: ring (default), dots (inline), pulse (radar/broadcast).
|
|
7
9
|
-->
|
|
8
10
|
<script lang="ts">
|
|
9
11
|
import { cn } from '../../utils/cn.js';
|
|
10
12
|
|
|
11
13
|
type SpinnerSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
|
|
12
14
|
type SpinnerVariant = 'primary' | 'secondary' | 'white';
|
|
13
|
-
type SpinnerStyle = 'ring' | '
|
|
15
|
+
type SpinnerStyle = 'ring' | 'dots' | 'pulse';
|
|
14
16
|
|
|
15
17
|
interface Props {
|
|
16
18
|
size?: SpinnerSize;
|
|
@@ -54,11 +56,11 @@ const sizeConfig: Record<
|
|
|
54
56
|
SpinnerSize,
|
|
55
57
|
{ dimension: number; stroke: number; fontSize: string; dotSize: number }
|
|
56
58
|
> = {
|
|
57
|
-
xs: { dimension: 16, stroke: 2.5, fontSize: 'var(--
|
|
58
|
-
sm: { dimension: 20, stroke: 3, fontSize: 'var(--
|
|
59
|
-
md: { dimension: 28, stroke: 4, fontSize: 'var(--
|
|
60
|
-
lg: { dimension: 40, stroke: 5, fontSize: 'var(--
|
|
61
|
-
xl: { dimension: 56, stroke: 6, fontSize: 'var(--
|
|
59
|
+
xs: { dimension: 16, stroke: 2.5, fontSize: 'var(--sx-text-xs)', dotSize: 4 },
|
|
60
|
+
sm: { dimension: 20, stroke: 3, fontSize: 'var(--sx-text-sm)', dotSize: 5 },
|
|
61
|
+
md: { dimension: 28, stroke: 4, fontSize: 'var(--sx-text-sm)', dotSize: 6 },
|
|
62
|
+
lg: { dimension: 40, stroke: 5, fontSize: 'var(--sx-text-base)', dotSize: 8 },
|
|
63
|
+
xl: { dimension: 56, stroke: 6, fontSize: 'var(--sx-text-md)', dotSize: 10 }
|
|
62
64
|
};
|
|
63
65
|
|
|
64
66
|
const config = $derived(sizeConfig[size]);
|
|
@@ -68,11 +70,11 @@ const config = $derived(sizeConfig[size]);
|
|
|
68
70
|
<div
|
|
69
71
|
{id}
|
|
70
72
|
class={cn(
|
|
71
|
-
'
|
|
72
|
-
`
|
|
73
|
-
`
|
|
74
|
-
`
|
|
75
|
-
overlay && '
|
|
73
|
+
'sx-spinner',
|
|
74
|
+
`sx-spinner-${size}`,
|
|
75
|
+
`sx-spinner-${variant}`,
|
|
76
|
+
`sx-spinner-style-${style}`,
|
|
77
|
+
overlay && 'sx-spinner-overlay',
|
|
76
78
|
className
|
|
77
79
|
)}
|
|
78
80
|
role="status"
|
|
@@ -80,28 +82,26 @@ const config = $derived(sizeConfig[size]);
|
|
|
80
82
|
aria-busy="true"
|
|
81
83
|
aria-label={label}
|
|
82
84
|
>
|
|
83
|
-
<div class="
|
|
85
|
+
<div class="sx-spinner-content">
|
|
84
86
|
{#if style === 'ring'}
|
|
85
87
|
<svg
|
|
86
|
-
class="
|
|
88
|
+
class="sx-spinner-ring"
|
|
87
89
|
width={config.dimension}
|
|
88
90
|
height={config.dimension}
|
|
89
91
|
viewBox="0 0 32 32"
|
|
90
92
|
fill="none"
|
|
91
93
|
aria-hidden="true"
|
|
92
94
|
>
|
|
93
|
-
<!-- Track: full circle, bold stroke -->
|
|
94
95
|
<circle
|
|
95
|
-
class="
|
|
96
|
+
class="sx-spinner-track"
|
|
96
97
|
cx="16"
|
|
97
98
|
cy="16"
|
|
98
99
|
r="14"
|
|
99
100
|
stroke="currentColor"
|
|
100
101
|
stroke-width={config.stroke}
|
|
101
102
|
/>
|
|
102
|
-
<!-- Arc: one bold segment, round caps -->
|
|
103
103
|
<circle
|
|
104
|
-
class="
|
|
104
|
+
class="sx-spinner-arc"
|
|
105
105
|
cx="16"
|
|
106
106
|
cy="16"
|
|
107
107
|
r="14"
|
|
@@ -111,81 +111,60 @@ const config = $derived(sizeConfig[size]);
|
|
|
111
111
|
stroke-dasharray="22 66"
|
|
112
112
|
/>
|
|
113
113
|
</svg>
|
|
114
|
-
{
|
|
115
|
-
|
|
116
|
-
{#if style === 'bars'}
|
|
114
|
+
{:else if style === 'pulse'}
|
|
117
115
|
<div
|
|
118
|
-
class="
|
|
116
|
+
class="sx-spinner-pulse"
|
|
119
117
|
style="width: {config.dimension}px; height: {config.dimension}px;"
|
|
120
118
|
aria-hidden="true"
|
|
121
|
-
></div>
|
|
122
|
-
{/if}
|
|
123
|
-
|
|
124
|
-
{#if style === 'segment'}
|
|
125
|
-
<div
|
|
126
|
-
class="salmex-spinner-segment"
|
|
127
|
-
style="width: {config.dimension}px; height: {config.dimension}px;"
|
|
128
|
-
aria-hidden="true"
|
|
129
|
-
></div>
|
|
130
|
-
{/if}
|
|
131
|
-
|
|
132
|
-
{#if style === 'dots'}
|
|
133
|
-
<div
|
|
134
|
-
class="salmex-spinner-dots"
|
|
135
|
-
style="--dot-size: {config.dotSize}px; --spinner-dim: {config.dimension}px;"
|
|
136
|
-
aria-hidden="true"
|
|
137
119
|
>
|
|
138
|
-
<span class="
|
|
139
|
-
<span class="
|
|
140
|
-
<span class="
|
|
120
|
+
<span class="sx-pulse-ring sx-pulse-ring-1"></span>
|
|
121
|
+
<span class="sx-pulse-ring sx-pulse-ring-2"></span>
|
|
122
|
+
<span class="sx-pulse-dot"></span>
|
|
141
123
|
</div>
|
|
142
|
-
{
|
|
143
|
-
|
|
144
|
-
{#if style === 'pulse'}
|
|
124
|
+
{:else}
|
|
145
125
|
<div
|
|
146
|
-
class="
|
|
147
|
-
style="
|
|
126
|
+
class="sx-spinner-dots"
|
|
127
|
+
style="--dot-size: {config.dotSize}px; --spinner-dim: {config.dimension}px;"
|
|
148
128
|
aria-hidden="true"
|
|
149
129
|
>
|
|
150
|
-
<span class="
|
|
151
|
-
<span class="
|
|
152
|
-
<span class="
|
|
130
|
+
<span class="sx-spinner-dot sx-spinner-dot-1"></span>
|
|
131
|
+
<span class="sx-spinner-dot sx-spinner-dot-2"></span>
|
|
132
|
+
<span class="sx-spinner-dot sx-spinner-dot-3"></span>
|
|
153
133
|
</div>
|
|
154
134
|
{/if}
|
|
155
135
|
|
|
156
136
|
{#if showLabel}
|
|
157
|
-
<span class="
|
|
137
|
+
<span class="sx-spinner-label" style="font-size: {config.fontSize};">
|
|
158
138
|
{label}
|
|
159
139
|
</span>
|
|
160
140
|
{:else}
|
|
161
|
-
<span class="
|
|
141
|
+
<span class="sx-sr-only">{label}</span>
|
|
162
142
|
{/if}
|
|
163
143
|
</div>
|
|
164
144
|
</div>
|
|
165
145
|
{/if}
|
|
166
146
|
|
|
167
147
|
<style>
|
|
168
|
-
.
|
|
148
|
+
.sx-spinner {
|
|
169
149
|
display: inline-flex;
|
|
170
150
|
align-items: center;
|
|
171
151
|
justify-content: center;
|
|
172
152
|
}
|
|
173
153
|
|
|
174
|
-
.
|
|
154
|
+
.sx-spinner-content {
|
|
175
155
|
display: inline-flex;
|
|
176
156
|
align-items: center;
|
|
177
|
-
gap: var(--
|
|
157
|
+
gap: var(--sx-space-2);
|
|
178
158
|
}
|
|
179
159
|
|
|
180
|
-
.
|
|
181
|
-
font-family: var(--
|
|
182
|
-
font-weight:
|
|
183
|
-
text-transform: uppercase;
|
|
160
|
+
.sx-spinner-label {
|
|
161
|
+
font-family: var(--sx-font-body);
|
|
162
|
+
font-weight: 600;
|
|
184
163
|
letter-spacing: 0.3px;
|
|
185
|
-
color:
|
|
164
|
+
color: var(--sx-color-text-secondary);
|
|
186
165
|
}
|
|
187
166
|
|
|
188
|
-
.
|
|
167
|
+
.sx-sr-only {
|
|
189
168
|
position: absolute;
|
|
190
169
|
width: 1px;
|
|
191
170
|
height: 1px;
|
|
@@ -197,86 +176,54 @@ const config = $derived(sizeConfig[size]);
|
|
|
197
176
|
border: 0;
|
|
198
177
|
}
|
|
199
178
|
|
|
200
|
-
.
|
|
179
|
+
.sx-spinner-overlay {
|
|
201
180
|
position: absolute;
|
|
202
181
|
inset: 0;
|
|
203
182
|
display: flex;
|
|
204
183
|
align-items: center;
|
|
205
184
|
justify-content: center;
|
|
206
|
-
background:
|
|
207
|
-
|
|
185
|
+
background: rgba(10, 10, 15, 0.7);
|
|
186
|
+
backdrop-filter: blur(4px);
|
|
187
|
+
-webkit-backdrop-filter: blur(4px);
|
|
188
|
+
z-index: var(--sx-z-modal-backdrop);
|
|
208
189
|
border-radius: inherit;
|
|
209
|
-
/* Flat, bold overlay edge - no blur */
|
|
210
|
-
box-shadow: inset 0 0 0 3px rgb(var(--salmex-border-default));
|
|
211
|
-
}
|
|
212
|
-
|
|
213
|
-
:global([data-theme='dark']) .salmex-spinner-overlay {
|
|
214
|
-
background: rgb(var(--salmex-midnight-black) / 0.9);
|
|
215
|
-
box-shadow: inset 0 0 0 3px rgb(var(--salmex-border-light));
|
|
216
|
-
}
|
|
217
|
-
|
|
218
|
-
/* Variants - crown yellow / electric blue, bold */
|
|
219
|
-
.salmex-spinner-primary {
|
|
220
|
-
color: rgb(var(--salmex-electric-blue));
|
|
221
190
|
}
|
|
222
191
|
|
|
223
|
-
|
|
224
|
-
|
|
192
|
+
/* Variants */
|
|
193
|
+
.sx-spinner-primary {
|
|
194
|
+
color: var(--sx-color-cyan);
|
|
225
195
|
}
|
|
226
196
|
|
|
227
|
-
.
|
|
228
|
-
color:
|
|
197
|
+
.sx-spinner-secondary {
|
|
198
|
+
color: var(--sx-color-text-secondary);
|
|
229
199
|
}
|
|
230
200
|
|
|
231
|
-
.
|
|
232
|
-
color:
|
|
201
|
+
.sx-spinner-white {
|
|
202
|
+
color: var(--sx-color-text);
|
|
233
203
|
}
|
|
234
204
|
|
|
235
|
-
/* ========== RING
|
|
236
|
-
.
|
|
237
|
-
animation:
|
|
238
|
-
filter: drop-shadow(var(--salmex-shadow-sm));
|
|
205
|
+
/* ========== RING ========== */
|
|
206
|
+
.sx-spinner-ring {
|
|
207
|
+
animation: sx-spin 0.85s linear infinite;
|
|
239
208
|
}
|
|
240
209
|
|
|
241
|
-
.
|
|
242
|
-
opacity: 0.
|
|
210
|
+
.sx-spinner-track {
|
|
211
|
+
opacity: 0.15;
|
|
212
|
+
stroke: var(--sx-color-surface-2);
|
|
243
213
|
}
|
|
244
214
|
|
|
245
|
-
.
|
|
215
|
+
.sx-spinner-arc {
|
|
246
216
|
transform-origin: center;
|
|
247
217
|
}
|
|
248
218
|
|
|
249
|
-
@keyframes
|
|
219
|
+
@keyframes sx-spin {
|
|
250
220
|
to {
|
|
251
221
|
transform: rotate(360deg);
|
|
252
222
|
}
|
|
253
223
|
}
|
|
254
224
|
|
|
255
|
-
/* ==========
|
|
256
|
-
.
|
|
257
|
-
border-radius: 50%;
|
|
258
|
-
background: repeating-conic-gradient(
|
|
259
|
-
currentColor 0deg 12deg,
|
|
260
|
-
transparent 12deg 30deg
|
|
261
|
-
);
|
|
262
|
-
animation: salmex-spin 0.9s linear infinite;
|
|
263
|
-
box-shadow: var(--salmex-shadow-sm);
|
|
264
|
-
}
|
|
265
|
-
|
|
266
|
-
/* ========== SEGMENT: one bold pie slice, high contrast ========== */
|
|
267
|
-
.salmex-spinner-segment {
|
|
268
|
-
border-radius: 50%;
|
|
269
|
-
background: conic-gradient(
|
|
270
|
-
from 0deg,
|
|
271
|
-
currentColor 0deg 100deg,
|
|
272
|
-
transparent 100deg 360deg
|
|
273
|
-
);
|
|
274
|
-
animation: salmex-spin 0.75s linear infinite;
|
|
275
|
-
box-shadow: var(--salmex-shadow-sm);
|
|
276
|
-
}
|
|
277
|
-
|
|
278
|
-
/* ========== DOTS: bold, flat shadow ========== */
|
|
279
|
-
.salmex-spinner-dots {
|
|
225
|
+
/* ========== DOTS ========== */
|
|
226
|
+
.sx-spinner-dots {
|
|
280
227
|
display: flex;
|
|
281
228
|
align-items: center;
|
|
282
229
|
justify-content: center;
|
|
@@ -284,24 +231,23 @@ const config = $derived(sizeConfig[size]);
|
|
|
284
231
|
height: var(--spinner-dim);
|
|
285
232
|
}
|
|
286
233
|
|
|
287
|
-
.
|
|
234
|
+
.sx-spinner-dot {
|
|
288
235
|
width: var(--dot-size);
|
|
289
236
|
height: var(--dot-size);
|
|
290
|
-
border-radius:
|
|
237
|
+
border-radius: 50%;
|
|
291
238
|
background: currentColor;
|
|
292
|
-
|
|
293
|
-
animation: salmex-dot-bounce 1s ease-out infinite both;
|
|
239
|
+
animation: sx-dot-bounce 1s ease-out infinite both;
|
|
294
240
|
}
|
|
295
241
|
|
|
296
|
-
.
|
|
242
|
+
.sx-spinner-dot-1 {
|
|
297
243
|
animation-delay: -0.2s;
|
|
298
244
|
}
|
|
299
245
|
|
|
300
|
-
.
|
|
246
|
+
.sx-spinner-dot-2 {
|
|
301
247
|
animation-delay: -0.1s;
|
|
302
248
|
}
|
|
303
249
|
|
|
304
|
-
@keyframes
|
|
250
|
+
@keyframes sx-dot-bounce {
|
|
305
251
|
0%, 60%, 100% {
|
|
306
252
|
transform: scale(0.75);
|
|
307
253
|
opacity: 0.7;
|
|
@@ -312,37 +258,36 @@ const config = $derived(sizeConfig[size]);
|
|
|
312
258
|
}
|
|
313
259
|
}
|
|
314
260
|
|
|
315
|
-
/* ========== PULSE
|
|
316
|
-
.
|
|
261
|
+
/* ========== PULSE ========== */
|
|
262
|
+
.sx-spinner-pulse {
|
|
317
263
|
position: relative;
|
|
318
264
|
display: flex;
|
|
319
265
|
align-items: center;
|
|
320
266
|
justify-content: center;
|
|
321
267
|
}
|
|
322
268
|
|
|
323
|
-
.
|
|
269
|
+
.sx-pulse-ring {
|
|
324
270
|
position: absolute;
|
|
325
271
|
inset: 0;
|
|
326
272
|
border-radius: 50%;
|
|
327
273
|
border: 3px solid currentColor;
|
|
328
274
|
opacity: 0;
|
|
329
|
-
animation:
|
|
275
|
+
animation: sx-pulse-ring 1.5s ease-out infinite;
|
|
330
276
|
}
|
|
331
277
|
|
|
332
|
-
.
|
|
278
|
+
.sx-pulse-ring-2 {
|
|
333
279
|
animation-delay: 0.75s;
|
|
334
280
|
}
|
|
335
281
|
|
|
336
|
-
.
|
|
282
|
+
.sx-pulse-dot {
|
|
337
283
|
width: 28%;
|
|
338
284
|
height: 28%;
|
|
339
|
-
border-radius:
|
|
285
|
+
border-radius: 50%;
|
|
340
286
|
background: currentColor;
|
|
341
|
-
|
|
342
|
-
animation: salmex-pulse-dot 1.5s ease-out infinite;
|
|
287
|
+
animation: sx-pulse-dot 1.5s ease-out infinite;
|
|
343
288
|
}
|
|
344
289
|
|
|
345
|
-
@keyframes
|
|
290
|
+
@keyframes sx-pulse-ring {
|
|
346
291
|
0% {
|
|
347
292
|
transform: scale(0.4);
|
|
348
293
|
opacity: 0.9;
|
|
@@ -353,7 +298,7 @@ const config = $derived(sizeConfig[size]);
|
|
|
353
298
|
}
|
|
354
299
|
}
|
|
355
300
|
|
|
356
|
-
@keyframes
|
|
301
|
+
@keyframes sx-pulse-dot {
|
|
357
302
|
0%, 100% {
|
|
358
303
|
transform: scale(0.85);
|
|
359
304
|
opacity: 0.8;
|
|
@@ -366,55 +311,44 @@ const config = $derived(sizeConfig[size]);
|
|
|
366
311
|
|
|
367
312
|
/* ========== REDUCED MOTION ========== */
|
|
368
313
|
@media (prefers-reduced-motion: reduce) {
|
|
369
|
-
.
|
|
370
|
-
.salmex-spinner-bars,
|
|
371
|
-
.salmex-spinner-segment {
|
|
314
|
+
.sx-spinner-ring {
|
|
372
315
|
animation: none;
|
|
373
316
|
}
|
|
374
317
|
|
|
375
|
-
.
|
|
376
|
-
filter: none;
|
|
377
|
-
}
|
|
378
|
-
|
|
379
|
-
.salmex-spinner-arc {
|
|
318
|
+
.sx-spinner-arc {
|
|
380
319
|
stroke-dasharray: 22 66;
|
|
381
320
|
opacity: 0.9;
|
|
382
321
|
transform: rotate(-90deg);
|
|
383
322
|
}
|
|
384
323
|
|
|
385
|
-
.
|
|
386
|
-
.salmex-spinner-segment {
|
|
387
|
-
opacity: 0.85;
|
|
388
|
-
}
|
|
389
|
-
|
|
390
|
-
.salmex-spinner-dot {
|
|
324
|
+
.sx-spinner-dot {
|
|
391
325
|
animation: none;
|
|
392
326
|
opacity: 0.8;
|
|
393
327
|
}
|
|
394
328
|
|
|
395
|
-
.
|
|
329
|
+
.sx-spinner-dot-1 {
|
|
396
330
|
opacity: 0.5;
|
|
397
331
|
}
|
|
398
332
|
|
|
399
|
-
.
|
|
333
|
+
.sx-spinner-dot-2 {
|
|
400
334
|
opacity: 0.75;
|
|
401
335
|
}
|
|
402
336
|
|
|
403
|
-
.
|
|
404
|
-
.
|
|
337
|
+
.sx-pulse-ring,
|
|
338
|
+
.sx-pulse-dot {
|
|
405
339
|
animation: none;
|
|
406
340
|
}
|
|
407
341
|
|
|
408
|
-
.
|
|
342
|
+
.sx-pulse-ring {
|
|
409
343
|
opacity: 0.25;
|
|
410
344
|
transform: scale(1);
|
|
411
345
|
}
|
|
412
346
|
|
|
413
|
-
.
|
|
347
|
+
.sx-pulse-ring-2 {
|
|
414
348
|
display: none;
|
|
415
349
|
}
|
|
416
350
|
|
|
417
|
-
.
|
|
351
|
+
.sx-pulse-dot {
|
|
418
352
|
opacity: 1;
|
|
419
353
|
}
|
|
420
354
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
type SpinnerSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
|
|
2
2
|
type SpinnerVariant = 'primary' | 'secondary' | 'white';
|
|
3
|
-
type SpinnerStyle = 'ring' | '
|
|
3
|
+
type SpinnerStyle = 'ring' | 'dots' | 'pulse';
|
|
4
4
|
interface Props {
|
|
5
5
|
size?: SpinnerSize;
|
|
6
6
|
variant?: SpinnerVariant;
|
|
@@ -15,9 +15,11 @@ interface Props {
|
|
|
15
15
|
/**
|
|
16
16
|
* Spinner
|
|
17
17
|
*
|
|
18
|
-
*
|
|
19
|
-
*
|
|
18
|
+
* Neo-Brutalist Dark — Clean loading indicator.
|
|
19
|
+
* Cyan accent, dark surfaces, geometric shapes.
|
|
20
20
|
* role="status", aria-label, delay, overlay. prefers-reduced-motion respected.
|
|
21
|
+
*
|
|
22
|
+
* Three styles: ring (default), dots (inline), pulse (radar/broadcast).
|
|
21
23
|
*/
|
|
22
24
|
declare const Spinner: import("svelte").Component<Props, {}, "">;
|
|
23
25
|
type Spinner = ReturnType<typeof Spinner>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Spinner.svelte.d.ts","sourceRoot":"","sources":["../../../src/feedback/Spinner/Spinner.svelte.ts"],"names":[],"mappings":"AAMA,KAAK,WAAW,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AACpD,KAAK,cAAc,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,CAAC;AACxD,KAAK,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,
|
|
1
|
+
{"version":3,"file":"Spinner.svelte.d.ts","sourceRoot":"","sources":["../../../src/feedback/Spinner/Spinner.svelte.ts"],"names":[],"mappings":"AAMA,KAAK,WAAW,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AACpD,KAAK,cAAc,GAAG,SAAS,GAAG,WAAW,GAAG,OAAO,CAAC;AACxD,KAAK,YAAY,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE9C,UAAU,KAAK;IACd,IAAI,CAAC,EAAE,WAAW,CAAC;IACnB,OAAO,CAAC,EAAE,cAAc,CAAC;IACzB,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;CACZ;AA6FD;;;;;;;;GAQG;AACH,QAAA,MAAM,OAAO,2CAAwC,CAAC;AACtD,KAAK,OAAO,GAAG,UAAU,CAAC,OAAO,OAAO,CAAC,CAAC;AAC1C,eAAe,OAAO,CAAC"}
|