@synthaxai/ui 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 (185) hide show
  1. package/README.md +262 -0
  2. package/dist/app.css +2 -0
  3. package/dist/app.html +12 -0
  4. package/dist/data-display/DataTable/DataTable.svelte +773 -0
  5. package/dist/data-display/DataTable/DataTable.svelte.d.ts +120 -0
  6. package/dist/data-display/DataTable/DataTable.svelte.d.ts.map +1 -0
  7. package/dist/data-display/DataTable/index.d.ts +2 -0
  8. package/dist/data-display/DataTable/index.d.ts.map +1 -0
  9. package/dist/data-display/DataTable/index.js +1 -0
  10. package/dist/data-display/StatCard/StatCard.svelte +409 -0
  11. package/dist/data-display/StatCard/StatCard.svelte.d.ts +63 -0
  12. package/dist/data-display/StatCard/StatCard.svelte.d.ts.map +1 -0
  13. package/dist/data-display/StatCard/index.d.ts +2 -0
  14. package/dist/data-display/StatCard/index.d.ts.map +1 -0
  15. package/dist/data-display/StatCard/index.js +1 -0
  16. package/dist/data-display/index.d.ts +8 -0
  17. package/dist/data-display/index.d.ts.map +1 -0
  18. package/dist/data-display/index.js +7 -0
  19. package/dist/dialogs/ConfirmDialog/ConfirmDialog.svelte +693 -0
  20. package/dist/dialogs/ConfirmDialog/ConfirmDialog.svelte.d.ts +66 -0
  21. package/dist/dialogs/ConfirmDialog/ConfirmDialog.svelte.d.ts.map +1 -0
  22. package/dist/dialogs/ConfirmDialog/index.d.ts +2 -0
  23. package/dist/dialogs/ConfirmDialog/index.d.ts.map +1 -0
  24. package/dist/dialogs/ConfirmDialog/index.js +1 -0
  25. package/dist/dialogs/Modal/Modal.svelte +441 -0
  26. package/dist/dialogs/Modal/Modal.svelte.d.ts +69 -0
  27. package/dist/dialogs/Modal/Modal.svelte.d.ts.map +1 -0
  28. package/dist/dialogs/Modal/index.d.ts +2 -0
  29. package/dist/dialogs/Modal/index.d.ts.map +1 -0
  30. package/dist/dialogs/Modal/index.js +1 -0
  31. package/dist/dialogs/index.d.ts +8 -0
  32. package/dist/dialogs/index.d.ts.map +1 -0
  33. package/dist/dialogs/index.js +7 -0
  34. package/dist/feedback/Alert/Alert.svelte +565 -0
  35. package/dist/feedback/Alert/Alert.svelte.d.ts +60 -0
  36. package/dist/feedback/Alert/Alert.svelte.d.ts.map +1 -0
  37. package/dist/feedback/Alert/index.d.ts +2 -0
  38. package/dist/feedback/Alert/index.d.ts.map +1 -0
  39. package/dist/feedback/Alert/index.js +1 -0
  40. package/dist/feedback/EmptyState/EmptyState.svelte +377 -0
  41. package/dist/feedback/EmptyState/EmptyState.svelte.d.ts +63 -0
  42. package/dist/feedback/EmptyState/EmptyState.svelte.d.ts.map +1 -0
  43. package/dist/feedback/EmptyState/index.d.ts +2 -0
  44. package/dist/feedback/EmptyState/index.d.ts.map +1 -0
  45. package/dist/feedback/EmptyState/index.js +1 -0
  46. package/dist/feedback/ProgressBar/ProgressBar.svelte +585 -0
  47. package/dist/feedback/ProgressBar/ProgressBar.svelte.d.ts +68 -0
  48. package/dist/feedback/ProgressBar/ProgressBar.svelte.d.ts.map +1 -0
  49. package/dist/feedback/ProgressBar/index.d.ts +2 -0
  50. package/dist/feedback/ProgressBar/index.d.ts.map +1 -0
  51. package/dist/feedback/ProgressBar/index.js +1 -0
  52. package/dist/feedback/Skeleton/Skeleton.svelte +568 -0
  53. package/dist/feedback/Skeleton/Skeleton.svelte.d.ts +54 -0
  54. package/dist/feedback/Skeleton/Skeleton.svelte.d.ts.map +1 -0
  55. package/dist/feedback/Skeleton/index.d.ts +2 -0
  56. package/dist/feedback/Skeleton/index.d.ts.map +1 -0
  57. package/dist/feedback/Skeleton/index.js +1 -0
  58. package/dist/feedback/Spinner/Spinner.svelte +434 -0
  59. package/dist/feedback/Spinner/Spinner.svelte.d.ts +49 -0
  60. package/dist/feedback/Spinner/Spinner.svelte.d.ts.map +1 -0
  61. package/dist/feedback/Spinner/index.d.ts +2 -0
  62. package/dist/feedback/Spinner/index.d.ts.map +1 -0
  63. package/dist/feedback/Spinner/index.js +1 -0
  64. package/dist/feedback/Toast/Toast.svelte +587 -0
  65. package/dist/feedback/Toast/Toast.svelte.d.ts +55 -0
  66. package/dist/feedback/Toast/Toast.svelte.d.ts.map +1 -0
  67. package/dist/feedback/Toast/ToastContainer.svelte +168 -0
  68. package/dist/feedback/Toast/ToastContainer.svelte.d.ts +28 -0
  69. package/dist/feedback/Toast/ToastContainer.svelte.d.ts.map +1 -0
  70. package/dist/feedback/Toast/index.d.ts +4 -0
  71. package/dist/feedback/Toast/index.d.ts.map +1 -0
  72. package/dist/feedback/Toast/index.js +3 -0
  73. package/dist/feedback/Toast/toast-store.d.ts +72 -0
  74. package/dist/feedback/Toast/toast-store.d.ts.map +1 -0
  75. package/dist/feedback/Toast/toast-store.js +157 -0
  76. package/dist/feedback/index.d.ts +13 -0
  77. package/dist/feedback/index.d.ts.map +1 -0
  78. package/dist/feedback/index.js +12 -0
  79. package/dist/forms/Checkbox/Checkbox.svelte +404 -0
  80. package/dist/forms/Checkbox/Checkbox.svelte.d.ts +62 -0
  81. package/dist/forms/Checkbox/Checkbox.svelte.d.ts.map +1 -0
  82. package/dist/forms/Checkbox/index.d.ts +2 -0
  83. package/dist/forms/Checkbox/index.d.ts.map +1 -0
  84. package/dist/forms/Checkbox/index.js +1 -0
  85. package/dist/forms/FormField/FormField.svelte +299 -0
  86. package/dist/forms/FormField/FormField.svelte.d.ts +43 -0
  87. package/dist/forms/FormField/FormField.svelte.d.ts.map +1 -0
  88. package/dist/forms/FormField/index.d.ts +2 -0
  89. package/dist/forms/FormField/index.d.ts.map +1 -0
  90. package/dist/forms/FormField/index.js +1 -0
  91. package/dist/forms/RadioGroup/RadioGroup.svelte +418 -0
  92. package/dist/forms/RadioGroup/RadioGroup.svelte.d.ts +70 -0
  93. package/dist/forms/RadioGroup/RadioGroup.svelte.d.ts.map +1 -0
  94. package/dist/forms/RadioGroup/index.d.ts +2 -0
  95. package/dist/forms/RadioGroup/index.d.ts.map +1 -0
  96. package/dist/forms/RadioGroup/index.js +1 -0
  97. package/dist/forms/Select/Select.svelte +548 -0
  98. package/dist/forms/Select/Select.svelte.d.ts +74 -0
  99. package/dist/forms/Select/Select.svelte.d.ts.map +1 -0
  100. package/dist/forms/Select/index.d.ts +2 -0
  101. package/dist/forms/Select/index.d.ts.map +1 -0
  102. package/dist/forms/Select/index.js +1 -0
  103. package/dist/forms/TextInput/TextInput.svelte +628 -0
  104. package/dist/forms/TextInput/TextInput.svelte.d.ts +97 -0
  105. package/dist/forms/TextInput/TextInput.svelte.d.ts.map +1 -0
  106. package/dist/forms/TextInput/index.d.ts +2 -0
  107. package/dist/forms/TextInput/index.d.ts.map +1 -0
  108. package/dist/forms/TextInput/index.js +1 -0
  109. package/dist/forms/Textarea/Textarea.svelte +587 -0
  110. package/dist/forms/Textarea/Textarea.svelte.d.ts +71 -0
  111. package/dist/forms/Textarea/Textarea.svelte.d.ts.map +1 -0
  112. package/dist/forms/Textarea/index.d.ts +2 -0
  113. package/dist/forms/Textarea/index.d.ts.map +1 -0
  114. package/dist/forms/Textarea/index.js +1 -0
  115. package/dist/forms/index.d.ts +13 -0
  116. package/dist/forms/index.d.ts.map +1 -0
  117. package/dist/forms/index.js +12 -0
  118. package/dist/index.d.ts +37 -0
  119. package/dist/index.d.ts.map +1 -0
  120. package/dist/index.js +65 -0
  121. package/dist/layout/Card/Card.svelte +316 -0
  122. package/dist/layout/Card/Card.svelte.d.ts +63 -0
  123. package/dist/layout/Card/Card.svelte.d.ts.map +1 -0
  124. package/dist/layout/Card/index.d.ts +2 -0
  125. package/dist/layout/Card/index.d.ts.map +1 -0
  126. package/dist/layout/Card/index.js +1 -0
  127. package/dist/layout/Container/Container.svelte +252 -0
  128. package/dist/layout/Container/Container.svelte.d.ts +50 -0
  129. package/dist/layout/Container/Container.svelte.d.ts.map +1 -0
  130. package/dist/layout/Container/index.d.ts +2 -0
  131. package/dist/layout/Container/index.d.ts.map +1 -0
  132. package/dist/layout/Container/index.js +1 -0
  133. package/dist/layout/index.d.ts +8 -0
  134. package/dist/layout/index.d.ts.map +1 -0
  135. package/dist/layout/index.js +7 -0
  136. package/dist/navigation/StepIndicator/StepIndicator.svelte +601 -0
  137. package/dist/navigation/StepIndicator/StepIndicator.svelte.d.ts +70 -0
  138. package/dist/navigation/StepIndicator/StepIndicator.svelte.d.ts.map +1 -0
  139. package/dist/navigation/StepIndicator/index.d.ts +2 -0
  140. package/dist/navigation/StepIndicator/index.d.ts.map +1 -0
  141. package/dist/navigation/StepIndicator/index.js +1 -0
  142. package/dist/navigation/index.d.ts +7 -0
  143. package/dist/navigation/index.d.ts.map +1 -0
  144. package/dist/navigation/index.js +6 -0
  145. package/dist/primitives/Badge/Badge.svelte +365 -0
  146. package/dist/primitives/Badge/Badge.svelte.d.ts +39 -0
  147. package/dist/primitives/Badge/Badge.svelte.d.ts.map +1 -0
  148. package/dist/primitives/Badge/index.d.ts +2 -0
  149. package/dist/primitives/Badge/index.d.ts.map +1 -0
  150. package/dist/primitives/Badge/index.js +1 -0
  151. package/dist/primitives/Button/Button.svelte +430 -0
  152. package/dist/primitives/Button/Button.svelte.d.ts +50 -0
  153. package/dist/primitives/Button/Button.svelte.d.ts.map +1 -0
  154. package/dist/primitives/Button/index.d.ts +2 -0
  155. package/dist/primitives/Button/index.d.ts.map +1 -0
  156. package/dist/primitives/Button/index.js +1 -0
  157. package/dist/primitives/index.d.ts +9 -0
  158. package/dist/primitives/index.d.ts.map +1 -0
  159. package/dist/primitives/index.js +8 -0
  160. package/dist/routes/+layout.svelte +12 -0
  161. package/dist/routes/+layout.svelte.d.ts +12 -0
  162. package/dist/routes/+layout.svelte.d.ts.map +1 -0
  163. package/dist/routes/+page.svelte +53 -0
  164. package/dist/routes/+page.svelte.d.ts +27 -0
  165. package/dist/routes/+page.svelte.d.ts.map +1 -0
  166. package/dist/styles/tokens.css +399 -0
  167. package/dist/types/index.d.ts +175 -0
  168. package/dist/types/index.d.ts.map +1 -0
  169. package/dist/types/index.js +7 -0
  170. package/dist/utils/accessibility.d.ts +103 -0
  171. package/dist/utils/accessibility.d.ts.map +1 -0
  172. package/dist/utils/accessibility.js +202 -0
  173. package/dist/utils/cn.d.ts +71 -0
  174. package/dist/utils/cn.d.ts.map +1 -0
  175. package/dist/utils/cn.js +61 -0
  176. package/dist/utils/form-styles.d.ts +76 -0
  177. package/dist/utils/form-styles.d.ts.map +1 -0
  178. package/dist/utils/form-styles.js +95 -0
  179. package/dist/utils/index.d.ts +10 -0
  180. package/dist/utils/index.d.ts.map +1 -0
  181. package/dist/utils/index.js +13 -0
  182. package/dist/utils/keyboard.d.ts +94 -0
  183. package/dist/utils/keyboard.d.ts.map +1 -0
  184. package/dist/utils/keyboard.js +179 -0
  185. package/package.json +119 -0
@@ -0,0 +1,585 @@
1
+ <!--
2
+ @component ProgressBar
3
+
4
+ A comprehensive progress bar component for displaying completion status.
5
+ Designed for healthcare applications with support for multi-step processes,
6
+ file uploads, and long-running operations.
7
+
8
+ Features:
9
+ - Determinate and indeterminate states
10
+ - Multiple visual styles (solid, striped, gradient)
11
+ - Segmented/stepped progress
12
+ - Buffer indicator for streaming/loading
13
+ - Circular progress variant
14
+ - Proper ARIA accessibility
15
+ - Smooth animations with reduced motion support
16
+
17
+ @example
18
+ <ProgressBar value={75} max={100} showPercentage />
19
+
20
+ @example
21
+ <ProgressBar indeterminate label="Processing..." />
22
+
23
+ @example
24
+ <ProgressBar value={3} max={5} segmented showSteps />
25
+ -->
26
+ <script lang="ts">
27
+ type ProgressSize = 'xs' | 'sm' | 'md' | 'lg';
28
+ type ProgressVariant = 'primary' | 'success' | 'warning' | 'error' | 'info';
29
+ type ProgressStyle = 'solid' | 'striped' | 'gradient';
30
+
31
+ interface Props {
32
+ /** Current progress value (0-max) */
33
+ value?: number;
34
+ /** Maximum value */
35
+ max?: number;
36
+ /** Buffer value for showing buffered/loaded amount (0-max) */
37
+ buffer?: number;
38
+ /** Whether to show indeterminate (animated) state */
39
+ indeterminate?: boolean;
40
+ /** Accessible label for screen readers */
41
+ label?: string;
42
+ /** Whether to show the label visually */
43
+ showLabel?: boolean;
44
+ /** Whether to show percentage text */
45
+ showPercentage?: boolean;
46
+ /** Whether to show value as fraction (e.g., "3/5") */
47
+ showValue?: boolean;
48
+ /** Size of the progress bar */
49
+ size?: ProgressSize;
50
+ /** Color variant */
51
+ variant?: ProgressVariant;
52
+ /** Visual style */
53
+ style?: ProgressStyle;
54
+ /** Whether to show as segmented/stepped progress */
55
+ segmented?: boolean;
56
+ /** Whether to show step indicators for segmented progress */
57
+ showSteps?: boolean;
58
+ /** Custom step labels for segmented progress */
59
+ stepLabels?: string[];
60
+ /** Whether to animate value changes */
61
+ animated?: boolean;
62
+ /** Additional CSS classes */
63
+ class?: string;
64
+ /** ID for the progress element */
65
+ id?: string;
66
+ }
67
+
68
+ let {
69
+ value = 0,
70
+ max = 100,
71
+ buffer,
72
+ indeterminate = false,
73
+ label = 'Progress',
74
+ showLabel = false,
75
+ showPercentage = false,
76
+ showValue = false,
77
+ size = 'md',
78
+ variant = 'primary',
79
+ style = 'solid',
80
+ segmented = false,
81
+ showSteps = false,
82
+ stepLabels = [],
83
+ animated = true,
84
+ class: className = '',
85
+ id
86
+ }: Props = $props();
87
+
88
+ // Calculate percentages
89
+ const percentage = $derived(Math.min(100, Math.max(0, (value / max) * 100)));
90
+ const bufferPercentage = $derived(buffer !== undefined ? Math.min(100, Math.max(0, (buffer / max) * 100)) : undefined);
91
+
92
+ // For segmented progress
93
+ const segments = $derived(segmented ? max : 0);
94
+ const completedSegments = $derived(segmented ? Math.min(max, Math.max(0, Math.floor(value))) : 0);
95
+
96
+ // Generate unique ID
97
+ const generatedId = `progress-${Math.random().toString(36).substr(2, 9)}`;
98
+ const progressId = $derived(id || generatedId);
99
+ </script>
100
+
101
+ <div class="progress-wrapper progress-{size} {className}" id={progressId}>
102
+ <!-- Header with label and value -->
103
+ {#if showLabel || showPercentage || showValue}
104
+ <div class="progress-header">
105
+ {#if showLabel}
106
+ <span class="progress-label" id="{progressId}-label">{label}</span>
107
+ {/if}
108
+ {#if (showPercentage || showValue) && !indeterminate}
109
+ <span class="progress-value">
110
+ {#if showValue}
111
+ {value}/{max}
112
+ {:else}
113
+ {Math.round(percentage)}%
114
+ {/if}
115
+ </span>
116
+ {/if}
117
+ </div>
118
+ {/if}
119
+
120
+ <!-- Segmented Progress -->
121
+ {#if segmented}
122
+ <div
123
+ class="progress-segmented"
124
+ role="progressbar"
125
+ aria-label={label}
126
+ aria-valuenow={value}
127
+ aria-valuemin={0}
128
+ aria-valuemax={max}
129
+ aria-valuetext="{value} of {max} steps complete"
130
+ >
131
+ {#each Array(segments) as _, i}
132
+ <div
133
+ class="progress-segment"
134
+ class:progress-segment-complete={i < completedSegments}
135
+ class:progress-segment-current={i === completedSegments}
136
+ class:progress-variant-primary={variant === 'primary'}
137
+ class:progress-variant-success={variant === 'success'}
138
+ class:progress-variant-warning={variant === 'warning'}
139
+ class:progress-variant-error={variant === 'error'}
140
+ class:progress-variant-info={variant === 'info'}
141
+ >
142
+ {#if showSteps}
143
+ <span class="progress-step-indicator">
144
+ {#if i < completedSegments}
145
+ <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3" stroke-linecap="round" stroke-linejoin="round">
146
+ <polyline points="20 6 9 17 4 12"></polyline>
147
+ </svg>
148
+ {:else}
149
+ {i + 1}
150
+ {/if}
151
+ </span>
152
+ {/if}
153
+ </div>
154
+ {/each}
155
+ </div>
156
+
157
+ <!-- Step Labels -->
158
+ {#if stepLabels.length > 0}
159
+ <div class="progress-step-labels">
160
+ {#each stepLabels as stepLabel, i}
161
+ <span
162
+ class="progress-step-label"
163
+ class:progress-step-label-complete={i < completedSegments}
164
+ class:progress-step-label-current={i === completedSegments}
165
+ >
166
+ {stepLabel}
167
+ </span>
168
+ {/each}
169
+ </div>
170
+ {/if}
171
+ {:else}
172
+ <!-- Standard Progress Bar -->
173
+ <div
174
+ class="progress-track"
175
+ role="progressbar"
176
+ aria-label={label}
177
+ aria-labelledby={showLabel ? `${progressId}-label` : undefined}
178
+ aria-valuenow={indeterminate ? undefined : value}
179
+ aria-valuemin={0}
180
+ aria-valuemax={max}
181
+ aria-valuetext={indeterminate ? 'Loading' : `${Math.round(percentage)}%`}
182
+ >
183
+ <!-- Buffer bar (optional) -->
184
+ {#if bufferPercentage !== undefined && !indeterminate}
185
+ <div
186
+ class="progress-buffer"
187
+ style="width: {bufferPercentage}%"
188
+ ></div>
189
+ {/if}
190
+
191
+ <!-- Main progress bar -->
192
+ <div
193
+ class="progress-bar progress-variant-{variant} progress-style-{style}"
194
+ class:progress-animated={animated && !indeterminate}
195
+ class:progress-indeterminate={indeterminate}
196
+ style={indeterminate ? undefined : `width: ${percentage}%`}
197
+ ></div>
198
+ </div>
199
+ {/if}
200
+ </div>
201
+
202
+ <style>
203
+ /* ========================================
204
+ BASE WRAPPER STYLES
205
+ ======================================== */
206
+ .progress-wrapper {
207
+ display: flex;
208
+ flex-direction: column;
209
+ gap: 0.375rem;
210
+ width: 100%;
211
+ }
212
+
213
+ /* ========================================
214
+ HEADER STYLES
215
+ ======================================== */
216
+ .progress-header {
217
+ display: flex;
218
+ justify-content: space-between;
219
+ align-items: center;
220
+ }
221
+
222
+ .progress-label {
223
+ font-size: 0.875rem;
224
+ font-weight: 500;
225
+ color: var(--ui-text-secondary);
226
+ }
227
+
228
+ .progress-value {
229
+ font-size: 0.875rem;
230
+ font-weight: 600;
231
+ color: var(--ui-text-primary);
232
+ font-variant-numeric: tabular-nums;
233
+ }
234
+
235
+ /* ========================================
236
+ SIZE VARIANTS
237
+ ======================================== */
238
+ .progress-xs .progress-track {
239
+ height: 4px;
240
+ }
241
+
242
+ .progress-sm .progress-track {
243
+ height: 6px;
244
+ }
245
+
246
+ .progress-md .progress-track {
247
+ height: 10px;
248
+ }
249
+
250
+ .progress-lg .progress-track {
251
+ height: 14px;
252
+ }
253
+
254
+ .progress-xs .progress-header,
255
+ .progress-sm .progress-header {
256
+ margin-bottom: 0.125rem;
257
+ }
258
+
259
+ .progress-xs .progress-label,
260
+ .progress-xs .progress-value {
261
+ font-size: 0.75rem;
262
+ }
263
+
264
+ .progress-sm .progress-label,
265
+ .progress-sm .progress-value {
266
+ font-size: 0.8125rem;
267
+ }
268
+
269
+ /* ========================================
270
+ TRACK STYLES
271
+ ======================================== */
272
+ .progress-track {
273
+ position: relative;
274
+ width: 100%;
275
+ background-color: var(--ui-bg-tertiary);
276
+ border-radius: 999px;
277
+ overflow: hidden;
278
+ }
279
+
280
+ /* ========================================
281
+ BUFFER BAR
282
+ ======================================== */
283
+ .progress-buffer {
284
+ position: absolute;
285
+ top: 0;
286
+ left: 0;
287
+ height: 100%;
288
+ background-color: var(--ui-bg-tertiary);
289
+ opacity: 0.5;
290
+ border-radius: 999px;
291
+ transition: width 0.3s ease-out;
292
+ }
293
+
294
+ /* ========================================
295
+ PROGRESS BAR STYLES
296
+ ======================================== */
297
+ .progress-bar {
298
+ position: relative;
299
+ height: 100%;
300
+ border-radius: 999px;
301
+ min-width: 0;
302
+ }
303
+
304
+ .progress-animated {
305
+ transition: width 0.4s cubic-bezier(0.4, 0, 0.2, 1);
306
+ }
307
+
308
+ /* ========================================
309
+ COLOR VARIANTS
310
+ ======================================== */
311
+ .progress-variant-primary {
312
+ background-color: rgb(var(--ui-color-primary));
313
+ }
314
+
315
+ .progress-variant-success {
316
+ background-color: rgb(var(--ui-color-success));
317
+ }
318
+
319
+ .progress-variant-warning {
320
+ background-color: rgb(var(--ui-color-warning));
321
+ }
322
+
323
+ .progress-variant-error {
324
+ background-color: rgb(var(--ui-color-error));
325
+ }
326
+
327
+ .progress-variant-info {
328
+ background-color: rgb(var(--ui-color-info));
329
+ }
330
+
331
+ /* Dark mode adjustments */
332
+ :global([data-theme='dark']) .progress-variant-primary {
333
+ background-color: rgb(var(--ui-color-primary-light));
334
+ }
335
+
336
+ @media (prefers-color-scheme: dark) {
337
+ :global(:root:not([data-theme='light'])) .progress-variant-primary {
338
+ background-color: rgb(var(--ui-color-primary-light));
339
+ }
340
+ }
341
+
342
+ /* ========================================
343
+ STYLE VARIANTS
344
+ ======================================== */
345
+
346
+ /* Striped style */
347
+ .progress-style-striped {
348
+ background-image: linear-gradient(
349
+ 45deg,
350
+ rgba(255, 255, 255, 0.15) 25%,
351
+ transparent 25%,
352
+ transparent 50%,
353
+ rgba(255, 255, 255, 0.15) 50%,
354
+ rgba(255, 255, 255, 0.15) 75%,
355
+ transparent 75%,
356
+ transparent
357
+ );
358
+ background-size: 1rem 1rem;
359
+ animation: progress-stripes 1s linear infinite;
360
+ }
361
+
362
+ @keyframes progress-stripes {
363
+ from {
364
+ background-position: 1rem 0;
365
+ }
366
+ to {
367
+ background-position: 0 0;
368
+ }
369
+ }
370
+
371
+ /* Gradient style */
372
+ .progress-style-gradient.progress-variant-primary {
373
+ background: linear-gradient(
374
+ 90deg,
375
+ rgb(var(--ui-color-primary)) 0%,
376
+ rgb(var(--ui-color-primary-light)) 100%
377
+ );
378
+ }
379
+
380
+ .progress-style-gradient.progress-variant-success {
381
+ background: linear-gradient(
382
+ 90deg,
383
+ rgb(var(--ui-color-success)) 0%,
384
+ rgb(var(--ui-color-success-light, var(--ui-color-success))) 100%
385
+ );
386
+ }
387
+
388
+ .progress-style-gradient.progress-variant-warning {
389
+ background: linear-gradient(
390
+ 90deg,
391
+ rgb(var(--ui-color-warning)) 0%,
392
+ rgb(var(--ui-color-warning-light, var(--ui-color-warning))) 100%
393
+ );
394
+ }
395
+
396
+ .progress-style-gradient.progress-variant-error {
397
+ background: linear-gradient(
398
+ 90deg,
399
+ rgb(var(--ui-color-error)) 0%,
400
+ rgb(var(--ui-color-error-light, var(--ui-color-error))) 100%
401
+ );
402
+ }
403
+
404
+ .progress-style-gradient.progress-variant-info {
405
+ background: linear-gradient(
406
+ 90deg,
407
+ rgb(var(--ui-color-info)) 0%,
408
+ rgb(var(--ui-color-info-light, var(--ui-color-info))) 100%
409
+ );
410
+ }
411
+
412
+ /* ========================================
413
+ INDETERMINATE ANIMATION
414
+ ======================================== */
415
+ .progress-indeterminate {
416
+ width: 40% !important;
417
+ animation: indeterminate 1.5s ease-in-out infinite;
418
+ }
419
+
420
+ @keyframes indeterminate {
421
+ 0% {
422
+ left: -40%;
423
+ transform: translateX(0);
424
+ }
425
+ 50% {
426
+ left: 100%;
427
+ transform: translateX(-100%);
428
+ }
429
+ 50.01% {
430
+ left: -40%;
431
+ transform: translateX(0);
432
+ }
433
+ 100% {
434
+ left: 100%;
435
+ transform: translateX(-100%);
436
+ }
437
+ }
438
+
439
+ /* Ensure indeterminate bar is positioned correctly */
440
+ .progress-track:has(.progress-indeterminate) {
441
+ overflow: hidden;
442
+ }
443
+
444
+ .progress-indeterminate {
445
+ position: absolute;
446
+ left: -40%;
447
+ }
448
+
449
+ /* ========================================
450
+ SEGMENTED PROGRESS
451
+ ======================================== */
452
+ .progress-segmented {
453
+ display: flex;
454
+ gap: 4px;
455
+ width: 100%;
456
+ }
457
+
458
+ .progress-segment {
459
+ flex: 1;
460
+ height: 8px;
461
+ background-color: var(--ui-bg-tertiary);
462
+ border-radius: 999px;
463
+ transition: all 0.3s ease;
464
+ display: flex;
465
+ align-items: center;
466
+ justify-content: center;
467
+ }
468
+
469
+ .progress-md .progress-segment {
470
+ height: 10px;
471
+ }
472
+
473
+ .progress-lg .progress-segment {
474
+ height: 14px;
475
+ }
476
+
477
+ .progress-segment-complete {
478
+ background-color: rgb(var(--ui-color-primary));
479
+ }
480
+
481
+ .progress-segment-complete.progress-variant-success {
482
+ background-color: rgb(var(--ui-color-success));
483
+ }
484
+
485
+ .progress-segment-complete.progress-variant-warning {
486
+ background-color: rgb(var(--ui-color-warning));
487
+ }
488
+
489
+ .progress-segment-complete.progress-variant-error {
490
+ background-color: rgb(var(--ui-color-error));
491
+ }
492
+
493
+ .progress-segment-complete.progress-variant-info {
494
+ background-color: rgb(var(--ui-color-info));
495
+ }
496
+
497
+ .progress-segment-current {
498
+ background-color: rgb(var(--ui-color-primary) / 0.3);
499
+ animation: segment-pulse 2s ease-in-out infinite;
500
+ }
501
+
502
+ @keyframes segment-pulse {
503
+ 0%, 100% {
504
+ opacity: 0.5;
505
+ }
506
+ 50% {
507
+ opacity: 1;
508
+ }
509
+ }
510
+
511
+ /* Step indicators */
512
+ .progress-step-indicator {
513
+ width: 20px;
514
+ height: 20px;
515
+ border-radius: 50%;
516
+ display: flex;
517
+ align-items: center;
518
+ justify-content: center;
519
+ font-size: 0.625rem;
520
+ font-weight: 600;
521
+ background: var(--ui-bg-primary);
522
+ border: 2px solid var(--ui-border-default);
523
+ color: var(--ui-text-tertiary);
524
+ transition: all 0.3s ease;
525
+ }
526
+
527
+ .progress-segment-complete .progress-step-indicator {
528
+ background: rgb(var(--ui-color-primary));
529
+ border-color: rgb(var(--ui-color-primary));
530
+ color: white;
531
+ }
532
+
533
+ .progress-segment-current .progress-step-indicator {
534
+ border-color: rgb(var(--ui-color-primary));
535
+ color: rgb(var(--ui-color-primary));
536
+ }
537
+
538
+ /* Step labels */
539
+ .progress-step-labels {
540
+ display: flex;
541
+ margin-top: 0.5rem;
542
+ }
543
+
544
+ .progress-step-label {
545
+ flex: 1;
546
+ text-align: center;
547
+ font-size: 0.75rem;
548
+ color: var(--ui-text-tertiary);
549
+ transition: color 0.3s ease;
550
+ }
551
+
552
+ .progress-step-label-complete,
553
+ .progress-step-label-current {
554
+ color: var(--ui-text-primary);
555
+ }
556
+
557
+ .progress-step-label-current {
558
+ font-weight: 600;
559
+ }
560
+
561
+ /* ========================================
562
+ REDUCED MOTION
563
+ ======================================== */
564
+ @media (prefers-reduced-motion: reduce) {
565
+ .progress-animated {
566
+ transition: none;
567
+ }
568
+
569
+ .progress-style-striped {
570
+ animation: none;
571
+ }
572
+
573
+ .progress-indeterminate {
574
+ animation: none;
575
+ left: 30%;
576
+ width: 40% !important;
577
+ opacity: 0.8;
578
+ }
579
+
580
+ .progress-segment-current {
581
+ animation: none;
582
+ opacity: 0.6;
583
+ }
584
+ }
585
+ </style>
@@ -0,0 +1,68 @@
1
+ type ProgressSize = 'xs' | 'sm' | 'md' | 'lg';
2
+ type ProgressVariant = 'primary' | 'success' | 'warning' | 'error' | 'info';
3
+ type ProgressStyle = 'solid' | 'striped' | 'gradient';
4
+ interface Props {
5
+ /** Current progress value (0-max) */
6
+ value?: number;
7
+ /** Maximum value */
8
+ max?: number;
9
+ /** Buffer value for showing buffered/loaded amount (0-max) */
10
+ buffer?: number;
11
+ /** Whether to show indeterminate (animated) state */
12
+ indeterminate?: boolean;
13
+ /** Accessible label for screen readers */
14
+ label?: string;
15
+ /** Whether to show the label visually */
16
+ showLabel?: boolean;
17
+ /** Whether to show percentage text */
18
+ showPercentage?: boolean;
19
+ /** Whether to show value as fraction (e.g., "3/5") */
20
+ showValue?: boolean;
21
+ /** Size of the progress bar */
22
+ size?: ProgressSize;
23
+ /** Color variant */
24
+ variant?: ProgressVariant;
25
+ /** Visual style */
26
+ style?: ProgressStyle;
27
+ /** Whether to show as segmented/stepped progress */
28
+ segmented?: boolean;
29
+ /** Whether to show step indicators for segmented progress */
30
+ showSteps?: boolean;
31
+ /** Custom step labels for segmented progress */
32
+ stepLabels?: string[];
33
+ /** Whether to animate value changes */
34
+ animated?: boolean;
35
+ /** Additional CSS classes */
36
+ class?: string;
37
+ /** ID for the progress element */
38
+ id?: string;
39
+ }
40
+ /**
41
+ * ProgressBar
42
+ *
43
+ * A comprehensive progress bar component for displaying completion status.
44
+ * Designed for healthcare applications with support for multi-step processes,
45
+ * file uploads, and long-running operations.
46
+ *
47
+ * Features:
48
+ * - Determinate and indeterminate states
49
+ * - Multiple visual styles (solid, striped, gradient)
50
+ * - Segmented/stepped progress
51
+ * - Buffer indicator for streaming/loading
52
+ * - Circular progress variant
53
+ * - Proper ARIA accessibility
54
+ * - Smooth animations with reduced motion support
55
+ *
56
+ * @example
57
+ * <ProgressBar value={75} max={100} showPercentage />
58
+ *
59
+ * @example
60
+ * <ProgressBar indeterminate label="Processing..." />
61
+ *
62
+ * @example
63
+ * <ProgressBar value={3} max={5} segmented showSteps />
64
+ */
65
+ declare const ProgressBar: import("svelte").Component<Props, {}, "">;
66
+ type ProgressBar = ReturnType<typeof ProgressBar>;
67
+ export default ProgressBar;
68
+ //# sourceMappingURL=ProgressBar.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ProgressBar.svelte.d.ts","sourceRoot":"","sources":["../../../src/feedback/ProgressBar/ProgressBar.svelte.ts"],"names":[],"mappings":"AAGC,KAAK,YAAY,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;AAC9C,KAAK,eAAe,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,CAAC;AAC5E,KAAK,aAAa,GAAG,OAAO,GAAG,SAAS,GAAG,UAAU,CAAC;AAEtD,UAAU,KAAK;IACd,qCAAqC;IACrC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oBAAoB;IACpB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,8DAA8D;IAC9D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qDAAqD;IACrD,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,0CAA0C;IAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,yCAAyC;IACzC,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,sCAAsC;IACtC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,sDAAsD;IACtD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,+BAA+B;IAC/B,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,oBAAoB;IACpB,OAAO,CAAC,EAAE,eAAe,CAAC;IAC1B,mBAAmB;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,oDAAoD;IACpD,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,6DAA6D;IAC7D,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,gDAAgD;IAChD,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,uCAAuC;IACvC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,6BAA6B;IAC7B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,kCAAkC;IAClC,EAAE,CAAC,EAAE,MAAM,CAAC;CACZ;AA2GF;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AACH,QAAA,MAAM,WAAW,2CAAwC,CAAC;AAC1D,KAAK,WAAW,GAAG,UAAU,CAAC,OAAO,WAAW,CAAC,CAAC;AAClD,eAAe,WAAW,CAAC"}
@@ -0,0 +1,2 @@
1
+ export { default as ProgressBar } from './ProgressBar.svelte';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/feedback/ProgressBar/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,sBAAsB,CAAC"}
@@ -0,0 +1 @@
1
+ export { default as ProgressBar } from './ProgressBar.svelte';