@sentropic/design-system-svelte 0.7.0 → 0.9.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 (81) hide show
  1. package/dist/Accordion.svelte +11 -3
  2. package/dist/Accordion.svelte.d.ts.map +1 -1
  3. package/dist/Alert.svelte +1 -1
  4. package/dist/AreaChart.svelte +414 -0
  5. package/dist/AreaChart.svelte.d.ts +18 -0
  6. package/dist/AreaChart.svelte.d.ts.map +1 -0
  7. package/dist/BarChart.svelte +383 -0
  8. package/dist/BarChart.svelte.d.ts +18 -0
  9. package/dist/BarChart.svelte.d.ts.map +1 -0
  10. package/dist/ChatComposer.svelte +238 -0
  11. package/dist/ChatComposer.svelte.d.ts +57 -0
  12. package/dist/ChatComposer.svelte.d.ts.map +1 -0
  13. package/dist/ChatMessage.svelte +271 -0
  14. package/dist/ChatMessage.svelte.d.ts +19 -0
  15. package/dist/ChatMessage.svelte.d.ts.map +1 -0
  16. package/dist/ChatThread.svelte +120 -0
  17. package/dist/ChatThread.svelte.d.ts +13 -0
  18. package/dist/ChatThread.svelte.d.ts.map +1 -0
  19. package/dist/Combobox.svelte +16 -2
  20. package/dist/Combobox.svelte.d.ts.map +1 -1
  21. package/dist/CopyButton.svelte +3 -7
  22. package/dist/CopyButton.svelte.d.ts.map +1 -1
  23. package/dist/Drawer.svelte +23 -3
  24. package/dist/Drawer.svelte.d.ts +1 -1
  25. package/dist/Drawer.svelte.d.ts.map +1 -1
  26. package/dist/Dropdown.svelte +38 -2
  27. package/dist/Dropdown.svelte.d.ts.map +1 -1
  28. package/dist/FileUploader.svelte +119 -4
  29. package/dist/FileUploader.svelte.d.ts +1 -0
  30. package/dist/FileUploader.svelte.d.ts.map +1 -1
  31. package/dist/IconButton.svelte +103 -0
  32. package/dist/IconButton.svelte.d.ts +15 -0
  33. package/dist/IconButton.svelte.d.ts.map +1 -0
  34. package/dist/InlineLoading.svelte +22 -14
  35. package/dist/InlineLoading.svelte.d.ts.map +1 -1
  36. package/dist/LineChart.svelte +397 -0
  37. package/dist/LineChart.svelte.d.ts +19 -0
  38. package/dist/LineChart.svelte.d.ts.map +1 -0
  39. package/dist/Menu.svelte +164 -24
  40. package/dist/Menu.svelte.d.ts +26 -4
  41. package/dist/Menu.svelte.d.ts.map +1 -1
  42. package/dist/MenuPopover.svelte +180 -0
  43. package/dist/MenuPopover.svelte.d.ts +17 -0
  44. package/dist/MenuPopover.svelte.d.ts.map +1 -0
  45. package/dist/MenuTriggerButton.svelte +50 -0
  46. package/dist/MenuTriggerButton.svelte.d.ts +16 -0
  47. package/dist/MenuTriggerButton.svelte.d.ts.map +1 -0
  48. package/dist/MessageActions.svelte +89 -0
  49. package/dist/MessageActions.svelte.d.ts +22 -0
  50. package/dist/MessageActions.svelte.d.ts.map +1 -0
  51. package/dist/MessageStatusBadge.svelte +52 -0
  52. package/dist/MessageStatusBadge.svelte.d.ts +12 -0
  53. package/dist/MessageStatusBadge.svelte.d.ts.map +1 -0
  54. package/dist/Modal.svelte +83 -3
  55. package/dist/Modal.svelte.d.ts.map +1 -1
  56. package/dist/MultiSelect.svelte +17 -3
  57. package/dist/MultiSelect.svelte.d.ts.map +1 -1
  58. package/dist/OverflowMenu.svelte +111 -24
  59. package/dist/OverflowMenu.svelte.d.ts +21 -2
  60. package/dist/OverflowMenu.svelte.d.ts.map +1 -1
  61. package/dist/PaginationNav.svelte +6 -21
  62. package/dist/PaginationNav.svelte.d.ts.map +1 -1
  63. package/dist/PasswordInput.svelte +3 -9
  64. package/dist/PasswordInput.svelte.d.ts.map +1 -1
  65. package/dist/ProgressIndicator.svelte +3 -19
  66. package/dist/ProgressIndicator.svelte.d.ts.map +1 -1
  67. package/dist/Search.svelte +3 -6
  68. package/dist/Search.svelte.d.ts.map +1 -1
  69. package/dist/Sparkline.svelte +123 -0
  70. package/dist/Sparkline.svelte.d.ts +15 -0
  71. package/dist/Sparkline.svelte.d.ts.map +1 -0
  72. package/dist/StreamingMessage.svelte +292 -0
  73. package/dist/StreamingMessage.svelte.d.ts +51 -0
  74. package/dist/StreamingMessage.svelte.d.ts.map +1 -0
  75. package/dist/Tag.svelte +2 -1
  76. package/dist/Tag.svelte.d.ts.map +1 -1
  77. package/dist/Toast.svelte +2 -2
  78. package/dist/index.d.ts +19 -0
  79. package/dist/index.d.ts.map +1 -1
  80. package/dist/index.js +13 -0
  81. package/package.json +3 -2
@@ -11,6 +11,14 @@
11
11
 
12
12
  <script lang="ts">
13
13
  import type { HTMLAttributes } from "svelte/elements";
14
+ import {
15
+ Upload,
16
+ File as FileIcon,
17
+ LoaderCircle,
18
+ CircleCheck,
19
+ CircleAlert,
20
+ X
21
+ } from "@lucide/svelte";
14
22
 
15
23
  type FileUploaderProps = Omit<HTMLAttributes<HTMLDivElement>, "class"> & {
16
24
  label?: string;
@@ -22,6 +30,7 @@
22
30
  maxSizeBytes?: number;
23
31
  disabled?: boolean;
24
32
  files?: File[];
33
+ items?: FileUploadItem[];
25
34
  onfiles?: (files: File[]) => void;
26
35
  triggerLabel?: string;
27
36
  dropzoneLabel?: string;
@@ -41,6 +50,7 @@
41
50
  maxSizeBytes,
42
51
  disabled = false,
43
52
  files = $bindable([]),
53
+ items,
44
54
  onfiles,
45
55
  triggerLabel,
46
56
  dropzoneLabel = "Drag and drop files here",
@@ -179,6 +189,9 @@
179
189
  onchange={onChange}
180
190
  />
181
191
  <div class="st-fileUploader__content">
192
+ <span class="st-fileUploader__affordance" aria-hidden="true">
193
+ <Upload size={18} strokeWidth={2} aria-hidden="true" />
194
+ </span>
182
195
  <button
183
196
  type="button"
184
197
  class="st-fileUploader__trigger"
@@ -198,7 +211,50 @@
198
211
  <span class="st-field__help" id={helperId}>{helperText}</span>
199
212
  {/if}
200
213
 
201
- {#if files.length > 0}
214
+ {#if items && items.length > 0}
215
+ <ul class="st-fileUploader__list">
216
+ {#each items as item, index (item.file.name + index)}
217
+ <li
218
+ class={[
219
+ "st-fileUploader__item",
220
+ `st-fileUploader__item--${item.status}`
221
+ ]
222
+ .filter(Boolean)
223
+ .join(" ")}
224
+ >
225
+ <span class="st-fileUploader__itemIcon" aria-hidden="true">
226
+ {#if item.status === "uploading"}
227
+ <span class="st-fileUploader__spinner">
228
+ <LoaderCircle size={16} strokeWidth={2} aria-hidden="true" />
229
+ </span>
230
+ {:else if item.status === "complete"}
231
+ <CircleCheck size={16} strokeWidth={2} aria-hidden="true" />
232
+ {:else if item.status === "error"}
233
+ <CircleAlert size={16} strokeWidth={2} aria-hidden="true" />
234
+ {:else}
235
+ <FileIcon size={16} strokeWidth={2} aria-hidden="true" />
236
+ {/if}
237
+ </span>
238
+ <span class="st-fileUploader__itemMeta">
239
+ <span class="st-fileUploader__itemName">{item.file.name}</span>
240
+ <span class="st-fileUploader__itemSize">{formatSize(item.file.size)}</span>
241
+ {#if item.status === "error" && item.error}
242
+ <span class="st-fileUploader__itemError">{item.error}</span>
243
+ {/if}
244
+ </span>
245
+ <button
246
+ type="button"
247
+ class="st-fileUploader__remove"
248
+ aria-label={removeLabel(item.file.name)}
249
+ {disabled}
250
+ onclick={() => removeAt(index)}
251
+ >
252
+ <X size={16} strokeWidth={2} aria-hidden="true" />
253
+ </button>
254
+ </li>
255
+ {/each}
256
+ </ul>
257
+ {:else if files.length > 0}
202
258
  <ul class="st-fileUploader__list">
203
259
  {#each files as file, index (file.name + index)}
204
260
  {@const itemError = fileError(file)}
@@ -210,6 +266,13 @@
210
266
  .filter(Boolean)
211
267
  .join(" ")}
212
268
  >
269
+ <span class="st-fileUploader__itemIcon" aria-hidden="true">
270
+ {#if itemError}
271
+ <CircleAlert size={16} strokeWidth={2} aria-hidden="true" />
272
+ {:else}
273
+ <FileIcon size={16} strokeWidth={2} aria-hidden="true" />
274
+ {/if}
275
+ </span>
213
276
  <span class="st-fileUploader__itemMeta">
214
277
  <span class="st-fileUploader__itemName">{file.name}</span>
215
278
  <span class="st-fileUploader__itemSize">{formatSize(file.size)}</span>
@@ -224,7 +287,7 @@
224
287
  {disabled}
225
288
  onclick={() => removeAt(index)}
226
289
  >
227
- <span aria-hidden="true">×</span>
290
+ <X size={16} strokeWidth={2} aria-hidden="true" />
228
291
  </button>
229
292
  </li>
230
293
  {/each}
@@ -313,6 +376,18 @@
313
376
  gap: var(--st-spacing-3, 0.75rem);
314
377
  }
315
378
 
379
+ .st-fileUploader__affordance {
380
+ align-items: center;
381
+ color: var(--st-semantic-text-secondary);
382
+ display: inline-flex;
383
+ justify-content: center;
384
+ line-height: 0;
385
+ }
386
+
387
+ .st-fileUploader__dropzone--dragover .st-fileUploader__affordance {
388
+ color: var(--st-semantic-action-primary);
389
+ }
390
+
316
391
  .st-fileUploader__trigger {
317
392
  align-items: center;
318
393
  background: var(--st-semantic-action-primary);
@@ -373,6 +448,47 @@
373
448
  border-color: var(--st-semantic-feedback-error);
374
449
  }
375
450
 
451
+ .st-fileUploader__itemIcon {
452
+ align-items: center;
453
+ color: var(--st-semantic-text-secondary);
454
+ display: inline-flex;
455
+ flex: 0 0 auto;
456
+ justify-content: center;
457
+ line-height: 0;
458
+ }
459
+
460
+ .st-fileUploader__item--uploading .st-fileUploader__itemIcon {
461
+ color: var(--st-semantic-action-primary);
462
+ }
463
+
464
+ .st-fileUploader__item--complete .st-fileUploader__itemIcon {
465
+ color: var(--st-semantic-feedback-success);
466
+ }
467
+
468
+ .st-fileUploader__item--error .st-fileUploader__itemIcon {
469
+ color: var(--st-semantic-feedback-error);
470
+ }
471
+
472
+ .st-fileUploader__spinner {
473
+ align-items: center;
474
+ animation: st-fileUploader-spin 0.9s linear infinite;
475
+ display: inline-flex;
476
+ justify-content: center;
477
+ line-height: 0;
478
+ }
479
+
480
+ @keyframes st-fileUploader-spin {
481
+ to {
482
+ transform: rotate(360deg);
483
+ }
484
+ }
485
+
486
+ @media (prefers-reduced-motion: reduce) {
487
+ .st-fileUploader__spinner {
488
+ animation: none;
489
+ }
490
+ }
491
+
376
492
  .st-fileUploader__itemMeta {
377
493
  display: grid;
378
494
  gap: 0.125rem;
@@ -406,10 +522,9 @@
406
522
  display: inline-flex;
407
523
  flex: 0 0 auto;
408
524
  font: inherit;
409
- font-size: 1.125rem;
410
525
  height: 1.75rem;
411
526
  justify-content: center;
412
- line-height: 1;
527
+ line-height: 0;
413
528
  padding: 0;
414
529
  transition: background-color var(--st-motion-fast, 120ms) var(--st-motion-easing, ease);
415
530
  width: 1.75rem;
@@ -16,6 +16,7 @@ type FileUploaderProps = Omit<HTMLAttributes<HTMLDivElement>, "class"> & {
16
16
  maxSizeBytes?: number;
17
17
  disabled?: boolean;
18
18
  files?: File[];
19
+ items?: FileUploadItem[];
19
20
  onfiles?: (files: File[]) => void;
20
21
  triggerLabel?: string;
21
22
  dropzoneLabel?: string;
@@ -1 +1 @@
1
- {"version":3,"file":"FileUploader.svelte.d.ts","sourceRoot":"","sources":["../src/lib/FileUploader.svelte.ts"],"names":[],"mappings":"AAGE,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,WAAW,GAAG,UAAU,GAAG,OAAO,CAAC;AAE3E,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,EAAE,gBAAgB,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAGJ,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGpD,KAAK,iBAAiB,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC,GAAG;IACvE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC;IACf,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC;IAC3C,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,MAAM,CAAC;IACvE,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAoLJ,QAAA,MAAM,YAAY,4DAAwC,CAAC;AAC3D,KAAK,YAAY,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;AACpD,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"FileUploader.svelte.d.ts","sourceRoot":"","sources":["../src/lib/FileUploader.svelte.ts"],"names":[],"mappings":"AAGE,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,WAAW,GAAG,UAAU,GAAG,OAAO,CAAC;AAE3E,MAAM,MAAM,cAAc,GAAG;IAC3B,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,EAAE,gBAAgB,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAGJ,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAWpD,KAAK,iBAAiB,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC,GAAG;IACvE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC;IACf,KAAK,CAAC,EAAE,cAAc,EAAE,CAAC;IACzB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,CAAC;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,WAAW,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC;IAC3C,iBAAiB,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,KAAK,MAAM,CAAC;IACvE,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAmOJ,QAAA,MAAM,YAAY,4DAAwC,CAAC;AAC3D,KAAK,YAAY,GAAG,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC;AACpD,eAAe,YAAY,CAAC"}
@@ -0,0 +1,103 @@
1
+ <script lang="ts">
2
+ import type { Snippet } from "svelte";
3
+ import type { HTMLButtonAttributes } from "svelte/elements";
4
+
5
+ type IconButtonProps = Omit<HTMLButtonAttributes, "class" | "type" | "aria-label"> & {
6
+ "aria-label": string;
7
+ size?: "sm" | "md" | "lg";
8
+ variant?: "ghost" | "secondary" | "danger";
9
+ type?: "button" | "submit" | "reset";
10
+ disabled?: boolean;
11
+ class?: string;
12
+ children: Snippet;
13
+ };
14
+
15
+ let {
16
+ "aria-label": ariaLabel,
17
+ size = "md",
18
+ variant = "ghost",
19
+ type = "button",
20
+ disabled = false,
21
+ class: className,
22
+ children,
23
+ ...rest
24
+ }: IconButtonProps = $props();
25
+
26
+ const classes = () =>
27
+ ["st-iconButton", `st-iconButton--${size}`, `st-iconButton--${variant}`, className]
28
+ .filter(Boolean)
29
+ .join(" ");
30
+ </script>
31
+
32
+ <button
33
+ {...rest}
34
+ class={classes()}
35
+ {type}
36
+ {disabled}
37
+ aria-label={ariaLabel}
38
+ >
39
+ {@render children()}
40
+ </button>
41
+
42
+ <style>
43
+ .st-iconButton {
44
+ align-items: center;
45
+ background: transparent;
46
+ border: 1px solid transparent;
47
+ border-radius: var(--st-component-iconButton-radius, 0.375rem);
48
+ color: var(--st-component-iconButton-text, var(--st-semantic-text-primary));
49
+ cursor: pointer;
50
+ display: inline-flex;
51
+ flex: 0 0 auto;
52
+ font: inherit;
53
+ justify-content: center;
54
+ padding: 0;
55
+ transition:
56
+ background-color var(--st-motion-fast, 120ms) var(--st-motion-easing, ease),
57
+ border-color var(--st-motion-fast, 120ms) var(--st-motion-easing, ease),
58
+ color var(--st-motion-fast, 120ms) var(--st-motion-easing, ease);
59
+ }
60
+
61
+ .st-iconButton--sm {
62
+ height: var(--st-component-iconButton-smSize, 2rem);
63
+ width: var(--st-component-iconButton-smSize, 2rem);
64
+ }
65
+
66
+ .st-iconButton--md {
67
+ height: var(--st-component-iconButton-mdSize, 2.25rem);
68
+ width: var(--st-component-iconButton-mdSize, 2.25rem);
69
+ }
70
+
71
+ .st-iconButton--lg {
72
+ height: var(--st-component-iconButton-lgSize, 2.5rem);
73
+ width: var(--st-component-iconButton-lgSize, 2.5rem);
74
+ }
75
+
76
+ .st-iconButton--secondary {
77
+ background: var(--st-component-control-background, var(--st-semantic-surface-default));
78
+ border-color: var(--st-component-control-border, var(--st-semantic-border-subtle));
79
+ }
80
+
81
+ .st-iconButton--danger {
82
+ color: var(--st-semantic-feedback-danger, #b91c1c);
83
+ }
84
+
85
+ .st-iconButton:hover:not(:disabled) {
86
+ background: var(--st-component-iconButton-hoverBackground, var(--st-semantic-surface-subtle));
87
+ }
88
+
89
+ .st-iconButton--secondary:hover:not(:disabled) {
90
+ border-color: var(--st-component-control-hoverBorder, var(--st-semantic-border-strong));
91
+ }
92
+
93
+ .st-iconButton:focus-visible {
94
+ border-color: var(--st-component-iconButton-focusRing, var(--st-semantic-border-interactive));
95
+ box-shadow: 0 0 0 2px var(--st-component-iconButton-focusRing, var(--st-semantic-border-interactive));
96
+ outline: none;
97
+ }
98
+
99
+ .st-iconButton:disabled {
100
+ color: var(--st-component-control-disabledText, var(--st-semantic-text-muted));
101
+ cursor: not-allowed;
102
+ }
103
+ </style>
@@ -0,0 +1,15 @@
1
+ import type { Snippet } from "svelte";
2
+ import type { HTMLButtonAttributes } from "svelte/elements";
3
+ type IconButtonProps = Omit<HTMLButtonAttributes, "class" | "type" | "aria-label"> & {
4
+ "aria-label": string;
5
+ size?: "sm" | "md" | "lg";
6
+ variant?: "ghost" | "secondary" | "danger";
7
+ type?: "button" | "submit" | "reset";
8
+ disabled?: boolean;
9
+ class?: string;
10
+ children: Snippet;
11
+ };
12
+ declare const IconButton: import("svelte").Component<IconButtonProps, {}, "">;
13
+ type IconButton = ReturnType<typeof IconButton>;
14
+ export default IconButton;
15
+ //# sourceMappingURL=IconButton.svelte.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"IconButton.svelte.d.ts","sourceRoot":"","sources":["../src/lib/IconButton.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAG1D,KAAK,eAAe,GAAG,IAAI,CAAC,oBAAoB,EAAE,OAAO,GAAG,MAAM,GAAG,YAAY,CAAC,GAAG;IACnF,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IAC1B,OAAO,CAAC,EAAE,OAAO,GAAG,WAAW,GAAG,QAAQ,CAAC;IAC3C,IAAI,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;IACrC,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC;AA+BJ,QAAA,MAAM,UAAU,qDAAwC,CAAC;AACzD,KAAK,UAAU,GAAG,UAAU,CAAC,OAAO,UAAU,CAAC,CAAC;AAChD,eAAe,UAAU,CAAC"}
@@ -1,5 +1,6 @@
1
1
  <script lang="ts">
2
2
  import type { HTMLAttributes } from "svelte/elements";
3
+ import { LoaderCircle, CircleCheck, CircleAlert } from "@lucide/svelte";
3
4
 
4
5
  type InlineLoadingProps = Omit<HTMLAttributes<HTMLDivElement>, "class"> & {
5
6
  label?: string;
@@ -23,20 +24,13 @@
23
24
  <div {...rest} class={classes()} role={role()} aria-live="polite">
24
25
  <span class="st-inlineLoading__icon" aria-hidden="true">
25
26
  {#if status === "active"}
26
- <svg viewBox="0 0 16 16" width="16" height="16">
27
- <circle cx="8" cy="8" r="6" fill="none" stroke="currentColor" stroke-width="1.5" stroke-opacity="0.2" />
28
- <path d="M14 8a6 6 0 0 0-6-6" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round">
29
- <animateTransform attributeName="transform" type="rotate" from="0 8 8" to="360 8 8" dur="0.9s" repeatCount="indefinite" />
30
- </path>
31
- </svg>
27
+ <span class="st-inlineLoading__spinner">
28
+ <LoaderCircle size={16} strokeWidth={2} aria-hidden="true" />
29
+ </span>
32
30
  {:else if status === "success"}
33
- <svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.6" width="14" height="14">
34
- <path d="m3 8 3.5 3.5L13 5" stroke-linecap="round" stroke-linejoin="round" />
35
- </svg>
31
+ <CircleCheck size={16} strokeWidth={2} aria-hidden="true" />
36
32
  {:else if status === "error"}
37
- <svg viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="1.6" width="14" height="14">
38
- <path d="M4 4l8 8M12 4l-8 8" stroke-linecap="round" />
39
- </svg>
33
+ <CircleAlert size={16} strokeWidth={2} aria-hidden="true" />
40
34
  {/if}
41
35
  </span>
42
36
  {#if label}<span class="st-inlineLoading__label">{label}</span>{/if}
@@ -57,6 +51,14 @@
57
51
  justify-content: center;
58
52
  }
59
53
 
54
+ .st-inlineLoading__spinner {
55
+ align-items: center;
56
+ animation: st-inlineLoading-spin 0.9s linear infinite;
57
+ display: inline-flex;
58
+ justify-content: center;
59
+ line-height: 0;
60
+ }
61
+
60
62
  .st-inlineLoading--active .st-inlineLoading__icon {
61
63
  color: var(--st-semantic-action-primary);
62
64
  }
@@ -73,9 +75,15 @@
73
75
  color: var(--st-semantic-text-muted);
74
76
  }
75
77
 
78
+ @keyframes st-inlineLoading-spin {
79
+ to {
80
+ transform: rotate(360deg);
81
+ }
82
+ }
83
+
76
84
  @media (prefers-reduced-motion: reduce) {
77
- .st-inlineLoading__icon svg path animateTransform {
78
- display: none;
85
+ .st-inlineLoading__spinner {
86
+ animation: none;
79
87
  }
80
88
  }
81
89
  </style>
@@ -1 +1 @@
1
- {"version":3,"file":"InlineLoading.svelte.d.ts","sourceRoot":"","sources":["../src/lib/InlineLoading.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGpD,KAAK,kBAAkB,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC,GAAG;IACxE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,UAAU,CAAC;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AA4CJ,QAAA,MAAM,aAAa,wDAAwC,CAAC;AAC5D,KAAK,aAAa,GAAG,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC;AACtD,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"InlineLoading.svelte.d.ts","sourceRoot":"","sources":["../src/lib/InlineLoading.svelte.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAIpD,KAAK,kBAAkB,GAAG,IAAI,CAAC,cAAc,CAAC,cAAc,CAAC,EAAE,OAAO,CAAC,GAAG;IACxE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,UAAU,CAAC;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAsCJ,QAAA,MAAM,aAAa,wDAAwC,CAAC;AAC5D,KAAK,aAAa,GAAG,UAAU,CAAC,OAAO,aAAa,CAAC,CAAC;AACtD,eAAe,aAAa,CAAC"}