@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,7 +1,7 @@
|
|
|
1
1
|
<!--
|
|
2
2
|
@component Checkbox
|
|
3
3
|
|
|
4
|
-
|
|
4
|
+
Neo-Brutalist Dark — Clean checkbox with cyan 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,117 @@ 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;
|
|
216
212
|
}
|
|
217
213
|
|
|
218
|
-
.
|
|
214
|
+
.sx-checkbox-icon-minus {
|
|
219
215
|
padding: 3px 4px;
|
|
220
216
|
}
|
|
221
217
|
|
|
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));
|
|
218
|
+
/* Checked -- cyan fill, white checkmark */
|
|
219
|
+
.sx-checkbox-box-checked {
|
|
220
|
+
background: var(--sx-color-cyan);
|
|
221
|
+
border-color: var(--sx-color-cyan);
|
|
230
222
|
}
|
|
231
223
|
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
224
|
+
/* Indeterminate -- same as checked */
|
|
225
|
+
.sx-checkbox-box-indeterminate {
|
|
226
|
+
background: var(--sx-color-cyan);
|
|
227
|
+
border-color: var(--sx-color-cyan);
|
|
235
228
|
}
|
|
236
229
|
|
|
237
|
-
/*
|
|
238
|
-
.
|
|
239
|
-
|
|
240
|
-
border-color: rgb(var(--salmex-button-dark-edge));
|
|
230
|
+
/* Hover -- border brightens on unchecked box */
|
|
231
|
+
.sx-checkbox-label:hover .sx-checkbox-box:not(.sx-checkbox-box-checked):not(.sx-checkbox-box-indeterminate) {
|
|
232
|
+
border-color: var(--sx-color-border-hover);
|
|
241
233
|
}
|
|
242
234
|
|
|
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));
|
|
235
|
+
/* Focus -- cyan outline */
|
|
236
|
+
.sx-checkbox-input:focus-visible + .sx-checkbox-box {
|
|
237
|
+
outline: 2px solid var(--sx-color-cyan);
|
|
238
|
+
outline-offset: 2px;
|
|
261
239
|
}
|
|
262
240
|
|
|
263
241
|
/* High contrast / forced colors: solid outline so focus is visible (APG) */
|
|
264
242
|
@media (forced-colors: active) {
|
|
265
|
-
.
|
|
243
|
+
.sx-checkbox-input:focus-visible + .sx-checkbox-box {
|
|
266
244
|
outline: 2px solid CanvasText;
|
|
267
245
|
outline-offset: 2px;
|
|
268
246
|
}
|
|
269
247
|
}
|
|
270
248
|
|
|
271
|
-
.
|
|
272
|
-
border-color:
|
|
249
|
+
.sx-checkbox-box-error {
|
|
250
|
+
border-color: var(--sx-color-red);
|
|
273
251
|
}
|
|
274
252
|
|
|
275
|
-
|
|
276
|
-
border-color: rgb(var(--salmex-street-red));
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
.salmex-checkbox-content {
|
|
253
|
+
.sx-checkbox-content {
|
|
280
254
|
display: flex;
|
|
281
255
|
flex-direction: column;
|
|
282
256
|
gap: 2px;
|
|
283
257
|
}
|
|
284
258
|
|
|
285
|
-
.
|
|
286
|
-
font-size: var(--
|
|
287
|
-
font-weight:
|
|
288
|
-
color:
|
|
259
|
+
.sx-checkbox-text {
|
|
260
|
+
font-size: var(--sx-text-sm);
|
|
261
|
+
font-weight: 500;
|
|
262
|
+
color: var(--sx-color-text);
|
|
289
263
|
}
|
|
290
264
|
|
|
291
|
-
.
|
|
292
|
-
color:
|
|
265
|
+
.sx-checkbox-required {
|
|
266
|
+
color: var(--sx-color-red);
|
|
293
267
|
margin-left: 2px;
|
|
294
268
|
}
|
|
295
269
|
|
|
296
|
-
.
|
|
297
|
-
font-size: var(--
|
|
298
|
-
color:
|
|
270
|
+
.sx-checkbox-description {
|
|
271
|
+
font-size: var(--sx-text-xs);
|
|
272
|
+
color: var(--sx-color-text-secondary);
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
.sx-checkbox-error {
|
|
276
|
+
font-size: var(--sx-text-xs);
|
|
277
|
+
font-weight: 500;
|
|
278
|
+
color: var(--sx-color-red);
|
|
279
|
+
margin: 0 0 0 calc(20px + var(--sx-space-2));
|
|
299
280
|
}
|
|
300
281
|
|
|
301
|
-
.
|
|
302
|
-
|
|
303
|
-
font-weight: 600;
|
|
304
|
-
color: rgb(var(--salmex-street-red));
|
|
305
|
-
margin: 0 0 0 calc(20px + var(--salmex-space-2));
|
|
282
|
+
.sx-checkbox-sm .sx-checkbox-error {
|
|
283
|
+
margin-left: calc(16px + var(--sx-space-2));
|
|
306
284
|
}
|
|
307
285
|
|
|
308
|
-
.
|
|
309
|
-
margin-left: calc(24px + var(--
|
|
286
|
+
.sx-checkbox-lg .sx-checkbox-error {
|
|
287
|
+
margin-left: calc(24px + var(--sx-space-2));
|
|
310
288
|
}
|
|
311
289
|
|
|
312
|
-
.
|
|
290
|
+
.sx-sr-only {
|
|
313
291
|
position: absolute;
|
|
314
292
|
width: 1px;
|
|
315
293
|
height: 1px;
|
|
@@ -322,7 +300,7 @@ function handleChange(e: Event) {
|
|
|
322
300
|
}
|
|
323
301
|
|
|
324
302
|
@media (prefers-reduced-motion: reduce) {
|
|
325
|
-
.
|
|
303
|
+
.sx-checkbox-box {
|
|
326
304
|
transition: none;
|
|
327
305
|
}
|
|
328
306
|
}
|
|
@@ -20,7 +20,7 @@ interface Props {
|
|
|
20
20
|
/**
|
|
21
21
|
* Checkbox
|
|
22
22
|
*
|
|
23
|
-
*
|
|
23
|
+
* Neo-Brutalist Dark — Clean checkbox with cyan 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
|
*/
|