@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.
Files changed (110) hide show
  1. package/README.md +52 -3
  2. package/dist/dialogs/ContextMenu/ContextMenu.svelte +96 -93
  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 -102
  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 +88 -154
  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 -103
  37. package/dist/forms/Checkbox/Checkbox.svelte.d.ts +1 -1
  38. package/dist/forms/Select/Select.svelte +136 -177
  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 +148 -164
  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 -40
  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 +410 -181
  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 +94 -178
  75. package/dist/navigation/Tabs/Tabs.svelte.d.ts +2 -2
  76. package/dist/primitives/Badge/Badge.svelte +85 -223
  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 +138 -208
  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 +200 -259
  92. package/package.json +5 -5
  93. package/dist/windowing/Window/Window.svelte +0 -602
  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 -410
  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,138 +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: 2px solid rgb(var(--salmex-button-dark-edge));
188
- box-shadow:
189
- inset 2px 2px 0 rgb(var(--salmex-button-highlight)),
190
- inset -2px -2px 0 rgb(var(--salmex-button-shadow));
191
- transition: background var(--salmex-transition-fast), border-color var(--salmex-transition-fast),
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
- .salmex-checkbox-sm .salmex-checkbox-box {
193
+ .sx-checkbox-sm .sx-checkbox-box {
197
194
  width: 16px;
198
195
  height: 16px;
199
196
  }
200
197
 
201
- .salmex-checkbox-md .salmex-checkbox-box {
198
+ .sx-checkbox-md .sx-checkbox-box {
202
199
  width: 20px;
203
200
  height: 20px;
204
201
  }
205
202
 
206
- .salmex-checkbox-lg .salmex-checkbox-box {
203
+ .sx-checkbox-lg .sx-checkbox-box {
207
204
  width: 24px;
208
205
  height: 24px;
209
206
  }
210
207
 
211
- .salmex-checkbox-icon {
208
+ .sx-checkbox-icon {
212
209
  width: 100%;
213
210
  height: 100%;
214
211
  padding: 2px;
215
212
  }
216
213
 
217
- .salmex-checkbox-icon-minus {
214
+ .sx-checkbox-icon-minus {
218
215
  padding: 3px 4px;
219
216
  }
220
217
 
221
- /* Checked electric blue fill, crown accent */
222
- .salmex-checkbox-box-checked {
223
- background: rgb(var(--salmex-electric-blue));
224
- border-color: rgb(var(--salmex-button-dark-edge));
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
- :global([data-theme='dark']) .salmex-checkbox-box-checked {
232
- background: rgb(var(--salmex-electric-blue));
233
- 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);
234
228
  }
235
229
 
236
- /* Indeterminate same as checked, minus icon */
237
- .salmex-checkbox-box-indeterminate {
238
- background: rgb(var(--salmex-electric-blue));
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
- .salmex-checkbox-label:hover .salmex-checkbox-box:not(.salmex-checkbox-box-checked):not(.salmex-checkbox-box-indeterminate) {
243
- border-color: rgb(var(--salmex-electric-blue));
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
- .salmex-checkbox-input:focus-visible + .salmex-checkbox-box {
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
- .salmex-checkbox-box-error {
271
- border-color: rgb(var(--salmex-street-red));
249
+ .sx-checkbox-box-error {
250
+ border-color: var(--sx-color-red);
272
251
  }
273
252
 
274
- :global([data-theme='dark']) .salmex-checkbox-box-error {
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
- .salmex-checkbox-text {
285
- font-size: var(--salmex-font-size-sm);
286
- font-weight: 600;
287
- 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);
288
263
  }
289
264
 
290
- .salmex-checkbox-required {
291
- color: rgb(var(--salmex-street-red));
265
+ .sx-checkbox-required {
266
+ color: var(--sx-color-red);
292
267
  margin-left: 2px;
293
268
  }
294
269
 
295
- .salmex-checkbox-description {
296
- font-size: var(--salmex-font-size-xs);
297
- 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));
298
280
  }
299
281
 
300
- .salmex-checkbox-error {
301
- font-size: var(--salmex-font-size-xs);
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
- .salmex-checkbox-lg .salmex-checkbox-error {
308
- margin-left: calc(24px + var(--salmex-space-2));
286
+ .sx-checkbox-lg .sx-checkbox-error {
287
+ margin-left: calc(24px + var(--sx-space-2));
309
288
  }
310
289
 
311
- .salmex-sr-only {
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
- .salmex-checkbox-box {
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
- * 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
  */