@salmexio/ui 0.4.0 → 1.1.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 (119) 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 +119 -220
  8. package/dist/feedback/Alert/Alert.svelte.d.ts +1 -1
  9. package/dist/feedback/ProgressBar/ProgressBar.svelte +265 -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 +157 -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 +87 -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 +161 -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 +66 -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/layout/ThermalBackground/ThermalBackground.svelte +313 -0
  72. package/dist/layout/ThermalBackground/ThermalBackground.svelte.d.ts +16 -0
  73. package/dist/layout/ThermalBackground/ThermalBackground.svelte.d.ts.map +1 -0
  74. package/dist/layout/ThermalBackground/index.d.ts +2 -0
  75. package/dist/layout/ThermalBackground/index.d.ts.map +1 -0
  76. package/dist/layout/ThermalBackground/index.js +1 -0
  77. package/dist/layout/index.d.ts +1 -0
  78. package/dist/layout/index.d.ts.map +1 -1
  79. package/dist/layout/index.js +1 -0
  80. package/dist/navigation/CommandPalette/CommandPalette.svelte +407 -189
  81. package/dist/navigation/CommandPalette/CommandPalette.svelte.d.ts +8 -3
  82. package/dist/navigation/CommandPalette/CommandPalette.svelte.d.ts.map +1 -1
  83. package/dist/navigation/Tabs/Tabs.svelte +139 -192
  84. package/dist/navigation/Tabs/Tabs.svelte.d.ts +2 -2
  85. package/dist/primitives/Badge/Badge.svelte +85 -220
  86. package/dist/primitives/Badge/Badge.svelte.d.ts +2 -2
  87. package/dist/primitives/Badge/Badge.svelte.d.ts.map +1 -1
  88. package/dist/primitives/Button/Button.svelte +214 -194
  89. package/dist/primitives/Button/Button.svelte.d.ts +3 -3
  90. package/dist/primitives/Button/Button.svelte.d.ts.map +1 -1
  91. package/dist/primitives/Tooltip/Tooltip.svelte +260 -0
  92. package/dist/primitives/Tooltip/Tooltip.svelte.d.ts +36 -0
  93. package/dist/primitives/Tooltip/Tooltip.svelte.d.ts.map +1 -0
  94. package/dist/primitives/Tooltip/index.d.ts +2 -0
  95. package/dist/primitives/Tooltip/index.d.ts.map +1 -0
  96. package/dist/primitives/Tooltip/index.js +1 -0
  97. package/dist/primitives/index.d.ts +1 -0
  98. package/dist/primitives/index.d.ts.map +1 -1
  99. package/dist/primitives/index.js +1 -0
  100. package/dist/styles/tokens.css +329 -260
  101. package/package.json +5 -5
  102. package/dist/windowing/Window/Window.svelte +0 -637
  103. package/dist/windowing/Window/Window.svelte.d.ts +0 -65
  104. package/dist/windowing/Window/Window.svelte.d.ts.map +0 -1
  105. package/dist/windowing/Window/index.d.ts +0 -2
  106. package/dist/windowing/Window/index.d.ts.map +0 -1
  107. package/dist/windowing/Window/index.js +0 -1
  108. package/dist/windowing/WindowManager/WindowManager.svelte +0 -425
  109. package/dist/windowing/WindowManager/WindowManager.svelte.d.ts +0 -38
  110. package/dist/windowing/WindowManager/WindowManager.svelte.d.ts.map +0 -1
  111. package/dist/windowing/WindowManager/index.d.ts +0 -2
  112. package/dist/windowing/WindowManager/index.d.ts.map +0 -1
  113. package/dist/windowing/WindowManager/index.js +0 -1
  114. package/dist/windowing/index.d.ts +0 -5
  115. package/dist/windowing/index.d.ts.map +0 -1
  116. package/dist/windowing/index.js +0 -3
  117. package/dist/windowing/windowStore.svelte.d.ts +0 -49
  118. package/dist/windowing/windowStore.svelte.d.ts.map +0 -1
  119. 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
+ INFRAREDClean checkbox with vermilion 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,118 @@ 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;
212
+ animation: sx-check-in var(--sx-duration-fast) var(--sx-ease-out) both;
216
213
  }
217
214
 
218
- .salmex-checkbox-icon-minus {
215
+ .sx-checkbox-icon-minus {
219
216
  padding: 3px 4px;
220
217
  }
221
218
 
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));
219
+ /* Checked -- vermilion fill, white checkmark */
220
+ .sx-checkbox-box-checked {
221
+ background: var(--sx-color-primary);
222
+ border-color: var(--sx-color-primary);
230
223
  }
231
224
 
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));
225
+ /* Indeterminate -- same as checked */
226
+ .sx-checkbox-box-indeterminate {
227
+ background: var(--sx-color-primary);
228
+ border-color: var(--sx-color-primary);
235
229
  }
236
230
 
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));
231
+ /* Hover -- border brightens on unchecked box */
232
+ .sx-checkbox-label:hover .sx-checkbox-box:not(.sx-checkbox-box-checked):not(.sx-checkbox-box-indeterminate) {
233
+ border-color: var(--sx-color-border-hover);
241
234
  }
242
235
 
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));
236
+ /* Focus -- primary outline */
237
+ .sx-checkbox-input:focus-visible + .sx-checkbox-box {
238
+ outline: 2px solid var(--sx-color-primary);
239
+ outline-offset: 2px;
261
240
  }
262
241
 
263
242
  /* High contrast / forced colors: solid outline so focus is visible (APG) */
264
243
  @media (forced-colors: active) {
265
- .salmex-checkbox-input:focus-visible + .salmex-checkbox-box {
244
+ .sx-checkbox-input:focus-visible + .sx-checkbox-box {
266
245
  outline: 2px solid CanvasText;
267
246
  outline-offset: 2px;
268
247
  }
269
248
  }
270
249
 
271
- .salmex-checkbox-box-error {
272
- border-color: rgb(var(--salmex-street-red));
273
- }
274
-
275
- :global([data-theme='dark']) .salmex-checkbox-box-error {
276
- border-color: rgb(var(--salmex-street-red));
250
+ .sx-checkbox-box-error {
251
+ border-color: var(--sx-color-red);
277
252
  }
278
253
 
279
- .salmex-checkbox-content {
254
+ .sx-checkbox-content {
280
255
  display: flex;
281
256
  flex-direction: column;
282
257
  gap: 2px;
283
258
  }
284
259
 
285
- .salmex-checkbox-text {
286
- font-size: var(--salmex-font-size-sm);
287
- font-weight: 600;
288
- color: rgb(var(--salmex-text-primary));
260
+ .sx-checkbox-text {
261
+ font-size: var(--sx-text-sm);
262
+ font-weight: 500;
263
+ color: var(--sx-color-text);
289
264
  }
290
265
 
291
- .salmex-checkbox-required {
292
- color: rgb(var(--salmex-street-red));
266
+ .sx-checkbox-required {
267
+ color: var(--sx-color-red);
293
268
  margin-left: 2px;
294
269
  }
295
270
 
296
- .salmex-checkbox-description {
297
- font-size: var(--salmex-font-size-xs);
298
- color: rgb(var(--salmex-text-secondary));
271
+ .sx-checkbox-description {
272
+ font-size: var(--sx-text-xs);
273
+ color: var(--sx-color-text-secondary);
274
+ }
275
+
276
+ .sx-checkbox-error {
277
+ font-size: var(--sx-text-xs);
278
+ font-weight: 500;
279
+ color: var(--sx-color-red);
280
+ margin: 0 0 0 calc(20px + var(--sx-space-2));
299
281
  }
300
282
 
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));
283
+ .sx-checkbox-sm .sx-checkbox-error {
284
+ margin-left: calc(16px + var(--sx-space-2));
306
285
  }
307
286
 
308
- .salmex-checkbox-lg .salmex-checkbox-error {
309
- margin-left: calc(24px + var(--salmex-space-2));
287
+ .sx-checkbox-lg .sx-checkbox-error {
288
+ margin-left: calc(24px + var(--sx-space-2));
310
289
  }
311
290
 
312
- .salmex-sr-only {
291
+ .sx-sr-only {
313
292
  position: absolute;
314
293
  width: 1px;
315
294
  height: 1px;
@@ -322,8 +301,12 @@ function handleChange(e: Event) {
322
301
  }
323
302
 
324
303
  @media (prefers-reduced-motion: reduce) {
325
- .salmex-checkbox-box {
304
+ .sx-checkbox-box {
326
305
  transition: none;
327
306
  }
307
+
308
+ .sx-checkbox-icon {
309
+ animation: none;
310
+ }
328
311
  }
329
312
  </style>
@@ -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
+ * INFRAREDClean checkbox with vermilion 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
  */