@marwes-ui/svelte 1.3.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 (371) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/LICENSE +21 -0
  3. package/README.md +518 -0
  4. package/dist/components/accordion/Accordion.svelte +56 -0
  5. package/dist/components/accordion/Accordion.svelte.d.ts +4 -0
  6. package/dist/components/accordion/AccordionField.svelte +90 -0
  7. package/dist/components/accordion/AccordionField.svelte.d.ts +4 -0
  8. package/dist/components/accordion/FAQAccordion.svelte +21 -0
  9. package/dist/components/accordion/FAQAccordion.svelte.d.ts +20 -0
  10. package/dist/components/accordion/README.md +19 -0
  11. package/dist/components/accordion/SectionsAccordion.svelte +22 -0
  12. package/dist/components/accordion/SectionsAccordion.svelte.d.ts +21 -0
  13. package/dist/components/accordion/SettingsAccordion.svelte +21 -0
  14. package/dist/components/accordion/SettingsAccordion.svelte.d.ts +20 -0
  15. package/dist/components/accordion/index.d.ts +2 -0
  16. package/dist/components/accordion/index.js +1 -0
  17. package/dist/components/accordion/types.d.ts +28 -0
  18. package/dist/components/accordion/types.js +1 -0
  19. package/dist/components/avatar/Avatar.svelte +45 -0
  20. package/dist/components/avatar/Avatar.svelte.d.ts +4 -0
  21. package/dist/components/avatar/AvatarBadge.svelte +47 -0
  22. package/dist/components/avatar/AvatarBadge.svelte.d.ts +7 -0
  23. package/dist/components/avatar/AvatarGroup.svelte +50 -0
  24. package/dist/components/avatar/AvatarGroup.svelte.d.ts +15 -0
  25. package/dist/components/avatar/PresenceAvatar.svelte +12 -0
  26. package/dist/components/avatar/PresenceAvatar.svelte.d.ts +7 -0
  27. package/dist/components/avatar/ProfileAvatar.svelte +7 -0
  28. package/dist/components/avatar/ProfileAvatar.svelte.d.ts +4 -0
  29. package/dist/components/avatar/README.md +19 -0
  30. package/dist/components/avatar/TeamAvatarGroup.svelte +21 -0
  31. package/dist/components/avatar/TeamAvatarGroup.svelte.d.ts +15 -0
  32. package/dist/components/avatar/index.d.ts +2 -0
  33. package/dist/components/avatar/index.js +1 -0
  34. package/dist/components/avatar/types.d.ts +6 -0
  35. package/dist/components/avatar/types.js +1 -0
  36. package/dist/components/badge/Badge.svelte +26 -0
  37. package/dist/components/badge/Badge.svelte.d.ts +4 -0
  38. package/dist/components/badge/BadgeGroup.svelte +25 -0
  39. package/dist/components/badge/BadgeGroup.svelte.d.ts +4 -0
  40. package/dist/components/badge/NotificationBadge.svelte +7 -0
  41. package/dist/components/badge/NotificationBadge.svelte.d.ts +4 -0
  42. package/dist/components/badge/PriorityBadge.svelte +7 -0
  43. package/dist/components/badge/PriorityBadge.svelte.d.ts +4 -0
  44. package/dist/components/badge/README.md +16 -0
  45. package/dist/components/badge/StatusBadge.svelte +7 -0
  46. package/dist/components/badge/StatusBadge.svelte.d.ts +4 -0
  47. package/dist/components/badge/index.d.ts +3 -0
  48. package/dist/components/badge/index.js +2 -0
  49. package/dist/components/badge/types.d.ts +15 -0
  50. package/dist/components/badge/types.js +1 -0
  51. package/dist/components/button/Button.svelte +92 -0
  52. package/dist/components/button/Button.svelte.d.ts +4 -0
  53. package/dist/components/button/CancelButton.svelte +8 -0
  54. package/dist/components/button/CancelButton.svelte.d.ts +5 -0
  55. package/dist/components/button/CloseButton.svelte +8 -0
  56. package/dist/components/button/CloseButton.svelte.d.ts +5 -0
  57. package/dist/components/button/ConfirmButton.svelte +8 -0
  58. package/dist/components/button/ConfirmButton.svelte.d.ts +5 -0
  59. package/dist/components/button/CopyButton.svelte +8 -0
  60. package/dist/components/button/CopyButton.svelte.d.ts +5 -0
  61. package/dist/components/button/CreateButton.svelte +7 -0
  62. package/dist/components/button/CreateButton.svelte.d.ts +5 -0
  63. package/dist/components/button/DestructiveButton.svelte +8 -0
  64. package/dist/components/button/DestructiveButton.svelte.d.ts +5 -0
  65. package/dist/components/button/DownloadButton.svelte +8 -0
  66. package/dist/components/button/DownloadButton.svelte.d.ts +5 -0
  67. package/dist/components/button/DropdownButton.svelte +8 -0
  68. package/dist/components/button/DropdownButton.svelte.d.ts +5 -0
  69. package/dist/components/button/EditButton.svelte +8 -0
  70. package/dist/components/button/EditButton.svelte.d.ts +5 -0
  71. package/dist/components/button/FilterButton.svelte +8 -0
  72. package/dist/components/button/FilterButton.svelte.d.ts +5 -0
  73. package/dist/components/button/LinkButton.svelte +8 -0
  74. package/dist/components/button/LinkButton.svelte.d.ts +5 -0
  75. package/dist/components/button/PrimaryButton.svelte +7 -0
  76. package/dist/components/button/PrimaryButton.svelte.d.ts +5 -0
  77. package/dist/components/button/README.md +21 -0
  78. package/dist/components/button/RefreshButton.svelte +8 -0
  79. package/dist/components/button/RefreshButton.svelte.d.ts +5 -0
  80. package/dist/components/button/SaveButton.svelte +8 -0
  81. package/dist/components/button/SaveButton.svelte.d.ts +5 -0
  82. package/dist/components/button/SearchButton.svelte +8 -0
  83. package/dist/components/button/SearchButton.svelte.d.ts +5 -0
  84. package/dist/components/button/SecondaryButton.svelte +7 -0
  85. package/dist/components/button/SecondaryButton.svelte.d.ts +5 -0
  86. package/dist/components/button/SortButton.svelte +8 -0
  87. package/dist/components/button/SortButton.svelte.d.ts +5 -0
  88. package/dist/components/button/SubmitButton.svelte +7 -0
  89. package/dist/components/button/SubmitButton.svelte.d.ts +5 -0
  90. package/dist/components/button/SuccessButton.svelte +7 -0
  91. package/dist/components/button/SuccessButton.svelte.d.ts +5 -0
  92. package/dist/components/button/TextButton.svelte +7 -0
  93. package/dist/components/button/TextButton.svelte.d.ts +5 -0
  94. package/dist/components/button/UploadButton.svelte +8 -0
  95. package/dist/components/button/UploadButton.svelte.d.ts +5 -0
  96. package/dist/components/button/VerifyButton.svelte +8 -0
  97. package/dist/components/button/VerifyButton.svelte.d.ts +5 -0
  98. package/dist/components/button/index.d.ts +2 -0
  99. package/dist/components/button/index.js +1 -0
  100. package/dist/components/button/types.d.ts +8 -0
  101. package/dist/components/button/types.js +1 -0
  102. package/dist/components/card/Card.svelte +33 -0
  103. package/dist/components/card/Card.svelte.d.ts +4 -0
  104. package/dist/components/card/ProductCard.svelte +6 -0
  105. package/dist/components/card/ProductCard.svelte.d.ts +4 -0
  106. package/dist/components/card/ProfileCard.svelte +6 -0
  107. package/dist/components/card/ProfileCard.svelte.d.ts +4 -0
  108. package/dist/components/card/README.md +15 -0
  109. package/dist/components/card/StatCard.svelte +6 -0
  110. package/dist/components/card/StatCard.svelte.d.ts +4 -0
  111. package/dist/components/card/index.d.ts +2 -0
  112. package/dist/components/card/index.js +1 -0
  113. package/dist/components/card/types.d.ts +10 -0
  114. package/dist/components/card/types.js +1 -0
  115. package/dist/components/checkbox/Checkbox.svelte +54 -0
  116. package/dist/components/checkbox/Checkbox.svelte.d.ts +4 -0
  117. package/dist/components/checkbox/CheckboxField.svelte +74 -0
  118. package/dist/components/checkbox/CheckboxField.svelte.d.ts +4 -0
  119. package/dist/components/checkbox/CheckboxGroupField.svelte +50 -0
  120. package/dist/components/checkbox/CheckboxGroupField.svelte.d.ts +4 -0
  121. package/dist/components/checkbox/README.md +17 -0
  122. package/dist/components/checkbox/index.d.ts +3 -0
  123. package/dist/components/checkbox/index.js +2 -0
  124. package/dist/components/checkbox/types.d.ts +30 -0
  125. package/dist/components/checkbox/types.js +1 -0
  126. package/dist/components/date-picker/DatePicker.svelte +108 -0
  127. package/dist/components/date-picker/DatePicker.svelte.d.ts +4 -0
  128. package/dist/components/date-picker/README.md +17 -0
  129. package/dist/components/date-picker/index.d.ts +2 -0
  130. package/dist/components/date-picker/index.js +1 -0
  131. package/dist/components/date-picker/types.d.ts +13 -0
  132. package/dist/components/date-picker/types.js +1 -0
  133. package/dist/components/dialog/ConfirmDialog.svelte +28 -0
  134. package/dist/components/dialog/ConfirmDialog.svelte.d.ts +4 -0
  135. package/dist/components/dialog/DestructiveDialog.svelte +28 -0
  136. package/dist/components/dialog/DestructiveDialog.svelte.d.ts +4 -0
  137. package/dist/components/dialog/Dialog.svelte +114 -0
  138. package/dist/components/dialog/Dialog.svelte.d.ts +4 -0
  139. package/dist/components/dialog/DialogModal.svelte +120 -0
  140. package/dist/components/dialog/DialogModal.svelte.d.ts +4 -0
  141. package/dist/components/dialog/InfoDialog.svelte +24 -0
  142. package/dist/components/dialog/InfoDialog.svelte.d.ts +4 -0
  143. package/dist/components/dialog/README.md +23 -0
  144. package/dist/components/dialog/index.d.ts +6 -0
  145. package/dist/components/dialog/index.js +5 -0
  146. package/dist/components/dialog/types.d.ts +42 -0
  147. package/dist/components/dialog/types.js +1 -0
  148. package/dist/components/divider/Divider.svelte +25 -0
  149. package/dist/components/divider/Divider.svelte.d.ts +4 -0
  150. package/dist/components/divider/README.md +15 -0
  151. package/dist/components/divider/index.d.ts +2 -0
  152. package/dist/components/divider/index.js +1 -0
  153. package/dist/components/divider/types.d.ts +5 -0
  154. package/dist/components/divider/types.js +1 -0
  155. package/dist/components/heading/H1.svelte +23 -0
  156. package/dist/components/heading/H1.svelte.d.ts +4 -0
  157. package/dist/components/heading/H2.svelte +23 -0
  158. package/dist/components/heading/H2.svelte.d.ts +4 -0
  159. package/dist/components/heading/H3.svelte +23 -0
  160. package/dist/components/heading/H3.svelte.d.ts +4 -0
  161. package/dist/components/heading/README.md +13 -0
  162. package/dist/components/heading/index.d.ts +4 -0
  163. package/dist/components/heading/index.js +3 -0
  164. package/dist/components/heading/types.d.ts +26 -0
  165. package/dist/components/heading/types.js +1 -0
  166. package/dist/components/icon/Icon.svelte +65 -0
  167. package/dist/components/icon/Icon.svelte.d.ts +4 -0
  168. package/dist/components/icon/README.md +18 -0
  169. package/dist/components/icon/index.d.ts +2 -0
  170. package/dist/components/icon/index.js +1 -0
  171. package/dist/components/icon/types.d.ts +12 -0
  172. package/dist/components/icon/types.js +1 -0
  173. package/dist/components/input/CurrencyField.svelte +12 -0
  174. package/dist/components/input/CurrencyField.svelte.d.ts +7 -0
  175. package/dist/components/input/DateOfBirthField.svelte +21 -0
  176. package/dist/components/input/DateOfBirthField.svelte.d.ts +14 -0
  177. package/dist/components/input/DropdownField.svelte +29 -0
  178. package/dist/components/input/DropdownField.svelte.d.ts +14 -0
  179. package/dist/components/input/EmailField.svelte +9 -0
  180. package/dist/components/input/EmailField.svelte.d.ts +7 -0
  181. package/dist/components/input/Input.svelte +49 -0
  182. package/dist/components/input/Input.svelte.d.ts +4 -0
  183. package/dist/components/input/InputField.svelte +139 -0
  184. package/dist/components/input/InputField.svelte.d.ts +4 -0
  185. package/dist/components/input/InputOtp.svelte +140 -0
  186. package/dist/components/input/InputOtp.svelte.d.ts +4 -0
  187. package/dist/components/input/PasswordField.svelte +9 -0
  188. package/dist/components/input/PasswordField.svelte.d.ts +7 -0
  189. package/dist/components/input/PhoneField.svelte +9 -0
  190. package/dist/components/input/PhoneField.svelte.d.ts +7 -0
  191. package/dist/components/input/README.md +24 -0
  192. package/dist/components/input/RichText.svelte +177 -0
  193. package/dist/components/input/RichText.svelte.d.ts +4 -0
  194. package/dist/components/input/RichTextField.svelte +84 -0
  195. package/dist/components/input/RichTextField.svelte.d.ts +4 -0
  196. package/dist/components/input/SearchField.svelte +9 -0
  197. package/dist/components/input/SearchField.svelte.d.ts +7 -0
  198. package/dist/components/input/Select.svelte +88 -0
  199. package/dist/components/input/Select.svelte.d.ts +4 -0
  200. package/dist/components/input/SelectField.svelte +395 -0
  201. package/dist/components/input/SelectField.svelte.d.ts +4 -0
  202. package/dist/components/input/Textarea.svelte +50 -0
  203. package/dist/components/input/Textarea.svelte.d.ts +4 -0
  204. package/dist/components/input/TextareaField.svelte +57 -0
  205. package/dist/components/input/TextareaField.svelte.d.ts +4 -0
  206. package/dist/components/input/URLField.svelte +9 -0
  207. package/dist/components/input/URLField.svelte.d.ts +7 -0
  208. package/dist/components/input/ZipCodeField.svelte +21 -0
  209. package/dist/components/input/ZipCodeField.svelte.d.ts +14 -0
  210. package/dist/components/input/index.d.ts +7 -0
  211. package/dist/components/input/index.js +6 -0
  212. package/dist/components/input/types.d.ts +104 -0
  213. package/dist/components/input/types.js +1 -0
  214. package/dist/components/paragraph/Paragraph.svelte +23 -0
  215. package/dist/components/paragraph/Paragraph.svelte.d.ts +4 -0
  216. package/dist/components/paragraph/README.md +13 -0
  217. package/dist/components/paragraph/index.d.ts +2 -0
  218. package/dist/components/paragraph/index.js +1 -0
  219. package/dist/components/paragraph/types.d.ts +9 -0
  220. package/dist/components/paragraph/types.js +1 -0
  221. package/dist/components/radio/OptionRadioGroup.svelte +52 -0
  222. package/dist/components/radio/OptionRadioGroup.svelte.d.ts +21 -0
  223. package/dist/components/radio/README.md +16 -0
  224. package/dist/components/radio/Radio.svelte +38 -0
  225. package/dist/components/radio/Radio.svelte.d.ts +4 -0
  226. package/dist/components/radio/RadioGroupField.svelte +75 -0
  227. package/dist/components/radio/RadioGroupField.svelte.d.ts +4 -0
  228. package/dist/components/radio/RatingRadioGroup.svelte +51 -0
  229. package/dist/components/radio/RatingRadioGroup.svelte.d.ts +17 -0
  230. package/dist/components/radio/YesNoRadioGroup.svelte +48 -0
  231. package/dist/components/radio/YesNoRadioGroup.svelte.d.ts +16 -0
  232. package/dist/components/radio/index.d.ts +3 -0
  233. package/dist/components/radio/index.js +2 -0
  234. package/dist/components/radio/types.d.ts +22 -0
  235. package/dist/components/radio/types.js +1 -0
  236. package/dist/components/skeleton/README.md +16 -0
  237. package/dist/components/skeleton/Skeleton.svelte +29 -0
  238. package/dist/components/skeleton/Skeleton.svelte.d.ts +4 -0
  239. package/dist/components/skeleton/index.d.ts +2 -0
  240. package/dist/components/skeleton/index.js +1 -0
  241. package/dist/components/skeleton/types.d.ts +6 -0
  242. package/dist/components/skeleton/types.js +1 -0
  243. package/dist/components/slider/BrightnessSlider.svelte +31 -0
  244. package/dist/components/slider/BrightnessSlider.svelte.d.ts +11 -0
  245. package/dist/components/slider/README.md +20 -0
  246. package/dist/components/slider/RadiusSlider.svelte +31 -0
  247. package/dist/components/slider/RadiusSlider.svelte.d.ts +11 -0
  248. package/dist/components/slider/Slider.svelte +67 -0
  249. package/dist/components/slider/Slider.svelte.d.ts +4 -0
  250. package/dist/components/slider/SliderField.svelte +115 -0
  251. package/dist/components/slider/SliderField.svelte.d.ts +4 -0
  252. package/dist/components/slider/VolumeSlider.svelte +31 -0
  253. package/dist/components/slider/VolumeSlider.svelte.d.ts +11 -0
  254. package/dist/components/slider/index.d.ts +2 -0
  255. package/dist/components/slider/index.js +1 -0
  256. package/dist/components/slider/types.d.ts +28 -0
  257. package/dist/components/slider/types.js +1 -0
  258. package/dist/components/spacing/README.md +15 -0
  259. package/dist/components/spacing/Spacer.svelte +8 -0
  260. package/dist/components/spacing/Spacer.svelte.d.ts +3 -0
  261. package/dist/components/spacing/Spacing.svelte +23 -0
  262. package/dist/components/spacing/Spacing.svelte.d.ts +4 -0
  263. package/dist/components/spacing/index.d.ts +3 -0
  264. package/dist/components/spacing/index.js +2 -0
  265. package/dist/components/spacing/types.d.ts +7 -0
  266. package/dist/components/spacing/types.js +1 -0
  267. package/dist/components/spinner/ButtonSpinner.svelte +35 -0
  268. package/dist/components/spinner/ButtonSpinner.svelte.d.ts +4 -0
  269. package/dist/components/spinner/EmptyStateSpinner.svelte +20 -0
  270. package/dist/components/spinner/EmptyStateSpinner.svelte.d.ts +4 -0
  271. package/dist/components/spinner/README.md +19 -0
  272. package/dist/components/spinner/Spinner.svelte +60 -0
  273. package/dist/components/spinner/Spinner.svelte.d.ts +4 -0
  274. package/dist/components/spinner/index.d.ts +3 -0
  275. package/dist/components/spinner/index.js +2 -0
  276. package/dist/components/spinner/types.d.ts +9 -0
  277. package/dist/components/spinner/types.js +1 -0
  278. package/dist/components/stat-tile/README.md +15 -0
  279. package/dist/components/stat-tile/StatTile.svelte +44 -0
  280. package/dist/components/stat-tile/StatTile.svelte.d.ts +4 -0
  281. package/dist/components/stat-tile/index.d.ts +2 -0
  282. package/dist/components/stat-tile/index.js +1 -0
  283. package/dist/components/stat-tile/types.d.ts +14 -0
  284. package/dist/components/stat-tile/types.js +1 -0
  285. package/dist/components/switch/FeatureToggle.svelte +19 -0
  286. package/dist/components/switch/FeatureToggle.svelte.d.ts +13 -0
  287. package/dist/components/switch/PermissionSwitch.svelte +19 -0
  288. package/dist/components/switch/PermissionSwitch.svelte.d.ts +13 -0
  289. package/dist/components/switch/PreferenceSwitch.svelte +19 -0
  290. package/dist/components/switch/PreferenceSwitch.svelte.d.ts +13 -0
  291. package/dist/components/switch/README.md +17 -0
  292. package/dist/components/switch/Switch.svelte +52 -0
  293. package/dist/components/switch/Switch.svelte.d.ts +4 -0
  294. package/dist/components/switch/SwitchField.svelte +71 -0
  295. package/dist/components/switch/SwitchField.svelte.d.ts +4 -0
  296. package/dist/components/switch/index.d.ts +3 -0
  297. package/dist/components/switch/index.js +2 -0
  298. package/dist/components/switch/types.d.ts +20 -0
  299. package/dist/components/switch/types.js +1 -0
  300. package/dist/components/tab/ContentTabs.svelte +11 -0
  301. package/dist/components/tab/ContentTabs.svelte.d.ts +3 -0
  302. package/dist/components/tab/NavigationTabs.svelte +11 -0
  303. package/dist/components/tab/NavigationTabs.svelte.d.ts +3 -0
  304. package/dist/components/tab/README.md +26 -0
  305. package/dist/components/tab/SettingsTabs.svelte +11 -0
  306. package/dist/components/tab/SettingsTabs.svelte.d.ts +3 -0
  307. package/dist/components/tab/Tab.svelte +32 -0
  308. package/dist/components/tab/Tab.svelte.d.ts +4 -0
  309. package/dist/components/tab/TabGroup.svelte +132 -0
  310. package/dist/components/tab/TabGroup.svelte.d.ts +4 -0
  311. package/dist/components/tab/TabPanel.svelte +25 -0
  312. package/dist/components/tab/TabPanel.svelte.d.ts +4 -0
  313. package/dist/components/tab/index.d.ts +7 -0
  314. package/dist/components/tab/index.js +6 -0
  315. package/dist/components/tab/types.d.ts +36 -0
  316. package/dist/components/tab/types.js +1 -0
  317. package/dist/components/toast/ErrorToast.svelte +24 -0
  318. package/dist/components/toast/ErrorToast.svelte.d.ts +4 -0
  319. package/dist/components/toast/InfoToast.svelte +24 -0
  320. package/dist/components/toast/InfoToast.svelte.d.ts +4 -0
  321. package/dist/components/toast/README.md +35 -0
  322. package/dist/components/toast/SuccessToast.svelte +25 -0
  323. package/dist/components/toast/SuccessToast.svelte.d.ts +4 -0
  324. package/dist/components/toast/Toast.svelte +53 -0
  325. package/dist/components/toast/Toast.svelte.d.ts +4 -0
  326. package/dist/components/toast/ToastContainer.svelte +212 -0
  327. package/dist/components/toast/ToastContainer.svelte.d.ts +4 -0
  328. package/dist/components/toast/ToastProvider.svelte +71 -0
  329. package/dist/components/toast/ToastProvider.svelte.d.ts +7 -0
  330. package/dist/components/toast/WarningToast.svelte +24 -0
  331. package/dist/components/toast/WarningToast.svelte.d.ts +4 -0
  332. package/dist/components/toast/index.d.ts +9 -0
  333. package/dist/components/toast/index.js +8 -0
  334. package/dist/components/toast/types.d.ts +48 -0
  335. package/dist/components/toast/types.js +1 -0
  336. package/dist/components/tooltip/README.md +22 -0
  337. package/dist/components/tooltip/Tooltip.svelte +29 -0
  338. package/dist/components/tooltip/Tooltip.svelte.d.ts +4 -0
  339. package/dist/components/tooltip/TooltipGroup.svelte +100 -0
  340. package/dist/components/tooltip/TooltipGroup.svelte.d.ts +4 -0
  341. package/dist/components/tooltip/index.d.ts +3 -0
  342. package/dist/components/tooltip/index.js +2 -0
  343. package/dist/components/tooltip/types.d.ts +22 -0
  344. package/dist/components/tooltip/types.js +1 -0
  345. package/dist/index.d.ts +149 -0
  346. package/dist/index.js +149 -0
  347. package/dist/internal/attrs.d.ts +2 -0
  348. package/dist/internal/attrs.js +5 -0
  349. package/dist/internal/css-vars.d.ts +5 -0
  350. package/dist/internal/css-vars.js +20 -0
  351. package/dist/internal/merge-class.d.ts +1 -0
  352. package/dist/internal/merge-class.js +4 -0
  353. package/dist/internal/svg-attrs.d.ts +9 -0
  354. package/dist/internal/svg-attrs.js +16 -0
  355. package/dist/provider/MarwesProvider.svelte +186 -0
  356. package/dist/provider/MarwesProvider.svelte.d.ts +4 -0
  357. package/dist/provider/context.d.ts +3 -0
  358. package/dist/provider/context.js +12 -0
  359. package/dist/provider/runtime-theme.d.ts +5 -0
  360. package/dist/provider/runtime-theme.js +63 -0
  361. package/dist/provider/theme-mode-runtime.d.ts +15 -0
  362. package/dist/provider/theme-mode-runtime.js +84 -0
  363. package/dist/provider/types.d.ts +32 -0
  364. package/dist/provider/types.js +1 -0
  365. package/dist/provider/use-theme-mode.d.ts +24 -0
  366. package/dist/provider/use-theme-mode.js +38 -0
  367. package/dist/provider/use-theme.d.ts +15 -0
  368. package/dist/provider/use-theme.js +19 -0
  369. package/dist/ssr.d.ts +2 -0
  370. package/dist/ssr.js +1 -0
  371. package/package.json +59 -0
@@ -0,0 +1,186 @@
1
+ <script lang="ts">
2
+ import {
3
+ ThemeMode as MwThemeMode,
4
+ nextThemeMode,
5
+ resolveThemeInput,
6
+ resolveThemePreference,
7
+ } from "@marwes-ui/core";
8
+ import type { ResolvedTheme, ThemeMode, ThemePreference } from "@marwes-ui/core";
9
+ import { setMarwesContext } from "./context.js";
10
+ import { applyThemeToElement, loadThemeFonts, themeToRootStyle } from "./runtime-theme.js";
11
+ import {
12
+ applyModeAttribute,
13
+ getSystemThemeMode,
14
+ readStoredThemePreference,
15
+ subscribeToSystemThemeMode,
16
+ withoutModeTransitions,
17
+ writeStoredThemePreference,
18
+ } from "./theme-mode-runtime.js";
19
+ import type { MarwesContextState, MarwesProviderProps } from "./types.js";
20
+
21
+ let {
22
+ theme,
23
+ defaultPreference,
24
+ preference: controlledPreference,
25
+ defaultMode,
26
+ mode: controlledMode,
27
+ fontLoading = "auto",
28
+ onPreferenceChange,
29
+ onModeChange,
30
+ storageKey = false,
31
+ enableSystem = true,
32
+ target = "provider",
33
+ attribute = "class",
34
+ disableTransitionOnChange = false,
35
+ variableStrategy = "inline",
36
+ children,
37
+ }: MarwesProviderProps = $props();
38
+
39
+ let rootElement: HTMLDivElement | undefined = $state(undefined);
40
+
41
+ let internalPreference = $state<ThemePreference>(
42
+ defaultPreference ?? defaultMode ?? MwThemeMode.light
43
+ );
44
+
45
+ let systemMode = $state<ThemeMode>(
46
+ enableSystem ? getSystemThemeMode() : MwThemeMode.light
47
+ );
48
+
49
+ const activePreference = $derived(
50
+ controlledPreference ?? controlledMode ?? theme?.mode ?? internalPreference
51
+ );
52
+
53
+ const activeMode = $derived(resolveThemePreference(activePreference, systemMode));
54
+
55
+ const isPreferenceControlled = $derived(
56
+ controlledPreference !== undefined || controlledMode !== undefined || theme?.mode !== undefined
57
+ );
58
+
59
+ const resolved: ResolvedTheme = $derived(
60
+ resolveThemeInput({ ...(theme ?? {}), mode: activeMode })
61
+ );
62
+
63
+ const rootStyle = $derived(
64
+ variableStrategy === "style-tag" ? undefined : themeToRootStyle(resolved)
65
+ );
66
+
67
+ const rootStyleString = $derived(
68
+ rootStyle
69
+ ? Object.entries(rootStyle)
70
+ .map(([k, v]) => (k === "backgroundColor" ? `background-color: ${v}` : `${k}: ${v}`))
71
+ .join("; ")
72
+ : undefined
73
+ );
74
+
75
+ function setPreference(nextPreference: ThemePreference): void {
76
+ if (!isPreferenceControlled) {
77
+ internalPreference = nextPreference;
78
+ }
79
+ writeStoredThemePreference(storageKey, nextPreference);
80
+ onPreferenceChange?.(nextPreference);
81
+ }
82
+
83
+ function setMode(nextMode: ThemeMode): void {
84
+ setPreference(nextMode);
85
+ onModeChange?.(nextMode);
86
+ }
87
+
88
+ function toggleMode(): void {
89
+ setMode(nextThemeMode(activeMode));
90
+ }
91
+
92
+ // Context state — mutated reactively by effects below
93
+ const contextState: MarwesContextState = $state({
94
+ theme: resolved,
95
+ mode: activeMode,
96
+ preference: activePreference,
97
+ systemMode,
98
+ });
99
+
100
+ setMarwesContext({
101
+ get state() { return contextState; },
102
+ setMode,
103
+ setPreference,
104
+ toggleMode,
105
+ });
106
+
107
+ // Keep context state synced with derived values
108
+ $effect(() => {
109
+ contextState.theme = resolved;
110
+ contextState.mode = activeMode;
111
+ contextState.preference = activePreference;
112
+ contextState.systemMode = systemMode;
113
+ });
114
+
115
+ // Read stored preference on mount
116
+ $effect(() => {
117
+ const storedPreference = readStoredThemePreference(storageKey);
118
+ if (storedPreference !== undefined && !isPreferenceControlled) {
119
+ internalPreference = storedPreference;
120
+ }
121
+ });
122
+
123
+ // System theme subscription
124
+ $effect(() => {
125
+ if (!enableSystem) {
126
+ systemMode = MwThemeMode.light;
127
+ return;
128
+ }
129
+
130
+ systemMode = getSystemThemeMode();
131
+
132
+ if (activePreference !== "system") {
133
+ return;
134
+ }
135
+
136
+ const unsubscribe = subscribeToSystemThemeMode((mode) => {
137
+ systemMode = mode;
138
+ });
139
+
140
+ return unsubscribe;
141
+ });
142
+
143
+ // Apply theme to element (inline vars)
144
+ $effect(() => {
145
+ if (variableStrategy === "style-tag") return;
146
+ if (rootElement) {
147
+ applyThemeToElement(rootElement, resolved);
148
+ }
149
+ });
150
+
151
+ // Apply mode attribute to target
152
+ $effect(() => {
153
+ if (target === "provider") return;
154
+
155
+ const apply = () => {
156
+ applyModeAttribute({
157
+ target,
158
+ providerElement: rootElement ?? null,
159
+ mode: activeMode,
160
+ attribute,
161
+ });
162
+ };
163
+
164
+ if (disableTransitionOnChange) {
165
+ withoutModeTransitions(apply);
166
+ return;
167
+ }
168
+
169
+ apply();
170
+ });
171
+
172
+ // Font loading
173
+ $effect(() => {
174
+ loadThemeFonts(resolved, fontLoading);
175
+ });
176
+ </script>
177
+
178
+ <div
179
+ bind:this={rootElement}
180
+ class={`mw-theme--${resolved.mode}`}
181
+ data-marwes-theme="true"
182
+ data-marwes-mode={resolved.mode}
183
+ style={rootStyleString}
184
+ >
185
+ {@render children?.()}
186
+ </div>
@@ -0,0 +1,4 @@
1
+ import type { MarwesProviderProps } from "./types.js";
2
+ declare const MarwesProvider: import("svelte").Component<MarwesProviderProps, {}, "">;
3
+ type MarwesProvider = ReturnType<typeof MarwesProvider>;
4
+ export default MarwesProvider;
@@ -0,0 +1,3 @@
1
+ import type { MarwesContextValue } from "./types.js";
2
+ export declare function setMarwesContext(value: MarwesContextValue): void;
3
+ export declare function getMarwesContext(): MarwesContextValue;
@@ -0,0 +1,12 @@
1
+ import { getContext, setContext } from "svelte";
2
+ const CONTEXT_KEY = Symbol("marwes-context");
3
+ export function setMarwesContext(value) {
4
+ setContext(CONTEXT_KEY, value);
5
+ }
6
+ export function getMarwesContext() {
7
+ const ctx = getContext(CONTEXT_KEY);
8
+ if (!ctx) {
9
+ throw new Error("MarwesProvider is missing. Wrap your app in <MarwesProvider />.");
10
+ }
11
+ return ctx;
12
+ }
@@ -0,0 +1,5 @@
1
+ import type { FontLoadingConfig, ResolvedTheme } from "@marwes-ui/core";
2
+ export declare function themeToRootStyle(theme: ResolvedTheme): Record<string, string>;
3
+ export declare function applyThemeToElement(element: HTMLElement, theme: ResolvedTheme): void;
4
+ export declare function loadThemeFonts(theme: ResolvedTheme, config?: FontLoadingConfig): void;
5
+ export declare function resetThemeRuntimeState(): void;
@@ -0,0 +1,63 @@
1
+ import { buildGoogleFontsUrl, extractFontFamilyName, extractUsedWeights, shouldLoadGoogleFont, themeToCSSVars, } from "@marwes-ui/core";
2
+ const loadedFonts = new Set();
3
+ let preconnected = false;
4
+ export function themeToRootStyle(theme) {
5
+ return {
6
+ ...themeToCSSVars(theme),
7
+ backgroundColor: theme.color.background,
8
+ color: theme.color.text,
9
+ };
10
+ }
11
+ export function applyThemeToElement(element, theme) {
12
+ element.setAttribute("data-marwes-theme", "true");
13
+ element.setAttribute("data-marwes-mode", theme.mode);
14
+ for (const [property, value] of Object.entries(themeToRootStyle(theme))) {
15
+ if (property === "backgroundColor") {
16
+ element.style.backgroundColor = value;
17
+ continue;
18
+ }
19
+ element.style.setProperty(property, value);
20
+ }
21
+ }
22
+ function ensureFontPreconnect() {
23
+ if (preconnected || typeof document === "undefined")
24
+ return;
25
+ preconnected = true;
26
+ for (const href of ["https://fonts.googleapis.com", "https://fonts.gstatic.com"]) {
27
+ const linkElement = document.createElement("link");
28
+ linkElement.rel = "preconnect";
29
+ linkElement.href = href;
30
+ if (href.includes("gstatic")) {
31
+ linkElement.crossOrigin = "anonymous";
32
+ }
33
+ document.head.appendChild(linkElement);
34
+ }
35
+ }
36
+ function loadGoogleFontToDocument(family, weights) {
37
+ if (typeof document === "undefined")
38
+ return;
39
+ const cacheKey = `${family}:${weights.join(",")}`;
40
+ if (loadedFonts.has(cacheKey))
41
+ return;
42
+ loadedFonts.add(cacheKey);
43
+ ensureFontPreconnect();
44
+ const linkElement = document.createElement("link");
45
+ linkElement.rel = "stylesheet";
46
+ linkElement.href = buildGoogleFontsUrl(family, weights);
47
+ linkElement.dataset.marwesFont = family;
48
+ document.head.appendChild(linkElement);
49
+ }
50
+ export function loadThemeFonts(theme, config = "auto") {
51
+ const weights = extractUsedWeights(theme.typography);
52
+ const fontStacks = [theme.font.primary, theme.font.secondary];
53
+ for (const fontStack of fontStacks) {
54
+ const familyName = extractFontFamilyName(fontStack);
55
+ if (familyName && shouldLoadGoogleFont(familyName, config)) {
56
+ loadGoogleFontToDocument(familyName, weights);
57
+ }
58
+ }
59
+ }
60
+ export function resetThemeRuntimeState() {
61
+ loadedFonts.clear();
62
+ preconnected = false;
63
+ }
@@ -0,0 +1,15 @@
1
+ import { ThemeMode } from "@marwes-ui/core";
2
+ import type { ThemePreference } from "@marwes-ui/core";
3
+ export type ThemeTarget = "provider" | "html" | "body";
4
+ export type ThemeAttribute = "class" | "data-theme" | "data-mode";
5
+ export declare function getSystemThemeMode(): ThemeMode;
6
+ export declare function subscribeToSystemThemeMode(onChange: (mode: ThemeMode) => void): () => void;
7
+ export declare function readStoredThemePreference(storageKey: string | false): ThemePreference | undefined;
8
+ export declare function writeStoredThemePreference(storageKey: string | false, preference: ThemePreference): void;
9
+ export declare function applyModeAttribute({ target, providerElement, mode, attribute, }: {
10
+ target: ThemeTarget;
11
+ providerElement: HTMLElement | null;
12
+ mode: ThemeMode;
13
+ attribute: ThemeAttribute;
14
+ }): void;
15
+ export declare function withoutModeTransitions(callback: () => void): void;
@@ -0,0 +1,84 @@
1
+ import { ThemeMode, isThemePreference } from "@marwes-ui/core";
2
+ const mediaQuery = "(prefers-color-scheme: dark)";
3
+ export function getSystemThemeMode() {
4
+ if (typeof window === "undefined")
5
+ return ThemeMode.light;
6
+ return window.matchMedia?.(mediaQuery).matches ? ThemeMode.dark : ThemeMode.light;
7
+ }
8
+ export function subscribeToSystemThemeMode(onChange) {
9
+ if (typeof window === "undefined" || !window.matchMedia)
10
+ return () => { };
11
+ const media = window.matchMedia(mediaQuery);
12
+ const listener = (event) => {
13
+ onChange(event.matches ? ThemeMode.dark : ThemeMode.light);
14
+ };
15
+ if (media.addEventListener) {
16
+ media.addEventListener("change", listener);
17
+ }
18
+ else {
19
+ media.addListener?.(listener);
20
+ }
21
+ return () => {
22
+ if (media.removeEventListener) {
23
+ media.removeEventListener("change", listener);
24
+ }
25
+ else {
26
+ media.removeListener?.(listener);
27
+ }
28
+ };
29
+ }
30
+ export function readStoredThemePreference(storageKey) {
31
+ if (!storageKey || typeof window === "undefined")
32
+ return undefined;
33
+ try {
34
+ const value = window.localStorage.getItem(storageKey);
35
+ return isThemePreference(value) ? value : undefined;
36
+ }
37
+ catch {
38
+ return undefined;
39
+ }
40
+ }
41
+ export function writeStoredThemePreference(storageKey, preference) {
42
+ if (!storageKey || typeof window === "undefined")
43
+ return;
44
+ try {
45
+ window.localStorage.setItem(storageKey, preference);
46
+ }
47
+ catch {
48
+ // Ignore unavailable storage.
49
+ }
50
+ }
51
+ export function applyModeAttribute({ target, providerElement, mode, attribute, }) {
52
+ const element = getTargetElement(target, providerElement);
53
+ if (!element)
54
+ return;
55
+ if (attribute === "class") {
56
+ const oppositeMode = mode === ThemeMode.dark ? ThemeMode.light : ThemeMode.dark;
57
+ element.classList.remove(oppositeMode);
58
+ element.classList.add(mode);
59
+ return;
60
+ }
61
+ element.setAttribute(attribute, mode);
62
+ }
63
+ export function withoutModeTransitions(callback) {
64
+ if (typeof document === "undefined" || typeof window === "undefined") {
65
+ callback();
66
+ return;
67
+ }
68
+ const style = document.createElement("style");
69
+ style.dataset.marwesDisableTransitions = "true";
70
+ style.textContent = "* { transition: none !important; }";
71
+ document.head.appendChild(style);
72
+ callback();
73
+ window.getComputedStyle(document.body);
74
+ window.requestAnimationFrame(() => {
75
+ style.remove();
76
+ });
77
+ }
78
+ function getTargetElement(target, providerElement) {
79
+ if (target === "provider")
80
+ return providerElement;
81
+ if (typeof document === "undefined")
82
+ return null;
83
+ return target === "html" ? document.documentElement : document.body;
84
+ }
@@ -0,0 +1,32 @@
1
+ import type { FontLoadingConfig, ResolvedTheme, ThemeInput, ThemeMode, ThemePreference, ThemeVariableStrategy } from "@marwes-ui/core";
2
+ import type { Snippet } from "svelte";
3
+ import type { ThemeAttribute, ThemeTarget } from "./theme-mode-runtime.js";
4
+ export interface MarwesProviderProps {
5
+ theme?: ThemeInput;
6
+ defaultPreference?: ThemePreference;
7
+ preference?: ThemePreference;
8
+ defaultMode?: ThemeMode;
9
+ mode?: ThemeMode;
10
+ fontLoading?: FontLoadingConfig;
11
+ onPreferenceChange?: (preference: ThemePreference) => void;
12
+ onModeChange?: (mode: ThemeMode) => void;
13
+ storageKey?: string | false;
14
+ enableSystem?: boolean;
15
+ target?: ThemeTarget;
16
+ attribute?: ThemeAttribute;
17
+ disableTransitionOnChange?: boolean;
18
+ variableStrategy?: ThemeVariableStrategy;
19
+ children?: Snippet;
20
+ }
21
+ export interface MarwesContextState {
22
+ theme: ResolvedTheme;
23
+ mode: ThemeMode;
24
+ preference: ThemePreference;
25
+ systemMode: ThemeMode;
26
+ }
27
+ export interface MarwesContextValue {
28
+ readonly state: MarwesContextState;
29
+ setMode: (mode: ThemeMode) => void;
30
+ setPreference: (preference: ThemePreference) => void;
31
+ toggleMode: () => void;
32
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,24 @@
1
+ import { ThemeMode } from "@marwes-ui/core";
2
+ import type { ThemePreference } from "@marwes-ui/core";
3
+ export interface ThemeModeContextValue {
4
+ readonly mode: ThemeMode;
5
+ readonly preference: ThemePreference;
6
+ readonly systemMode: ThemeMode;
7
+ readonly isDark: boolean;
8
+ readonly isLight: boolean;
9
+ readonly isSystem: boolean;
10
+ setMode: (mode: ThemeMode) => void;
11
+ setPreference: (preference: ThemePreference) => void;
12
+ toggleMode: () => void;
13
+ }
14
+ /**
15
+ * Returns reactive theme mode state and setters.
16
+ * Must be called inside a component rendered within MarwesProvider.
17
+ *
18
+ * All properties are getters that stay reactive:
19
+ * ```ts
20
+ * const themeMode = useThemeMode();
21
+ * // themeMode.isDark, themeMode.mode, themeMode.toggleMode()
22
+ * ```
23
+ */
24
+ export declare function useThemeMode(): ThemeModeContextValue;
@@ -0,0 +1,38 @@
1
+ import { ThemeMode } from "@marwes-ui/core";
2
+ import { getMarwesContext } from "./context.js";
3
+ /**
4
+ * Returns reactive theme mode state and setters.
5
+ * Must be called inside a component rendered within MarwesProvider.
6
+ *
7
+ * All properties are getters that stay reactive:
8
+ * ```ts
9
+ * const themeMode = useThemeMode();
10
+ * // themeMode.isDark, themeMode.mode, themeMode.toggleMode()
11
+ * ```
12
+ */
13
+ export function useThemeMode() {
14
+ const ctx = getMarwesContext();
15
+ return {
16
+ get mode() {
17
+ return ctx.state.mode;
18
+ },
19
+ get preference() {
20
+ return ctx.state.preference;
21
+ },
22
+ get systemMode() {
23
+ return ctx.state.systemMode;
24
+ },
25
+ get isDark() {
26
+ return ctx.state.mode === ThemeMode.dark;
27
+ },
28
+ get isLight() {
29
+ return ctx.state.mode === ThemeMode.light;
30
+ },
31
+ get isSystem() {
32
+ return ctx.state.preference === "system";
33
+ },
34
+ setMode: ctx.setMode,
35
+ setPreference: ctx.setPreference,
36
+ toggleMode: ctx.toggleMode,
37
+ };
38
+ }
@@ -0,0 +1,15 @@
1
+ import type { ResolvedTheme } from "@marwes-ui/core";
2
+ export interface UseThemeReturn {
3
+ readonly theme: ResolvedTheme;
4
+ }
5
+ /**
6
+ * Returns a reactive reference to the resolved Marwes theme.
7
+ * Must be called inside a component rendered within MarwesProvider.
8
+ *
9
+ * Access `theme` as a getter to stay reactive:
10
+ * ```ts
11
+ * const { theme } = useTheme();
12
+ * // use theme.color.primary etc.
13
+ * ```
14
+ */
15
+ export declare function useTheme(): UseThemeReturn;
@@ -0,0 +1,19 @@
1
+ import { getMarwesContext } from "./context.js";
2
+ /**
3
+ * Returns a reactive reference to the resolved Marwes theme.
4
+ * Must be called inside a component rendered within MarwesProvider.
5
+ *
6
+ * Access `theme` as a getter to stay reactive:
7
+ * ```ts
8
+ * const { theme } = useTheme();
9
+ * // use theme.color.primary etc.
10
+ * ```
11
+ */
12
+ export function useTheme() {
13
+ const ctx = getMarwesContext();
14
+ return {
15
+ get theme() {
16
+ return ctx.state.theme;
17
+ },
18
+ };
19
+ }
package/dist/ssr.d.ts ADDED
@@ -0,0 +1,2 @@
1
+ export type { MarwesThemeScriptOptions, MarwesThemeStyleOptions } from "@marwes-ui/core";
2
+ export { createMarwesThemeScript, createMarwesThemeStyle } from "@marwes-ui/core";
package/dist/ssr.js ADDED
@@ -0,0 +1 @@
1
+ export { createMarwesThemeScript, createMarwesThemeStyle } from "@marwes-ui/core";
package/package.json ADDED
@@ -0,0 +1,59 @@
1
+ {
2
+ "name": "@marwes-ui/svelte",
3
+ "version": "1.3.0",
4
+ "publishConfig": {
5
+ "access": "public"
6
+ },
7
+ "license": "MIT",
8
+ "private": false,
9
+ "type": "module",
10
+ "sideEffects": false,
11
+ "main": "./dist/index.js",
12
+ "files": [
13
+ "dist",
14
+ "README.md",
15
+ "CHANGELOG.md"
16
+ ],
17
+ "svelte": "./dist/index.js",
18
+ "types": "./dist/index.d.ts",
19
+ "exports": {
20
+ ".": {
21
+ "types": "./dist/index.d.ts",
22
+ "svelte": "./dist/index.js",
23
+ "default": "./dist/index.js"
24
+ },
25
+ "./ssr": {
26
+ "types": "./dist/ssr.d.ts",
27
+ "svelte": "./dist/ssr.js",
28
+ "default": "./dist/ssr.js"
29
+ }
30
+ },
31
+ "dependencies": {
32
+ "@marwes-ui/core": "1.3.0"
33
+ },
34
+ "peerDependencies": {
35
+ "svelte": "^5.20.0"
36
+ },
37
+ "devDependencies": {
38
+ "@sveltejs/package": "^2.0.0",
39
+ "@sveltejs/vite-plugin-svelte": "^5.0.0",
40
+ "@testing-library/svelte": "^5.0.0",
41
+ "jsdom": "26.1.0",
42
+ "rimraf": "6.1.2",
43
+ "svelte": "^5.20.0",
44
+ "svelte-check": "^4.0.0",
45
+ "typescript": "5.9.3",
46
+ "vite": "^6.0.0",
47
+ "vitest": "4.0.18"
48
+ },
49
+ "scripts": {
50
+ "dev": "svelte-package --watch",
51
+ "build": "svelte-package",
52
+ "typecheck": "svelte-check --tsconfig ./tsconfig.json",
53
+ "test:typecheck": "svelte-check --tsconfig ./tsconfig.json",
54
+ "test": "NODE_ENV=test vitest run",
55
+ "clean": "rimraf dist",
56
+ "lint": "biome lint .",
57
+ "format": "biome format --write ."
58
+ }
59
+ }