@salmexio/ui 0.4.0 → 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 +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 +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 +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 +82 -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 +151 -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 +64 -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/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 +95 -181
- package/dist/navigation/Tabs/Tabs.svelte.d.ts +2 -2
- package/dist/primitives/Badge/Badge.svelte +83 -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 +144 -195
- 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 +197 -265
- 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,14 +1,14 @@
|
|
|
1
1
|
<!--
|
|
2
2
|
@component Button
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
|
|
4
|
+
Neo-Brutalist Dark — Glassmorphism button with glow effects.
|
|
5
|
+
Clean geometry, expressive energy, world-class accessibility.
|
|
6
|
+
|
|
7
7
|
@example
|
|
8
8
|
<Button variant="default" size="md" onclick={() => handleClick()}>
|
|
9
9
|
Click me
|
|
10
10
|
</Button>
|
|
11
|
-
|
|
11
|
+
|
|
12
12
|
@example
|
|
13
13
|
<Button variant="primary" disabled>
|
|
14
14
|
<Icon slot="icon-left" />
|
|
@@ -21,7 +21,7 @@ import type { HTMLButtonAttributes } from 'svelte/elements';
|
|
|
21
21
|
import { cn } from '../../utils/cn.js';
|
|
22
22
|
|
|
23
23
|
type ButtonSize = 'sm' | 'md' | 'lg';
|
|
24
|
-
type ButtonVariant = 'default' | 'primary' | 'ghost';
|
|
24
|
+
type ButtonVariant = 'default' | 'primary' | 'ghost' | 'danger';
|
|
25
25
|
|
|
26
26
|
interface Props extends Omit<HTMLButtonAttributes, 'class'> {
|
|
27
27
|
/** Visual variant of the button */
|
|
@@ -68,11 +68,11 @@ const isDisabled = $derived(disabled);
|
|
|
68
68
|
<button
|
|
69
69
|
{type}
|
|
70
70
|
class={cn(
|
|
71
|
-
'
|
|
72
|
-
`
|
|
73
|
-
`
|
|
74
|
-
iconOnly && '
|
|
75
|
-
fullWidth && !iconOnly && '
|
|
71
|
+
'sx-btn',
|
|
72
|
+
`sx-btn-${variant}`,
|
|
73
|
+
`sx-btn-${size}`,
|
|
74
|
+
iconOnly && 'sx-btn-icon-only',
|
|
75
|
+
fullWidth && !iconOnly && 'sx-btn-full-width',
|
|
76
76
|
className
|
|
77
77
|
)}
|
|
78
78
|
disabled={isDisabled}
|
|
@@ -80,9 +80,9 @@ const isDisabled = $derived(disabled);
|
|
|
80
80
|
data-testid={testId}
|
|
81
81
|
{...restProps}
|
|
82
82
|
>
|
|
83
|
-
<span class="
|
|
83
|
+
<span class="sx-btn-content">
|
|
84
84
|
{#if iconLeft}
|
|
85
|
-
<span class="
|
|
85
|
+
<span class="sx-btn-icon" aria-hidden="true">
|
|
86
86
|
{@render iconLeft()}
|
|
87
87
|
</span>
|
|
88
88
|
{/if}
|
|
@@ -92,13 +92,13 @@ const isDisabled = $derived(disabled);
|
|
|
92
92
|
{/if}
|
|
93
93
|
|
|
94
94
|
{#if iconRight}
|
|
95
|
-
<span class="
|
|
95
|
+
<span class="sx-btn-icon" aria-hidden="true">
|
|
96
96
|
{@render iconRight()}
|
|
97
97
|
</span>
|
|
98
98
|
{/if}
|
|
99
99
|
|
|
100
100
|
{#if shortcut}
|
|
101
|
-
<span class="
|
|
101
|
+
<span class="sx-btn-shortcut" aria-label="Keyboard shortcut: {shortcut}">
|
|
102
102
|
{shortcut}
|
|
103
103
|
</span>
|
|
104
104
|
{/if}
|
|
@@ -107,283 +107,232 @@ const isDisabled = $derived(disabled);
|
|
|
107
107
|
|
|
108
108
|
<style>
|
|
109
109
|
/* ========================================
|
|
110
|
-
BASE BUTTON -
|
|
110
|
+
BASE BUTTON - Neo-Brutalist Dark
|
|
111
111
|
======================================== */
|
|
112
|
-
.
|
|
112
|
+
.sx-btn {
|
|
113
113
|
position: relative;
|
|
114
114
|
display: inline-flex;
|
|
115
115
|
align-items: center;
|
|
116
116
|
justify-content: center;
|
|
117
|
-
gap: var(--
|
|
118
|
-
font-family: var(--
|
|
119
|
-
font-weight:
|
|
117
|
+
gap: var(--sx-space-2);
|
|
118
|
+
font-family: var(--sx-font-body);
|
|
119
|
+
font-weight: 600;
|
|
120
120
|
cursor: pointer;
|
|
121
121
|
user-select: none;
|
|
122
122
|
-webkit-tap-highlight-color: transparent;
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
border:
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
box-shadow
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
/* Bottom-right shadow */
|
|
134
|
-
inset -1px -1px 0 rgb(var(--salmex-button-shadow)),
|
|
135
|
-
/* Outer bold border */
|
|
136
|
-
0 0 0 2px rgb(var(--salmex-border-dark)),
|
|
137
|
-
/* Flat shadow - Basquiat style */
|
|
138
|
-
4px 4px 1px rgb(0 0 0 / 0.25);
|
|
139
|
-
|
|
140
|
-
transition: all var(--salmex-transition-fast);
|
|
141
|
-
text-transform: uppercase;
|
|
142
|
-
letter-spacing: 0.3px;
|
|
123
|
+
|
|
124
|
+
background: var(--sx-color-surface-2);
|
|
125
|
+
border: 1px solid var(--sx-color-border-strong);
|
|
126
|
+
border-radius: var(--sx-radius-md);
|
|
127
|
+
color: var(--sx-color-text);
|
|
128
|
+
box-shadow: var(--sx-shadow-sm);
|
|
129
|
+
|
|
130
|
+
transition: transform var(--sx-transition-fast), box-shadow var(--sx-transition-fast),
|
|
131
|
+
background var(--sx-transition-fast), border-color var(--sx-transition-fast),
|
|
132
|
+
color var(--sx-transition-fast);
|
|
143
133
|
}
|
|
144
134
|
|
|
145
|
-
/* Focus
|
|
146
|
-
.
|
|
147
|
-
outline:
|
|
148
|
-
|
|
149
|
-
inset 1px 1px 0 rgb(var(--salmex-button-highlight)),
|
|
150
|
-
inset -1px -1px 0 rgb(var(--salmex-button-shadow)),
|
|
151
|
-
0 0 0 2px rgb(var(--salmex-border-dark)),
|
|
152
|
-
4px 4px 1px rgb(0 0 0 / 0.25),
|
|
153
|
-
0 0 0 2px rgb(var(--salmex-midnight-black)),
|
|
154
|
-
0 0 2px 4px rgb(var(--salmex-crown-yellow));
|
|
135
|
+
/* Focus */
|
|
136
|
+
.sx-btn:focus-visible {
|
|
137
|
+
outline: 2px solid var(--sx-color-cyan);
|
|
138
|
+
outline-offset: 2px;
|
|
155
139
|
}
|
|
156
140
|
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
inset -1px -1px 0 rgb(var(--salmex-button-shadow)),
|
|
161
|
-
0 0 0 2px rgb(var(--salmex-border-dark)),
|
|
162
|
-
4px 4px 1px rgb(0 0 0 / 0.25),
|
|
163
|
-
0 0 2px 3px rgb(var(--salmex-crown-yellow));
|
|
141
|
+
/* Primary focus needs white outline since cyan-on-cyan is invisible */
|
|
142
|
+
.sx-btn-primary:focus-visible {
|
|
143
|
+
outline-color: var(--sx-white);
|
|
164
144
|
}
|
|
165
145
|
|
|
166
|
-
/* Hover state
|
|
167
|
-
.
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
inset 1px 1px 0 rgb(var(--salmex-button-highlight)),
|
|
172
|
-
inset -1px -1px 0 rgb(var(--salmex-button-shadow)),
|
|
173
|
-
0 0 0 2px rgb(var(--salmex-border-dark)),
|
|
174
|
-
5px 5px 1px rgb(0 0 0 / 0.3);
|
|
146
|
+
/* Hover state */
|
|
147
|
+
.sx-btn:hover:not(:disabled) {
|
|
148
|
+
transform: translateY(-2px);
|
|
149
|
+
box-shadow: var(--sx-shadow-md);
|
|
150
|
+
border-color: var(--sx-color-border-hover);
|
|
175
151
|
}
|
|
176
152
|
|
|
177
|
-
/* Active (pressed) state
|
|
178
|
-
.
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
inset -1px -1px 0 rgb(var(--salmex-button-highlight)),
|
|
182
|
-
inset 1px 1px 0 rgb(var(--salmex-button-shadow)),
|
|
183
|
-
0 0 0 2px rgb(var(--salmex-border-dark)),
|
|
184
|
-
2px 2px 1px rgb(0 0 0 / 0.3);
|
|
185
|
-
|
|
186
|
-
/* Shift down-right for pressed effect */
|
|
187
|
-
transform: translate(1px, 1px);
|
|
153
|
+
/* Active (pressed) state */
|
|
154
|
+
.sx-btn:active:not(:disabled) {
|
|
155
|
+
transform: translateY(0);
|
|
156
|
+
box-shadow: var(--sx-shadow-sm);
|
|
188
157
|
}
|
|
189
158
|
|
|
190
159
|
/* Disabled state */
|
|
191
|
-
.
|
|
160
|
+
.sx-btn:disabled {
|
|
192
161
|
opacity: 0.5;
|
|
193
162
|
cursor: not-allowed;
|
|
194
|
-
color:
|
|
195
|
-
filter: grayscale(0.5);
|
|
163
|
+
color: var(--sx-color-text-disabled);
|
|
196
164
|
}
|
|
197
165
|
|
|
198
166
|
/* ========================================
|
|
199
167
|
SIZE VARIANTS
|
|
200
168
|
======================================== */
|
|
201
|
-
.
|
|
202
|
-
height:
|
|
203
|
-
padding: 0 var(--
|
|
204
|
-
font-size: var(--
|
|
169
|
+
.sx-btn-sm {
|
|
170
|
+
height: 28px;
|
|
171
|
+
padding: 0 var(--sx-space-2);
|
|
172
|
+
font-size: var(--sx-text-xs);
|
|
205
173
|
}
|
|
206
174
|
|
|
207
|
-
.
|
|
208
|
-
height:
|
|
209
|
-
padding: 0 var(--
|
|
210
|
-
font-size: var(--
|
|
175
|
+
.sx-btn-md {
|
|
176
|
+
height: 36px;
|
|
177
|
+
padding: 0 var(--sx-space-4);
|
|
178
|
+
font-size: var(--sx-text-sm);
|
|
211
179
|
}
|
|
212
180
|
|
|
213
|
-
.
|
|
214
|
-
height:
|
|
215
|
-
padding: 0 var(--
|
|
216
|
-
font-size: var(--
|
|
181
|
+
.sx-btn-lg {
|
|
182
|
+
height: 44px;
|
|
183
|
+
padding: 0 var(--sx-space-5);
|
|
184
|
+
font-size: var(--sx-text-base);
|
|
217
185
|
}
|
|
218
186
|
|
|
219
187
|
/* Icon-only variants */
|
|
220
|
-
.
|
|
221
|
-
width:
|
|
188
|
+
.sx-btn-icon-only.sx-btn-sm {
|
|
189
|
+
width: 28px;
|
|
222
190
|
padding: 0;
|
|
223
191
|
}
|
|
224
192
|
|
|
225
|
-
.
|
|
226
|
-
width:
|
|
193
|
+
.sx-btn-icon-only.sx-btn-md {
|
|
194
|
+
width: 36px;
|
|
227
195
|
padding: 0;
|
|
228
196
|
}
|
|
229
197
|
|
|
230
|
-
.
|
|
231
|
-
width:
|
|
198
|
+
.sx-btn-icon-only.sx-btn-lg {
|
|
199
|
+
width: 44px;
|
|
232
200
|
padding: 0;
|
|
233
201
|
}
|
|
234
202
|
|
|
235
203
|
/* Full width */
|
|
236
|
-
.
|
|
204
|
+
.sx-btn-full-width {
|
|
237
205
|
width: 100%;
|
|
238
206
|
}
|
|
239
207
|
|
|
240
208
|
/* ========================================
|
|
241
|
-
VARIANT STYLES - Neo-
|
|
209
|
+
VARIANT STYLES - Neo-Brutalist Dark
|
|
242
210
|
======================================== */
|
|
243
|
-
|
|
244
|
-
/* Default variant - bold canvas */
|
|
245
|
-
.salmex-btn-default {
|
|
246
|
-
color: rgb(var(--salmex-text-primary));
|
|
247
|
-
}
|
|
248
211
|
|
|
249
|
-
/*
|
|
250
|
-
.
|
|
251
|
-
background:
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
);
|
|
255
|
-
color: rgb(var(--salmex-chalk-white));
|
|
256
|
-
font-weight: 900;
|
|
257
|
-
|
|
258
|
-
box-shadow:
|
|
259
|
-
inset 1px 1px 0 rgba(255, 255, 255, 0.3),
|
|
260
|
-
inset -1px -1px 0 rgba(0, 0, 0, 0.4),
|
|
261
|
-
0 0 0 2px rgb(var(--salmex-border-dark)),
|
|
262
|
-
4px 4px 1px rgb(0 0 0 / 0.35);
|
|
212
|
+
/* Default variant */
|
|
213
|
+
.sx-btn-default {
|
|
214
|
+
background: var(--sx-color-surface-2);
|
|
215
|
+
color: var(--sx-color-text);
|
|
216
|
+
border: 1px solid var(--sx-color-border-strong);
|
|
263
217
|
}
|
|
264
218
|
|
|
265
|
-
/*
|
|
266
|
-
.
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
width: 80%;
|
|
272
|
-
height: 2px;
|
|
273
|
-
background: rgb(var(--salmex-crown-yellow));
|
|
274
|
-
opacity: 0.7;
|
|
219
|
+
/* Primary variant — cyan glow */
|
|
220
|
+
.sx-btn-primary {
|
|
221
|
+
background: var(--sx-color-cyan);
|
|
222
|
+
color: var(--sx-color-text-inverse);
|
|
223
|
+
border: none;
|
|
224
|
+
font-weight: 600;
|
|
275
225
|
}
|
|
276
226
|
|
|
277
|
-
.
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
rgb(var(--salmex-electric-blue))
|
|
281
|
-
);
|
|
282
|
-
transform: translateY(-1px);
|
|
283
|
-
box-shadow:
|
|
284
|
-
inset 1px 1px 0 rgba(255, 255, 255, 0.3),
|
|
285
|
-
inset -1px -1px 0 rgba(0, 0, 0, 0.4),
|
|
286
|
-
0 0 0 2px rgb(var(--salmex-border-dark)),
|
|
287
|
-
5px 5px 1px rgb(0 0 0 / 0.4);
|
|
227
|
+
.sx-btn-primary:hover:not(:disabled) {
|
|
228
|
+
transform: translateY(-2px);
|
|
229
|
+
box-shadow: var(--sx-shadow-glow-cyan);
|
|
288
230
|
}
|
|
289
231
|
|
|
290
|
-
.
|
|
291
|
-
transform:
|
|
292
|
-
box-shadow:
|
|
293
|
-
inset -1px -1px 0 rgba(255, 255, 255, 0.3),
|
|
294
|
-
inset 1px 1px 0 rgba(0, 0, 0, 0.4),
|
|
295
|
-
0 0 0 2px rgb(var(--salmex-border-dark)),
|
|
296
|
-
2px 2px 1px rgb(0 0 0 / 0.3);
|
|
232
|
+
.sx-btn-primary:active:not(:disabled) {
|
|
233
|
+
transform: translateY(0);
|
|
234
|
+
box-shadow: var(--sx-shadow-sm);
|
|
297
235
|
}
|
|
298
236
|
|
|
299
|
-
/* Ghost variant —
|
|
300
|
-
.
|
|
237
|
+
/* Ghost variant — transparent, subtle */
|
|
238
|
+
.sx-btn-ghost {
|
|
301
239
|
background: transparent;
|
|
302
|
-
|
|
303
|
-
color:
|
|
304
|
-
|
|
240
|
+
border: none;
|
|
241
|
+
color: var(--sx-color-text-secondary);
|
|
242
|
+
box-shadow: none;
|
|
305
243
|
}
|
|
306
244
|
|
|
307
|
-
.
|
|
308
|
-
background:
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
inset -1px -1px 0 rgb(var(--salmex-button-shadow)),
|
|
313
|
-
0 0 0 2px rgb(var(--salmex-border-dark)),
|
|
314
|
-
4px 4px 1px rgb(0 0 0 / 0.25);
|
|
245
|
+
.sx-btn-ghost:hover:not(:disabled) {
|
|
246
|
+
background: var(--sx-color-surface-2);
|
|
247
|
+
color: var(--sx-color-text);
|
|
248
|
+
transform: none;
|
|
249
|
+
box-shadow: none;
|
|
315
250
|
}
|
|
316
251
|
|
|
317
|
-
.
|
|
318
|
-
background:
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
inset 1px 1px 0 rgb(var(--salmex-button-shadow)),
|
|
322
|
-
0 0 0 2px rgb(var(--salmex-border-dark)),
|
|
323
|
-
2px 2px 1px rgb(0 0 0 / 0.3);
|
|
324
|
-
transform: translate(1px, 1px);
|
|
252
|
+
.sx-btn-ghost:active:not(:disabled) {
|
|
253
|
+
background: var(--sx-color-surface-2);
|
|
254
|
+
transform: translateY(0);
|
|
255
|
+
box-shadow: none;
|
|
325
256
|
}
|
|
326
257
|
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
0 0 2px 5px rgb(var(--salmex-crown-yellow));
|
|
258
|
+
/* Danger variant — red glow */
|
|
259
|
+
.sx-btn-danger {
|
|
260
|
+
background: var(--sx-color-red-hover);
|
|
261
|
+
color: var(--sx-color-red);
|
|
262
|
+
border: 1px solid rgba(255, 59, 59, 0.2);
|
|
333
263
|
}
|
|
334
264
|
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
265
|
+
.sx-btn-danger:hover:not(:disabled) {
|
|
266
|
+
background: rgba(255, 59, 59, 0.2);
|
|
267
|
+
transform: translateY(-2px);
|
|
268
|
+
box-shadow: var(--sx-shadow-glow-red);
|
|
269
|
+
border-color: rgba(255, 59, 59, 0.4);
|
|
339
270
|
}
|
|
340
271
|
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
272
|
+
.sx-btn-danger:active:not(:disabled) {
|
|
273
|
+
transform: translateY(0);
|
|
274
|
+
box-shadow: var(--sx-shadow-sm);
|
|
344
275
|
}
|
|
345
276
|
|
|
346
277
|
/* ========================================
|
|
347
278
|
CONTENT & LAYOUT
|
|
348
279
|
======================================== */
|
|
349
|
-
.
|
|
280
|
+
.sx-btn-content {
|
|
350
281
|
display: inline-flex;
|
|
351
282
|
align-items: center;
|
|
352
|
-
gap: var(--
|
|
283
|
+
gap: var(--sx-space-2);
|
|
353
284
|
position: relative;
|
|
354
285
|
z-index: 1;
|
|
355
286
|
}
|
|
356
287
|
|
|
357
|
-
.
|
|
288
|
+
.sx-btn-icon {
|
|
358
289
|
display: inline-flex;
|
|
359
290
|
flex-shrink: 0;
|
|
360
291
|
line-height: 0;
|
|
361
292
|
}
|
|
362
293
|
|
|
363
|
-
.
|
|
364
|
-
margin-left: var(--
|
|
294
|
+
.sx-btn-shortcut {
|
|
295
|
+
margin-left: var(--sx-space-3);
|
|
365
296
|
font-size: 0.8em;
|
|
366
|
-
opacity: 0.
|
|
367
|
-
font-family: var(--
|
|
297
|
+
opacity: 0.9;
|
|
298
|
+
font-family: var(--sx-font-mono);
|
|
368
299
|
font-weight: 600;
|
|
369
300
|
padding: 2px 6px;
|
|
370
|
-
background:
|
|
371
|
-
border-radius: var(--
|
|
301
|
+
background: var(--sx-color-surface-3);
|
|
302
|
+
border-radius: var(--sx-radius-sm);
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
/* Shortcut on primary: white text on darker translucent bg */
|
|
306
|
+
.sx-btn-primary .sx-btn-shortcut {
|
|
307
|
+
background: rgba(0, 0, 0, 0.3);
|
|
308
|
+
color: var(--sx-white);
|
|
309
|
+
}
|
|
310
|
+
|
|
311
|
+
/* Shortcut on danger: match the red text */
|
|
312
|
+
.sx-btn-danger .sx-btn-shortcut {
|
|
313
|
+
background: rgba(255, 59, 59, 0.15);
|
|
314
|
+
color: var(--sx-color-red);
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
/* Shortcut on ghost: subtle */
|
|
318
|
+
.sx-btn-ghost .sx-btn-shortcut {
|
|
319
|
+
background: var(--sx-color-surface-2);
|
|
320
|
+
color: var(--sx-color-text-secondary);
|
|
372
321
|
}
|
|
373
322
|
|
|
374
323
|
/* ========================================
|
|
375
324
|
REDUCED MOTION
|
|
376
325
|
======================================== */
|
|
377
326
|
@media (prefers-reduced-motion: reduce) {
|
|
378
|
-
.
|
|
327
|
+
.sx-btn {
|
|
379
328
|
transition: none;
|
|
380
329
|
}
|
|
381
|
-
|
|
382
|
-
.
|
|
330
|
+
|
|
331
|
+
.sx-btn:hover:not(:disabled) {
|
|
383
332
|
transform: none;
|
|
384
333
|
}
|
|
385
|
-
|
|
386
|
-
.
|
|
334
|
+
|
|
335
|
+
.sx-btn:active:not(:disabled) {
|
|
387
336
|
transform: none;
|
|
388
337
|
}
|
|
389
338
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { Snippet } from 'svelte';
|
|
2
2
|
import type { HTMLButtonAttributes } from 'svelte/elements';
|
|
3
3
|
type ButtonSize = 'sm' | 'md' | 'lg';
|
|
4
|
-
type ButtonVariant = 'default' | 'primary' | 'ghost';
|
|
4
|
+
type ButtonVariant = 'default' | 'primary' | 'ghost' | 'danger';
|
|
5
5
|
interface Props extends Omit<HTMLButtonAttributes, 'class'> {
|
|
6
6
|
/** Visual variant of the button */
|
|
7
7
|
variant?: ButtonVariant;
|
|
@@ -27,8 +27,8 @@ interface Props extends Omit<HTMLButtonAttributes, 'class'> {
|
|
|
27
27
|
/**
|
|
28
28
|
* Button
|
|
29
29
|
*
|
|
30
|
-
*
|
|
31
|
-
*
|
|
30
|
+
* Neo-Brutalist Dark — Glassmorphism button with glow effects.
|
|
31
|
+
* Clean geometry, expressive energy, world-class accessibility.
|
|
32
32
|
*
|
|
33
33
|
* @example
|
|
34
34
|
* <Button variant="default" size="md" onclick={() => handleClick()}>
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Button.svelte.d.ts","sourceRoot":"","sources":["../../../src/primitives/Button/Button.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAI5D,KAAK,UAAU,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AACrC,KAAK,aAAa,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"Button.svelte.d.ts","sourceRoot":"","sources":["../../../src/primitives/Button/Button.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAI5D,KAAK,UAAU,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AACrC,KAAK,aAAa,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;AAEhE,UAAU,KAAM,SAAQ,IAAI,CAAC,oBAAoB,EAAE,OAAO,CAAC;IAC1D,mCAAmC;IACnC,OAAO,CAAC,EAAE,aAAa,CAAC;IACxB,yBAAyB;IACzB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,0CAA0C;IAC1C,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,kCAAkC;IAClC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,mCAAmC;IACnC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gEAAgE;IAChE,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,6BAA6B;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qBAAqB;IACrB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,8BAA8B;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8CAA8C;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB;AAkED;;;;;;;;;;;;;;;;GAgBG;AACH,QAAA,MAAM,MAAM,2CAAwC,CAAC;AACrD,KAAK,MAAM,GAAG,UAAU,CAAC,OAAO,MAAM,CAAC,CAAC;AACxC,eAAe,MAAM,CAAC"}
|