@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.
Files changed (110) hide show
  1. package/README.md +52 -3
  2. package/dist/dialogs/ContextMenu/ContextMenu.svelte +97 -94
  3. package/dist/dialogs/ContextMenu/ContextMenu.svelte.d.ts +3 -2
  4. package/dist/dialogs/ContextMenu/ContextMenu.svelte.d.ts.map +1 -1
  5. package/dist/dialogs/Modal/Modal.svelte +112 -116
  6. package/dist/dialogs/Modal/Modal.svelte.d.ts +1 -1
  7. package/dist/feedback/Alert/Alert.svelte +115 -221
  8. package/dist/feedback/Alert/Alert.svelte.d.ts +1 -1
  9. package/dist/feedback/ProgressBar/ProgressBar.svelte +246 -0
  10. package/dist/feedback/ProgressBar/ProgressBar.svelte.d.ts +40 -0
  11. package/dist/feedback/ProgressBar/ProgressBar.svelte.d.ts.map +1 -0
  12. package/dist/feedback/ProgressBar/index.d.ts +2 -0
  13. package/dist/feedback/ProgressBar/index.d.ts.map +1 -0
  14. package/dist/feedback/ProgressBar/index.js +1 -0
  15. package/dist/feedback/Skeleton/Skeleton.svelte +153 -0
  16. package/dist/feedback/Skeleton/Skeleton.svelte.d.ts +37 -0
  17. package/dist/feedback/Skeleton/Skeleton.svelte.d.ts.map +1 -0
  18. package/dist/feedback/Skeleton/index.d.ts +2 -0
  19. package/dist/feedback/Skeleton/index.d.ts.map +1 -0
  20. package/dist/feedback/Skeleton/index.js +1 -0
  21. package/dist/feedback/Spinner/Spinner.svelte +86 -151
  22. package/dist/feedback/Spinner/Spinner.svelte.d.ts +5 -3
  23. package/dist/feedback/Spinner/Spinner.svelte.d.ts.map +1 -1
  24. package/dist/feedback/Toast/Toaster.svelte +431 -0
  25. package/dist/feedback/Toast/Toaster.svelte.d.ts +22 -0
  26. package/dist/feedback/Toast/Toaster.svelte.d.ts.map +1 -0
  27. package/dist/feedback/Toast/index.d.ts +4 -0
  28. package/dist/feedback/Toast/index.d.ts.map +1 -0
  29. package/dist/feedback/Toast/index.js +2 -0
  30. package/dist/feedback/Toast/toastStore.d.ts +34 -0
  31. package/dist/feedback/Toast/toastStore.d.ts.map +1 -0
  32. package/dist/feedback/Toast/toastStore.js +43 -0
  33. package/dist/feedback/index.d.ts +4 -0
  34. package/dist/feedback/index.d.ts.map +1 -1
  35. package/dist/feedback/index.js +3 -0
  36. package/dist/forms/Checkbox/Checkbox.svelte +82 -104
  37. package/dist/forms/Checkbox/Checkbox.svelte.d.ts +1 -1
  38. package/dist/forms/Select/Select.svelte +137 -179
  39. package/dist/forms/Select/Select.svelte.d.ts +1 -1
  40. package/dist/forms/Slider/Slider.svelte +356 -0
  41. package/dist/forms/Slider/Slider.svelte.d.ts +50 -0
  42. package/dist/forms/Slider/Slider.svelte.d.ts.map +1 -0
  43. package/dist/forms/Slider/index.d.ts +2 -0
  44. package/dist/forms/Slider/index.d.ts.map +1 -0
  45. package/dist/forms/Slider/index.js +1 -0
  46. package/dist/forms/TextInput/TextInput.svelte +151 -167
  47. package/dist/forms/TextInput/TextInput.svelte.d.ts +1 -1
  48. package/dist/forms/Textarea/Textarea.svelte +615 -0
  49. package/dist/forms/Textarea/Textarea.svelte.d.ts +47 -0
  50. package/dist/forms/Textarea/Textarea.svelte.d.ts.map +1 -0
  51. package/dist/forms/Textarea/index.d.ts +2 -0
  52. package/dist/forms/Textarea/index.d.ts.map +1 -0
  53. package/dist/forms/Textarea/index.js +1 -0
  54. package/dist/forms/Toggle/Toggle.svelte +239 -0
  55. package/dist/forms/Toggle/Toggle.svelte.d.ts +39 -0
  56. package/dist/forms/Toggle/Toggle.svelte.d.ts.map +1 -0
  57. package/dist/forms/Toggle/index.d.ts +2 -0
  58. package/dist/forms/Toggle/index.d.ts.map +1 -0
  59. package/dist/forms/Toggle/index.js +1 -0
  60. package/dist/forms/index.d.ts +3 -0
  61. package/dist/forms/index.d.ts.map +1 -1
  62. package/dist/forms/index.js +3 -0
  63. package/dist/index.d.ts +0 -1
  64. package/dist/index.d.ts.map +1 -1
  65. package/dist/index.js +0 -1
  66. package/dist/layout/Card/Card.svelte +64 -39
  67. package/dist/layout/Card/Card.svelte.d.ts +1 -1
  68. package/dist/layout/Card/Card.svelte.d.ts.map +1 -1
  69. package/dist/layout/Container/Container.svelte +71 -71
  70. package/dist/layout/Container/Container.svelte.d.ts +2 -2
  71. package/dist/navigation/CommandPalette/CommandPalette.svelte +407 -189
  72. package/dist/navigation/CommandPalette/CommandPalette.svelte.d.ts +8 -3
  73. package/dist/navigation/CommandPalette/CommandPalette.svelte.d.ts.map +1 -1
  74. package/dist/navigation/Tabs/Tabs.svelte +95 -181
  75. package/dist/navigation/Tabs/Tabs.svelte.d.ts +2 -2
  76. package/dist/primitives/Badge/Badge.svelte +83 -220
  77. package/dist/primitives/Badge/Badge.svelte.d.ts +2 -2
  78. package/dist/primitives/Badge/Badge.svelte.d.ts.map +1 -1
  79. package/dist/primitives/Button/Button.svelte +144 -195
  80. package/dist/primitives/Button/Button.svelte.d.ts +3 -3
  81. package/dist/primitives/Button/Button.svelte.d.ts.map +1 -1
  82. package/dist/primitives/Tooltip/Tooltip.svelte +260 -0
  83. package/dist/primitives/Tooltip/Tooltip.svelte.d.ts +36 -0
  84. package/dist/primitives/Tooltip/Tooltip.svelte.d.ts.map +1 -0
  85. package/dist/primitives/Tooltip/index.d.ts +2 -0
  86. package/dist/primitives/Tooltip/index.d.ts.map +1 -0
  87. package/dist/primitives/Tooltip/index.js +1 -0
  88. package/dist/primitives/index.d.ts +1 -0
  89. package/dist/primitives/index.d.ts.map +1 -1
  90. package/dist/primitives/index.js +1 -0
  91. package/dist/styles/tokens.css +197 -265
  92. package/package.json +5 -5
  93. package/dist/windowing/Window/Window.svelte +0 -637
  94. package/dist/windowing/Window/Window.svelte.d.ts +0 -65
  95. package/dist/windowing/Window/Window.svelte.d.ts.map +0 -1
  96. package/dist/windowing/Window/index.d.ts +0 -2
  97. package/dist/windowing/Window/index.d.ts.map +0 -1
  98. package/dist/windowing/Window/index.js +0 -1
  99. package/dist/windowing/WindowManager/WindowManager.svelte +0 -425
  100. package/dist/windowing/WindowManager/WindowManager.svelte.d.ts +0 -38
  101. package/dist/windowing/WindowManager/WindowManager.svelte.d.ts.map +0 -1
  102. package/dist/windowing/WindowManager/index.d.ts +0 -2
  103. package/dist/windowing/WindowManager/index.d.ts.map +0 -1
  104. package/dist/windowing/WindowManager/index.js +0 -1
  105. package/dist/windowing/index.d.ts +0 -5
  106. package/dist/windowing/index.d.ts.map +0 -1
  107. package/dist/windowing/index.js +0 -3
  108. package/dist/windowing/windowStore.svelte.d.ts +0 -49
  109. package/dist/windowing/windowStore.svelte.d.ts.map +0 -1
  110. package/dist/windowing/windowStore.svelte.js +0 -170
@@ -1,7 +1,7 @@
1
1
  <!--
2
2
  @component Checkbox
3
3
 
4
- Win2K × Basquiat 3D checkbox with bold borders, crown yellow check.
4
+ Neo-Brutalist DarkClean 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
- 'salmex-checkbox',
78
- `salmex-checkbox-${size}`,
79
- disabled && 'salmex-checkbox-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="salmex-checkbox-label">
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="salmex-checkbox-input"
95
+ class="sx-checkbox-input"
96
96
  data-testid={testId}
97
97
  onchange={handleChange}
98
98
  />
99
99
  <span
100
100
  class={cn(
101
- 'salmex-checkbox-box',
102
- (checked || indeterminate) && 'salmex-checkbox-box-checked',
103
- indeterminate && 'salmex-checkbox-box-indeterminate',
104
- showError && 'salmex-checkbox-box-error'
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="salmex-checkbox-icon" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round" aria-hidden="true">
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="salmex-checkbox-icon salmex-checkbox-icon-minus" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" aria-hidden="true">
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="salmex-checkbox-content" class:salmex-sr-only={hideLabel}>
119
- <span class="salmex-checkbox-text">
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="salmex-checkbox-required" aria-hidden="true">*</span>
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="salmex-checkbox-description">{description}</span>
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="salmex-checkbox-error" role="alert">{error}</p>
131
+ <p id={errorId} class="sx-checkbox-error" role="alert">{error}</p>
132
132
  {/if}
133
133
  </div>
134
134
 
135
135
  <style>
136
- .salmex-checkbox {
136
+ .sx-checkbox {
137
137
  display: flex;
138
138
  flex-direction: column;
139
- gap: var(--salmex-space-1);
139
+ gap: var(--sx-space-1);
140
140
  }
141
141
 
142
- .salmex-checkbox-disabled {
143
- opacity: 0.6;
142
+ .sx-checkbox-disabled {
143
+ opacity: 0.5;
144
144
  }
145
145
 
146
- .salmex-checkbox-label {
146
+ .sx-checkbox-label {
147
147
  display: flex;
148
148
  align-items: center;
149
- gap: var(--salmex-space-2);
149
+ gap: var(--sx-space-2);
150
150
  cursor: pointer;
151
151
  user-select: none;
152
- font-family: var(--salmex-font-system);
152
+ font-family: var(--sx-font-body);
153
153
  }
154
154
 
155
- .salmex-checkbox-label:has(.salmex-checkbox-description) {
155
+ .sx-checkbox-label:has(.sx-checkbox-description) {
156
156
  align-items: flex-start;
157
157
  }
158
158
 
159
- .salmex-checkbox-label:has(.salmex-checkbox-description) .salmex-checkbox-box {
159
+ .sx-checkbox-label:has(.sx-checkbox-description) .sx-checkbox-box {
160
160
  margin-top: 2px;
161
161
  }
162
162
 
163
- .salmex-checkbox-disabled .salmex-checkbox-label {
163
+ .sx-checkbox-disabled .sx-checkbox-label {
164
164
  cursor: not-allowed;
165
165
  }
166
166
 
167
- /* Visually hidden, not display:none keeps focus and semantics */
168
- .salmex-checkbox-input {
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
- /* Win2K × Basquiat — 3D box */
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: rgb(var(--salmex-button-face));
187
- border: 1px solid rgb(var(--salmex-button-dark-edge));
188
- border-radius: var(--salmex-radius-sm);
189
- box-shadow:
190
- inset 1px 1px 0 rgb(var(--salmex-button-highlight)),
191
- inset -1px -1px 0 rgb(var(--salmex-button-shadow));
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
- .salmex-checkbox-sm .salmex-checkbox-box {
193
+ .sx-checkbox-sm .sx-checkbox-box {
198
194
  width: 16px;
199
195
  height: 16px;
200
196
  }
201
197
 
202
- .salmex-checkbox-md .salmex-checkbox-box {
198
+ .sx-checkbox-md .sx-checkbox-box {
203
199
  width: 20px;
204
200
  height: 20px;
205
201
  }
206
202
 
207
- .salmex-checkbox-lg .salmex-checkbox-box {
203
+ .sx-checkbox-lg .sx-checkbox-box {
208
204
  width: 24px;
209
205
  height: 24px;
210
206
  }
211
207
 
212
- .salmex-checkbox-icon {
208
+ .sx-checkbox-icon {
213
209
  width: 100%;
214
210
  height: 100%;
215
211
  padding: 2px;
216
212
  }
217
213
 
218
- .salmex-checkbox-icon-minus {
214
+ .sx-checkbox-icon-minus {
219
215
  padding: 3px 4px;
220
216
  }
221
217
 
222
- /* Checked electric blue fill, crown accent */
223
- .salmex-checkbox-box-checked {
224
- background: rgb(var(--salmex-electric-blue));
225
- border-color: rgb(var(--salmex-button-dark-edge));
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
- :global([data-theme='dark']) .salmex-checkbox-box-checked {
233
- background: rgb(var(--salmex-electric-blue));
234
- border-color: rgb(var(--salmex-button-dark-edge));
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
- /* Indeterminate same as checked, minus icon */
238
- .salmex-checkbox-box-indeterminate {
239
- background: rgb(var(--salmex-electric-blue));
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
- .salmex-checkbox-label:hover .salmex-checkbox-box:not(.salmex-checkbox-box-checked):not(.salmex-checkbox-box-indeterminate) {
244
- border-color: rgb(var(--salmex-electric-blue));
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
- .salmex-checkbox-input:focus-visible + .salmex-checkbox-box {
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
- .salmex-checkbox-box-error {
272
- border-color: rgb(var(--salmex-street-red));
249
+ .sx-checkbox-box-error {
250
+ border-color: var(--sx-color-red);
273
251
  }
274
252
 
275
- :global([data-theme='dark']) .salmex-checkbox-box-error {
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
- .salmex-checkbox-text {
286
- font-size: var(--salmex-font-size-sm);
287
- font-weight: 600;
288
- color: rgb(var(--salmex-text-primary));
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
- .salmex-checkbox-required {
292
- color: rgb(var(--salmex-street-red));
265
+ .sx-checkbox-required {
266
+ color: var(--sx-color-red);
293
267
  margin-left: 2px;
294
268
  }
295
269
 
296
- .salmex-checkbox-description {
297
- font-size: var(--salmex-font-size-xs);
298
- color: rgb(var(--salmex-text-secondary));
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
- .salmex-checkbox-error {
302
- font-size: var(--salmex-font-size-xs);
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
- .salmex-checkbox-lg .salmex-checkbox-error {
309
- margin-left: calc(24px + var(--salmex-space-2));
286
+ .sx-checkbox-lg .sx-checkbox-error {
287
+ margin-left: calc(24px + var(--sx-space-2));
310
288
  }
311
289
 
312
- .salmex-sr-only {
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
- .salmex-checkbox-box {
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
- * Win2K × Basquiat 3D checkbox with bold borders, crown yellow check.
23
+ * Neo-Brutalist DarkClean 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
  */