@widgetic/design-system 0.5.22 → 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 +402 -399
  41. package/dist/components/modals/BaseModal.svelte.d.ts +1 -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 +1 -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
@@ -12,21 +12,21 @@ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> =
12
12
  z_$$bindings?: Bindings;
13
13
  }
14
14
  declare const CopyableHeader: $$__sveltets_2_IsomorphicComponent<{
15
- /**
16
- * COMPONENT PROPS
17
- */ class?: string;
15
+ class?: string;
18
16
  style?: string;
19
17
  headerText?: string;
20
18
  content?: string;
21
19
  helpText?: string;
22
20
  helpUrl?: string;
21
+ helpPrompt?: string;
22
+ helpLinkAria?: string;
23
23
  showHelp?: boolean;
24
24
  monospaceContent?: boolean;
25
25
  showStandaloneCopyButton?: boolean;
26
26
  standaloneCopyButtonText?: string;
27
- /** The pop-up after a copy that worked: its title and the line under it. */ copiedTitle?: string;
27
+ copiedTitle?: string;
28
28
  copiedDescription?: string;
29
- /** The pop-up after a copy that failed: its title and the line under it. */ copyFailedTitle?: string;
29
+ copyFailedTitle?: string;
30
30
  copyFailedDescription?: string;
31
31
  showButtonText?: boolean;
32
32
  buttonClass?: string;
@@ -34,6 +34,9 @@ declare const CopyableHeader: $$__sveltets_2_IsomorphicComponent<{
34
34
  headerTextClass?: string;
35
35
  headerBackgroundColor?: string;
36
36
  contentBorderColor?: string;
37
+ loading?: boolean;
38
+ errorTitle?: string;
39
+ errorDetail?: string;
37
40
  }, {
38
41
  copy: CustomEvent<any>;
39
42
  copyError: CustomEvent<any>;
@@ -1,141 +1,113 @@
1
1
  <!--
2
- * EmptyState Component
3
- * A reusable component for displaying empty state messages
4
- *
5
- * Features:
6
- * - Centered message with icon
7
- * - Customizable message text
8
- * - Customizable icon
9
- * - Adjustable height
10
- * - Optional action button
11
- * - Responsive: hides icon when space is limited
2
+ * EmptyState — Figma: Empty State (component set 54:71, node 54:71).
3
+ * Centered empty view with icon tile, title, optional description, and actions.
12
4
  -->
13
5
  <script lang="ts">
14
- import { onMount } from 'svelte';
6
+ import { onMount } from 'svelte';
7
+ import type { Icon } from '@tabler/icons-svelte';
8
+ import IconCubePlus from '@tabler/icons-svelte/icons/cube-plus';
9
+ import { cn } from '../utils.js';
15
10
 
16
- import { IconExclamationCircle } from '@tabler/icons-svelte';
17
-
18
- /**
19
- * Component Props
20
- * @prop {string} message - The message to display in the empty state
21
- * @prop {string} height - The height of the empty state container (default: '50vh')
22
- * @prop {boolean} showIcon - Whether to show the icon (default: true)
23
- * @prop {string} iconColor - The color of the icon (default: 'hsl(var(--grey3))')
24
- * @prop {string} textColor - The color of the text (default: 'hsl(var(--grey3))')
25
- */
26
- let className = '';
27
- export { className as class };
28
- export let style: string = '';
29
- //
30
- export let message: string = "No items found";
31
- export let height: string = "150px";
32
- export let showIcon: boolean = true;
33
- export let iconColor: string = "hsl(var(--grey3))";
34
- export let textColor: string = "hsl(var(--grey3))";
35
-
36
- // Allow passing a custom icon component
37
- let iconComponent = IconExclamationCircle;
38
- export { iconComponent as icon };
11
+ let {
12
+ class: className = '',
13
+ style = '',
14
+ message = 'No items found',
15
+ description = undefined,
16
+ height = '150px',
17
+ showIcon = true,
18
+ iconColor = '',
19
+ textColor = '',
20
+ icon: IconComponent = IconCubePlus,
21
+ showActions = true
22
+ }: {
23
+ class?: string;
24
+ style?: string;
25
+ message?: string;
26
+ description?: string;
27
+ height?: string;
28
+ showIcon?: boolean;
29
+ iconColor?: string;
30
+ textColor?: string;
31
+ icon?: Icon;
32
+ /** When false, hides the action row (Figma Show actions). */
33
+ showActions?: boolean;
34
+ } = $props();
39
35
 
40
- // References to DOM elements
41
- let contentContainer: HTMLDivElement;
42
- let shouldShowIcon = showIcon;
36
+ let contentContainer = $state<HTMLDivElement | null>(null);
37
+ let shouldShowIcon = $state(true);
43
38
 
44
- // Function to check if there's enough space for the icon
45
- function checkSpaceForIcon() {
46
- if (!contentContainer || !showIcon) return;
47
-
48
- const containerWidth = contentContainer.clientWidth;
49
- // If container is too narrow (less than 150px), hide the icon
50
- shouldShowIcon = containerWidth > 150;
51
- }
39
+ function checkSpaceForIcon() {
40
+ if (!contentContainer || !showIcon) {
41
+ shouldShowIcon = false;
42
+ return;
43
+ }
44
+ shouldShowIcon = contentContainer.clientWidth > 150;
45
+ }
52
46
 
53
- onMount(() => {
54
- // Initial check
55
- checkSpaceForIcon();
56
-
57
- // Set up resize observer to check space when container size changes
58
- if (typeof ResizeObserver !== 'undefined') {
59
- const resizeObserver = new ResizeObserver(() => {
60
- checkSpaceForIcon();
61
- });
62
-
63
- if (contentContainer) {
64
- resizeObserver.observe(contentContainer);
65
- }
66
-
67
- return () => {
68
- if (contentContainer) {
69
- resizeObserver.unobserve(contentContainer);
70
- }
71
- };
72
- }
73
- });
47
+ $effect(() => {
48
+ showIcon;
49
+ checkSpaceForIcon();
50
+ });
51
+
52
+ onMount(() => {
53
+ checkSpaceForIcon();
54
+ if (typeof ResizeObserver !== 'undefined') {
55
+ const resizeObserver = new ResizeObserver(() => checkSpaceForIcon());
56
+ if (contentContainer) resizeObserver.observe(contentContainer);
57
+ return () => {
58
+ if (contentContainer) resizeObserver.unobserve(contentContainer);
59
+ };
60
+ }
61
+ });
62
+
63
+ const titleStyle = $derived(textColor ? `color: ${textColor}` : undefined);
64
+ const iconStyle = $derived(iconColor ? `color: ${iconColor}` : undefined);
74
65
  </script>
75
66
 
76
- <div class="empty-state-container {className ? className + ' ' : ''}w-full" style="height: {height}; {style}">
77
- <div class="empty-state-content" bind:this={contentContainer}>
78
- {#if shouldShowIcon}
79
- <div class="icon-container">
80
- <svelte:component this={iconComponent} class="icon" style="color: {iconColor}" />
81
- </div>
82
- {/if}
83
- <p class="subtext" style="color: {textColor}">{message}</p>
84
-
85
- {#if $$slots.action}
86
- <div class="ms-2">
87
- <slot name="action" />
88
- </div>
89
- {/if}
90
- </div>
91
- </div>
67
+ <div
68
+ class={cn(
69
+ 'empty-state-container flex w-full items-center justify-center overflow-hidden',
70
+ className
71
+ )}
72
+ style="height: {height}; {style}"
73
+ >
74
+ <div
75
+ class="empty-state-content pointer-events-auto flex w-full max-w-[30rem] flex-col items-center gap-3 px-12 py-12 text-center"
76
+ bind:this={contentContainer}
77
+ >
78
+ {#if shouldShowIcon}
79
+ <div
80
+ class="bg-brand-subtle flex size-12 shrink-0 items-center justify-center overflow-hidden rounded-xl"
81
+ >
82
+ <!-- Figma draws the icon of every Empty State in the foreground colour (Icon collection, Default mode); `iconColor` still overrides it, on the icon itself -->
83
+ <IconComponent class="text-foreground size-4" style={iconStyle} aria-hidden="true" />
84
+ </div>
85
+ {/if}
92
86
 
93
- <style>
94
- /* Container takes up full width and prevents scrolling */
95
- .empty-state-container {
96
- display: flex;
97
- align-items: center;
98
- justify-content: center;
99
- overflow: hidden;
100
- z-index: 0; /* Lower z-index so it doesn't block interactive elements */
101
- pointer-events: none; /* Allow clicks to pass through to elements behind */
102
- }
103
-
104
- /* Content is centered and has proper spacing */
105
- .empty-state-content {
106
- display: flex;
107
- align-items: center;
108
- justify-content: center;
109
- gap: 0.5rem;
110
- text-align: center;
111
- padding: 0 1rem;
112
- width: 100%;
113
- max-width: 100%;
114
- overflow: hidden;
115
- pointer-events: auto; /* Re-enable pointer events for the content itself */
116
- }
87
+ <div class="flex w-full min-w-0 flex-col gap-1">
88
+ <p class="text-heading-section text-foreground" style={titleStyle}>{message}</p>
89
+ {#if description}
90
+ <p class="text-body text-muted-foreground">{description}</p>
91
+ {/if}
92
+ </div>
117
93
 
118
- /* Icon container to prevent scaling */
119
- .icon-container {
120
- flex-shrink: 0;
121
- width: 24px;
122
- height: 24px;
123
- display: flex;
124
- align-items: center;
125
- justify-content: center;
126
- }
94
+ {#if showActions}
95
+ <div class="flex flex-wrap items-center justify-center gap-2 pt-3">
96
+ <slot name="action" />
97
+ </div>
98
+ {/if}
99
+ </div>
100
+ </div>
127
101
 
128
- /* Ensure text doesn't get squished */
129
- .subtext {
130
- min-width: 0;
131
- overflow: hidden;
132
- text-overflow: ellipsis;
133
- }
102
+ <style>
103
+ .empty-state-container {
104
+ z-index: 0;
105
+ pointer-events: none;
106
+ }
134
107
 
135
- /* Media query as a fallback for browsers that don't support ResizeObserver */
136
- @media (max-width: 200px) {
137
- .icon-container {
138
- display: none;
139
- }
140
- }
141
- </style>
108
+ @media (max-width: 200px) {
109
+ .empty-state-content :global(.size-12) {
110
+ display: none;
111
+ }
112
+ }
113
+ </style>
@@ -1,4 +1,17 @@
1
- import { IconExclamationCircle } from '@tabler/icons-svelte';
1
+ import type { Icon } from '@tabler/icons-svelte';
2
+ type $$ComponentProps = {
3
+ class?: string;
4
+ style?: string;
5
+ message?: string;
6
+ description?: string;
7
+ height?: string;
8
+ showIcon?: boolean;
9
+ iconColor?: string;
10
+ textColor?: string;
11
+ icon?: Icon;
12
+ /** When false, hides the action row (Figma Show actions). */
13
+ showActions?: boolean;
14
+ };
2
15
  interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> = any, Events extends Record<string, any> = any, Slots extends Record<string, any> = any, Exports = {}, Bindings = string> {
3
16
  new (options: import('svelte').ComponentConstructorOptions<Props>): import('svelte').SvelteComponent<Props, Events, Slots> & {
4
17
  $$bindings?: Bindings;
@@ -12,26 +25,10 @@ interface $$__sveltets_2_IsomorphicComponent<Props extends Record<string, any> =
12
25
  };
13
26
  z_$$bindings?: Bindings;
14
27
  }
15
- declare const EmptyState: $$__sveltets_2_IsomorphicComponent<{
16
- /**
17
- * Component Props
18
- * @prop {string} message - The message to display in the empty state
19
- * @prop {string} height - The height of the empty state container (default: '50vh')
20
- * @prop {boolean} showIcon - Whether to show the icon (default: true)
21
- * @prop {string} iconColor - The color of the icon (default: 'hsl(var(--grey3))')
22
- * @prop {string} textColor - The color of the text (default: 'hsl(var(--grey3))')
23
- */ class?: string;
24
- style?: string;
25
- message?: string;
26
- height?: string;
27
- showIcon?: boolean;
28
- iconColor?: string;
29
- textColor?: string;
30
- icon?: typeof IconExclamationCircle;
31
- }, {
28
+ declare const EmptyState: $$__sveltets_2_IsomorphicComponent<$$ComponentProps, {
32
29
  [evt: string]: CustomEvent<any>;
33
30
  }, {
34
31
  action: {};
35
- }, {}, string>;
32
+ }, {}, "">;
36
33
  type EmptyState = InstanceType<typeof EmptyState>;
37
34
  export default EmptyState;
@@ -1,6 +1,6 @@
1
1
  <!--
2
2
  GenerateLoader — reusable hourglass loading state for code generation / preview build.
3
- Change the hourglass emoji or animation here to propagate app-wide.
3
+ Figma: loading patterns (Skeleton / app shell); colours and motion only here.
4
4
  -->
5
5
  <script lang="ts">
6
6
  let className = '';
@@ -18,33 +18,40 @@
18
18
  const hourglassSizeClass: Record<typeof size, string> = {
19
19
  sm: 'text-2xl',
20
20
  md: 'text-3xl',
21
- lg: 'text-4xl',
21
+ lg: 'text-4xl'
22
22
  };
23
23
 
24
24
  const titleSizeClass: Record<typeof size, string> = {
25
- sm: 'text-xs',
26
- md: 'text-sm',
27
- lg: 'text-lg',
25
+ sm: 'text-caption',
26
+ md: 'text-body',
27
+ lg: 'text-body-large'
28
28
  };
29
29
  </script>
30
30
 
31
31
  <div
32
32
  class="wc-generate-loader {overlay
33
- ? 'wc-generate-loader-overlay absolute inset-0 z-30 flex flex-col items-center justify-center bg-white pointer-events-none'
33
+ ? 'wc-generate-loader-overlay bg-background pointer-events-none absolute inset-0 z-30 flex flex-col items-center justify-center'
34
34
  : 'wc-generate-loader-inline flex flex-col items-center justify-center text-center'} {className}"
35
- style={style}
35
+ {style}
36
36
  role="status"
37
37
  aria-live="polite"
38
38
  >
39
- <div class="wc-generate-loader-hourglass animate-spin {hourglassSizeClass[size]} mb-3 text-gray-500"
39
+ <div
40
+ class="wc-generate-loader-hourglass text-muted-foreground mb-3 animate-spin motion-reduce:animate-none {hourglassSizeClass[
41
+ size
42
+ ]}"
40
43
  aria-hidden="true"
41
44
  >
42
45
  ⏳
43
46
  </div>
44
47
  {#if title}
45
- <div class="wc-generate-loader-title font-medium text-gray-700 {titleSizeClass[size]}">{title}</div>
48
+ <div class="wc-generate-loader-title text-body-medium text-foreground {titleSizeClass[size]}">
49
+ {title}
50
+ </div>
46
51
  {/if}
47
52
  {#if subtitle}
48
- <div class="wc-generate-loader-subtitle mt-1 text-xs text-gray-500">{subtitle}</div>
53
+ <div class="wc-generate-loader-subtitle text-caption text-muted-foreground mt-1">
54
+ {subtitle}
55
+ </div>
49
56
  {/if}
50
57
  </div>
@@ -1,50 +1,47 @@
1
+ <!-- Figma: Password Field (Auth tier, eye / eye-off icons). -->
1
2
  <script lang="ts">
2
- // Svelte Imports
3
- import type { FullAutoFill } from 'svelte/elements';
3
+ import type { FullAutoFill } from 'svelte/elements';
4
+ import IconEye from '@tabler/icons-svelte/icons/eye';
5
+ import IconEyeOff from '@tabler/icons-svelte/icons/eye-off';
6
+ import { Input } from './ui/input';
4
7
 
5
- // SHADCN Imports
6
- import { Input } from './ui/input';
8
+ export let value = '';
9
+ export let placeholder = 'Enter password';
10
+ export let name = 'password';
11
+ export let autocomplete: FullAutoFill = 'current-password';
12
+ export let disabled = false;
13
+ export let toggleLabelShow = 'Show password';
14
+ export let toggleLabelHide = 'Hide password';
7
15
 
8
- // Import icon URLs
9
- import eyeIconUrl from '../icons/eye.svg?url';
10
- import eyeOffIconUrl from '../icons/eye-off.svg?url';
11
-
12
- // External Props
13
- export let value = '';
14
- export let placeholder = 'Enter password';
15
- export let name = 'password';
16
- export let autocomplete: FullAutoFill = 'current-password';
17
- export let disabled = false;
18
-
19
- // Internal Variables
20
- let showPassword = false;
16
+ let showPassword = false;
21
17
  </script>
22
18
 
23
- <div class="relative widgetic-colors">
24
- <div class="relative">
25
- <Input
26
- class="pe-[32px]"
27
- bind:value
28
- {name}
29
- type={showPassword ? 'text' : 'password'}
30
- {placeholder}
31
- {autocomplete}
32
- {disabled}
33
- {...$$restProps}
34
- />
19
+ <div class="relative w-full">
20
+ <Input
21
+ class="pe-10"
22
+ bind:value
23
+ {name}
24
+ type={showPassword ? 'text' : 'password'}
25
+ {placeholder}
26
+ {autocomplete}
27
+ {disabled}
28
+ {...$$restProps}
29
+ />
35
30
 
36
- <!-- Toggle Password Visibility -->
37
- <button
38
- type="button"
39
- class="absolute top-1/2 -translate-y-1/2 end-3 cursor-pointer text-[hsl(var(--sage-green))] hover:text-[hsl(var(--dark))]"
40
- tabindex="-1"
41
- on:click={() => showPassword = !showPassword}
42
- >
43
- <img
44
- src={showPassword ? eyeOffIconUrl : eyeIconUrl}
45
- alt={showPassword ? 'Hide password' : 'Show password'}
46
- class="w-5 h-5"
47
- />
48
- </button>
49
- </div>
50
- </div>
31
+ <button
32
+ type="button"
33
+ class="absolute end-1 top-1/2 inline-flex size-8 -translate-y-1/2 items-center justify-center rounded-lg text-foreground press-feedback hover:bg-accent focus-visible:outline-hidden focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:pointer-events-none disabled:opacity-50"
34
+ tabindex="-1"
35
+ aria-label={showPassword ? toggleLabelHide : toggleLabelShow}
36
+ onclick={() => {
37
+ showPassword = !showPassword;
38
+ }}
39
+ {disabled}
40
+ >
41
+ {#if showPassword}
42
+ <IconEyeOff class="size-4 stroke-[1.333]" aria-hidden="true" />
43
+ {:else}
44
+ <IconEye class="size-4 stroke-[1.333]" aria-hidden="true" />
45
+ {/if}
46
+ </button>
47
+ </div>
@@ -19,6 +19,8 @@ declare const PasswordInput: $$__sveltets_2_IsomorphicComponent<{
19
19
  name?: string | undefined;
20
20
  autocomplete?: FullAutoFill | undefined;
21
21
  disabled?: boolean | undefined;
22
+ toggleLabelShow?: string | undefined;
23
+ toggleLabelHide?: string | undefined;
22
24
  }, {
23
25
  [evt: string]: CustomEvent<any>;
24
26
  }, {}, {}, string>;