@nqmcreative/ui 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (308) hide show
  1. package/README.md +151 -439
  2. package/cli/index.mjs +67 -30
  3. package/dist/core/calendar.d.ts +3 -0
  4. package/dist/core/calendar.js +36 -0
  5. package/dist/core/dialog.svelte.d.ts +14 -0
  6. package/dist/core/dialog.svelte.js +23 -0
  7. package/dist/core/files.d.ts +35 -0
  8. package/dist/core/files.js +62 -0
  9. package/dist/core/index.d.ts +37 -0
  10. package/dist/core/index.js +35 -0
  11. package/dist/core/list.svelte.d.ts +41 -0
  12. package/dist/core/list.svelte.js +77 -0
  13. package/dist/core/number.d.ts +7 -0
  14. package/dist/core/number.js +17 -0
  15. package/dist/core/pagination.d.ts +6 -0
  16. package/dist/core/pagination.js +21 -0
  17. package/dist/core/password.d.ts +8 -0
  18. package/dist/core/password.js +23 -0
  19. package/dist/core/table.d.ts +22 -0
  20. package/dist/core/table.js +41 -0
  21. package/dist/core/theme.svelte.d.ts +16 -0
  22. package/dist/core/theme.svelte.js +34 -0
  23. package/dist/core/trigger.d.ts +35 -0
  24. package/dist/core/trigger.js +77 -0
  25. package/dist/index.d.ts +11 -103
  26. package/dist/index.js +11 -75
  27. package/dist/{components → styles/matte}/AccordionItem.svelte +1 -1
  28. package/dist/{components → styles/matte}/AccordionItem.svelte.d.ts +1 -1
  29. package/dist/{components → styles/matte}/Alert.svelte +8 -2
  30. package/dist/{components → styles/matte}/Alert.svelte.d.ts +1 -1
  31. package/dist/{components → styles/matte}/Avatar.svelte +1 -1
  32. package/dist/{components → styles/matte}/Avatar.svelte.d.ts +1 -1
  33. package/dist/{components → styles/matte}/Badge.svelte +8 -3
  34. package/dist/{components → styles/matte}/Badge.svelte.d.ts +1 -3
  35. package/dist/{components → styles/matte}/Breadcrumb.svelte +2 -2
  36. package/dist/{components → styles/matte}/Breadcrumb.svelte.d.ts +1 -1
  37. package/dist/{components → styles/matte}/Button.svelte +1 -1
  38. package/dist/{components → styles/matte}/Button.svelte.d.ts +1 -1
  39. package/dist/styles/matte/CTASection.svelte +76 -0
  40. package/dist/styles/matte/CTASection.svelte.d.ts +18 -0
  41. package/dist/{components → styles/matte}/Calendar.svelte +7 -17
  42. package/dist/{components → styles/matte}/Calendar.svelte.d.ts +1 -1
  43. package/dist/{components → styles/matte}/Card.svelte +1 -1
  44. package/dist/{components → styles/matte}/Card.svelte.d.ts +1 -1
  45. package/dist/{components → styles/matte}/Checkbox.svelte +1 -1
  46. package/dist/{components → styles/matte}/Checkbox.svelte.d.ts +1 -1
  47. package/dist/{components → styles/matte}/CheckboxGroup.svelte +1 -1
  48. package/dist/{components → styles/matte}/CheckboxGroup.svelte.d.ts +1 -1
  49. package/dist/{components → styles/matte}/Combobox.svelte +31 -42
  50. package/dist/{components → styles/matte}/Combobox.svelte.d.ts +1 -1
  51. package/dist/{components → styles/matte}/CommandPalette.svelte +26 -41
  52. package/dist/{components → styles/matte}/CommandPalette.svelte.d.ts +1 -1
  53. package/dist/{components → styles/matte}/ConfirmDialog.svelte +2 -2
  54. package/dist/{components → styles/matte}/ConfirmDialog.svelte.d.ts +2 -2
  55. package/dist/{components → styles/matte}/ContextMenu.svelte +5 -7
  56. package/dist/{components → styles/matte}/DatePicker.svelte +7 -11
  57. package/dist/{components → styles/matte}/DatePicker.svelte.d.ts +1 -1
  58. package/dist/{components → styles/matte}/Drawer.svelte +4 -7
  59. package/dist/{components → styles/matte}/Dropdown.svelte +18 -36
  60. package/dist/{components → styles/matte}/Dropdown.svelte.d.ts +1 -1
  61. package/dist/{components → styles/matte}/Dropzone.svelte +11 -43
  62. package/dist/{components → styles/matte}/Dropzone.svelte.d.ts +2 -5
  63. package/dist/{components → styles/matte}/EmptyState.svelte +1 -1
  64. package/dist/{components → styles/matte}/EmptyState.svelte.d.ts +1 -1
  65. package/dist/styles/matte/FeatureCard.svelte +58 -0
  66. package/dist/styles/matte/FeatureCard.svelte.d.ts +16 -0
  67. package/dist/styles/matte/FeatureGrid.svelte +62 -0
  68. package/dist/styles/matte/FeatureGrid.svelte.d.ts +16 -0
  69. package/dist/{components → styles/matte}/Footer.svelte +1 -1
  70. package/dist/{components → styles/matte}/Footer.svelte.d.ts +1 -1
  71. package/dist/styles/matte/HeroSection.svelte +80 -0
  72. package/dist/styles/matte/HeroSection.svelte.d.ts +21 -0
  73. package/dist/{components → styles/matte}/Input.svelte +1 -1
  74. package/dist/{components → styles/matte}/Input.svelte.d.ts +1 -1
  75. package/dist/{components → styles/matte}/Link.svelte +1 -1
  76. package/dist/{components → styles/matte}/Link.svelte.d.ts +1 -1
  77. package/dist/{components → styles/matte}/LocaleProvider.svelte +1 -1
  78. package/dist/{components → styles/matte}/LocaleProvider.svelte.d.ts +1 -1
  79. package/dist/styles/matte/LogoCloud.svelte +61 -0
  80. package/dist/styles/matte/LogoCloud.svelte.d.ts +19 -0
  81. package/dist/{components → styles/matte}/MenuItem.svelte +1 -1
  82. package/dist/{components → styles/matte}/MenuItem.svelte.d.ts +1 -1
  83. package/dist/{components → styles/matte}/Modal.svelte +4 -7
  84. package/dist/{components → styles/matte}/MultiSelect.svelte +18 -37
  85. package/dist/{components → styles/matte}/MultiSelect.svelte.d.ts +1 -1
  86. package/dist/{components → styles/matte}/Navbar.svelte +2 -2
  87. package/dist/{components → styles/matte}/Navbar.svelte.d.ts +1 -1
  88. package/dist/{components → styles/matte}/NumberInput.svelte +4 -8
  89. package/dist/{components → styles/matte}/NumberInput.svelte.d.ts +1 -1
  90. package/dist/{components → styles/matte}/Pagination.svelte +4 -15
  91. package/dist/{components → styles/matte}/Pagination.svelte.d.ts +1 -1
  92. package/dist/{components → styles/matte}/PasswordInput.svelte +4 -13
  93. package/dist/{components → styles/matte}/PasswordInput.svelte.d.ts +1 -1
  94. package/dist/{components → styles/matte}/Popover.svelte +16 -41
  95. package/dist/{components → styles/matte}/Popover.svelte.d.ts +1 -1
  96. package/dist/styles/matte/PricingCard.svelte +107 -0
  97. package/dist/styles/matte/PricingCard.svelte.d.ts +25 -0
  98. package/dist/{components → styles/matte}/Progress.svelte +3 -2
  99. package/dist/{components → styles/matte}/Progress.svelte.d.ts +1 -1
  100. package/dist/{components → styles/matte}/Radio.svelte +1 -1
  101. package/dist/{components → styles/matte}/Radio.svelte.d.ts +1 -1
  102. package/dist/{components → styles/matte}/RadioGroup.svelte +1 -1
  103. package/dist/{components → styles/matte}/RadioGroup.svelte.d.ts +1 -1
  104. package/dist/{components → styles/matte}/SegmentedControl.svelte +1 -1
  105. package/dist/{components → styles/matte}/SegmentedControl.svelte.d.ts +1 -1
  106. package/dist/{components → styles/matte}/Select.svelte +1 -1
  107. package/dist/{components → styles/matte}/Select.svelte.d.ts +1 -1
  108. package/dist/{components → styles/matte}/Sidebar.svelte +2 -2
  109. package/dist/{components → styles/matte}/Sidebar.svelte.d.ts +1 -1
  110. package/dist/{components → styles/matte}/Slider.svelte +3 -2
  111. package/dist/{components → styles/matte}/Slider.svelte.d.ts +1 -1
  112. package/dist/{components → styles/matte}/Spinner.svelte +2 -2
  113. package/dist/{components → styles/matte}/Spinner.svelte.d.ts +1 -1
  114. package/dist/{components → styles/matte}/Stat.svelte +1 -1
  115. package/dist/{components → styles/matte}/Stat.svelte.d.ts +1 -1
  116. package/dist/styles/matte/StatsBand.svelte +57 -0
  117. package/dist/styles/matte/StatsBand.svelte.d.ts +20 -0
  118. package/dist/{components → styles/matte}/Steps.svelte +1 -1
  119. package/dist/{components → styles/matte}/Steps.svelte.d.ts +1 -1
  120. package/dist/{components → styles/matte}/Switch.svelte +1 -1
  121. package/dist/{components → styles/matte}/Switch.svelte.d.ts +1 -1
  122. package/dist/{components → styles/matte}/Table.svelte +6 -28
  123. package/dist/{components → styles/matte}/Table.svelte.d.ts +2 -6
  124. package/dist/{components → styles/matte}/Tabs.svelte +8 -1
  125. package/dist/{components → styles/matte}/Tabs.svelte.d.ts +1 -1
  126. package/dist/styles/matte/Testimonial.svelte +67 -0
  127. package/dist/styles/matte/Testimonial.svelte.d.ts +19 -0
  128. package/dist/{components → styles/matte}/Textarea.svelte +1 -1
  129. package/dist/{components → styles/matte}/Textarea.svelte.d.ts +1 -1
  130. package/dist/{components → styles/matte}/ThemeToggle.svelte +14 -27
  131. package/dist/{components → styles/matte}/ThemeToggle.svelte.d.ts +2 -6
  132. package/dist/{components → styles/matte}/Toaster.svelte +4 -4
  133. package/dist/{fonts.css → styles/matte/fonts.css} +4 -3
  134. package/dist/styles/matte/index.d.ts +109 -0
  135. package/dist/styles/matte/index.js +83 -0
  136. package/dist/{theme.css → styles/matte/theme.css} +0 -1
  137. package/dist/styles/paper/Accordion.svelte +17 -0
  138. package/dist/styles/paper/Accordion.svelte.d.ts +8 -0
  139. package/dist/styles/paper/AccordionItem.svelte +46 -0
  140. package/dist/styles/paper/AccordionItem.svelte.d.ts +14 -0
  141. package/dist/styles/paper/Alert.svelte +99 -0
  142. package/dist/styles/paper/Alert.svelte.d.ts +18 -0
  143. package/dist/styles/paper/Avatar.svelte +60 -0
  144. package/dist/styles/paper/Avatar.svelte.d.ts +16 -0
  145. package/dist/styles/paper/AvatarGroup.svelte +17 -0
  146. package/dist/styles/paper/AvatarGroup.svelte.d.ts +8 -0
  147. package/dist/styles/paper/Badge.svelte +58 -0
  148. package/dist/styles/paper/Badge.svelte.d.ts +16 -0
  149. package/dist/styles/paper/Breadcrumb.svelte +49 -0
  150. package/dist/styles/paper/Breadcrumb.svelte.d.ts +14 -0
  151. package/dist/styles/paper/Button.svelte +96 -0
  152. package/dist/styles/paper/Button.svelte.d.ts +21 -0
  153. package/dist/styles/paper/CTASection.svelte +76 -0
  154. package/dist/styles/paper/CTASection.svelte.d.ts +18 -0
  155. package/dist/styles/paper/Calendar.svelte +202 -0
  156. package/dist/styles/paper/Calendar.svelte.d.ts +22 -0
  157. package/dist/styles/paper/Card.svelte +78 -0
  158. package/dist/styles/paper/Card.svelte.d.ts +21 -0
  159. package/dist/styles/paper/Checkbox.svelte +75 -0
  160. package/dist/styles/paper/Checkbox.svelte.d.ts +15 -0
  161. package/dist/styles/paper/CheckboxGroup.svelte +111 -0
  162. package/dist/styles/paper/CheckboxGroup.svelte.d.ts +30 -0
  163. package/dist/styles/paper/Combobox.svelte +266 -0
  164. package/dist/styles/paper/Combobox.svelte.d.ts +29 -0
  165. package/dist/styles/paper/CommandPalette.svelte +209 -0
  166. package/dist/styles/paper/CommandPalette.svelte.d.ts +32 -0
  167. package/dist/styles/paper/ConfirmDialog.svelte +97 -0
  168. package/dist/styles/paper/ConfirmDialog.svelte.d.ts +22 -0
  169. package/dist/styles/paper/ContextMenu.svelte +88 -0
  170. package/dist/styles/paper/ContextMenu.svelte.d.ts +15 -0
  171. package/dist/styles/paper/DatePicker.svelte +192 -0
  172. package/dist/styles/paper/DatePicker.svelte.d.ts +23 -0
  173. package/dist/styles/paper/Divider.svelte +30 -0
  174. package/dist/styles/paper/Divider.svelte.d.ts +10 -0
  175. package/dist/styles/paper/Drawer.svelte +165 -0
  176. package/dist/styles/paper/Drawer.svelte.d.ts +20 -0
  177. package/dist/styles/paper/Dropdown.svelte +94 -0
  178. package/dist/styles/paper/Dropdown.svelte.d.ts +23 -0
  179. package/dist/styles/paper/Dropzone.svelte +210 -0
  180. package/dist/styles/paper/Dropzone.svelte.d.ts +29 -0
  181. package/dist/styles/paper/EmptyState.svelte +71 -0
  182. package/dist/styles/paper/EmptyState.svelte.d.ts +18 -0
  183. package/dist/styles/paper/FeatureCard.svelte +58 -0
  184. package/dist/styles/paper/FeatureCard.svelte.d.ts +16 -0
  185. package/dist/styles/paper/FeatureGrid.svelte +62 -0
  186. package/dist/styles/paper/FeatureGrid.svelte.d.ts +16 -0
  187. package/dist/styles/paper/Field.svelte +42 -0
  188. package/dist/styles/paper/Field.svelte.d.ts +16 -0
  189. package/dist/styles/paper/Footer.svelte +91 -0
  190. package/dist/styles/paper/Footer.svelte.d.ts +25 -0
  191. package/dist/styles/paper/HeroSection.svelte +86 -0
  192. package/dist/styles/paper/HeroSection.svelte.d.ts +21 -0
  193. package/dist/styles/paper/Input.svelte +60 -0
  194. package/dist/styles/paper/Input.svelte.d.ts +18 -0
  195. package/dist/styles/paper/InputGroup.svelte +20 -0
  196. package/dist/styles/paper/InputGroup.svelte.d.ts +11 -0
  197. package/dist/styles/paper/Kbd.svelte +17 -0
  198. package/dist/styles/paper/Kbd.svelte.d.ts +8 -0
  199. package/dist/styles/paper/Label.svelte +16 -0
  200. package/dist/styles/paper/Label.svelte.d.ts +9 -0
  201. package/dist/styles/paper/Link.svelte +44 -0
  202. package/dist/styles/paper/Link.svelte.d.ts +16 -0
  203. package/dist/styles/paper/LocaleProvider.svelte +24 -0
  204. package/dist/styles/paper/LocaleProvider.svelte.d.ts +10 -0
  205. package/dist/styles/paper/LogoCloud.svelte +61 -0
  206. package/dist/styles/paper/LogoCloud.svelte.d.ts +19 -0
  207. package/dist/styles/paper/MenuItem.svelte +64 -0
  208. package/dist/styles/paper/MenuItem.svelte.d.ts +18 -0
  209. package/dist/styles/paper/MenuSeparator.svelte +22 -0
  210. package/dist/styles/paper/MenuSeparator.svelte.d.ts +8 -0
  211. package/dist/styles/paper/Modal.svelte +118 -0
  212. package/dist/styles/paper/Modal.svelte.d.ts +21 -0
  213. package/dist/styles/paper/MultiSelect.svelte +287 -0
  214. package/dist/styles/paper/MultiSelect.svelte.d.ts +31 -0
  215. package/dist/styles/paper/Navbar.svelte +201 -0
  216. package/dist/styles/paper/Navbar.svelte.d.ts +33 -0
  217. package/dist/styles/paper/NumberInput.svelte +96 -0
  218. package/dist/styles/paper/NumberInput.svelte.d.ts +15 -0
  219. package/dist/styles/paper/Pagination.svelte +83 -0
  220. package/dist/styles/paper/Pagination.svelte.d.ts +15 -0
  221. package/dist/styles/paper/PasswordInput.svelte +100 -0
  222. package/dist/styles/paper/PasswordInput.svelte.d.ts +12 -0
  223. package/dist/styles/paper/Popover.svelte +89 -0
  224. package/dist/styles/paper/Popover.svelte.d.ts +19 -0
  225. package/dist/styles/paper/PricingCard.svelte +108 -0
  226. package/dist/styles/paper/PricingCard.svelte.d.ts +25 -0
  227. package/dist/styles/paper/Progress.svelte +59 -0
  228. package/dist/styles/paper/Progress.svelte.d.ts +17 -0
  229. package/dist/styles/paper/Radio.svelte +55 -0
  230. package/dist/styles/paper/Radio.svelte.d.ts +15 -0
  231. package/dist/styles/paper/RadioGroup.svelte +95 -0
  232. package/dist/styles/paper/RadioGroup.svelte.d.ts +27 -0
  233. package/dist/styles/paper/SegmentedControl.svelte +88 -0
  234. package/dist/styles/paper/SegmentedControl.svelte.d.ts +25 -0
  235. package/dist/styles/paper/Select.svelte +61 -0
  236. package/dist/styles/paper/Select.svelte.d.ts +20 -0
  237. package/dist/styles/paper/Sidebar.svelte +206 -0
  238. package/dist/styles/paper/Sidebar.svelte.d.ts +36 -0
  239. package/dist/styles/paper/Skeleton.svelte +46 -0
  240. package/dist/styles/paper/Skeleton.svelte.d.ts +13 -0
  241. package/dist/styles/paper/Slider.svelte +80 -0
  242. package/dist/styles/paper/Slider.svelte.d.ts +19 -0
  243. package/dist/styles/paper/Spinner.svelte +34 -0
  244. package/dist/styles/paper/Spinner.svelte.d.ts +13 -0
  245. package/dist/styles/paper/Stat.svelte +51 -0
  246. package/dist/styles/paper/Stat.svelte.d.ts +16 -0
  247. package/dist/styles/paper/StatsBand.svelte +63 -0
  248. package/dist/styles/paper/StatsBand.svelte.d.ts +20 -0
  249. package/dist/styles/paper/Steps.svelte +141 -0
  250. package/dist/styles/paper/Steps.svelte.d.ts +24 -0
  251. package/dist/styles/paper/Switch.svelte +64 -0
  252. package/dist/styles/paper/Switch.svelte.d.ts +14 -0
  253. package/dist/styles/paper/Table.svelte +217 -0
  254. package/dist/styles/paper/Table.svelte.d.ts +66 -0
  255. package/dist/styles/paper/Tabs.svelte +102 -0
  256. package/dist/styles/paper/Tabs.svelte.d.ts +23 -0
  257. package/dist/styles/paper/Testimonial.svelte +64 -0
  258. package/dist/styles/paper/Testimonial.svelte.d.ts +19 -0
  259. package/dist/styles/paper/Textarea.svelte +54 -0
  260. package/dist/styles/paper/Textarea.svelte.d.ts +12 -0
  261. package/dist/styles/paper/ThemeToggle.svelte +130 -0
  262. package/dist/styles/paper/ThemeToggle.svelte.d.ts +16 -0
  263. package/dist/styles/paper/Toaster.svelte +132 -0
  264. package/dist/styles/paper/Toaster.svelte.d.ts +8 -0
  265. package/dist/styles/paper/Tooltip.svelte +33 -0
  266. package/dist/styles/paper/Tooltip.svelte.d.ts +12 -0
  267. package/dist/styles/paper/fonts.css +46 -0
  268. package/dist/styles/paper/index.d.ts +109 -0
  269. package/dist/styles/paper/index.js +83 -0
  270. package/dist/styles/paper/theme.css +222 -0
  271. package/package.json +531 -201
  272. package/registry.json +658 -339
  273. /package/dist/{actions → core/actions}/anchor.d.ts +0 -0
  274. /package/dist/{actions → core/actions}/anchor.js +0 -0
  275. /package/dist/{actions → core/actions}/dismissable.d.ts +0 -0
  276. /package/dist/{actions → core/actions}/dismissable.js +0 -0
  277. /package/dist/{date.d.ts → core/date.d.ts} +0 -0
  278. /package/dist/{date.js → core/date.js} +0 -0
  279. /package/dist/{locale.svelte.d.ts → core/locale.svelte.d.ts} +0 -0
  280. /package/dist/{locale.svelte.js → core/locale.svelte.js} +0 -0
  281. /package/dist/{toast.svelte.d.ts → core/toast.svelte.d.ts} +0 -0
  282. /package/dist/{toast.svelte.js → core/toast.svelte.js} +0 -0
  283. /package/dist/{tones.d.ts → core/tones.d.ts} +0 -0
  284. /package/dist/{tones.js → core/tones.js} +0 -0
  285. /package/dist/{components → styles/matte}/Accordion.svelte +0 -0
  286. /package/dist/{components → styles/matte}/Accordion.svelte.d.ts +0 -0
  287. /package/dist/{components → styles/matte}/AvatarGroup.svelte +0 -0
  288. /package/dist/{components → styles/matte}/AvatarGroup.svelte.d.ts +0 -0
  289. /package/dist/{components → styles/matte}/ContextMenu.svelte.d.ts +0 -0
  290. /package/dist/{components → styles/matte}/Divider.svelte +0 -0
  291. /package/dist/{components → styles/matte}/Divider.svelte.d.ts +0 -0
  292. /package/dist/{components → styles/matte}/Drawer.svelte.d.ts +0 -0
  293. /package/dist/{components → styles/matte}/Field.svelte +0 -0
  294. /package/dist/{components → styles/matte}/Field.svelte.d.ts +0 -0
  295. /package/dist/{components → styles/matte}/InputGroup.svelte +0 -0
  296. /package/dist/{components → styles/matte}/InputGroup.svelte.d.ts +0 -0
  297. /package/dist/{components → styles/matte}/Kbd.svelte +0 -0
  298. /package/dist/{components → styles/matte}/Kbd.svelte.d.ts +0 -0
  299. /package/dist/{components → styles/matte}/Label.svelte +0 -0
  300. /package/dist/{components → styles/matte}/Label.svelte.d.ts +0 -0
  301. /package/dist/{components → styles/matte}/MenuSeparator.svelte +0 -0
  302. /package/dist/{components → styles/matte}/MenuSeparator.svelte.d.ts +0 -0
  303. /package/dist/{components → styles/matte}/Modal.svelte.d.ts +0 -0
  304. /package/dist/{components → styles/matte}/Skeleton.svelte +0 -0
  305. /package/dist/{components → styles/matte}/Skeleton.svelte.d.ts +0 -0
  306. /package/dist/{components → styles/matte}/Toaster.svelte.d.ts +0 -0
  307. /package/dist/{components → styles/matte}/Tooltip.svelte +0 -0
  308. /package/dist/{components → styles/matte}/Tooltip.svelte.d.ts +0 -0
@@ -0,0 +1,17 @@
1
+ <script lang="ts">
2
+ import type { Snippet } from 'svelte';
3
+ import type { HTMLAttributes } from 'svelte/elements';
4
+
5
+ interface Props extends HTMLAttributes<HTMLDivElement> {
6
+ children: Snippet;
7
+ }
8
+
9
+ let { class: className = '', children, ...rest }: Props = $props();
10
+ </script>
11
+
12
+ <div
13
+ class="flex flex-col overflow-hidden rounded-lg border border-hairline bg-bg {className}"
14
+ {...rest}
15
+ >
16
+ {@render children()}
17
+ </div>
@@ -0,0 +1,8 @@
1
+ import type { Snippet } from 'svelte';
2
+ import type { HTMLAttributes } from 'svelte/elements';
3
+ interface Props extends HTMLAttributes<HTMLDivElement> {
4
+ children: Snippet;
5
+ }
6
+ declare const Accordion: import("svelte").Component<Props, {}, "">;
7
+ type Accordion = ReturnType<typeof Accordion>;
8
+ export default Accordion;
@@ -0,0 +1,46 @@
1
+ <script lang="ts">
2
+ import type { Snippet } from 'svelte';
3
+ import type { HTMLAttributes } from 'svelte/elements';
4
+ import { toneText, type Tone } from '../../core/tones.js';
5
+
6
+ interface Props extends HTMLAttributes<HTMLDetailsElement> {
7
+ title: string;
8
+ open?: boolean;
9
+ tone?: Tone;
10
+ /** Short text on the right of the summary row. */
11
+ meta?: string;
12
+ children: Snippet;
13
+ }
14
+
15
+ let {
16
+ title,
17
+ open = $bindable(false),
18
+ tone = 'brand',
19
+ meta,
20
+ class: className = '',
21
+ children,
22
+ ...rest
23
+ }: Props = $props();
24
+ </script>
25
+
26
+ <details bind:open class="group border-b border-hairline last:border-b-0 {className}" {...rest}>
27
+ <summary
28
+ class="flex cursor-pointer list-none items-center gap-4 px-4 py-3.5 font-sans text-sm font-medium text-text transition-colors duration-150 ease-brand-out select-none hover:bg-bg-alt focus-visible:outline-2 focus-visible:outline-offset-[-2px] focus-visible:outline-current [&::-webkit-details-marker]:hidden"
29
+ >
30
+ <span class="flex-1">{title}</span>
31
+ {#if meta}<span class="text-[13px] font-normal text-text-muted">{meta}</span>{/if}
32
+ <svg
33
+ class="size-4 shrink-0 transition-transform duration-200 ease-brand-out group-open:rotate-180 {toneText[
34
+ tone
35
+ ]}"
36
+ viewBox="0 0 16 16"
37
+ fill="none"
38
+ aria-hidden="true"
39
+ >
40
+ <path d="m4 6 4 4 4-4" stroke="currentColor" stroke-width="1.6" stroke-linecap="round" />
41
+ </svg>
42
+ </summary>
43
+ <div class="px-4 pb-4 font-sans text-sm leading-relaxed text-text-secondary">
44
+ {@render children()}
45
+ </div>
46
+ </details>
@@ -0,0 +1,14 @@
1
+ import type { Snippet } from 'svelte';
2
+ import type { HTMLAttributes } from 'svelte/elements';
3
+ import { type Tone } from '../../core/tones.js';
4
+ interface Props extends HTMLAttributes<HTMLDetailsElement> {
5
+ title: string;
6
+ open?: boolean;
7
+ tone?: Tone;
8
+ /** Short text on the right of the summary row. */
9
+ meta?: string;
10
+ children: Snippet;
11
+ }
12
+ declare const AccordionItem: import("svelte").Component<Props, {}, "open">;
13
+ type AccordionItem = ReturnType<typeof AccordionItem>;
14
+ export default AccordionItem;
@@ -0,0 +1,99 @@
1
+ <script lang="ts">
2
+ import type { Snippet } from 'svelte';
3
+ import type { HTMLAttributes } from 'svelte/elements';
4
+ import {
5
+ toneBorder,
6
+ toneBorderSoft,
7
+ toneSurface,
8
+ toneText,
9
+ type Tone
10
+ } from '../../core/tones.js';
11
+ import { useLocale } from '../../core/locale.svelte.js';
12
+
13
+ export type AlertVariant = 'soft' | 'outline' | 'accent';
14
+
15
+ interface Props extends HTMLAttributes<HTMLDivElement> {
16
+ tone?: Tone;
17
+ variant?: AlertVariant;
18
+ title?: string;
19
+ /** Shows a close button and fires `ondismiss`. */
20
+ dismissible?: boolean;
21
+ ondismiss?: () => void;
22
+ /** Replaces the built-in status glyph. */
23
+ icon?: Snippet;
24
+ children?: Snippet;
25
+ }
26
+
27
+ let {
28
+ tone = 'info',
29
+ variant = 'soft',
30
+ title,
31
+ dismissible = false,
32
+ ondismiss,
33
+ icon,
34
+ class: className = '',
35
+ children,
36
+ ...rest
37
+ }: Props = $props();
38
+
39
+ const t = useLocale();
40
+ let open = $state(true);
41
+
42
+ const variants = $derived({
43
+ soft: `${toneSurface[tone]} border ${toneBorderSoft[tone]}`,
44
+ outline: `bg-bg shadow-xs border ${toneBorderSoft[tone]}`,
45
+ accent: `${toneSurface[tone]} border-l-4 ${toneBorder[tone]}`
46
+ });
47
+
48
+ function dismiss() {
49
+ open = false;
50
+ ondismiss?.();
51
+ }
52
+ </script>
53
+
54
+ {#if open}
55
+ <div
56
+ role={tone === 'danger' ? 'alert' : 'status'}
57
+ class="flex items-start gap-3 rounded-lg p-4 font-sans {variants[variant]} {className}"
58
+ {...rest}
59
+ >
60
+ <span class="mt-0.5 shrink-0 {toneText[tone]}">
61
+ {#if icon}
62
+ {@render icon()}
63
+ {:else}
64
+ <svg class="size-4" viewBox="0 0 16 16" fill="none" aria-hidden="true">
65
+ <circle cx="8" cy="8" r="6.5" stroke="currentColor" stroke-width="1.5" />
66
+ <path d="M8 4.75v4" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" />
67
+ <circle cx="8" cy="11.25" r="0.85" fill="currentColor" />
68
+ </svg>
69
+ {/if}
70
+ </span>
71
+
72
+ <div class="flex min-w-0 flex-1 flex-col gap-1">
73
+ {#if title}
74
+ <p class="text-sm leading-snug font-semibold {toneText[tone]}">{title}</p>
75
+ {/if}
76
+ {#if children}
77
+ <div class="text-[13px] leading-relaxed text-text-secondary">{@render children()}</div>
78
+ {/if}
79
+ </div>
80
+
81
+ {#if dismissible}
82
+ <button
83
+ type="button"
84
+ onclick={dismiss}
85
+ aria-label={t.current.dismiss}
86
+ class="-m-1 shrink-0 rounded p-1 text-text-muted transition-colors duration-150 hover:bg-bg/60 hover:text-text focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-current"
87
+ >
88
+ <svg class="size-3.5" viewBox="0 0 14 14" fill="none" aria-hidden="true">
89
+ <path
90
+ d="m2 2 10 10M12 2 2 12"
91
+ stroke="currentColor"
92
+ stroke-width="1.6"
93
+ stroke-linecap="round"
94
+ />
95
+ </svg>
96
+ </button>
97
+ {/if}
98
+ </div>
99
+ {/if}
@@ -0,0 +1,18 @@
1
+ import type { Snippet } from 'svelte';
2
+ import type { HTMLAttributes } from 'svelte/elements';
3
+ import { type Tone } from '../../core/tones.js';
4
+ export type AlertVariant = 'soft' | 'outline' | 'accent';
5
+ interface Props extends HTMLAttributes<HTMLDivElement> {
6
+ tone?: Tone;
7
+ variant?: AlertVariant;
8
+ title?: string;
9
+ /** Shows a close button and fires `ondismiss`. */
10
+ dismissible?: boolean;
11
+ ondismiss?: () => void;
12
+ /** Replaces the built-in status glyph. */
13
+ icon?: Snippet;
14
+ children?: Snippet;
15
+ }
16
+ declare const Alert: import("svelte").Component<Props, {}, "">;
17
+ type Alert = ReturnType<typeof Alert>;
18
+ export default Alert;
@@ -0,0 +1,60 @@
1
+ <script lang="ts">
2
+ import type { HTMLAttributes } from 'svelte/elements';
3
+ import { toneSoft, type Tone } from '../../core/tones.js';
4
+
5
+ export type AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
6
+
7
+ interface Props extends HTMLAttributes<HTMLSpanElement> {
8
+ src?: string;
9
+ alt?: string;
10
+ /** Falls back to the initials of this name when there is no `src`. */
11
+ name?: string;
12
+ size?: AvatarSize;
13
+ tone?: Tone;
14
+ /** Rounded square instead of the default circle. */
15
+ squared?: boolean;
16
+ }
17
+
18
+ let {
19
+ src,
20
+ alt,
21
+ name = '',
22
+ size = 'md',
23
+ tone = 'brand',
24
+ squared = false,
25
+ class: className = '',
26
+ ...rest
27
+ }: Props = $props();
28
+
29
+ const sizes: Record<AvatarSize, string> = {
30
+ xs: 'size-6 text-[10px]',
31
+ sm: 'size-8 text-xs',
32
+ md: 'size-10 text-sm',
33
+ lg: 'size-12 text-base',
34
+ xl: 'size-16 text-lg'
35
+ };
36
+
37
+ const initials = $derived(
38
+ name
39
+ .trim()
40
+ .split(/\s+/)
41
+ .slice(0, 2)
42
+ .map((part) => part[0] ?? '')
43
+ .join('')
44
+ .toUpperCase()
45
+ );
46
+ </script>
47
+
48
+ <span
49
+ class="inline-flex shrink-0 items-center justify-center overflow-hidden font-sans font-semibold select-none
50
+ {squared ? 'rounded-lg' : 'rounded-full'} {sizes[size]} {src
51
+ ? 'bg-bg-inset'
52
+ : toneSoft[tone]} {className}"
53
+ {...rest}
54
+ >
55
+ {#if src}
56
+ <img {src} alt={alt ?? name} class="size-full object-cover" />
57
+ {:else}
58
+ {initials}
59
+ {/if}
60
+ </span>
@@ -0,0 +1,16 @@
1
+ import type { HTMLAttributes } from 'svelte/elements';
2
+ import { type Tone } from '../../core/tones.js';
3
+ export type AvatarSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';
4
+ interface Props extends HTMLAttributes<HTMLSpanElement> {
5
+ src?: string;
6
+ alt?: string;
7
+ /** Falls back to the initials of this name when there is no `src`. */
8
+ name?: string;
9
+ size?: AvatarSize;
10
+ tone?: Tone;
11
+ /** Rounded square instead of the default circle. */
12
+ squared?: boolean;
13
+ }
14
+ declare const Avatar: import("svelte").Component<Props, {}, "">;
15
+ type Avatar = ReturnType<typeof Avatar>;
16
+ export default Avatar;
@@ -0,0 +1,17 @@
1
+ <script lang="ts">
2
+ import type { Snippet } from 'svelte';
3
+ import type { HTMLAttributes } from 'svelte/elements';
4
+
5
+ interface Props extends HTMLAttributes<HTMLDivElement> {
6
+ children: Snippet;
7
+ }
8
+
9
+ let { class: className = '', children, ...rest }: Props = $props();
10
+ </script>
11
+
12
+ <div
13
+ class="flex items-center *:-ml-2 *:ring-2 *:ring-bg [&>*:first-child]:ml-0 {className}"
14
+ {...rest}
15
+ >
16
+ {@render children()}
17
+ </div>
@@ -0,0 +1,8 @@
1
+ import type { Snippet } from 'svelte';
2
+ import type { HTMLAttributes } from 'svelte/elements';
3
+ interface Props extends HTMLAttributes<HTMLDivElement> {
4
+ children: Snippet;
5
+ }
6
+ declare const AvatarGroup: import("svelte").Component<Props, {}, "">;
7
+ type AvatarGroup = ReturnType<typeof AvatarGroup>;
8
+ export default AvatarGroup;
@@ -0,0 +1,58 @@
1
+ <script lang="ts">
2
+ import type { Snippet } from 'svelte';
3
+ import type { HTMLAttributes } from 'svelte/elements';
4
+ import {
5
+ toneBorderSoft,
6
+ toneFill,
7
+ toneSoft,
8
+ toneSolid,
9
+ toneText,
10
+ type Tone
11
+ } from '../../core/tones.js';
12
+
13
+ export type BadgeVariant = 'soft' | 'solid' | 'outline';
14
+ export type BadgeSize = 'sm' | 'md';
15
+
16
+ interface Props extends HTMLAttributes<HTMLSpanElement> {
17
+ tone?: Tone;
18
+ variant?: BadgeVariant;
19
+ size?: BadgeSize;
20
+ /** Small filled circle before the label. */
21
+ dot?: boolean;
22
+ children: Snippet;
23
+ }
24
+
25
+ let {
26
+ tone = 'brand',
27
+ variant = 'soft',
28
+ size = 'md',
29
+ dot = false,
30
+ class: className = '',
31
+ children,
32
+ ...rest
33
+ }: Props = $props();
34
+
35
+ const variants: Record<BadgeVariant, string> = $derived({
36
+ soft: toneSoft[tone],
37
+ solid: toneSolid[tone],
38
+ outline: `border ${toneBorderSoft[tone]} ${toneText[tone]} bg-bg`
39
+ });
40
+
41
+ const sizes: Record<BadgeSize, string> = {
42
+ sm: 'px-2 py-0.5 text-[11px]',
43
+ md: 'px-2.5 py-0.5 text-xs'
44
+ };
45
+ </script>
46
+
47
+ <span
48
+ class="inline-flex items-center gap-1.5 rounded-md font-sans font-medium
49
+ {variants[variant]} {sizes[size]} {className}"
50
+ {...rest}
51
+ >
52
+ {#if dot}
53
+ <span
54
+ class="size-1.5 shrink-0 rounded-full {variant === 'solid' ? 'bg-current' : toneFill[tone]}"
55
+ ></span>
56
+ {/if}
57
+ {@render children()}
58
+ </span>
@@ -0,0 +1,16 @@
1
+ import type { Snippet } from 'svelte';
2
+ import type { HTMLAttributes } from 'svelte/elements';
3
+ import { type Tone } from '../../core/tones.js';
4
+ export type BadgeVariant = 'soft' | 'solid' | 'outline';
5
+ export type BadgeSize = 'sm' | 'md';
6
+ interface Props extends HTMLAttributes<HTMLSpanElement> {
7
+ tone?: Tone;
8
+ variant?: BadgeVariant;
9
+ size?: BadgeSize;
10
+ /** Small filled circle before the label. */
11
+ dot?: boolean;
12
+ children: Snippet;
13
+ }
14
+ declare const Badge: import("svelte").Component<Props, {}, "">;
15
+ type Badge = ReturnType<typeof Badge>;
16
+ export default Badge;
@@ -0,0 +1,49 @@
1
+ <script lang="ts">
2
+ import type { HTMLAttributes } from 'svelte/elements';
3
+ import { toneHoverText, type Tone } from '../../core/tones.js';
4
+ import { useLocale } from '../../core/locale.svelte.js';
5
+
6
+ export interface BreadcrumbItem {
7
+ label: string;
8
+ href?: string;
9
+ }
10
+
11
+ interface Props extends HTMLAttributes<HTMLElement> {
12
+ items: BreadcrumbItem[];
13
+ separator?: string;
14
+ tone?: Tone;
15
+ }
16
+
17
+ let { items, separator = '/', tone = 'brand', class: className = '', ...rest }: Props = $props();
18
+
19
+ const t = useLocale();
20
+ </script>
21
+
22
+ <nav aria-label={t.current.breadcrumb} class="font-sans text-sm {className}" {...rest}>
23
+ <ol class="flex flex-wrap items-center gap-1.5">
24
+ {#each items as item, i (item.label)}
25
+ <li class="flex items-center gap-1.5">
26
+ {#if i > 0}
27
+ <span class="text-hairline-strong select-none" aria-hidden="true">{separator}</span>
28
+ {/if}
29
+ {#if item.href && i < items.length - 1}
30
+ <a
31
+ href={item.href}
32
+ class="rounded px-1 py-0.5 text-text-muted transition-colors duration-150 ease-brand-out hover:bg-bg-inset {toneHoverText[
33
+ tone
34
+ ]}"
35
+ >
36
+ {item.label}
37
+ </a>
38
+ {:else}
39
+ <span
40
+ class="px-1 py-0.5 font-medium text-text"
41
+ aria-current={i === items.length - 1 ? 'page' : undefined}
42
+ >
43
+ {item.label}
44
+ </span>
45
+ {/if}
46
+ </li>
47
+ {/each}
48
+ </ol>
49
+ </nav>
@@ -0,0 +1,14 @@
1
+ import type { HTMLAttributes } from 'svelte/elements';
2
+ import { type Tone } from '../../core/tones.js';
3
+ export interface BreadcrumbItem {
4
+ label: string;
5
+ href?: string;
6
+ }
7
+ interface Props extends HTMLAttributes<HTMLElement> {
8
+ items: BreadcrumbItem[];
9
+ separator?: string;
10
+ tone?: Tone;
11
+ }
12
+ declare const Breadcrumb: import("svelte").Component<Props, {}, "">;
13
+ type Breadcrumb = ReturnType<typeof Breadcrumb>;
14
+ export default Breadcrumb;
@@ -0,0 +1,96 @@
1
+ <script lang="ts">
2
+ import type { Snippet } from 'svelte';
3
+ import type { HTMLButtonAttributes } from 'svelte/elements';
4
+ import Spinner from './Spinner.svelte';
5
+ import {
6
+ focusRing,
7
+ toneBorderSoft,
8
+ toneRing,
9
+ toneSoft,
10
+ toneSoftHover,
11
+ toneSolid,
12
+ toneSolidHover,
13
+ toneText,
14
+ type Tone
15
+ } from '../../core/tones.js';
16
+
17
+ export type ButtonVariant = 'solid' | 'soft' | 'outline' | 'ghost' | 'link' | 'primary';
18
+ export type ButtonSize = 'sm' | 'md' | 'lg' | 'xl';
19
+
20
+ interface Props extends HTMLButtonAttributes {
21
+ variant?: ButtonVariant;
22
+ tone?: Tone;
23
+ size?: ButtonSize;
24
+ /** Renders an `<a>` instead of a `<button>`. */
25
+ href?: string;
26
+ target?: string;
27
+ rel?: string;
28
+ loading?: boolean;
29
+ /** Stretch to the container's full width. */
30
+ block?: boolean;
31
+ children: Snippet;
32
+ }
33
+
34
+ let {
35
+ variant = 'solid',
36
+ tone = 'brand',
37
+ size = 'md',
38
+ href,
39
+ loading = false,
40
+ block = false,
41
+ disabled = false,
42
+ type = 'button',
43
+ class: className = '',
44
+ children,
45
+ ...rest
46
+ }: Props = $props();
47
+
48
+ const base =
49
+ 'inline-flex items-center justify-center gap-2 rounded-md border font-sans font-medium whitespace-nowrap transition-colors duration-150 ease-brand-out disabled:opacity-50 disabled:pointer-events-none aria-disabled:opacity-50 aria-disabled:pointer-events-none';
50
+
51
+ const sizes: Record<ButtonSize, string> = {
52
+ sm: 'h-8 px-3 text-[13px]',
53
+ md: 'h-10 px-4 text-sm',
54
+ lg: 'h-11 px-5 text-[15px]',
55
+ xl: 'h-12 px-6 text-base'
56
+ };
57
+
58
+ const variantClass = $derived.by(() => {
59
+ switch (variant) {
60
+ case 'primary':
61
+ case 'solid':
62
+ return `border-transparent shadow-xs ${toneSolid[tone]} ${toneSolidHover[tone]}`;
63
+ case 'soft':
64
+ return `border-transparent ${toneSoft[tone]} ${toneSoftHover[tone]}`;
65
+ // Outline keeps its own colours on hover here — swapping to a solid
66
+ // fill is matte's move, and it fights paper's quieter surfaces.
67
+ case 'outline':
68
+ return `bg-bg shadow-xs ${toneText[tone]} ${toneBorderSoft[tone]} hover:bg-bg-alt`;
69
+ case 'ghost':
70
+ return `border-transparent bg-transparent ${toneText[tone]} ${toneSoftHover[tone]}`;
71
+ case 'link':
72
+ return `border-transparent ${toneText[tone]} h-auto p-0 text-sm underline-offset-4 hover:underline`;
73
+ }
74
+ });
75
+
76
+ const isLink = $derived(variant === 'link');
77
+ const inert = $derived(disabled || loading);
78
+ </script>
79
+
80
+ <svelte:element
81
+ this={href ? 'a' : 'button'}
82
+ {href}
83
+ type={href ? undefined : type}
84
+ disabled={href ? undefined : inert}
85
+ aria-disabled={href && inert ? 'true' : undefined}
86
+ aria-busy={loading ? 'true' : undefined}
87
+ role={href ? 'button' : undefined}
88
+ class="{base} {focusRing} {toneRing[tone]} {variantClass} {isLink ? '' : sizes[size]}
89
+ {block ? 'w-full' : ''} {className}"
90
+ {...rest}
91
+ >
92
+ {#if loading}
93
+ <Spinner size={size === 'sm' ? 'xs' : 'sm'} label="" />
94
+ {/if}
95
+ {@render children()}
96
+ </svelte:element>
@@ -0,0 +1,21 @@
1
+ import type { Snippet } from 'svelte';
2
+ import type { HTMLButtonAttributes } from 'svelte/elements';
3
+ import { type Tone } from '../../core/tones.js';
4
+ export type ButtonVariant = 'solid' | 'soft' | 'outline' | 'ghost' | 'link' | 'primary';
5
+ export type ButtonSize = 'sm' | 'md' | 'lg' | 'xl';
6
+ interface Props extends HTMLButtonAttributes {
7
+ variant?: ButtonVariant;
8
+ tone?: Tone;
9
+ size?: ButtonSize;
10
+ /** Renders an `<a>` instead of a `<button>`. */
11
+ href?: string;
12
+ target?: string;
13
+ rel?: string;
14
+ loading?: boolean;
15
+ /** Stretch to the container's full width. */
16
+ block?: boolean;
17
+ children: Snippet;
18
+ }
19
+ declare const Button: import("svelte").Component<Props, {}, "">;
20
+ type Button = ReturnType<typeof Button>;
21
+ export default Button;
@@ -0,0 +1,76 @@
1
+ <script lang="ts">
2
+ import type { Snippet } from 'svelte';
3
+ import type { HTMLAttributes } from 'svelte/elements';
4
+ import { toneBorderSoft, toneSolid, toneSurface, type Tone } from '../../core/tones.js';
5
+
6
+ export type CTAVariant = 'tinted' | 'solid' | 'outline';
7
+
8
+ interface Props extends HTMLAttributes<HTMLElement> {
9
+ title: string;
10
+ description?: string;
11
+ tone?: Tone;
12
+ variant?: CTAVariant;
13
+ /** Side by side on wide screens instead of stacked and centred. */
14
+ inline?: boolean;
15
+ /** The buttons. */
16
+ actions?: Snippet;
17
+ children?: Snippet;
18
+ }
19
+
20
+ let {
21
+ title,
22
+ description,
23
+ tone = 'brand',
24
+ variant = 'tinted',
25
+ inline = false,
26
+ actions,
27
+ class: className = '',
28
+ children,
29
+ ...rest
30
+ }: Props = $props();
31
+
32
+ const variants = $derived({
33
+ tinted: `${toneSurface[tone]} border ${toneBorderSoft[tone]}`,
34
+ solid: `${toneSolid[tone]} shadow-lg`,
35
+ outline: `bg-bg border ${toneBorderSoft[tone]} shadow-xs`
36
+ });
37
+
38
+ const onSolid = $derived(variant === 'solid');
39
+ </script>
40
+
41
+ <section class="w-full px-6 py-16 {className}" {...rest}>
42
+ <div
43
+ class="mx-auto flex w-full max-w-6xl gap-8 rounded-xl p-10 sm:p-14 {variants[variant]}
44
+ {inline
45
+ ? 'flex-col lg:flex-row lg:items-center lg:justify-between'
46
+ : 'flex-col items-center text-center'}"
47
+ >
48
+ <div class="flex min-w-0 flex-col gap-3 {inline ? '' : 'items-center'}">
49
+ <h2
50
+ class="max-w-2xl font-heading text-3xl font-semibold tracking-tight text-balance {onSolid
51
+ ? 'text-text-inverse'
52
+ : 'text-text'}"
53
+ >
54
+ {title}
55
+ </h2>
56
+ {#if description}
57
+ <p
58
+ class="max-w-xl font-sans leading-relaxed text-pretty {onSolid
59
+ ? 'text-text-inverse/80'
60
+ : 'text-text-secondary'}"
61
+ >
62
+ {description}
63
+ </p>
64
+ {/if}
65
+ {#if children}
66
+ {@render children()}
67
+ {/if}
68
+ </div>
69
+
70
+ {#if actions}
71
+ <div class="flex shrink-0 flex-wrap items-center gap-3 {inline ? '' : 'justify-center'}">
72
+ {@render actions()}
73
+ </div>
74
+ {/if}
75
+ </div>
76
+ </section>
@@ -0,0 +1,18 @@
1
+ import type { Snippet } from 'svelte';
2
+ import type { HTMLAttributes } from 'svelte/elements';
3
+ import { type Tone } from '../../core/tones.js';
4
+ export type CTAVariant = 'tinted' | 'solid' | 'outline';
5
+ interface Props extends HTMLAttributes<HTMLElement> {
6
+ title: string;
7
+ description?: string;
8
+ tone?: Tone;
9
+ variant?: CTAVariant;
10
+ /** Side by side on wide screens instead of stacked and centred. */
11
+ inline?: boolean;
12
+ /** The buttons. */
13
+ actions?: Snippet;
14
+ children?: Snippet;
15
+ }
16
+ declare const CTASection: import("svelte").Component<Props, {}, "">;
17
+ type CTASection = ReturnType<typeof CTASection>;
18
+ export default CTASection;