webcoreui 1.4.0 → 1.5.0-beta.1

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 (262) hide show
  1. package/README.md +15 -1
  2. package/astro.d.ts +62 -56
  3. package/astro.js +4 -0
  4. package/components/Accordion/Accordion.astro +1 -1
  5. package/components/Accordion/Accordion.svelte +60 -58
  6. package/components/Accordion/Accordion.tsx +3 -1
  7. package/components/Alert/Alert.astro +2 -1
  8. package/components/Alert/Alert.svelte +12 -5
  9. package/components/Alert/Alert.tsx +10 -3
  10. package/components/Alert/alert.ts +2 -18
  11. package/components/AspectRatio/AspectRatio.astro +1 -1
  12. package/components/AspectRatio/AspectRatio.svelte +27 -22
  13. package/components/AspectRatio/AspectRatio.tsx +6 -3
  14. package/components/AspectRatio/aspectratio.ts +0 -10
  15. package/components/Avatar/Avatar.astro +1 -1
  16. package/components/Avatar/Avatar.svelte +7 -5
  17. package/components/Avatar/Avatar.tsx +3 -2
  18. package/components/Avatar/avatar.module.scss +3 -5
  19. package/components/Badge/Badge.astro +2 -1
  20. package/components/Badge/Badge.svelte +11 -4
  21. package/components/Badge/Badge.tsx +8 -3
  22. package/components/Badge/badge.module.scss +5 -6
  23. package/components/Badge/badge.ts +11 -13
  24. package/components/Banner/Banner.astro +1 -1
  25. package/components/Banner/Banner.svelte +11 -5
  26. package/components/Banner/Banner.tsx +6 -2
  27. package/components/Banner/banner.module.scss +4 -6
  28. package/components/Banner/banner.ts +0 -10
  29. package/components/BottomNavigation/BottomNavigation.astro +1 -1
  30. package/components/BottomNavigation/BottomNavigation.svelte +7 -4
  31. package/components/BottomNavigation/BottomNavigation.tsx +3 -2
  32. package/components/BottomNavigation/bottomnavigation.module.scss +68 -70
  33. package/components/Breadcrumb/Breadcrumb.astro +1 -1
  34. package/components/Breadcrumb/Breadcrumb.svelte +5 -3
  35. package/components/Breadcrumb/Breadcrumb.tsx +3 -1
  36. package/components/Button/Button.astro +2 -1
  37. package/components/Button/Button.svelte +11 -4
  38. package/components/Button/Button.tsx +7 -2
  39. package/components/Button/button.module.scss +9 -12
  40. package/components/Button/button.ts +23 -20
  41. package/components/Card/Card.astro +9 -2
  42. package/components/Card/Card.svelte +21 -8
  43. package/components/Card/Card.tsx +23 -6
  44. package/components/Card/card.module.scss +12 -9
  45. package/components/Card/card.ts +3 -16
  46. package/components/Carousel/Carousel.astro +3 -3
  47. package/components/Carousel/Carousel.svelte +24 -19
  48. package/components/Carousel/Carousel.tsx +9 -4
  49. package/components/Carousel/carousel.module.scss +3 -5
  50. package/components/Carousel/carousel.ts +0 -12
  51. package/components/CarouselItem/CarouselItem.astro +14 -0
  52. package/components/CarouselItem/CarouselItem.svelte +18 -0
  53. package/components/CarouselItem/CarouselItem.tsx +18 -0
  54. package/components/CarouselItem/carouselItem.ts +4 -0
  55. package/components/Checkbox/Checkbox.astro +3 -6
  56. package/components/Checkbox/Checkbox.svelte +13 -10
  57. package/components/Checkbox/Checkbox.tsx +8 -5
  58. package/components/Checkbox/checkbox.module.scss +4 -6
  59. package/components/Checkbox/checkbox.ts +2 -17
  60. package/components/Collapsible/Collapsible.astro +1 -1
  61. package/components/Collapsible/Collapsible.svelte +13 -6
  62. package/components/Collapsible/Collapsible.tsx +8 -2
  63. package/components/Collapsible/collapsible.module.scss +5 -5
  64. package/components/Collapsible/collapsible.ts +0 -15
  65. package/components/ConditionalWrapper/ConditionalWrapper.astro +1 -1
  66. package/components/ConditionalWrapper/ConditionalWrapper.svelte +8 -2
  67. package/components/ConditionalWrapper/ConditionalWrapper.tsx +7 -2
  68. package/components/ConditionalWrapper/conditionalwrapper.ts +2 -14
  69. package/components/ContextMenu/ContextMenu.astro +2 -1
  70. package/components/ContextMenu/ContextMenu.svelte +17 -9
  71. package/components/ContextMenu/ContextMenu.tsx +8 -2
  72. package/components/ContextMenu/contextmenu.ts +2 -17
  73. package/components/Copy/Copy.astro +2 -2
  74. package/components/Copy/Copy.svelte +10 -5
  75. package/components/Copy/Copy.tsx +7 -3
  76. package/components/Copy/copy.ts +2 -12
  77. package/components/Counter/Counter.astro +3 -2
  78. package/components/Counter/Counter.svelte +16 -10
  79. package/components/Counter/Counter.tsx +11 -7
  80. package/components/Counter/counter.module.scss +3 -5
  81. package/components/Counter/counter.ts +2 -11
  82. package/components/DataTable/DataTable.astro +1 -1
  83. package/components/DataTable/DataTable.svelte +23 -15
  84. package/components/DataTable/DataTable.tsx +7 -2
  85. package/components/DataTable/datatable.ts +0 -12
  86. package/components/Flex/Flex.astro +2 -1
  87. package/components/Flex/Flex.svelte +12 -6
  88. package/components/Flex/Flex.tsx +8 -3
  89. package/components/Flex/flex.ts +2 -15
  90. package/components/Footer/Footer.astro +1 -1
  91. package/components/Footer/Footer.svelte +13 -8
  92. package/components/Footer/Footer.tsx +6 -2
  93. package/components/Footer/footer.ts +0 -10
  94. package/components/Grid/Grid.astro +2 -1
  95. package/components/Grid/Grid.svelte +12 -6
  96. package/components/Grid/Grid.tsx +8 -3
  97. package/components/Grid/grid.ts +2 -15
  98. package/components/Group/Group.astro +1 -1
  99. package/components/Group/Group.svelte +9 -4
  100. package/components/Group/Group.tsx +6 -2
  101. package/components/Group/group.ts +0 -10
  102. package/components/Icon/Icon.astro +1 -1
  103. package/components/Icon/Icon.svelte +16 -9
  104. package/components/Icon/Icon.tsx +3 -2
  105. package/components/Image/Image.astro +2 -1
  106. package/components/Image/Image.svelte +54 -51
  107. package/components/Image/Image.tsx +3 -1
  108. package/components/Image/image.ts +2 -3
  109. package/components/ImageLoader/ImageLoader.astro +1 -1
  110. package/components/ImageLoader/ImageLoader.svelte +5 -3
  111. package/components/ImageLoader/ImageLoader.tsx +3 -1
  112. package/components/Input/Input.astro +3 -2
  113. package/components/Input/Input.svelte +19 -9
  114. package/components/Input/Input.tsx +11 -3
  115. package/components/Input/input.ts +26 -53
  116. package/components/Kbd/Kbd.astro +1 -1
  117. package/components/Kbd/Kbd.svelte +9 -4
  118. package/components/Kbd/Kbd.tsx +6 -2
  119. package/components/Kbd/kbd.ts +0 -10
  120. package/components/List/List.astro +1 -1
  121. package/components/List/List.svelte +13 -9
  122. package/components/List/List.tsx +10 -6
  123. package/components/List/list.ts +0 -8
  124. package/components/Masonry/Masonry.astro +1 -1
  125. package/components/Masonry/Masonry.svelte +14 -9
  126. package/components/Masonry/Masonry.tsx +7 -3
  127. package/components/Masonry/masonry.module.scss +4 -6
  128. package/components/Masonry/masonry.ts +2 -13
  129. package/components/Menu/Menu.astro +1 -1
  130. package/components/Menu/Menu.svelte +13 -7
  131. package/components/Menu/Menu.tsx +6 -2
  132. package/components/Menu/menu.ts +0 -10
  133. package/components/Modal/Modal.astro +2 -3
  134. package/components/Modal/Modal.svelte +12 -8
  135. package/components/Modal/Modal.tsx +6 -4
  136. package/components/Modal/modal.module.scss +5 -5
  137. package/components/Modal/modal.ts +2 -14
  138. package/components/OTPInput/OTPInput.astro +3 -5
  139. package/components/OTPInput/OTPInput.svelte +10 -10
  140. package/components/OTPInput/OTPInput.tsx +10 -8
  141. package/components/OTPInput/otpinput.module.scss +0 -12
  142. package/components/OTPInput/otpinput.ts +2 -4
  143. package/components/Pagination/Pagination.astro +1 -1
  144. package/components/Pagination/Pagination.svelte +8 -4
  145. package/components/Pagination/Pagination.tsx +6 -2
  146. package/components/Pagination/pagination.ts +0 -8
  147. package/components/Popover/Popover.astro +3 -7
  148. package/components/Popover/Popover.svelte +11 -10
  149. package/components/Popover/Popover.tsx +9 -12
  150. package/components/Popover/popover.ts +2 -15
  151. package/components/Progress/Progress.astro +1 -1
  152. package/components/Progress/Progress.svelte +8 -6
  153. package/components/Progress/Progress.tsx +3 -1
  154. package/components/Progress/progress.module.scss +15 -17
  155. package/components/Radio/Radio.astro +4 -4
  156. package/components/Radio/Radio.svelte +15 -8
  157. package/components/Radio/Radio.tsx +8 -5
  158. package/components/Radio/radio.module.scss +4 -6
  159. package/components/Radio/radio.ts +3 -14
  160. package/components/RangeSlider/RangeSlider.astro +5 -2
  161. package/components/RangeSlider/RangeSlider.svelte +20 -35
  162. package/components/RangeSlider/RangeSlider.tsx +11 -4
  163. package/components/RangeSlider/rangeslider.module.scss +14 -16
  164. package/components/RangeSlider/rangeslider.ts +1 -9
  165. package/components/Rating/Rating.astro +1 -1
  166. package/components/Rating/Rating.svelte +10 -7
  167. package/components/Rating/Rating.tsx +3 -1
  168. package/components/Rating/rating.module.scss +13 -15
  169. package/components/Ribbon/Ribbon.astro +1 -1
  170. package/components/Ribbon/Ribbon.svelte +9 -4
  171. package/components/Ribbon/Ribbon.tsx +6 -2
  172. package/components/Ribbon/ribbon.module.scss +9 -11
  173. package/components/Ribbon/ribbon.ts +0 -10
  174. package/components/Select/Select.astro +3 -1
  175. package/components/Select/Select.svelte +179 -171
  176. package/components/Select/Select.tsx +11 -4
  177. package/components/Select/select.ts +2 -12
  178. package/components/Sheet/Sheet.astro +2 -1
  179. package/components/Sheet/Sheet.svelte +7 -5
  180. package/components/Sheet/Sheet.tsx +5 -4
  181. package/components/Sheet/sheet.ts +3 -10
  182. package/components/Sidebar/Sidebar.astro +1 -1
  183. package/components/Sidebar/Sidebar.svelte +9 -4
  184. package/components/Sidebar/Sidebar.tsx +6 -2
  185. package/components/Sidebar/sidebar.ts +0 -10
  186. package/components/Skeleton/Skeleton.astro +1 -1
  187. package/components/Skeleton/Skeleton.svelte +7 -5
  188. package/components/Skeleton/Skeleton.tsx +3 -1
  189. package/components/Skeleton/skeleton.module.scss +6 -9
  190. package/components/Slider/Slider.astro +7 -5
  191. package/components/Slider/Slider.svelte +18 -10
  192. package/components/Slider/Slider.tsx +12 -6
  193. package/components/Slider/slider.module.scss +12 -14
  194. package/components/Slider/slider.ts +3 -12
  195. package/components/SpeedDial/SpeedDial.astro +1 -1
  196. package/components/SpeedDial/SpeedDial.svelte +6 -4
  197. package/components/SpeedDial/SpeedDial.tsx +4 -2
  198. package/components/SpeedDial/speeddial.module.scss +4 -6
  199. package/components/Spinner/Spinner.astro +1 -1
  200. package/components/Spinner/Spinner.svelte +7 -5
  201. package/components/Spinner/Spinner.tsx +3 -1
  202. package/components/Spinner/spinner.module.scss +13 -14
  203. package/components/Spoiler/Spoiler.astro +1 -1
  204. package/components/Spoiler/Spoiler.svelte +11 -5
  205. package/components/Spoiler/Spoiler.tsx +6 -2
  206. package/components/Spoiler/spoiler.module.scss +3 -5
  207. package/components/Spoiler/spoiler.ts +0 -10
  208. package/components/Stepper/Stepper.astro +1 -1
  209. package/components/Stepper/Stepper.svelte +7 -5
  210. package/components/Stepper/Stepper.tsx +3 -1
  211. package/components/Stepper/stepper.defaults.scss +5 -0
  212. package/components/Stepper/stepper.module.scss +11 -13
  213. package/components/Switch/Switch.astro +7 -2
  214. package/components/Switch/Switch.svelte +17 -8
  215. package/components/Switch/Switch.tsx +8 -4
  216. package/components/Switch/switch.module.scss +5 -7
  217. package/components/Switch/switch.ts +2 -16
  218. package/components/Tab/Tab.astro +25 -0
  219. package/components/Tab/Tab.svelte +28 -0
  220. package/components/Tab/Tab.tsx +30 -0
  221. package/components/Tab/tab.ts +6 -0
  222. package/components/Table/Table.astro +1 -1
  223. package/components/Table/Table.svelte +5 -3
  224. package/components/Table/Table.tsx +3 -1
  225. package/components/Tabs/Tabs.astro +58 -25
  226. package/components/Tabs/Tabs.svelte +47 -14
  227. package/components/Tabs/Tabs.tsx +42 -11
  228. package/components/Tabs/tabs.module.scss +7 -6
  229. package/components/Tabs/tabs.ts +0 -10
  230. package/components/Textarea/Textarea.astro +3 -6
  231. package/components/Textarea/Textarea.svelte +13 -10
  232. package/components/Textarea/Textarea.tsx +9 -7
  233. package/components/Textarea/textarea.ts +2 -17
  234. package/components/ThemeSwitcher/ThemeSwitcher.astro +1 -1
  235. package/components/ThemeSwitcher/ThemeSwitcher.svelte +14 -8
  236. package/components/ThemeSwitcher/ThemeSwitcher.tsx +7 -2
  237. package/components/ThemeSwitcher/themeswitcher.module.scss +10 -12
  238. package/components/ThemeSwitcher/themeswitcher.ts +0 -13
  239. package/components/Timeline/Timeline.astro +1 -1
  240. package/components/Timeline/Timeline.svelte +11 -6
  241. package/components/Timeline/Timeline.tsx +6 -2
  242. package/components/Timeline/timeline.module.scss +6 -8
  243. package/components/Timeline/timeline.ts +0 -10
  244. package/components/TimelineItem/TimelineItem.astro +1 -1
  245. package/components/TimelineItem/TimelineItem.svelte +9 -4
  246. package/components/TimelineItem/TimelineItem.tsx +8 -3
  247. package/components/TimelineItem/timelineitem.module.scss +4 -4
  248. package/components/TimelineItem/timelineitem.ts +0 -12
  249. package/components/Toast/Toast.astro +2 -1
  250. package/components/Toast/Toast.svelte +9 -7
  251. package/components/Toast/Toast.tsx +5 -4
  252. package/components/Toast/toast.ts +3 -11
  253. package/package.json +19 -19
  254. package/react.d.ts +145 -138
  255. package/react.js +4 -0
  256. package/scss/config/functions.scss +41 -0
  257. package/scss/config/mixins.scss +65 -0
  258. package/scss/config.scss +1 -0
  259. package/scss/global/theme.scss +209 -194
  260. package/scss/setup.scss +6 -3
  261. package/svelte.d.ts +145 -138
  262. package/svelte.js +4 -0
@@ -6,6 +6,7 @@
6
6
  @use 'webcore.config.scss' as *;
7
7
  @use './color-palette.scss' as *;
8
8
  @use './css-values.scss' as *;
9
+ @use './functions.scss' as *;
9
10
  @use './layout.scss' as *;
10
11
  @use './typography.scss' as *;
11
12
  @use './variables.scss' as *;
@@ -406,3 +407,67 @@
406
407
  }
407
408
  }
408
409
  }
410
+
411
+ @mixin validate-contrast($themeName, $tokens, $level, $print) {
412
+ $required: wcag-required($level);
413
+ $pairs: (
414
+ primary: (bg: primary-70, fg: primary),
415
+ secondary: (bg: primary-70, fg: primary-10),
416
+ muted: (bg: primary-70, fg: primary-20),
417
+ disabled: (bg: primary-70, fg: primary-30),
418
+ info: (bg: info, fg: info-fg),
419
+ success: (bg: success, fg: success-fg),
420
+ warning: (bg: warning, fg: warning-fg),
421
+ alert: (bg: alert, fg: alert-fg)
422
+ );
423
+
424
+ @each $name, $pair in $pairs {
425
+ $bg: map.get($tokens, map.get($pair, bg));
426
+ $fg: map.get($tokens, map.get($pair, fg));
427
+
428
+ $ratio: contrast($fg, $bg);
429
+ $logName: '#{$themeName} #{$name}';
430
+
431
+ @if not $print {
432
+ $logName: '#{map.get($pair, fg)} against #{map.get($pair, bg)} in theme "#{$themeName}"';
433
+ }
434
+
435
+ @if $ratio < $required {
436
+ @if $print {
437
+ contrast: '[#{$logName}] - FAILED: actual: #{$ratio}, required: #{$required} (fg: #{$fg}, bg: #{$bg})';
438
+ } @else {
439
+ @warn '#{$logName} is below WCAG #{$level} (actual: #{$ratio}, required: #{$required})';
440
+ }
441
+ } @else {
442
+ @if $print {
443
+ contrast: '[#{$logName}] - PASSED';
444
+ }
445
+ }
446
+ }
447
+ }
448
+
449
+ @mixin validate-tokens($referenceMap, $themeName, $tokens) {
450
+ $referenceKeys: map.keys($referenceMap);
451
+ $themeKeys: map.keys($tokens);
452
+
453
+ @each $key in $referenceKeys {
454
+ @if not list.index($themeKeys, $key) {
455
+ @warn 'Theme `#{$themeName}` is missing key `#{$key}`.';
456
+ }
457
+ }
458
+
459
+ @each $key in $themeKeys {
460
+ @if not list.index($referenceKeys, $key) {
461
+ @warn 'Theme `#{$themeName}` has unknown key `#{$key}`.';
462
+ }
463
+ }
464
+ }
465
+
466
+ @mixin validate-theme($themes, $selectedTheme, $level, $print: false) {
467
+ $referenceName: list.nth(map.keys($themes), 1);
468
+ $referenceMap: map.get($themes, $referenceName);
469
+ $tokens: map.get($themes, $selectedTheme);
470
+
471
+ @include validate-contrast($selectedTheme, $tokens, $level, $print);
472
+ @include validate-tokens($referenceMap, $selectedTheme, $tokens);
473
+ }
package/scss/config.scss CHANGED
@@ -1,6 +1,7 @@
1
1
  @forward 'webcore.config.scss';
2
2
  @forward './config/color-palette';
3
3
  @forward './config/css-values';
4
+ @forward './config/functions.scss';
4
5
  @forward './config/typography';
5
6
  @forward './config/variables';
6
7
  @forward './config/layout';
@@ -1,201 +1,216 @@
1
+ @use 'sass:map';
1
2
  @use '../config' as *;
2
3
 
3
- @mixin theme($theme: 'dark', $selector: ':root') {
4
- @if $theme == 'dark' {
5
- #{$selector} {
6
- --w-color-scheme: dark;
7
- --w-color-primary: #FFF;
8
- --w-color-primary-10: #DDD;
9
- --w-color-primary-20: #BBB;
10
- --w-color-primary-30: #757575;
11
- --w-color-primary-40: #333;
12
- --w-color-primary-50: #252525;
13
- --w-color-primary-60: #111;
14
- --w-color-primary-70: #000;
15
-
16
- --w-color-info: #0ABDE3;
17
- --w-color-info-accent: #48DBFB;
18
- --w-color-info-fg: #000;
19
- --w-color-success: #10AC84;
20
- --w-color-success-accent: #1DD1A1;
21
- --w-color-success-fg: #000;
22
- --w-color-warning: #FF9F43;
23
- --w-color-warning-accent: #f7AA61;
24
- --w-color-warning-fg: #000;
25
- --w-color-alert: #de3233;
26
- --w-color-alert-accent: #EE5253;
27
- --w-color-alert-fg: #FFF;
28
- --w-color-overlay: #0000009e;
29
- }
4
+ $themes: (
5
+ dark: (
6
+ scheme: dark,
7
+ primary: hsl(0,0%,97%),
8
+ primary-10: hsl(0,0%,82%),
9
+ primary-20: hsl(0,0%,69%),
10
+ primary-30: hsl(0,0%,48%),
11
+ primary-40: hsl(0,0%,28%),
12
+ primary-50: hsl(0,0%,18%),
13
+ primary-60: hsl(0,0%,8%),
14
+ primary-70: hsl(0,0%,4%),
15
+ info: hsl(192,80%,50%),
16
+ info-accent: hsl(192,100%,60%),
17
+ info-fg: hsl(0,0%,0%),
18
+ success: hsl(162,60%,42%),
19
+ success-accent: hsl(162,62%,48%),
20
+ success-fg: hsl(0,0%,0%),
21
+ warning: hsl(30,100%,63%),
22
+ warning-accent: hsl(32,100%,68%),
23
+ warning-fg: hsl(0,0%,0%),
24
+ alert: hsl(0,68%,52%),
25
+ alert-accent: hsl(0,80%,62%),
26
+ alert-fg: hsl(0,0%,100%),
27
+ overlay: hsla(0,0%,0%,0.62)
28
+ ),
29
+ light: (
30
+ scheme: light,
31
+ primary: hsl(0,0%,5%),
32
+ primary-10: hsl(0,0%,12%),
33
+ primary-20: hsl(0,0%,25%),
34
+ primary-30: hsl(0,0%,44%),
35
+ primary-40: hsl(0,0%,68%),
36
+ primary-50: hsl(0,0%,80%),
37
+ primary-60: hsl(0,0%,92%),
38
+ primary-70: hsl(0,0%,97%),
39
+ info: hsl(200,100%,34%),
40
+ info-accent: hsl(200,100%,42%),
41
+ info-fg: hsl(0,0%,100%),
42
+ success: hsl(155,80%,26%),
43
+ success-accent: hsl(155,72%,36%),
44
+ success-fg: hsl(0,0%,100%),
45
+ warning: hsl(32,100%,35%),
46
+ warning-accent: hsl(32,100%,50%),
47
+ warning-fg: hsl(0,0%,100%),
48
+ alert: hsl(0,76%,36%),
49
+ alert-accent: hsl(0,72%,46%),
50
+ alert-fg: hsl(0,0%,100%),
51
+ overlay: hsla(0,0%,0%,0.62)
52
+ ),
53
+ midnight: (
54
+ scheme: dark,
55
+ primary: hsl(213,60%,95%),
56
+ primary-10: hsl(213,40%,82%),
57
+ primary-20: hsl(213,30%,68%),
58
+ primary-30: hsl(213,25%,50%),
59
+ primary-40: hsl(213,35%,28%),
60
+ primary-50: hsl(213,42%,22%),
61
+ primary-60: hsl(213,55%,10%),
62
+ primary-70: hsl(213,68%,5%),
63
+ info: hsl(214,100%,67%),
64
+ info-accent: hsl(214,100%,78%),
65
+ info-fg: hsl(0,0%,0%),
66
+ success: hsl(171,83%,38%),
67
+ success-accent: hsl(162,62%,48%),
68
+ success-fg: hsl(0,0%,0%),
69
+ warning: hsl(31,100%,55%),
70
+ warning-accent: hsl(31,100%,65%),
71
+ warning-fg: hsl(0,0%,0%),
72
+ alert: hsl(0,77%,50%),
73
+ alert-accent: hsl(0,90%,68%),
74
+ alert-fg: hsl(0,0%,100%),
75
+ overlay: hsla(213,100%,7%,0.62)
76
+ ),
77
+ amber: (
78
+ scheme: dark,
79
+ primary: hsl(40,20%,95%),
80
+ primary-10: hsl(40,15%,82%),
81
+ primary-20: hsl(40,20%,70%),
82
+ primary-30: hsl(40,10%,48%),
83
+ primary-40: hsl(40,10%,22%),
84
+ primary-50: hsl(40,8%,17%),
85
+ primary-60: hsl(40,5%,10%),
86
+ primary-70: hsl(40,5%,5%),
87
+ info: hsl(180,58%,52%),
88
+ info-accent: hsl(192,95%,58%),
89
+ info-fg: hsl(0,0%,0%),
90
+ success: hsl(88,62%,52%),
91
+ success-accent: hsl(88,72%,62%),
92
+ success-fg: hsl(0,0%,0%),
93
+ warning: hsl(42,98%,52%),
94
+ warning-accent: hsl(38,98%,64%),
95
+ warning-fg: hsl(0,0%,0%),
96
+ alert: hsl(340,100%,69%),
97
+ alert-accent: hsl(340,90%,72%),
98
+ alert-fg: hsl(0,0%,0%),
99
+ overlay: hsla(0,0%,0%,0.62)
100
+ ),
101
+ nordic: (
102
+ scheme: light,
103
+ primary: hsl(200,25%,7%),
104
+ primary-10: hsl(200,22%,15%),
105
+ primary-20: hsl(200,18%,27%),
106
+ primary-30: hsl(200,14%,43%),
107
+ primary-40: hsl(200,16%,68%),
108
+ primary-50: hsl(200,18%,82%),
109
+ primary-60: hsl(200,22%,92%),
110
+ primary-70: hsl(200,28%,97%),
111
+ info: hsl(205,82%,32%),
112
+ info-accent: hsl(205,88%,42%),
113
+ info-fg: hsl(0,0%,100%),
114
+ success: hsl(162,65%,26%),
115
+ success-accent: hsl(162,68%,36%),
116
+ success-fg: hsl(0,0%,100%),
117
+ warning: hsl(36,95%,34%),
118
+ warning-accent: hsl(36,95%,46%),
119
+ warning-fg: hsl(0,0%,100%),
120
+ alert: hsl(356,68%,38%),
121
+ alert-accent: hsl(356,72%,50%),
122
+ alert-fg: hsl(0,0%,100%),
123
+ overlay: hsla(200,30%,8%,0.58)
124
+ ),
125
+ vintage: (
126
+ scheme: light,
127
+ primary: hsl(25,55%,8%),
128
+ primary-10: hsl(25,45%,16%),
129
+ primary-20: hsl(25,38%,30%),
130
+ primary-30: hsl(25,28%,42%),
131
+ primary-40: hsl(25,30%,66%),
132
+ primary-50: hsl(25,32%,78%),
133
+ primary-60: hsl(25,38%,89%),
134
+ primary-70: hsl(25,62%,95%),
135
+ info: hsl(211,62%,45%),
136
+ info-accent: hsl(211,62%,55%),
137
+ info-fg: hsl(0,0%,100%),
138
+ success: hsl(166,52%,30%),
139
+ success-accent: hsl(166,52%,42%),
140
+ success-fg: hsl(0,0%,100%),
141
+ warning: hsl(28,80%,52%),
142
+ warning-accent: hsl(28,80%,60%),
143
+ warning-fg: hsl(0,0%,0%),
144
+ alert: hsl(350,52%,38%),
145
+ alert-accent: hsl(350,60%,50%),
146
+ alert-fg: hsl(0,0%,100%),
147
+ overlay: hsla(25,30%,16%,0.62)
148
+ ),
149
+ synthwave: (
150
+ scheme: dark,
151
+ primary: hsl(242,20%,96%),
152
+ primary-10: hsl(242,20%,88%),
153
+ primary-20: hsl(286,62%,84%),
154
+ primary-30: hsl(286,55%,60%),
155
+ primary-40: hsl(272,68%,38%),
156
+ primary-50: hsl(265,68%,30%),
157
+ primary-60: hsl(228,62%,12%),
158
+ primary-70: hsl(228,72%,6%),
159
+ info: hsl(205,100%,56%),
160
+ info-accent: hsl(192,100%,70%),
161
+ info-fg: hsl(0,0%,0%),
162
+ success: hsl(86,100%,43%),
163
+ success-accent: hsl(90,100%,62%),
164
+ success-fg: hsl(0,0%,0%),
165
+ warning: hsl(28,100%,58%),
166
+ warning-accent: hsl(28,100%,68%),
167
+ warning-fg: hsl(0,0%,0%),
168
+ alert: hsl(0,80%,50%),
169
+ alert-accent: hsl(0,80%,66%),
170
+ alert-fg: hsl(0,0%,100%),
171
+ overlay: hsla(258,80%,8%,0.76)
172
+ ),
173
+ forest: (
174
+ scheme: dark,
175
+ primary: hsl(150,18%,95%),
176
+ primary-10: hsl(150,14%,82%),
177
+ primary-20: hsl(150,12%,68%),
178
+ primary-30: hsl(150,10%,48%),
179
+ primary-40: hsl(150,18%,28%),
180
+ primary-50: hsl(150,22%,18%),
181
+ primary-60: hsl(150,30%,10%),
182
+ primary-70: hsl(150,38%,4%),
183
+ info: hsl(178,55%,38%),
184
+ info-accent: hsl(178,62%,50%),
185
+ info-fg: hsl(0,0%,0%),
186
+ success: hsl(122,45%,42%),
187
+ success-accent: hsl(122,50%,55%),
188
+ success-fg: hsl(0,0%,0%),
189
+ warning: hsl(38,95%,52%),
190
+ warning-accent: hsl(38,100%,62%),
191
+ warning-fg: hsl(0,0%,0%),
192
+ alert: hsl(4,72%,50%),
193
+ alert-accent: hsl(4,80%,62%),
194
+ alert-fg: hsl(0,0%,100%),
195
+ overlay: hsla(150,40%,3%,0.68)
196
+ )
197
+ );
198
+
199
+ @mixin theme($theme: 'dark', $selector: ':root', $level: AA, $customThemes: ()) {
200
+ $allThemes: map.merge($themes, $customThemes);
201
+ $selectedTheme: map.get($allThemes, $theme);
202
+
203
+ @include validate-theme($allThemes, $theme, $level);
204
+
205
+ @if ($selectedTheme == null) {
206
+ @warn "Unknown theme `#{$theme}`. Defaulting to `dark`. Available themes: #{map.keys($allThemes)}.";
207
+
208
+ $selectedTheme: map.get($allThemes, 'dark');
30
209
  }
31
210
 
32
- @if $theme == 'light' {
33
- #{$selector} {
34
- --w-color-scheme: light;
35
- --w-color-primary: #000;
36
- --w-color-primary-10: #111;
37
- --w-color-primary-20: #252525;
38
- --w-color-primary-30: #757575;
39
- --w-color-primary-40: #BBB;
40
- --w-color-primary-50: #DDD;
41
- --w-color-primary-60: #EEE;
42
- --w-color-primary-70: #FFF;
43
-
44
- --w-color-info: #0073A8;
45
- --w-color-info-accent: #009FCC;
46
- --w-color-info-fg: #FFF;
47
- --w-color-success: #0A754D;
48
- --w-color-success-accent: #16A062;
49
- --w-color-success-fg: #FFF;
50
- --w-color-warning: #C76D00;
51
- --w-color-warning-accent: #E3861D;
52
- --w-color-warning-fg: #FFF;
53
- --w-color-alert: #A51415;
54
- --w-color-alert-accent: #C62828;
55
- --w-color-alert-fg: #FFF;
56
- --w-color-overlay: #0000009e;
57
- }
58
- }
59
-
60
- @if $theme == 'midnight' {
61
- #{$selector} {
62
- --w-color-scheme: dark;
63
- --w-color-primary: #FFF;
64
- --w-color-primary-10: #EEE;
65
- --w-color-primary-20: #a5b7cf;
66
- --w-color-primary-30: #667f9e;
67
- --w-color-primary-40: #2d4463;
68
- --w-color-primary-50: #20344e;
69
- --w-color-primary-60: #101a2d;
70
- --w-color-primary-70: #061321;
71
-
72
- --w-color-info: #57a0ff;
73
- --w-color-info-accent: #71afff;
74
- --w-color-info-fg: #000;
75
- --w-color-success: #10b59c;
76
- --w-color-success-accent: #1DD1A1;
77
- --w-color-success-fg: #000;
78
- --w-color-warning: #FF9F43;
79
- --w-color-warning-accent: #feb570;
80
- --w-color-warning-fg: #000;
81
- --w-color-alert: #ed3b3c;
82
- --w-color-alert-accent: #fb6161;
83
- --w-color-alert-fg: #FFF;
84
- --w-color-overlay: #0017239e;
85
- }
86
- }
87
-
88
- @if $theme == 'vintage' {
89
- #{$selector} {
90
- --w-color-scheme: light;
91
- --w-color-primary: #1A110D;
92
- --w-color-primary-10: #2C1F18;
93
- --w-color-primary-20: #8B5A3C;
94
- --w-color-primary-30: #c09d82;
95
- --w-color-primary-40: #B89678;
96
- --w-color-primary-50: #D8BFA5;
97
- --w-color-primary-60: #F0DCC4;
98
- --w-color-primary-70: #F6E8DA;
99
-
100
- --w-color-info: #3F73B7;
101
- --w-color-info-accent: #4992f0;
102
- --w-color-info-fg: #FFF;
103
- --w-color-success: #33907f;
104
- --w-color-success-accent: #1BB890;
105
- --w-color-success-fg: #FFF;
106
- --w-color-warning: #e08447;
107
- --w-color-warning-accent: #f1985c;
108
- --w-color-warning-fg: #000;
109
- --w-color-alert: #923B46;
110
- --w-color-alert-accent: #C33F50;
111
- --w-color-alert-fg: #FFF;
112
- --w-color-overlay: #33211B9E;
113
- }
114
- }
115
-
116
- @if $theme == 'amber' {
117
- #{$selector} {
118
- --w-color-scheme: dark;
119
- --w-color-primary: #FFF;
120
- --w-color-primary-10: #DDD;
121
- --w-color-primary-20: #FFF3DB;
122
- --w-color-primary-30: #757575;
123
- --w-color-primary-40: #232323;
124
- --w-color-primary-50: #312e31;
125
- --w-color-primary-60: #1b1b1b;
126
- --w-color-primary-70: #111;
127
-
128
- --w-color-info: #78dcdc;
129
- --w-color-info-accent: #48DBFB;
130
- --w-color-info-fg: #000;
131
- --w-color-success: #a9dc62;
132
- --w-color-success-accent: #97da3b;
133
- --w-color-success-fg: #000;
134
- --w-color-warning: #FCBA28;
135
- --w-color-warning-accent: #f7AA61;
136
- --w-color-warning-fg: #000;
137
- --w-color-alert: #ff6188;
138
- --w-color-alert-accent: #EE5253;
139
- --w-color-alert-fg: #000;
140
- --w-color-overlay: #0000009e;
141
- }
142
- }
143
-
144
- @if $theme == 'synthwave' {
145
- #{$selector} {
146
- --w-color-scheme: dark;
147
- --w-color-primary: #FFF;
148
- --w-color-primary-10: #F0F0F0;
149
- --w-color-primary-20: #F6C8A9;
150
- --w-color-primary-30: #E5B1FF;
151
- --w-color-primary-40: #761EAA;
152
- --w-color-primary-50: #912BCE;
153
- --w-color-primary-60: #0f1b33;
154
- --w-color-primary-70: #060E21;
155
-
156
- --w-color-info: #1c98ff;
157
- --w-color-info-accent: #6be4ff;
158
- --w-color-info-fg: #000;
159
- --w-color-success: #7ADA00;
160
- --w-color-success-accent: #A8FF4D;
161
- --w-color-success-fg: #000;
162
- --w-color-warning: #FF912F;
163
- --w-color-warning-accent: #FFA95A;
164
- --w-color-warning-fg: #000;
165
- --w-color-alert: #F63131;
166
- --w-color-alert-accent: #E84647;
167
- --w-color-alert-fg: #FFF;
168
- --w-color-overlay: #13002cc2;
169
- }
170
- }
171
-
172
- @if $theme == 'velvet' {
173
- #{$selector} {
174
- --w-color-scheme: dark;
175
- --w-color-primary: #EDE0E0;
176
- --w-color-primary-10: #D6C1C1;
177
- --w-color-primary-20: #fab6b6;
178
- --w-color-primary-30: #c47272;
179
- --w-color-primary-40: #661B1B;
180
- --w-color-primary-50: #520F0F;
181
- --w-color-primary-60: #2E0B0B;
182
- --w-color-primary-70: #180505;
183
-
184
- --w-color-info: #36587A;
185
- --w-color-info-accent: #4F7BAF;
186
- --w-color-info-fg: #FFF;
187
- --w-color-success: #f2b900;
188
- --w-color-success-accent: #ffd341;
189
- --w-color-success-fg: #000;
190
- --w-color-warning: #e5601e;
191
- --w-color-warning-accent: #E4783D;
192
- --w-color-warning-fg: #000;
193
- --w-color-alert: #B8001F;
194
- --w-color-alert-accent: #E00028;
195
- --w-color-alert-fg: #FFF;
196
- --w-color-overlay: #13050599;
211
+ #{$selector} {
212
+ @each $token, $value in $selectedTheme {
213
+ --w-color-#{$token}: #{$value};
197
214
  }
198
215
  }
199
216
  }
200
-
201
-
package/scss/setup.scss CHANGED
@@ -28,6 +28,7 @@ body {
28
28
 
29
29
  @mixin setup($customConfig: ()) {
30
30
  $config: map.merge($config, $customConfig) !global;
31
+ $wcagLevel: config('wcagLevel') or AA;
31
32
 
32
33
  @if (config('includeResets')) {
33
34
  @include resets(config('fontRegular'), config('fontBold'));
@@ -50,14 +51,16 @@ body {
50
51
  }
51
52
 
52
53
  @if (config('theme')) {
53
- @include theme(config('theme'));
54
+ @include theme(config('theme'), ':root', $wcagLevel);
54
55
  }
55
56
 
56
57
  @if (config('themes')) {
58
+ $customThemes: config('customThemes') or ();
59
+
57
60
  @each $theme, $selector in config('themes') {
58
- @include theme($theme, $selector);
61
+ @include theme($theme, $selector, $wcagLevel, $customThemes);
59
62
  }
60
63
  } @else if (not config('theme')) {
61
- @include theme('dark');
64
+ @include theme('dark', ':root', $wcagLevel);
62
65
  }
63
66
  }