maverick-wave 3.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 (141) hide show
  1. package/.claude/commands/mw.md +580 -0
  2. package/.claude/settings.local.json +11 -0
  3. package/.idea/codeStyles/Project.xml +59 -0
  4. package/.idea/codeStyles/codeStyleConfig.xml +5 -0
  5. package/.idea/maverick-wave.iml +12 -0
  6. package/.idea/modules.xml +8 -0
  7. package/.idea/prettier.xml +6 -0
  8. package/.idea/vcs.xml +6 -0
  9. package/.prettierignore +6 -0
  10. package/.prettierrc.json +7 -0
  11. package/CHANGELOG.md +420 -0
  12. package/CLAUDE.md +53 -0
  13. package/LICENSE +21 -0
  14. package/README.md +191 -0
  15. package/gulpfile.js +158 -0
  16. package/index.html +472 -0
  17. package/maverick-wave.min.css +1 -0
  18. package/maverick-wave.min.js +1 -0
  19. package/package.json +52 -0
  20. package/release.sh +17 -0
  21. package/src/assets/favicon/android-chrome-192x192.png +0 -0
  22. package/src/assets/favicon/android-chrome-512x512.png +0 -0
  23. package/src/assets/favicon/apple-touch-icon.png +0 -0
  24. package/src/assets/favicon/favicon-16x16.png +0 -0
  25. package/src/assets/favicon/favicon-32x32.png +0 -0
  26. package/src/assets/favicon/site.webmanifest +1 -0
  27. package/src/assets/favicon.ico +0 -0
  28. package/src/assets/header-logo.svg +24 -0
  29. package/src/js/main.js +587 -0
  30. package/src/partials/accordions-container.html +163 -0
  31. package/src/partials/alerts-container.html +120 -0
  32. package/src/partials/avatars-container.html +84 -0
  33. package/src/partials/blog-posts-container.html +157 -0
  34. package/src/partials/breadcrumbs-container.html +126 -0
  35. package/src/partials/button-bar-container.html +168 -0
  36. package/src/partials/buttons-container.html +133 -0
  37. package/src/partials/cards-container.html +508 -0
  38. package/src/partials/code-container.html +194 -0
  39. package/src/partials/colors-container.html +125 -0
  40. package/src/partials/coming-soon-container.html +6 -0
  41. package/src/partials/content-slider-container.html +47 -0
  42. package/src/partials/divider-container.html +52 -0
  43. package/src/partials/documentation-container.html +161 -0
  44. package/src/partials/empty-state-container.html +74 -0
  45. package/src/partials/footer-container.html +113 -0
  46. package/src/partials/form-container.html +257 -0
  47. package/src/partials/form-elements-container.html +595 -0
  48. package/src/partials/form-field-container.html +141 -0
  49. package/src/partials/gallery-container.html +49 -0
  50. package/src/partials/get-started-container.html +294 -0
  51. package/src/partials/grid-container.html +171 -0
  52. package/src/partials/header-container.html +49 -0
  53. package/src/partials/header-utilities-container.html +80 -0
  54. package/src/partials/home-container.html +48 -0
  55. package/src/partials/html-lists-container.html +58 -0
  56. package/src/partials/info-container.html +87 -0
  57. package/src/partials/input-group-container.html +285 -0
  58. package/src/partials/item-lists-container.html +413 -0
  59. package/src/partials/login-container.html +61 -0
  60. package/src/partials/meta-info-container.html +16 -0
  61. package/src/partials/modals-container.html +136 -0
  62. package/src/partials/pagination-container.html +27 -0
  63. package/src/partials/panels-container.html +196 -0
  64. package/src/partials/progress-container.html +226 -0
  65. package/src/partials/ratings-container.html +104 -0
  66. package/src/partials/skeleton-container.html +82 -0
  67. package/src/partials/spinners-container.html +92 -0
  68. package/src/partials/stepper-container.html +107 -0
  69. package/src/partials/tables-container.html +120 -0
  70. package/src/partials/tabs-container.html +263 -0
  71. package/src/partials/tags-container.html +168 -0
  72. package/src/partials/techstack-bucket-container.html +174 -0
  73. package/src/partials/tiles-container.html +245 -0
  74. package/src/partials/timelines-container.html +196 -0
  75. package/src/partials/typography-container.html +66 -0
  76. package/src/partials/utilities-container.html +85 -0
  77. package/src/scss/abstracts/_functions.scss +37 -0
  78. package/src/scss/abstracts/_index.scss +3 -0
  79. package/src/scss/abstracts/_mixins.scss +45 -0
  80. package/src/scss/abstracts/_variables.scss +222 -0
  81. package/src/scss/base/_base.scss +165 -0
  82. package/src/scss/base/_index.scss +3 -0
  83. package/src/scss/base/_reset.scss +75 -0
  84. package/src/scss/base/_typography.scss +230 -0
  85. package/src/scss/components/_accordions.scss +91 -0
  86. package/src/scss/components/_alerts.scss +105 -0
  87. package/src/scss/components/_avatars.scss +123 -0
  88. package/src/scss/components/_blog-post.scss +268 -0
  89. package/src/scss/components/_breadcrumbs.scss +108 -0
  90. package/src/scss/components/_button-bar.scss +139 -0
  91. package/src/scss/components/_buttons.scss +164 -0
  92. package/src/scss/components/_cards.scss +316 -0
  93. package/src/scss/components/_code.scss +252 -0
  94. package/src/scss/components/_coming-soon.scss +92 -0
  95. package/src/scss/components/_content-slider.scss +119 -0
  96. package/src/scss/components/_divider.scss +70 -0
  97. package/src/scss/components/_empty-state.scss +73 -0
  98. package/src/scss/components/_gallery.scss +158 -0
  99. package/src/scss/components/_index.scss +33 -0
  100. package/src/scss/components/_info.scss +143 -0
  101. package/src/scss/components/_lists.scss +653 -0
  102. package/src/scss/components/_localhost-indicator.scss +29 -0
  103. package/src/scss/components/_meta-info.scss +34 -0
  104. package/src/scss/components/_modals.scss +118 -0
  105. package/src/scss/components/_pagination.scss +99 -0
  106. package/src/scss/components/_panels.scss +112 -0
  107. package/src/scss/components/_progress.scss +107 -0
  108. package/src/scss/components/_ratings.scss +47 -0
  109. package/src/scss/components/_skeleton.scss +90 -0
  110. package/src/scss/components/_spinners.scss +208 -0
  111. package/src/scss/components/_stepper.scss +145 -0
  112. package/src/scss/components/_tables.scss +127 -0
  113. package/src/scss/components/_tabs.scss +146 -0
  114. package/src/scss/components/_tags.scss +93 -0
  115. package/src/scss/components/_techstack-bucket.scss +145 -0
  116. package/src/scss/components/_theme-toggle.scss +50 -0
  117. package/src/scss/components/_tiles.scss +217 -0
  118. package/src/scss/components/_timelines.scss +339 -0
  119. package/src/scss/form-elements/_checkbox.scss +174 -0
  120. package/src/scss/form-elements/_form.scss +122 -0
  121. package/src/scss/form-elements/_index.scss +10 -0
  122. package/src/scss/form-elements/_input-group.scss +103 -0
  123. package/src/scss/form-elements/_input.scss +72 -0
  124. package/src/scss/form-elements/_login.scss +62 -0
  125. package/src/scss/form-elements/_radio.scss +144 -0
  126. package/src/scss/form-elements/_select.scss +56 -0
  127. package/src/scss/form-elements/_slider.scss +174 -0
  128. package/src/scss/form-elements/_textarea.scss +74 -0
  129. package/src/scss/form-elements/_toggle.scss +174 -0
  130. package/src/scss/layout/_footer.scss +214 -0
  131. package/src/scss/layout/_grid.scss +287 -0
  132. package/src/scss/layout/_header.scss +441 -0
  133. package/src/scss/layout/_home.scss +40 -0
  134. package/src/scss/layout/_index.scss +6 -0
  135. package/src/scss/layout/_main.scss +116 -0
  136. package/src/scss/layout/_section.scss +89 -0
  137. package/src/scss/main.scss +5 -0
  138. package/src/scss/utilities/_display.scss +35 -0
  139. package/src/scss/utilities/_flex.scss +66 -0
  140. package/src/scss/utilities/_index.scss +3 -0
  141. package/src/scss/utilities/_spacing.scss +78 -0
@@ -0,0 +1,103 @@
1
+ @use '../abstracts' as *;
2
+
3
+ // Input with prefix and/or suffix (icon, text, button)
4
+ .mw-input-group {
5
+ display: flex;
6
+ align-items: stretch;
7
+ width: 100%;
8
+
9
+ // Shared styles for prefix and suffix
10
+ .mw-input-group-prefix,
11
+ .mw-input-group-suffix {
12
+ display: flex;
13
+ align-items: center;
14
+ justify-content: center;
15
+ padding: spacing('2') spacing('3');
16
+ background: var(--mw-gray-background);
17
+ border: 2px solid var(--mw-border);
18
+ color: var(--mw-text-muted-color);
19
+ font-size: font-size('sm');
20
+ white-space: nowrap;
21
+ flex-shrink: 0;
22
+ transition: var(--mw-transition);
23
+ line-height: 1;
24
+ cursor: default;
25
+ }
26
+
27
+ .mw-input-group-prefix {
28
+ border-right: none;
29
+ border-radius: radius('sm') 0 0 radius('sm');
30
+ }
31
+
32
+ .mw-input-group-suffix {
33
+ border-left: none;
34
+ border-radius: 0 radius('sm') radius('sm') 0;
35
+ }
36
+
37
+ // The input loses its outer rounded corners
38
+ .mw-input {
39
+ flex: 1;
40
+ min-width: 0;
41
+ border-radius: 0;
42
+
43
+ &:first-child {
44
+ border-radius: radius('sm') 0 0 radius('sm');
45
+ }
46
+
47
+ &:last-child {
48
+ border-radius: 0 radius('sm') radius('sm') 0;
49
+ }
50
+
51
+ // When input is focused, also highlight adjacent prefix/suffix
52
+ &:focus + .mw-input-group-suffix,
53
+ &:focus-within ~ .mw-input-group-suffix {
54
+ border-color: var(--mw-primary-color);
55
+ }
56
+ }
57
+
58
+ // Highlight prefix/suffix when inner input is focused
59
+ &:focus-within {
60
+ .mw-input-group-prefix,
61
+ .mw-input-group-suffix {
62
+ border-color: var(--mw-primary-color);
63
+ }
64
+ }
65
+
66
+ .mw-input:focus {
67
+ box-shadow: none;
68
+ }
69
+
70
+ // Button as suffix/prefix (e.g. search button, copy button)
71
+ .mw-btn {
72
+ border-radius: 0;
73
+ border: 2px solid var(--mw-border);
74
+ flex-shrink: 0;
75
+
76
+ &:first-child {
77
+ border-right: none;
78
+ border-radius: radius('sm') 0 0 radius('sm');
79
+ }
80
+
81
+ &:last-child {
82
+ border-left: none;
83
+ border-radius: 0 radius('sm') radius('sm') 0;
84
+ }
85
+ }
86
+
87
+ // Size variants — applied to the group, cascades to prefix/suffix
88
+ &-sm {
89
+ .mw-input-group-prefix,
90
+ .mw-input-group-suffix {
91
+ padding: spacing('1') spacing('2');
92
+ font-size: font-size('xs');
93
+ }
94
+ }
95
+
96
+ &-lg {
97
+ .mw-input-group-prefix,
98
+ .mw-input-group-suffix {
99
+ padding: spacing('3') spacing('4');
100
+ font-size: font-size('base');
101
+ }
102
+ }
103
+ }
@@ -0,0 +1,72 @@
1
+ @use '../abstracts' as *;
2
+
3
+ .mw-input {
4
+ width: 100%;
5
+ padding: spacing('2') spacing('3');
6
+ font-size: font-size('sm');
7
+ background: var(--mw-form-elements-background);
8
+ color: var(--mw-form-elements-color);
9
+ border: 2px solid var(--mw-border);
10
+ border-radius: radius('sm');
11
+ transition: var(--mw-transition);
12
+ font-family: inherit;
13
+
14
+ &::placeholder {
15
+ color: var(--mw-text-muted-color);
16
+ opacity: 0.7;
17
+ }
18
+
19
+ &:hover:not(:focus):not(:read-only):not(:disabled) {
20
+ border-color: var(--mw-gray-color);
21
+ }
22
+
23
+ &:focus {
24
+ outline: none;
25
+ border-color: var(--mw-primary-color);
26
+ box-shadow: 0 0 0 2px var(--mw-primary-background);
27
+ }
28
+
29
+ &:read-only {
30
+ background: var(--mw-gray-background);
31
+ color: var(--mw-text-muted-color);
32
+ cursor: default;
33
+ box-shadow: none;
34
+ }
35
+
36
+ &-sm {
37
+ padding: spacing('1') spacing('2');
38
+ font-size: font-size('xs');
39
+ }
40
+ &-lg {
41
+ padding: spacing('3') spacing('4');
42
+ font-size: font-size('base');
43
+ }
44
+ &-xl {
45
+ padding: spacing('4') spacing('5');
46
+ font-size: font-size('md');
47
+ }
48
+
49
+ // Date / time inputs — style the native picker indicator
50
+ &[type='date'],
51
+ &[type='time'],
52
+ &[type='datetime-local'] {
53
+ &::-webkit-calendar-picker-indicator {
54
+ cursor: pointer;
55
+ opacity: 0.55;
56
+ padding: 0;
57
+ margin-left: spacing('1');
58
+ transition: opacity 0.2s ease;
59
+
60
+ &:hover {
61
+ opacity: 1;
62
+ }
63
+ }
64
+ }
65
+
66
+ // disabled state
67
+ &:disabled {
68
+ background: var(--mw-gray-background);
69
+ color: var(--mw-text-muted-color);
70
+ cursor: not-allowed;
71
+ }
72
+ }
@@ -0,0 +1,62 @@
1
+ @use '../abstracts' as *;
2
+
3
+ .mw-login {
4
+ background: var(--mw-card-background);
5
+ border-radius: radius('sm') radius('xl') radius('sm') radius('xl');
6
+ box-shadow: 0 5px 10px var(--mw-shadow);
7
+ transition: var(--mw-transition);
8
+ border: 1px solid var(--mw-border);
9
+ position: relative;
10
+ overflow: hidden;
11
+ width: min(330px, 85%);
12
+ margin: spacing('2') auto;
13
+ padding: spacing('5');
14
+ display: flex;
15
+ flex-direction: column;
16
+ align-items: stretch;
17
+
18
+ @include media-down('xs') {
19
+ padding: spacing('7') spacing('4');
20
+ }
21
+
22
+ &-logo {
23
+ margin-bottom: spacing('8');
24
+
25
+ img {
26
+ display: block;
27
+ margin: spacing('0') auto;
28
+ height: 60px;
29
+ object-fit: contain;
30
+ }
31
+ }
32
+
33
+ &-message {
34
+ font-size: font-size('sm');
35
+ text-align: center;
36
+ margin-bottom: spacing('6');
37
+ line-height: 1.5;
38
+ color: var(--mw-text-muted-color);
39
+
40
+ // Variants
41
+ &-info {
42
+ color: var(--mw-info-color);
43
+ }
44
+
45
+ &-error {
46
+ color: var(--mw-danger-color);
47
+ }
48
+
49
+ // Multiple messages spacing
50
+ & + & {
51
+ margin-top: spacing('-3');
52
+ }
53
+ }
54
+
55
+ &-error {
56
+ border: 2px solid var(--mw-danger-color);
57
+ }
58
+
59
+ &.mw-form-actions {
60
+ width: 100%;
61
+ }
62
+ }
@@ -0,0 +1,144 @@
1
+ @use '../abstracts' as *;
2
+
3
+ $_mw-radio-colors: (
4
+ primary: var(--mw-primary-color),
5
+ secondary: var(--mw-secondary-color),
6
+ info: var(--mw-info-color),
7
+ success: var(--mw-success-color),
8
+ warning: var(--mw-warning-color),
9
+ danger: var(--mw-danger-color),
10
+ );
11
+
12
+ $_size-sm: spacing('3');
13
+ $_size-default: spacing('4');
14
+ $_size-lg: spacing('5');
15
+ $_size-xl: spacing('6');
16
+
17
+ .mw-radio-group {
18
+ display: flex;
19
+ flex-direction: column;
20
+ gap: spacing('3');
21
+
22
+ &-inline {
23
+ flex-direction: row;
24
+ align-items: center;
25
+ gap: spacing('6');
26
+ @include media-down('sm') {
27
+ gap: spacing('4');
28
+ }
29
+ }
30
+ }
31
+
32
+ .mw-radio {
33
+ display: inline-flex;
34
+ align-items: center;
35
+ gap: spacing('2');
36
+ cursor: pointer;
37
+ user-select: none;
38
+
39
+ // hide native radio
40
+ input[type='radio'] {
41
+ position: absolute;
42
+ opacity: 0;
43
+ width: 0;
44
+ height: 0;
45
+ }
46
+
47
+ .mw-radio-button {
48
+ position: relative;
49
+ flex-shrink: 0;
50
+ width: $_size-default;
51
+ height: $_size-default;
52
+ border: 2px solid var(--mw-border);
53
+ border-radius: 50%;
54
+ transition: var(--mw-transition);
55
+ background: var(--mw-form-elements-background);
56
+
57
+ &::after {
58
+ content: '';
59
+ position: absolute;
60
+ top: 50%;
61
+ left: 50%;
62
+ width: 50%;
63
+ height: 50%;
64
+ background: var(--mw-primary-color);
65
+ border-radius: 50%;
66
+ transform: translate(-50%, -50%) scale(0);
67
+ transition: var(--mw-transition);
68
+ }
69
+ }
70
+
71
+ // focus-visible state
72
+ input[type='radio']:focus-visible + .mw-radio-button {
73
+ box-shadow: 0 0 0 2px var(--mw-primary-background);
74
+ border-color: var(--mw-primary-color);
75
+ }
76
+
77
+ input[type='radio']:checked + .mw-radio-button {
78
+ border-color: var(--mw-primary-color);
79
+ }
80
+ input[type='radio']:checked + .mw-radio-button::after {
81
+ transform: translate(-50%, -50%) scale(1);
82
+ }
83
+
84
+ .mw-radio-label {
85
+ font-size: font-size('sm');
86
+ color: var(--mw-text-color);
87
+ }
88
+
89
+ // size variants
90
+ &-sm {
91
+ .mw-radio-button {
92
+ width: $_size-sm;
93
+ height: $_size-sm;
94
+ }
95
+ .mw-radio-label {
96
+ font-size: font-size('xs');
97
+ }
98
+ }
99
+ &-lg {
100
+ .mw-radio-button {
101
+ width: $_size-lg;
102
+ height: $_size-lg;
103
+ }
104
+ .mw-radio-label {
105
+ font-size: font-size('base');
106
+ }
107
+ }
108
+ &-xl {
109
+ .mw-radio-button {
110
+ width: $_size-xl;
111
+ height: $_size-xl;
112
+ }
113
+ .mw-radio-label {
114
+ font-size: font-size('md');
115
+ }
116
+ }
117
+
118
+ // color variants
119
+ @each $name, $col in $_mw-radio-colors {
120
+ &-#{$name} {
121
+ input[type='radio']:checked + .mw-radio-button {
122
+ border-color: #{$col};
123
+ }
124
+ input[type='radio']:checked + .mw-radio-button::after {
125
+ background: #{$col};
126
+ }
127
+ }
128
+ }
129
+
130
+ // disabled
131
+ &-disabled {
132
+ cursor: not-allowed;
133
+
134
+ input[type='radio'] {
135
+ cursor: not-allowed;
136
+ }
137
+ .mw-radio-button {
138
+ background: var(--mw-gray-background);
139
+ }
140
+ .mw-radio-label {
141
+ color: var(--mw-text-muted-color);
142
+ }
143
+ }
144
+ }
@@ -0,0 +1,56 @@
1
+ @use '../abstracts' as *;
2
+
3
+ .mw-select {
4
+ width: 100%;
5
+ padding: spacing('2') spacing('6') spacing('2') spacing('3');
6
+ font-size: font-size('sm');
7
+ background: var(--mw-form-elements-background);
8
+ color: var(--mw-form-elements-color);
9
+ border: 2px solid var(--mw-border);
10
+ border-radius: radius('sm');
11
+ transition: var(--mw-transition);
12
+ appearance: none;
13
+ -webkit-appearance: none;
14
+ background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 10 6'%3E%3Cpath fill='%23666' d='M0 0l5 6 5-6z'/%3E%3C/svg%3E");
15
+ background-repeat: no-repeat;
16
+ background-position: right spacing('3') center;
17
+ background-size: spacing('3') spacing('3');
18
+ font-family: inherit;
19
+
20
+ &:hover:not(:focus):not(:disabled) {
21
+ border-color: var(--mw-gray-color);
22
+ }
23
+
24
+ &:focus {
25
+ outline: none;
26
+ border-color: var(--mw-primary-color);
27
+ box-shadow: 0 0 0 2px var(--mw-primary-background);
28
+ }
29
+
30
+ // size modifiers
31
+ &-sm {
32
+ padding: spacing('1') spacing('5') spacing('1') spacing('2');
33
+ font-size: font-size('xs');
34
+ background-position: right spacing('2') center;
35
+ background-size: spacing('2') spacing('2');
36
+ }
37
+ &-lg {
38
+ padding: spacing('3') spacing('7') spacing('3') spacing('4');
39
+ font-size: font-size('base');
40
+ background-position: right spacing('4') center;
41
+ background-size: spacing('4') spacing('4');
42
+ }
43
+ &-xl {
44
+ padding: spacing('4') spacing('8') spacing('4') spacing('5');
45
+ font-size: font-size('md');
46
+ background-position: right spacing('5') center;
47
+ background-size: spacing('5') spacing('5');
48
+ }
49
+
50
+ // disabled state
51
+ &:disabled {
52
+ background: var(--mw-gray-background);
53
+ color: var(--mw-text-muted-color);
54
+ cursor: not-allowed;
55
+ }
56
+ }
@@ -0,0 +1,174 @@
1
+ // _slider.scss
2
+ @use '../abstracts' as *;
3
+
4
+ // color map
5
+ $_mw-slider-colors: (
6
+ primary: var(--mw-primary-color),
7
+ secondary: var(--mw-secondary-color),
8
+ info: var(--mw-info-color),
9
+ success: var(--mw-success-color),
10
+ warning: var(--mw-warning-color),
11
+ danger: var(--mw-danger-color),
12
+ );
13
+
14
+ .mw-slider {
15
+ --value: 0%;
16
+ --fill: var(--mw-primary-color);
17
+ --track: var(--mw-gray-background);
18
+
19
+ width: 100%;
20
+ height: 10px;
21
+ background: linear-gradient(
22
+ to right,
23
+ var(--fill) 0,
24
+ var(--fill) var(--value),
25
+ var(--track) var(--value),
26
+ var(--track) 100%
27
+ );
28
+ border-radius: radius('sm');
29
+ appearance: none;
30
+ cursor: pointer;
31
+ margin-top: 0.35rem;
32
+
33
+ // thumb
34
+ &::-webkit-slider-thumb {
35
+ -webkit-appearance: none;
36
+ width: spacing('5');
37
+ height: spacing('5');
38
+ background: var(--fill);
39
+ border: 2px solid var(--mw-border);
40
+ border-radius: 50%;
41
+ margin-top: spacing('0');
42
+ transition:
43
+ transform 0.2s ease,
44
+ border-color 0.2s ease;
45
+ }
46
+ &::-webkit-slider-thumb:hover {
47
+ transform: scale(1.1);
48
+ }
49
+
50
+ &::-moz-range-thumb {
51
+ width: spacing('5');
52
+ height: spacing('5');
53
+ border: 2px solid var(--fill);
54
+ border-radius: 50%;
55
+ transition:
56
+ transform 0.2s ease,
57
+ border-color 0.2s ease;
58
+ }
59
+ &::-moz-range-thumb:hover {
60
+ transform: scale(1.1);
61
+ }
62
+
63
+ // track styling for Firefox
64
+ &::-moz-range-track {
65
+ background: transparent;
66
+ }
67
+
68
+ // IE
69
+ &::-ms-fill-lower {
70
+ background: var(--fill);
71
+ }
72
+ &::-ms-fill-upper {
73
+ background: var(--track);
74
+ }
75
+ &::-ms-thumb {
76
+ width: spacing('5');
77
+ height: spacing('5');
78
+ border: 2px solid var(--fill);
79
+ border-radius: 50%;
80
+ }
81
+
82
+ // sizes
83
+ &-sm {
84
+ height: 6px;
85
+ &::-webkit-slider-thumb {
86
+ width: spacing('4');
87
+ height: spacing('4');
88
+ }
89
+ &::-moz-range-thumb {
90
+ width: spacing('4');
91
+ height: spacing('4');
92
+ }
93
+ &::-ms-thumb {
94
+ width: spacing('4');
95
+ height: spacing('4');
96
+ }
97
+ }
98
+ &-lg {
99
+ height: 16px;
100
+ margin-top: 0.35rem;
101
+ &::-webkit-slider-thumb {
102
+ width: spacing('6');
103
+ height: spacing('6');
104
+ }
105
+ &::-moz-range-thumb {
106
+ width: spacing('6');
107
+ height: spacing('6');
108
+ }
109
+ &::-ms-thumb {
110
+ width: spacing('6');
111
+ height: spacing('6');
112
+ }
113
+ }
114
+ &-xl {
115
+ height: 22px;
116
+ margin-top: 0.45rem;
117
+ &::-webkit-slider-thumb {
118
+ width: spacing('7');
119
+ height: spacing('7');
120
+ }
121
+ &::-moz-range-thumb {
122
+ width: spacing('7');
123
+ height: spacing('7');
124
+ }
125
+ &::-ms-thumb {
126
+ width: spacing('7');
127
+ height: spacing('7');
128
+ }
129
+ }
130
+
131
+ // disabled
132
+ &:disabled {
133
+ opacity: 0.3;
134
+ cursor: not-allowed;
135
+ }
136
+
137
+ // color variants
138
+ @each $name, $col in $_mw-slider-colors {
139
+ &-#{$name} {
140
+ --fill: #{$col};
141
+ }
142
+ }
143
+ }
144
+
145
+ .mw-slider-container {
146
+ position: relative;
147
+ width: 100%;
148
+ line-height: 0.9;
149
+ padding-bottom: 0.4rem;
150
+
151
+ // the badge in top-right
152
+ .mw-slider-value {
153
+ position: absolute;
154
+ top: -17px;
155
+ right: 7px;
156
+ font-size: font-size('sm');
157
+ color: var(--mw-text-muted-color);
158
+ pointer-events: none;
159
+
160
+ @include media-down('sm') {
161
+ font-size: font-size('xs');
162
+ top: -15px;
163
+ }
164
+
165
+ // 1–10 numeric style
166
+ &.mw-slider-numeric::after {
167
+ content: attr(data-value) '/10';
168
+ }
169
+ // percentage style
170
+ &.mw-slider-percent::after {
171
+ content: attr(data-value) '%';
172
+ }
173
+ }
174
+ }
@@ -0,0 +1,74 @@
1
+ // _textarea.scss
2
+ @use '../abstracts' as *;
3
+
4
+ .mw-textarea {
5
+ width: 100%;
6
+ height: auto;
7
+ padding: spacing('2') spacing('3');
8
+ font-size: font-size('sm');
9
+ background: var(--mw-form-elements-background);
10
+ color: var(--mw-form-elements-color);
11
+ border: 2px solid var(--mw-border);
12
+ border-radius: radius('sm');
13
+ transition: var(--mw-transition);
14
+ resize: none;
15
+ font-family: inherit;
16
+
17
+ &::placeholder {
18
+ color: var(--mw-text-muted-color);
19
+ opacity: 0.7;
20
+ }
21
+
22
+ &:hover:not(:focus):not(:read-only):not(:disabled) {
23
+ border-color: var(--mw-gray-color);
24
+ }
25
+
26
+ &:focus {
27
+ outline: none;
28
+ border-color: var(--mw-primary-color);
29
+ box-shadow: 0 0 0 2px var(--mw-primary-background);
30
+ }
31
+
32
+ &:read-only {
33
+ background: var(--mw-gray-background);
34
+ color: var(--mw-text-muted-color);
35
+ cursor: default;
36
+ box-shadow: none;
37
+ }
38
+
39
+ &-sm {
40
+ padding: spacing('1') spacing('2');
41
+ font-size: font-size('xs');
42
+ }
43
+ &-lg {
44
+ min-height: spacing('11');
45
+ padding: spacing('3') spacing('4');
46
+ font-size: font-size('base');
47
+ }
48
+ &-xl {
49
+ min-height: spacing('12');
50
+ padding: spacing('4') spacing('5');
51
+ font-size: font-size('md');
52
+ }
53
+
54
+ &-resizable {
55
+ resize: both;
56
+ }
57
+ &-resizable-vertical {
58
+ resize: vertical;
59
+ }
60
+ &-resizable-horizontal {
61
+ resize: horizontal;
62
+ }
63
+
64
+ // disabled state
65
+ &:disabled {
66
+ background: var(--mw-gray-background);
67
+ color: var(--mw-text-muted-color);
68
+ cursor: not-allowed;
69
+ }
70
+ }
71
+
72
+ .mw-textarea:not([rows]) {
73
+ min-height: spacing('10');
74
+ }