@svadmin/ui 0.29.1 → 0.29.2

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 (224) hide show
  1. package/package.json +20 -9
  2. package/src/README.md +0 -18
  3. package/src/actions.ts +0 -110
  4. package/src/app.css +0 -673
  5. package/src/component-registry.svelte.ts +0 -60
  6. package/src/components/AICommandBar.svelte +0 -180
  7. package/src/components/AboutSettings.svelte +0 -106
  8. package/src/components/AdminApp.svelte +0 -199
  9. package/src/components/AnimatedCounter.svelte +0 -46
  10. package/src/components/AnomalyBadge.svelte +0 -65
  11. package/src/components/AppearanceSettings.svelte +0 -183
  12. package/src/components/AuditLogDrawer.svelte +0 -93
  13. package/src/components/AuditLogViewer.svelte +0 -226
  14. package/src/components/Authenticated.svelte +0 -51
  15. package/src/components/AutoForm.svelte +0 -242
  16. package/src/components/AutoSaveIndicator.svelte +0 -35
  17. package/src/components/AutoTable.svelte +0 -839
  18. package/src/components/Breadcrumbs.svelte +0 -58
  19. package/src/components/CanAccess.svelte +0 -23
  20. package/src/components/CatchAllNavigate.svelte +0 -21
  21. package/src/components/ChatDialog.svelte +0 -535
  22. package/src/components/ComboboxField.svelte +0 -129
  23. package/src/components/CommandPalette.svelte +0 -135
  24. package/src/components/ConfigErrorScreen.svelte +0 -126
  25. package/src/components/ConfirmDialog.svelte +0 -53
  26. package/src/components/CopilotPanel.svelte +0 -163
  27. package/src/components/CreatePage.svelte +0 -39
  28. package/src/components/DevTools.svelte +0 -149
  29. package/src/components/DraggableGrid.svelte +0 -86
  30. package/src/components/DraggableHeader.svelte +0 -112
  31. package/src/components/DrawerForm.svelte +0 -35
  32. package/src/components/EditPage.svelte +0 -52
  33. package/src/components/EmptyState.svelte +0 -31
  34. package/src/components/ErrorBoundary.svelte +0 -49
  35. package/src/components/ErrorComponent.svelte +0 -36
  36. package/src/components/FieldRenderer.svelte +0 -357
  37. package/src/components/ForgotPasswordPage.svelte +0 -112
  38. package/src/components/Header.svelte +0 -94
  39. package/src/components/InferencerPanel.svelte +0 -192
  40. package/src/components/InfiniteList.svelte +0 -93
  41. package/src/components/InlineEdit.svelte +0 -88
  42. package/src/components/InsightCard.svelte +0 -98
  43. package/src/components/KeyboardShortcuts.svelte +0 -61
  44. package/src/components/Layout.svelte +0 -167
  45. package/src/components/ListPage.svelte +0 -71
  46. package/src/components/LiveIndicator.svelte +0 -58
  47. package/src/components/LoginPage.svelte +0 -163
  48. package/src/components/MarkdownRenderer.svelte +0 -127
  49. package/src/components/ModalForm.svelte +0 -38
  50. package/src/components/NavigateToResource.svelte +0 -20
  51. package/src/components/PageHeader.svelte +0 -39
  52. package/src/components/PageSkeleton.svelte +0 -71
  53. package/src/components/PasswordInput.svelte +0 -96
  54. package/src/components/PermissionMatrix.svelte +0 -185
  55. package/src/components/ProfilePage.svelte +0 -284
  56. package/src/components/RegisterPage.svelte +0 -112
  57. package/src/components/RolesSettings.svelte +0 -146
  58. package/src/components/SettingsPage.svelte +0 -113
  59. package/src/components/ShowPage.svelte +0 -73
  60. package/src/components/Sidebar.svelte +0 -417
  61. package/src/components/SidebarItem.svelte +0 -129
  62. package/src/components/SmartSuggest.svelte +0 -158
  63. package/src/components/StatsCard.svelte +0 -79
  64. package/src/components/StepsForm.svelte +0 -192
  65. package/src/components/TaskQueueDrawer.svelte +0 -158
  66. package/src/components/TenantSwitcher.svelte +0 -84
  67. package/src/components/ThemedTitle.svelte +0 -32
  68. package/src/components/Toast.svelte +0 -46
  69. package/src/components/TooltipButton.svelte +0 -42
  70. package/src/components/UndoableNotification.svelte +0 -69
  71. package/src/components/UpdatePasswordPage.svelte +0 -89
  72. package/src/components/VirtualTable.svelte +0 -76
  73. package/src/components/VoiceInput.svelte +0 -120
  74. package/src/components/buttons/CloneButton.svelte +0 -30
  75. package/src/components/buttons/CreateButton.svelte +0 -29
  76. package/src/components/buttons/DeleteButton.svelte +0 -59
  77. package/src/components/buttons/EditButton.svelte +0 -30
  78. package/src/components/buttons/ExportButton.svelte +0 -30
  79. package/src/components/buttons/ImportButton.svelte +0 -56
  80. package/src/components/buttons/ListButton.svelte +0 -23
  81. package/src/components/buttons/RefreshButton.svelte +0 -36
  82. package/src/components/buttons/SaveButton.svelte +0 -27
  83. package/src/components/buttons/ShowButton.svelte +0 -31
  84. package/src/components/buttons/index.ts +0 -10
  85. package/src/components/charts/BarChart.svelte +0 -69
  86. package/src/components/charts/LineChart.svelte +0 -115
  87. package/src/components/charts/PieChart.svelte +0 -95
  88. package/src/components/charts/index.ts +0 -3
  89. package/src/components/fieldComponentMap.ts +0 -79
  90. package/src/components/fields/ArrayField.svelte +0 -86
  91. package/src/components/fields/BooleanField.svelte +0 -13
  92. package/src/components/fields/DateField.svelte +0 -6
  93. package/src/components/fields/EmailField.svelte +0 -9
  94. package/src/components/fields/FileField.svelte +0 -14
  95. package/src/components/fields/ImageField.svelte +0 -9
  96. package/src/components/fields/JsonField.svelte +0 -72
  97. package/src/components/fields/MarkdownField.svelte +0 -9
  98. package/src/components/fields/MultiSelectField.svelte +0 -21
  99. package/src/components/fields/NumberField.svelte +0 -6
  100. package/src/components/fields/RelationField.svelte +0 -24
  101. package/src/components/fields/RichTextField.svelte +0 -35
  102. package/src/components/fields/SelectField.svelte +0 -14
  103. package/src/components/fields/TagField.svelte +0 -12
  104. package/src/components/fields/TextField.svelte +0 -11
  105. package/src/components/fields/UrlField.svelte +0 -14
  106. package/src/components/ui/alert/alert-description.svelte +0 -17
  107. package/src/components/ui/alert/alert-title.svelte +0 -17
  108. package/src/components/ui/alert/alert.svelte +0 -44
  109. package/src/components/ui/alert/index.ts +0 -15
  110. package/src/components/ui/alert-dialog/alert-dialog-content.svelte +0 -29
  111. package/src/components/ui/alert-dialog/alert-dialog-description.svelte +0 -16
  112. package/src/components/ui/alert-dialog/alert-dialog-footer.svelte +0 -11
  113. package/src/components/ui/alert-dialog/alert-dialog-header.svelte +0 -11
  114. package/src/components/ui/alert-dialog/alert-dialog-overlay.svelte +0 -16
  115. package/src/components/ui/alert-dialog/alert-dialog-portal.svelte +0 -6
  116. package/src/components/ui/alert-dialog/alert-dialog-title.svelte +0 -16
  117. package/src/components/ui/alert-dialog/index.ts +0 -20
  118. package/src/components/ui/avatar/avatar.svelte +0 -63
  119. package/src/components/ui/avatar/index.ts +0 -2
  120. package/src/components/ui/badge/badge.svelte +0 -49
  121. package/src/components/ui/badge/index.ts +0 -3
  122. package/src/components/ui/breadcrumb/breadcrumb-ellipsis.svelte +0 -18
  123. package/src/components/ui/breadcrumb/breadcrumb-item.svelte +0 -15
  124. package/src/components/ui/breadcrumb/breadcrumb-link.svelte +0 -15
  125. package/src/components/ui/breadcrumb/breadcrumb-list.svelte +0 -15
  126. package/src/components/ui/breadcrumb/breadcrumb-page.svelte +0 -18
  127. package/src/components/ui/breadcrumb/breadcrumb-separator.svelte +0 -22
  128. package/src/components/ui/breadcrumb/breadcrumb.svelte +0 -11
  129. package/src/components/ui/breadcrumb/index.ts +0 -7
  130. package/src/components/ui/button/button.svelte +0 -90
  131. package/src/components/ui/button/index.ts +0 -18
  132. package/src/components/ui/card/card-action.svelte +0 -23
  133. package/src/components/ui/card/card-content.svelte +0 -20
  134. package/src/components/ui/card/card-description.svelte +0 -20
  135. package/src/components/ui/card/card-footer.svelte +0 -20
  136. package/src/components/ui/card/card-header.svelte +0 -23
  137. package/src/components/ui/card/card-title.svelte +0 -15
  138. package/src/components/ui/card/card.svelte +0 -22
  139. package/src/components/ui/card/index.ts +0 -25
  140. package/src/components/ui/checkbox/checkbox.svelte +0 -39
  141. package/src/components/ui/checkbox/index.ts +0 -6
  142. package/src/components/ui/collapsible/index.ts +0 -7
  143. package/src/components/ui/command/command-dialog.svelte +0 -31
  144. package/src/components/ui/command/index.ts +0 -2
  145. package/src/components/ui/context-menu/index.ts +0 -11
  146. package/src/components/ui/dialog/dialog-close.svelte +0 -11
  147. package/src/components/ui/dialog/dialog-content.svelte +0 -48
  148. package/src/components/ui/dialog/dialog-description.svelte +0 -17
  149. package/src/components/ui/dialog/dialog-footer.svelte +0 -32
  150. package/src/components/ui/dialog/dialog-header.svelte +0 -20
  151. package/src/components/ui/dialog/dialog-overlay.svelte +0 -17
  152. package/src/components/ui/dialog/dialog-portal.svelte +0 -7
  153. package/src/components/ui/dialog/dialog-title.svelte +0 -17
  154. package/src/components/ui/dialog/dialog-trigger.svelte +0 -11
  155. package/src/components/ui/dialog/dialog.svelte +0 -7
  156. package/src/components/ui/dialog/index.ts +0 -34
  157. package/src/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte +0 -43
  158. package/src/components/ui/dropdown-menu/dropdown-menu-content.svelte +0 -35
  159. package/src/components/ui/dropdown-menu/dropdown-menu-item.svelte +0 -36
  160. package/src/components/ui/dropdown-menu/dropdown-menu-separator.svelte +0 -10
  161. package/src/components/ui/dropdown-menu/dropdown-menu-trigger.svelte +0 -27
  162. package/src/components/ui/dropdown-menu/dropdown-menu.svelte +0 -45
  163. package/src/components/ui/dropdown-menu/index.ts +0 -21
  164. package/src/components/ui/input/index.ts +0 -7
  165. package/src/components/ui/input/input.svelte +0 -48
  166. package/src/components/ui/label/index.ts +0 -1
  167. package/src/components/ui/label/label.svelte +0 -18
  168. package/src/components/ui/pagination/index.ts +0 -7
  169. package/src/components/ui/pagination/pagination-content.svelte +0 -11
  170. package/src/components/ui/pagination/pagination-ellipsis.svelte +0 -12
  171. package/src/components/ui/pagination/pagination-item.svelte +0 -11
  172. package/src/components/ui/pagination/pagination-link.svelte +0 -26
  173. package/src/components/ui/pagination/pagination-next.svelte +0 -22
  174. package/src/components/ui/pagination/pagination-previous.svelte +0 -22
  175. package/src/components/ui/pagination/pagination.svelte +0 -11
  176. package/src/components/ui/popover/index.ts +0 -12
  177. package/src/components/ui/popover/popover-content.svelte +0 -25
  178. package/src/components/ui/progress/index.ts +0 -1
  179. package/src/components/ui/progress/progress.svelte +0 -22
  180. package/src/components/ui/scroll-area/index.ts +0 -1
  181. package/src/components/ui/scroll-area/scroll-area.svelte +0 -20
  182. package/src/components/ui/select/index.ts +0 -2
  183. package/src/components/ui/select/select.svelte +0 -36
  184. package/src/components/ui/separator/index.ts +0 -7
  185. package/src/components/ui/separator/separator.svelte +0 -23
  186. package/src/components/ui/sheet/index.ts +0 -16
  187. package/src/components/ui/sheet/sheet-content.svelte +0 -28
  188. package/src/components/ui/sheet/sheet-description.svelte +0 -22
  189. package/src/components/ui/sheet/sheet-footer.svelte +0 -22
  190. package/src/components/ui/sheet/sheet-header.svelte +0 -22
  191. package/src/components/ui/sheet/sheet-title.svelte +0 -22
  192. package/src/components/ui/sheet/sheet.svelte +0 -78
  193. package/src/components/ui/skeleton/index.ts +0 -2
  194. package/src/components/ui/skeleton/skeleton.svelte +0 -21
  195. package/src/components/ui/switch/index.ts +0 -2
  196. package/src/components/ui/switch/switch.svelte +0 -49
  197. package/src/components/ui/table/index.ts +0 -28
  198. package/src/components/ui/table/table-body.svelte +0 -15
  199. package/src/components/ui/table/table-caption.svelte +0 -20
  200. package/src/components/ui/table/table-cell.svelte +0 -15
  201. package/src/components/ui/table/table-footer.svelte +0 -20
  202. package/src/components/ui/table/table-head.svelte +0 -15
  203. package/src/components/ui/table/table-header.svelte +0 -20
  204. package/src/components/ui/table/table-row.svelte +0 -15
  205. package/src/components/ui/table/table.svelte +0 -17
  206. package/src/components/ui/tabs/index.ts +0 -15
  207. package/src/components/ui/tabs/tabs-content.svelte +0 -30
  208. package/src/components/ui/tabs/tabs-list.svelte +0 -26
  209. package/src/components/ui/tabs/tabs-trigger.svelte +0 -37
  210. package/src/components/ui/tabs/tabs.svelte +0 -27
  211. package/src/components/ui/textarea/index.ts +0 -2
  212. package/src/components/ui/textarea/textarea.svelte +0 -24
  213. package/src/components/ui/tooltip/index.ts +0 -19
  214. package/src/components/ui/tooltip/tooltip-content.svelte +0 -52
  215. package/src/components/ui/tooltip/tooltip-portal.svelte +0 -7
  216. package/src/components/ui/tooltip/tooltip-provider.svelte +0 -7
  217. package/src/components/ui/tooltip/tooltip-trigger.svelte +0 -7
  218. package/src/components/ui/tooltip/tooltip.svelte +0 -10
  219. package/src/editor-config.svelte.ts +0 -23
  220. package/src/index.ts +0 -155
  221. package/src/markdown-deps.d.ts +0 -21
  222. package/src/router-state.svelte.ts +0 -65
  223. package/src/types.ts +0 -33
  224. package/src/utils.ts +0 -28
@@ -1,14 +0,0 @@
1
- <script lang="ts">
2
- import { Download } from '@lucide/svelte';
3
- interface Props { value: string | null | undefined; title?: string }
4
- let { value, title }: Props = $props();
5
- const fileName = $derived(value ? value.split('/').pop() ?? value : null);
6
- </script>
7
- {#if value}
8
- <a href={value} download class="text-primary hover:underline no-underline inline-flex items-center gap-1" title={title ?? fileName ?? ''}>
9
- <Download class="h-3.5 w-3.5 opacity-60" />
10
- {fileName}
11
- </a>
12
- {:else}
13
- <span class="text-muted-foreground">—</span>
14
- {/if}
@@ -1,9 +0,0 @@
1
- <script lang="ts">
2
- interface Props { value: string | null | undefined; alt?: string; width?: number; height?: number }
3
- let { value, alt = '', width = 80, height = 80 }: Props = $props();
4
- </script>
5
- {#if value}
6
- <img src={value} {alt} {width} {height} class="rounded-lg object-cover border border-border" />
7
- {:else}
8
- <span class="inline-flex items-center justify-center w-20 h-20 bg-muted rounded-lg text-muted-foreground">—</span>
9
- {/if}
@@ -1,72 +0,0 @@
1
- <script lang="ts">
2
- import { t } from '@svadmin/core/i18n';
3
- import { Button } from '../ui/button/index.js';
4
- import { Copy, Check, ChevronDown, ChevronRight } from '@lucide/svelte';
5
-
6
- let { value } = $props<{
7
- value: unknown;
8
- }>();
9
-
10
- let expanded = $state(false);
11
- let copied = $state(false);
12
- let copyTimer: ReturnType<typeof setTimeout> | undefined;
13
-
14
- $effect(() => {
15
- return () => { if (copyTimer) clearTimeout(copyTimer); };
16
- });
17
-
18
- const formatted = $derived(
19
- value != null ? JSON.stringify(value, null, 2) : '—'
20
- );
21
-
22
- const preview = $derived(
23
- value != null ? JSON.stringify(value).slice(0, 80) + (JSON.stringify(value).length > 80 ? '...' : '') : '—'
24
- );
25
-
26
- function copyJson() {
27
- navigator.clipboard.writeText(formatted);
28
- copied = true;
29
- if (copyTimer) clearTimeout(copyTimer);
30
- copyTimer = setTimeout(() => { copied = false; }, 2000);
31
- }
32
- </script>
33
-
34
- {#if value == null}
35
- <span class="text-muted-foreground">—</span>
36
- {:else}
37
- <div class="space-y-1">
38
- <div class="flex items-center gap-2">
39
- <Button
40
- variant="ghost"
41
- size="sm"
42
- class="flex items-center gap-1 text-xs text-muted-foreground hover:text-foreground h-auto py-0.5 px-1"
43
- onclick={() => { expanded = !expanded; }}
44
- >
45
- {#if expanded}
46
- <ChevronDown class="h-3 w-3" />
47
- {:else}
48
- <ChevronRight class="h-3 w-3" />
49
- {/if}
50
- {expanded ? t('common.collapse') : t('common.expand')}
51
- </Button>
52
- <Button
53
- variant="ghost"
54
- size="sm"
55
- class="flex items-center gap-1 text-xs text-muted-foreground hover:text-foreground h-auto py-0.5 px-1"
56
- onclick={copyJson}
57
- aria-label={t('common.copy')}
58
- >
59
- {#if copied}
60
- <Check class="h-3 w-3 text-emerald-500" />
61
- {:else}
62
- <Copy class="h-3 w-3" />
63
- {/if}
64
- </Button>
65
- </div>
66
- {#if expanded}
67
- <pre class="rounded-lg bg-muted p-3 text-xs overflow-auto max-h-64 font-mono">{formatted}</pre>
68
- {:else}
69
- <code class="text-xs font-mono bg-muted px-1.5 py-0.5 rounded">{preview}</code>
70
- {/if}
71
- </div>
72
- {/if}
@@ -1,9 +0,0 @@
1
- <script lang="ts">
2
- interface Props { value: string | null | undefined }
3
- let { value }: Props = $props();
4
- </script>
5
- {#if value}
6
- <div class="prose prose-sm dark:prose-invert max-w-none leading-relaxed [&_code]:bg-muted [&_code]:px-1.5 [&_code]:py-0.5 [&_code]:rounded [&_code]:text-[0.875em] [&_pre]:bg-muted [&_pre]:p-3 [&_pre]:rounded-lg [&_pre]:overflow-x-auto [&_a]:text-primary">{@html value}</div>
7
- {:else}
8
- <span class="text-muted-foreground">—</span>
9
- {/if}
@@ -1,21 +0,0 @@
1
- <script lang="ts">
2
- import { Badge } from '../ui/badge/index.js';
3
-
4
- let { value, options } = $props<{
5
- value: (string | number)[] | null | undefined;
6
- options?: { label: string; value: string | number }[];
7
- }>();
8
-
9
- const items = $derived(Array.isArray(value) ? value : []);
10
- </script>
11
-
12
- {#if items.length > 0}
13
- <div class="flex flex-wrap gap-1">
14
- {#each items as v}
15
- {@const label = options?.find((o: { label: string; value: string | number }) => o.value === v)?.label ?? String(v)}
16
- <Badge variant="secondary" class="font-normal">{label}</Badge>
17
- {/each}
18
- </div>
19
- {:else}
20
- <span class="text-muted-foreground">—</span>
21
- {/if}
@@ -1,6 +0,0 @@
1
- <script lang="ts">
2
- interface Props { value: number | string | null | undefined; locale?: string; options?: Intl.NumberFormatOptions }
3
- let { value, locale = 'en-US', options = {} }: Props = $props();
4
- const formatted = $derived(value != null ? new Intl.NumberFormat(locale, options).format(Number(value)) : '—');
5
- </script>
6
- <span class="field-number">{formatted}</span>
@@ -1,24 +0,0 @@
1
- <script lang="ts">
2
- import { ExternalLink } from '@lucide/svelte';
3
-
4
- let { value, resourceName, displayValue } = $props<{
5
- value: string | number | null | undefined;
6
- resourceName?: string;
7
- displayValue?: string;
8
- }>();
9
-
10
- const display = $derived(displayValue ?? (value != null ? `#${value}` : '—'));
11
- const href = $derived(resourceName && value != null ? `#/${resourceName}/show/${value}` : undefined);
12
- </script>
13
-
14
- {#if href}
15
- <a
16
- {href}
17
- class="inline-flex items-center gap-1 text-primary hover:underline text-sm"
18
- >
19
- {display}
20
- <ExternalLink class="h-3 w-3" />
21
- </a>
22
- {:else}
23
- <span class="text-muted-foreground">{display}</span>
24
- {/if}
@@ -1,35 +0,0 @@
1
- <script lang="ts">
2
- import { t } from '@svadmin/core/i18n';
3
- import { Button } from '../ui/button/index.js';
4
-
5
- let { value, maxLength = 200 } = $props<{
6
- value: string | null | undefined;
7
- maxLength?: number;
8
- }>();
9
-
10
- const text = $derived(value ?? '');
11
- const truncated = $derived(text.length > maxLength);
12
- const display = $derived(truncated ? text.slice(0, maxLength) + '...' : text);
13
-
14
- let showFull = $state(false);
15
- </script>
16
-
17
- {#if !text}
18
- <span class="text-muted-foreground">—</span>
19
- {:else}
20
- <div class="prose prose-sm dark:prose-invert max-w-none">
21
- <p class="whitespace-pre-wrap text-sm leading-relaxed">
22
- {showFull ? text : display}
23
- </p>
24
- {#if truncated}
25
- <Button
26
- variant="link"
27
- size="sm"
28
- class="text-xs text-primary h-auto p-0"
29
- onclick={() => { showFull = !showFull; }}
30
- >
31
- {showFull ? t('common.showLess') : t('common.showMore')}
32
- </Button>
33
- {/if}
34
- </div>
35
- {/if}
@@ -1,14 +0,0 @@
1
- <script lang="ts">
2
- import { Badge } from '../ui/badge/index.js';
3
-
4
- let { value, options } = $props<{
5
- value: string | number | null | undefined;
6
- options?: { label: string; value: string | number }[];
7
- }>();
8
-
9
- const label = $derived(
10
- options?.find((o: { label: string; value: string | number }) => o.value === value)?.label ?? (value != null ? String(value) : '—')
11
- );
12
- </script>
13
-
14
- <Badge variant="outline">{label}</Badge>
@@ -1,12 +0,0 @@
1
- <script lang="ts">
2
- import { Badge } from '../ui/badge/index.js';
3
- interface Props { value: string | string[] | null | undefined }
4
- let { value }: Props = $props();
5
- const tags = $derived(Array.isArray(value) ? value : value ? [value] : []);
6
- </script>
7
- <span class="inline-flex flex-wrap gap-1">
8
- {#each tags as tag}
9
- <Badge variant="secondary">{tag}</Badge>
10
- {/each}
11
- {#if tags.length === 0}<span class="text-muted-foreground">—</span>{/if}
12
- </span>
@@ -1,11 +0,0 @@
1
- <script lang="ts">
2
- interface Props { value: string | null | undefined; maxLength?: number }
3
- let { value, maxLength }: Props = $props();
4
- const display = $derived(value && maxLength && value.length > maxLength ? value.slice(0, maxLength) + '…' : value);
5
- const needsTooltip = $derived(value && maxLength && value.length > maxLength);
6
- </script>
7
- {#if value}
8
- <span class="inline-block" title={needsTooltip ? value : undefined}>{display}</span>
9
- {:else}
10
- <span class="text-muted-foreground">—</span>
11
- {/if}
@@ -1,14 +0,0 @@
1
- <script lang="ts">
2
- import { ExternalLink } from '@lucide/svelte';
3
- interface Props { value: string | null | undefined; label?: string }
4
- let { value, label }: Props = $props();
5
- const display = $derived(label ?? value ?? '');
6
- </script>
7
- {#if value}
8
- <a href={value} target="_blank" rel="noopener noreferrer" class="text-primary hover:underline no-underline inline-flex items-center gap-1">
9
- {display}
10
- <ExternalLink class="h-3 w-3 opacity-60" />
11
- </a>
12
- {:else}
13
- <span class="text-muted-foreground">—</span>
14
- {/if}
@@ -1,17 +0,0 @@
1
- <script lang="ts">
2
- import { cn, type WithElementRef } from "../../../utils.js";
3
- import type { HTMLAttributes } from "svelte/elements";
4
-
5
- type Props = WithElementRef<HTMLAttributes<HTMLDivElement>>;
6
-
7
- let { ref = $bindable(null), class: className, children, ...restProps }: Props = $props();
8
- </script>
9
-
10
- <div
11
- bind:this={ref}
12
- data-slot="alert-description"
13
- class={cn("col-start-2 text-sm [&_p]:leading-relaxed text-muted-foreground", className)}
14
- {...restProps}
15
- >
16
- {@render children?.()}
17
- </div>
@@ -1,17 +0,0 @@
1
- <script lang="ts">
2
- import { cn, type WithElementRef } from "../../../utils.js";
3
- import type { HTMLAttributes } from "svelte/elements";
4
-
5
- type Props = WithElementRef<HTMLAttributes<HTMLHeadingElement>>;
6
-
7
- let { ref = $bindable(null), class: className, children, ...restProps }: Props = $props();
8
- </script>
9
-
10
- <h5
11
- bind:this={ref}
12
- data-slot="alert-title"
13
- class={cn("col-start-2 line-clamp-1 min-h-4 font-medium tracking-tight", className)}
14
- {...restProps}
15
- >
16
- {@render children?.()}
17
- </h5>
@@ -1,44 +0,0 @@
1
- <script lang="ts" module>
2
- import { cn, type WithElementRef } from "../../../utils.js";
3
- import type { HTMLAttributes } from "svelte/elements";
4
- import { type VariantProps, tv } from "tailwind-variants";
5
-
6
- export const alertVariants = tv({
7
- base: "relative w-full rounded-lg border px-4 py-3 text-sm grid has-[>svg]:grid-cols-[calc(var(--spacing)*4)_1fr] grid-cols-[0_1fr] has-[>svg]:gap-x-3 gap-y-0.5 items-start [&>svg]:size-4 [&>svg]:translate-y-0.5 [&>svg]:text-current",
8
- variants: {
9
- variant: {
10
- default: "bg-card text-foreground",
11
- destructive: "text-destructive bg-card [&>svg]:text-current *:data-[slot=alert-description]:text-destructive/90",
12
- warning: "border-warning/50 text-warning-foreground bg-warning/10 [&>svg]:text-current",
13
- success: "border-success/50 text-success bg-success/10 [&>svg]:text-current",
14
- },
15
- },
16
- defaultVariants: { variant: "default" },
17
- });
18
-
19
- export type AlertVariant = VariantProps<typeof alertVariants>["variant"];
20
- </script>
21
-
22
- <script lang="ts">
23
- type Props = WithElementRef<HTMLAttributes<HTMLDivElement>> & {
24
- variant?: AlertVariant;
25
- };
26
-
27
- let {
28
- ref = $bindable(null),
29
- variant = "default",
30
- class: className,
31
- children,
32
- ...restProps
33
- }: Props = $props();
34
- </script>
35
-
36
- <div
37
- bind:this={ref}
38
- data-slot="alert"
39
- role="alert"
40
- class={cn(alertVariants({ variant }), className)}
41
- {...restProps}
42
- >
43
- {@render children?.()}
44
- </div>
@@ -1,15 +0,0 @@
1
- // @ts-nocheck
2
- import Alert, { type AlertVariant, alertVariants } from "./alert.svelte";
3
- import AlertTitle from "./alert-title.svelte";
4
- import AlertDescription from "./alert-description.svelte";
5
-
6
- export {
7
- Alert,
8
- AlertTitle,
9
- AlertDescription,
10
- Alert as Root,
11
- AlertTitle as Title,
12
- AlertDescription as Description,
13
- alertVariants,
14
- type AlertVariant,
15
- };
@@ -1,29 +0,0 @@
1
- <script lang="ts">
2
- import { AlertDialog as AlertDialogPrimitive } from "bits-ui";
3
- import type { WithoutChildrenOrChild } from "bits-ui";
4
- import { cn } from "../../../utils.js";
5
- import type { Snippet } from "svelte";
6
-
7
- let {
8
- ref = $bindable(null),
9
- class: className,
10
- children,
11
- ...restProps
12
- }: WithoutChildrenOrChild<AlertDialogPrimitive.ContentProps> & { children?: Snippet; class?: string } = $props();
13
- </script>
14
-
15
- <AlertDialogPrimitive.Portal>
16
- <AlertDialogPrimitive.Overlay
17
- class="fixed inset-0 z-50 bg-black/80 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0"
18
- />
19
- <AlertDialogPrimitive.Content
20
- bind:ref
21
- class={cn(
22
- "fixed left-[50%] top-[50%] z-50 grid w-full max-w-lg translate-x-[-50%] translate-y-[-50%] gap-4 border bg-background p-6 shadow-lg duration-200 data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 data-[state=closed]:zoom-out-95 data-[state=open]:zoom-in-95 data-[state=closed]:slide-out-to-left-1/2 data-[state=closed]:slide-out-to-top-[48%] data-[state=open]:slide-in-from-left-1/2 data-[state=open]:slide-in-from-top-[48%] sm:rounded-lg",
23
- className,
24
- )}
25
- {...restProps}
26
- >
27
- {@render children?.()}
28
- </AlertDialogPrimitive.Content>
29
- </AlertDialogPrimitive.Portal>
@@ -1,16 +0,0 @@
1
- <script lang="ts">
2
- import { AlertDialog as AlertDialogPrimitive } from "bits-ui";
3
- import { cn } from "../../../utils.js";
4
-
5
- let {
6
- ref = $bindable(null),
7
- class: className,
8
- ...restProps
9
- }: AlertDialogPrimitive.DescriptionProps & { class?: string } = $props();
10
- </script>
11
-
12
- <AlertDialogPrimitive.Description
13
- bind:ref
14
- class={cn("text-sm text-muted-foreground", className)}
15
- {...restProps}
16
- />
@@ -1,11 +0,0 @@
1
- <script lang="ts">
2
- import type { Snippet } from "svelte";
3
- import type { HTMLAttributes } from "svelte/elements";
4
- import { cn } from "../../../utils.js";
5
-
6
- let { class: className, children, ...restProps }: HTMLAttributes<HTMLDivElement> & { children?: Snippet } = $props();
7
- </script>
8
-
9
- <div class={cn("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2", className)} {...restProps}>
10
- {@render children?.()}
11
- </div>
@@ -1,11 +0,0 @@
1
- <script lang="ts">
2
- import type { Snippet } from "svelte";
3
- import type { HTMLAttributes } from "svelte/elements";
4
- import { cn } from "../../../utils.js";
5
-
6
- let { class: className, children, ...restProps }: HTMLAttributes<HTMLDivElement> & { children?: Snippet } = $props();
7
- </script>
8
-
9
- <div class={cn("flex flex-col space-y-2 text-center sm:text-left", className)} {...restProps}>
10
- {@render children?.()}
11
- </div>
@@ -1,16 +0,0 @@
1
- <script lang="ts">
2
- import { AlertDialog as AlertDialogPrimitive } from "bits-ui";
3
- import { cn } from "../../../utils.js";
4
-
5
- let {
6
- ref = $bindable(null),
7
- class: className,
8
- ...restProps
9
- }: AlertDialogPrimitive.OverlayProps & { class?: string } = $props();
10
- </script>
11
-
12
- <AlertDialogPrimitive.Overlay
13
- bind:ref
14
- class={cn("fixed inset-0 z-50 bg-black/80", className)}
15
- {...restProps}
16
- />
@@ -1,6 +0,0 @@
1
- <script lang="ts">
2
- import { AlertDialog as AlertDialogPrimitive } from "bits-ui";
3
- let { ...restProps }: AlertDialogPrimitive.PortalProps = $props();
4
- </script>
5
-
6
- <AlertDialogPrimitive.Portal {...restProps} />
@@ -1,16 +0,0 @@
1
- <script lang="ts">
2
- import { AlertDialog as AlertDialogPrimitive } from "bits-ui";
3
- import { cn } from "../../../utils.js";
4
-
5
- let {
6
- ref = $bindable(null),
7
- class: className,
8
- ...restProps
9
- }: AlertDialogPrimitive.TitleProps & { class?: string } = $props();
10
- </script>
11
-
12
- <AlertDialogPrimitive.Title
13
- bind:ref
14
- class={cn("text-lg font-semibold", className)}
15
- {...restProps}
16
- />
@@ -1,20 +0,0 @@
1
- import { AlertDialog as AlertDialogPrimitive } from "bits-ui";
2
-
3
- const Root = AlertDialogPrimitive.Root;
4
- const Trigger = AlertDialogPrimitive.Trigger;
5
- const Action = AlertDialogPrimitive.Action;
6
- const Cancel = AlertDialogPrimitive.Cancel;
7
-
8
- export {
9
- Root,
10
- Trigger,
11
- Action,
12
- Cancel,
13
- };
14
- export { default as Content } from "./alert-dialog-content.svelte";
15
- export { default as Description } from "./alert-dialog-description.svelte";
16
- export { default as Footer } from "./alert-dialog-footer.svelte";
17
- export { default as Header } from "./alert-dialog-header.svelte";
18
- export { default as Overlay } from "./alert-dialog-overlay.svelte";
19
- export { default as Portal } from "./alert-dialog-portal.svelte";
20
- export { default as Title } from "./alert-dialog-title.svelte";
@@ -1,63 +0,0 @@
1
- <script lang="ts">
2
- import { cn, type WithElementRef } from "../../../utils.js";
3
- import type { HTMLImgAttributes } from "svelte/elements";
4
- import { type VariantProps, tv } from "tailwind-variants";
5
-
6
- export const avatarVariants = tv({
7
- base: "relative flex shrink-0 overflow-hidden rounded-full",
8
- variants: {
9
- size: {
10
- default: "size-10",
11
- sm: "size-8",
12
- lg: "size-12",
13
- xl: "size-16",
14
- },
15
- },
16
- defaultVariants: { size: "default" },
17
- });
18
-
19
- // AvatarSize type is exported from the package index.ts
20
- type AvatarSize = VariantProps<typeof avatarVariants>["size"];
21
-
22
- type Props = WithElementRef<HTMLImgAttributes, HTMLImageElement> & {
23
- size?: AvatarSize;
24
- fallback?: string;
25
- };
26
-
27
- let {
28
- ref = $bindable(null),
29
- src,
30
- alt = "",
31
- size = "default",
32
- fallback,
33
- class: className,
34
- ...restProps
35
- }: Props = $props();
36
-
37
- let imgError = $state(false);
38
- </script>
39
-
40
- {#if src && !imgError}
41
- <span class={cn(avatarVariants({ size }), className)}>
42
- <img
43
- bind:this={ref}
44
- data-slot="avatar"
45
- {src}
46
- {alt}
47
- class="aspect-square h-full w-full object-cover"
48
- onerror={() => { imgError = true; }}
49
- {...restProps}
50
- />
51
- </span>
52
- {:else}
53
- <span
54
- data-slot="avatar-fallback"
55
- class={cn(
56
- avatarVariants({ size }),
57
- "flex items-center justify-center bg-muted text-muted-foreground font-medium text-sm",
58
- className
59
- )}
60
- >
61
- {fallback ?? alt?.charAt(0).toUpperCase() ?? "?"}
62
- </span>
63
- {/if}
@@ -1,2 +0,0 @@
1
- import Root from "./avatar.svelte";
2
- export { Root, Root as Avatar };
@@ -1,49 +0,0 @@
1
- <script lang="ts" module>
2
- import { type VariantProps, tv } from "tailwind-variants";
3
-
4
- export const badgeVariants = tv({
5
- base: "h-5 gap-1 rounded-[min(var(--radius-sm),10px)] border border-transparent px-2.5 py-0.5 text-xs font-semibold transition-all has-data-[icon=inline-end]:pr-1.5 has-data-[icon=inline-start]:pl-1.5 [&>svg]:size-3! focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive group/badge inline-flex w-fit shrink-0 items-center justify-center overflow-hidden whitespace-nowrap transition-colors focus-visible:ring-[3px] [&>svg]:pointer-events-none",
6
- variants: {
7
- variant: {
8
- default: "bg-primary text-primary-foreground [a]:hover:bg-primary/80",
9
- secondary: "bg-secondary text-secondary-foreground [a]:hover:bg-secondary/80",
10
- destructive: "bg-destructive/10 [a]:hover:bg-destructive/20 focus-visible:ring-destructive/20 dark:focus-visible:ring-destructive/40 text-destructive dark:bg-destructive/20",
11
- outline: "border-border text-foreground [a]:hover:bg-muted [a]:hover:text-muted-foreground",
12
- ghost: "hover:bg-muted hover:text-muted-foreground dark:hover:bg-muted/50",
13
- link: "text-primary underline-offset-4 hover:underline",
14
- },
15
- },
16
- defaultVariants: {
17
- variant: "default",
18
- },
19
- });
20
-
21
- export type BadgeVariant = VariantProps<typeof badgeVariants>["variant"];
22
- </script>
23
-
24
- <script lang="ts">
25
- import type { HTMLAnchorAttributes } from "svelte/elements";
26
- import { cn, type WithElementRef } from "../../../utils.js";
27
-
28
- let {
29
- ref = $bindable(null),
30
- href,
31
- class: className,
32
- variant = "default",
33
- children,
34
- ...restProps
35
- }: WithElementRef<HTMLAnchorAttributes> & {
36
- variant?: BadgeVariant;
37
- } = $props();
38
- </script>
39
-
40
- <svelte:element
41
- this={href ? "a" : "span"}
42
- bind:this={ref}
43
- data-slot="badge"
44
- {href}
45
- class={cn(badgeVariants({ variant }), className)}
46
- {...restProps}
47
- >
48
- {@render children?.()}
49
- </svelte:element>
@@ -1,3 +0,0 @@
1
- // @ts-nocheck
2
- export { default as Badge } from "./badge.svelte";
3
- export { badgeVariants, type BadgeVariant } from "./badge.svelte";
@@ -1,18 +0,0 @@
1
- <script lang="ts">
2
- import { cn } from '../../../utils.js';
3
- import type { HTMLAttributes } from 'svelte/elements';
4
- import { Ellipsis } from '@lucide/svelte';
5
-
6
- let { class: className, ...restProps }: HTMLAttributes<HTMLSpanElement> = $props();
7
- </script>
8
-
9
- <span
10
- role="presentation"
11
- aria-hidden="true"
12
- data-slot="breadcrumb-ellipsis"
13
- class={cn("flex size-9 items-center justify-center", className)}
14
- {...restProps}
15
- >
16
- <Ellipsis class="size-4" />
17
- <span class="sr-only">More</span>
18
- </span>
@@ -1,15 +0,0 @@
1
- <script lang="ts">
2
- import { cn } from '../../../utils.js';
3
- import type { Snippet } from 'svelte';
4
- import type { HTMLLiAttributes } from 'svelte/elements';
5
-
6
- let { class: className, children, ...restProps }: HTMLLiAttributes & { children?: Snippet } = $props();
7
- </script>
8
-
9
- <li
10
- data-slot="breadcrumb-item"
11
- class={cn("inline-flex items-center gap-1.5", className)}
12
- {...restProps}
13
- >
14
- {@render children?.()}
15
- </li>