@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,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,138 +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:
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
box-shadow var(--salmex-transition-fast);
|
|
193
|
-
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;
|
|
194
191
|
}
|
|
195
192
|
|
|
196
|
-
.
|
|
193
|
+
.sx-checkbox-sm .sx-checkbox-box {
|
|
197
194
|
width: 16px;
|
|
198
195
|
height: 16px;
|
|
199
196
|
}
|
|
200
197
|
|
|
201
|
-
.
|
|
198
|
+
.sx-checkbox-md .sx-checkbox-box {
|
|
202
199
|
width: 20px;
|
|
203
200
|
height: 20px;
|
|
204
201
|
}
|
|
205
202
|
|
|
206
|
-
.
|
|
203
|
+
.sx-checkbox-lg .sx-checkbox-box {
|
|
207
204
|
width: 24px;
|
|
208
205
|
height: 24px;
|
|
209
206
|
}
|
|
210
207
|
|
|
211
|
-
.
|
|
208
|
+
.sx-checkbox-icon {
|
|
212
209
|
width: 100%;
|
|
213
210
|
height: 100%;
|
|
214
211
|
padding: 2px;
|
|
215
212
|
}
|
|
216
213
|
|
|
217
|
-
.
|
|
214
|
+
.sx-checkbox-icon-minus {
|
|
218
215
|
padding: 3px 4px;
|
|
219
216
|
}
|
|
220
217
|
|
|
221
|
-
/* Checked
|
|
222
|
-
.
|
|
223
|
-
background:
|
|
224
|
-
border-color:
|
|
225
|
-
box-shadow:
|
|
226
|
-
inset 2px 2px 0 rgb(var(--salmex-button-highlight)),
|
|
227
|
-
inset -2px -2px 0 rgb(var(--salmex-button-shadow)),
|
|
228
|
-
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);
|
|
229
222
|
}
|
|
230
223
|
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
224
|
+
/* Indeterminate -- same as checked */
|
|
225
|
+
.sx-checkbox-box-indeterminate {
|
|
226
|
+
background: var(--sx-color-cyan);
|
|
227
|
+
border-color: var(--sx-color-cyan);
|
|
234
228
|
}
|
|
235
229
|
|
|
236
|
-
/*
|
|
237
|
-
.
|
|
238
|
-
|
|
239
|
-
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);
|
|
240
233
|
}
|
|
241
234
|
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
/* Focus — crown yellow ring (design system) */
|
|
247
|
-
.salmex-checkbox-input:focus-visible + .salmex-checkbox-box {
|
|
248
|
-
box-shadow:
|
|
249
|
-
inset 2px 2px 0 rgb(var(--salmex-button-highlight)),
|
|
250
|
-
inset -2px -2px 0 rgb(var(--salmex-button-shadow)),
|
|
251
|
-
0 0 0 2px rgb(var(--salmex-midnight-black)),
|
|
252
|
-
0 0 0 5px rgb(var(--salmex-crown-yellow));
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
:global([data-theme='dark']) .salmex-checkbox-input:focus-visible + .salmex-checkbox-box {
|
|
256
|
-
box-shadow:
|
|
257
|
-
inset 2px 2px 0 rgb(var(--salmex-button-highlight)),
|
|
258
|
-
inset -2px -2px 0 rgb(var(--salmex-button-shadow)),
|
|
259
|
-
0 0 0 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;
|
|
260
239
|
}
|
|
261
240
|
|
|
262
241
|
/* High contrast / forced colors: solid outline so focus is visible (APG) */
|
|
263
242
|
@media (forced-colors: active) {
|
|
264
|
-
.
|
|
243
|
+
.sx-checkbox-input:focus-visible + .sx-checkbox-box {
|
|
265
244
|
outline: 2px solid CanvasText;
|
|
266
245
|
outline-offset: 2px;
|
|
267
246
|
}
|
|
268
247
|
}
|
|
269
248
|
|
|
270
|
-
.
|
|
271
|
-
border-color:
|
|
249
|
+
.sx-checkbox-box-error {
|
|
250
|
+
border-color: var(--sx-color-red);
|
|
272
251
|
}
|
|
273
252
|
|
|
274
|
-
|
|
275
|
-
border-color: rgb(var(--salmex-street-red));
|
|
276
|
-
}
|
|
277
|
-
|
|
278
|
-
.salmex-checkbox-content {
|
|
253
|
+
.sx-checkbox-content {
|
|
279
254
|
display: flex;
|
|
280
255
|
flex-direction: column;
|
|
281
256
|
gap: 2px;
|
|
282
257
|
}
|
|
283
258
|
|
|
284
|
-
.
|
|
285
|
-
font-size: var(--
|
|
286
|
-
font-weight:
|
|
287
|
-
color:
|
|
259
|
+
.sx-checkbox-text {
|
|
260
|
+
font-size: var(--sx-text-sm);
|
|
261
|
+
font-weight: 500;
|
|
262
|
+
color: var(--sx-color-text);
|
|
288
263
|
}
|
|
289
264
|
|
|
290
|
-
.
|
|
291
|
-
color:
|
|
265
|
+
.sx-checkbox-required {
|
|
266
|
+
color: var(--sx-color-red);
|
|
292
267
|
margin-left: 2px;
|
|
293
268
|
}
|
|
294
269
|
|
|
295
|
-
.
|
|
296
|
-
font-size: var(--
|
|
297
|
-
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));
|
|
298
280
|
}
|
|
299
281
|
|
|
300
|
-
.
|
|
301
|
-
|
|
302
|
-
font-weight: 600;
|
|
303
|
-
color: rgb(var(--salmex-street-red));
|
|
304
|
-
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));
|
|
305
284
|
}
|
|
306
285
|
|
|
307
|
-
.
|
|
308
|
-
margin-left: calc(24px + var(--
|
|
286
|
+
.sx-checkbox-lg .sx-checkbox-error {
|
|
287
|
+
margin-left: calc(24px + var(--sx-space-2));
|
|
309
288
|
}
|
|
310
289
|
|
|
311
|
-
.
|
|
290
|
+
.sx-sr-only {
|
|
312
291
|
position: absolute;
|
|
313
292
|
width: 1px;
|
|
314
293
|
height: 1px;
|
|
@@ -321,7 +300,7 @@ function handleChange(e: Event) {
|
|
|
321
300
|
}
|
|
322
301
|
|
|
323
302
|
@media (prefers-reduced-motion: reduce) {
|
|
324
|
-
.
|
|
303
|
+
.sx-checkbox-box {
|
|
325
304
|
transition: none;
|
|
326
305
|
}
|
|
327
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
|
*/
|