@widgetic/design-system 0.5.21 → 0.5.23

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 (246) hide show
  1. package/README.md +2 -0
  2. package/dist/components/CopyableHeader.svelte +260 -448
  3. package/dist/components/CopyableHeader.svelte.d.ts +8 -5
  4. package/dist/components/EmptyState.svelte +100 -128
  5. package/dist/components/EmptyState.svelte.d.ts +16 -19
  6. package/dist/components/GenerateLoader.svelte +17 -10
  7. package/dist/components/PasswordInput.svelte +41 -44
  8. package/dist/components/PasswordInput.svelte.d.ts +2 -0
  9. package/dist/components/ThumbHashImage.svelte +117 -119
  10. package/dist/components/WScrollArea.svelte +47 -41
  11. package/dist/components/chat/ActivityRow.svelte +115 -0
  12. package/dist/components/chat/ActivityRow.svelte.d.ts +18 -0
  13. package/dist/components/chat/ChatHeader.svelte +114 -0
  14. package/dist/components/chat/ChatHeader.svelte.d.ts +26 -0
  15. package/dist/components/chat/Composer.svelte +172 -0
  16. package/dist/components/chat/Composer.svelte.d.ts +27 -0
  17. package/dist/components/chat/Message.svelte +158 -0
  18. package/dist/components/chat/Message.svelte.d.ts +28 -0
  19. package/dist/components/chat/OptionRow.svelte +59 -0
  20. package/dist/components/chat/OptionRow.svelte.d.ts +14 -0
  21. package/dist/components/chat/PlanCard.svelte +220 -0
  22. package/dist/components/chat/PlanCard.svelte.d.ts +34 -0
  23. package/dist/components/chat/QuestionCard.svelte +265 -0
  24. package/dist/components/chat/QuestionCard.svelte.d.ts +38 -0
  25. package/dist/components/chat/ScrollToBottom.svelte +51 -0
  26. package/dist/components/chat/ScrollToBottom.svelte.d.ts +11 -0
  27. package/dist/components/chat/SuggestionCard.svelte +79 -0
  28. package/dist/components/chat/SuggestionCard.svelte.d.ts +20 -0
  29. package/dist/components/chat/TaskRow.svelte +59 -0
  30. package/dist/components/chat/TaskRow.svelte.d.ts +11 -0
  31. package/dist/components/chat/composerLogic.d.ts +16 -0
  32. package/dist/components/chat/composerLogic.js +29 -0
  33. package/dist/components/chat/index.d.ts +16 -0
  34. package/dist/components/chat/index.js +16 -0
  35. package/dist/components/chat/questionCardLogic.d.ts +11 -0
  36. package/dist/components/chat/questionCardLogic.js +39 -0
  37. package/dist/components/index.d.ts +10 -1
  38. package/dist/components/index.js +10 -0
  39. package/dist/components/modals/ActionModal.svelte +186 -180
  40. package/dist/components/modals/BaseModal.svelte +404 -395
  41. package/dist/components/modals/BaseModal.svelte.d.ts +3 -0
  42. package/dist/components/modals/NewItemDialog.svelte +200 -243
  43. package/dist/components/modals/Portal.svelte +107 -105
  44. package/dist/components/modals/README.md +16 -2
  45. package/dist/components/modals/RenameDialog.svelte +234 -292
  46. package/dist/components/navigation/Breadcrumbs.svelte +415 -377
  47. package/dist/components/navigation/Breadcrumbs.svelte.d.ts +3 -2
  48. package/dist/components/navigation/types.d.ts +2 -0
  49. package/dist/components/pdf/PDFViewer.svelte +54 -1
  50. package/dist/components/search-input/SearchInput.svelte +51 -104
  51. package/dist/components/search-input/SearchInput.svelte.d.ts +9 -27
  52. package/dist/components/shad-editor/editor.css +1 -1
  53. package/dist/components/shad-editor/i18n/messages.d.ts +1 -1
  54. package/dist/components/shad-editor/i18n/messages.js +1 -1
  55. package/dist/components/shell/AppShell.svelte +52 -0
  56. package/dist/components/shell/AppShell.svelte.d.ts +13 -0
  57. package/dist/components/shell/Banner.svelte +90 -0
  58. package/dist/components/shell/Banner.svelte.d.ts +61 -0
  59. package/dist/components/shell/ErrorState.svelte +60 -0
  60. package/dist/components/shell/ErrorState.svelte.d.ts +13 -0
  61. package/dist/components/shell/Link.svelte +63 -0
  62. package/dist/components/shell/Link.svelte.d.ts +53 -0
  63. package/dist/components/shell/NavDrawer.svelte +117 -0
  64. package/dist/components/shell/NavDrawer.svelte.d.ts +10 -0
  65. package/dist/components/shell/NavRow.svelte +128 -0
  66. package/dist/components/shell/NavRow.svelte.d.ts +65 -0
  67. package/dist/components/shell/NavSectionLabel.svelte +27 -0
  68. package/dist/components/shell/NavSectionLabel.svelte.d.ts +9 -0
  69. package/dist/components/shell/NotificationRow.svelte +76 -0
  70. package/dist/components/shell/NotificationRow.svelte.d.ts +16 -0
  71. package/dist/components/shell/PageHeader.svelte +42 -0
  72. package/dist/components/shell/PageHeader.svelte.d.ts +12 -0
  73. package/dist/components/shell/ProfileRow.svelte +95 -0
  74. package/dist/components/shell/ProfileRow.svelte.d.ts +54 -0
  75. package/dist/components/shell/SettingsDialog.svelte +118 -0
  76. package/dist/components/shell/SettingsDialog.svelte.d.ts +19 -0
  77. package/dist/components/shell/SettingsNav.svelte +46 -0
  78. package/dist/components/shell/SettingsNav.svelte.d.ts +11 -0
  79. package/dist/components/shell/Sidebar.svelte +82 -0
  80. package/dist/components/shell/Sidebar.svelte.d.ts +25 -0
  81. package/dist/components/shell/Stat.svelte +63 -0
  82. package/dist/components/shell/Stat.svelte.d.ts +58 -0
  83. package/dist/components/shell/TopBar.svelte +37 -0
  84. package/dist/components/shell/TopBar.svelte.d.ts +11 -0
  85. package/dist/components/shell/WidgetRow.svelte +126 -0
  86. package/dist/components/shell/WidgetRow.svelte.d.ts +78 -0
  87. package/dist/components/shell/error-state-messages.d.ts +7 -0
  88. package/dist/components/shell/error-state-messages.js +9 -0
  89. package/dist/components/shell/index.d.ts +22 -0
  90. package/dist/components/shell/index.js +25 -0
  91. package/dist/components/shell/link-external.d.ts +2 -0
  92. package/dist/components/shell/link-external.js +7 -0
  93. package/dist/components/shell/messages.d.ts +7 -0
  94. package/dist/components/shell/messages.js +5 -0
  95. package/dist/components/shell/settings-nav-types.d.ts +12 -0
  96. package/dist/components/shell/settings-nav-types.js +3 -0
  97. package/dist/components/shell/shell-utils.d.ts +7 -0
  98. package/dist/components/shell/shell-utils.js +27 -0
  99. package/dist/components/shell/stat-tone.d.ts +3 -0
  100. package/dist/components/shell/stat-tone.js +11 -0
  101. package/dist/components/toast/ToasterModal.svelte +102 -168
  102. package/dist/components/toast/ToasterModal.svelte.d.ts +2 -12
  103. package/dist/components/ui/accordion/accordion-content.svelte +3 -2
  104. package/dist/components/ui/accordion/accordion-item.svelte +10 -1
  105. package/dist/components/ui/accordion/accordion-trigger.svelte +4 -3
  106. package/dist/components/ui/alert/alert-description.svelte +5 -1
  107. package/dist/components/ui/alert/alert-title.svelte +2 -1
  108. package/dist/components/ui/alert/index.d.ts +13 -11
  109. package/dist/components/ui/alert/index.js +4 -4
  110. package/dist/components/ui/avatar/avatar-utils.d.ts +2 -0
  111. package/dist/components/ui/avatar/avatar-utils.js +9 -0
  112. package/dist/components/ui/avatar/avatar.svelte +63 -0
  113. package/dist/components/ui/avatar/avatar.svelte.d.ts +80 -0
  114. package/dist/components/ui/avatar/index.d.ts +4 -0
  115. package/dist/components/ui/avatar/index.js +4 -0
  116. package/dist/components/ui/badge/badge.svelte +22 -10
  117. package/dist/components/ui/badge/badge.svelte.d.ts +14 -15
  118. package/dist/components/ui/breadcrumb/breadcrumb-ellipsis.svelte +2 -2
  119. package/dist/components/ui/breadcrumb/breadcrumb-link.svelte +1 -1
  120. package/dist/components/ui/breadcrumb/breadcrumb-page.svelte +1 -1
  121. package/dist/components/ui/breadcrumb/breadcrumb-separator.svelte +2 -2
  122. package/dist/components/ui/button/button-padding.d.ts +9 -0
  123. package/dist/components/ui/button/button-padding.js +15 -0
  124. package/dist/components/ui/button/button.svelte +81 -31
  125. package/dist/components/ui/button/button.svelte.d.ts +48 -29
  126. package/dist/components/ui/calendar/calendar-cell.svelte +1 -1
  127. package/dist/components/ui/calendar/calendar-head-cell.svelte +1 -1
  128. package/dist/components/ui/calendar/calendar-next-button.svelte +2 -2
  129. package/dist/components/ui/calendar/calendar-prev-button.svelte +2 -2
  130. package/dist/components/ui/card/card-description.svelte +1 -1
  131. package/dist/components/ui/card/card-title.svelte +1 -1
  132. package/dist/components/ui/card/card.svelte +1 -1
  133. package/dist/components/ui/checkbox/checkbox.svelte +9 -5
  134. package/dist/components/ui/chip/chip.svelte +48 -0
  135. package/dist/components/ui/chip/chip.svelte.d.ts +13 -0
  136. package/dist/components/ui/chip/index.d.ts +2 -0
  137. package/dist/components/ui/chip/index.js +2 -0
  138. package/dist/components/ui/command/command-dialog.svelte +1 -1
  139. package/dist/components/ui/command/command-input.svelte +4 -4
  140. package/dist/components/ui/command/command-item.svelte +1 -1
  141. package/dist/components/ui/command/command.svelte +1 -1
  142. package/dist/components/ui/dialog/dialog-content.svelte +4 -4
  143. package/dist/components/ui/dialog/dialog-description.svelte +1 -1
  144. package/dist/components/ui/dialog/dialog-overlay.svelte +1 -1
  145. package/dist/components/ui/dialog/dialog-title.svelte +1 -1
  146. package/dist/components/ui/drawer/drawer-content.svelte +1 -1
  147. package/dist/components/ui/drawer/drawer-overlay.svelte +1 -1
  148. package/dist/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte +5 -5
  149. package/dist/components/ui/dropdown-menu/dropdown-menu-content.svelte +1 -1
  150. package/dist/components/ui/dropdown-menu/dropdown-menu-group-heading.svelte +1 -1
  151. package/dist/components/ui/dropdown-menu/dropdown-menu-item.svelte +20 -2
  152. package/dist/components/ui/dropdown-menu/dropdown-menu-item.svelte.d.ts +4 -0
  153. package/dist/components/ui/dropdown-menu/dropdown-menu-label.svelte +5 -1
  154. package/dist/components/ui/dropdown-menu/dropdown-menu-radio-item.svelte +3 -3
  155. package/dist/components/ui/dropdown-menu/dropdown-menu-separator.svelte +2 -1
  156. package/dist/components/ui/dropdown-menu/dropdown-menu-sub-content.svelte +1 -1
  157. package/dist/components/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte +3 -3
  158. package/dist/components/ui/field/field-ids.d.ts +7 -0
  159. package/dist/components/ui/field/field-ids.js +15 -0
  160. package/dist/components/ui/field/field.svelte +62 -0
  161. package/dist/components/ui/field/field.svelte.d.ts +21 -0
  162. package/dist/components/ui/field/index.d.ts +3 -0
  163. package/dist/components/ui/field/index.js +3 -0
  164. package/dist/components/ui/hover-card/hover-card-content.svelte +1 -1
  165. package/dist/components/ui/icon-button/icon-button.svelte +72 -0
  166. package/dist/components/ui/icon-button/icon-button.svelte.d.ts +90 -0
  167. package/dist/components/ui/icon-button/index.d.ts +2 -0
  168. package/dist/components/ui/icon-button/index.js +4 -0
  169. package/dist/components/ui/input/index.d.ts +1 -0
  170. package/dist/components/ui/input/input.svelte +11 -4
  171. package/dist/components/ui/input/input.svelte.d.ts +4 -1
  172. package/dist/components/ui/input-otp/input-otp-separator.svelte +2 -2
  173. package/dist/components/ui/input-otp/input-otp-slot.svelte +5 -4
  174. package/dist/components/ui/input-otp/input-otp-slot.svelte.d.ts +1 -1
  175. package/dist/components/ui/input-otp/input-otp.svelte +1 -1
  176. package/dist/components/ui/label/label.svelte +3 -2
  177. package/dist/components/ui/popover/popover-content.svelte +1 -1
  178. package/dist/components/ui/progress/progress.svelte +19 -5
  179. package/dist/components/ui/progress/progress.svelte.d.ts +4 -2
  180. package/dist/components/ui/radio-group/radio-group-item.svelte +4 -4
  181. package/dist/components/ui/range-calendar/range-calendar-head-cell.svelte +1 -1
  182. package/dist/components/ui/range-calendar/range-calendar-next-button.svelte +2 -2
  183. package/dist/components/ui/range-calendar/range-calendar-prev-button.svelte +2 -2
  184. package/dist/components/ui/scroll-area/scroll-area-scrollbar.svelte +4 -1
  185. package/dist/components/ui/scroll-area/scroll-area.svelte +1 -1
  186. package/dist/components/ui/select/select-content.svelte +1 -3
  187. package/dist/components/ui/select/select-item.svelte +5 -4
  188. package/dist/components/ui/select/select-scroll-down-button.svelte +2 -2
  189. package/dist/components/ui/select/select-scroll-up-button.svelte +2 -2
  190. package/dist/components/ui/select/select-trigger.svelte +4 -3
  191. package/dist/components/ui/skeleton/index.d.ts +2 -0
  192. package/dist/components/ui/skeleton/index.js +2 -0
  193. package/dist/components/ui/skeleton/skeleton.svelte +24 -0
  194. package/dist/components/ui/skeleton/skeleton.svelte.d.ts +8 -0
  195. package/dist/components/ui/slider/slider.svelte +5 -10
  196. package/dist/components/ui/sonner/sonner.svelte +19 -13
  197. package/dist/components/ui/stepper-button/index.d.ts +3 -0
  198. package/dist/components/ui/stepper-button/index.js +2 -0
  199. package/dist/components/ui/stepper-button/stepper-button.svelte +37 -0
  200. package/dist/components/ui/stepper-button/stepper-button.svelte.d.ts +9 -0
  201. package/dist/components/ui/switch/switch.svelte +8 -3
  202. package/dist/components/ui/table/table-cell.svelte +1 -1
  203. package/dist/components/ui/table/table-head.svelte +1 -1
  204. package/dist/components/ui/table/table-row.svelte +1 -1
  205. package/dist/components/ui/tabs/tabs-list.svelte +1 -1
  206. package/dist/components/ui/tabs/tabs-trigger.svelte +1 -1
  207. package/dist/components/ui/tag/index.d.ts +2 -0
  208. package/dist/components/ui/tag/index.js +2 -0
  209. package/dist/components/ui/tag/tag.svelte +42 -0
  210. package/dist/components/ui/tag/tag.svelte.d.ts +11 -0
  211. package/dist/components/ui/textarea/textarea.svelte +4 -3
  212. package/dist/components/ui/textarea/textarea.svelte.d.ts +2 -2
  213. package/dist/components/ui/toggle/toggle.svelte +9 -9
  214. package/dist/components/ui/toggle/toggle.svelte.d.ts +14 -21
  215. package/dist/components/ui/tooltip/tooltip-content.svelte +1 -1
  216. package/dist/fonts/Inter/Inter-Black.woff2 +0 -0
  217. package/dist/fonts/Inter/Inter-BlackItalic.woff2 +0 -0
  218. package/dist/fonts/Inter/Inter-Bold.woff2 +0 -0
  219. package/dist/fonts/Inter/Inter-BoldItalic.woff2 +0 -0
  220. package/dist/fonts/Inter/Inter-ExtraBold.woff2 +0 -0
  221. package/dist/fonts/Inter/Inter-ExtraBoldItalic.woff2 +0 -0
  222. package/dist/fonts/Inter/Inter-ExtraLight-BETA.woff2 +0 -0
  223. package/dist/fonts/Inter/Inter-ExtraLightItalic-BETA.woff2 +0 -0
  224. package/dist/fonts/Inter/Inter-Italic.woff2 +0 -0
  225. package/dist/fonts/Inter/Inter-Light-BETA.woff2 +0 -0
  226. package/dist/fonts/Inter/Inter-LightItalic-BETA.woff2 +0 -0
  227. package/dist/fonts/Inter/Inter-Medium.woff2 +0 -0
  228. package/dist/fonts/Inter/Inter-MediumItalic.woff2 +0 -0
  229. package/dist/fonts/Inter/Inter-Regular.woff2 +0 -0
  230. package/dist/fonts/Inter/Inter-SemiBold.woff2 +0 -0
  231. package/dist/fonts/Inter/Inter-SemiBoldItalic.woff2 +0 -0
  232. package/dist/fonts/Inter/Inter-Thin-BETA.woff2 +0 -0
  233. package/dist/fonts/Inter/Inter-ThinItalic-BETA.woff2 +0 -0
  234. package/dist/fonts/Inter/Inter-italic.var.woff2 +0 -0
  235. package/dist/fonts/Inter/Inter-upright.var.woff2 +0 -0
  236. package/dist/fonts/Inter/Inter.var.woff2 +0 -0
  237. package/dist/fonts/JetBrainsMono/JetBrainsMono-Regular.woff2 +0 -0
  238. package/dist/i18n/audit/designSystemWords.d.ts +1 -1
  239. package/dist/i18n/audit/designSystemWords.js +1 -1
  240. package/dist/styles/fonts.css +18 -14
  241. package/dist/styles/global.css +7 -19
  242. package/dist/styles/tokens.css +332 -0
  243. package/dist/utils.d.ts +27 -0
  244. package/dist/utils.js +33 -2
  245. package/package.json +2 -1
  246. package/tailwind.config.ts +7 -47
@@ -0,0 +1,126 @@
1
+ <!-- Figma: Widget Row (component set 54:5, node 54:5). -->
2
+ <script lang="ts" module>
3
+ import type { VariantProps } from 'tailwind-variants';
4
+
5
+ export const widgetRowVariants = tv({
6
+ base: 'group/widget-row flex min-h-16 w-full max-w-content items-center gap-4 rounded-xl py-3 ps-4 pe-4 transition-colors duration-fast focus-within:outline-hidden',
7
+ variants: {
8
+ selected: {
9
+ true: 'bg-brand-subtle ring-2 ring-brand',
10
+ false:
11
+ 'hover:bg-accent focus-within:ring-2 focus-within:ring-ring focus-within:ring-offset-2 focus-within:ring-offset-background'
12
+ },
13
+ loading: {
14
+ true: 'pointer-events-none',
15
+ false: ''
16
+ }
17
+ },
18
+ defaultVariants: {
19
+ selected: false,
20
+ loading: false
21
+ }
22
+ });
23
+
24
+ export type WidgetRowVisualState = 'default' | 'hover' | 'focus' | 'selected' | 'loading';
25
+ </script>
26
+
27
+ <script lang="ts">
28
+ import type { HTMLAttributes } from 'svelte/elements';
29
+ import type { Snippet } from 'svelte';
30
+ import { cn, tv } from '../../utils.js';
31
+ import { Badge } from '../ui/badge/index.js';
32
+ import { Skeleton } from '../ui/skeleton/index.js';
33
+
34
+ let {
35
+ class: className,
36
+ title,
37
+ meta = '',
38
+ showBadge = true,
39
+ badgeLabel = 'Published',
40
+ selected = false,
41
+ loading = false,
42
+ visualState = undefined,
43
+ actionsAlwaysVisible = false,
44
+ thumbnail,
45
+ actions,
46
+ ...restProps
47
+ }: HTMLAttributes<HTMLDivElement> & {
48
+ title: string;
49
+ meta?: string;
50
+ showBadge?: boolean;
51
+ badgeLabel?: string;
52
+ selected?: boolean;
53
+ loading?: boolean;
54
+ visualState?: WidgetRowVisualState;
55
+ /** Touch / mobile: keep row actions visible without hover. */
56
+ actionsAlwaysVisible?: boolean;
57
+ thumbnail?: Snippet;
58
+ actions?: Snippet;
59
+ } = $props();
60
+
61
+ const isLoading = $derived(loading || visualState === 'loading');
62
+ const isSelected = $derived(selected || visualState === 'selected');
63
+ const forceHover = $derived(visualState === 'hover');
64
+ const forceFocus = $derived(visualState === 'focus');
65
+ </script>
66
+
67
+ {#if isLoading}
68
+ <div
69
+ class={cn(
70
+ 'max-w-content flex min-h-16 w-full items-center gap-4 rounded-xl py-3 ps-4 pe-4',
71
+ className
72
+ )}
73
+ role="status"
74
+ aria-busy="true"
75
+ >
76
+ <Skeleton class="size-10 shrink-0 rounded-lg" />
77
+ <div class="flex min-w-0 flex-1 flex-col gap-2">
78
+ <Skeleton class="h-5 w-3/5 max-w-xs" />
79
+ <Skeleton class="h-4 w-2/5 max-w-[12rem]" />
80
+ </div>
81
+ <Skeleton class="h-5 w-20 rounded-full" />
82
+ </div>
83
+ {:else}
84
+ <div
85
+ class={cn(
86
+ widgetRowVariants({ selected: isSelected }),
87
+ forceHover && !isSelected && 'bg-accent',
88
+ forceFocus && !isSelected && 'ring-ring ring-offset-background ring-2 ring-offset-2',
89
+ className
90
+ )}
91
+ {...restProps}
92
+ >
93
+ <div
94
+ class={cn(
95
+ 'bg-muted duration-fast group-hover/widget-row:bg-background flex size-10 shrink-0 items-center justify-center overflow-hidden rounded-lg transition-colors',
96
+ forceHover && 'bg-background'
97
+ )}
98
+ >
99
+ {#if thumbnail}
100
+ {@render thumbnail()}
101
+ {/if}
102
+ </div>
103
+
104
+ <div class="min-w-0 flex-1 flex-col gap-0 overflow-hidden">
105
+ <span class="text-body-medium text-foreground block truncate">{title}</span>
106
+ {#if meta}
107
+ <span class="text-caption text-muted-foreground block truncate">{meta}</span>
108
+ {/if}
109
+ </div>
110
+
111
+ {#if showBadge}
112
+ <Badge variant="secondary" showDot class="shrink-0 max-sm:hidden">{badgeLabel}</Badge>
113
+ {/if}
114
+
115
+ {#if actions}
116
+ <div
117
+ class={cn(
118
+ 'duration-fast shrink-0 opacity-0 transition-opacity group-focus-within/widget-row:opacity-100 group-hover/widget-row:opacity-100',
119
+ (actionsAlwaysVisible || forceHover || forceFocus) && 'opacity-100'
120
+ )}
121
+ >
122
+ {@render actions()}
123
+ </div>
124
+ {/if}
125
+ </div>
126
+ {/if}
@@ -0,0 +1,78 @@
1
+ export declare const widgetRowVariants: import("tailwind-variants").TVReturnType<{
2
+ selected: {
3
+ true: string;
4
+ false: string;
5
+ };
6
+ loading: {
7
+ true: string;
8
+ false: string;
9
+ };
10
+ }, undefined, "group/widget-row flex min-h-16 w-full max-w-content items-center gap-4 rounded-xl py-3 ps-4 pe-4 transition-colors duration-fast focus-within:outline-hidden", {
11
+ responsiveVariants?: boolean | (string | number | symbol)[] | {
12
+ selected?: boolean | (string | number | symbol)[] | undefined;
13
+ loading?: boolean | (string | number | symbol)[] | undefined;
14
+ } | undefined;
15
+ } & import("tailwind-variants/dist/config.js").TWMConfig & {
16
+ twMergeConfig: {
17
+ classGroups: {
18
+ "font-size": {
19
+ text: ("display-hero" | "heading-page" | "heading-section" | "body" | "body-medium" | "body-large" | "caption" | "caption-medium" | "label" | "label-small" | "code")[];
20
+ }[];
21
+ };
22
+ };
23
+ }, {
24
+ selected: {
25
+ true: string;
26
+ false: string;
27
+ };
28
+ loading: {
29
+ true: string;
30
+ false: string;
31
+ };
32
+ }, undefined, import("tailwind-variants").TVReturnType<{
33
+ selected: {
34
+ true: string;
35
+ false: string;
36
+ };
37
+ loading: {
38
+ true: string;
39
+ false: string;
40
+ };
41
+ }, undefined, "group/widget-row flex min-h-16 w-full max-w-content items-center gap-4 rounded-xl py-3 ps-4 pe-4 transition-colors duration-fast focus-within:outline-hidden", import("tailwind-variants/dist/config.js").TVConfig<{
42
+ selected: {
43
+ true: string;
44
+ false: string;
45
+ };
46
+ loading: {
47
+ true: string;
48
+ false: string;
49
+ };
50
+ }, {
51
+ selected: {
52
+ true: string;
53
+ false: string;
54
+ };
55
+ loading: {
56
+ true: string;
57
+ false: string;
58
+ };
59
+ }>, unknown, unknown, undefined>>;
60
+ export type WidgetRowVisualState = 'default' | 'hover' | 'focus' | 'selected' | 'loading';
61
+ import type { HTMLAttributes } from 'svelte/elements';
62
+ import type { Snippet } from 'svelte';
63
+ type $$ComponentProps = HTMLAttributes<HTMLDivElement> & {
64
+ title: string;
65
+ meta?: string;
66
+ showBadge?: boolean;
67
+ badgeLabel?: string;
68
+ selected?: boolean;
69
+ loading?: boolean;
70
+ visualState?: WidgetRowVisualState;
71
+ /** Touch / mobile: keep row actions visible without hover. */
72
+ actionsAlwaysVisible?: boolean;
73
+ thumbnail?: Snippet;
74
+ actions?: Snippet;
75
+ };
76
+ declare const WidgetRow: import("svelte").Component<$$ComponentProps, {}, "">;
77
+ type WidgetRow = ReturnType<typeof WidgetRow>;
78
+ export default WidgetRow;
@@ -0,0 +1,7 @@
1
+ export interface ErrorStateMessages {
2
+ title: string;
3
+ description: string;
4
+ retryLabel: string;
5
+ supportLabel: string;
6
+ }
7
+ export declare const defaultErrorStateMessages: ErrorStateMessages;
@@ -0,0 +1,9 @@
1
+ // The words of the Figma Error State: the title says what failed in a few words, the description gives the likely cause
2
+ // and what to try. "Something went wrong" stays only for a failure whose cause is not known, and a page gives that as
3
+ // its own `messages`.
4
+ export const defaultErrorStateMessages = {
5
+ title: 'We could not load your widgets',
6
+ description: 'Check your connection and try again.',
7
+ retryLabel: 'Try again',
8
+ supportLabel: 'Contact support'
9
+ };
@@ -0,0 +1,22 @@
1
+ export { default as NavRow, navRowVariants } from './NavRow.svelte';
2
+ export { default as NavSectionLabel } from './NavSectionLabel.svelte';
3
+ export { default as ProfileRow, profileRowVariants } from './ProfileRow.svelte';
4
+ export { default as Sidebar } from './Sidebar.svelte';
5
+ export type { SidebarNavItem } from './Sidebar.svelte';
6
+ export { default as WidgetRow, widgetRowVariants } from './WidgetRow.svelte';
7
+ export { default as PageHeader } from './PageHeader.svelte';
8
+ export { default as TopBar } from './TopBar.svelte';
9
+ export { default as NavDrawer } from './NavDrawer.svelte';
10
+ export { default as AppShell } from './AppShell.svelte';
11
+ export { default as ErrorState } from './ErrorState.svelte';
12
+ export { defaultErrorStateMessages, type ErrorStateMessages } from './error-state-messages.js';
13
+ export { default as NotificationRow, type NotificationRowProps } from './NotificationRow.svelte';
14
+ export { default as SettingsNav, type SettingsNavProps } from './SettingsNav.svelte';
15
+ export { default as SettingsDialog, type SettingsDialogProps } from './SettingsDialog.svelte';
16
+ export { default as Stat, type StatProps, statVariants } from './Stat.svelte';
17
+ export { default as Banner, type BannerProps, type BannerTone, bannerVariants } from './Banner.svelte';
18
+ export { default as Link, type LinkProps, type LinkSize, linkVariants } from './Link.svelte';
19
+ export { type SettingsNavGroup, type SettingsNavItem, settingsNavItemIsActive } from './settings-nav-types.js';
20
+ export { externalLinkAttributes } from './link-external.js';
21
+ export { statHintClass, type StatTone } from './stat-tone.js';
22
+ export { type SettingsDialogMessages, defaultSettingsDialogMessages } from './messages.js';
@@ -0,0 +1,25 @@
1
+ // Shell components (app shell, navigation, status, settings) built from the Figma design system.
2
+ // Each component is exported here by the agent that owns src/lib/components/shell.
3
+ // [S1 exports]
4
+ export { default as NavRow, navRowVariants } from './NavRow.svelte';
5
+ export { default as NavSectionLabel } from './NavSectionLabel.svelte';
6
+ export { default as ProfileRow, profileRowVariants } from './ProfileRow.svelte';
7
+ export { default as Sidebar } from './Sidebar.svelte';
8
+ export { default as WidgetRow, widgetRowVariants } from './WidgetRow.svelte';
9
+ export { default as PageHeader } from './PageHeader.svelte';
10
+ export { default as TopBar } from './TopBar.svelte';
11
+ export { default as NavDrawer } from './NavDrawer.svelte';
12
+ export { default as AppShell } from './AppShell.svelte';
13
+ export { default as ErrorState } from './ErrorState.svelte';
14
+ export { defaultErrorStateMessages } from './error-state-messages.js';
15
+ // [S2 exports]
16
+ export { default as NotificationRow } from './NotificationRow.svelte';
17
+ export { default as SettingsNav } from './SettingsNav.svelte';
18
+ export { default as SettingsDialog } from './SettingsDialog.svelte';
19
+ export { default as Stat, statVariants } from './Stat.svelte';
20
+ export { default as Banner, bannerVariants } from './Banner.svelte';
21
+ export { default as Link, linkVariants } from './Link.svelte';
22
+ export { settingsNavItemIsActive } from './settings-nav-types.js';
23
+ export { externalLinkAttributes } from './link-external.js';
24
+ export { statHintClass } from './stat-tone.js';
25
+ export { defaultSettingsDialogMessages } from './messages.js';
@@ -0,0 +1,2 @@
1
+ /** rel/target for links that open in a new tab. */
2
+ export declare function externalLinkAttributes(): Pick<HTMLAnchorElement, 'rel' | 'target'>;
@@ -0,0 +1,7 @@
1
+ /** rel/target for links that open in a new tab. */
2
+ export function externalLinkAttributes() {
3
+ return {
4
+ rel: 'noopener noreferrer',
5
+ target: '_blank'
6
+ };
7
+ }
@@ -0,0 +1,7 @@
1
+ /** Footer links in SettingsDialog (Figma Settings Dialog 107:618). */
2
+ export interface SettingsDialogMessages {
3
+ privacyPolicy: string;
4
+ termsOfService: string;
5
+ cookieSettings: string;
6
+ }
7
+ export declare const defaultSettingsDialogMessages: SettingsDialogMessages;
@@ -0,0 +1,5 @@
1
+ export const defaultSettingsDialogMessages = {
2
+ privacyPolicy: 'Privacy policy',
3
+ termsOfService: 'Terms of service',
4
+ cookieSettings: 'Cookie settings'
5
+ };
@@ -0,0 +1,12 @@
1
+ import type { Snippet } from 'svelte';
2
+ export type SettingsNavItem = {
3
+ id: string;
4
+ label: string;
5
+ icon?: Snippet;
6
+ };
7
+ export type SettingsNavGroup = {
8
+ id: string;
9
+ label: string;
10
+ items: SettingsNavItem[];
11
+ };
12
+ export declare function settingsNavItemIsActive(activeId: string, itemId: string): boolean;
@@ -0,0 +1,3 @@
1
+ export function settingsNavItemIsActive(activeId, itemId) {
2
+ return activeId === itemId;
3
+ }
@@ -0,0 +1,7 @@
1
+ /** Drawer motion from Figma Responsive / appShell ledger (ms). */
2
+ export declare function navDrawerTransitionMs(open: boolean): number;
3
+ export declare function navDrawerTransitionEasing(open: boolean): 'var(--ease-drawer)' | 'var(--ease-out)';
4
+ export declare function navDrawerEffectiveTransitionMs(open: boolean, reducedMotion: boolean): number;
5
+ export declare function getFocusableElements(root: HTMLElement): HTMLElement[];
6
+ /** Returns the next element to focus when Tab / Shift+Tab is pressed inside `root`. */
7
+ export declare function navDrawerTabTarget(root: HTMLElement, active: HTMLElement, shiftKey: boolean): HTMLElement | null;
@@ -0,0 +1,27 @@
1
+ /** Drawer motion from Figma Responsive / appShell ledger (ms). */
2
+ export function navDrawerTransitionMs(open) {
3
+ return open ? 320 : 220;
4
+ }
5
+ export function navDrawerTransitionEasing(open) {
6
+ return open ? 'var(--ease-drawer)' : 'var(--ease-out)';
7
+ }
8
+ export function navDrawerEffectiveTransitionMs(open, reducedMotion) {
9
+ return reducedMotion ? 0 : navDrawerTransitionMs(open);
10
+ }
11
+ const FOCUSABLE = 'a[href],button:not([disabled]),input:not([disabled]),select:not([disabled]),textarea:not([disabled]),[tabindex]:not([tabindex="-1"])';
12
+ export function getFocusableElements(root) {
13
+ return [...root.querySelectorAll(FOCUSABLE)].filter((el) => !el.hasAttribute('disabled') && el.getAttribute('aria-hidden') !== 'true');
14
+ }
15
+ /** Returns the next element to focus when Tab / Shift+Tab is pressed inside `root`. */
16
+ export function navDrawerTabTarget(root, active, shiftKey) {
17
+ const focusables = getFocusableElements(root);
18
+ if (focusables.length === 0)
19
+ return null;
20
+ const index = focusables.indexOf(active);
21
+ if (index === -1)
22
+ return focusables[0] ?? null;
23
+ if (shiftKey) {
24
+ return index === 0 ? focusables[focusables.length - 1] : focusables[index - 1];
25
+ }
26
+ return index === focusables.length - 1 ? focusables[0] : focusables[index + 1];
27
+ }
@@ -0,0 +1,3 @@
1
+ export type StatTone = 'default' | 'positive' | 'negative';
2
+ /** Hint line colour for Stat tones (Figma Stat 327:243). */
3
+ export declare function statHintClass(tone: StatTone): string;
@@ -0,0 +1,11 @@
1
+ /** Hint line colour for Stat tones (Figma Stat 327:243). */
2
+ export function statHintClass(tone) {
3
+ switch (tone) {
4
+ case 'positive':
5
+ return 'text-brand-foreground';
6
+ case 'negative':
7
+ return 'text-destructive';
8
+ default:
9
+ return 'text-muted-foreground';
10
+ }
11
+ }