tera-system-ui 0.1.64 → 0.1.66

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 (273) hide show
  1. package/dist/COMPONENT_API.md +2 -539
  2. package/dist/components/accordion/Accordion.d.ts +24 -0
  3. package/dist/components/accordion/Accordion.js +4 -0
  4. package/dist/components/accordion/components/Accordion.svelte +2 -8
  5. package/dist/components/accordion/components/AccordionContent.svelte +5 -12
  6. package/dist/components/accordion/components/AccordionItem.svelte +3 -9
  7. package/dist/components/accordion/components/AccordionTrigger.svelte +5 -15
  8. package/dist/components/ai/ChatBubble.svelte +35 -0
  9. package/dist/components/ai/ChatBubble.svelte.d.ts +12 -0
  10. package/dist/components/ai/PromptInput.svelte +58 -0
  11. package/dist/components/ai/PromptInput.svelte.d.ts +13 -0
  12. package/dist/components/ai/StreamText.svelte +41 -0
  13. package/dist/components/ai/StreamText.svelte.d.ts +11 -0
  14. package/dist/components/ai/SuggestionChips.svelte +34 -0
  15. package/dist/components/ai/SuggestionChips.svelte.d.ts +10 -0
  16. package/dist/components/ai/ThinkingLoader.svelte +34 -0
  17. package/dist/components/ai/ThinkingLoader.svelte.d.ts +11 -0
  18. package/dist/components/ai/index.d.ts +5 -0
  19. package/dist/components/ai/index.js +5 -0
  20. package/dist/components/alert/Alert.svelte +47 -0
  21. package/dist/components/alert/Alert.svelte.d.ts +15 -0
  22. package/dist/components/alert/index.d.ts +1 -0
  23. package/dist/components/alert/index.js +1 -0
  24. package/dist/components/avatar/Avatar.svelte +9 -25
  25. package/dist/components/badge/Badge.d.ts +52 -0
  26. package/dist/components/badge/Badge.js +22 -0
  27. package/dist/components/badge/Badge.svelte +22 -0
  28. package/dist/components/badge/Badge.svelte.d.ts +4 -0
  29. package/dist/components/badge/index.d.ts +2 -0
  30. package/dist/components/badge/index.js +1 -0
  31. package/dist/components/brand-logo/BrandLogo.svelte +12 -10
  32. package/dist/components/button/Button.d.ts +2 -2
  33. package/dist/components/button/Button.js +12 -12
  34. package/dist/components/button/Button.svelte +7 -34
  35. package/dist/components/card/Card.d.ts +68 -0
  36. package/dist/components/card/Card.js +28 -0
  37. package/dist/components/card/Card.svelte +33 -0
  38. package/dist/components/card/Card.svelte.d.ts +4 -0
  39. package/dist/components/card/index.d.ts +2 -0
  40. package/dist/components/card/index.js +1 -0
  41. package/dist/components/checkbox/Checkbox.d.ts +25 -4
  42. package/dist/components/checkbox/Checkbox.js +4 -0
  43. package/dist/components/checkbox/Checkbox.svelte +13 -16
  44. package/dist/components/checkbox/Checkbox.svelte.d.ts +2 -2
  45. package/dist/components/combobox/Combobox.d.ts +45 -9
  46. package/dist/components/combobox/Combobox.js +5 -7
  47. package/dist/components/combobox/Combobox.svelte +226 -8
  48. package/dist/components/combobox/Combobox.svelte.d.ts +2 -2
  49. package/dist/components/combobox/index.d.ts +1 -1
  50. package/dist/components/command/components/command-empty.svelte +3 -8
  51. package/dist/components/command/components/command-group.svelte +3 -13
  52. package/dist/components/command/components/command-input.svelte +5 -13
  53. package/dist/components/command/components/command-item.svelte +3 -9
  54. package/dist/components/command/components/command-link-item.svelte +3 -8
  55. package/dist/components/command/components/command-list.svelte +3 -8
  56. package/dist/components/command/components/command-separator.svelte +3 -8
  57. package/dist/components/command/components/command-shortcut.svelte +2 -10
  58. package/dist/components/command/components/command.svelte +29 -42
  59. package/dist/components/date-range-picker/DateRangePicker.svelte +490 -0
  60. package/dist/components/date-range-picker/DateRangePicker.svelte.d.ts +4 -0
  61. package/dist/components/date-range-picker/DateRangePicker.types.d.ts +38 -0
  62. package/dist/components/date-range-picker/DateRangePicker.types.js +1 -0
  63. package/dist/components/date-range-picker/index.d.ts +2 -0
  64. package/dist/components/date-range-picker/index.js +1 -0
  65. package/dist/components/dialog/Dialog.d.ts +43 -121
  66. package/dist/components/dialog/Dialog.js +1 -39
  67. package/dist/components/dialog/Dialog.svelte +103 -113
  68. package/dist/components/dialog/Dialog.svelte.d.ts +1 -2
  69. package/dist/components/dialog/dialog.scss +21 -24
  70. package/dist/components/drawer/Drawer.svelte +63 -0
  71. package/dist/components/drawer/Drawer.svelte.d.ts +16 -0
  72. package/dist/components/drawer/index.d.ts +1 -0
  73. package/dist/components/drawer/index.js +1 -0
  74. package/dist/components/dropdown-menu/DropdownMenu.d.ts +51 -24
  75. package/dist/components/dropdown-menu/DropdownMenu.js +1 -15
  76. package/dist/components/dropdown-menu/components/DropdownMenu.svelte +36 -34
  77. package/dist/components/dropdown-menu/components/DropdownMenu.svelte.d.ts +1 -1
  78. package/dist/components/dropdown-menu/components/DropdownMenuGroup.svelte +8 -12
  79. package/dist/components/dropdown-menu/components/DropdownMenuGroup.svelte.d.ts +2 -4
  80. package/dist/components/dropdown-menu/components/DropdownMenuHeader.svelte +11 -12
  81. package/dist/components/dropdown-menu/components/DropdownMenuHeader.svelte.d.ts +2 -4
  82. package/dist/components/dropdown-menu/components/DropdownMenuItem.svelte +27 -30
  83. package/dist/components/dropdown-menu/components/DropdownMenuItem.svelte.d.ts +1 -1
  84. package/dist/components/dropdown-menu/components/DropdownMenuSeparator.svelte +9 -11
  85. package/dist/components/dropdown-menu/components/DropdownMenuSeparator.svelte.d.ts +2 -4
  86. package/dist/components/fonts/TeraFontMono.svelte +4 -4
  87. package/dist/components/fonts/TeraFontMono.svelte.d.ts +1 -0
  88. package/dist/components/fonts/TeraFontSansSerif.svelte +4 -4
  89. package/dist/components/fonts/TeraFontSansSerif.svelte.d.ts +1 -1
  90. package/dist/components/header/Header.svelte +6 -9
  91. package/dist/components/header/header.scss +1 -1
  92. package/dist/components/icons/IconArrowBigRightFilled.svelte +3 -7
  93. package/dist/components/icons/IconBook.svelte +3 -6
  94. package/dist/components/icons/IconBookmarkPlus.svelte +3 -6
  95. package/dist/components/icons/IconCalculator.svelte +3 -6
  96. package/dist/components/icons/IconCheck.svelte +3 -6
  97. package/dist/components/icons/IconChevronDown.svelte +3 -6
  98. package/dist/components/icons/IconCoin.svelte +3 -6
  99. package/dist/components/icons/IconCoinConvert.svelte +2 -5
  100. package/dist/components/icons/IconCopy.svelte +3 -6
  101. package/dist/components/icons/IconCopyCheckFilled.svelte +3 -6
  102. package/dist/components/icons/IconHamburger.svelte +3 -6
  103. package/dist/components/icons/IconLanguage.svelte +3 -6
  104. package/dist/components/icons/IconLoader2.svelte +3 -6
  105. package/dist/components/icons/IconLogout.svelte +3 -6
  106. package/dist/components/icons/IconMoon.svelte +3 -6
  107. package/dist/components/icons/IconPointFilled.svelte +3 -6
  108. package/dist/components/icons/IconSearch.svelte +3 -6
  109. package/dist/components/icons/IconSettings.svelte +3 -6
  110. package/dist/components/icons/IconSun.svelte +3 -6
  111. package/dist/components/icons/IconSwitchHorizontal.svelte +3 -6
  112. package/dist/components/icons/IconSwitchVertical.svelte +3 -6
  113. package/dist/components/icons/IconTransform.svelte +3 -6
  114. package/dist/components/icons/IconX.svelte +3 -6
  115. package/dist/components/input/Input.d.ts +2 -2
  116. package/dist/components/input/Input.js +10 -10
  117. package/dist/components/input/Input.svelte +10 -26
  118. package/dist/components/label/Label.d.ts +2 -2
  119. package/dist/components/label/Label.js +2 -2
  120. package/dist/components/label/Label.svelte +4 -12
  121. package/dist/components/language-picker-button/LanguagePickerButton.svelte +23 -42
  122. package/dist/components/light-dark-toggle/LightDarkToggle.svelte +21 -26
  123. package/dist/components/marketing/FeatureCard.svelte +37 -0
  124. package/dist/components/marketing/FeatureCard.svelte.d.ts +13 -0
  125. package/dist/components/marketing/PricingCard.svelte +48 -0
  126. package/dist/components/marketing/PricingCard.svelte.d.ts +15 -0
  127. package/dist/components/marketing/StatBlock.svelte +14 -0
  128. package/dist/components/marketing/StatBlock.svelte.d.ts +10 -0
  129. package/dist/components/marketing/TestimonialCard.svelte +24 -0
  130. package/dist/components/marketing/TestimonialCard.svelte.d.ts +12 -0
  131. package/dist/components/marketing/index.d.ts +4 -0
  132. package/dist/components/marketing/index.js +4 -0
  133. package/dist/components/popover/Popover.d.ts +32 -13
  134. package/dist/components/popover/Popover.js +1 -7
  135. package/dist/components/popover/Popover.svelte +40 -158
  136. package/dist/components/popover/Popover.svelte.d.ts +2 -2
  137. package/dist/components/popover-responsive/PopoverResponsive.d.ts +18 -7
  138. package/dist/components/popover-responsive/PopoverResponsive.js +1 -7
  139. package/dist/components/popover-responsive/PopoverResponsive.svelte +25 -87
  140. package/dist/components/popover-responsive/PopoverResponsive.svelte.d.ts +2 -11
  141. package/dist/components/select/Select.d.ts +60 -23
  142. package/dist/components/select/Select.js +14 -35
  143. package/dist/components/select/Select.svelte +157 -28
  144. package/dist/components/select/Select.svelte.d.ts +2 -3
  145. package/dist/components/select/index.d.ts +1 -1
  146. package/dist/components/side-navigation/SideNavigation.svelte +73 -96
  147. package/dist/components/side-navigation/SideNavigationItem.svelte +2 -2
  148. package/dist/components/side-navigation/SideNavigationLayout.svelte +3 -5
  149. package/dist/components/side-navigation/sidenav.scss +17 -13
  150. package/dist/components/skeleton/Skeleton.svelte +48 -0
  151. package/dist/components/skeleton/Skeleton.svelte.d.ts +12 -0
  152. package/dist/components/skeleton/index.d.ts +1 -0
  153. package/dist/components/skeleton/index.js +1 -0
  154. package/dist/components/slider/Slider.d.ts +25 -15
  155. package/dist/components/slider/Slider.js +1 -7
  156. package/dist/components/slider/Slider.svelte +38 -164
  157. package/dist/components/slider/Slider.svelte.d.ts +1 -1
  158. package/dist/components/spinner/Spinner.svelte +39 -0
  159. package/dist/components/spinner/Spinner.svelte.d.ts +10 -0
  160. package/dist/components/spinner/index.d.ts +1 -0
  161. package/dist/components/spinner/index.js +1 -0
  162. package/dist/components/star-rating/StarRating.svelte +33 -49
  163. package/dist/components/switch/Switch.d.ts +19 -4
  164. package/dist/components/switch/Switch.js +4 -0
  165. package/dist/components/switch/Switch.svelte +13 -17
  166. package/dist/components/switch/Switch.svelte.d.ts +2 -2
  167. package/dist/components/table/Table.svelte +68 -0
  168. package/dist/components/table/Table.svelte.d.ts +40 -0
  169. package/dist/components/table/index.d.ts +1 -0
  170. package/dist/components/table/index.js +1 -0
  171. package/dist/components/tabs/Tabs.svelte.d.ts +45 -16
  172. package/dist/components/tabs/Tabs.svelte.js +8 -18
  173. package/dist/components/tabs/components/Tabs.svelte +27 -33
  174. package/dist/components/tabs/components/Tabs.svelte.d.ts +1 -1
  175. package/dist/components/tabs/components/TabsContent.svelte +13 -36
  176. package/dist/components/tabs/components/TabsContent.svelte.d.ts +2 -5
  177. package/dist/components/tabs/components/TabsItem.svelte +43 -32
  178. package/dist/components/tabs/components/TabsItem.svelte.d.ts +2 -5
  179. package/dist/components/tabs/components/TabsList.svelte +90 -58
  180. package/dist/components/tabs/components/TabsList.svelte.d.ts +2 -4
  181. package/dist/components/tera-ui-context/TeraUiContext.svelte +13 -26
  182. package/dist/components/text-area/TextArea.d.ts +2 -2
  183. package/dist/components/text-area/TextArea.js +9 -9
  184. package/dist/components/text-area/TextArea.svelte +41 -65
  185. package/dist/components/toast/ToastContainer.svelte +50 -0
  186. package/dist/components/toast/ToastContainer.svelte.d.ts +18 -0
  187. package/dist/components/toast/index.d.ts +3 -0
  188. package/dist/components/toast/index.js +2 -0
  189. package/dist/components/toast/toast.svelte.d.ts +22 -0
  190. package/dist/components/toast/toast.svelte.js +18 -0
  191. package/dist/components/tooltip/Tooltip.d.ts +23 -0
  192. package/dist/components/tooltip/Tooltip.js +1 -0
  193. package/dist/components/tooltip/Tooltip.svelte +30 -0
  194. package/dist/components/tooltip/Tooltip.svelte.d.ts +4 -0
  195. package/dist/components/tooltip/index.d.ts +2 -0
  196. package/dist/components/tooltip/index.js +1 -0
  197. package/dist/components/user-avatar-with-menu/UserAvatarWithMenu.svelte +48 -69
  198. package/dist/index.d.ts +19 -2
  199. package/dist/index.js +12 -0
  200. package/dist/llms/accordion.md +90 -0
  201. package/dist/llms/ai.md +110 -0
  202. package/dist/llms/alert.md +29 -0
  203. package/dist/llms/avatar.md +34 -0
  204. package/dist/llms/badge.md +31 -0
  205. package/dist/llms/brand-logo.md +30 -0
  206. package/dist/llms/button.md +37 -0
  207. package/dist/llms/card.md +32 -0
  208. package/dist/llms/checkbox.md +35 -0
  209. package/dist/llms/colors.md +161 -0
  210. package/dist/llms/combobox.md +40 -0
  211. package/dist/llms/command.md +7 -0
  212. package/dist/llms/date-range-picker.md +36 -0
  213. package/dist/llms/dialog.md +45 -0
  214. package/dist/llms/drawer.md +30 -0
  215. package/dist/llms/dropdown-menu.md +112 -0
  216. package/dist/llms/fonts.md +7 -0
  217. package/dist/llms/header.md +26 -0
  218. package/dist/llms/icons.md +43 -0
  219. package/dist/llms/index.md +65 -0
  220. package/dist/llms/input.md +37 -0
  221. package/dist/llms/label.md +30 -0
  222. package/dist/llms/language-picker-button.md +30 -0
  223. package/dist/llms/light-dark-toggle.md +26 -0
  224. package/dist/llms/marketing.md +95 -0
  225. package/dist/llms/popover-responsive.md +32 -0
  226. package/dist/llms/popover.md +40 -0
  227. package/dist/llms/select.md +44 -0
  228. package/dist/llms/side-navigation.md +30 -0
  229. package/dist/llms/skeleton.md +28 -0
  230. package/dist/llms/slider.md +36 -0
  231. package/dist/llms/spinner.md +25 -0
  232. package/dist/llms/star-rating.md +31 -0
  233. package/dist/llms/switch.md +33 -0
  234. package/dist/llms/table.md +30 -0
  235. package/dist/llms/tabs.md +92 -0
  236. package/dist/llms/tera-ui-context.md +30 -0
  237. package/dist/llms/text-area.md +39 -0
  238. package/dist/llms/toast.md +7 -0
  239. package/dist/llms/tooltip.md +32 -0
  240. package/dist/llms/user-avatar-with-menu.md +28 -0
  241. package/dist/paraglide/README.md +72 -3
  242. package/dist/paraglide/messages/text_account_settings.d.ts +14 -2
  243. package/dist/paraglide/messages/text_account_settings.js +53 -58
  244. package/dist/paraglide/messages/text_calces_documentation.d.ts +14 -2
  245. package/dist/paraglide/messages/text_calces_documentation.js +53 -58
  246. package/dist/paraglide/messages/text_calces_scientific_calculator.d.ts +14 -2
  247. package/dist/paraglide/messages/text_calces_scientific_calculator.js +53 -58
  248. package/dist/paraglide/messages/text_currency_converter.d.ts +14 -2
  249. package/dist/paraglide/messages/text_currency_converter.js +53 -58
  250. package/dist/paraglide/messages/text_logout.d.ts +14 -2
  251. package/dist/paraglide/messages/text_logout.js +53 -58
  252. package/dist/paraglide/messages/text_select_language.d.ts +14 -2
  253. package/dist/paraglide/messages/text_select_language.js +53 -58
  254. package/dist/paraglide/messages/text_unit_converter.d.ts +14 -2
  255. package/dist/paraglide/messages/text_unit_converter.js +53 -58
  256. package/dist/paraglide/registry.d.ts +13 -0
  257. package/dist/paraglide/registry.js +15 -0
  258. package/dist/paraglide/runtime.d.ts +243 -126
  259. package/dist/paraglide/runtime.js +473 -148
  260. package/dist/paraglide/server.d.ts +13 -20
  261. package/dist/paraglide/server.js +92 -40
  262. package/dist/stories/ComponentOverview.stories.svelte +533 -0
  263. package/dist/stories/ComponentOverview.stories.svelte.d.ts +6 -0
  264. package/dist/themes/tera-ui-base.css +242 -77
  265. package/dist/themes/theme-ai.css +100 -0
  266. package/dist/themes/theme-marketing.css +91 -0
  267. package/dist/themes/theme-professional.css +41 -0
  268. package/package.json +35 -29
  269. package/dist/tera-i18n/projects/tera-system-ui/project.inlang/.meta.json +0 -3
  270. package/dist/tera-i18n/projects/tera-system-ui/project.inlang/README.md +0 -103
  271. package/dist/tera-i18n/projects/tera-system-ui/project.inlang/project_id +0 -1
  272. package/dist/themes/tw-preset.cjs +0 -160
  273. package/dist/themes/tw-preset.d.cts +0 -157
@@ -1,13 +1,13 @@
1
1
  import { tv } from "tailwind-variants";
2
2
  export const styles = tv({
3
- base: 'btn-wave relative overflow-visible rounded-md inline-flex items-center justify-center leading-tight [&>svg]:stroke-icon transition-all duration-200 select-none outline-none font-normal cursor-pointer',
3
+ base: 'relative overflow-visible rounded-md inline-flex items-center justify-center leading-tight [&>svg]:stroke-icon select-none outline-none font-normal cursor-pointer transition-[background-color,border-color,box-shadow,transform,opacity] ease-ui duration-150',
4
4
  variants: {
5
5
  variant: {
6
- primary: 'bg-primary-600 text-white border border-primary-600 hover:bg-primary-500 hover:border-primary-500 active:bg-primary-700 active:border-primary-700 shadow-sm',
7
- default: 'bg-neutral-token-1 text-neutral-token-13 border border-neutral-token-5 hover:text-primary-600 hover:border-primary-600 active:text-primary-700 active:border-primary-700',
8
- dashed: 'bg-neutral-token-1 text-neutral-token-13 border border-dashed border-neutral-token-5 hover:text-primary-600 hover:border-primary-600 active:text-primary-700 active:border-primary-700',
9
- text: 'bg-transparent text-neutral-token-13 border border-transparent hover:bg-neutral-token-3 active:bg-neutral-token-4',
10
- link: 'bg-transparent text-primary-600 border border-transparent hover:text-primary-500 active:text-primary-700 px-0',
6
+ primary: 'bg-primary-600 text-white border border-primary-600 hover:bg-primary-500 hover:border-primary-500 active:scale-[0.97] shadow-sm hover:shadow-md hover:-translate-y-px',
7
+ default: 'bg-surface-control text-text-primary border border-border-default hover:text-interactive-hover hover:border-interactive-hover active:text-interactive-active active:border-interactive-active active:scale-[0.97]',
8
+ dashed: 'bg-surface-control text-text-primary border border-dashed border-border-default hover:text-interactive-hover hover:border-interactive-hover active:text-interactive-active active:border-interactive-active active:scale-[0.97]',
9
+ text: 'bg-transparent text-text-primary border border-transparent hover:bg-surface-hover active:bg-surface-hover',
10
+ link: 'bg-transparent text-interactive border border-transparent hover:text-interactive-hover active:text-interactive-active px-0',
11
11
  },
12
12
  size: {
13
13
  xs: 'h-5 px-1.5 gap-1 text-xs [&>svg]:size-3',
@@ -21,7 +21,7 @@ export const styles = tv({
21
21
  round: 'rounded-full',
22
22
  },
23
23
  disabled: {
24
- true: 'bg-neutral-token-3 text-neutral-token-7 border-neutral-token-5 pointer-events-none shadow-none cursor-not-allowed',
24
+ true: 'bg-surface-sunken text-text-disabled border-border-default pointer-events-none shadow-none cursor-not-allowed',
25
25
  },
26
26
  loading: {
27
27
  true: 'cursor-wait pointer-events-none opacity-65'
@@ -42,35 +42,35 @@ export const styles = tv({
42
42
  variant: 'primary',
43
43
  danger: true,
44
44
  disabled: false,
45
- class: 'bg-error-500 border-error-500 hover:bg-error-400 hover:border-error-400 active:bg-error-600 active:border-error-600'
45
+ class: 'bg-error-default border-error-default hover:bg-error-hover hover:border-error-hover active:bg-error-active active:border-error-active'
46
46
  },
47
47
  // Default danger state
48
48
  {
49
49
  variant: 'default',
50
50
  danger: true,
51
51
  disabled: false,
52
- class: 'text-error-500 border-error-500 hover:text-error-400 hover:border-error-400 active:text-error-600 active:border-error-600'
52
+ class: 'text-error-default border-error-default hover:text-error-hover hover:border-error-hover active:text-error-active active:border-error-active'
53
53
  },
54
54
  // Dashed danger state
55
55
  {
56
56
  variant: 'dashed',
57
57
  danger: true,
58
58
  disabled: false,
59
- class: 'text-error-500 border-error-500 hover:text-error-400 hover:border-error-400 active:text-error-600 active:border-error-600'
59
+ class: 'text-error-default border-error-default hover:text-error-hover hover:border-error-hover active:text-error-active active:border-error-active'
60
60
  },
61
61
  // Text danger state
62
62
  {
63
63
  variant: 'text',
64
64
  danger: true,
65
65
  disabled: false,
66
- class: 'text-error-500 hover:bg-error-50 dark:hover:bg-error-950 active:bg-error-100 dark:active:bg-error-900'
66
+ class: 'text-error-default hover:bg-error-subtle active:bg-error-muted'
67
67
  },
68
68
  // Link danger state
69
69
  {
70
70
  variant: 'link',
71
71
  danger: true,
72
72
  disabled: false,
73
- class: 'text-error-500 hover:text-error-400 active:text-error-600'
73
+ class: 'text-error-default hover:text-error-hover active:text-error-active'
74
74
  },
75
75
  // Text disabled state
76
76
  {
@@ -1,48 +1,21 @@
1
- <script lang="ts">
2
- import {type ButtonProps, styles} from "./Button";
3
-
4
- let {
5
- children, disabled, variant = 'default', icon, size = 'md', shape = 'default', danger, loading, block, class: className,
6
- ref = $bindable(),
7
- onclick,
8
- ...props
9
- }: ButtonProps = $props();
10
-
11
- let waveActive = $state(false);
12
-
13
- // Check if user prefers reduced motion
14
- const prefersReducedMotion = typeof window !== 'undefined'
15
- ? window.matchMedia('(prefers-reduced-motion: reduce)').matches
16
- : false;
17
-
18
- function handleClick(e) {
19
- if (prefersReducedMotion || disabled || loading) return;
20
-
21
- onclick?.(e);
22
- // Trigger wave animation
23
- waveActive = false;
24
- // Force reflow to restart animation
25
- requestAnimationFrame(() => {
26
- waveActive = true;
27
- });
28
- }
29
-
30
- function handleAnimationEnd() {
31
- waveActive = false;
32
- }
1
+ <script lang="ts">import { styles } from "./Button";
2
+ let { children, disabled, variant = 'default', icon, size = 'md', shape = 'default', danger, loading, block, class: className, ref = $bindable(), onclick, ...props } = $props();
3
+ function handleClick(e) {
4
+ if (disabled || loading)
5
+ return;
6
+ onclick?.(e);
7
+ }
33
8
  </script>
34
9
 
35
10
  <button
36
11
  bind:this={ref}
37
12
  class={styles({ disabled: disabled || loading, variant, icon, size, shape, danger, block, className })}
38
- class:wave-active={waveActive}
39
13
  data-variant={variant}
40
14
  data-danger={danger || undefined}
41
15
  {...props}
42
16
  disabled={disabled || loading}
43
17
  aria-busy={loading}
44
18
  onclick={handleClick}
45
- onanimationend={handleAnimationEnd}
46
19
  >
47
20
  {#if loading}
48
21
  <svg class="animate-spin" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24">
@@ -0,0 +1,68 @@
1
+ import { type VariantProps } from "tailwind-variants";
2
+ import type { Snippet } from "svelte";
3
+ import type { HTMLAttributes } from "svelte/elements";
4
+ export declare const styles: import("tailwind-variants").TVReturnType<{
5
+ variant: {
6
+ default: string;
7
+ elevated: string;
8
+ bordered: string;
9
+ ghost: string;
10
+ };
11
+ padding: {
12
+ none: string;
13
+ sm: string;
14
+ md: string;
15
+ lg: string;
16
+ };
17
+ clickable: {
18
+ true: string;
19
+ };
20
+ loading: {
21
+ true: string;
22
+ };
23
+ }, undefined, "relative bg-surface-raised rounded-container transition-[box-shadow,transform] ease-spring duration-200", {
24
+ variant: {
25
+ default: string;
26
+ elevated: string;
27
+ bordered: string;
28
+ ghost: string;
29
+ };
30
+ padding: {
31
+ none: string;
32
+ sm: string;
33
+ md: string;
34
+ lg: string;
35
+ };
36
+ clickable: {
37
+ true: string;
38
+ };
39
+ loading: {
40
+ true: string;
41
+ };
42
+ }, undefined, import("tailwind-variants").TVReturnType<{
43
+ variant: {
44
+ default: string;
45
+ elevated: string;
46
+ bordered: string;
47
+ ghost: string;
48
+ };
49
+ padding: {
50
+ none: string;
51
+ sm: string;
52
+ md: string;
53
+ lg: string;
54
+ };
55
+ clickable: {
56
+ true: string;
57
+ };
58
+ loading: {
59
+ true: string;
60
+ };
61
+ }, undefined, "relative bg-surface-raised rounded-container transition-[box-shadow,transform] ease-spring duration-200", unknown, unknown, undefined>>;
62
+ type CardVariants = VariantProps<typeof styles>;
63
+ export interface CardProps extends HTMLAttributes<HTMLDivElement>, CardVariants {
64
+ children?: Snippet;
65
+ class?: string;
66
+ ref?: HTMLDivElement | null;
67
+ }
68
+ export {};
@@ -0,0 +1,28 @@
1
+ import { tv } from "tailwind-variants";
2
+ export const styles = tv({
3
+ base: 'relative bg-surface-raised rounded-container transition-[box-shadow,transform] ease-spring duration-200',
4
+ variants: {
5
+ variant: {
6
+ default: 'shadow-sm',
7
+ elevated: 'shadow-md',
8
+ bordered: 'border border-border-default shadow-none',
9
+ ghost: 'bg-transparent shadow-none',
10
+ },
11
+ padding: {
12
+ none: 'p-0',
13
+ sm: 'p-3',
14
+ md: 'p-5',
15
+ lg: 'p-7',
16
+ },
17
+ clickable: {
18
+ true: 'cursor-pointer hover:shadow-md hover:-translate-y-px active:scale-[0.99]',
19
+ },
20
+ loading: {
21
+ true: 'overflow-hidden',
22
+ },
23
+ },
24
+ defaultVariants: {
25
+ variant: 'default',
26
+ padding: 'md',
27
+ },
28
+ });
@@ -0,0 +1,33 @@
1
+ <script lang="ts">import { styles } from './Card.js';
2
+ let { children, class: className, variant, padding, clickable, loading, ref = $bindable(), onclick, ...props } = $props();
3
+ </script>
4
+
5
+ {#if clickable}
6
+ <button
7
+ bind:this={ref}
8
+ class={styles({ variant, padding, clickable, loading, className })}
9
+ {onclick}
10
+ {...props}
11
+ >
12
+ {#if loading}
13
+ <div class="absolute inset-0 z-10 flex items-center justify-center bg-surface-raised/80 rounded-container">
14
+ <div class="size-6 rounded-full border-2 border-border-default border-t-interactive animate-spin"></div>
15
+ </div>
16
+ {/if}
17
+ {@render children?.()}
18
+ </button>
19
+ {:else}
20
+ <div
21
+ bind:this={ref}
22
+ class={styles({ variant, padding, clickable, loading, className })}
23
+ {onclick}
24
+ {...props}
25
+ >
26
+ {#if loading}
27
+ <div class="absolute inset-0 z-10 flex items-center justify-center bg-surface-raised/80 rounded-container">
28
+ <div class="size-6 rounded-full border-2 border-border-default border-t-interactive animate-spin"></div>
29
+ </div>
30
+ {/if}
31
+ {@render children?.()}
32
+ </div>
33
+ {/if}
@@ -0,0 +1,4 @@
1
+ import { type CardProps } from './Card.js';
2
+ declare const Card: import("svelte").Component<CardProps, {}, "ref">;
3
+ type Card = ReturnType<typeof Card>;
4
+ export default Card;
@@ -0,0 +1,2 @@
1
+ export { default as Card } from './Card.svelte';
2
+ export type { CardProps } from './Card.js';
@@ -0,0 +1 @@
1
+ export { default as Card } from './Card.svelte';
@@ -1,11 +1,32 @@
1
+ /**
2
+ * @component Checkbox - Accessible checkbox input with label and indeterminate support.
3
+ * Built on BitsUI Checkbox primitive.
4
+ */
1
5
  import { type VariantProps } from "tailwind-variants";
2
6
  import type { Snippet } from "svelte";
3
- import type { HTMLInputAttributes } from "svelte/elements";
4
7
  export declare const styles: import("tailwind-variants").TVReturnType<{}, undefined, "", {}, undefined, import("tailwind-variants").TVReturnType<{}, undefined, "", unknown, unknown, undefined>>;
5
8
  type CheckboxVariants = VariantProps<typeof styles>;
6
- export interface CheckboxProps extends Omit<HTMLInputAttributes, 'size'>, CheckboxVariants {
7
- children?: Snippet;
9
+ export interface CheckboxProps extends CheckboxVariants {
10
+ /** Additional CSS classes for the root element. */
8
11
  class?: string;
9
- ref?: HTMLInputElement | null;
12
+ /** Whether the checkbox is checked. Bindable. */
13
+ checked?: boolean;
14
+ /** Whether the checkbox shows an indeterminate (−) state. Bindable. */
15
+ indeterminate?: boolean;
16
+ /** Prevents user interaction and dims the control. */
17
+ disabled?: boolean;
18
+ /** Whether the checkbox must be checked before form submission. */
19
+ required?: boolean;
20
+ /** Name attribute used when submitting within a form. */
21
+ name?: string;
22
+ /** Value sent with the form when checked. */
23
+ value?: string;
24
+ /** Called when the checked state changes. */
25
+ onCheckedChange?: (checked: boolean) => void;
26
+ /** Additional content rendered next to the checkbox indicator. */
27
+ children?: Snippet;
28
+ /** Bindable reference to the root button element. */
29
+ ref?: HTMLButtonElement | null;
30
+ [key: string]: unknown;
10
31
  }
11
32
  export {};
@@ -1,3 +1,7 @@
1
+ /**
2
+ * @component Checkbox - Accessible checkbox input with label and indeterminate support.
3
+ * Built on BitsUI Checkbox primitive.
4
+ */
1
5
  import { tv } from "tailwind-variants";
2
6
  export const styles = tv({
3
7
  base: '',
@@ -1,25 +1,22 @@
1
- <script lang="ts">
2
- import { Checkbox as CheckboxPrimitive, type WithoutChildrenOrChild } from "bits-ui";
3
- import { cn } from "../../utils";
4
- import IconCheck from "@tabler/icons-svelte/icons/check"
5
- import IconMinus from "@tabler/icons-svelte/icons/minus"
6
-
7
- let {
8
- ref = $bindable(null),
9
- checked = $bindable(false),
10
- indeterminate = $bindable(false),
11
- class: className,
12
- ...restProps
13
- }: WithoutChildrenOrChild<CheckboxPrimitive.RootProps> = $props();
1
+ <script lang="ts">import { Checkbox as CheckboxPrimitive } from "bits-ui";
2
+ import { cn } from "../../utils/index.js";
3
+ import IconCheck from "@tabler/icons-svelte/icons/check";
4
+ import IconMinus from "@tabler/icons-svelte/icons/minus";
5
+ let { ref = $bindable(null), checked = $bindable(false), indeterminate = $bindable(false), class: className, disabled, required, name, value, onCheckedChange, ...restProps } = $props();
14
6
  </script>
15
7
 
16
8
  <CheckboxPrimitive.Root
17
9
  bind:ref
10
+ {disabled}
11
+ {required}
12
+ {name}
13
+ {value}
14
+ {onCheckedChange}
18
15
  class={cn(
19
- "peer box-content size-4 shrink-0 rounded border border-neutral-token-5 bg-neutral-token-1",
20
- "transition-all duration-200",
16
+ "peer box-content size-4 shrink-0 rounded border border-border-default bg-surface-control",
17
+ "transition-[border-color,box-shadow,background-color] ease-ui duration-150",
21
18
  "hover:border-primary-500",
22
- "focus-visible:outline-none focus-visible:shadow-[0_0_0_2px_rgba(59,130,246,0.1)]",
19
+ "focus-visible:outline-none focus-visible:shadow-focus",
23
20
  "data-[state=checked]:bg-primary-600 data-[state=checked]:border-primary-600",
24
21
  "data-[state=indeterminate]:bg-primary-600 data-[state=indeterminate]:border-primary-600",
25
22
  "disabled:cursor-not-allowed disabled:bg-neutral-token-3 disabled:border-neutral-token-5 disabled:opacity-50",
@@ -1,4 +1,4 @@
1
- import { Checkbox as CheckboxPrimitive } from "bits-ui";
2
- declare const Checkbox: import("svelte").Component<Omit<Omit<CheckboxPrimitive.RootProps, "child">, "children">, {}, "ref" | "checked" | "indeterminate">;
1
+ import type { CheckboxProps } from './Checkbox.js';
2
+ declare const Checkbox: import("svelte").Component<CheckboxProps, {}, "ref" | "checked" | "indeterminate">;
3
3
  type Checkbox = ReturnType<typeof Checkbox>;
4
4
  export default Checkbox;
@@ -1,11 +1,47 @@
1
- import { type VariantProps } from "tailwind-variants";
2
- import type { Snippet } from "svelte";
3
- import type { HTMLAttributes } from "svelte/elements";
4
- export declare const styles: import("tailwind-variants").TVReturnType<{}, undefined, "", {}, undefined, import("tailwind-variants").TVReturnType<{}, undefined, "", unknown, unknown, undefined>>;
5
- type ComboboxVariants = VariantProps<typeof styles>;
6
- export interface ComboboxProps extends HTMLAttributes<HTMLDivElement>, ComboboxVariants {
7
- children?: Snippet;
1
+ /**
2
+ * @component Combobox - Searchable dropdown with single and multi-select support.
3
+ * Built on BitsUI Combobox primitive with client-side filtering.
4
+ */
5
+ export interface ComboboxItem {
6
+ /** Unique value submitted or passed to onchange. */
7
+ value: string;
8
+ /** Human-readable label shown in the list and trigger. */
9
+ label: string;
10
+ /** Prevents selecting this item. */
11
+ disabled?: boolean;
12
+ }
13
+ export interface ComboboxProps {
14
+ /** Whether one or many items can be selected at once. */
15
+ type: 'single' | 'multiple';
16
+ /** List of selectable options. */
17
+ items: ComboboxItem[];
18
+ /** Currently selected value(s). Bindable. */
19
+ value?: string | string[];
20
+ /** Placeholder shown in the search input when nothing is selected. */
21
+ placeholder?: string;
22
+ /** Prevents all interaction. */
23
+ disabled?: boolean;
24
+ /** Whether keyboard navigation wraps at the list boundaries. */
25
+ loop?: boolean;
26
+ /** Allow deselecting the current value by clicking it again (single mode only). */
27
+ allowDeselect?: boolean;
28
+ /** Called when the selection changes. */
29
+ onchange?: (value: string | string[]) => void;
30
+ /** Additional CSS classes for the root container. */
8
31
  class?: string;
9
- ref?: HTMLDivElement | null;
32
+ /** Bindable reference to the trigger element. */
33
+ ref?: HTMLElement | null;
34
+ /** Name for the hidden form input, enabling native form submission. */
35
+ name?: string;
36
+ /** Marks the field as required for form validation. */
37
+ required?: boolean;
38
+ /** Scroll alignment for the highlighted item. */
39
+ scrollAlignment?: 'nearest' | 'center';
40
+ /**
41
+ * When true (single mode only), whatever the user types becomes the
42
+ * combobox value directly — like a text input with suggestions.
43
+ * Selecting an item from the list still sets its item.value as normal.
44
+ */
45
+ freeInput?: boolean;
46
+ [key: string]: unknown;
10
47
  }
11
- export {};
@@ -1,7 +1,5 @@
1
- import { tv } from "tailwind-variants";
2
- export const styles = tv({
3
- base: '',
4
- variants: {},
5
- compoundVariants: [],
6
- defaultVariants: {},
7
- });
1
+ /**
2
+ * @component Combobox - Searchable dropdown with single and multi-select support.
3
+ * Built on BitsUI Combobox primitive with client-side filtering.
4
+ */
5
+ export {};