@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.
- package/README.md +262 -0
- package/dist/app.css +2 -0
- package/dist/app.html +12 -0
- package/dist/data-display/DataTable/DataTable.svelte +773 -0
- package/dist/data-display/DataTable/DataTable.svelte.d.ts +120 -0
- package/dist/data-display/DataTable/DataTable.svelte.d.ts.map +1 -0
- package/dist/data-display/DataTable/index.d.ts +2 -0
- package/dist/data-display/DataTable/index.d.ts.map +1 -0
- package/dist/data-display/DataTable/index.js +1 -0
- package/dist/data-display/StatCard/StatCard.svelte +409 -0
- package/dist/data-display/StatCard/StatCard.svelte.d.ts +63 -0
- package/dist/data-display/StatCard/StatCard.svelte.d.ts.map +1 -0
- package/dist/data-display/StatCard/index.d.ts +2 -0
- package/dist/data-display/StatCard/index.d.ts.map +1 -0
- package/dist/data-display/StatCard/index.js +1 -0
- package/dist/data-display/index.d.ts +8 -0
- package/dist/data-display/index.d.ts.map +1 -0
- package/dist/data-display/index.js +7 -0
- package/dist/dialogs/ConfirmDialog/ConfirmDialog.svelte +693 -0
- package/dist/dialogs/ConfirmDialog/ConfirmDialog.svelte.d.ts +66 -0
- package/dist/dialogs/ConfirmDialog/ConfirmDialog.svelte.d.ts.map +1 -0
- package/dist/dialogs/ConfirmDialog/index.d.ts +2 -0
- package/dist/dialogs/ConfirmDialog/index.d.ts.map +1 -0
- package/dist/dialogs/ConfirmDialog/index.js +1 -0
- package/dist/dialogs/Modal/Modal.svelte +441 -0
- package/dist/dialogs/Modal/Modal.svelte.d.ts +69 -0
- package/dist/dialogs/Modal/Modal.svelte.d.ts.map +1 -0
- package/dist/dialogs/Modal/index.d.ts +2 -0
- package/dist/dialogs/Modal/index.d.ts.map +1 -0
- package/dist/dialogs/Modal/index.js +1 -0
- package/dist/dialogs/index.d.ts +8 -0
- package/dist/dialogs/index.d.ts.map +1 -0
- package/dist/dialogs/index.js +7 -0
- package/dist/feedback/Alert/Alert.svelte +565 -0
- package/dist/feedback/Alert/Alert.svelte.d.ts +60 -0
- package/dist/feedback/Alert/Alert.svelte.d.ts.map +1 -0
- package/dist/feedback/Alert/index.d.ts +2 -0
- package/dist/feedback/Alert/index.d.ts.map +1 -0
- package/dist/feedback/Alert/index.js +1 -0
- package/dist/feedback/EmptyState/EmptyState.svelte +377 -0
- package/dist/feedback/EmptyState/EmptyState.svelte.d.ts +63 -0
- package/dist/feedback/EmptyState/EmptyState.svelte.d.ts.map +1 -0
- package/dist/feedback/EmptyState/index.d.ts +2 -0
- package/dist/feedback/EmptyState/index.d.ts.map +1 -0
- package/dist/feedback/EmptyState/index.js +1 -0
- package/dist/feedback/ProgressBar/ProgressBar.svelte +585 -0
- package/dist/feedback/ProgressBar/ProgressBar.svelte.d.ts +68 -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 +568 -0
- package/dist/feedback/Skeleton/Skeleton.svelte.d.ts +54 -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 +434 -0
- package/dist/feedback/Spinner/Spinner.svelte.d.ts +49 -0
- package/dist/feedback/Spinner/Spinner.svelte.d.ts.map +1 -0
- package/dist/feedback/Spinner/index.d.ts +2 -0
- package/dist/feedback/Spinner/index.d.ts.map +1 -0
- package/dist/feedback/Spinner/index.js +1 -0
- package/dist/feedback/Toast/Toast.svelte +587 -0
- package/dist/feedback/Toast/Toast.svelte.d.ts +55 -0
- package/dist/feedback/Toast/Toast.svelte.d.ts.map +1 -0
- package/dist/feedback/Toast/ToastContainer.svelte +168 -0
- package/dist/feedback/Toast/ToastContainer.svelte.d.ts +28 -0
- package/dist/feedback/Toast/ToastContainer.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 +3 -0
- package/dist/feedback/Toast/toast-store.d.ts +72 -0
- package/dist/feedback/Toast/toast-store.d.ts.map +1 -0
- package/dist/feedback/Toast/toast-store.js +157 -0
- package/dist/feedback/index.d.ts +13 -0
- package/dist/feedback/index.d.ts.map +1 -0
- package/dist/feedback/index.js +12 -0
- package/dist/forms/Checkbox/Checkbox.svelte +404 -0
- package/dist/forms/Checkbox/Checkbox.svelte.d.ts +62 -0
- package/dist/forms/Checkbox/Checkbox.svelte.d.ts.map +1 -0
- package/dist/forms/Checkbox/index.d.ts +2 -0
- package/dist/forms/Checkbox/index.d.ts.map +1 -0
- package/dist/forms/Checkbox/index.js +1 -0
- package/dist/forms/FormField/FormField.svelte +299 -0
- package/dist/forms/FormField/FormField.svelte.d.ts +43 -0
- package/dist/forms/FormField/FormField.svelte.d.ts.map +1 -0
- package/dist/forms/FormField/index.d.ts +2 -0
- package/dist/forms/FormField/index.d.ts.map +1 -0
- package/dist/forms/FormField/index.js +1 -0
- package/dist/forms/RadioGroup/RadioGroup.svelte +418 -0
- package/dist/forms/RadioGroup/RadioGroup.svelte.d.ts +70 -0
- package/dist/forms/RadioGroup/RadioGroup.svelte.d.ts.map +1 -0
- package/dist/forms/RadioGroup/index.d.ts +2 -0
- package/dist/forms/RadioGroup/index.d.ts.map +1 -0
- package/dist/forms/RadioGroup/index.js +1 -0
- package/dist/forms/Select/Select.svelte +548 -0
- package/dist/forms/Select/Select.svelte.d.ts +74 -0
- package/dist/forms/Select/Select.svelte.d.ts.map +1 -0
- package/dist/forms/Select/index.d.ts +2 -0
- package/dist/forms/Select/index.d.ts.map +1 -0
- package/dist/forms/Select/index.js +1 -0
- package/dist/forms/TextInput/TextInput.svelte +628 -0
- package/dist/forms/TextInput/TextInput.svelte.d.ts +97 -0
- package/dist/forms/TextInput/TextInput.svelte.d.ts.map +1 -0
- package/dist/forms/TextInput/index.d.ts +2 -0
- package/dist/forms/TextInput/index.d.ts.map +1 -0
- package/dist/forms/TextInput/index.js +1 -0
- package/dist/forms/Textarea/Textarea.svelte +587 -0
- package/dist/forms/Textarea/Textarea.svelte.d.ts +71 -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/index.d.ts +13 -0
- package/dist/forms/index.d.ts.map +1 -0
- package/dist/forms/index.js +12 -0
- package/dist/index.d.ts +37 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +65 -0
- package/dist/layout/Card/Card.svelte +316 -0
- package/dist/layout/Card/Card.svelte.d.ts +63 -0
- package/dist/layout/Card/Card.svelte.d.ts.map +1 -0
- package/dist/layout/Card/index.d.ts +2 -0
- package/dist/layout/Card/index.d.ts.map +1 -0
- package/dist/layout/Card/index.js +1 -0
- package/dist/layout/Container/Container.svelte +252 -0
- package/dist/layout/Container/Container.svelte.d.ts +50 -0
- package/dist/layout/Container/Container.svelte.d.ts.map +1 -0
- package/dist/layout/Container/index.d.ts +2 -0
- package/dist/layout/Container/index.d.ts.map +1 -0
- package/dist/layout/Container/index.js +1 -0
- package/dist/layout/index.d.ts +8 -0
- package/dist/layout/index.d.ts.map +1 -0
- package/dist/layout/index.js +7 -0
- package/dist/navigation/StepIndicator/StepIndicator.svelte +601 -0
- package/dist/navigation/StepIndicator/StepIndicator.svelte.d.ts +70 -0
- package/dist/navigation/StepIndicator/StepIndicator.svelte.d.ts.map +1 -0
- package/dist/navigation/StepIndicator/index.d.ts +2 -0
- package/dist/navigation/StepIndicator/index.d.ts.map +1 -0
- package/dist/navigation/StepIndicator/index.js +1 -0
- package/dist/navigation/index.d.ts +7 -0
- package/dist/navigation/index.d.ts.map +1 -0
- package/dist/navigation/index.js +6 -0
- package/dist/primitives/Badge/Badge.svelte +365 -0
- package/dist/primitives/Badge/Badge.svelte.d.ts +39 -0
- package/dist/primitives/Badge/Badge.svelte.d.ts.map +1 -0
- package/dist/primitives/Badge/index.d.ts +2 -0
- package/dist/primitives/Badge/index.d.ts.map +1 -0
- package/dist/primitives/Badge/index.js +1 -0
- package/dist/primitives/Button/Button.svelte +430 -0
- package/dist/primitives/Button/Button.svelte.d.ts +50 -0
- package/dist/primitives/Button/Button.svelte.d.ts.map +1 -0
- package/dist/primitives/Button/index.d.ts +2 -0
- package/dist/primitives/Button/index.d.ts.map +1 -0
- package/dist/primitives/Button/index.js +1 -0
- package/dist/primitives/index.d.ts +9 -0
- package/dist/primitives/index.d.ts.map +1 -0
- package/dist/primitives/index.js +8 -0
- package/dist/routes/+layout.svelte +12 -0
- package/dist/routes/+layout.svelte.d.ts +12 -0
- package/dist/routes/+layout.svelte.d.ts.map +1 -0
- package/dist/routes/+page.svelte +53 -0
- package/dist/routes/+page.svelte.d.ts +27 -0
- package/dist/routes/+page.svelte.d.ts.map +1 -0
- package/dist/styles/tokens.css +399 -0
- package/dist/types/index.d.ts +175 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +7 -0
- package/dist/utils/accessibility.d.ts +103 -0
- package/dist/utils/accessibility.d.ts.map +1 -0
- package/dist/utils/accessibility.js +202 -0
- package/dist/utils/cn.d.ts +71 -0
- package/dist/utils/cn.d.ts.map +1 -0
- package/dist/utils/cn.js +61 -0
- package/dist/utils/form-styles.d.ts +76 -0
- package/dist/utils/form-styles.d.ts.map +1 -0
- package/dist/utils/form-styles.js +95 -0
- package/dist/utils/index.d.ts +10 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +13 -0
- package/dist/utils/keyboard.d.ts +94 -0
- package/dist/utils/keyboard.d.ts.map +1 -0
- package/dist/utils/keyboard.js +179 -0
- 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 @@
|
|
|
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';
|