@delightstack/components 0.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 (195) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +136 -0
  3. package/SKILL.md +149 -0
  4. package/bin/agents.js +63 -0
  5. package/dist/actions/Alert.svelte +202 -0
  6. package/dist/actions/Alert.svelte.d.ts +36 -0
  7. package/dist/actions/Alert.svelte.d.ts.map +1 -0
  8. package/dist/actions/Button.svelte +1450 -0
  9. package/dist/actions/Button.svelte.d.ts +56 -0
  10. package/dist/actions/Button.svelte.d.ts.map +1 -0
  11. package/dist/actions/ButtonGroup.svelte +111 -0
  12. package/dist/actions/ButtonGroup.svelte.d.ts +41 -0
  13. package/dist/actions/ButtonGroup.svelte.d.ts.map +1 -0
  14. package/dist/actions/CommandPalette.svelte +939 -0
  15. package/dist/actions/CommandPalette.svelte.d.ts +37 -0
  16. package/dist/actions/CommandPalette.svelte.d.ts.map +1 -0
  17. package/dist/actions/ContextMenu.svelte +138 -0
  18. package/dist/actions/ContextMenu.svelte.d.ts +54 -0
  19. package/dist/actions/ContextMenu.svelte.d.ts.map +1 -0
  20. package/dist/actions/Modal.svelte +474 -0
  21. package/dist/actions/Modal.svelte.d.ts +28 -0
  22. package/dist/actions/Modal.svelte.d.ts.map +1 -0
  23. package/dist/actions/Popover.svelte +1214 -0
  24. package/dist/actions/Popover.svelte.d.ts +31 -0
  25. package/dist/actions/Popover.svelte.d.ts.map +1 -0
  26. package/dist/actions/Portal.svelte +80 -0
  27. package/dist/actions/Portal.svelte.d.ts +17 -0
  28. package/dist/actions/Portal.svelte.d.ts.map +1 -0
  29. package/dist/actions/ThemeToggle.svelte +345 -0
  30. package/dist/actions/ThemeToggle.svelte.d.ts +15 -0
  31. package/dist/actions/ThemeToggle.svelte.d.ts.map +1 -0
  32. package/dist/actions/index.d.ts +13 -0
  33. package/dist/actions/index.d.ts.map +1 -0
  34. package/dist/actions/index.js +10 -0
  35. package/dist/actions/scrollbar.d.ts +48 -0
  36. package/dist/actions/scrollbar.d.ts.map +1 -0
  37. package/dist/actions/scrollbar.js +404 -0
  38. package/dist/display/Accordion.svelte +586 -0
  39. package/dist/display/Accordion.svelte.d.ts +41 -0
  40. package/dist/display/Accordion.svelte.d.ts.map +1 -0
  41. package/dist/display/Avatar.svelte +527 -0
  42. package/dist/display/Avatar.svelte.d.ts +22 -0
  43. package/dist/display/Avatar.svelte.d.ts.map +1 -0
  44. package/dist/display/AvatarGroup.svelte +298 -0
  45. package/dist/display/AvatarGroup.svelte.d.ts +31 -0
  46. package/dist/display/AvatarGroup.svelte.d.ts.map +1 -0
  47. package/dist/display/Calendar.svelte +1366 -0
  48. package/dist/display/Calendar.svelte.d.ts +58 -0
  49. package/dist/display/Calendar.svelte.d.ts.map +1 -0
  50. package/dist/display/Chart.svelte +1426 -0
  51. package/dist/display/Chart.svelte.d.ts +35 -0
  52. package/dist/display/Chart.svelte.d.ts.map +1 -0
  53. package/dist/display/Code.svelte +780 -0
  54. package/dist/display/Code.svelte.d.ts +19 -0
  55. package/dist/display/Code.svelte.d.ts.map +1 -0
  56. package/dist/display/Comparison.svelte +686 -0
  57. package/dist/display/Comparison.svelte.d.ts +22 -0
  58. package/dist/display/Comparison.svelte.d.ts.map +1 -0
  59. package/dist/display/Counter.svelte +285 -0
  60. package/dist/display/Counter.svelte.d.ts +21 -0
  61. package/dist/display/Counter.svelte.d.ts.map +1 -0
  62. package/dist/display/Expand.svelte +48 -0
  63. package/dist/display/Expand.svelte.d.ts +9 -0
  64. package/dist/display/Expand.svelte.d.ts.map +1 -0
  65. package/dist/display/List.svelte +294 -0
  66. package/dist/display/List.svelte.d.ts +40 -0
  67. package/dist/display/List.svelte.d.ts.map +1 -0
  68. package/dist/display/ListContextReset.svelte +19 -0
  69. package/dist/display/ListContextReset.svelte.d.ts +7 -0
  70. package/dist/display/ListContextReset.svelte.d.ts.map +1 -0
  71. package/dist/display/ListItem.svelte +834 -0
  72. package/dist/display/ListItem.svelte.d.ts +22 -0
  73. package/dist/display/ListItem.svelte.d.ts.map +1 -0
  74. package/dist/display/QR.svelte +1193 -0
  75. package/dist/display/QR.svelte.d.ts +23 -0
  76. package/dist/display/QR.svelte.d.ts.map +1 -0
  77. package/dist/display/SplitPane.svelte +744 -0
  78. package/dist/display/SplitPane.svelte.d.ts +25 -0
  79. package/dist/display/SplitPane.svelte.d.ts.map +1 -0
  80. package/dist/display/Stat.svelte +439 -0
  81. package/dist/display/Stat.svelte.d.ts +24 -0
  82. package/dist/display/Stat.svelte.d.ts.map +1 -0
  83. package/dist/display/Table.svelte +4654 -0
  84. package/dist/display/Table.svelte.d.ts +249 -0
  85. package/dist/display/Table.svelte.d.ts.map +1 -0
  86. package/dist/display/TableCellEditor.svelte +935 -0
  87. package/dist/display/TableCellEditor.svelte.d.ts +58 -0
  88. package/dist/display/TableCellEditor.svelte.d.ts.map +1 -0
  89. package/dist/display/Timeline.svelte +1258 -0
  90. package/dist/display/Timeline.svelte.d.ts +43 -0
  91. package/dist/display/Timeline.svelte.d.ts.map +1 -0
  92. package/dist/display/Tree.svelte +1740 -0
  93. package/dist/display/Tree.svelte.d.ts +74 -0
  94. package/dist/display/Tree.svelte.d.ts.map +1 -0
  95. package/dist/display/Typewriter.svelte +338 -0
  96. package/dist/display/Typewriter.svelte.d.ts +22 -0
  97. package/dist/display/Typewriter.svelte.d.ts.map +1 -0
  98. package/dist/display/index.d.ts +24 -0
  99. package/dist/display/index.d.ts.map +1 -0
  100. package/dist/display/index.js +18 -0
  101. package/dist/feedback/Callout.svelte +529 -0
  102. package/dist/feedback/Callout.svelte.d.ts +24 -0
  103. package/dist/feedback/Callout.svelte.d.ts.map +1 -0
  104. package/dist/feedback/Confetti.svelte +631 -0
  105. package/dist/feedback/Confetti.svelte.d.ts +90 -0
  106. package/dist/feedback/Confetti.svelte.d.ts.map +1 -0
  107. package/dist/feedback/Progress.svelte +382 -0
  108. package/dist/feedback/Progress.svelte.d.ts +25 -0
  109. package/dist/feedback/Progress.svelte.d.ts.map +1 -0
  110. package/dist/feedback/Toast.svelte +967 -0
  111. package/dist/feedback/Toast.svelte.d.ts +54 -0
  112. package/dist/feedback/Toast.svelte.d.ts.map +1 -0
  113. package/dist/feedback/index.d.ts +7 -0
  114. package/dist/feedback/index.d.ts.map +1 -0
  115. package/dist/feedback/index.js +4 -0
  116. package/dist/form/Checkbox.svelte +449 -0
  117. package/dist/form/Checkbox.svelte.d.ts +27 -0
  118. package/dist/form/Checkbox.svelte.d.ts.map +1 -0
  119. package/dist/form/Fieldset.svelte +410 -0
  120. package/dist/form/Fieldset.svelte.d.ts +22 -0
  121. package/dist/form/Fieldset.svelte.d.ts.map +1 -0
  122. package/dist/form/FileUpload.svelte +934 -0
  123. package/dist/form/FileUpload.svelte.d.ts +41 -0
  124. package/dist/form/FileUpload.svelte.d.ts.map +1 -0
  125. package/dist/form/Form.svelte +530 -0
  126. package/dist/form/Form.svelte.d.ts +120 -0
  127. package/dist/form/Form.svelte.d.ts.map +1 -0
  128. package/dist/form/Input.svelte +2858 -0
  129. package/dist/form/Input.svelte.d.ts +66 -0
  130. package/dist/form/Input.svelte.d.ts.map +1 -0
  131. package/dist/form/Radio.svelte +507 -0
  132. package/dist/form/Radio.svelte.d.ts +39 -0
  133. package/dist/form/Radio.svelte.d.ts.map +1 -0
  134. package/dist/form/Range.svelte +912 -0
  135. package/dist/form/Range.svelte.d.ts +33 -0
  136. package/dist/form/Range.svelte.d.ts.map +1 -0
  137. package/dist/form/Rating.svelte +429 -0
  138. package/dist/form/Rating.svelte.d.ts +28 -0
  139. package/dist/form/Rating.svelte.d.ts.map +1 -0
  140. package/dist/form/Select.svelte +1933 -0
  141. package/dist/form/Select.svelte.d.ts +54 -0
  142. package/dist/form/Select.svelte.d.ts.map +1 -0
  143. package/dist/form/Toggle.svelte +645 -0
  144. package/dist/form/Toggle.svelte.d.ts +50 -0
  145. package/dist/form/Toggle.svelte.d.ts.map +1 -0
  146. package/dist/form/index.d.ts +15 -0
  147. package/dist/form/index.d.ts.map +1 -0
  148. package/dist/form/index.js +10 -0
  149. package/dist/index.d.ts +7 -0
  150. package/dist/index.d.ts.map +1 -0
  151. package/dist/index.js +6 -0
  152. package/dist/layout/README.md +172 -0
  153. package/dist/media/Carousel.svelte +2424 -0
  154. package/dist/media/Carousel.svelte.d.ts +47 -0
  155. package/dist/media/Carousel.svelte.d.ts.map +1 -0
  156. package/dist/media/Gallery.svelte +2881 -0
  157. package/dist/media/Gallery.svelte.d.ts +82 -0
  158. package/dist/media/Gallery.svelte.d.ts.map +1 -0
  159. package/dist/media/Image.svelte +389 -0
  160. package/dist/media/Image.svelte.d.ts +33 -0
  161. package/dist/media/Image.svelte.d.ts.map +1 -0
  162. package/dist/media/PDF.svelte +1793 -0
  163. package/dist/media/PDF.svelte.d.ts +44 -0
  164. package/dist/media/PDF.svelte.d.ts.map +1 -0
  165. package/dist/media/Panorama.svelte +1391 -0
  166. package/dist/media/Panorama.svelte.d.ts +47 -0
  167. package/dist/media/Panorama.svelte.d.ts.map +1 -0
  168. package/dist/media/Video.svelte +2501 -0
  169. package/dist/media/Video.svelte.d.ts +58 -0
  170. package/dist/media/Video.svelte.d.ts.map +1 -0
  171. package/dist/media/carousel.d.ts +211 -0
  172. package/dist/media/carousel.d.ts.map +1 -0
  173. package/dist/media/carousel.js +408 -0
  174. package/dist/media/index.d.ts +11 -0
  175. package/dist/media/index.d.ts.map +1 -0
  176. package/dist/media/index.js +5 -0
  177. package/dist/navigation/BottomSheet.svelte +636 -0
  178. package/dist/navigation/BottomSheet.svelte.d.ts +27 -0
  179. package/dist/navigation/BottomSheet.svelte.d.ts.map +1 -0
  180. package/dist/navigation/Breadcrumbs.svelte +611 -0
  181. package/dist/navigation/Breadcrumbs.svelte.d.ts +28 -0
  182. package/dist/navigation/Breadcrumbs.svelte.d.ts.map +1 -0
  183. package/dist/navigation/Pagination.svelte +641 -0
  184. package/dist/navigation/Pagination.svelte.d.ts +27 -0
  185. package/dist/navigation/Pagination.svelte.d.ts.map +1 -0
  186. package/dist/navigation/Steps.svelte +965 -0
  187. package/dist/navigation/Steps.svelte.d.ts +43 -0
  188. package/dist/navigation/Steps.svelte.d.ts.map +1 -0
  189. package/dist/navigation/Tabs.svelte +698 -0
  190. package/dist/navigation/Tabs.svelte.d.ts +41 -0
  191. package/dist/navigation/Tabs.svelte.d.ts.map +1 -0
  192. package/dist/navigation/index.d.ts +8 -0
  193. package/dist/navigation/index.d.ts.map +1 -0
  194. package/dist/navigation/index.js +5 -0
  195. package/package.json +139 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Confetti.svelte.d.ts","sourceRoot":"","sources":["../../src/feedback/Confetti.svelte.ts"],"names":[],"mappings":"AAGC;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,MAAM,GAAG,UAAU,CAAC;AAE3D,MAAM,WAAW,eAAe;IAC/B,4CAA4C;IAC5C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,6CAA6C;IAC7C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+CAA+C;IAC/C,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,0EAA0E;IAC1E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2DAA2D;IAC3D,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gFAAgF;IAChF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sDAAsD;IACtD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,oEAAoE;IACpE,MAAM,CAAC,EAAE;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAClC;;;;OAIG;IACH,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,kDAAkD;IAClD,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,kDAAkD;IAClD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,6CAA6C;IAC7C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iDAAiD;IACjD,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,aAAc,SAAQ,eAAe;IACrD,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,WAAY,SAAQ,eAAe;IACnD,wDAAwD;IACxD,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB;AAiRD;;GAEG;AACH,wBAAgB,QAAQ,CAAC,OAAO,CAAC,EAAE,eAAe,GAAG,IAAI,CAExD;yBAFe,QAAQ;0BAQkB,eAAe,KAAG,IAAI;2BAcpB,aAAa,KAAG,MAAM,IAAI;8BAoCpB,eAAe,KAAG,IAAI;0BAwB9B,eAAe,KAAG,IAAI;yBAyBxB,WAAW,KAAG,MAAM,IAAI;oBAwC/B,IAAI;;AAiKtC,QAAA,MAAM,QAAQ;aA9IoE,OAAO;;qBAAoC,MAAM,GAAG,SAAS;aAAW,MAAM,GAAG,SAAS;qBAAmB,MAAM,GAAG,SAAS;YAAU,MAAM,GAAG,SAAS;cAAY,MAAM,GAAG,SAAS;YAAU,MAAM,GAAG,SAAS;YAAU,MAAM,GAAG,SAAS;aAAW;QAAE,CAAC,EAAE,MAAM,CAAC;QAAC,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS;aAAW,cAAc,GAAG,SAAS;aAAW,MAAM,EAAE,GAAG,SAAS;aAAW,MAAM,GAAG,SAAS;cAAY,MAAM;eAAa,MAAM;iCAA+B,OAAO;;YAA8B,MAAM;YAAU,CAAC,MAAM,IAAI,CAAC,GAAG,SAAS;UA8I9iB,CAAC;AACvD,KAAK,QAAQ,GAAG,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC;AAC5C,eAAe,QAAQ,CAAC"}
@@ -0,0 +1,382 @@
1
+ <script lang="ts">
2
+ import Portal from '../actions/Portal.svelte';
3
+
4
+ const propId = $props.id();
5
+ let {
6
+ /** Progress value (0–100). Omit for indeterminate */
7
+ value = undefined as number | undefined,
8
+
9
+ /** Maximum value */
10
+ max = 100,
11
+
12
+ /** Circular mode (false = linear bar) */
13
+ circular = true,
14
+
15
+ /** Force indeterminate animation regardless of value */
16
+ loading = false,
17
+
18
+ /** Size of the indicator */
19
+ size = '1' as '00' | '0' | '1' | '2' | '3',
20
+
21
+ /** Custom fill color (overrides currentColor) */
22
+ color = undefined as string | undefined,
23
+
24
+ /** Text label (below spinner or beside bar) */
25
+ label = undefined as string | undefined,
26
+
27
+ /** Display the current percentage */
28
+ show_value = false,
29
+
30
+ /** Striped animation on fill (linear mode only) */
31
+ striped = false,
32
+
33
+ /** Cover parent element with backdrop */
34
+ overlay = false,
35
+
36
+ /** Cover entire viewport */
37
+ full_screen = false,
38
+
39
+ /** Success color variant */
40
+ success = false,
41
+
42
+ /** Error color variant */
43
+ error = false,
44
+
45
+ /** Multi-segment progress (linear only) */
46
+ segments = undefined as
47
+ | Array<{ value: number; color?: string; label?: string }>
48
+ | undefined,
49
+
50
+ /** Element ID */
51
+ id = propId,
52
+
53
+ /** Additional CSS classes */
54
+ class: class_name = '',
55
+ } = $props();
56
+
57
+ const isIndeterminate = $derived(value === undefined || loading);
58
+ const percentage = $derived(
59
+ value !== undefined ? Math.min(100, Math.max(0, (value / max) * 100)) : 0,
60
+ );
61
+
62
+ const CIRCULAR_SIZES: Record<string, { diameter: number; stroke: number }> = {
63
+ '00': { diameter: 16, stroke: 2 },
64
+ '0': { diameter: 24, stroke: 2.5 },
65
+ '1': { diameter: 40, stroke: 3 },
66
+ '2': { diameter: 64, stroke: 4 },
67
+ '3': { diameter: 96, stroke: 5 },
68
+ };
69
+
70
+ const LINEAR_HEIGHTS: Record<string, number> = {
71
+ '00': 2,
72
+ '0': 4,
73
+ '1': 8,
74
+ '2': 12,
75
+ '3': 16,
76
+ };
77
+
78
+ const circularConfig = $derived(CIRCULAR_SIZES[size] || CIRCULAR_SIZES['1']);
79
+ const linearHeight = $derived(LINEAR_HEIGHTS[size] || LINEAR_HEIGHTS['1']);
80
+ const radius = $derived((circularConfig.diameter - circularConfig.stroke) / 2);
81
+ const circumference = $derived(2 * Math.PI * radius);
82
+ const dashOffset = $derived(circumference - (percentage / 100) * circumference);
83
+
84
+ const segmentTotal = $derived(
85
+ segments ? segments.reduce((sum, s) => sum + s.value, 0) : 0,
86
+ );
87
+ </script>
88
+
89
+ {#snippet progressContent()}
90
+ <div
91
+ class={['progress', class_name].filter(Boolean).join(' ')}
92
+ class:circular
93
+ class:linear={!circular}
94
+ class:indeterminate={isIndeterminate}
95
+ class:determinate={!isIndeterminate}
96
+ class:overlay
97
+ class:full-screen={full_screen}
98
+ class:success
99
+ class:error
100
+ class:striped={striped && !circular}
101
+ {id}
102
+ role={isIndeterminate ? 'status' : 'progressbar'}
103
+ aria-valuenow={isIndeterminate ? undefined : Math.round(percentage)}
104
+ aria-valuemin={isIndeterminate ? undefined : 0}
105
+ aria-valuemax={isIndeterminate ? undefined : 100}
106
+ aria-label={label ||
107
+ (isIndeterminate ? 'Loading' : `${Math.round(percentage)}% complete`)}
108
+ style:--progress-color={color || null}>
109
+ {#if circular}
110
+ <svg
111
+ class="spinner"
112
+ width={circularConfig.diameter}
113
+ height={circularConfig.diameter}
114
+ viewBox="0 0 {circularConfig.diameter} {circularConfig.diameter}">
115
+ <circle
116
+ class="track"
117
+ cx={circularConfig.diameter / 2}
118
+ cy={circularConfig.diameter / 2}
119
+ r={radius}
120
+ fill="none"
121
+ stroke-width={circularConfig.stroke} />
122
+ <circle
123
+ class="arc"
124
+ cx={circularConfig.diameter / 2}
125
+ cy={circularConfig.diameter / 2}
126
+ r={radius}
127
+ fill="none"
128
+ stroke-width={circularConfig.stroke}
129
+ stroke-linecap="round"
130
+ stroke-dasharray={circumference}
131
+ stroke-dashoffset={isIndeterminate ? undefined : dashOffset}
132
+ style:--spinner-c="{circumference}px"
133
+ transform="rotate(-90 {circularConfig.diameter / 2} {circularConfig.diameter /
134
+ 2})" />
135
+ </svg>
136
+ {#if show_value && !isIndeterminate && size !== '00' && size !== '0'}
137
+ <span class="value">{Math.round(percentage)}%</span>
138
+ {/if}
139
+ {:else}
140
+ <div class="track" style:height="{linearHeight}px">
141
+ {#if segments && segments.length > 0}
142
+ {#each segments as segment}
143
+ <div
144
+ class="fill segment"
145
+ style:width="{(segment.value / (segmentTotal || 1)) * 100}%"
146
+ style:background={segment.color || null}>
147
+ </div>
148
+ {/each}
149
+ {:else if isIndeterminate}
150
+ <div class="fill indeterminate-bar"></div>
151
+ {:else}
152
+ <div class="fill" style:width="{percentage}%"></div>
153
+ {/if}
154
+ </div>
155
+ {#if show_value && !isIndeterminate}
156
+ <span class="value">{Math.round(percentage)}%</span>
157
+ {/if}
158
+ {/if}
159
+ {#if label}
160
+ <span class="label">{label}</span>
161
+ {/if}
162
+ </div>
163
+ {/snippet}
164
+
165
+ {#if full_screen}
166
+ <Portal>
167
+ {@render progressContent()}
168
+ </Portal>
169
+ {:else}
170
+ {@render progressContent()}
171
+ {/if}
172
+
173
+ <style>
174
+ .progress {
175
+ display: inline-flex;
176
+ align-items: center;
177
+ justify-content: center;
178
+ flex-direction: column;
179
+ gap: 0.5rem;
180
+ color: currentColor;
181
+ position: relative;
182
+
183
+ &.circular {
184
+ .spinner {
185
+ display: block;
186
+ }
187
+ &.indeterminate .spinner {
188
+ animation: progress-rotate 1.2s linear infinite;
189
+ }
190
+ &.indeterminate .arc {
191
+ /* Desynced from the rotate period so the wrap drifts around the
192
+ circle instead of pulsing at a fixed spot every loop. */
193
+ animation: progress-dash 0.9s ease-in-out infinite;
194
+ transition: none;
195
+ }
196
+ circle.track {
197
+ stroke: var(--color-border, rgb(0 0 0 / 0.1));
198
+ }
199
+ circle.arc {
200
+ stroke: var(--progress-color, var(--color-action, currentColor));
201
+ transition: stroke-dashoffset var(--duration-slow, 300ms)
202
+ var(--ease-out, ease-out);
203
+ }
204
+ .value {
205
+ position: absolute;
206
+ top: 50%;
207
+ left: 50%;
208
+ transform: translate(-50%, -50%);
209
+ font-size: 0.625em;
210
+ font-weight: 600;
211
+ line-height: 1;
212
+ }
213
+ }
214
+
215
+ &.linear {
216
+ width: 100%;
217
+ flex-direction: row;
218
+ gap: 0.75rem;
219
+
220
+ .track {
221
+ flex: 1;
222
+ border-radius: var(--radius-full, 9999px);
223
+ background: var(--color-border, rgb(0 0 0 / 0.1));
224
+ overflow: hidden;
225
+ position: relative;
226
+ display: flex;
227
+ }
228
+
229
+ .fill {
230
+ height: 100%;
231
+ background: var(--progress-color, var(--color-action, currentColor));
232
+ border-radius: inherit;
233
+ @supports (corner-shape: squircle) {
234
+ corner-shape: inherit;
235
+ }
236
+ transition: width var(--duration-slow, 300ms) var(--ease-out, ease-out);
237
+ }
238
+
239
+ .fill.indeterminate-bar {
240
+ width: 40%;
241
+ position: absolute;
242
+ animation: progress-slide 1.5s ease-in-out infinite;
243
+ }
244
+
245
+ .value {
246
+ font-size: var(--text-sm, 0.875rem);
247
+ font-weight: 500;
248
+ white-space: nowrap;
249
+ min-width: 3ch;
250
+ text-align: right;
251
+ }
252
+
253
+ .label {
254
+ font-size: var(--text-sm, 0.875rem);
255
+ color: var(--color-text-muted, inherit);
256
+ }
257
+
258
+ &.striped .fill:not(.indeterminate-bar) {
259
+ background-image: linear-gradient(
260
+ 45deg,
261
+ rgba(255, 255, 255, 0.15) 25%,
262
+ transparent 25%,
263
+ transparent 50%,
264
+ rgba(255, 255, 255, 0.15) 50%,
265
+ rgba(255, 255, 255, 0.15) 75%,
266
+ transparent 75%
267
+ );
268
+ background-size: 1rem 1rem;
269
+ animation: progress-stripe 0.5s linear infinite;
270
+ }
271
+ }
272
+
273
+ /* Wash the covered content out so it reads as temporarily inert: a
274
+ translucent scrim in the surface color (light scrim in light mode,
275
+ dark in dark mode) plus desaturation, rather than a dark modal
276
+ backdrop that would emphasize the content instead of muting it. */
277
+ &.overlay,
278
+ &.full-screen {
279
+ position: absolute;
280
+ inset: 0;
281
+ background: var(
282
+ --progress-overlay-bg,
283
+ color-mix(
284
+ in oklab,
285
+ var(--color-bg, light-dark(white, rgb(20 20 20))) 70%,
286
+ transparent
287
+ )
288
+ );
289
+ backdrop-filter: blur(1.5px) saturate(0.3);
290
+ z-index: var(--layer-modal, 400);
291
+ flex-direction: column;
292
+ }
293
+
294
+ &.full-screen {
295
+ position: fixed;
296
+ }
297
+
298
+ &.success {
299
+ circle.arc {
300
+ stroke: var(--color-success, #16a34a);
301
+ }
302
+ .fill {
303
+ background: var(--color-success, #16a34a);
304
+ }
305
+ }
306
+
307
+ &.error {
308
+ circle.arc {
309
+ stroke: var(--color-error, #dc2626);
310
+ }
311
+ .fill {
312
+ background: var(--color-error, #dc2626);
313
+ }
314
+ }
315
+ }
316
+
317
+ @keyframes progress-rotate {
318
+ 100% {
319
+ transform: rotate(360deg);
320
+ }
321
+ }
322
+
323
+ /* Arc grows from a near-dot to a long arc in the first half, then holds its
324
+ length and slides forward via stroke-dashoffset in the second half. The
325
+ arc never collapses to a dot mid-view, so there's no pause — the only
326
+ shrink is at the wrap, hidden by the (desynced) rotation. All values are
327
+ derived from the actual circumference (--spinner-c) so it's correct at
328
+ every size. The asymmetric grow-then-slide keeps the start/end caps
329
+ moving at different rates. */
330
+ @keyframes progress-dash {
331
+ 0% {
332
+ stroke-dasharray: calc(var(--spinner-c) * 0.01) calc(var(--spinner-c) * 1.6);
333
+ stroke-dashoffset: 0;
334
+ }
335
+ 50% {
336
+ stroke-dasharray: calc(var(--spinner-c) * 0.7) calc(var(--spinner-c) * 1.6);
337
+ stroke-dashoffset: calc(var(--spinner-c) * -0.28);
338
+ }
339
+ 100% {
340
+ stroke-dasharray: calc(var(--spinner-c) * 0.7) calc(var(--spinner-c) * 1.6);
341
+ stroke-dashoffset: calc(var(--spinner-c) * -0.98);
342
+ }
343
+ }
344
+
345
+ @keyframes progress-slide {
346
+ 0% {
347
+ left: -40%;
348
+ }
349
+ 100% {
350
+ left: 100%;
351
+ }
352
+ }
353
+
354
+ @keyframes progress-stripe {
355
+ 0% {
356
+ background-position: 1rem 0;
357
+ }
358
+ 100% {
359
+ background-position: 0 0;
360
+ }
361
+ }
362
+
363
+ @media (prefers-reduced-motion: reduce) {
364
+ .progress {
365
+ &.circular.indeterminate .spinner {
366
+ animation: none;
367
+ }
368
+ &.circular.indeterminate .arc {
369
+ animation: none;
370
+ stroke-dasharray: calc(var(--spinner-c) * 0.65) calc(var(--spinner-c) * 1.6);
371
+ stroke-dashoffset: 0;
372
+ }
373
+ &.linear .fill.indeterminate-bar {
374
+ animation: none;
375
+ left: 0;
376
+ }
377
+ &.linear.striped .fill {
378
+ animation: none;
379
+ }
380
+ }
381
+ }
382
+ </style>
@@ -0,0 +1,25 @@
1
+ declare const Progress: import("svelte").Component<{
2
+ value?: number | undefined;
3
+ max?: number;
4
+ circular?: boolean;
5
+ loading?: boolean;
6
+ size?: "00" | "0" | "1" | "2" | "3";
7
+ color?: string | undefined;
8
+ label?: string | undefined;
9
+ show_value?: boolean;
10
+ striped?: boolean;
11
+ overlay?: boolean;
12
+ full_screen?: boolean;
13
+ success?: boolean;
14
+ error?: boolean;
15
+ segments?: Array<{
16
+ value: number;
17
+ color?: string;
18
+ label?: string;
19
+ }> | undefined;
20
+ id?: string;
21
+ class?: string;
22
+ }, {}, "">;
23
+ type Progress = ReturnType<typeof Progress>;
24
+ export default Progress;
25
+ //# sourceMappingURL=Progress.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Progress.svelte.d.ts","sourceRoot":"","sources":["../../src/feedback/Progress.svelte.ts"],"names":[],"mappings":"AA6IA,QAAA,MAAM,QAAQ;YApGmE,MAAM,GAAG,SAAS;UAAQ,MAAM;eAAa,OAAO;cAAY,OAAO;WAAS,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG;YAAU,MAAM,GAAG,SAAS;YAAU,MAAM,GAAG,SAAS;iBAAe,OAAO;cAAY,OAAO;cAAY,OAAO;kBAAgB,OAAO;cAAY,OAAO;YAAU,OAAO;eAAe,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,GAC9a,SAAS;;YAA8B,MAAM;UAmGI,CAAC;AACvD,KAAK,QAAQ,GAAG,UAAU,CAAC,OAAO,QAAQ,CAAC,CAAC;AAC5C,eAAe,QAAQ,CAAC"}