sveltacular 0.0.76 → 1.0.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 (374) hide show
  1. package/README.md +142 -15
  2. package/dist/forms/base-input-wrapper.svelte +99 -0
  3. package/dist/forms/base-input-wrapper.svelte.d.ts +15 -0
  4. package/dist/forms/bool-box/bool-box.svelte +30 -17
  5. package/dist/forms/bool-box/bool-box.svelte.d.ts +9 -21
  6. package/dist/forms/button/button.svelte +153 -89
  7. package/dist/forms/button/button.svelte.d.ts +25 -29
  8. package/dist/forms/check-box/check-box-group.svelte +63 -29
  9. package/dist/forms/check-box/check-box-group.svelte.d.ts +11 -27
  10. package/dist/forms/check-box/check-box.svelte +57 -33
  11. package/dist/forms/check-box/check-box.svelte.d.ts +15 -25
  12. package/dist/forms/check-box/index.d.ts +2 -0
  13. package/dist/forms/check-box/index.js +2 -0
  14. package/dist/forms/combo/new-or-existing-combo.svelte +37 -18
  15. package/dist/forms/combo/new-or-existing-combo.svelte.d.ts +15 -25
  16. package/dist/forms/combo-box/combo-box.svelte +655 -0
  17. package/dist/forms/combo-box/combo-box.svelte.d.ts +62 -0
  18. package/dist/forms/combo-box/index.d.ts +1 -0
  19. package/dist/forms/combo-box/index.js +1 -0
  20. package/dist/forms/date-box/date-box.svelte +80 -54
  21. package/dist/forms/date-box/date-box.svelte.d.ts +21 -32
  22. package/dist/forms/file-area/file-area.svelte +109 -68
  23. package/dist/forms/file-area/file-area.svelte.d.ts +12 -22
  24. package/dist/forms/file-box/file-box.svelte +40 -21
  25. package/dist/forms/file-box/file-box.svelte.d.ts +14 -25
  26. package/dist/forms/form-field.svelte +18 -15
  27. package/dist/forms/form-field.svelte.d.ts +8 -18
  28. package/dist/forms/form-footer.svelte +6 -3
  29. package/dist/forms/form-footer.svelte.d.ts +6 -26
  30. package/dist/forms/form-header.svelte +15 -4
  31. package/dist/forms/form-header.svelte.d.ts +8 -18
  32. package/dist/forms/form-label.svelte +15 -6
  33. package/dist/forms/form-label.svelte.d.ts +8 -19
  34. package/dist/forms/form-section.svelte +15 -4
  35. package/dist/forms/form-section.svelte.d.ts +8 -18
  36. package/dist/forms/form.svelte +30 -13
  37. package/dist/forms/form.svelte.d.ts +11 -22
  38. package/dist/forms/index.d.ts +26 -0
  39. package/dist/forms/index.js +31 -0
  40. package/dist/forms/info-box/info-box.svelte +19 -8
  41. package/dist/forms/info-box/info-box.svelte.d.ts +8 -19
  42. package/dist/forms/list-box/index.d.ts +2 -0
  43. package/dist/forms/list-box/index.js +1 -0
  44. package/dist/forms/list-box/list-box.svelte +190 -118
  45. package/dist/forms/list-box/list-box.svelte.d.ts +16 -26
  46. package/dist/forms/money-box/money-box.svelte +223 -190
  47. package/dist/forms/money-box/money-box.svelte.d.ts +16 -28
  48. package/dist/forms/number-box/number-box.svelte +84 -67
  49. package/dist/forms/number-box/number-box.svelte.d.ts +17 -28
  50. package/dist/forms/phone-box/index.d.ts +1 -0
  51. package/dist/forms/phone-box/index.js +1 -0
  52. package/dist/forms/phone-box/phone-box.svelte +152 -122
  53. package/dist/forms/phone-box/phone-box.svelte.d.ts +8 -20
  54. package/dist/forms/radio-group/index.d.ts +2 -0
  55. package/dist/forms/radio-group/index.js +2 -0
  56. package/dist/forms/radio-group/radio-box.svelte +23 -8
  57. package/dist/forms/radio-group/radio-box.svelte.d.ts +10 -19
  58. package/dist/forms/radio-group/radio-group.svelte +27 -13
  59. package/dist/forms/radio-group/radio-group.svelte.d.ts +10 -21
  60. package/dist/forms/slider/slider.svelte +210 -0
  61. package/dist/forms/slider/slider.svelte.d.ts +17 -0
  62. package/dist/forms/switch-box/switch-box.svelte +35 -21
  63. package/dist/forms/switch-box/switch-box.svelte.d.ts +9 -20
  64. package/dist/forms/text-area/text-area.svelte +89 -15
  65. package/dist/forms/text-area/text-area.svelte.d.ts +15 -23
  66. package/dist/forms/text-box/text-box.svelte +253 -75
  67. package/dist/forms/text-box/text-box.svelte.d.ts +28 -36
  68. package/dist/forms/time-box/time-box.svelte +67 -0
  69. package/dist/forms/time-box/time-box.svelte.d.ts +12 -0
  70. package/dist/forms/url-box/url-box.svelte +32 -18
  71. package/dist/forms/url-box/url-box.svelte.d.ts +9 -20
  72. package/dist/forms/validation.d.ts +60 -0
  73. package/dist/forms/validation.js +123 -0
  74. package/dist/generic/address/address.svelte +22 -13
  75. package/dist/generic/address/address.svelte.d.ts +9 -19
  76. package/dist/generic/avatar/avatar.svelte +86 -0
  77. package/dist/generic/avatar/avatar.svelte.d.ts +10 -0
  78. package/dist/generic/badge/badge.svelte +82 -0
  79. package/dist/generic/badge/badge.svelte.d.ts +11 -0
  80. package/dist/generic/card/card-container.svelte +41 -13
  81. package/dist/generic/card/card-container.svelte.d.ts +8 -18
  82. package/dist/generic/card/card.svelte +47 -29
  83. package/dist/generic/card/card.svelte.d.ts +9 -19
  84. package/dist/generic/card/index.d.ts +3 -0
  85. package/dist/generic/card/index.js +2 -0
  86. package/dist/generic/chip/chip.svelte +90 -0
  87. package/dist/generic/chip/chip.svelte.d.ts +11 -0
  88. package/dist/generic/date/date-time.svelte +86 -64
  89. package/dist/generic/date/date-time.svelte.d.ts +10 -20
  90. package/dist/generic/divider/divider.svelte.d.ts +22 -19
  91. package/dist/generic/dot/dot.svelte +13 -4
  92. package/dist/generic/dot/dot.svelte.d.ts +7 -17
  93. package/dist/generic/dropdown-item/dropdown-item.svelte +24 -12
  94. package/dist/generic/dropdown-item/dropdown-item.svelte.d.ts +10 -21
  95. package/dist/generic/email/email.svelte +6 -4
  96. package/dist/generic/email/email.svelte.d.ts +5 -15
  97. package/dist/generic/empty/empty.svelte +57 -26
  98. package/dist/generic/empty/empty.svelte.d.ts +11 -21
  99. package/dist/generic/header/header.svelte +26 -10
  100. package/dist/generic/header/header.svelte.d.ts +10 -20
  101. package/dist/generic/index.d.ts +28 -0
  102. package/dist/generic/index.js +31 -0
  103. package/dist/generic/link/link.svelte +20 -7
  104. package/dist/generic/link/link.svelte.d.ts +11 -21
  105. package/dist/generic/list/index.d.ts +4 -0
  106. package/dist/generic/list/index.js +3 -0
  107. package/dist/generic/list/list-item.svelte +17 -13
  108. package/dist/generic/list/list-item.svelte.d.ts +6 -15
  109. package/dist/generic/list/list.d.ts +2 -2
  110. package/dist/generic/list/list.svelte +28 -15
  111. package/dist/generic/list/list.svelte.d.ts +9 -19
  112. package/dist/generic/menu/menu.svelte +163 -57
  113. package/dist/generic/menu/menu.svelte.d.ts +16 -24
  114. package/dist/generic/notice/notice.svelte +119 -81
  115. package/dist/generic/notice/notice.svelte.d.ts +17 -26
  116. package/dist/generic/overlay.svelte +40 -14
  117. package/dist/generic/overlay.svelte.d.ts +9 -19
  118. package/dist/generic/panel/panel.svelte +16 -6
  119. package/dist/generic/panel/panel.svelte.d.ts +8 -18
  120. package/dist/generic/phone/phone.svelte +30 -24
  121. package/dist/generic/phone/phone.svelte.d.ts +6 -16
  122. package/dist/generic/pill/pill.svelte +47 -33
  123. package/dist/generic/pill/pill.svelte.d.ts +10 -21
  124. package/dist/generic/popover/popover.svelte +226 -0
  125. package/dist/generic/popover/popover.svelte.d.ts +15 -0
  126. package/dist/generic/rating/rating.svelte +85 -0
  127. package/dist/generic/rating/rating.svelte.d.ts +11 -0
  128. package/dist/generic/scorecard/scorecard.svelte +34 -21
  129. package/dist/generic/scorecard/scorecard.svelte.d.ts +9 -19
  130. package/dist/generic/section/section.svelte +28 -9
  131. package/dist/generic/section/section.svelte.d.ts +11 -21
  132. package/dist/generic/spinner/spinner.svelte +64 -0
  133. package/dist/generic/spinner/spinner.svelte.d.ts +8 -0
  134. package/dist/generic/theme-provider/index.d.ts +1 -0
  135. package/dist/generic/theme-provider/index.js +1 -0
  136. package/dist/generic/theme-provider/theme-provider-demo.svelte +182 -0
  137. package/dist/generic/theme-provider/theme-provider-demo.svelte.d.ts +3 -0
  138. package/dist/generic/theme-provider/theme-provider.svelte +83 -0
  139. package/dist/generic/theme-provider/theme-provider.svelte.d.ts +44 -0
  140. package/dist/generic/toaster/toaster.svelte +31 -6
  141. package/dist/generic/toaster/toaster.svelte.d.ts +7 -15
  142. package/dist/generic/tooltip/tooltip.svelte +389 -0
  143. package/dist/generic/tooltip/tooltip.svelte.d.ts +21 -0
  144. package/dist/helpers/ago.d.ts +7 -1
  145. package/dist/helpers/ago.js +6 -0
  146. package/dist/helpers/animation-actions.d.ts +124 -0
  147. package/dist/helpers/animation-actions.js +299 -0
  148. package/dist/helpers/animations.d.ts +198 -0
  149. package/dist/helpers/animations.js +280 -0
  150. package/dist/helpers/announcer.d.ts +118 -0
  151. package/dist/helpers/announcer.js +250 -0
  152. package/dist/helpers/copy-to-clipboard.svelte.d.ts +5 -0
  153. package/dist/helpers/copy-to-clipboard.svelte.js +28 -0
  154. package/dist/helpers/debounce.d.ts +7 -0
  155. package/dist/helpers/debounce.js +7 -0
  156. package/dist/helpers/focus.d.ts +123 -0
  157. package/dist/helpers/focus.js +335 -0
  158. package/dist/helpers/fuzzy-search.d.ts +41 -0
  159. package/dist/helpers/fuzzy-search.js +114 -0
  160. package/dist/helpers/index.d.ts +24 -0
  161. package/dist/helpers/index.js +24 -0
  162. package/dist/helpers/navigate-to.d.ts +4 -0
  163. package/dist/helpers/navigate-to.js +4 -0
  164. package/dist/helpers/positioning.d.ts +97 -0
  165. package/dist/helpers/positioning.js +230 -0
  166. package/dist/helpers/round-to-decimals.d.ts +7 -5
  167. package/dist/helpers/round-to-decimals.js +7 -5
  168. package/dist/helpers/spring.svelte.d.ts +97 -0
  169. package/dist/helpers/spring.svelte.js +216 -0
  170. package/dist/helpers/subscribable.d.ts +1 -2
  171. package/dist/helpers/theme.svelte.d.ts +63 -0
  172. package/dist/helpers/theme.svelte.js +123 -0
  173. package/dist/helpers/unique-id.d.ts +4 -0
  174. package/dist/helpers/unique-id.js +4 -0
  175. package/dist/helpers/use-position.svelte.d.ts +96 -0
  176. package/dist/helpers/use-position.svelte.js +189 -0
  177. package/dist/helpers/use-virtual-list.svelte.d.ts +121 -0
  178. package/dist/helpers/use-virtual-list.svelte.js +239 -0
  179. package/dist/icons/angle-right-icon.svelte +2 -1
  180. package/dist/icons/angle-right-icon.svelte.d.ts +16 -12
  181. package/dist/icons/angle-up-icon.svelte.d.ts +22 -19
  182. package/dist/icons/check-icon.svelte.d.ts +22 -19
  183. package/dist/icons/copy-icon.svelte +46 -0
  184. package/dist/icons/copy-icon.svelte.d.ts +6 -0
  185. package/dist/icons/envelope-icon.svelte.d.ts +22 -19
  186. package/dist/icons/folder-open-icon.svelte.d.ts +22 -19
  187. package/dist/icons/hamburger-icon.svelte.d.ts +22 -19
  188. package/dist/icons/home-icon.svelte +2 -1
  189. package/dist/icons/home-icon.svelte.d.ts +16 -12
  190. package/dist/icons/index.d.ts +13 -0
  191. package/dist/icons/index.js +13 -0
  192. package/dist/icons/link-icon.svelte.d.ts +22 -19
  193. package/dist/icons/mobile-phone-icon.svelte.d.ts +22 -19
  194. package/dist/icons/phone-icon.svelte.d.ts +22 -19
  195. package/dist/icons/svg-icon.svelte +46 -12
  196. package/dist/icons/svg-icon.svelte.d.ts +13 -23
  197. package/dist/icons/upload-icon.svelte.d.ts +22 -19
  198. package/dist/images/icon.svelte +9 -3
  199. package/dist/images/icon.svelte.d.ts +6 -16
  200. package/dist/images/image.svelte +28 -10
  201. package/dist/images/image.svelte.d.ts +14 -26
  202. package/dist/images/index.d.ts +2 -0
  203. package/dist/images/index.js +2 -0
  204. package/dist/index.d.ts +13 -122
  205. package/dist/index.js +27 -135
  206. package/dist/layout/flex-col.svelte +65 -22
  207. package/dist/layout/flex-col.svelte.d.ts +12 -22
  208. package/dist/layout/flex-item.svelte +13 -3
  209. package/dist/layout/flex-item.svelte.d.ts +8 -18
  210. package/dist/layout/flex-row.svelte +70 -21
  211. package/dist/layout/flex-row.svelte.d.ts +14 -24
  212. package/dist/layout/grid.svelte +7 -1
  213. package/dist/layout/grid.svelte.d.ts +6 -26
  214. package/dist/layout/index.d.ts +4 -0
  215. package/dist/layout/index.js +4 -0
  216. package/dist/modals/alert.svelte +42 -28
  217. package/dist/modals/alert.svelte.d.ts +13 -24
  218. package/dist/modals/confirm.svelte +54 -37
  219. package/dist/modals/confirm.svelte.d.ts +16 -27
  220. package/dist/modals/dialog-body.svelte +10 -4
  221. package/dist/modals/dialog-body.svelte.d.ts +6 -26
  222. package/dist/modals/dialog-close-button.svelte +15 -9
  223. package/dist/modals/dialog-close-button.svelte.d.ts +6 -17
  224. package/dist/modals/dialog-footer.svelte +6 -3
  225. package/dist/modals/dialog-footer.svelte.d.ts +6 -26
  226. package/dist/modals/dialog-header.svelte +13 -1
  227. package/dist/modals/dialog-header.svelte.d.ts +7 -26
  228. package/dist/modals/dialog-window.svelte +42 -14
  229. package/dist/modals/dialog-window.svelte.d.ts +9 -17
  230. package/dist/modals/index.d.ts +9 -0
  231. package/dist/modals/index.js +9 -0
  232. package/dist/modals/modal.svelte +88 -25
  233. package/dist/modals/modal.svelte.d.ts +14 -22
  234. package/dist/modals/prompt.svelte +71 -50
  235. package/dist/modals/prompt.svelte.d.ts +19 -30
  236. package/dist/navigation/accordion/accordion.svelte +104 -0
  237. package/dist/navigation/accordion/accordion.svelte.d.ts +9 -0
  238. package/dist/navigation/app-bar/app-bar.svelte +26 -20
  239. package/dist/navigation/app-bar/app-bar.svelte.d.ts +10 -20
  240. package/dist/navigation/app-bar/app-branding.svelte +10 -5
  241. package/dist/navigation/app-bar/app-branding.svelte.d.ts +6 -15
  242. package/dist/navigation/app-bar/app-logo.svelte +20 -5
  243. package/dist/navigation/app-bar/app-logo.svelte.d.ts +9 -19
  244. package/dist/navigation/app-bar/app-nav-item.svelte +26 -14
  245. package/dist/navigation/app-bar/app-nav-item.svelte.d.ts +9 -20
  246. package/dist/navigation/app-bar/app-nav.svelte +39 -12
  247. package/dist/navigation/app-bar/app-nav.svelte.d.ts +8 -18
  248. package/dist/navigation/app-bar/index.d.ts +5 -0
  249. package/dist/navigation/app-bar/index.js +5 -0
  250. package/dist/navigation/breadcrumbs/breadcrumbs.svelte +54 -28
  251. package/dist/navigation/breadcrumbs/breadcrumbs.svelte.d.ts +12 -21
  252. package/dist/navigation/command-palette/command-palette.svelte +758 -0
  253. package/dist/navigation/command-palette/command-palette.svelte.d.ts +65 -0
  254. package/dist/navigation/command-palette/index.d.ts +2 -0
  255. package/dist/navigation/command-palette/index.js +1 -0
  256. package/dist/navigation/context-menu/README.md +146 -0
  257. package/dist/navigation/context-menu/context-menu-divider.svelte +21 -0
  258. package/dist/navigation/context-menu/context-menu-divider.svelte.d.ts +18 -0
  259. package/dist/navigation/context-menu/context-menu-item.svelte +268 -0
  260. package/dist/navigation/context-menu/context-menu-item.svelte.d.ts +19 -0
  261. package/dist/navigation/context-menu/context-menu.svelte +226 -0
  262. package/dist/navigation/context-menu/context-menu.svelte.d.ts +38 -0
  263. package/dist/navigation/context-menu/index.d.ts +3 -0
  264. package/dist/navigation/context-menu/index.js +3 -0
  265. package/dist/navigation/drawer/drawer.svelte +137 -0
  266. package/dist/navigation/drawer/drawer.svelte.d.ts +11 -0
  267. package/dist/navigation/dropdown-button/dropdown-button.svelte +58 -20
  268. package/dist/navigation/dropdown-button/dropdown-button.svelte.d.ts +10 -20
  269. package/dist/navigation/index.d.ts +11 -0
  270. package/dist/navigation/index.js +14 -0
  271. package/dist/navigation/pagination/pagination.svelte +55 -42
  272. package/dist/navigation/pagination/pagination.svelte.d.ts +10 -21
  273. package/dist/navigation/side-bar/side-bar.svelte +18 -9
  274. package/dist/navigation/side-bar/side-bar.svelte.d.ts +7 -17
  275. package/dist/navigation/tabs/index.d.ts +4 -0
  276. package/dist/navigation/tabs/index.js +3 -0
  277. package/dist/navigation/tabs/tab-context.d.ts +12 -6
  278. package/dist/navigation/tabs/tab-group.svelte +268 -55
  279. package/dist/navigation/tabs/tab-group.svelte.d.ts +9 -20
  280. package/dist/navigation/tabs/tab.svelte +64 -34
  281. package/dist/navigation/tabs/tab.svelte.d.ts +11 -22
  282. package/dist/navigation/wizard/index.d.ts +3 -0
  283. package/dist/navigation/wizard/index.js +2 -0
  284. package/dist/navigation/wizard/wizard-context.d.ts +13 -8
  285. package/dist/navigation/wizard/wizard-step.svelte +38 -15
  286. package/dist/navigation/wizard/wizard-step.svelte.d.ts +8 -18
  287. package/dist/navigation/wizard/wizard.svelte +123 -89
  288. package/dist/navigation/wizard/wizard.svelte.d.ts +15 -26
  289. package/dist/placeholders/index.d.ts +6 -0
  290. package/dist/placeholders/index.js +6 -0
  291. package/dist/placeholders/loading.svelte +39 -23
  292. package/dist/placeholders/loading.svelte.d.ts +10 -17
  293. package/dist/placeholders/progress.svelte +7 -6
  294. package/dist/placeholders/progress.svelte.d.ts +5 -15
  295. package/dist/placeholders/skeleton-input.svelte +66 -38
  296. package/dist/placeholders/skeleton-input.svelte.d.ts +5 -15
  297. package/dist/placeholders/skeleton-paragraph.svelte +25 -0
  298. package/dist/placeholders/skeleton-paragraph.svelte.d.ts +8 -0
  299. package/dist/placeholders/skeleton-table.svelte +75 -0
  300. package/dist/placeholders/skeleton-table.svelte.d.ts +8 -0
  301. package/dist/placeholders/skeleton-text.svelte +46 -16
  302. package/dist/placeholders/skeleton-text.svelte.d.ts +7 -17
  303. package/dist/tables/cell-renderers.d.ts +24 -0
  304. package/dist/tables/cell-renderers.js +228 -0
  305. package/dist/tables/data-grid.svelte +332 -135
  306. package/dist/tables/data-grid.svelte.d.ts +34 -33
  307. package/dist/tables/index.d.ts +10 -0
  308. package/dist/tables/index.js +12 -0
  309. package/dist/tables/table-caption.svelte +13 -4
  310. package/dist/tables/table-caption.svelte.d.ts +8 -18
  311. package/dist/tables/table-cell.svelte +45 -15
  312. package/dist/tables/table-cell.svelte.d.ts +10 -19
  313. package/dist/tables/table-context.svelte.d.ts +32 -0
  314. package/dist/tables/table-context.svelte.js +160 -0
  315. package/dist/tables/table-header-cell.svelte +158 -19
  316. package/dist/tables/table-header-cell.svelte.d.ts +15 -19
  317. package/dist/tables/table-header.svelte +31 -6
  318. package/dist/tables/table-header.svelte.d.ts +7 -26
  319. package/dist/tables/table-row.svelte +87 -7
  320. package/dist/tables/table-row.svelte.d.ts +10 -26
  321. package/dist/tables/table.svelte +61 -2
  322. package/dist/tables/table.svelte.d.ts +13 -26
  323. package/dist/test-utils/accessibility-helpers.d.ts +80 -0
  324. package/dist/test-utils/accessibility-helpers.js +220 -0
  325. package/dist/test-utils/index.d.ts +8 -0
  326. package/dist/test-utils/index.js +8 -0
  327. package/dist/test-utils/mock-helpers.d.ts +68 -0
  328. package/dist/test-utils/mock-helpers.js +165 -0
  329. package/dist/test-utils/render-helpers.d.ts +55 -0
  330. package/dist/test-utils/render-helpers.js +114 -0
  331. package/dist/test-utils/setup.d.ts +5 -0
  332. package/dist/test-utils/setup.js +91 -0
  333. package/dist/test-utils/test-data.d.ts +102 -0
  334. package/dist/test-utils/test-data.js +99 -0
  335. package/dist/timeline/index.d.ts +2 -0
  336. package/dist/timeline/index.js +2 -0
  337. package/dist/timeline/timeline-item.svelte +26 -9
  338. package/dist/timeline/timeline-item.svelte.d.ts +13 -23
  339. package/dist/timeline/timeline.svelte +12 -6
  340. package/dist/timeline/timeline.svelte.d.ts +6 -26
  341. package/dist/types/data.d.ts +61 -0
  342. package/dist/types/date.d.ts +1 -1
  343. package/dist/types/form.d.ts +20 -2
  344. package/dist/types/index.d.ts +5 -0
  345. package/dist/types/index.js +5 -0
  346. package/dist/types/size.d.ts +22 -0
  347. package/dist/types/size.js +22 -0
  348. package/dist/typography/code-block.svelte +89 -10
  349. package/dist/typography/code-block.svelte.d.ts +7 -17
  350. package/dist/typography/code.svelte +89 -0
  351. package/dist/typography/code.svelte.d.ts +7 -0
  352. package/dist/typography/headline.svelte +29 -9
  353. package/dist/typography/headline.svelte.d.ts +8 -18
  354. package/dist/typography/index.d.ts +6 -0
  355. package/dist/typography/index.js +6 -0
  356. package/dist/typography/paragraph.svelte +18 -10
  357. package/dist/typography/paragraph.svelte.d.ts +6 -26
  358. package/dist/typography/subtitle.svelte +18 -4
  359. package/dist/typography/subtitle.svelte.d.ts +8 -18
  360. package/dist/typography/text.svelte +20 -5
  361. package/dist/typography/text.svelte.d.ts +9 -19
  362. package/package.json +46 -36
  363. package/dist/navigation/accordian/accordian.svelte +0 -62
  364. package/dist/navigation/accordian/accordian.svelte.d.ts +0 -19
  365. package/dist/tables/table-body.svelte +0 -3
  366. package/dist/tables/table-body.svelte.d.ts +0 -27
  367. package/dist/tables/table-footer-cell.svelte +0 -22
  368. package/dist/tables/table-footer-cell.svelte.d.ts +0 -18
  369. package/dist/tables/table-footer-row.svelte +0 -3
  370. package/dist/tables/table-footer-row.svelte.d.ts +0 -27
  371. package/dist/tables/table-footer.svelte +0 -13
  372. package/dist/tables/table-footer.svelte.d.ts +0 -27
  373. package/dist/tables/table-header-row.svelte +0 -4
  374. package/dist/tables/table-header-row.svelte.d.ts +0 -27
package/README.md CHANGED
@@ -1,31 +1,158 @@
1
1
  ![Sveltacular](https://raw.githubusercontent.com/jasonbyrne/sveltacular/main/static/sveltacular.png)
2
2
 
3
- Sveltacular is TypeScript and SASS based component library for Svelte, with no other dependencies.
3
+ Sveltacular is a TypeScript and SASS based component library for Svelte 5, with no other dependencies.
4
4
 
5
- Why did I create it when there are other options? Well, mainly because the best options out there were based on Tailwind. And, no disrespect to those who love it, but I didn't want to use Tailwind. So since I didn't find what I was loooking for, I made my own.
5
+ Why did I create it when there are other options? Well, mainly because the best options out there were based on Tailwind. And, no disrespect to those who love it, but I didn't want to use Tailwind. So since I didn't find what I was looking for, I made my own.
6
6
 
7
- ## Run Storybook
8
-
9
- I don't have great documentation for now, but you can browse all of the available components by running Storybook locally. Check out the repo and then run this command:
10
-
11
- ```bash
12
- npm run storybook
13
- ```
14
-
15
- ## Usage
16
-
17
- Install it in your project
7
+ ## Installation
18
8
 
19
9
  ```bash
20
10
  npm i sveltacular
21
11
  ```
22
12
 
23
- Then use it like this:
13
+ ## Quick Start
24
14
 
25
15
  ```svelte
26
16
  <script lang="ts">
27
17
  import { Button } from 'sveltacular';
28
18
  </script>
29
19
 
30
- <Button>Hello World</Button>
20
+ <Button variant="primary" label="Hello World" />
21
+ ```
22
+
23
+ ## Component Catalog
24
+
25
+ ### Forms
26
+ - **Button** - Multiple variants (primary, secondary, positive, danger, outline)
27
+ - **TextBox** - Text input with validation and formatting options
28
+ - **NumberBox** - Number input with min/max/decimals
29
+ - **TextArea** - Multi-line text input
30
+ - **CheckBox** / **CheckBoxGroup** - Checkbox inputs
31
+ - **RadioGroup** / **RadioBox** - Radio button inputs
32
+ - **ListBox** - Dropdown/select with search
33
+ - **DateBox** - Date picker
34
+ - **TimeBox** - Time picker
35
+ - **PhoneBox** - Phone number input
36
+ - **FileBox** / **FileArea** - File upload
37
+ - **Slider** - Range slider input
38
+ - **Form** - Form container with validation
39
+
40
+ ### Generic Components
41
+ - **Card** - Card container
42
+ - **Pill** - Badge/pill component
43
+ - **Badge** - Notification badge
44
+ - **Avatar** - User avatar with initials fallback
45
+ - **Tooltip** - Hover tooltip
46
+ - **Popover** - Popover dialog
47
+ - **Spinner** - Loading spinner
48
+ - **Rating** - Star rating component
49
+ - **Chip** - Removable tag/chip
50
+ - **Notice** - Alert/notice component
51
+ - **Menu** - Dropdown menu
52
+ - **List** - Styled list component
53
+
54
+ ### Navigation
55
+ - **AppBar** - Application bar
56
+ - **SideBar** - Side navigation
57
+ - **Breadcrumbs** - Breadcrumb navigation
58
+ - **Tabs** - Tab navigation
59
+ - **Accordion** - Collapsible sections
60
+ - **Wizard** - Multi-step wizard
61
+ - **Pagination** - Page navigation
62
+ - **Drawer** - Slide-out drawer
63
+
64
+ ### Modals
65
+ - **Modal** - Generic modal dialog
66
+ - **Alert** - Alert dialog
67
+ - **Confirm** - Confirmation dialog
68
+ - **Prompt** - Input prompt dialog
69
+
70
+ ### Tables
71
+ - **Table** - Table component with header/body/footer
72
+ - **DataGrid** - Advanced data grid
73
+
74
+ ### Typography
75
+ - **Headline** - Heading component
76
+ - **Subtitle** - Subtitle component
77
+ - **Text** - Text component
78
+ - **Paragraph** - Paragraph component
79
+ - **CodeBlock** - Code block
80
+
81
+ ### Layout
82
+ - **FlexRow** / **FlexCol** - Flexbox layout
83
+ - **Grid** - Grid layout
84
+
85
+ ## Import Patterns
86
+
87
+ Sveltacular supports multiple import patterns for flexibility:
88
+
89
+ ```typescript
90
+ // Root-level imports (all components)
91
+ import { Button, Card, Modal } from 'sveltacular';
92
+
93
+ // Category-level imports
94
+ import { Button, TextBox, Form } from 'sveltacular/forms';
95
+ import { Card, Badge, Avatar } from 'sveltacular/generic';
96
+ import { AppBar, Tabs, Wizard } from 'sveltacular/navigation';
97
+
98
+ // Component-level imports
99
+ import { Button } from 'sveltacular/forms/button';
100
+ import { CheckBox, CheckBoxGroup } from 'sveltacular/forms/check-box';
101
+ ```
102
+
103
+ ## Theming
104
+
105
+ Sveltacular uses CSS variables for theming. See [THEMING.md](./THEMING.md) for a complete list of available CSS variables.
106
+
107
+ Example:
108
+
109
+ ```css
110
+ :root {
111
+ --button-primary-bg: #1e88e5;
112
+ --form-input-border: #e0e0e0;
113
+ --base-color-bg: #ffffff;
114
+ }
115
+ ```
116
+
117
+ ## Form Validation
118
+
119
+ Sveltacular includes a validation system:
120
+
121
+ ```typescript
122
+ import { createValidationRules, validate } from 'sveltacular/forms/validation';
123
+
124
+ const rules = [
125
+ createValidationRules.required('Name is required'),
126
+ createValidationRules.minLength(3, 'Must be at least 3 characters'),
127
+ createValidationRules.email('Invalid email address')
128
+ ];
129
+
130
+ const result = validate(emailValue, rules);
131
+ if (!result.isValid) {
132
+ console.error(result.message);
133
+ }
31
134
  ```
135
+
136
+ ## Accessibility
137
+
138
+ Sveltacular components include:
139
+ - ARIA attributes for screen readers
140
+ - Keyboard navigation support
141
+ - Focus management utilities
142
+ - Semantic HTML structure
143
+
144
+ ## Run Storybook
145
+
146
+ Browse all available components and their props by running Storybook locally:
147
+
148
+ ```bash
149
+ npm run storybook
150
+ ```
151
+
152
+ ## Contributing
153
+
154
+ Contributions are welcome! Please see the contributing guidelines (coming soon).
155
+
156
+ ## License
157
+
158
+ MIT
@@ -0,0 +1,99 @@
1
+ <script lang="ts">
2
+ import type { Snippet } from 'svelte';
3
+ import type { FormFieldSizeOptions } from '../types/form.js';
4
+
5
+ let {
6
+ id,
7
+ disabled = false,
8
+ error = false,
9
+ prefix = undefined,
10
+ suffix = undefined,
11
+ helperText = undefined,
12
+ errorMessage = undefined,
13
+ inputElement,
14
+ labelElement
15
+ }: {
16
+ id: string;
17
+ disabled?: boolean;
18
+ error?: boolean;
19
+ prefix?: string | undefined;
20
+ suffix?: string | undefined;
21
+ helperText?: string | undefined;
22
+ errorMessage?: string | undefined;
23
+ inputElement: Snippet;
24
+ labelElement?: Snippet | undefined;
25
+ } = $props();
26
+ </script>
27
+
28
+ {#if labelElement}
29
+ {@render labelElement()}
30
+ {/if}
31
+ <div class="input {disabled ? 'disabled' : 'enabled'} {error ? 'error' : ''}">
32
+ {#if prefix}
33
+ <div class="prefix">{prefix}</div>
34
+ {/if}
35
+ {@render inputElement()}
36
+ {#if suffix}
37
+ <div class="suffix">{suffix}</div>
38
+ {/if}
39
+ </div>
40
+ {#if errorMessage}
41
+ <div class="error-text">{errorMessage}</div>
42
+ {:else if helperText}
43
+ <div class="helper-text">{helperText}</div>
44
+ {/if}
45
+
46
+ <style>.input {
47
+ display: flex;
48
+ align-items: center;
49
+ justify-content: flex-start;
50
+ position: relative;
51
+ width: 100%;
52
+ height: 100%;
53
+ border-radius: var(--radius-md);
54
+ border: var(--border-thin) solid var(--form-input-border);
55
+ background-color: var(--form-input-bg);
56
+ color: var(--form-input-fg);
57
+ font-size: var(--font-md);
58
+ font-weight: 500;
59
+ line-height: 2rem;
60
+ transition: background-color var(--transition-base) var(--ease-in-out), border-color var(--transition-base) var(--ease-in-out), color var(--transition-base) var(--ease-in-out), fill var(--transition-base) var(--ease-in-out), stroke var(--transition-base) var(--ease-in-out);
61
+ user-select: none;
62
+ white-space: nowrap;
63
+ }
64
+ .input.disabled {
65
+ opacity: 0.5;
66
+ }
67
+ .input.error {
68
+ border-color: var(--form-input-border-error);
69
+ }
70
+ .input .prefix,
71
+ .input .suffix {
72
+ font-size: var(--font-md);
73
+ line-height: 2rem;
74
+ padding-left: var(--spacing-base);
75
+ padding-right: var(--spacing-base);
76
+ background-color: var(--form-input-accent-bg);
77
+ color: var(--form-input-accent-fg);
78
+ }
79
+ .input .prefix {
80
+ border-right: var(--border-thin) solid var(--form-input-border);
81
+ }
82
+ .input .suffix {
83
+ border-left: var(--border-thin) solid var(--form-input-border);
84
+ }
85
+
86
+ .helper-text {
87
+ font-size: var(--font-sm);
88
+ line-height: 1.25rem;
89
+ padding: var(--spacing-xs);
90
+ color: var(--form-input-helper-text-fg);
91
+ }
92
+
93
+ .error-text {
94
+ font-size: var(--font-sm);
95
+ line-height: 1.25rem;
96
+ padding: var(--spacing-xs);
97
+ color: var(--form-input-error-fg);
98
+ }</style>
99
+
@@ -0,0 +1,15 @@
1
+ import type { Snippet } from 'svelte';
2
+ type $$ComponentProps = {
3
+ id: string;
4
+ disabled?: boolean;
5
+ error?: boolean;
6
+ prefix?: string | undefined;
7
+ suffix?: string | undefined;
8
+ helperText?: string | undefined;
9
+ errorMessage?: string | undefined;
10
+ inputElement: Snippet;
11
+ labelElement?: Snippet | undefined;
12
+ };
13
+ declare const BaseInputWrapper: import("svelte").Component<$$ComponentProps, {}, "">;
14
+ type BaseInputWrapper = ReturnType<typeof BaseInputWrapper>;
15
+ export default BaseInputWrapper;
@@ -1,19 +1,32 @@
1
- <script>import { createEventDispatcher } from "svelte";
2
- import ListBox from "../list-box/list-box.svelte";
3
- const dispatch = createEventDispatcher();
4
- export let value = false;
5
- export let options = ["Yes", "No"];
6
- export let size = "md";
7
- let stringValue = value ? "true" : "false";
8
- const onChange = () => {
9
- value = stringValue == "true";
10
- dispatch("change", value);
11
- };
12
- $:
13
- items = [
14
- { value: "true", name: options[0] },
15
- { value: "false", name: options[1] }
16
- ];
1
+ <script lang="ts">
2
+ import ListBox from '../list-box/list-box.svelte';
3
+ import type { FormFieldSizeOptions } from '../../index.js';
4
+
5
+ let {
6
+ value = $bindable(false),
7
+ options = ['Yes', 'No'] as [yes: string, no: string],
8
+ size = 'md' as FormFieldSizeOptions,
9
+ onChange = undefined,
10
+ label = undefined
11
+ }: {
12
+ value?: boolean;
13
+ options?: [yes: string, no: string];
14
+ size?: FormFieldSizeOptions;
15
+ onChange?: ((value: boolean) => void) | undefined;
16
+ label?: string;
17
+ } = $props();
18
+
19
+ let stringValue = $state(value ? 'true' : 'false');
20
+
21
+ const handleChange = () => {
22
+ value = stringValue == 'true';
23
+ onChange?.(value);
24
+ };
25
+
26
+ let items = $derived([
27
+ { value: 'true', name: options[0] },
28
+ { value: 'false', name: options[1] }
29
+ ]);
17
30
  </script>
18
31
 
19
- <ListBox {items} bind:value={stringValue} {size} on:change={onChange}><slot /></ListBox>
32
+ <ListBox {items} bind:value={stringValue} {size} onChange={handleChange} {label} />
@@ -1,23 +1,11 @@
1
- import { SvelteComponent } from "svelte";
2
1
  import type { FormFieldSizeOptions } from '../../index.js';
3
- declare const __propDef: {
4
- props: {
5
- value?: boolean | undefined;
6
- options?: [yes: string, no: string] | undefined;
7
- size?: FormFieldSizeOptions | undefined;
8
- };
9
- events: {
10
- change: CustomEvent<boolean>;
11
- } & {
12
- [evt: string]: CustomEvent<any>;
13
- };
14
- slots: {
15
- default: {};
16
- };
2
+ type $$ComponentProps = {
3
+ value?: boolean;
4
+ options?: [yes: string, no: string];
5
+ size?: FormFieldSizeOptions;
6
+ onChange?: ((value: boolean) => void) | undefined;
7
+ label?: string;
17
8
  };
18
- export type BoolBoxProps = typeof __propDef.props;
19
- export type BoolBoxEvents = typeof __propDef.events;
20
- export type BoolBoxSlots = typeof __propDef.slots;
21
- export default class BoolBox extends SvelteComponent<BoolBoxProps, BoolBoxEvents, BoolBoxSlots> {
22
- }
23
- export {};
9
+ declare const BoolBox: import("svelte").Component<$$ComponentProps, {}, "value">;
10
+ type BoolBox = ReturnType<typeof BoolBox>;
11
+ export default BoolBox;
@@ -1,61 +1,125 @@
1
- <script>import { navigateTo } from "../../helpers/navigate-to.js";
2
- import { createEventDispatcher } from "svelte";
3
- export let href = void 0;
4
- export let size = "md";
5
- export let style = "secondary";
6
- export let type = "button";
7
- export let block = false;
8
- export let flex = false;
9
- export let disabled = false;
10
- export let noMargin = false;
11
- export let collapse = false;
12
- export let repeatSubmitDelay = 500;
13
- const dispatch = createEventDispatcher();
14
- const click = (e) => {
15
- if (disabled) {
16
- e.preventDefault();
17
- e.stopPropagation();
18
- return;
19
- }
20
- dispatch("click");
21
- if (repeatSubmitDelay) {
22
- disabled = true;
23
- if (repeatSubmitDelay !== "infinite") {
24
- setTimeout(() => disabled = false, repeatSubmitDelay);
25
- }
26
- }
27
- if (href) {
28
- navigateTo(href);
29
- }
30
- };
1
+ <script lang="ts">
2
+ /**
3
+ * Button component with multiple variants and sizes
4
+ * @component
5
+ */
6
+ import type { Snippet } from 'svelte';
7
+ import { navigateTo } from '../../helpers/navigate-to.js';
8
+ import type { ButtonVariant, FormFieldSizeOptions } from '../../types/form.js';
9
+
10
+ let {
11
+ /** Button label text */
12
+ label,
13
+ /** Optional href for navigation */
14
+ href = undefined,
15
+ /** Button size */
16
+ size = 'md',
17
+ /** Button variant/style */
18
+ variant = 'secondary',
19
+ /** HTML button type */
20
+ type = 'button',
21
+ /** Display as block (full width) */
22
+ block = false,
23
+ /** Allow flex growth */
24
+ flex = false,
25
+ /** Disabled state */
26
+ disabled = $bindable(false),
27
+ /** Loading state */
28
+ loading = false,
29
+ /** ARIA label override */
30
+ ariaLabel = undefined,
31
+ /** Remove margins */
32
+ noMargin = false,
33
+ /** Collapse padding */
34
+ collapse = false,
35
+ /** Delay before re-enabling after click (prevents double-clicks) */
36
+ repeatSubmitDelay = 500,
37
+ /** Click handler */
38
+ onClick = undefined,
39
+ /** Optional children snippet */
40
+ children
41
+ }: {
42
+ label?: string;
43
+ href?: string | undefined;
44
+ size?: FormFieldSizeOptions;
45
+ variant?: ButtonVariant;
46
+ type?: 'button' | 'submit' | 'reset';
47
+ block?: boolean;
48
+ flex?: boolean;
49
+ disabled?: boolean;
50
+ loading?: boolean;
51
+ ariaLabel?: string | undefined;
52
+ noMargin?: boolean;
53
+ collapse?: boolean;
54
+ repeatSubmitDelay?: number | 'infinite';
55
+ onClick?: ((e?: Event) => void) | undefined;
56
+ children?: Snippet;
57
+ } = $props();
58
+
59
+ let isDisabled = $derived(disabled || loading);
60
+
61
+ const click = (e: Event) => {
62
+ if (isDisabled) {
63
+ e.preventDefault();
64
+ e.stopPropagation();
65
+ return;
66
+ }
67
+ onClick?.(e);
68
+ if (repeatSubmitDelay) {
69
+ disabled = true;
70
+ if (repeatSubmitDelay !== 'infinite') {
71
+ setTimeout(() => (disabled = false), repeatSubmitDelay);
72
+ }
73
+ }
74
+ if (href) {
75
+ navigateTo(href);
76
+ }
77
+ };
31
78
  </script>
32
79
 
33
- <button {type} on:click={click} class="{size} {style} {flex ? 'flex' : ''}" class:block class:noMargin class:collapse {disabled}>
34
- <slot />
80
+ <button
81
+ {type}
82
+ onclick={click}
83
+ class="{size} {variant} {flex ? 'flex' : ''}"
84
+ class:block
85
+ class:noMargin
86
+ class:collapse
87
+ class:loading
88
+ disabled={isDisabled}
89
+ aria-label={ariaLabel || label}
90
+ aria-busy={loading}
91
+ aria-disabled={isDisabled}
92
+ >
93
+ {#if loading}
94
+ <span class="loading-indicator" aria-hidden="true">⏳</span>
95
+ {/if}
96
+ {#if children}
97
+ {@render children()}
98
+ {:else if label}
99
+ <span class="label">{label}</span>
100
+ {/if}
35
101
  </button>
36
102
 
37
103
  <style>button {
38
104
  display: inline-block;
39
105
  min-width: 10rem;
40
106
  cursor: pointer;
41
- margin-top: 0.5rem;
42
- margin-bottom: 0.5rem;
43
- border-width: 1px;
107
+ margin-top: var(--spacing-sm);
108
+ margin-bottom: var(--spacing-sm);
109
+ border-width: var(--border-thin);
44
110
  border-style: solid;
45
- border-radius: 0.25rem;
46
- color: #e2e2e2;
47
- cursor: pointer;
48
- display: inline-block;
49
- font-size: 0.875rem;
111
+ border-radius: var(--radius-md);
112
+ color: var(--button-secondary-fg);
113
+ font-size: var(--font-base);
50
114
  font-weight: 500;
51
115
  line-height: 1.25rem;
52
- padding: 0.5rem 1rem;
116
+ padding: var(--spacing-sm) var(--spacing-base);
53
117
  text-align: center;
54
118
  text-decoration: none;
55
- transition: background-color 0.2s ease-in-out, border-color 0.2s ease-in-out, color 0.2s ease-in-out, fill 0.2s ease-in-out, stroke 0.2s ease-in-out;
119
+ transition: background-color var(--transition-base) var(--ease-in-out), border-color var(--transition-base) var(--ease-in-out), color var(--transition-base) var(--ease-in-out), fill var(--transition-base) var(--ease-in-out), stroke var(--transition-base) var(--ease-in-out);
56
120
  user-select: none;
57
121
  white-space: nowrap;
58
- font-family: var(--base-font-family, sans-serif);
122
+ font-family: var(--base-font-family);
59
123
  text-shadow: 0 0 0.125rem rgba(0, 0, 0, 0.5);
60
124
  }
61
125
  button[disabled] {
@@ -67,7 +131,7 @@ button.noMargin {
67
131
  }
68
132
  button.collapse {
69
133
  min-width: auto;
70
- padding: 0.5rem;
134
+ padding: var(--spacing-sm);
71
135
  }
72
136
  button.flex {
73
137
  flex-grow: 1;
@@ -77,91 +141,91 @@ button.block {
77
141
  width: 100%;
78
142
  }
79
143
  button.sm {
80
- font-size: 0.75rem;
144
+ font-size: var(--font-sm);
81
145
  line-height: 1rem;
82
- padding: 0.25rem 0.5rem;
146
+ padding: var(--spacing-xs) var(--spacing-sm);
83
147
  }
84
148
  button.lg {
85
- font-size: 1rem;
149
+ font-size: var(--font-md);
86
150
  line-height: 1.5rem;
87
- padding: 0.75rem 1.5rem;
151
+ padding: var(--spacing-md) var(--spacing-lg);
88
152
  }
89
153
  button.xl {
90
- font-size: 1.25rem;
154
+ font-size: var(--font-xl);
91
155
  line-height: 1.75rem;
92
- padding: 1rem 2rem;
156
+ padding: var(--spacing-base) var(--spacing-xl);
93
157
  }
94
158
  button.full {
95
159
  width: 100%;
96
- padding: 0.5rem 0;
160
+ padding: var(--spacing-sm) 0;
97
161
  display: block;
98
162
  min-width: auto;
99
163
  flex-grow: 1;
100
164
  }
101
165
  button:hover {
102
- background-color: #4c4c4c;
166
+ background-color: var(--gray-600);
167
+ }
168
+ button:active:not([disabled]) {
169
+ transform: scale(0.98);
170
+ }
171
+ @media (prefers-reduced-motion: no-preference) {
172
+ button {
173
+ transition: background-color var(--transition-base) var(--ease-in-out), border-color var(--transition-base) var(--ease-in-out), color var(--transition-base) var(--ease-in-out), fill var(--transition-base) var(--ease-in-out), stroke var(--transition-base) var(--ease-in-out), transform 0.1s cubic-bezier(0.4, 0, 0.2, 1);
174
+ }
103
175
  }
104
176
  button.primary {
105
- background-color: var(--button-primary-bg, #1e88e5);
106
- border-color: var(--button-primary-border, #1e88e5);
107
- color: var(--button-primary-fg, #fff);
177
+ background-color: var(--button-primary-bg);
178
+ border-color: var(--button-primary-border);
179
+ color: var(--button-primary-fg);
108
180
  }
109
181
  button.primary:hover {
110
- background-color: var(--button-primary-hover-bg, #0052a3);
111
- color: var(--button-primary-hover-fg, #fff);
182
+ background-color: var(--button-primary-hover-bg);
183
+ color: var(--button-primary-hover-fg);
112
184
  }
113
185
  button.secondary {
114
- background-color: var(--button-secondary-bg, #555);
115
- border-color: var(--button-secondary-border, #aaa);
116
- color: var(--button-secondary-fg, #fff);
186
+ background-color: var(--button-secondary-bg);
187
+ border-color: var(--button-secondary-border);
188
+ color: var(--button-secondary-fg);
117
189
  }
118
190
  button.secondary:hover {
119
- background-color: var(--button-secondary-hover-bg, #333);
120
- color: var(--button-secondary-hover-fg, #fff);
121
- }
122
- button.ghost {
123
- background-color: transparent;
124
- border-color: transparent;
125
- color: var(--base-fg, #ccc);
126
- text-decoration: none;
127
- }
128
- button.ghost:hover {
129
- background-color: var(--button-ghost-hover-bg, #e0e0e0);
130
- color: var(--button-ghost-hover-fg, #1e88e5);
191
+ background-color: var(--button-secondary-hover-bg);
192
+ color: var(--button-secondary-hover-fg);
131
193
  }
132
194
  button.positive {
133
- background-color: var(--button-positive-bg, #43a047);
134
- border-color: var(--button-positive-border, #43a047);
135
- color: var(--button-positive-fg, #fff);
195
+ background-color: var(--button-positive-bg);
196
+ border-color: var(--button-positive-border);
197
+ color: var(--button-positive-fg);
136
198
  }
137
199
  button.positive:hover {
138
- background-color: var(--button-positive-hover-bg, #388e3c);
139
- color: var(--button-positive-hover-fg, #fff);
200
+ background-color: var(--button-positive-hover-bg);
201
+ color: var(--button-positive-hover-fg);
140
202
  }
141
203
  button.danger {
142
- background-color: var(--button-danger-bg, #e53935);
143
- border-color: var(--button-danger-border, #e53935);
144
- color: var(--button-danger-fg, #fff);
204
+ background-color: var(--button-danger-bg);
205
+ border-color: var(--button-danger-border);
206
+ color: var(--button-danger-fg);
145
207
  }
146
208
  button.danger:hover {
147
- background-color: var(--button-danger-hover-bg, #c62828);
148
- color: var(--button-danger-hover-fg, #fff);
209
+ background-color: var(--button-danger-hover-bg);
210
+ color: var(--button-danger-hover-fg);
149
211
  }
150
212
  button.outline {
151
- background-color: transparent;
152
- border-color: var(--button-outline-border, #e2e2e2);
153
- color: var(--button-outline-fg, #e2e2e2);
213
+ background-color: var(--body-bg);
214
+ border-color: var(--gray-400);
215
+ color: var(--body-fg);
216
+ text-shadow: none;
217
+ font-weight: 400;
154
218
  }
155
219
  button.outline:hover {
156
- background-color: var(--button-outline-hover-bg, #e2e2e2);
157
- color: var(--button-outline-hover-fg, #000);
220
+ background-color: var(--button-outline-hover-bg);
221
+ color: var(--button-outline-hover-fg);
158
222
  }
159
223
  button.link {
160
224
  background-color: transparent;
161
225
  border-color: transparent;
162
- color: var(--base-link-fg, #1e88e5);
226
+ color: var(--base-link-fg);
163
227
  text-decoration: underline;
164
228
  }
165
229
  button.link:hover {
166
- color: var(--base-link-hover-fg, #1e88e5);
230
+ color: var(--base-link-hover-fg);
167
231
  }</style>